primal-sieve-0.3.6/.cargo_vcs_info.json0000644000000001520000000000100134350ustar { "git": { "sha1": "fd09436cecf81fac48d7514bd50deb7818fd7bc1" }, "path_in_vcs": "primal-sieve" }primal-sieve-0.3.6/Cargo.toml0000644000000024000000000000100114310ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2018" name = "primal-sieve" version = "0.3.6" authors = ["Huon Wilson "] description = """ A high performance prime sieve. """ homepage = "https://github.com/huonw/primal" documentation = "http://docs.rs/primal-sieve/" keywords = [ "math", "mathematics", "primes", "number-theory", ] license = "MIT OR Apache-2.0" repository = "https://github.com/huonw/primal" [[bench]] name = "bench" harness = false [dependencies.primal-bit] version = "0.3" [dependencies.primal-estimate] version = "0.3" [dependencies.smallvec] version = "1" [dev-dependencies.criterion] version = "0.3.4" features = ["html_reports"] [dev-dependencies.primal] version = "0.3" [dev-dependencies.primal-slowsieve] version = "0.3" [features] safe = [] slow_tests = [] unstable = [] primal-sieve-0.3.6/Cargo.toml.orig000064400000000000000000000015131046102023000151160ustar 00000000000000[package] name = "primal-sieve" version = "0.3.6" authors = ["Huon Wilson "] edition = "2018" homepage = "https://github.com/huonw/primal" repository = "https://github.com/huonw/primal" documentation = "http://docs.rs/primal-sieve/" license = "MIT OR Apache-2.0" keywords = ["math", "mathematics", "primes", "number-theory"] description = """ A high performance prime sieve. """ [dependencies] primal-bit = { path = "../primal-bit", version = "0.3" } primal-estimate = { path = "../primal-estimate", version = "0.3" } smallvec = "1" [dev-dependencies] primal-slowsieve = { path = "../primal-slowsieve", version = "0.3" } primal = { path = "..", version = "0.3" } criterion = { version = "0.3.4", features = ["html_reports"] } [[bench]] name = "bench" harness = false [features] unstable = [] safe = [] slow_tests = [] primal-sieve-0.3.6/LICENSE-APACHE000064400000000000000000000251371046102023000141630ustar 00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. primal-sieve-0.3.6/LICENSE-MIT000064400000000000000000000020361046102023000136640ustar 00000000000000Copyright (c) 2014 Huon Wilson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.primal-sieve-0.3.6/benches/bench.rs000064400000000000000000000057051046102023000152720ustar 00000000000000#[macro_use] extern crate criterion; use criterion::{BenchmarkId, Criterion}; use primal_sieve::{Primes, Sieve, StreamingSieve}; const SIZES: [usize; 5] = [100, 10_000, 100_000, 1_000_000, 10_000_000]; macro_rules! create_benchmarks { ($( fn $group_id: ident($input: expr) { $($name: expr => $func: expr,)* } )*) => { $( fn $group_id(c: &mut Criterion) { let input = $input; let mut group = c.benchmark_group(stringify!($group_id)); $( for i in &input { let id = BenchmarkId::new($name, i); group.bench_with_input(id, i, $func); } )* group.finish(); } )* } } create_benchmarks! { fn new(SIZES) { "Sieve" => |b, upto: &usize| b.iter(|| Sieve::new(*upto)), } fn prime_pi(SIZES) { "Sieve" => |b, upto: &usize| { let s = Sieve::new(*upto + 1); b.iter(|| s.prime_pi(*upto)); }, "Sieve with init" => |b, upto: &usize| { b.iter(|| { let s = Sieve::new(*upto + 1); s.prime_pi(*upto) }); }, "StreamingSieve" => |b, upto: &usize| { b.iter(|| StreamingSieve::prime_pi(*upto)) }, "Primes" => |b, upto: &usize| { b.iter(|| Primes::all().take_while(|x| *x <= *upto).count()) }, } fn nth_prime([100, 10_000, 100_000, 1_000_000]) { "Sieve" => |b, n: &usize| { let (_, hi) = primal_estimate::nth_prime(*n as u64); let s = Sieve::new(hi as usize); b.iter(|| s.nth_prime(*n)); }, "Sieve with init" => |b, n: &usize| { b.iter(|| { let (_, hi) = primal_estimate::nth_prime(*n as u64); let s = Sieve::new(hi as usize); s.nth_prime(*n) }); }, "StreamingSieve" => |b, n: &usize| { b.iter(|| StreamingSieve::nth_prime(*n)) }, "Primes" => |b, n: &usize| { b.iter(|| Primes::all().nth(*n - 1).unwrap()) }, } fn iterate(SIZES) { "Sieve" => |b, upto: &usize| { let s = Sieve::new(*upto); b.iter(|| s.primes_from(0).count()); }, "Sieve with init" => |b, upto: &usize| { b.iter(|| { let s = Sieve::new(*upto); s.primes_from(0).count() }); }, "Primes" => |b, upto: &usize| { b.iter(|| Primes::all().take_while(|p| *p < *upto).count()) }, } fn factor([131, 7561, 65521, 1048573, 2*3*5*7*11*13*17*19]) { "Sieve" => |b, n: &usize| { let s = Sieve::new(0x10000); b.iter(|| s.factor(*n).ok()); }, } } criterion_group!(benches, new, prime_pi, nth_prime, factor, iterate); criterion_main!(benches); primal-sieve-0.3.6/src/lib.rs000075500000000000000000000015301046102023000141340ustar 00000000000000//! Highly optimised prime sieves. //! //! This is designed to be used via the `primal` crate. // black boxes for pointers; LLVM isn't so happy without // them. Unfortunately only usable with 1.59+ asm!, but the code isn't // *too* much slower without them. #[cfg(feature = "unstable")] #[inline(always)] fn b(mut p: *mut T) -> *mut T { unsafe { core::arch::asm!("/* {0} */", inout(reg) p) } p } #[cfg(not(feature = "unstable"))] #[inline(always)] fn b(p: *mut T) -> *mut T { p } #[cfg(feature = "safe")] macro_rules! safe_assert { ($x: expr) => { assert!($x); } } #[cfg(not(feature = "safe"))] macro_rules! safe_assert { ($x: expr) => { () } } mod streaming; pub use crate::streaming::StreamingSieve; pub use crate::streaming::primes::Primes; // mod wheel6; mod wheel; mod sieve; pub use crate::sieve::{Sieve, SievePrimes}; primal-sieve-0.3.6/src/sieve.rs000064400000000000000000000606441046102023000145110ustar 00000000000000use primal_bit::BitVec; use crate::wheel; use crate::streaming::StreamingSieve; use std::cmp; use std::slice; type SmallVec1 = ::smallvec::SmallVec<[T; 1]>; /// A heavily optimised prime sieve. /// /// This stores information about primes up to some specified limit, /// allowing efficient queries of information about them. This caches /// the successive outputs of `StreamingSieve` and has very similar /// performance, modulo the differences in memory use: to cache the /// information `Sieve` uses approximately `limit / 30 + /// O(sqrt(limit))` bytes of memory. Consider directly using /// `StreamingSieve` if repeated queries are unnecessary, since that /// uses only `O(sqrt(limit))` bytes. /// /// # Examples /// /// ```rust /// let sieve = primal::Sieve::new(10_000_000); /// assert_eq!(sieve.prime_pi(123456), 11601); /// /// assert!(sieve.is_prime(6395047)); /// assert!(!sieve.is_prime(6395048)); /// ``` #[derive(Debug)] pub struct Sieve { seg_bits: usize, nbits: usize, seen: SmallVec1, } #[derive(Debug)] struct Item { count: usize, bits: BitVec, } impl Item { fn new(x: BitVec, so_far: &mut usize) -> Item { *so_far += x.count_ones(); Item { count: *so_far, bits: x, } } } impl Sieve { /// Create a new instance, sieving out all the primes up to /// `limit`. pub fn new(limit: usize) -> Sieve { let mut seen = SmallVec1::new(); let mut nbits = 0; let mut so_far = 0; let mut seg_bits = None; match wheel::small_for(limit) { Some(bits) => { nbits = bits.len(); seen.push(Item::new(bits, &mut 0)); seg_bits = Some(nbits) } None => { let mut stream = StreamingSieve::new(limit); while let Some((n, bits)) = stream.next() { let bits_limit = wheel::bit_index((limit - n).saturating_add(1)).1; seen.push(Item::new(bits.clone(), &mut so_far)); nbits += cmp::min(bits.len(), bits_limit); match seg_bits { None => seg_bits = Some(bits.len()), Some(old) => assert_eq!(old, bits.len()), } } } } // this is a bit of a lie, but this length only matters when // computing indices into `seen`, and everything will be in // the first and only one in this case, so we better ensure // that all queries get fed into that array (there's been // panics from the limit being used as a query for // e.g. prime_pi, as split_index would return (1, 0), // suggesting that code look at a non-existant element of // seen). let seg_bits_adjust = if seen.len() == 1 { 1 } else { 0 }; Sieve { seg_bits: seg_bits.unwrap() + seg_bits_adjust, nbits, seen, } } fn split_index(&self, idx: usize) -> (usize, usize) { (idx / self.seg_bits, idx % self.seg_bits) } fn index_for(&self, n: usize) -> (bool, usize, usize) { let (b, idx) = wheel::bit_index(n); let (base, tweak) = self.split_index(idx); (b, base, tweak) } fn prime_pi_chunk(&self, n: usize) -> usize { if n == 0 { 0 } else { self.seen[n - 1].count } } /// Return the largest number that this sieve knows about. /// /// It will be at least as large as the number passed to `new`, /// but may be slightly larger. /// /// # Examples /// /// ```rust /// let sieve = primal::Sieve::new(1000); /// /// assert!(sieve.upper_bound() >= 1000); /// ``` pub fn upper_bound(&self) -> usize { wheel::upper_bound(self.nbits) } /// Determine if `n` is a prime number. /// /// # Panics /// /// If `n` is out of range (greater than `self.upper_bound()`), /// `is_prime` will panic. /// /// # Examples /// /// ```rust /// let sieve = primal::Sieve::new(1000); /// /// assert_eq!(sieve.is_prime(0), false); /// assert_eq!(sieve.is_prime(1), false); /// assert_eq!(sieve.is_prime(2), true); /// assert_eq!(sieve.is_prime(3), true); /// assert_eq!(sieve.is_prime(4), false); /// assert_eq!(sieve.is_prime(5), true); /// /// assert_eq!(sieve.is_prime(991), true); /// assert_eq!(sieve.is_prime(993), false); /// assert_eq!(sieve.is_prime(995), false); /// assert_eq!(sieve.is_prime(997), true); /// assert_eq!(sieve.is_prime(999), false); /// ``` pub fn is_prime(&self, n: usize) -> bool { match self.index_for(n) { (false, _, _) => n == 2 || n == 3 || n == 5 || n == 7, (true, base, tweak) => self.seen[base].bits[tweak], } } /// Count the number of primes upto and including `n`. /// /// # Panics /// /// If `n` is out of range (greater than `self.upper_bound()`), /// `prime_pi` will panic. /// /// # Examples /// /// ```rust /// let sieve = primal::Sieve::new(1000); /// /// assert_eq!(sieve.prime_pi(10), 4); /// // the endpoint is included /// assert_eq!(sieve.prime_pi(11), 5); /// /// assert_eq!(sieve.prime_pi(100), 25); /// assert_eq!(sieve.prime_pi(1000), 168); /// ``` pub fn prime_pi(&self, n: usize) -> usize { assert!(n <= self.upper_bound()); match n { 0..=1 => 0, 2 => 1, 3..=4 => 2, 5..=6 => 3, 7..=10 => 4, _ => { let (includes, base, tweak) = self.index_for(n); let mut count = match wheel::BYTE_MODULO { 30 => 3, _ => unimplemented!() }; count += self.prime_pi_chunk(base); count += self.seen[base].bits.count_ones_before(tweak + includes as usize); count } } } /// Factorise `n` into (prime, exponent) pairs. /// /// Returns `Err((leftover, partial factorisation))` if `n` cannot /// be fully factored, or if `n` is zero (`leftover == 0`). A /// number can not be completely factored if and only if the prime /// factors of `n` are too large for this sieve, that is, if there /// is /// /// - a prime factor larger than `U^2`, or /// - more than one prime factor between `U` and `U^2` /// /// where `U` is the upper bound of the primes stored in this /// sieve. /// /// Notably, any number between `U` and `U^2` can always be fully /// factored, since these numbers are guaranteed to only have zero /// or one prime factors larger than `U`. /// /// # Examples /// /// ```rust /// let sieve = primal::Sieve::new(100); /// /// assert_eq!(sieve.factor(2), Ok(vec![(2, 1)])); /// assert_eq!(sieve.factor(4), Ok(vec![(2, 2)])); /// assert_eq!(sieve.factor(1 << 31), Ok(vec![(2, 31)])); /// /// assert_eq!(sieve.factor(18), Ok(vec![(2, 1), (3, 2)])); /// /// assert_eq!(sieve.factor(25 * 81), Ok(vec![(3, 4), (5, 2)])); /// /// // "large" prime factors are OK, as long as there's only one /// assert_eq!(sieve.factor(2 * 3 * 97 * 97 * 991), /// Ok(vec![(2, 1), (3, 1), (97, 2), (991, 1)])); /// /// // too many large factors is problematic /// assert_eq!(sieve.factor(991 * 991), /// Err((991 * 991, vec![]))); /// assert_eq!(sieve.factor(2 * 3 * 17 * 17 * 991 * 991), /// Err((991 * 991, vec![(2, 1), (3, 1), (17, 2)]))); /// ``` pub fn factor(&self, mut n: usize) -> Result, (usize, Vec<(usize, usize)>)> { if n == 0 { return Err((0, vec![])) } if n == 1 { return Ok(vec![]) } let mut ret = Vec::new(); // Using optimized internal iteration self.primes_from(0).for_each_while(|p| { if n % p == 0 { n /= p; let mut count = 1; while n % p == 0 { n /= p; count += 1; } ret.push((p,count)); } p.saturating_mul(p) < n }); if n != 1 { let b = self.upper_bound(); if let Some(bb) = b.checked_mul(b) { if bb < n { // large factors :( return Err((n, ret)) } } // n is not divisible by anything from 1..=sqrt(n), so // must be prime itself! (That is, even though we // don't know this prime specifically, we can infer // that it must be prime.) ret.push((n, 1)); } Ok(ret) } /// Compute *pn*, the `n` prime number, 1-indexed /// (i.e. *p1* = 2, *p2* = 3). /// /// # Panics /// /// `n` must be larger than 0 and less than the total number of /// primes in this sieve (that is, /// `self.prime_pi(self.upper_bound())`). /// /// # Example /// /// ```rust /// let (_, hi) = primal::estimate_nth_prime(1_000); /// /// let sieve = primal::Sieve::new(hi as usize); /// /// assert_eq!(sieve.nth_prime(10), 29); /// assert_eq!(sieve.nth_prime(100), 541); /// assert_eq!(sieve.nth_prime(1_000), 7919); /// ``` pub fn nth_prime(&self, n: usize) -> usize { match n { 1 => 2, 2 => 3, 3 => 5, _ => { assert!(0 < n && n <= 3 + self.prime_pi_chunk(self.seen.len())); // the bit vectors don't store the first three primes, // so we're looking for this (one-indexed) bit let bit_n = n - 3; let chunk_idx = self.seen.binary_search_by(|x| x.count.cmp(&bit_n)) .unwrap_or_else(|x| x); let chunk_bits = self.prime_pi_chunk(chunk_idx); let bit_idx = self.seen[chunk_idx].bits.find_nth_bit(bit_n - chunk_bits - 1); wheel::from_bit_index(chunk_idx * self.seg_bits + bit_idx.unwrap()) } } } /// Return an iterator over the primes from `n` (inclusive) to the /// end of this sieve. /// /// NB. it is not guaranteed that the end is the same as the limit /// passed to `new`: it may be larger. Consider using `take_while` /// if the limit must be exact. /// /// # Panics /// /// If `n` is out of range (greater than `self.upper_bound()`), /// `primes_from` will panic. /// /// # Examples /// /// ```rust /// let sieve = primal::Sieve::new(1_000); /// /// // print the three digit primes /// for p in sieve.primes_from(100).take_while(|x| *x < 1000) { /// println!("{}", p); /// } /// ``` pub fn primes_from(&self, n: usize) -> SievePrimes<'_> { assert!(n <= self.upper_bound()); let early = match n { 0..=2 => Early::Two, 3 => Early::Three, 4..=5 => Early::Five, _ => Early::Done }; let (_, base, tweak) = self.index_for(n); assert!(self.seen.len() == 1 || self.seg_bits % 8 == 0); let base_byte_count = base * self.seg_bits / 8; let bits = &self.seen[base].bits; let current_base = base_byte_count * wheel::BYTE_MODULO; let next_base = current_base + bits.len() * wheel::BYTE_MODULO / 8; SievePrimes { early, base: current_base, next_base, ones: bits.ones_from(tweak), limit: self.upper_bound(), bits: self.seen[base + 1..].iter(), } } } #[derive(Clone)] enum Early { Two, Three, Five, Done, } /// An iterator over the primes stored in a `Sieve` instance. #[derive(Clone)] pub struct SievePrimes<'a> { early: Early, base: usize, next_base: usize, limit: usize, ones: primal_bit::Ones<'a>, bits: slice::Iter<'a, Item>, } impl<'a> SievePrimes<'a> { #[inline] fn from_bit_index(&self, i: usize) -> Option { let w = wheel::from_bit_index(i); match self.base.checked_add(w) { Some(p) if p <= self.limit => Some(p), _ => None, } } fn advance_ones(&mut self) -> bool { match self.bits.next() { Some(Item { bits, .. }) => { self.base = self.next_base; self.next_base += bits.len() * wheel::BYTE_MODULO / 8; self.ones = bits.ones_from(0); true }, None => false, } } // Private method specifically to get internal iteration in `factor`. // When `Try` is stable, we could more generally override `try_fold`, but // that also requires keeping all state consistent, like `self.early`. fn for_each_while(mut self, mut f: F) where F: FnMut(usize) -> bool, { if !match self.early { Early::Done => true, Early::Two => f(2) && f(3) && f(5), Early::Three => f(3) && f(5), Early::Five => f(5), } { return; } loop { while let Some(i) = self.ones.next() { match self.from_bit_index(i) { Some(p) => if !f(p) { return }, None => return, } } if !self.advance_ones() { return; } } } } // See also `Iterator for Primes` with nearly identical code. impl<'a> Iterator for SievePrimes<'a> { type Item = usize; #[inline] fn next(&mut self) -> Option { match self.early { Early::Done => {} Early::Two => { self.early = Early::Three; return Some(2) } Early::Three => { self.early = Early::Five; return Some(3) } Early::Five => { self.early = Early::Done; return Some(5) } } loop { if let Some(i) = self.ones.next() { return self.from_bit_index(i); } if !self.advance_ones() { return None; } } } fn fold(mut self, mut acc: Acc, mut f: F) -> Acc where F: FnMut(Acc, Self::Item) -> Acc { match self.early { Early::Done => {} Early::Two => { acc = f(acc, 2); acc = f(acc, 3); acc = f(acc, 5); } Early::Three => { acc = f(acc, 3); acc = f(acc, 5); } Early::Five => { acc = f(acc, 5); } } loop { while let Some(i) = self.ones.next() { match self.from_bit_index(i) { Some(p) => acc = f(acc, p), None => return acc, } } if !self.advance_ones() { return acc; } } } } #[cfg(test)] mod tests { use primal_slowsieve::Primes; use super::Sieve; #[test] fn small() { let larger = Sieve::new(100_000); for limit in 2..1_000 { let sieve = Sieve::new(limit); assert!(sieve.upper_bound() >= limit); let primes = sieve.prime_pi(limit); assert_eq!(primes, larger.prime_pi(limit)); let nth = sieve.nth_prime(primes); assert!(nth <= limit); assert_eq!(nth, larger.nth_prime(primes)); } } #[test] fn is_prime() { let limit = 2_000_000; let real = Primes::sieve(limit); let primes = Sieve::new(limit); for i in 0..limit { assert!(primes.is_prime(i) == real.is_prime(i), "failed for {} (real = {})", i, real.is_prime(i)); } } #[test] fn primes_from_smoke() { let limit = 100; let primes = Sieve::new(limit); let real = &[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]; for i in 0..limit { let idx = real.iter().position(|x| *x >= i).unwrap_or(real.len()); assert_eq!(primes.primes_from(i).take_while(|x| *x <= limit).collect::>(), &real[idx..]); } } #[test] fn primes_from_count() { let limit = 2_100_000; let primes = Sieve::new(limit); let upto = 2_000_000; assert_eq!(primes.primes_from(0).take_while(|x| *x <= upto).count(), primes.prime_pi(upto)); } #[test] fn primes_from_equality() { let limit = 2_000_000; let primes = Sieve::new(limit); let real = Primes::sieve(limit); let real = real.primes().take_while(|x| *x <= limit); let computed = primes.primes_from(0).take_while(|x| *x <= limit); let mut i = 0; for (r, p) in real.zip(computed) { assert_eq!(r, p); i += 1; } assert_eq!(i, primes.prime_pi(limit)); } #[test] fn primes_from_no_overrun() { let real = Sieve::new(1000); for i in 0..100 { let i = i * 38 / 39 + 1; let sieve = Sieve::new(i); for p in sieve.primes_from(0) { assert!(real.is_prime(p)); } } } #[test] fn upper_bound() { for i in 1..1000 { let primes = Sieve::new(i); assert!(primes.upper_bound() >= i); } let range = if cfg!(feature = "slow_tests") { 1..200 } else { 100..120 }; for i in range { let i = i * 10_000; let primes = Sieve::new(i); assert!(primes.upper_bound() >= i); } } #[test] fn prime_pi() { let (limit, mult) = if cfg!(feature = "slow_tests") { (2_000_000, 19_998) } else { (200_000, 1_998) }; let primes = Sieve::new(limit); let real = Primes::sieve(limit); for i in (0..20).chain((0..100).map(|n| n * mult + 1)) { let val = primes.prime_pi(i); let true_ = real.primes().take_while(|p| *p <= i).count(); assert!(val == true_, "failed for {}, true {}, computed {}", i, true_, val) } } #[test] fn factor() { let primes = Sieve::new(1000); let tests: &[(usize, &[(usize, usize)])] = &[ (1, &[]), (2, &[(2_usize, 1)]), (3, &[(3, 1)]), (4, &[(2, 2)]), (5, &[(5, 1)]), (6, &[(2, 1), (3, 1)]), (7, &[(7, 1)]), (8, &[(2, 3)]), (9, &[(3, 2)]), (10, &[(2, 1), (5, 1)]), (2*2*2*2*2 * 3*3*3*3*3, &[(2, 5), (3,5)]), (2*3*5*7*11*13*17*19, &[(2,1), (3,1), (5,1), (7,1), (11,1), (13,1), (17,1), (19,1)]), // a factor larger than that stored in the map (7561, &[(7561, 1)]), (2*7561, &[(2, 1), (7561, 1)]), (4*5*7561, &[(2, 2), (5,1), (7561, 1)]), ]; for &(n, expected) in tests.iter() { assert_eq!(primes.factor(n), Ok(expected.to_vec())); } } #[test] fn factor_compare() { let short = Sieve::new(30); let long = Sieve::new(10000); let short_lim = short.upper_bound() * short.upper_bound() + 1; // every number less than bound^2 can be factored (since they // always have a factor <= bound). for n in 0..short_lim { assert_eq!(short.factor(n), long.factor(n)) } // larger numbers can only sometimes be factored 'next_n: for n in short_lim..10000 { let possible = short.factor(n); let real = long.factor(n).ok().unwrap(); let mut seen_small = None; for (this_idx, &(p,i)) in real.iter().enumerate() { let last_short_prime = if p >= short_lim { this_idx } else if p > short.upper_bound() { match seen_small { Some(idx) => idx, None if i > 1 => this_idx, None => { // we can cope with one seen_small = Some(this_idx); continue } } } else { // small enough continue }; // break into the two parts let (low, hi) = real.split_at(last_short_prime); let leftover = hi.iter().fold(1, |x, &(p, i)| x * p.pow(i as u32)); assert_eq!(possible, Err((leftover, low.to_vec()))); continue 'next_n; } // if we're here, we know that everything should match assert_eq!(possible, Ok(real)) } } #[test] #[cfg_attr(not(feature = "slow_tests"), ignore)] fn factor_overflow() { // if bound^2 overflows usize, we can factor any usize, // but must take care to not hit overflow assertions. // set up a limit that would overflow if naively squared, and a // prime greater than that limit. (these are more than double) #[cfg(target_pointer_width = "32")] const LIMIT_PRIME: (usize, usize) = (0x10000, 0x2001d); #[cfg(target_pointer_width = "64")] const LIMIT_PRIME: (usize, usize) = (0x100000000, 0x200000011); let (limit, prime) = LIMIT_PRIME; let primes = Sieve::new(limit); assert!(prime > primes.upper_bound()); assert_eq!(primes.factor(prime), Ok(vec![(prime, 1)])); } #[test] fn factor_failures() { let primes = Sieve::new(30); assert_eq!(primes.factor(0), Err((0, vec![]))); // can only handle one large factor assert_eq!(primes.factor(31 * 31), Err((31 * 31, vec![]))); assert_eq!(primes.factor(2 * 3 * 31 * 31), Err((31 * 31, vec![(2, 1), (3, 1)]))); // prime that's too large (bigger than 30*30). assert_eq!(primes.factor(7561), Err((7561, vec![]))); assert_eq!(primes.factor(2 * 3 * 7561), Err((7561, vec![(2, 1), (3, 1)]))); } #[test] fn nth_prime() { let primes = Sieve::new(2_000_000); for (i, p) in primes.primes_from(0).enumerate() { let n = i + 1; if n < 2000 || n % 1000 == 0 { assert_eq!(primes.nth_prime(n), p); } } let total = primes.prime_pi(primes.upper_bound()); assert!(primes.nth_prime(total) <= primes.upper_bound()); } #[test] fn sum_primes() { let primes = Sieve::new(2_000_000); let mut manual_sum = 0u64; for p in primes.primes_from(0) { manual_sum += p as u64; } dbg!(manual_sum); let folded_sum = primes.primes_from(0).fold(0u64, |acc, p| acc + p as u64); let trait_sum = primes.primes_from(0).map(|p| p as u64).sum::(); assert_eq!(manual_sum, folded_sum); assert_eq!(manual_sum, trait_sum); } #[test] #[cfg_attr(not(feature = "slow_tests"), ignore)] fn u32_primes() { const COUNT: usize = 203_280_221; // number of 32-bit primes const LAST: usize = 4_294_967_291; // last 32-bit prime const SUM: u64 = 425_649_736_193_687_430; // sum of 32-bit primes let sieve = Sieve::new(::std::u32::MAX as usize); assert!(sieve.upper_bound() >= LAST); assert_eq!(sieve.primes_from(LAST - 100).last(), Some(LAST)); let mut count = 0; let mut sum = 0; for p in sieve.primes_from(0) { count += 1; sum += p as u64; } assert_eq!(count, COUNT); assert_eq!(sum, SUM); } #[test] fn prime_pi_sieve_limit() { // previously, these numbers would result in an index // out-of-bounds when used as the limit and the number fed to // prime_pi. for limit in 19998..20004 { let sieve = Sieve::new(limit); sieve.prime_pi(limit); } } } primal-sieve-0.3.6/src/streaming/mod.rs000064400000000000000000000277711046102023000161520ustar 00000000000000use primal_bit::BitVec; use std::cmp; use crate::wheel; pub mod primes; mod presieve; /// A heavily optimised prime sieve. /// /// This is a streaming segmented sieve, meaning it sieves numbers in /// intervals, extracting whatever it needs and discarding it. See /// `Sieve` for a wrapper that caches the information to allow for /// repeated queries, at the cost of *O(limit)* memory use. /// /// This uses *O(sqrt(limit))* memory, and is designed to be as /// cache-friendly as possible. `StreamingSieve` should be used for /// one-off calls, or simple linear iteration. /// /// The design is *heavily* inspired/adopted from Kim Walisch's /// [primesieve](http://primesieve.org/), and has similar speed /// (around 5-20% slower). /// /// # Examples /// /// ```rust /// let count = primal::StreamingSieve::prime_pi(123456); /// println!("𝜋(123456) = {}", count); /// ``` #[derive(Debug)] pub struct StreamingSieve { small: Option, sieve: BitVec, primes: Vec>, small_primes: Vec>, large_primes: Vec>, presieve: presieve::Presieve, low: usize, current: usize, limit: usize, } const CACHE: usize = 32 << 10; const SEG_ELEMS: usize = 8 * CACHE; const SEG_LEN: usize = SEG_ELEMS * wheel::BYTE_MODULO / wheel::BYTE_SIZE; fn isqrt(x: usize) -> usize { (x as f64).sqrt() as usize } impl StreamingSieve { /// Create a new instance of the streaming sieve that will /// correctly progressively filter primes up to `limit`. pub(crate) fn new(limit: usize) -> StreamingSieve { let low = 0; let elems = cmp::min(wheel::bits_for(limit), SEG_ELEMS); let presieve = presieve::Presieve::new(elems); let current = presieve.smallest_unincluded_prime(); let small = if limit < current * current { None } else { Some(crate::Sieve::new(isqrt(limit) + 1)) }; StreamingSieve { small, sieve: BitVec::from_elem(elems, true), primes: vec![], small_primes: vec![], large_primes: vec![], presieve, low, current, limit } } fn split_index(&self, idx: usize) -> (usize, usize) { let len = SEG_ELEMS; (idx / len,idx % len) } fn index_for(&self, n: usize) -> (bool, usize, usize) { let (b, idx) = wheel::bit_index(n); let (base, tweak) = self.split_index(idx); (b, base, tweak) } /// Count the number of primes upto and including `n`, that is, 𝜋, /// the [prime counting /// function](https://en.wikipedia.org/wiki/Prime-counting_function). /// /// # Examples /// /// ```rust /// assert_eq!(primal::StreamingSieve::prime_pi(10), 4); /// // the endpoint is included /// assert_eq!(primal::StreamingSieve::prime_pi(11), 5); /// /// assert_eq!(primal::StreamingSieve::prime_pi(100), 25); /// assert_eq!(primal::StreamingSieve::prime_pi(1000), 168); /// ``` pub fn prime_pi(n: usize) -> usize { match n { 0..=1 => 0, 2 => 1, 3..=4 => 2, 5..=6 => 3, 7..=10 => 4, _ => { let mut sieve = StreamingSieve::new(n); let (includes, base, tweak) = sieve.index_for(n); let mut count = match wheel::BYTE_MODULO { 30 => 3, _ => unimplemented!() }; for _ in 0..base { let (_, bitv) = sieve.next().unwrap(); count += bitv.count_ones(); } let tail = tweak + includes as usize; if tail != 0 { let (_, last) = sieve.next().unwrap(); count += last.count_ones_before(tail); } count } } } /// Compute *pn*, the `n` prime number, 1-indexed /// (i.e. *p1* = 2, *p2* = 3). /// /// # Panics /// /// `n` must be larger than 0 and less than the total number of /// primes in this sieve (that is, /// `self.prime_pi(self.upper_bound())`). /// /// # Example /// /// ```rust /// assert_eq!(primal::StreamingSieve::nth_prime(1_000), 7919); /// ``` pub fn nth_prime(n: usize) -> usize { assert!(n > 0); match n { 1 => 2, 2 => 3, 3 => 5, _ => { let mut bit_n = n - 3; let (_, hi) = primal_estimate::nth_prime(n as u64); let mut sieve = StreamingSieve::new(hi as usize); while let Some((low, bits)) = sieve.next() { let count = bits.count_ones(); if count >= bit_n { let bit_idx = bits.find_nth_bit(bit_n - 1).unwrap(); return low + wheel::from_bit_index(bit_idx) } bit_n -= count } unreachable!() } } } fn add_sieving_prime(&mut self, p: usize, low: usize) { if p <= CACHE / 2 { self.small_primes.push(wheel::State::new(wheel::Wheel30, p, low)); } else { let elem = wheel::State::new(wheel::Wheel210, p, low); if p < CACHE * 5 / 2 { self.primes.push(elem) } else { self.large_primes.push(elem) } } } fn find_new_sieving_primes(&mut self, low: usize, high: usize) { if let Some(small) = self.small.take() { for p in small.primes_from(self.current) { if p * p > high { self.current = p; break } self.add_sieving_prime(p, low); } self.small = Some(small); } } fn small_primes_sieve(sieve: &mut BitVec, small_primes: &mut [wheel::State]) { let bytes = sieve.as_bytes_mut(); for wi in small_primes { wi.sieve_hardcoded(bytes); } } fn direct_sieve(&mut self) { let bytes = self.sieve.as_bytes_mut(); let mut chunks = self.primes.chunks_exact_mut(3); while let Some([wi1, wi2, wi3]) = chunks.next() { wi1.sieve_triple(wi2, wi3, bytes); } for wi in chunks.into_remainder() { wi.sieve(bytes); } } fn large_primes_sieve(&mut self) { let bytes = self.sieve.as_bytes_mut(); let mut chunks = self.large_primes.chunks_exact_mut(2); while let Some([wi1, wi2]) = chunks.next() { wi1.sieve_pair(wi2, bytes); } for wi in chunks.into_remainder() { wi.sieve(bytes); } } /// Extract the next chunk of filtered primes, the return value is /// `Some((low, v))` or `None` if the sieve has reached the limit. /// /// The vector stores bits for each odd number starting at `low`. /// Bit `n` of `v` is set if and only if `low + 2 * n + 1` is /// prime. /// /// NB. the prime 2 is not included in any of these sieves and so /// needs special handling. pub(crate) fn next(&mut self) -> Option<(usize, &BitVec)> { if self.low >= self.limit { return None } let low = self.low; self.low = self.low.saturating_add(SEG_LEN); let high = cmp::min(low.saturating_add(SEG_LEN - 1), self.limit); self.find_new_sieving_primes(low, high); self.presieve.apply(&mut self.sieve, low); StreamingSieve::small_primes_sieve(&mut self.sieve, &mut self.small_primes); self.direct_sieve(); self.large_primes_sieve(); if low == 0 { // 1 is not prime. self.sieve.set(0, false); self.presieve.mark_small_primes(&mut self.sieve); } Some((low, &self.sieve)) } } #[cfg(test)] mod tests { use crate::Sieve; use primal_slowsieve::Primes; use crate::wheel; use super::StreamingSieve; fn gcd(x: usize, y: usize) -> usize { if y == 0 { x } else { gcd(y, x % y) } } fn coprime_to(x: usize) -> Vec { (1..x).filter(|&n| gcd(n, x) == 1).collect() } #[test] fn test() { let coprime = coprime_to(wheel::BYTE_MODULO); const LIMIT: usize = 2_000_000; let mut sieve = StreamingSieve::new(LIMIT); let primes = ::primal_slowsieve::Primes::sieve(LIMIT); let mut base = 0; let mut index = 0; while let Some((_low, next)) = sieve.next() { for val in next { let i = wheel::BYTE_MODULO * base + coprime[index]; if i >= LIMIT { break } assert!(primes.is_prime(i) == val, "failed for {} (is prime = {})", i, primes.is_prime(i)); index += 1; if index == wheel::BYTE_SIZE { index = 0; base += 1 } } } } #[test] fn prime_pi() { let (limit, mult) = if cfg!(feature = "slow_tests") { (2_000_000, 19_998) } else { (200_000, 1_998) }; let real = Primes::sieve(limit); for i in (0..20).chain((0..100).map(|n| n * mult + 1)) { let val = StreamingSieve::prime_pi(i); let true_ = real.primes().take_while(|p| *p <= i).count(); assert!(val == true_, "failed for {}, true {}, computed {}", i, true_, val) } } #[test] fn prime_pi_issue_48() { // Expected values independently confirmed on Wolfram|Alpha. let limits = [49, 121, 289, 961, 11_047, 32_611, 230_907, 455_166_135]; let expected = [15, 30, 61, 162, 1_338, 3_501, 20_513, 24_112_077]; for (&limit, &expected) in limits.iter().zip(&expected) { let val = StreamingSieve::prime_pi(limit); assert_eq!(val, expected, "failed for limit {}", limit); } } #[test] fn prime_pi_seg_len() { const PRIME1: usize = 982_981; const PRIME2: usize = 983_063; const EXPECTED: usize = 77_279; assert!((PRIME1..PRIME2).contains(&super::SEG_LEN)); assert_eq!(StreamingSieve::prime_pi(PRIME1 - 1), EXPECTED - 1); for limit in PRIME1..PRIME2 { assert_eq!(StreamingSieve::prime_pi(limit), EXPECTED); } assert_eq!(StreamingSieve::prime_pi(PRIME2), EXPECTED + 1); } #[test] fn nth_prime() { let primes = Sieve::new(2_000_000); for (i, p) in primes.primes_from(0).enumerate() { let n = i + 1; if n < 2000 || n % 1000 == 0 { assert_eq!(StreamingSieve::nth_prime(n), p); } } } // These are designed to specifically test the medium sized and // large prime sieving. #[test] fn prime_pi_huge() { #[cfg(all(feature = "slow_tests", target_pointer_width = "64"))] const LIMIT_RESULT: (usize, usize) = (10_000_000_000, 455_052_511); #[cfg(all(feature = "slow_tests", target_pointer_width = "32"))] const LIMIT_RESULT: (usize, usize) = (4_294_000_000, 203_236_859); #[cfg(not(feature = "slow_tests"))] const LIMIT_RESULT: (usize, usize) = (500_000_000, 26_355_867); assert_eq!(StreamingSieve::prime_pi(LIMIT_RESULT.0), LIMIT_RESULT.1); } #[test] fn nth_prime_huge() { #[cfg(all(feature = "slow_tests", target_pointer_width = "64"))] const LIMIT_RESULT: (usize, usize) = (455_052_512, 10_000_000_019); #[cfg(all(feature = "slow_tests", target_pointer_width = "32"))] const LIMIT_RESULT: (usize, usize) = (203_236_860, 4_294_000_079); #[cfg(not(feature = "slow_tests"))] const LIMIT_RESULT: (usize, usize) = (26_355_868, 500_000_003); assert_eq!(StreamingSieve::nth_prime(LIMIT_RESULT.0), LIMIT_RESULT.1); } } primal-sieve-0.3.6/src/streaming/presieve.rs000064400000000000000000000057611046102023000172100ustar 00000000000000use primal_bit::BitVec; use std::cmp; use crate::wheel; use super::StreamingSieve; const MINIMUM_PRESIEVE: usize = 2 * 3 * 5; const PRESIEVE_PRIMES: &[usize] = &[7, 11, 13, 17, 19, 23, 29]; #[derive(Debug)] pub struct Presieve { sieve: BitVec, presieve_prod: usize, presieve_idx: usize, } impl Presieve { #[inline(never)] pub fn new(limit_bits: usize) -> Presieve { let mut prod = MINIMUM_PRESIEVE; let mut idx = 0; for (i, &x) in PRESIEVE_PRIMES.iter().enumerate() { let new_prod = prod * x; if wheel::bits_for(new_prod) > limit_bits { break } prod = new_prod; idx = i; } let len = cmp::min(wheel::bits_for(prod), limit_bits); if idx == 0 { Presieve { sieve: BitVec::new(), presieve_prod: prod, presieve_idx: idx, } } else { let mut sievers = vec![]; for &x in &PRESIEVE_PRIMES[..idx] { let (use_, _idx) = wheel::bit_index(x); if use_ { sievers.push(wheel::State::new(wheel::Wheel30, x, prod)); } } let mut sieve = BitVec::from_elem(len, true); StreamingSieve::small_primes_sieve(&mut sieve, &mut sievers); Presieve { sieve, presieve_prod: prod, presieve_idx: idx, } } } pub fn smallest_unincluded_prime(&self) -> usize { PRESIEVE_PRIMES[self.presieve_idx] } pub fn mark_small_primes(&self, sieve: &mut BitVec) { for &x in &PRESIEVE_PRIMES[..self.presieve_idx] { let (use_, idx) = wheel::bit_index(x); if use_ { sieve.set(idx, true) } } } pub fn apply(&self, sieve: &mut BitVec, low: usize) { if self.sieve.len() == 0 { return } let offset = (low % self.presieve_prod) * wheel::BYTE_SIZE / wheel::BYTE_MODULO / 8; copy_all(sieve.as_bytes_mut(), self.sieve.as_bytes(), offset); fn copy_all(dst: &mut [u8], src: &[u8], init_offset: usize) { let mut pos = 0; // pre-fill data at the start, as a rotation of `src`. pos += memcpy(&mut dst[pos..], &src[init_offset..]); if pos >= dst.len() { return } pos += memcpy(&mut dst[pos..], &src[..init_offset]); if pos >= dst.len() { return } // progressively copy the prefix to the rest of the // vector, doubling each time. while pos < dst.len() { let (filled, unfilled) = dst.split_at_mut(pos); pos += memcpy(unfilled, filled); } } fn memcpy<'d>(dst: &'d mut [u8], src: &[u8]) -> usize { let l = cmp::min(dst.len(), src.len()); dst[..l].copy_from_slice(&src[..l]); l } } } primal-sieve-0.3.6/src/streaming/primes.rs000064400000000000000000000132211046102023000166530ustar 00000000000000use crate::wheel; use crate::streaming::{self, StreamingSieve}; #[cfg(target_pointer_width = "32")] const SQRT: usize = 1 << 16; #[cfg(target_pointer_width = "64")] const SQRT: usize = 1 << 32; enum Early { Two, Three, Five, Done, } /// An iterator over all primes. /// /// This will yield primes indefinitely (bits in `usize` /// permitting). If there is an known upper bound, sieving first with /// `Sieve` and using its `primes_from` method may be more efficient, /// especially if the bound is small. /// /// This requires *O(sqrt(p))* memory to yield prime `p`, where `X` is /// the maximum value of `usize`. /// /// # Examples /// /// ```rust /// let count = primal::Primes::all().take_while(|p| *p < 1_000_000).count(); /// println!("{}", count); /// ``` pub struct Primes { early: Early, base: usize, ones: primal_bit::IntoOnes, streaming: StreamingSieve, sieving_primes: Option>, left_over: Option, } impl Primes { /// The sequence `2, 3, 5, 7, 11, ...`. /// /// # Examples /// /// ```rust /// // print the first 20 primes /// for p in primal::Primes::all().take(20) { /// println!("{}", p); /// } /// ``` pub fn all() -> Primes { Primes::sqrt(SQRT) } fn sqrt(sqrt: usize) -> Primes { let (sieving, limit) = if sqrt < streaming::isqrt(streaming::SEG_LEN) { (None, sqrt * sqrt) } else { (Some(Box::new(Primes::sqrt(streaming::isqrt(sqrt)))), streaming::SEG_LEN) }; let mut streaming = StreamingSieve::new(limit); let ones = { let (_, bits) = streaming.next().unwrap(); bits.clone().into_ones() }; // we manually add the primes streaming.small = None; // go to the end. streaming.limit = !0; Primes { early: Early::Two, base: 0, ones, streaming, sieving_primes: sieving, left_over: None, } } #[inline] fn from_bit_index(&self, i: usize) -> Option { let w = wheel::from_bit_index(i); self.base.checked_add(w) } fn advance_ones(&mut self) -> bool { let low = self.streaming.low; let high = low.saturating_add(streaming::SEG_LEN); for q in self.left_over.into_iter().chain(self.sieving_primes.as_mut().unwrap()) { if q.saturating_mul(q) >= high { self.left_over = Some(q); break } if q > streaming::isqrt(streaming::SEG_LEN) { self.streaming.add_sieving_prime(q, low); } } match self.streaming.next() { Some((_, bits)) => { self.base = low; self.ones = bits.clone().into_ones(); true }, None => false, } } } // See also `Iterator for SievePrimes` with nearly identical code. impl Iterator for Primes { type Item = usize; #[inline] fn next(&mut self) -> Option { match self.early { Early::Done => {} Early::Two => { self.early = Early::Three; return Some(2) } Early::Three => { self.early = Early::Five; return Some(3) } Early::Five => { self.early = Early::Done; return Some(5) } } loop { if let Some(i) = self.ones.next() { return self.from_bit_index(i); } if !self.advance_ones() { return None; } } } fn fold(mut self, mut acc: Acc, mut f: F) -> Acc where F: FnMut(Acc, Self::Item) -> Acc { match self.early { Early::Done => {} Early::Two => { acc = f(acc, 2); acc = f(acc, 3); acc = f(acc, 5); } Early::Three => { acc = f(acc, 3); acc = f(acc, 5); } Early::Five => { acc = f(acc, 5); } } loop { while let Some(i) = self.ones.next() { match self.from_bit_index(i) { Some(p) => acc = f(acc, p), None => return acc, } } if !self.advance_ones() { return acc; } } } } #[cfg(test)] mod tests { use crate::Sieve; use super::Primes; fn check_equality(limit: usize) { let sieve = Sieve::new(limit); let real = sieve.primes_from(0).take_while(|x| *x < limit); let computed = Primes::all().take_while(|x| *x < limit); let mut i = 0; for (r, c) in real.zip(computed) { assert_eq!(c, r); i += 1; } assert_eq!(sieve.prime_pi(limit), i); } #[test] fn equality() { check_equality(20_000_000); } #[test] fn equality_huge() { let limit = if cfg!(feature = "slow_tests") { // This takes a minute or so in debug mode, but it does work! ::std::u32::MAX as usize } else { 100_000_000 }; check_equality(limit); } #[test] #[should_panic = "123456791"] fn fold() { // There's no termination until we exceed `usize::MAX`, which // will take too long, but we can cut it short by unwinding. Primes::all().fold((), |(), p| { if p > 123456789 { panic!("{}", p); } }) } } primal-sieve-0.3.6/src/wheel/mod.rs000064400000000000000000000200731046102023000152510ustar 00000000000000use std::cmp; use primal_bit::BitVec; pub const BYTE_SIZE: usize = 8; pub const BYTE_MODULO: usize = 30; const WHEEL_OFFSETS: &[usize; BYTE_MODULO] = &[ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 3, 0, 0, 0, 4, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 7, ]; pub fn small_for(x: usize) -> Option { let bits = bits_for(x); if bits < wheel30::SMALL_BITS { let bytes = (bits + 8 - 1) / 8; Some(BitVec::from_bytes(wheel30::SMALL[..bytes].to_owned(), bits)) } else { None } } pub fn bits_for(x: usize) -> usize { // ceil((x * BYTE_SIZE) / BYTE_MODULO) // computed using the remainder to avoid overflow let d = x / BYTE_MODULO; let r = x % BYTE_MODULO; d * BYTE_SIZE + (r * BYTE_SIZE + BYTE_MODULO - 1) / BYTE_MODULO } pub fn bit_index(n: usize) -> (bool, usize) { const POS: &[(bool, u8); BYTE_MODULO] = &[ // 0 (false, 0), (true, 0), (false, 1), (false, 1), (false, 1), (false, 1), // 6 (false, 1), (true, 1), (false, 2), (false, 2), (false, 2), (true, 2), // 12 (false, 3), (true, 3), (false, 4), (false, 4), (false, 4), (true, 4), // 18 (false, 5), (true, 5), (false, 6), (false, 6), (false, 6), (true, 6), // 24 (false, 7), (false, 7), (false, 7), (false, 7), (false, 7), (true, 7), ]; let init = &POS[n % BYTE_MODULO]; (init.0, (n / BYTE_MODULO) * BYTE_SIZE + init.1 as usize) } pub fn upper_bound(nbits: usize) -> usize { // basically from_bit_index(nbits)-1, but without overflow (nbits / BYTE_SIZE) .saturating_mul(BYTE_MODULO) .saturating_add(TRUE_AT_BIT[nbits % BYTE_SIZE] - 1) } #[inline] pub fn from_bit_index(bit: usize) -> usize { (bit / BYTE_SIZE) * BYTE_MODULO + TRUE_AT_BIT[bit % BYTE_SIZE] } const TRUE_AT_BIT: &[usize; 8] = &[1, 7, 11, 13, 17, 19, 23, 29]; pub use self::wheel30::Wheel30; pub use self::wheel210::Wheel210; pub trait Wheel { fn modulo(&self) -> usize; fn size(&self) -> usize; fn wheel(&self) -> &'static [WheelElem]; fn init(&self) -> &'static [WheelInit]; unsafe fn hardcoded_sieve(&self, bytes: &mut [u8], si_: &mut usize, wi_: &mut usize, prime: usize); } type SI = u32; type WI = u16; #[derive(Debug)] pub struct State { wheel: W, prime: u32, wheel_index: WI, sieve_index: SI, } impl State { pub fn new(w: W, p: usize, low: usize) -> State { let q = cmp::max(low / p + 1, p); // the smallest (interesting) multiple of p larger than low let mut mult = p * q; let init = &w.init()[q % w.modulo()]; // push it up to the smallest multiple that is in the wheel mult += p * init.next_mult_factor as usize; // find the memory location to write to let low_offset = mult - low; let sieve_index = low_offset / BYTE_MODULO; // and now the right info to write let wheel_index = WHEEL_OFFSETS[p % BYTE_MODULO] * w.size() + init.wheel_index as usize; let prime = p / BYTE_MODULO; State { wheel: w, prime: prime as u32, sieve_index: sieve_index as SI, wheel_index: wheel_index as WI, } } #[inline] pub fn sieve(&mut self, bytes: &mut [u8]) { let bytes = bytes; let top = bytes.len(); let mut si = self.sieve_index as usize; let mut wi = self.wheel_index as usize; let p = self.prime as usize; while si < top { raw_set_bit(self.wheel.wheel(), bytes, &mut si, &mut wi, p) } self.sieve_index = si.wrapping_sub(top) as SI; self.wheel_index = wi as WI; } #[inline] pub fn sieve_pair(&mut self, self2: &mut State, bytes: &mut [u8]) { let bytes = bytes; let top = bytes.len(); let wheel = self.wheel.wheel(); let mut si1 = self.sieve_index as usize; let mut wi1 = self.wheel_index as usize; let p1 = self.prime as usize; let mut si2 = self2.sieve_index as usize; let mut wi2 = self2.wheel_index as usize; let p2 = self2.prime as usize; while si1 < top && si2 < top { raw_set_bit(wheel, bytes, &mut si1, &mut wi1, p1); raw_set_bit(wheel, bytes, &mut si2, &mut wi2, p2); } while si1 < top { raw_set_bit(wheel, bytes, &mut si1, &mut wi1, p1); } while si2 < top { raw_set_bit(wheel, bytes, &mut si2, &mut wi2, p2); } // if this wraps, we've hit the limit, and so won't be // continuing, so whatever, it can be junk. self.sieve_index = si1.wrapping_sub(top) as SI; self.wheel_index = wi1 as WI; self2.sieve_index = si2.wrapping_sub(top) as SI; self2.wheel_index = wi2 as WI; } pub fn sieve_triple(&mut self, self2: &mut State, self3: &mut State, bytes: &mut [u8]) { let bytes = bytes; let top = bytes.len(); let wheel = self.wheel.wheel(); let mut si1 = self.sieve_index as usize; let mut wi1 = self.wheel_index as usize; let p1 = self.prime as usize; let mut si2 = self2.sieve_index as usize; let mut wi2 = self2.wheel_index as usize; let p2 = self2.prime as usize; let mut si3 = self3.sieve_index as usize; let mut wi3 = self3.wheel_index as usize; let p3 = self3.prime as usize; while si1 < top && si2 < top && si3 < top { raw_set_bit(wheel, bytes, &mut si1, &mut wi1, p1); raw_set_bit(wheel, bytes, &mut si2, &mut wi2, p2); raw_set_bit(wheel, bytes, &mut si3, &mut wi3, p3); } while si1 < top { raw_set_bit(wheel, bytes, &mut si1, &mut wi1, p1); } while si2 < top { raw_set_bit(wheel, bytes, &mut si2, &mut wi2, p2); } while si3 < top { raw_set_bit(wheel, bytes, &mut si3, &mut wi3, p3); } // if this wraps, we've hit the limit, and so won't be // continuing, so whatever, it can be junk. self.sieve_index = si1.wrapping_sub(top) as SI; self.wheel_index = wi1 as WI; self2.sieve_index = si2.wrapping_sub(top) as SI; self2.wheel_index = wi2 as WI; self3.sieve_index = si3.wrapping_sub(top) as SI; self3.wheel_index = wi3 as WI; } pub fn sieve_hardcoded(&mut self, bytes: &mut [u8]) { let mut si = self.sieve_index as usize; let mut wi = self.wheel_index as usize; unsafe { self.wheel.hardcoded_sieve(bytes, &mut si, &mut wi, self.prime as usize) } self.sieve_index = si as SI; self.wheel_index = wi as WI; } } #[derive(Debug)] pub struct WheelInit { next_mult_factor: u8, wheel_index: u8, } #[derive(Debug)] pub struct WheelElem { unset_bit: u8, next_mult_factor: u8, correction: u8, next: i8, } #[inline(always)] #[cfg(not(feature = "safe"))] fn raw_set_bit(wheel: &'static [WheelElem], x: &mut [u8], si: &mut usize, wi: &mut usize, prime: usize) { unsafe { let WheelElem { unset_bit, next_mult_factor, correction, next } = *wheel.get_unchecked(*wi); *x.get_unchecked_mut(*si) &= unset_bit; *si += prime * next_mult_factor as usize; *si += correction as usize; *wi = wi.wrapping_add(next as usize); } } #[inline(always)] #[cfg(feature = "safe")] fn raw_set_bit(wheel: &'static [WheelElem], x: &mut [u8], si: &mut usize, wi: &mut usize, prime: usize) { let WheelElem { unset_bit, next_mult_factor, correction, next } = wheel[*wi]; x[*si] &= unset_bit; *si += prime * next_mult_factor as usize; *si += correction as usize; *wi = wi.wrapping_add(next as usize); } mod wheel30; mod wheel210; primal-sieve-0.3.6/src/wheel/wheel210.rs000075500000000000000000014376551046102023000160470ustar 00000000000000// automatically generated #![allow(clippy::all)] use crate::wheel::{WheelInit, Wheel, WheelElem}; #[derive(Debug, Clone)] pub struct Wheel210; impl Wheel for Wheel210 { #[inline(always)] fn modulo(&self) -> usize { MODULO } #[inline(always)] fn size(&self) -> usize { SIZE } #[inline(always)] fn wheel(&self) -> &'static [WheelElem] { WHEEL } #[inline(always)] fn init(&self) -> &'static [WheelInit] { INIT } #[inline(always)] unsafe fn hardcoded_sieve(&self, bytes: &mut [u8], si_: &mut usize, wi_: &mut usize, prime: usize) { hardcoded_sieve(bytes, si_, wi_, prime) } } pub const SIZE: usize = 48; pub const MODULO: usize = 210; #[allow(dead_code)] pub const SMALL_BITS: usize = 2288; #[allow(dead_code)] pub const SMALL: &[u8; SMALL_BITS / 8] = &[ 0b11111110, 0b11011111, 0b11101111, 0b01111110, 0b10110110, 0b11011011, 0b00111101, 0b11111001, 0b11010101, 0b01001111, 0b00011110, 0b11110011, 0b11101010, 0b10100110, 0b11101101, 0b10011110, 0b11100110, 0b00001100, 0b11010011, 0b11010011, 0b00111011, 0b11011101, 0b01011001, 0b10100101, 0b01101010, 0b01100111, 0b10010010, 0b10111101, 0b01111000, 0b00011110, 0b10100110, 0b01010110, 0b01010110, 0b11100011, 0b10101101, 0b00101101, 0b11011110, 0b00101010, 0b01001100, 0b01010101, 0b11011001, 0b10100011, 0b11110000, 0b10011111, 0b00000011, 0b01010100, 0b10100001, 0b11111000, 0b00101110, 0b11111101, 0b01000100, 0b11101001, 0b01100110, 0b11110110, 0b00010011, 0b00111010, 0b10111000, 0b01001100, 0b00101011, 0b00111010, 0b01000101, 0b00010001, 0b10111111, 0b01010100, 0b10001100, 0b11000001, 0b01111010, 0b10110011, 0b11001000, 0b10111100, 0b10001100, 0b01001111, 0b00100001, 0b01011000, 0b01110001, 0b01110001, 0b10011011, 0b11000001, 0b00010111, 0b11101111, 0b01010100, 0b10010110, 0b00011010, 0b00001000, 0b11100101, 0b10000011, 0b10001100, 0b01000110, 0b01110010, 0b11111011, 0b10101110, 0b01100101, 0b10010010, 0b10001111, 0b01011000, 0b10000111, 0b11010010, 0b10010010, 0b11011000, 0b10000001, 0b01100101, 0b00100110, 0b11100011, 0b10100000, 0b00010001, 0b00111000, 0b11000111, 0b00100110, 0b00111100, 0b10000001, 0b11101011, 0b10011001, 0b10001101, 0b01010001, 0b10001000, 0b00111110, 0b00100100, 0b11110011, 0b00110011, 0b01001101, 0b01011010, 0b10001011, 0b00011100, 0b10100111, 0b00101010, 0b10110100, 0b01011000, 0b01001100, 0b01001110, 0b00100110, 0b11110110, 0b00011001, 0b10000010, 0b11011100, 0b10000011, 0b11000011, 0b00101100, 0b11110001, 0b00111000, 0b00000010, 0b10110101, 0b11001101, 0b11001101, 0b00000010, 0b10110010, 0b01001010, 0b10010100, 0b00001100, 0b01010111, 0b01001100, 0b01111010, 0b00110000, 0b01000011, 0b00001011, 0b11110001, 0b11001011, 0b01000100, 0b01101100, 0b00100100, 0b11111000, 0b00011001, 0b00000001, 0b10010101, 0b10101000, 0b01011100, 0b01110011, 0b11101010, 0b10001101, 0b00100100, 0b10010110, 0b00101011, 0b01010000, 0b10100110, 0b00100010, 0b00011110, 0b11000100, 0b11010001, 0b01001000, 0b00000110, 0b11010100, 0b00111010, 0b00101111, 0b01110100, 0b10011100, 0b00000111, 0b01101010, 0b00000101, 0b10001000, 0b10111111, 0b01101000, 0b00010101, 0b00101110, 0b01100000, 0b01010101, 0b11100011, 0b10110111, 0b01010001, 0b10011000, 0b00001000, 0b00010100, 0b10000110, 0b01011010, 0b10101010, 0b01000101, 0b01001101, 0b01001001, 0b01110000, 0b00100111, 0b11010010, 0b10010011, 0b11010101, 0b11001010, 0b10101011, 0b00000010, 0b10000011, 0b01100001, 0b00000101, 0b00100100, 0b11001110, 0b10000111, 0b00100010, 0b11000010, 0b10101001, 0b10101101, 0b00011000, 0b10001100, 0b01001101, 0b01111000, 0b11010001, 0b10001001, 0b00010110, 0b10110000, 0b01010111, 0b11000111, 0b01100010, 0b10100010, 0b11000000, 0b00110100, 0b00100100, 0b01010010, 0b10101110, 0b01011010, 0b01000000, 0b00110010, 0b10001101, 0b00100001, 0b00001000, 0b01000011, 0b00110100, 0b10110110, 0b11010010, 0b10110110, 0b11011001, 0b00011001, 0b11100001, 0b01100000, 0b01100111, 0b00011010, 0b00111001, 0b01100000, 0b11010000, 0b01000100, 0b01111010, 0b10010100, 0b10011010, 0b00001001, 0b10001000, 0b10000011, 0b10101000, 0b01110100, 0b01010101, 0b00010000, 0b00100111, 0b10100001, 0b01011101, 0b01101000, 0b00011110, 0b00100011, 0b11001000, 0b00110010, 0b11100000, 0b00011001, 0b00000011, 0b01000100, 0b01110011, 0b01001000, ]; const INIT: &[WheelInit; 210] = &[ WheelInit { next_mult_factor: 1, wheel_index: 0 }, // 0 WheelInit { next_mult_factor: 0, wheel_index: 0 }, // 1 WheelInit { next_mult_factor: 9, wheel_index: 1 }, // 2 WheelInit { next_mult_factor: 8, wheel_index: 1 }, // 3 WheelInit { next_mult_factor: 7, wheel_index: 1 }, // 4 WheelInit { next_mult_factor: 6, wheel_index: 1 }, // 5 WheelInit { next_mult_factor: 5, wheel_index: 1 }, // 6 WheelInit { next_mult_factor: 4, wheel_index: 1 }, // 7 WheelInit { next_mult_factor: 3, wheel_index: 1 }, // 8 WheelInit { next_mult_factor: 2, wheel_index: 1 }, // 9 WheelInit { next_mult_factor: 1, wheel_index: 1 }, // 10 WheelInit { next_mult_factor: 0, wheel_index: 1 }, // 11 WheelInit { next_mult_factor: 1, wheel_index: 2 }, // 12 WheelInit { next_mult_factor: 0, wheel_index: 2 }, // 13 WheelInit { next_mult_factor: 3, wheel_index: 3 }, // 14 WheelInit { next_mult_factor: 2, wheel_index: 3 }, // 15 WheelInit { next_mult_factor: 1, wheel_index: 3 }, // 16 WheelInit { next_mult_factor: 0, wheel_index: 3 }, // 17 WheelInit { next_mult_factor: 1, wheel_index: 4 }, // 18 WheelInit { next_mult_factor: 0, wheel_index: 4 }, // 19 WheelInit { next_mult_factor: 3, wheel_index: 5 }, // 20 WheelInit { next_mult_factor: 2, wheel_index: 5 }, // 21 WheelInit { next_mult_factor: 1, wheel_index: 5 }, // 22 WheelInit { next_mult_factor: 0, wheel_index: 5 }, // 23 WheelInit { next_mult_factor: 5, wheel_index: 6 }, // 24 WheelInit { next_mult_factor: 4, wheel_index: 6 }, // 25 WheelInit { next_mult_factor: 3, wheel_index: 6 }, // 26 WheelInit { next_mult_factor: 2, wheel_index: 6 }, // 27 WheelInit { next_mult_factor: 1, wheel_index: 6 }, // 28 WheelInit { next_mult_factor: 0, wheel_index: 6 }, // 29 WheelInit { next_mult_factor: 1, wheel_index: 7 }, // 30 WheelInit { next_mult_factor: 0, wheel_index: 7 }, // 31 WheelInit { next_mult_factor: 5, wheel_index: 8 }, // 32 WheelInit { next_mult_factor: 4, wheel_index: 8 }, // 33 WheelInit { next_mult_factor: 3, wheel_index: 8 }, // 34 WheelInit { next_mult_factor: 2, wheel_index: 8 }, // 35 WheelInit { next_mult_factor: 1, wheel_index: 8 }, // 36 WheelInit { next_mult_factor: 0, wheel_index: 8 }, // 37 WheelInit { next_mult_factor: 3, wheel_index: 9 }, // 38 WheelInit { next_mult_factor: 2, wheel_index: 9 }, // 39 WheelInit { next_mult_factor: 1, wheel_index: 9 }, // 40 WheelInit { next_mult_factor: 0, wheel_index: 9 }, // 41 WheelInit { next_mult_factor: 1, wheel_index: 10 }, // 42 WheelInit { next_mult_factor: 0, wheel_index: 10 }, // 43 WheelInit { next_mult_factor: 3, wheel_index: 11 }, // 44 WheelInit { next_mult_factor: 2, wheel_index: 11 }, // 45 WheelInit { next_mult_factor: 1, wheel_index: 11 }, // 46 WheelInit { next_mult_factor: 0, wheel_index: 11 }, // 47 WheelInit { next_mult_factor: 5, wheel_index: 12 }, // 48 WheelInit { next_mult_factor: 4, wheel_index: 12 }, // 49 WheelInit { next_mult_factor: 3, wheel_index: 12 }, // 50 WheelInit { next_mult_factor: 2, wheel_index: 12 }, // 51 WheelInit { next_mult_factor: 1, wheel_index: 12 }, // 52 WheelInit { next_mult_factor: 0, wheel_index: 12 }, // 53 WheelInit { next_mult_factor: 5, wheel_index: 13 }, // 54 WheelInit { next_mult_factor: 4, wheel_index: 13 }, // 55 WheelInit { next_mult_factor: 3, wheel_index: 13 }, // 56 WheelInit { next_mult_factor: 2, wheel_index: 13 }, // 57 WheelInit { next_mult_factor: 1, wheel_index: 13 }, // 58 WheelInit { next_mult_factor: 0, wheel_index: 13 }, // 59 WheelInit { next_mult_factor: 1, wheel_index: 14 }, // 60 WheelInit { next_mult_factor: 0, wheel_index: 14 }, // 61 WheelInit { next_mult_factor: 5, wheel_index: 15 }, // 62 WheelInit { next_mult_factor: 4, wheel_index: 15 }, // 63 WheelInit { next_mult_factor: 3, wheel_index: 15 }, // 64 WheelInit { next_mult_factor: 2, wheel_index: 15 }, // 65 WheelInit { next_mult_factor: 1, wheel_index: 15 }, // 66 WheelInit { next_mult_factor: 0, wheel_index: 15 }, // 67 WheelInit { next_mult_factor: 3, wheel_index: 16 }, // 68 WheelInit { next_mult_factor: 2, wheel_index: 16 }, // 69 WheelInit { next_mult_factor: 1, wheel_index: 16 }, // 70 WheelInit { next_mult_factor: 0, wheel_index: 16 }, // 71 WheelInit { next_mult_factor: 1, wheel_index: 17 }, // 72 WheelInit { next_mult_factor: 0, wheel_index: 17 }, // 73 WheelInit { next_mult_factor: 5, wheel_index: 18 }, // 74 WheelInit { next_mult_factor: 4, wheel_index: 18 }, // 75 WheelInit { next_mult_factor: 3, wheel_index: 18 }, // 76 WheelInit { next_mult_factor: 2, wheel_index: 18 }, // 77 WheelInit { next_mult_factor: 1, wheel_index: 18 }, // 78 WheelInit { next_mult_factor: 0, wheel_index: 18 }, // 79 WheelInit { next_mult_factor: 3, wheel_index: 19 }, // 80 WheelInit { next_mult_factor: 2, wheel_index: 19 }, // 81 WheelInit { next_mult_factor: 1, wheel_index: 19 }, // 82 WheelInit { next_mult_factor: 0, wheel_index: 19 }, // 83 WheelInit { next_mult_factor: 5, wheel_index: 20 }, // 84 WheelInit { next_mult_factor: 4, wheel_index: 20 }, // 85 WheelInit { next_mult_factor: 3, wheel_index: 20 }, // 86 WheelInit { next_mult_factor: 2, wheel_index: 20 }, // 87 WheelInit { next_mult_factor: 1, wheel_index: 20 }, // 88 WheelInit { next_mult_factor: 0, wheel_index: 20 }, // 89 WheelInit { next_mult_factor: 7, wheel_index: 21 }, // 90 WheelInit { next_mult_factor: 6, wheel_index: 21 }, // 91 WheelInit { next_mult_factor: 5, wheel_index: 21 }, // 92 WheelInit { next_mult_factor: 4, wheel_index: 21 }, // 93 WheelInit { next_mult_factor: 3, wheel_index: 21 }, // 94 WheelInit { next_mult_factor: 2, wheel_index: 21 }, // 95 WheelInit { next_mult_factor: 1, wheel_index: 21 }, // 96 WheelInit { next_mult_factor: 0, wheel_index: 21 }, // 97 WheelInit { next_mult_factor: 3, wheel_index: 22 }, // 98 WheelInit { next_mult_factor: 2, wheel_index: 22 }, // 99 WheelInit { next_mult_factor: 1, wheel_index: 22 }, // 100 WheelInit { next_mult_factor: 0, wheel_index: 22 }, // 101 WheelInit { next_mult_factor: 1, wheel_index: 23 }, // 102 WheelInit { next_mult_factor: 0, wheel_index: 23 }, // 103 WheelInit { next_mult_factor: 3, wheel_index: 24 }, // 104 WheelInit { next_mult_factor: 2, wheel_index: 24 }, // 105 WheelInit { next_mult_factor: 1, wheel_index: 24 }, // 106 WheelInit { next_mult_factor: 0, wheel_index: 24 }, // 107 WheelInit { next_mult_factor: 1, wheel_index: 25 }, // 108 WheelInit { next_mult_factor: 0, wheel_index: 25 }, // 109 WheelInit { next_mult_factor: 3, wheel_index: 26 }, // 110 WheelInit { next_mult_factor: 2, wheel_index: 26 }, // 111 WheelInit { next_mult_factor: 1, wheel_index: 26 }, // 112 WheelInit { next_mult_factor: 0, wheel_index: 26 }, // 113 WheelInit { next_mult_factor: 7, wheel_index: 27 }, // 114 WheelInit { next_mult_factor: 6, wheel_index: 27 }, // 115 WheelInit { next_mult_factor: 5, wheel_index: 27 }, // 116 WheelInit { next_mult_factor: 4, wheel_index: 27 }, // 117 WheelInit { next_mult_factor: 3, wheel_index: 27 }, // 118 WheelInit { next_mult_factor: 2, wheel_index: 27 }, // 119 WheelInit { next_mult_factor: 1, wheel_index: 27 }, // 120 WheelInit { next_mult_factor: 0, wheel_index: 27 }, // 121 WheelInit { next_mult_factor: 5, wheel_index: 28 }, // 122 WheelInit { next_mult_factor: 4, wheel_index: 28 }, // 123 WheelInit { next_mult_factor: 3, wheel_index: 28 }, // 124 WheelInit { next_mult_factor: 2, wheel_index: 28 }, // 125 WheelInit { next_mult_factor: 1, wheel_index: 28 }, // 126 WheelInit { next_mult_factor: 0, wheel_index: 28 }, // 127 WheelInit { next_mult_factor: 3, wheel_index: 29 }, // 128 WheelInit { next_mult_factor: 2, wheel_index: 29 }, // 129 WheelInit { next_mult_factor: 1, wheel_index: 29 }, // 130 WheelInit { next_mult_factor: 0, wheel_index: 29 }, // 131 WheelInit { next_mult_factor: 5, wheel_index: 30 }, // 132 WheelInit { next_mult_factor: 4, wheel_index: 30 }, // 133 WheelInit { next_mult_factor: 3, wheel_index: 30 }, // 134 WheelInit { next_mult_factor: 2, wheel_index: 30 }, // 135 WheelInit { next_mult_factor: 1, wheel_index: 30 }, // 136 WheelInit { next_mult_factor: 0, wheel_index: 30 }, // 137 WheelInit { next_mult_factor: 1, wheel_index: 31 }, // 138 WheelInit { next_mult_factor: 0, wheel_index: 31 }, // 139 WheelInit { next_mult_factor: 3, wheel_index: 32 }, // 140 WheelInit { next_mult_factor: 2, wheel_index: 32 }, // 141 WheelInit { next_mult_factor: 1, wheel_index: 32 }, // 142 WheelInit { next_mult_factor: 0, wheel_index: 32 }, // 143 WheelInit { next_mult_factor: 5, wheel_index: 33 }, // 144 WheelInit { next_mult_factor: 4, wheel_index: 33 }, // 145 WheelInit { next_mult_factor: 3, wheel_index: 33 }, // 146 WheelInit { next_mult_factor: 2, wheel_index: 33 }, // 147 WheelInit { next_mult_factor: 1, wheel_index: 33 }, // 148 WheelInit { next_mult_factor: 0, wheel_index: 33 }, // 149 WheelInit { next_mult_factor: 1, wheel_index: 34 }, // 150 WheelInit { next_mult_factor: 0, wheel_index: 34 }, // 151 WheelInit { next_mult_factor: 5, wheel_index: 35 }, // 152 WheelInit { next_mult_factor: 4, wheel_index: 35 }, // 153 WheelInit { next_mult_factor: 3, wheel_index: 35 }, // 154 WheelInit { next_mult_factor: 2, wheel_index: 35 }, // 155 WheelInit { next_mult_factor: 1, wheel_index: 35 }, // 156 WheelInit { next_mult_factor: 0, wheel_index: 35 }, // 157 WheelInit { next_mult_factor: 5, wheel_index: 36 }, // 158 WheelInit { next_mult_factor: 4, wheel_index: 36 }, // 159 WheelInit { next_mult_factor: 3, wheel_index: 36 }, // 160 WheelInit { next_mult_factor: 2, wheel_index: 36 }, // 161 WheelInit { next_mult_factor: 1, wheel_index: 36 }, // 162 WheelInit { next_mult_factor: 0, wheel_index: 36 }, // 163 WheelInit { next_mult_factor: 3, wheel_index: 37 }, // 164 WheelInit { next_mult_factor: 2, wheel_index: 37 }, // 165 WheelInit { next_mult_factor: 1, wheel_index: 37 }, // 166 WheelInit { next_mult_factor: 0, wheel_index: 37 }, // 167 WheelInit { next_mult_factor: 1, wheel_index: 38 }, // 168 WheelInit { next_mult_factor: 0, wheel_index: 38 }, // 169 WheelInit { next_mult_factor: 3, wheel_index: 39 }, // 170 WheelInit { next_mult_factor: 2, wheel_index: 39 }, // 171 WheelInit { next_mult_factor: 1, wheel_index: 39 }, // 172 WheelInit { next_mult_factor: 0, wheel_index: 39 }, // 173 WheelInit { next_mult_factor: 5, wheel_index: 40 }, // 174 WheelInit { next_mult_factor: 4, wheel_index: 40 }, // 175 WheelInit { next_mult_factor: 3, wheel_index: 40 }, // 176 WheelInit { next_mult_factor: 2, wheel_index: 40 }, // 177 WheelInit { next_mult_factor: 1, wheel_index: 40 }, // 178 WheelInit { next_mult_factor: 0, wheel_index: 40 }, // 179 WheelInit { next_mult_factor: 1, wheel_index: 41 }, // 180 WheelInit { next_mult_factor: 0, wheel_index: 41 }, // 181 WheelInit { next_mult_factor: 5, wheel_index: 42 }, // 182 WheelInit { next_mult_factor: 4, wheel_index: 42 }, // 183 WheelInit { next_mult_factor: 3, wheel_index: 42 }, // 184 WheelInit { next_mult_factor: 2, wheel_index: 42 }, // 185 WheelInit { next_mult_factor: 1, wheel_index: 42 }, // 186 WheelInit { next_mult_factor: 0, wheel_index: 42 }, // 187 WheelInit { next_mult_factor: 3, wheel_index: 43 }, // 188 WheelInit { next_mult_factor: 2, wheel_index: 43 }, // 189 WheelInit { next_mult_factor: 1, wheel_index: 43 }, // 190 WheelInit { next_mult_factor: 0, wheel_index: 43 }, // 191 WheelInit { next_mult_factor: 1, wheel_index: 44 }, // 192 WheelInit { next_mult_factor: 0, wheel_index: 44 }, // 193 WheelInit { next_mult_factor: 3, wheel_index: 45 }, // 194 WheelInit { next_mult_factor: 2, wheel_index: 45 }, // 195 WheelInit { next_mult_factor: 1, wheel_index: 45 }, // 196 WheelInit { next_mult_factor: 0, wheel_index: 45 }, // 197 WheelInit { next_mult_factor: 1, wheel_index: 46 }, // 198 WheelInit { next_mult_factor: 0, wheel_index: 46 }, // 199 WheelInit { next_mult_factor: 9, wheel_index: 47 }, // 200 WheelInit { next_mult_factor: 8, wheel_index: 47 }, // 201 WheelInit { next_mult_factor: 7, wheel_index: 47 }, // 202 WheelInit { next_mult_factor: 6, wheel_index: 47 }, // 203 WheelInit { next_mult_factor: 5, wheel_index: 47 }, // 204 WheelInit { next_mult_factor: 4, wheel_index: 47 }, // 205 WheelInit { next_mult_factor: 3, wheel_index: 47 }, // 206 WheelInit { next_mult_factor: 2, wheel_index: 47 }, // 207 WheelInit { next_mult_factor: 1, wheel_index: 47 }, // 208 WheelInit { next_mult_factor: 0, wheel_index: 47 }, // 209 ]; const WHEEL: &[WheelElem; 384] = &[ // remainder 1 WheelElem { unset_bit: 254, next_mult_factor: 10, correction: 0, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 8, correction: 1, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 8, correction: 1, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 10, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 1, next: -47 }, // remainder 7 WheelElem { unset_bit: 253, next_mult_factor: 10, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 8, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 8, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 10, correction: 2, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 1, next: -47 }, // remainder 11 WheelElem { unset_bit: 251, next_mult_factor: 10, correction: 4, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 8, correction: 3, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 8, correction: 3, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 10, correction: 4, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 1, next: -47 }, // remainder 13 WheelElem { unset_bit: 247, next_mult_factor: 10, correction: 4, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 8, correction: 4, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 8, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 10, correction: 4, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 1, next: -47 }, // remainder 17 WheelElem { unset_bit: 239, next_mult_factor: 10, correction: 6, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 8, correction: 4, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 8, correction: 4, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 10, correction: 6, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 1, next: -47 }, // remainder 19 WheelElem { unset_bit: 223, next_mult_factor: 10, correction: 6, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 8, correction: 5, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 8, correction: 5, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 10, correction: 6, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 1, next: -47 }, // remainder 23 WheelElem { unset_bit: 191, next_mult_factor: 10, correction: 8, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 8, correction: 6, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 8, correction: 6, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 10, correction: 8, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 1, next: -47 }, // remainder 29 WheelElem { unset_bit: 127, next_mult_factor: 10, correction: 10, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 8, correction: 7, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 8, correction: 7, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 10, correction: 10, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 1, next: -47 }, ]; pub unsafe fn hardcoded_sieve(bytes: &mut [u8], si_: &mut usize, wi_: &mut usize, prime: usize) { let bytes = bytes; let start = bytes.as_mut_ptr(); let len = bytes.len() as isize; let largest_step = ::std::cmp::min(len, 210 * (prime as isize + 1) - 1); let loop_len = len - largest_step; let loop_end = start.offset(loop_len); let end = start.offset(len); let si = *si_ as isize; let mut p = start.offset(si); let mut wi = *wi_; let prime_ = prime as isize; 'outer: loop { match wi { 0..=47 => { // 30 * x + 1 loop { 'label47: loop { 'label46: loop { 'label45: loop { 'label44: loop { 'label43: loop { 'label42: loop { 'label41: loop { 'label40: loop { 'label39: loop { 'label38: loop { 'label37: loop { 'label36: loop { 'label35: loop { 'label34: loop { 'label33: loop { 'label32: loop { 'label31: loop { 'label30: loop { 'label29: loop { 'label28: loop { 'label27: loop { 'label26: loop { 'label25: loop { 'label24: loop { 'label23: loop { 'label22: loop { 'label21: loop { 'label20: loop { 'label19: loop { 'label18: loop { 'label17: loop { 'label16: loop { 'label15: loop { 'label14: loop { 'label13: loop { 'label12: loop { 'label11: loop { 'label10: loop { 'label9: loop { 'label8: loop { 'label7: loop { 'label6: loop { 'label5: loop { 'label4: loop { 'label3: loop { 'label2: loop { 'label1: loop { 'label0: loop { match wi { 0 => break 'label0, 1 => break 'label1, 2 => break 'label2, 3 => break 'label3, 4 => break 'label4, 5 => break 'label5, 6 => break 'label6, 7 => break 'label7, 8 => break 'label8, 9 => break 'label9, 10 => break 'label10, 11 => break 'label11, 12 => break 'label12, 13 => break 'label13, 14 => break 'label14, 15 => break 'label15, 16 => break 'label16, 17 => break 'label17, 18 => break 'label18, 19 => break 'label19, 20 => break 'label20, 21 => break 'label21, 22 => break 'label22, 23 => break 'label23, 24 => break 'label24, 25 => break 'label25, 26 => break 'label26, 27 => break 'label27, 28 => break 'label28, 29 => break 'label29, 30 => break 'label30, 31 => break 'label31, 32 => break 'label32, 33 => break 'label33, 34 => break 'label34, 35 => break 'label35, 36 => break 'label36, 37 => break 'label37, 38 => break 'label38, 39 => break 'label39, 40 => break 'label40, 41 => break 'label41, 42 => break 'label42, 43 => break 'label43, 44 => break 'label44, 45 => break 'label45, 46 => break 'label46, _ => break 'label47, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 0) && p.wrapping_offset(prime_ * 10 + 0) < end); *p.offset(prime_ * 10 + 0) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 0) && p.wrapping_offset(prime_ * 12 + 0) < end); *p.offset(prime_ * 12 + 0) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 0) && p.wrapping_offset(prime_ * 16 + 0) < end); *p.offset(prime_ * 16 + 0) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 0) && p.wrapping_offset(prime_ * 18 + 0) < end); *p.offset(prime_ * 18 + 0) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 0) && p.wrapping_offset(prime_ * 22 + 0) < end); *p.offset(prime_ * 22 + 0) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 0) && p.wrapping_offset(prime_ * 28 + 0) < end); *p.offset(prime_ * 28 + 0) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 30 + 0) && p.wrapping_offset(prime_ * 30 + 0) < end); *p.offset(prime_ * 30 + 0) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 36 + 0) && p.wrapping_offset(prime_ * 36 + 0) < end); *p.offset(prime_ * 36 + 0) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 40 + 0) && p.wrapping_offset(prime_ * 40 + 0) < end); *p.offset(prime_ * 40 + 0) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 42 + 0) && p.wrapping_offset(prime_ * 42 + 0) < end); *p.offset(prime_ * 42 + 0) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 46 + 0) && p.wrapping_offset(prime_ * 46 + 0) < end); *p.offset(prime_ * 46 + 0) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 52 + 0) && p.wrapping_offset(prime_ * 52 + 0) < end); *p.offset(prime_ * 52 + 0) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 58 + 0) && p.wrapping_offset(prime_ * 58 + 0) < end); *p.offset(prime_ * 58 + 0) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 60 + 0) && p.wrapping_offset(prime_ * 60 + 0) < end); *p.offset(prime_ * 60 + 0) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 66 + 0) && p.wrapping_offset(prime_ * 66 + 0) < end); *p.offset(prime_ * 66 + 0) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 70 + 0) && p.wrapping_offset(prime_ * 70 + 0) < end); *p.offset(prime_ * 70 + 0) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 72 + 0) && p.wrapping_offset(prime_ * 72 + 0) < end); *p.offset(prime_ * 72 + 0) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 78 + 0) && p.wrapping_offset(prime_ * 78 + 0) < end); *p.offset(prime_ * 78 + 0) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 82 + 0) && p.wrapping_offset(prime_ * 82 + 0) < end); *p.offset(prime_ * 82 + 0) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 88 + 0) && p.wrapping_offset(prime_ * 88 + 0) < end); *p.offset(prime_ * 88 + 0) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 96 + 0) && p.wrapping_offset(prime_ * 96 + 0) < end); *p.offset(prime_ * 96 + 0) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 100 + 0) && p.wrapping_offset(prime_ * 100 + 0) < end); *p.offset(prime_ * 100 + 0) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 102 + 0) && p.wrapping_offset(prime_ * 102 + 0) < end); *p.offset(prime_ * 102 + 0) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 106 + 0) && p.wrapping_offset(prime_ * 106 + 0) < end); *p.offset(prime_ * 106 + 0) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 108 + 0) && p.wrapping_offset(prime_ * 108 + 0) < end); *p.offset(prime_ * 108 + 0) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 112 + 0) && p.wrapping_offset(prime_ * 112 + 0) < end); *p.offset(prime_ * 112 + 0) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 120 + 0) && p.wrapping_offset(prime_ * 120 + 0) < end); *p.offset(prime_ * 120 + 0) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 126 + 0) && p.wrapping_offset(prime_ * 126 + 0) < end); *p.offset(prime_ * 126 + 0) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 130 + 0) && p.wrapping_offset(prime_ * 130 + 0) < end); *p.offset(prime_ * 130 + 0) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 136 + 0) && p.wrapping_offset(prime_ * 136 + 0) < end); *p.offset(prime_ * 136 + 0) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 138 + 0) && p.wrapping_offset(prime_ * 138 + 0) < end); *p.offset(prime_ * 138 + 0) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 142 + 0) && p.wrapping_offset(prime_ * 142 + 0) < end); *p.offset(prime_ * 142 + 0) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 148 + 0) && p.wrapping_offset(prime_ * 148 + 0) < end); *p.offset(prime_ * 148 + 0) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 150 + 0) && p.wrapping_offset(prime_ * 150 + 0) < end); *p.offset(prime_ * 150 + 0) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 156 + 0) && p.wrapping_offset(prime_ * 156 + 0) < end); *p.offset(prime_ * 156 + 0) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 162 + 0) && p.wrapping_offset(prime_ * 162 + 0) < end); *p.offset(prime_ * 162 + 0) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 166 + 0) && p.wrapping_offset(prime_ * 166 + 0) < end); *p.offset(prime_ * 166 + 0) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 168 + 0) && p.wrapping_offset(prime_ * 168 + 0) < end); *p.offset(prime_ * 168 + 0) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 172 + 0) && p.wrapping_offset(prime_ * 172 + 0) < end); *p.offset(prime_ * 172 + 0) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 178 + 0) && p.wrapping_offset(prime_ * 178 + 0) < end); *p.offset(prime_ * 178 + 0) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 180 + 0) && p.wrapping_offset(prime_ * 180 + 0) < end); *p.offset(prime_ * 180 + 0) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 186 + 0) && p.wrapping_offset(prime_ * 186 + 0) < end); *p.offset(prime_ * 186 + 0) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 190 + 0) && p.wrapping_offset(prime_ * 190 + 0) < end); *p.offset(prime_ * 190 + 0) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 192 + 0) && p.wrapping_offset(prime_ * 192 + 0) < end); *p.offset(prime_ * 192 + 0) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 196 + 0) && p.wrapping_offset(prime_ * 196 + 0) < end); *p.offset(prime_ * 196 + 0) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 198 + 0) && p.wrapping_offset(prime_ * 198 + 0) < end); *p.offset(prime_ * 198 + 0) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 208 + 0) && p.wrapping_offset(prime_ * 208 + 0) < end); *p.offset(prime_ * 208 + 0) &= 127; let p2 = p.wrapping_offset(prime_ * 210 + 1); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 0; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 10 + 0); p = if p <= p2 { p2 } else { end }; break 'label1 } if p >= end { wi = 1; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label2 } if p >= end { wi = 2; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label3 } if p >= end { wi = 3; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label4 } if p >= end { wi = 4; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label5 } if p >= end { wi = 5; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label6 } if p >= end { wi = 6; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label7 } if p >= end { wi = 7; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label8 } if p >= end { wi = 8; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label9 } if p >= end { wi = 9; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label10 } if p >= end { wi = 10; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label11 } if p >= end { wi = 11; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label12 } if p >= end { wi = 12; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label13 } if p >= end { wi = 13; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label14 } if p >= end { wi = 14; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label15 } if p >= end { wi = 15; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label16 } if p >= end { wi = 16; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label17 } if p >= end { wi = 17; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label18 } if p >= end { wi = 18; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label19 } if p >= end { wi = 19; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label20 } if p >= end { wi = 20; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 8 + 1); p = if p <= p2 { p2 } else { end }; break 'label21 } if p >= end { wi = 21; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label22 } if p >= end { wi = 22; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label23 } if p >= end { wi = 23; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label24 } if p >= end { wi = 24; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label25 } if p >= end { wi = 25; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label26 } if p >= end { wi = 26; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 8 + 1); p = if p <= p2 { p2 } else { end }; break 'label27 } if p >= end { wi = 27; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label28 } if p >= end { wi = 28; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label29 } if p >= end { wi = 29; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label30 } if p >= end { wi = 30; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label31 } if p >= end { wi = 31; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label32 } if p >= end { wi = 32; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label33 } if p >= end { wi = 33; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label34 } if p >= end { wi = 34; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label35 } if p >= end { wi = 35; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label36 } if p >= end { wi = 36; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label37 } if p >= end { wi = 37; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label38 } if p >= end { wi = 38; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label39 } if p >= end { wi = 39; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label40 } if p >= end { wi = 40; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label41 } if p >= end { wi = 41; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label42 } if p >= end { wi = 42; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label43 } if p >= end { wi = 43; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label44 } if p >= end { wi = 44; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label45 } if p >= end { wi = 45; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label46 } if p >= end { wi = 46; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 10 + 0); p = if p <= p2 { p2 } else { end }; break 'label47 } if p >= end { wi = 47; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 0 } } 48..=95 => { // 30 * x + 11 loop { 'label95: loop { 'label94: loop { 'label93: loop { 'label92: loop { 'label91: loop { 'label90: loop { 'label89: loop { 'label88: loop { 'label87: loop { 'label86: loop { 'label85: loop { 'label84: loop { 'label83: loop { 'label82: loop { 'label81: loop { 'label80: loop { 'label79: loop { 'label78: loop { 'label77: loop { 'label76: loop { 'label75: loop { 'label74: loop { 'label73: loop { 'label72: loop { 'label71: loop { 'label70: loop { 'label69: loop { 'label68: loop { 'label67: loop { 'label66: loop { 'label65: loop { 'label64: loop { 'label63: loop { 'label62: loop { 'label61: loop { 'label60: loop { 'label59: loop { 'label58: loop { 'label57: loop { 'label56: loop { 'label55: loop { 'label54: loop { 'label53: loop { 'label52: loop { 'label51: loop { 'label50: loop { 'label49: loop { 'label48: loop { match wi { 48 => break 'label48, 49 => break 'label49, 50 => break 'label50, 51 => break 'label51, 52 => break 'label52, 53 => break 'label53, 54 => break 'label54, 55 => break 'label55, 56 => break 'label56, 57 => break 'label57, 58 => break 'label58, 59 => break 'label59, 60 => break 'label60, 61 => break 'label61, 62 => break 'label62, 63 => break 'label63, 64 => break 'label64, 65 => break 'label65, 66 => break 'label66, 67 => break 'label67, 68 => break 'label68, 69 => break 'label69, 70 => break 'label70, 71 => break 'label71, 72 => break 'label72, 73 => break 'label73, 74 => break 'label74, 75 => break 'label75, 76 => break 'label76, 77 => break 'label77, 78 => break 'label78, 79 => break 'label79, 80 => break 'label80, 81 => break 'label81, 82 => break 'label82, 83 => break 'label83, 84 => break 'label84, 85 => break 'label85, 86 => break 'label86, 87 => break 'label87, 88 => break 'label88, 89 => break 'label89, 90 => break 'label90, 91 => break 'label91, 92 => break 'label92, 93 => break 'label93, 94 => break 'label94, _ => break 'label95, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 0) && p.wrapping_offset(prime_ * 10 + 0) < end); *p.offset(prime_ * 10 + 0) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 0) && p.wrapping_offset(prime_ * 12 + 0) < end); *p.offset(prime_ * 12 + 0) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 0) && p.wrapping_offset(prime_ * 16 + 0) < end); *p.offset(prime_ * 16 + 0) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 0) && p.wrapping_offset(prime_ * 18 + 0) < end); *p.offset(prime_ * 18 + 0) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 0) && p.wrapping_offset(prime_ * 22 + 0) < end); *p.offset(prime_ * 22 + 0) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 0) && p.wrapping_offset(prime_ * 28 + 0) < end); *p.offset(prime_ * 28 + 0) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 30 + 1) && p.wrapping_offset(prime_ * 30 + 1) < end); *p.offset(prime_ * 30 + 1) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 36 + 1) && p.wrapping_offset(prime_ * 36 + 1) < end); *p.offset(prime_ * 36 + 1) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 40 + 1) && p.wrapping_offset(prime_ * 40 + 1) < end); *p.offset(prime_ * 40 + 1) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 42 + 1) && p.wrapping_offset(prime_ * 42 + 1) < end); *p.offset(prime_ * 42 + 1) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 46 + 1) && p.wrapping_offset(prime_ * 46 + 1) < end); *p.offset(prime_ * 46 + 1) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 52 + 1) && p.wrapping_offset(prime_ * 52 + 1) < end); *p.offset(prime_ * 52 + 1) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 58 + 1) && p.wrapping_offset(prime_ * 58 + 1) < end); *p.offset(prime_ * 58 + 1) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 60 + 2) && p.wrapping_offset(prime_ * 60 + 2) < end); *p.offset(prime_ * 60 + 2) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 66 + 2) && p.wrapping_offset(prime_ * 66 + 2) < end); *p.offset(prime_ * 66 + 2) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 70 + 2) && p.wrapping_offset(prime_ * 70 + 2) < end); *p.offset(prime_ * 70 + 2) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 72 + 2) && p.wrapping_offset(prime_ * 72 + 2) < end); *p.offset(prime_ * 72 + 2) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 78 + 2) && p.wrapping_offset(prime_ * 78 + 2) < end); *p.offset(prime_ * 78 + 2) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 82 + 2) && p.wrapping_offset(prime_ * 82 + 2) < end); *p.offset(prime_ * 82 + 2) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 88 + 2) && p.wrapping_offset(prime_ * 88 + 2) < end); *p.offset(prime_ * 88 + 2) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 96 + 3) && p.wrapping_offset(prime_ * 96 + 3) < end); *p.offset(prime_ * 96 + 3) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 100 + 3) && p.wrapping_offset(prime_ * 100 + 3) < end); *p.offset(prime_ * 100 + 3) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 102 + 3) && p.wrapping_offset(prime_ * 102 + 3) < end); *p.offset(prime_ * 102 + 3) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 106 + 3) && p.wrapping_offset(prime_ * 106 + 3) < end); *p.offset(prime_ * 106 + 3) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 108 + 3) && p.wrapping_offset(prime_ * 108 + 3) < end); *p.offset(prime_ * 108 + 3) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 112 + 3) && p.wrapping_offset(prime_ * 112 + 3) < end); *p.offset(prime_ * 112 + 3) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 120 + 4) && p.wrapping_offset(prime_ * 120 + 4) < end); *p.offset(prime_ * 120 + 4) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 126 + 4) && p.wrapping_offset(prime_ * 126 + 4) < end); *p.offset(prime_ * 126 + 4) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 130 + 4) && p.wrapping_offset(prime_ * 130 + 4) < end); *p.offset(prime_ * 130 + 4) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 136 + 4) && p.wrapping_offset(prime_ * 136 + 4) < end); *p.offset(prime_ * 136 + 4) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 138 + 4) && p.wrapping_offset(prime_ * 138 + 4) < end); *p.offset(prime_ * 138 + 4) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 142 + 4) && p.wrapping_offset(prime_ * 142 + 4) < end); *p.offset(prime_ * 142 + 4) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 148 + 4) && p.wrapping_offset(prime_ * 148 + 4) < end); *p.offset(prime_ * 148 + 4) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 150 + 5) && p.wrapping_offset(prime_ * 150 + 5) < end); *p.offset(prime_ * 150 + 5) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 156 + 5) && p.wrapping_offset(prime_ * 156 + 5) < end); *p.offset(prime_ * 156 + 5) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 162 + 5) && p.wrapping_offset(prime_ * 162 + 5) < end); *p.offset(prime_ * 162 + 5) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 166 + 5) && p.wrapping_offset(prime_ * 166 + 5) < end); *p.offset(prime_ * 166 + 5) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 168 + 5) && p.wrapping_offset(prime_ * 168 + 5) < end); *p.offset(prime_ * 168 + 5) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 172 + 5) && p.wrapping_offset(prime_ * 172 + 5) < end); *p.offset(prime_ * 172 + 5) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 178 + 5) && p.wrapping_offset(prime_ * 178 + 5) < end); *p.offset(prime_ * 178 + 5) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 180 + 6) && p.wrapping_offset(prime_ * 180 + 6) < end); *p.offset(prime_ * 180 + 6) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 186 + 6) && p.wrapping_offset(prime_ * 186 + 6) < end); *p.offset(prime_ * 186 + 6) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 190 + 6) && p.wrapping_offset(prime_ * 190 + 6) < end); *p.offset(prime_ * 190 + 6) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 192 + 6) && p.wrapping_offset(prime_ * 192 + 6) < end); *p.offset(prime_ * 192 + 6) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 196 + 6) && p.wrapping_offset(prime_ * 196 + 6) < end); *p.offset(prime_ * 196 + 6) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 198 + 6) && p.wrapping_offset(prime_ * 198 + 6) < end); *p.offset(prime_ * 198 + 6) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 208 + 6) && p.wrapping_offset(prime_ * 208 + 6) < end); *p.offset(prime_ * 208 + 6) &= 191; let p2 = p.wrapping_offset(prime_ * 210 + 11); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 48; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 10 + 2); p = if p <= p2 { p2 } else { end }; break 'label49 } if p >= end { wi = 49; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label50 } if p >= end { wi = 50; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label51 } if p >= end { wi = 51; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label52 } if p >= end { wi = 52; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label53 } if p >= end { wi = 53; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label54 } if p >= end { wi = 54; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label55 } if p >= end { wi = 55; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label56 } if p >= end { wi = 56; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label57 } if p >= end { wi = 57; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label58 } if p >= end { wi = 58; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label59 } if p >= end { wi = 59; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label60 } if p >= end { wi = 60; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label61 } if p >= end { wi = 61; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label62 } if p >= end { wi = 62; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label63 } if p >= end { wi = 63; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label64 } if p >= end { wi = 64; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label65 } if p >= end { wi = 65; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label66 } if p >= end { wi = 66; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label67 } if p >= end { wi = 67; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label68 } if p >= end { wi = 68; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 8 + 2); p = if p <= p2 { p2 } else { end }; break 'label69 } if p >= end { wi = 69; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label70 } if p >= end { wi = 70; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label71 } if p >= end { wi = 71; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label72 } if p >= end { wi = 72; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label73 } if p >= end { wi = 73; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label74 } if p >= end { wi = 74; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 8 + 2); p = if p <= p2 { p2 } else { end }; break 'label75 } if p >= end { wi = 75; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label76 } if p >= end { wi = 76; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label77 } if p >= end { wi = 77; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label78 } if p >= end { wi = 78; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label79 } if p >= end { wi = 79; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label80 } if p >= end { wi = 80; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label81 } if p >= end { wi = 81; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label82 } if p >= end { wi = 82; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label83 } if p >= end { wi = 83; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label84 } if p >= end { wi = 84; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label85 } if p >= end { wi = 85; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label86 } if p >= end { wi = 86; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label87 } if p >= end { wi = 87; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label88 } if p >= end { wi = 88; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label89 } if p >= end { wi = 89; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label90 } if p >= end { wi = 90; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label91 } if p >= end { wi = 91; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label92 } if p >= end { wi = 92; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label93 } if p >= end { wi = 93; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label94 } if p >= end { wi = 94; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 10 + 2); p = if p <= p2 { p2 } else { end }; break 'label95 } if p >= end { wi = 95; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 48 } } 96..=143 => { // 30 * x + 13 loop { 'label143: loop { 'label142: loop { 'label141: loop { 'label140: loop { 'label139: loop { 'label138: loop { 'label137: loop { 'label136: loop { 'label135: loop { 'label134: loop { 'label133: loop { 'label132: loop { 'label131: loop { 'label130: loop { 'label129: loop { 'label128: loop { 'label127: loop { 'label126: loop { 'label125: loop { 'label124: loop { 'label123: loop { 'label122: loop { 'label121: loop { 'label120: loop { 'label119: loop { 'label118: loop { 'label117: loop { 'label116: loop { 'label115: loop { 'label114: loop { 'label113: loop { 'label112: loop { 'label111: loop { 'label110: loop { 'label109: loop { 'label108: loop { 'label107: loop { 'label106: loop { 'label105: loop { 'label104: loop { 'label103: loop { 'label102: loop { 'label101: loop { 'label100: loop { 'label99: loop { 'label98: loop { 'label97: loop { 'label96: loop { match wi { 96 => break 'label96, 97 => break 'label97, 98 => break 'label98, 99 => break 'label99, 100 => break 'label100, 101 => break 'label101, 102 => break 'label102, 103 => break 'label103, 104 => break 'label104, 105 => break 'label105, 106 => break 'label106, 107 => break 'label107, 108 => break 'label108, 109 => break 'label109, 110 => break 'label110, 111 => break 'label111, 112 => break 'label112, 113 => break 'label113, 114 => break 'label114, 115 => break 'label115, 116 => break 'label116, 117 => break 'label117, 118 => break 'label118, 119 => break 'label119, 120 => break 'label120, 121 => break 'label121, 122 => break 'label122, 123 => break 'label123, 124 => break 'label124, 125 => break 'label125, 126 => break 'label126, 127 => break 'label127, 128 => break 'label128, 129 => break 'label129, 130 => break 'label130, 131 => break 'label131, 132 => break 'label132, 133 => break 'label133, 134 => break 'label134, 135 => break 'label135, 136 => break 'label136, 137 => break 'label137, 138 => break 'label138, 139 => break 'label139, 140 => break 'label140, 141 => break 'label141, 142 => break 'label142, _ => break 'label143, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 0) && p.wrapping_offset(prime_ * 10 + 0) < end); *p.offset(prime_ * 10 + 0) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 0) && p.wrapping_offset(prime_ * 12 + 0) < end); *p.offset(prime_ * 12 + 0) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 0) && p.wrapping_offset(prime_ * 16 + 0) < end); *p.offset(prime_ * 16 + 0) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 0) && p.wrapping_offset(prime_ * 18 + 0) < end); *p.offset(prime_ * 18 + 0) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 1) && p.wrapping_offset(prime_ * 22 + 1) < end); *p.offset(prime_ * 22 + 1) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 1) && p.wrapping_offset(prime_ * 28 + 1) < end); *p.offset(prime_ * 28 + 1) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 30 + 1) && p.wrapping_offset(prime_ * 30 + 1) < end); *p.offset(prime_ * 30 + 1) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 36 + 1) && p.wrapping_offset(prime_ * 36 + 1) < end); *p.offset(prime_ * 36 + 1) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 40 + 2) && p.wrapping_offset(prime_ * 40 + 2) < end); *p.offset(prime_ * 40 + 2) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 42 + 2) && p.wrapping_offset(prime_ * 42 + 2) < end); *p.offset(prime_ * 42 + 2) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 46 + 2) && p.wrapping_offset(prime_ * 46 + 2) < end); *p.offset(prime_ * 46 + 2) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 52 + 2) && p.wrapping_offset(prime_ * 52 + 2) < end); *p.offset(prime_ * 52 + 2) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 58 + 3) && p.wrapping_offset(prime_ * 58 + 3) < end); *p.offset(prime_ * 58 + 3) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 60 + 3) && p.wrapping_offset(prime_ * 60 + 3) < end); *p.offset(prime_ * 60 + 3) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 66 + 3) && p.wrapping_offset(prime_ * 66 + 3) < end); *p.offset(prime_ * 66 + 3) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 70 + 3) && p.wrapping_offset(prime_ * 70 + 3) < end); *p.offset(prime_ * 70 + 3) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 72 + 3) && p.wrapping_offset(prime_ * 72 + 3) < end); *p.offset(prime_ * 72 + 3) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 78 + 4) && p.wrapping_offset(prime_ * 78 + 4) < end); *p.offset(prime_ * 78 + 4) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 82 + 4) && p.wrapping_offset(prime_ * 82 + 4) < end); *p.offset(prime_ * 82 + 4) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 88 + 4) && p.wrapping_offset(prime_ * 88 + 4) < end); *p.offset(prime_ * 88 + 4) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 96 + 5) && p.wrapping_offset(prime_ * 96 + 5) < end); *p.offset(prime_ * 96 + 5) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 100 + 5) && p.wrapping_offset(prime_ * 100 + 5) < end); *p.offset(prime_ * 100 + 5) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 102 + 5) && p.wrapping_offset(prime_ * 102 + 5) < end); *p.offset(prime_ * 102 + 5) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 106 + 5) && p.wrapping_offset(prime_ * 106 + 5) < end); *p.offset(prime_ * 106 + 5) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 108 + 5) && p.wrapping_offset(prime_ * 108 + 5) < end); *p.offset(prime_ * 108 + 5) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 112 + 5) && p.wrapping_offset(prime_ * 112 + 5) < end); *p.offset(prime_ * 112 + 5) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 120 + 6) && p.wrapping_offset(prime_ * 120 + 6) < end); *p.offset(prime_ * 120 + 6) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 126 + 6) && p.wrapping_offset(prime_ * 126 + 6) < end); *p.offset(prime_ * 126 + 6) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 130 + 6) && p.wrapping_offset(prime_ * 130 + 6) < end); *p.offset(prime_ * 130 + 6) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 136 + 7) && p.wrapping_offset(prime_ * 136 + 7) < end); *p.offset(prime_ * 136 + 7) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 138 + 7) && p.wrapping_offset(prime_ * 138 + 7) < end); *p.offset(prime_ * 138 + 7) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 142 + 7) && p.wrapping_offset(prime_ * 142 + 7) < end); *p.offset(prime_ * 142 + 7) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 148 + 7) && p.wrapping_offset(prime_ * 148 + 7) < end); *p.offset(prime_ * 148 + 7) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 150 + 7) && p.wrapping_offset(prime_ * 150 + 7) < end); *p.offset(prime_ * 150 + 7) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 156 + 8) && p.wrapping_offset(prime_ * 156 + 8) < end); *p.offset(prime_ * 156 + 8) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 162 + 8) && p.wrapping_offset(prime_ * 162 + 8) < end); *p.offset(prime_ * 162 + 8) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 166 + 8) && p.wrapping_offset(prime_ * 166 + 8) < end); *p.offset(prime_ * 166 + 8) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 168 + 8) && p.wrapping_offset(prime_ * 168 + 8) < end); *p.offset(prime_ * 168 + 8) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 172 + 9) && p.wrapping_offset(prime_ * 172 + 9) < end); *p.offset(prime_ * 172 + 9) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 178 + 9) && p.wrapping_offset(prime_ * 178 + 9) < end); *p.offset(prime_ * 178 + 9) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 180 + 9) && p.wrapping_offset(prime_ * 180 + 9) < end); *p.offset(prime_ * 180 + 9) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 186 + 9) && p.wrapping_offset(prime_ * 186 + 9) < end); *p.offset(prime_ * 186 + 9) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 190 + 10) && p.wrapping_offset(prime_ * 190 + 10) < end); *p.offset(prime_ * 190 + 10) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 192 + 10) && p.wrapping_offset(prime_ * 192 + 10) < end); *p.offset(prime_ * 192 + 10) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 196 + 10) && p.wrapping_offset(prime_ * 196 + 10) < end); *p.offset(prime_ * 196 + 10) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 198 + 10) && p.wrapping_offset(prime_ * 198 + 10) < end); *p.offset(prime_ * 198 + 10) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 208 + 10) && p.wrapping_offset(prime_ * 208 + 10) < end); *p.offset(prime_ * 208 + 10) &= 223; let p2 = p.wrapping_offset(prime_ * 210 + 13); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 96; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 10 + 4); p = if p <= p2 { p2 } else { end }; break 'label97 } if p >= end { wi = 97; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label98 } if p >= end { wi = 98; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label99 } if p >= end { wi = 99; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label100 } if p >= end { wi = 100; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label101 } if p >= end { wi = 101; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label102 } if p >= end { wi = 102; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label103 } if p >= end { wi = 103; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label104 } if p >= end { wi = 104; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label105 } if p >= end { wi = 105; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label106 } if p >= end { wi = 106; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label107 } if p >= end { wi = 107; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label108 } if p >= end { wi = 108; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label109 } if p >= end { wi = 109; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label110 } if p >= end { wi = 110; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label111 } if p >= end { wi = 111; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label112 } if p >= end { wi = 112; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label113 } if p >= end { wi = 113; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label114 } if p >= end { wi = 114; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label115 } if p >= end { wi = 115; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label116 } if p >= end { wi = 116; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 8 + 3); p = if p <= p2 { p2 } else { end }; break 'label117 } if p >= end { wi = 117; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label118 } if p >= end { wi = 118; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label119 } if p >= end { wi = 119; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label120 } if p >= end { wi = 120; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label121 } if p >= end { wi = 121; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label122 } if p >= end { wi = 122; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 8 + 3); p = if p <= p2 { p2 } else { end }; break 'label123 } if p >= end { wi = 123; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label124 } if p >= end { wi = 124; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label125 } if p >= end { wi = 125; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label126 } if p >= end { wi = 126; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label127 } if p >= end { wi = 127; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label128 } if p >= end { wi = 128; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label129 } if p >= end { wi = 129; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label130 } if p >= end { wi = 130; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label131 } if p >= end { wi = 131; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label132 } if p >= end { wi = 132; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label133 } if p >= end { wi = 133; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label134 } if p >= end { wi = 134; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label135 } if p >= end { wi = 135; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label136 } if p >= end { wi = 136; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label137 } if p >= end { wi = 137; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label138 } if p >= end { wi = 138; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label139 } if p >= end { wi = 139; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label140 } if p >= end { wi = 140; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label141 } if p >= end { wi = 141; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label142 } if p >= end { wi = 142; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 10 + 4); p = if p <= p2 { p2 } else { end }; break 'label143 } if p >= end { wi = 143; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 96 } } 144..=191 => { // 30 * x + 17 loop { 'label191: loop { 'label190: loop { 'label189: loop { 'label188: loop { 'label187: loop { 'label186: loop { 'label185: loop { 'label184: loop { 'label183: loop { 'label182: loop { 'label181: loop { 'label180: loop { 'label179: loop { 'label178: loop { 'label177: loop { 'label176: loop { 'label175: loop { 'label174: loop { 'label173: loop { 'label172: loop { 'label171: loop { 'label170: loop { 'label169: loop { 'label168: loop { 'label167: loop { 'label166: loop { 'label165: loop { 'label164: loop { 'label163: loop { 'label162: loop { 'label161: loop { 'label160: loop { 'label159: loop { 'label158: loop { 'label157: loop { 'label156: loop { 'label155: loop { 'label154: loop { 'label153: loop { 'label152: loop { 'label151: loop { 'label150: loop { 'label149: loop { 'label148: loop { 'label147: loop { 'label146: loop { 'label145: loop { 'label144: loop { match wi { 144 => break 'label144, 145 => break 'label145, 146 => break 'label146, 147 => break 'label147, 148 => break 'label148, 149 => break 'label149, 150 => break 'label150, 151 => break 'label151, 152 => break 'label152, 153 => break 'label153, 154 => break 'label154, 155 => break 'label155, 156 => break 'label156, 157 => break 'label157, 158 => break 'label158, 159 => break 'label159, 160 => break 'label160, 161 => break 'label161, 162 => break 'label162, 163 => break 'label163, 164 => break 'label164, 165 => break 'label165, 166 => break 'label166, 167 => break 'label167, 168 => break 'label168, 169 => break 'label169, 170 => break 'label170, 171 => break 'label171, 172 => break 'label172, 173 => break 'label173, 174 => break 'label174, 175 => break 'label175, 176 => break 'label176, 177 => break 'label177, 178 => break 'label178, 179 => break 'label179, 180 => break 'label180, 181 => break 'label181, 182 => break 'label182, 183 => break 'label183, 184 => break 'label184, 185 => break 'label185, 186 => break 'label186, 187 => break 'label187, 188 => break 'label188, 189 => break 'label189, 190 => break 'label190, _ => break 'label191, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 0) && p.wrapping_offset(prime_ * 10 + 0) < end); *p.offset(prime_ * 10 + 0) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 0) && p.wrapping_offset(prime_ * 12 + 0) < end); *p.offset(prime_ * 12 + 0) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 1) && p.wrapping_offset(prime_ * 16 + 1) < end); *p.offset(prime_ * 16 + 1) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 1) && p.wrapping_offset(prime_ * 18 + 1) < end); *p.offset(prime_ * 18 + 1) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 1) && p.wrapping_offset(prime_ * 22 + 1) < end); *p.offset(prime_ * 22 + 1) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 1) && p.wrapping_offset(prime_ * 28 + 1) < end); *p.offset(prime_ * 28 + 1) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 30 + 1) && p.wrapping_offset(prime_ * 30 + 1) < end); *p.offset(prime_ * 30 + 1) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 36 + 2) && p.wrapping_offset(prime_ * 36 + 2) < end); *p.offset(prime_ * 36 + 2) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 40 + 2) && p.wrapping_offset(prime_ * 40 + 2) < end); *p.offset(prime_ * 40 + 2) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 42 + 2) && p.wrapping_offset(prime_ * 42 + 2) < end); *p.offset(prime_ * 42 + 2) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 46 + 2) && p.wrapping_offset(prime_ * 46 + 2) < end); *p.offset(prime_ * 46 + 2) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 52 + 3) && p.wrapping_offset(prime_ * 52 + 3) < end); *p.offset(prime_ * 52 + 3) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 58 + 3) && p.wrapping_offset(prime_ * 58 + 3) < end); *p.offset(prime_ * 58 + 3) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 60 + 3) && p.wrapping_offset(prime_ * 60 + 3) < end); *p.offset(prime_ * 60 + 3) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 66 + 4) && p.wrapping_offset(prime_ * 66 + 4) < end); *p.offset(prime_ * 66 + 4) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 70 + 4) && p.wrapping_offset(prime_ * 70 + 4) < end); *p.offset(prime_ * 70 + 4) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 72 + 4) && p.wrapping_offset(prime_ * 72 + 4) < end); *p.offset(prime_ * 72 + 4) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 78 + 4) && p.wrapping_offset(prime_ * 78 + 4) < end); *p.offset(prime_ * 78 + 4) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 82 + 5) && p.wrapping_offset(prime_ * 82 + 5) < end); *p.offset(prime_ * 82 + 5) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 88 + 5) && p.wrapping_offset(prime_ * 88 + 5) < end); *p.offset(prime_ * 88 + 5) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 96 + 6) && p.wrapping_offset(prime_ * 96 + 6) < end); *p.offset(prime_ * 96 + 6) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 100 + 6) && p.wrapping_offset(prime_ * 100 + 6) < end); *p.offset(prime_ * 100 + 6) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 102 + 6) && p.wrapping_offset(prime_ * 102 + 6) < end); *p.offset(prime_ * 102 + 6) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 106 + 6) && p.wrapping_offset(prime_ * 106 + 6) < end); *p.offset(prime_ * 106 + 6) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 108 + 6) && p.wrapping_offset(prime_ * 108 + 6) < end); *p.offset(prime_ * 108 + 6) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 112 + 6) && p.wrapping_offset(prime_ * 112 + 6) < end); *p.offset(prime_ * 112 + 6) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 120 + 7) && p.wrapping_offset(prime_ * 120 + 7) < end); *p.offset(prime_ * 120 + 7) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 126 + 7) && p.wrapping_offset(prime_ * 126 + 7) < end); *p.offset(prime_ * 126 + 7) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 130 + 8) && p.wrapping_offset(prime_ * 130 + 8) < end); *p.offset(prime_ * 130 + 8) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 136 + 8) && p.wrapping_offset(prime_ * 136 + 8) < end); *p.offset(prime_ * 136 + 8) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 138 + 8) && p.wrapping_offset(prime_ * 138 + 8) < end); *p.offset(prime_ * 138 + 8) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 142 + 8) && p.wrapping_offset(prime_ * 142 + 8) < end); *p.offset(prime_ * 142 + 8) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 148 + 9) && p.wrapping_offset(prime_ * 148 + 9) < end); *p.offset(prime_ * 148 + 9) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 150 + 9) && p.wrapping_offset(prime_ * 150 + 9) < end); *p.offset(prime_ * 150 + 9) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 156 + 9) && p.wrapping_offset(prime_ * 156 + 9) < end); *p.offset(prime_ * 156 + 9) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 162 + 10) && p.wrapping_offset(prime_ * 162 + 10) < end); *p.offset(prime_ * 162 + 10) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 166 + 10) && p.wrapping_offset(prime_ * 166 + 10) < end); *p.offset(prime_ * 166 + 10) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 168 + 10) && p.wrapping_offset(prime_ * 168 + 10) < end); *p.offset(prime_ * 168 + 10) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 172 + 10) && p.wrapping_offset(prime_ * 172 + 10) < end); *p.offset(prime_ * 172 + 10) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 178 + 11) && p.wrapping_offset(prime_ * 178 + 11) < end); *p.offset(prime_ * 178 + 11) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 180 + 11) && p.wrapping_offset(prime_ * 180 + 11) < end); *p.offset(prime_ * 180 + 11) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 186 + 11) && p.wrapping_offset(prime_ * 186 + 11) < end); *p.offset(prime_ * 186 + 11) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 190 + 11) && p.wrapping_offset(prime_ * 190 + 11) < end); *p.offset(prime_ * 190 + 11) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 192 + 11) && p.wrapping_offset(prime_ * 192 + 11) < end); *p.offset(prime_ * 192 + 11) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 196 + 12) && p.wrapping_offset(prime_ * 196 + 12) < end); *p.offset(prime_ * 196 + 12) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 198 + 12) && p.wrapping_offset(prime_ * 198 + 12) < end); *p.offset(prime_ * 198 + 12) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 208 + 12) && p.wrapping_offset(prime_ * 208 + 12) < end); *p.offset(prime_ * 208 + 12) &= 239; let p2 = p.wrapping_offset(prime_ * 210 + 17); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 144; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 10 + 4); p = if p <= p2 { p2 } else { end }; break 'label145 } if p >= end { wi = 145; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label146 } if p >= end { wi = 146; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label147 } if p >= end { wi = 147; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label148 } if p >= end { wi = 148; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label149 } if p >= end { wi = 149; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label150 } if p >= end { wi = 150; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label151 } if p >= end { wi = 151; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label152 } if p >= end { wi = 152; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label153 } if p >= end { wi = 153; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label154 } if p >= end { wi = 154; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label155 } if p >= end { wi = 155; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label156 } if p >= end { wi = 156; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label157 } if p >= end { wi = 157; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label158 } if p >= end { wi = 158; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label159 } if p >= end { wi = 159; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label160 } if p >= end { wi = 160; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label161 } if p >= end { wi = 161; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label162 } if p >= end { wi = 162; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label163 } if p >= end { wi = 163; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label164 } if p >= end { wi = 164; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 8 + 4); p = if p <= p2 { p2 } else { end }; break 'label165 } if p >= end { wi = 165; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label166 } if p >= end { wi = 166; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label167 } if p >= end { wi = 167; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label168 } if p >= end { wi = 168; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label169 } if p >= end { wi = 169; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label170 } if p >= end { wi = 170; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 8 + 4); p = if p <= p2 { p2 } else { end }; break 'label171 } if p >= end { wi = 171; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label172 } if p >= end { wi = 172; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label173 } if p >= end { wi = 173; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label174 } if p >= end { wi = 174; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label175 } if p >= end { wi = 175; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label176 } if p >= end { wi = 176; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label177 } if p >= end { wi = 177; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label178 } if p >= end { wi = 178; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label179 } if p >= end { wi = 179; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label180 } if p >= end { wi = 180; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label181 } if p >= end { wi = 181; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label182 } if p >= end { wi = 182; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label183 } if p >= end { wi = 183; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label184 } if p >= end { wi = 184; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label185 } if p >= end { wi = 185; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label186 } if p >= end { wi = 186; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label187 } if p >= end { wi = 187; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label188 } if p >= end { wi = 188; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label189 } if p >= end { wi = 189; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label190 } if p >= end { wi = 190; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 10 + 4); p = if p <= p2 { p2 } else { end }; break 'label191 } if p >= end { wi = 191; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 144 } } 192..=239 => { // 30 * x + 19 loop { 'label239: loop { 'label238: loop { 'label237: loop { 'label236: loop { 'label235: loop { 'label234: loop { 'label233: loop { 'label232: loop { 'label231: loop { 'label230: loop { 'label229: loop { 'label228: loop { 'label227: loop { 'label226: loop { 'label225: loop { 'label224: loop { 'label223: loop { 'label222: loop { 'label221: loop { 'label220: loop { 'label219: loop { 'label218: loop { 'label217: loop { 'label216: loop { 'label215: loop { 'label214: loop { 'label213: loop { 'label212: loop { 'label211: loop { 'label210: loop { 'label209: loop { 'label208: loop { 'label207: loop { 'label206: loop { 'label205: loop { 'label204: loop { 'label203: loop { 'label202: loop { 'label201: loop { 'label200: loop { 'label199: loop { 'label198: loop { 'label197: loop { 'label196: loop { 'label195: loop { 'label194: loop { 'label193: loop { 'label192: loop { match wi { 192 => break 'label192, 193 => break 'label193, 194 => break 'label194, 195 => break 'label195, 196 => break 'label196, 197 => break 'label197, 198 => break 'label198, 199 => break 'label199, 200 => break 'label200, 201 => break 'label201, 202 => break 'label202, 203 => break 'label203, 204 => break 'label204, 205 => break 'label205, 206 => break 'label206, 207 => break 'label207, 208 => break 'label208, 209 => break 'label209, 210 => break 'label210, 211 => break 'label211, 212 => break 'label212, 213 => break 'label213, 214 => break 'label214, 215 => break 'label215, 216 => break 'label216, 217 => break 'label217, 218 => break 'label218, 219 => break 'label219, 220 => break 'label220, 221 => break 'label221, 222 => break 'label222, 223 => break 'label223, 224 => break 'label224, 225 => break 'label225, 226 => break 'label226, 227 => break 'label227, 228 => break 'label228, 229 => break 'label229, 230 => break 'label230, 231 => break 'label231, 232 => break 'label232, 233 => break 'label233, 234 => break 'label234, 235 => break 'label235, 236 => break 'label236, 237 => break 'label237, 238 => break 'label238, _ => break 'label239, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 0) && p.wrapping_offset(prime_ * 10 + 0) < end); *p.offset(prime_ * 10 + 0) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 1) && p.wrapping_offset(prime_ * 12 + 1) < end); *p.offset(prime_ * 12 + 1) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 1) && p.wrapping_offset(prime_ * 16 + 1) < end); *p.offset(prime_ * 16 + 1) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 1) && p.wrapping_offset(prime_ * 18 + 1) < end); *p.offset(prime_ * 18 + 1) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 1) && p.wrapping_offset(prime_ * 22 + 1) < end); *p.offset(prime_ * 22 + 1) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 2) && p.wrapping_offset(prime_ * 28 + 2) < end); *p.offset(prime_ * 28 + 2) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 30 + 2) && p.wrapping_offset(prime_ * 30 + 2) < end); *p.offset(prime_ * 30 + 2) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 36 + 2) && p.wrapping_offset(prime_ * 36 + 2) < end); *p.offset(prime_ * 36 + 2) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 40 + 3) && p.wrapping_offset(prime_ * 40 + 3) < end); *p.offset(prime_ * 40 + 3) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 42 + 3) && p.wrapping_offset(prime_ * 42 + 3) < end); *p.offset(prime_ * 42 + 3) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 46 + 3) && p.wrapping_offset(prime_ * 46 + 3) < end); *p.offset(prime_ * 46 + 3) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 52 + 4) && p.wrapping_offset(prime_ * 52 + 4) < end); *p.offset(prime_ * 52 + 4) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 58 + 4) && p.wrapping_offset(prime_ * 58 + 4) < end); *p.offset(prime_ * 58 + 4) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 60 + 4) && p.wrapping_offset(prime_ * 60 + 4) < end); *p.offset(prime_ * 60 + 4) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 66 + 5) && p.wrapping_offset(prime_ * 66 + 5) < end); *p.offset(prime_ * 66 + 5) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 70 + 5) && p.wrapping_offset(prime_ * 70 + 5) < end); *p.offset(prime_ * 70 + 5) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 72 + 5) && p.wrapping_offset(prime_ * 72 + 5) < end); *p.offset(prime_ * 72 + 5) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 78 + 6) && p.wrapping_offset(prime_ * 78 + 6) < end); *p.offset(prime_ * 78 + 6) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 82 + 6) && p.wrapping_offset(prime_ * 82 + 6) < end); *p.offset(prime_ * 82 + 6) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 88 + 7) && p.wrapping_offset(prime_ * 88 + 7) < end); *p.offset(prime_ * 88 + 7) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 96 + 7) && p.wrapping_offset(prime_ * 96 + 7) < end); *p.offset(prime_ * 96 + 7) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 100 + 8) && p.wrapping_offset(prime_ * 100 + 8) < end); *p.offset(prime_ * 100 + 8) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 102 + 8) && p.wrapping_offset(prime_ * 102 + 8) < end); *p.offset(prime_ * 102 + 8) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 106 + 8) && p.wrapping_offset(prime_ * 106 + 8) < end); *p.offset(prime_ * 106 + 8) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 108 + 8) && p.wrapping_offset(prime_ * 108 + 8) < end); *p.offset(prime_ * 108 + 8) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 112 + 9) && p.wrapping_offset(prime_ * 112 + 9) < end); *p.offset(prime_ * 112 + 9) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 120 + 9) && p.wrapping_offset(prime_ * 120 + 9) < end); *p.offset(prime_ * 120 + 9) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 126 + 10) && p.wrapping_offset(prime_ * 126 + 10) < end); *p.offset(prime_ * 126 + 10) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 130 + 10) && p.wrapping_offset(prime_ * 130 + 10) < end); *p.offset(prime_ * 130 + 10) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 136 + 11) && p.wrapping_offset(prime_ * 136 + 11) < end); *p.offset(prime_ * 136 + 11) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 138 + 11) && p.wrapping_offset(prime_ * 138 + 11) < end); *p.offset(prime_ * 138 + 11) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 142 + 11) && p.wrapping_offset(prime_ * 142 + 11) < end); *p.offset(prime_ * 142 + 11) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 148 + 12) && p.wrapping_offset(prime_ * 148 + 12) < end); *p.offset(prime_ * 148 + 12) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 150 + 12) && p.wrapping_offset(prime_ * 150 + 12) < end); *p.offset(prime_ * 150 + 12) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 156 + 12) && p.wrapping_offset(prime_ * 156 + 12) < end); *p.offset(prime_ * 156 + 12) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 162 + 13) && p.wrapping_offset(prime_ * 162 + 13) < end); *p.offset(prime_ * 162 + 13) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 166 + 13) && p.wrapping_offset(prime_ * 166 + 13) < end); *p.offset(prime_ * 166 + 13) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 168 + 13) && p.wrapping_offset(prime_ * 168 + 13) < end); *p.offset(prime_ * 168 + 13) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 172 + 14) && p.wrapping_offset(prime_ * 172 + 14) < end); *p.offset(prime_ * 172 + 14) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 178 + 14) && p.wrapping_offset(prime_ * 178 + 14) < end); *p.offset(prime_ * 178 + 14) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 180 + 14) && p.wrapping_offset(prime_ * 180 + 14) < end); *p.offset(prime_ * 180 + 14) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 186 + 15) && p.wrapping_offset(prime_ * 186 + 15) < end); *p.offset(prime_ * 186 + 15) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 190 + 15) && p.wrapping_offset(prime_ * 190 + 15) < end); *p.offset(prime_ * 190 + 15) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 192 + 15) && p.wrapping_offset(prime_ * 192 + 15) < end); *p.offset(prime_ * 192 + 15) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 196 + 15) && p.wrapping_offset(prime_ * 196 + 15) < end); *p.offset(prime_ * 196 + 15) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 198 + 16) && p.wrapping_offset(prime_ * 198 + 16) < end); *p.offset(prime_ * 198 + 16) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 208 + 16) && p.wrapping_offset(prime_ * 208 + 16) < end); *p.offset(prime_ * 208 + 16) &= 247; let p2 = p.wrapping_offset(prime_ * 210 + 19); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 192; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 10 + 6); p = if p <= p2 { p2 } else { end }; break 'label193 } if p >= end { wi = 193; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label194 } if p >= end { wi = 194; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label195 } if p >= end { wi = 195; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label196 } if p >= end { wi = 196; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label197 } if p >= end { wi = 197; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label198 } if p >= end { wi = 198; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label199 } if p >= end { wi = 199; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label200 } if p >= end { wi = 200; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label201 } if p >= end { wi = 201; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label202 } if p >= end { wi = 202; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label203 } if p >= end { wi = 203; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label204 } if p >= end { wi = 204; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label205 } if p >= end { wi = 205; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label206 } if p >= end { wi = 206; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label207 } if p >= end { wi = 207; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label208 } if p >= end { wi = 208; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label209 } if p >= end { wi = 209; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label210 } if p >= end { wi = 210; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label211 } if p >= end { wi = 211; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label212 } if p >= end { wi = 212; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 8 + 4); p = if p <= p2 { p2 } else { end }; break 'label213 } if p >= end { wi = 213; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label214 } if p >= end { wi = 214; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label215 } if p >= end { wi = 215; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label216 } if p >= end { wi = 216; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label217 } if p >= end { wi = 217; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label218 } if p >= end { wi = 218; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 8 + 4); p = if p <= p2 { p2 } else { end }; break 'label219 } if p >= end { wi = 219; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label220 } if p >= end { wi = 220; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label221 } if p >= end { wi = 221; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label222 } if p >= end { wi = 222; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label223 } if p >= end { wi = 223; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label224 } if p >= end { wi = 224; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label225 } if p >= end { wi = 225; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label226 } if p >= end { wi = 226; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label227 } if p >= end { wi = 227; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label228 } if p >= end { wi = 228; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label229 } if p >= end { wi = 229; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label230 } if p >= end { wi = 230; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label231 } if p >= end { wi = 231; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label232 } if p >= end { wi = 232; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label233 } if p >= end { wi = 233; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label234 } if p >= end { wi = 234; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label235 } if p >= end { wi = 235; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label236 } if p >= end { wi = 236; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label237 } if p >= end { wi = 237; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label238 } if p >= end { wi = 238; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 10 + 6); p = if p <= p2 { p2 } else { end }; break 'label239 } if p >= end { wi = 239; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 192 } } 240..=287 => { // 30 * x + 23 loop { 'label287: loop { 'label286: loop { 'label285: loop { 'label284: loop { 'label283: loop { 'label282: loop { 'label281: loop { 'label280: loop { 'label279: loop { 'label278: loop { 'label277: loop { 'label276: loop { 'label275: loop { 'label274: loop { 'label273: loop { 'label272: loop { 'label271: loop { 'label270: loop { 'label269: loop { 'label268: loop { 'label267: loop { 'label266: loop { 'label265: loop { 'label264: loop { 'label263: loop { 'label262: loop { 'label261: loop { 'label260: loop { 'label259: loop { 'label258: loop { 'label257: loop { 'label256: loop { 'label255: loop { 'label254: loop { 'label253: loop { 'label252: loop { 'label251: loop { 'label250: loop { 'label249: loop { 'label248: loop { 'label247: loop { 'label246: loop { 'label245: loop { 'label244: loop { 'label243: loop { 'label242: loop { 'label241: loop { 'label240: loop { match wi { 240 => break 'label240, 241 => break 'label241, 242 => break 'label242, 243 => break 'label243, 244 => break 'label244, 245 => break 'label245, 246 => break 'label246, 247 => break 'label247, 248 => break 'label248, 249 => break 'label249, 250 => break 'label250, 251 => break 'label251, 252 => break 'label252, 253 => break 'label253, 254 => break 'label254, 255 => break 'label255, 256 => break 'label256, 257 => break 'label257, 258 => break 'label258, 259 => break 'label259, 260 => break 'label260, 261 => break 'label261, 262 => break 'label262, 263 => break 'label263, 264 => break 'label264, 265 => break 'label265, 266 => break 'label266, 267 => break 'label267, 268 => break 'label268, 269 => break 'label269, 270 => break 'label270, 271 => break 'label271, 272 => break 'label272, 273 => break 'label273, 274 => break 'label274, 275 => break 'label275, 276 => break 'label276, 277 => break 'label277, 278 => break 'label278, 279 => break 'label279, 280 => break 'label280, 281 => break 'label281, 282 => break 'label282, 283 => break 'label283, 284 => break 'label284, 285 => break 'label285, 286 => break 'label286, _ => break 'label287, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 0) && p.wrapping_offset(prime_ * 10 + 0) < end); *p.offset(prime_ * 10 + 0) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 1) && p.wrapping_offset(prime_ * 12 + 1) < end); *p.offset(prime_ * 12 + 1) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 1) && p.wrapping_offset(prime_ * 16 + 1) < end); *p.offset(prime_ * 16 + 1) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 1) && p.wrapping_offset(prime_ * 18 + 1) < end); *p.offset(prime_ * 18 + 1) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 2) && p.wrapping_offset(prime_ * 22 + 2) < end); *p.offset(prime_ * 22 + 2) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 2) && p.wrapping_offset(prime_ * 28 + 2) < end); *p.offset(prime_ * 28 + 2) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 30 + 2) && p.wrapping_offset(prime_ * 30 + 2) < end); *p.offset(prime_ * 30 + 2) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 36 + 3) && p.wrapping_offset(prime_ * 36 + 3) < end); *p.offset(prime_ * 36 + 3) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 40 + 3) && p.wrapping_offset(prime_ * 40 + 3) < end); *p.offset(prime_ * 40 + 3) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 42 + 3) && p.wrapping_offset(prime_ * 42 + 3) < end); *p.offset(prime_ * 42 + 3) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 46 + 4) && p.wrapping_offset(prime_ * 46 + 4) < end); *p.offset(prime_ * 46 + 4) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 52 + 4) && p.wrapping_offset(prime_ * 52 + 4) < end); *p.offset(prime_ * 52 + 4) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 58 + 5) && p.wrapping_offset(prime_ * 58 + 5) < end); *p.offset(prime_ * 58 + 5) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 60 + 5) && p.wrapping_offset(prime_ * 60 + 5) < end); *p.offset(prime_ * 60 + 5) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 66 + 6) && p.wrapping_offset(prime_ * 66 + 6) < end); *p.offset(prime_ * 66 + 6) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 70 + 6) && p.wrapping_offset(prime_ * 70 + 6) < end); *p.offset(prime_ * 70 + 6) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 72 + 6) && p.wrapping_offset(prime_ * 72 + 6) < end); *p.offset(prime_ * 72 + 6) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 78 + 7) && p.wrapping_offset(prime_ * 78 + 7) < end); *p.offset(prime_ * 78 + 7) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 82 + 7) && p.wrapping_offset(prime_ * 82 + 7) < end); *p.offset(prime_ * 82 + 7) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 88 + 8) && p.wrapping_offset(prime_ * 88 + 8) < end); *p.offset(prime_ * 88 + 8) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 96 + 8) && p.wrapping_offset(prime_ * 96 + 8) < end); *p.offset(prime_ * 96 + 8) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 100 + 9) && p.wrapping_offset(prime_ * 100 + 9) < end); *p.offset(prime_ * 100 + 9) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 102 + 9) && p.wrapping_offset(prime_ * 102 + 9) < end); *p.offset(prime_ * 102 + 9) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 106 + 9) && p.wrapping_offset(prime_ * 106 + 9) < end); *p.offset(prime_ * 106 + 9) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 108 + 9) && p.wrapping_offset(prime_ * 108 + 9) < end); *p.offset(prime_ * 108 + 9) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 112 + 10) && p.wrapping_offset(prime_ * 112 + 10) < end); *p.offset(prime_ * 112 + 10) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 120 + 10) && p.wrapping_offset(prime_ * 120 + 10) < end); *p.offset(prime_ * 120 + 10) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 126 + 11) && p.wrapping_offset(prime_ * 126 + 11) < end); *p.offset(prime_ * 126 + 11) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 130 + 11) && p.wrapping_offset(prime_ * 130 + 11) < end); *p.offset(prime_ * 130 + 11) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 136 + 12) && p.wrapping_offset(prime_ * 136 + 12) < end); *p.offset(prime_ * 136 + 12) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 138 + 12) && p.wrapping_offset(prime_ * 138 + 12) < end); *p.offset(prime_ * 138 + 12) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 142 + 12) && p.wrapping_offset(prime_ * 142 + 12) < end); *p.offset(prime_ * 142 + 12) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 148 + 13) && p.wrapping_offset(prime_ * 148 + 13) < end); *p.offset(prime_ * 148 + 13) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 150 + 13) && p.wrapping_offset(prime_ * 150 + 13) < end); *p.offset(prime_ * 150 + 13) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 156 + 14) && p.wrapping_offset(prime_ * 156 + 14) < end); *p.offset(prime_ * 156 + 14) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 162 + 14) && p.wrapping_offset(prime_ * 162 + 14) < end); *p.offset(prime_ * 162 + 14) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 166 + 15) && p.wrapping_offset(prime_ * 166 + 15) < end); *p.offset(prime_ * 166 + 15) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 168 + 15) && p.wrapping_offset(prime_ * 168 + 15) < end); *p.offset(prime_ * 168 + 15) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 172 + 15) && p.wrapping_offset(prime_ * 172 + 15) < end); *p.offset(prime_ * 172 + 15) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 178 + 16) && p.wrapping_offset(prime_ * 178 + 16) < end); *p.offset(prime_ * 178 + 16) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 180 + 16) && p.wrapping_offset(prime_ * 180 + 16) < end); *p.offset(prime_ * 180 + 16) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 186 + 16) && p.wrapping_offset(prime_ * 186 + 16) < end); *p.offset(prime_ * 186 + 16) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 190 + 17) && p.wrapping_offset(prime_ * 190 + 17) < end); *p.offset(prime_ * 190 + 17) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 192 + 17) && p.wrapping_offset(prime_ * 192 + 17) < end); *p.offset(prime_ * 192 + 17) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 196 + 17) && p.wrapping_offset(prime_ * 196 + 17) < end); *p.offset(prime_ * 196 + 17) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 198 + 18) && p.wrapping_offset(prime_ * 198 + 18) < end); *p.offset(prime_ * 198 + 18) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 208 + 18) && p.wrapping_offset(prime_ * 208 + 18) < end); *p.offset(prime_ * 208 + 18) &= 251; let p2 = p.wrapping_offset(prime_ * 210 + 23); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 240; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 10 + 6); p = if p <= p2 { p2 } else { end }; break 'label241 } if p >= end { wi = 241; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label242 } if p >= end { wi = 242; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label243 } if p >= end { wi = 243; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label244 } if p >= end { wi = 244; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label245 } if p >= end { wi = 245; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label246 } if p >= end { wi = 246; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label247 } if p >= end { wi = 247; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label248 } if p >= end { wi = 248; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label249 } if p >= end { wi = 249; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label250 } if p >= end { wi = 250; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label251 } if p >= end { wi = 251; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label252 } if p >= end { wi = 252; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label253 } if p >= end { wi = 253; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label254 } if p >= end { wi = 254; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label255 } if p >= end { wi = 255; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label256 } if p >= end { wi = 256; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label257 } if p >= end { wi = 257; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label258 } if p >= end { wi = 258; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label259 } if p >= end { wi = 259; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label260 } if p >= end { wi = 260; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 8 + 5); p = if p <= p2 { p2 } else { end }; break 'label261 } if p >= end { wi = 261; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label262 } if p >= end { wi = 262; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label263 } if p >= end { wi = 263; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label264 } if p >= end { wi = 264; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label265 } if p >= end { wi = 265; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label266 } if p >= end { wi = 266; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 8 + 5); p = if p <= p2 { p2 } else { end }; break 'label267 } if p >= end { wi = 267; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label268 } if p >= end { wi = 268; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label269 } if p >= end { wi = 269; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label270 } if p >= end { wi = 270; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label271 } if p >= end { wi = 271; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label272 } if p >= end { wi = 272; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label273 } if p >= end { wi = 273; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label274 } if p >= end { wi = 274; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label275 } if p >= end { wi = 275; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label276 } if p >= end { wi = 276; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label277 } if p >= end { wi = 277; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label278 } if p >= end { wi = 278; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label279 } if p >= end { wi = 279; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label280 } if p >= end { wi = 280; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label281 } if p >= end { wi = 281; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label282 } if p >= end { wi = 282; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label283 } if p >= end { wi = 283; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label284 } if p >= end { wi = 284; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label285 } if p >= end { wi = 285; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label286 } if p >= end { wi = 286; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 10 + 6); p = if p <= p2 { p2 } else { end }; break 'label287 } if p >= end { wi = 287; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 240 } } 288..=335 => { // 30 * x + 29 loop { 'label335: loop { 'label334: loop { 'label333: loop { 'label332: loop { 'label331: loop { 'label330: loop { 'label329: loop { 'label328: loop { 'label327: loop { 'label326: loop { 'label325: loop { 'label324: loop { 'label323: loop { 'label322: loop { 'label321: loop { 'label320: loop { 'label319: loop { 'label318: loop { 'label317: loop { 'label316: loop { 'label315: loop { 'label314: loop { 'label313: loop { 'label312: loop { 'label311: loop { 'label310: loop { 'label309: loop { 'label308: loop { 'label307: loop { 'label306: loop { 'label305: loop { 'label304: loop { 'label303: loop { 'label302: loop { 'label301: loop { 'label300: loop { 'label299: loop { 'label298: loop { 'label297: loop { 'label296: loop { 'label295: loop { 'label294: loop { 'label293: loop { 'label292: loop { 'label291: loop { 'label290: loop { 'label289: loop { 'label288: loop { match wi { 288 => break 'label288, 289 => break 'label289, 290 => break 'label290, 291 => break 'label291, 292 => break 'label292, 293 => break 'label293, 294 => break 'label294, 295 => break 'label295, 296 => break 'label296, 297 => break 'label297, 298 => break 'label298, 299 => break 'label299, 300 => break 'label300, 301 => break 'label301, 302 => break 'label302, 303 => break 'label303, 304 => break 'label304, 305 => break 'label305, 306 => break 'label306, 307 => break 'label307, 308 => break 'label308, 309 => break 'label309, 310 => break 'label310, 311 => break 'label311, 312 => break 'label312, 313 => break 'label313, 314 => break 'label314, 315 => break 'label315, 316 => break 'label316, 317 => break 'label317, 318 => break 'label318, 319 => break 'label319, 320 => break 'label320, 321 => break 'label321, 322 => break 'label322, 323 => break 'label323, 324 => break 'label324, 325 => break 'label325, 326 => break 'label326, 327 => break 'label327, 328 => break 'label328, 329 => break 'label329, 330 => break 'label330, 331 => break 'label331, 332 => break 'label332, 333 => break 'label333, 334 => break 'label334, _ => break 'label335, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 1) && p.wrapping_offset(prime_ * 10 + 1) < end); *p.offset(prime_ * 10 + 1) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 1) && p.wrapping_offset(prime_ * 12 + 1) < end); *p.offset(prime_ * 12 + 1) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 1) && p.wrapping_offset(prime_ * 16 + 1) < end); *p.offset(prime_ * 16 + 1) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 2) && p.wrapping_offset(prime_ * 18 + 2) < end); *p.offset(prime_ * 18 + 2) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 2) && p.wrapping_offset(prime_ * 22 + 2) < end); *p.offset(prime_ * 22 + 2) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 3) && p.wrapping_offset(prime_ * 28 + 3) < end); *p.offset(prime_ * 28 + 3) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 30 + 3) && p.wrapping_offset(prime_ * 30 + 3) < end); *p.offset(prime_ * 30 + 3) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 36 + 4) && p.wrapping_offset(prime_ * 36 + 4) < end); *p.offset(prime_ * 36 + 4) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 40 + 4) && p.wrapping_offset(prime_ * 40 + 4) < end); *p.offset(prime_ * 40 + 4) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 42 + 4) && p.wrapping_offset(prime_ * 42 + 4) < end); *p.offset(prime_ * 42 + 4) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 46 + 5) && p.wrapping_offset(prime_ * 46 + 5) < end); *p.offset(prime_ * 46 + 5) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 52 + 5) && p.wrapping_offset(prime_ * 52 + 5) < end); *p.offset(prime_ * 52 + 5) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 58 + 6) && p.wrapping_offset(prime_ * 58 + 6) < end); *p.offset(prime_ * 58 + 6) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 60 + 6) && p.wrapping_offset(prime_ * 60 + 6) < end); *p.offset(prime_ * 60 + 6) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 66 + 7) && p.wrapping_offset(prime_ * 66 + 7) < end); *p.offset(prime_ * 66 + 7) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 70 + 7) && p.wrapping_offset(prime_ * 70 + 7) < end); *p.offset(prime_ * 70 + 7) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 72 + 7) && p.wrapping_offset(prime_ * 72 + 7) < end); *p.offset(prime_ * 72 + 7) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 78 + 8) && p.wrapping_offset(prime_ * 78 + 8) < end); *p.offset(prime_ * 78 + 8) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 82 + 9) && p.wrapping_offset(prime_ * 82 + 9) < end); *p.offset(prime_ * 82 + 9) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 88 + 9) && p.wrapping_offset(prime_ * 88 + 9) < end); *p.offset(prime_ * 88 + 9) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 96 + 10) && p.wrapping_offset(prime_ * 96 + 10) < end); *p.offset(prime_ * 96 + 10) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 100 + 11) && p.wrapping_offset(prime_ * 100 + 11) < end); *p.offset(prime_ * 100 + 11) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 102 + 11) && p.wrapping_offset(prime_ * 102 + 11) < end); *p.offset(prime_ * 102 + 11) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 106 + 11) && p.wrapping_offset(prime_ * 106 + 11) < end); *p.offset(prime_ * 106 + 11) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 108 + 11) && p.wrapping_offset(prime_ * 108 + 11) < end); *p.offset(prime_ * 108 + 11) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 112 + 12) && p.wrapping_offset(prime_ * 112 + 12) < end); *p.offset(prime_ * 112 + 12) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 120 + 13) && p.wrapping_offset(prime_ * 120 + 13) < end); *p.offset(prime_ * 120 + 13) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 126 + 13) && p.wrapping_offset(prime_ * 126 + 13) < end); *p.offset(prime_ * 126 + 13) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 130 + 14) && p.wrapping_offset(prime_ * 130 + 14) < end); *p.offset(prime_ * 130 + 14) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 136 + 15) && p.wrapping_offset(prime_ * 136 + 15) < end); *p.offset(prime_ * 136 + 15) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 138 + 15) && p.wrapping_offset(prime_ * 138 + 15) < end); *p.offset(prime_ * 138 + 15) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 142 + 15) && p.wrapping_offset(prime_ * 142 + 15) < end); *p.offset(prime_ * 142 + 15) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 148 + 16) && p.wrapping_offset(prime_ * 148 + 16) < end); *p.offset(prime_ * 148 + 16) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 150 + 16) && p.wrapping_offset(prime_ * 150 + 16) < end); *p.offset(prime_ * 150 + 16) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 156 + 17) && p.wrapping_offset(prime_ * 156 + 17) < end); *p.offset(prime_ * 156 + 17) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 162 + 17) && p.wrapping_offset(prime_ * 162 + 17) < end); *p.offset(prime_ * 162 + 17) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 166 + 18) && p.wrapping_offset(prime_ * 166 + 18) < end); *p.offset(prime_ * 166 + 18) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 168 + 18) && p.wrapping_offset(prime_ * 168 + 18) < end); *p.offset(prime_ * 168 + 18) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 172 + 18) && p.wrapping_offset(prime_ * 172 + 18) < end); *p.offset(prime_ * 172 + 18) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 178 + 19) && p.wrapping_offset(prime_ * 178 + 19) < end); *p.offset(prime_ * 178 + 19) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 180 + 19) && p.wrapping_offset(prime_ * 180 + 19) < end); *p.offset(prime_ * 180 + 19) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 186 + 20) && p.wrapping_offset(prime_ * 186 + 20) < end); *p.offset(prime_ * 186 + 20) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 190 + 20) && p.wrapping_offset(prime_ * 190 + 20) < end); *p.offset(prime_ * 190 + 20) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 192 + 21) && p.wrapping_offset(prime_ * 192 + 21) < end); *p.offset(prime_ * 192 + 21) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 196 + 21) && p.wrapping_offset(prime_ * 196 + 21) < end); *p.offset(prime_ * 196 + 21) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 198 + 21) && p.wrapping_offset(prime_ * 198 + 21) < end); *p.offset(prime_ * 198 + 21) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 208 + 22) && p.wrapping_offset(prime_ * 208 + 22) < end); *p.offset(prime_ * 208 + 22) &= 253; let p2 = p.wrapping_offset(prime_ * 210 + 29); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 288; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 10 + 8); p = if p <= p2 { p2 } else { end }; break 'label289 } if p >= end { wi = 289; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label290 } if p >= end { wi = 290; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label291 } if p >= end { wi = 291; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label292 } if p >= end { wi = 292; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label293 } if p >= end { wi = 293; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label294 } if p >= end { wi = 294; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label295 } if p >= end { wi = 295; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label296 } if p >= end { wi = 296; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label297 } if p >= end { wi = 297; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label298 } if p >= end { wi = 298; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label299 } if p >= end { wi = 299; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label300 } if p >= end { wi = 300; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label301 } if p >= end { wi = 301; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label302 } if p >= end { wi = 302; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label303 } if p >= end { wi = 303; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label304 } if p >= end { wi = 304; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label305 } if p >= end { wi = 305; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label306 } if p >= end { wi = 306; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label307 } if p >= end { wi = 307; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label308 } if p >= end { wi = 308; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 8 + 6); p = if p <= p2 { p2 } else { end }; break 'label309 } if p >= end { wi = 309; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label310 } if p >= end { wi = 310; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label311 } if p >= end { wi = 311; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label312 } if p >= end { wi = 312; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label313 } if p >= end { wi = 313; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label314 } if p >= end { wi = 314; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 8 + 6); p = if p <= p2 { p2 } else { end }; break 'label315 } if p >= end { wi = 315; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label316 } if p >= end { wi = 316; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label317 } if p >= end { wi = 317; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label318 } if p >= end { wi = 318; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label319 } if p >= end { wi = 319; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label320 } if p >= end { wi = 320; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label321 } if p >= end { wi = 321; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label322 } if p >= end { wi = 322; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label323 } if p >= end { wi = 323; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label324 } if p >= end { wi = 324; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label325 } if p >= end { wi = 325; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label326 } if p >= end { wi = 326; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label327 } if p >= end { wi = 327; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label328 } if p >= end { wi = 328; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label329 } if p >= end { wi = 329; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label330 } if p >= end { wi = 330; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label331 } if p >= end { wi = 331; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label332 } if p >= end { wi = 332; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label333 } if p >= end { wi = 333; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label334 } if p >= end { wi = 334; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 10 + 8); p = if p <= p2 { p2 } else { end }; break 'label335 } if p >= end { wi = 335; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 288 } } 336..=383 => { // 30 * x + 31 loop { 'label383: loop { 'label382: loop { 'label381: loop { 'label380: loop { 'label379: loop { 'label378: loop { 'label377: loop { 'label376: loop { 'label375: loop { 'label374: loop { 'label373: loop { 'label372: loop { 'label371: loop { 'label370: loop { 'label369: loop { 'label368: loop { 'label367: loop { 'label366: loop { 'label365: loop { 'label364: loop { 'label363: loop { 'label362: loop { 'label361: loop { 'label360: loop { 'label359: loop { 'label358: loop { 'label357: loop { 'label356: loop { 'label355: loop { 'label354: loop { 'label353: loop { 'label352: loop { 'label351: loop { 'label350: loop { 'label349: loop { 'label348: loop { 'label347: loop { 'label346: loop { 'label345: loop { 'label344: loop { 'label343: loop { 'label342: loop { 'label341: loop { 'label340: loop { 'label339: loop { 'label338: loop { 'label337: loop { 'label336: loop { match wi { 336 => break 'label336, 337 => break 'label337, 338 => break 'label338, 339 => break 'label339, 340 => break 'label340, 341 => break 'label341, 342 => break 'label342, 343 => break 'label343, 344 => break 'label344, 345 => break 'label345, 346 => break 'label346, 347 => break 'label347, 348 => break 'label348, 349 => break 'label349, 350 => break 'label350, 351 => break 'label351, 352 => break 'label352, 353 => break 'label353, 354 => break 'label354, 355 => break 'label355, 356 => break 'label356, 357 => break 'label357, 358 => break 'label358, 359 => break 'label359, 360 => break 'label360, 361 => break 'label361, 362 => break 'label362, 363 => break 'label363, 364 => break 'label364, 365 => break 'label365, 366 => break 'label366, 367 => break 'label367, 368 => break 'label368, 369 => break 'label369, 370 => break 'label370, 371 => break 'label371, 372 => break 'label372, 373 => break 'label373, 374 => break 'label374, 375 => break 'label375, 376 => break 'label376, 377 => break 'label377, 378 => break 'label378, 379 => break 'label379, 380 => break 'label380, 381 => break 'label381, 382 => break 'label382, _ => break 'label383, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 1) && p.wrapping_offset(prime_ * 10 + 1) < end); *p.offset(prime_ * 10 + 1) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 1) && p.wrapping_offset(prime_ * 12 + 1) < end); *p.offset(prime_ * 12 + 1) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 2) && p.wrapping_offset(prime_ * 16 + 2) < end); *p.offset(prime_ * 16 + 2) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 2) && p.wrapping_offset(prime_ * 18 + 2) < end); *p.offset(prime_ * 18 + 2) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 3) && p.wrapping_offset(prime_ * 22 + 3) < end); *p.offset(prime_ * 22 + 3) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 4) && p.wrapping_offset(prime_ * 28 + 4) < end); *p.offset(prime_ * 28 + 4) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 30 + 4) && p.wrapping_offset(prime_ * 30 + 4) < end); *p.offset(prime_ * 30 + 4) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 36 + 5) && p.wrapping_offset(prime_ * 36 + 5) < end); *p.offset(prime_ * 36 + 5) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 40 + 5) && p.wrapping_offset(prime_ * 40 + 5) < end); *p.offset(prime_ * 40 + 5) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 42 + 5) && p.wrapping_offset(prime_ * 42 + 5) < end); *p.offset(prime_ * 42 + 5) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 46 + 6) && p.wrapping_offset(prime_ * 46 + 6) < end); *p.offset(prime_ * 46 + 6) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 52 + 7) && p.wrapping_offset(prime_ * 52 + 7) < end); *p.offset(prime_ * 52 + 7) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 58 + 8) && p.wrapping_offset(prime_ * 58 + 8) < end); *p.offset(prime_ * 58 + 8) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 60 + 8) && p.wrapping_offset(prime_ * 60 + 8) < end); *p.offset(prime_ * 60 + 8) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 66 + 9) && p.wrapping_offset(prime_ * 66 + 9) < end); *p.offset(prime_ * 66 + 9) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 70 + 9) && p.wrapping_offset(prime_ * 70 + 9) < end); *p.offset(prime_ * 70 + 9) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 72 + 10) && p.wrapping_offset(prime_ * 72 + 10) < end); *p.offset(prime_ * 72 + 10) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 78 + 10) && p.wrapping_offset(prime_ * 78 + 10) < end); *p.offset(prime_ * 78 + 10) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 82 + 11) && p.wrapping_offset(prime_ * 82 + 11) < end); *p.offset(prime_ * 82 + 11) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 88 + 12) && p.wrapping_offset(prime_ * 88 + 12) < end); *p.offset(prime_ * 88 + 12) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 96 + 13) && p.wrapping_offset(prime_ * 96 + 13) < end); *p.offset(prime_ * 96 + 13) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 100 + 13) && p.wrapping_offset(prime_ * 100 + 13) < end); *p.offset(prime_ * 100 + 13) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 102 + 14) && p.wrapping_offset(prime_ * 102 + 14) < end); *p.offset(prime_ * 102 + 14) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 106 + 14) && p.wrapping_offset(prime_ * 106 + 14) < end); *p.offset(prime_ * 106 + 14) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 108 + 15) && p.wrapping_offset(prime_ * 108 + 15) < end); *p.offset(prime_ * 108 + 15) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 112 + 15) && p.wrapping_offset(prime_ * 112 + 15) < end); *p.offset(prime_ * 112 + 15) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 120 + 16) && p.wrapping_offset(prime_ * 120 + 16) < end); *p.offset(prime_ * 120 + 16) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 126 + 17) && p.wrapping_offset(prime_ * 126 + 17) < end); *p.offset(prime_ * 126 + 17) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 130 + 18) && p.wrapping_offset(prime_ * 130 + 18) < end); *p.offset(prime_ * 130 + 18) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 136 + 18) && p.wrapping_offset(prime_ * 136 + 18) < end); *p.offset(prime_ * 136 + 18) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 138 + 19) && p.wrapping_offset(prime_ * 138 + 19) < end); *p.offset(prime_ * 138 + 19) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 142 + 19) && p.wrapping_offset(prime_ * 142 + 19) < end); *p.offset(prime_ * 142 + 19) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 148 + 20) && p.wrapping_offset(prime_ * 148 + 20) < end); *p.offset(prime_ * 148 + 20) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 150 + 20) && p.wrapping_offset(prime_ * 150 + 20) < end); *p.offset(prime_ * 150 + 20) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 156 + 21) && p.wrapping_offset(prime_ * 156 + 21) < end); *p.offset(prime_ * 156 + 21) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 162 + 22) && p.wrapping_offset(prime_ * 162 + 22) < end); *p.offset(prime_ * 162 + 22) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 166 + 23) && p.wrapping_offset(prime_ * 166 + 23) < end); *p.offset(prime_ * 166 + 23) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 168 + 23) && p.wrapping_offset(prime_ * 168 + 23) < end); *p.offset(prime_ * 168 + 23) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 172 + 23) && p.wrapping_offset(prime_ * 172 + 23) < end); *p.offset(prime_ * 172 + 23) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 178 + 24) && p.wrapping_offset(prime_ * 178 + 24) < end); *p.offset(prime_ * 178 + 24) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 180 + 24) && p.wrapping_offset(prime_ * 180 + 24) < end); *p.offset(prime_ * 180 + 24) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 186 + 25) && p.wrapping_offset(prime_ * 186 + 25) < end); *p.offset(prime_ * 186 + 25) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 190 + 26) && p.wrapping_offset(prime_ * 190 + 26) < end); *p.offset(prime_ * 190 + 26) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 192 + 26) && p.wrapping_offset(prime_ * 192 + 26) < end); *p.offset(prime_ * 192 + 26) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 196 + 27) && p.wrapping_offset(prime_ * 196 + 27) < end); *p.offset(prime_ * 196 + 27) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 198 + 27) && p.wrapping_offset(prime_ * 198 + 27) < end); *p.offset(prime_ * 198 + 27) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 208 + 28) && p.wrapping_offset(prime_ * 208 + 28) < end); *p.offset(prime_ * 208 + 28) &= 254; let p2 = p.wrapping_offset(prime_ * 210 + 31); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 336; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 10 + 10); p = if p <= p2 { p2 } else { end }; break 'label337 } if p >= end { wi = 337; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label338 } if p >= end { wi = 338; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label339 } if p >= end { wi = 339; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label340 } if p >= end { wi = 340; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label341 } if p >= end { wi = 341; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label342 } if p >= end { wi = 342; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label343 } if p >= end { wi = 343; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label344 } if p >= end { wi = 344; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label345 } if p >= end { wi = 345; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label346 } if p >= end { wi = 346; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label347 } if p >= end { wi = 347; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label348 } if p >= end { wi = 348; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label349 } if p >= end { wi = 349; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label350 } if p >= end { wi = 350; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label351 } if p >= end { wi = 351; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label352 } if p >= end { wi = 352; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label353 } if p >= end { wi = 353; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label354 } if p >= end { wi = 354; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label355 } if p >= end { wi = 355; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label356 } if p >= end { wi = 356; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 8 + 7); p = if p <= p2 { p2 } else { end }; break 'label357 } if p >= end { wi = 357; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label358 } if p >= end { wi = 358; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label359 } if p >= end { wi = 359; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label360 } if p >= end { wi = 360; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label361 } if p >= end { wi = 361; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label362 } if p >= end { wi = 362; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 8 + 7); p = if p <= p2 { p2 } else { end }; break 'label363 } if p >= end { wi = 363; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label364 } if p >= end { wi = 364; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label365 } if p >= end { wi = 365; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label366 } if p >= end { wi = 366; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label367 } if p >= end { wi = 367; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label368 } if p >= end { wi = 368; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label369 } if p >= end { wi = 369; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label370 } if p >= end { wi = 370; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label371 } if p >= end { wi = 371; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label372 } if p >= end { wi = 372; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label373 } if p >= end { wi = 373; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label374 } if p >= end { wi = 374; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label375 } if p >= end { wi = 375; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label376 } if p >= end { wi = 376; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label377 } if p >= end { wi = 377; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label378 } if p >= end { wi = 378; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label379 } if p >= end { wi = 379; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label380 } if p >= end { wi = 380; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label381 } if p >= end { wi = 381; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label382 } if p >= end { wi = 382; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 10 + 10); p = if p <= p2 { p2 } else { end }; break 'label383 } if p >= end { wi = 383; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 336 } } _ => unreachable!("{}", wi), } } *si_ = (p as usize).wrapping_sub(end as usize); *wi_ = wi; } primal-sieve-0.3.6/src/wheel/wheel30.rs000075500000000000000000001514161046102023000157520ustar 00000000000000// automatically generated #![allow(clippy::all)] use crate::wheel::{WheelInit, Wheel, WheelElem}; #[derive(Debug, Clone)] pub struct Wheel30; impl Wheel for Wheel30 { #[inline(always)] fn modulo(&self) -> usize { MODULO } #[inline(always)] fn size(&self) -> usize { SIZE } #[inline(always)] fn wheel(&self) -> &'static [WheelElem] { WHEEL } #[inline(always)] fn init(&self) -> &'static [WheelInit] { INIT } #[inline(always)] unsafe fn hardcoded_sieve(&self, bytes: &mut [u8], si_: &mut usize, wi_: &mut usize, prime: usize) { hardcoded_sieve(bytes, si_, wi_, prime) } } pub const SIZE: usize = 8; pub const MODULO: usize = 30; #[allow(dead_code)] pub const SMALL_BITS: usize = 2672; #[allow(dead_code)] pub const SMALL: &[u8; SMALL_BITS / 8] = &[ 0b11111110, 0b11011111, 0b11101111, 0b01111110, 0b10110110, 0b11011011, 0b00111101, 0b11111001, 0b11010101, 0b01001111, 0b00011110, 0b11110011, 0b11101010, 0b10100110, 0b11101101, 0b10011110, 0b11100110, 0b00001100, 0b11010011, 0b11010011, 0b00111011, 0b11011101, 0b01011001, 0b10100101, 0b01101010, 0b01100111, 0b10010010, 0b10111101, 0b01111000, 0b00011110, 0b10100110, 0b01010110, 0b01010110, 0b11100011, 0b10101101, 0b00101101, 0b11011110, 0b00101010, 0b01001100, 0b01010101, 0b11011001, 0b10100011, 0b11110000, 0b10011111, 0b00000011, 0b01010100, 0b10100001, 0b11111000, 0b00101110, 0b11111101, 0b01000100, 0b11101001, 0b01100110, 0b11110110, 0b00010011, 0b00111010, 0b10111000, 0b01001100, 0b00101011, 0b00111010, 0b01000101, 0b00010001, 0b10111111, 0b01010100, 0b10001100, 0b11000001, 0b01111010, 0b10110011, 0b11001000, 0b10111100, 0b10001100, 0b01001111, 0b00100001, 0b01011000, 0b01110001, 0b01110001, 0b10011011, 0b11000001, 0b00010111, 0b11101111, 0b01010100, 0b10010110, 0b00011010, 0b00001000, 0b11100101, 0b10000011, 0b10001100, 0b01000110, 0b01110010, 0b11111011, 0b10101110, 0b01100101, 0b10010010, 0b10001111, 0b01011000, 0b10000111, 0b11010010, 0b10010010, 0b11011000, 0b10000001, 0b01100101, 0b00100110, 0b11100011, 0b10100000, 0b00010001, 0b00111000, 0b11000111, 0b00100110, 0b00111100, 0b10000001, 0b11101011, 0b10011001, 0b10001101, 0b01010001, 0b10001000, 0b00111110, 0b00100100, 0b11110011, 0b00110011, 0b01001101, 0b01011010, 0b10001011, 0b00011100, 0b10100111, 0b00101010, 0b10110100, 0b01011000, 0b01001100, 0b01001110, 0b00100110, 0b11110110, 0b00011001, 0b10000010, 0b11011100, 0b10000011, 0b11000011, 0b00101100, 0b11110001, 0b00111000, 0b00000010, 0b10110101, 0b11001101, 0b11001101, 0b00000010, 0b10110010, 0b01001010, 0b10010100, 0b00001100, 0b01010111, 0b01001100, 0b01111010, 0b00110000, 0b01000011, 0b00001011, 0b11110001, 0b11001011, 0b01000100, 0b01101100, 0b00100100, 0b11111000, 0b00011001, 0b00000001, 0b10010101, 0b10101000, 0b01011100, 0b01110011, 0b11101010, 0b10001101, 0b00100100, 0b10010110, 0b00101011, 0b01010000, 0b10100110, 0b00100010, 0b00011110, 0b11000100, 0b11010001, 0b01001000, 0b00000110, 0b11010100, 0b00111010, 0b00101111, 0b01110100, 0b10011100, 0b00000111, 0b01101010, 0b00000101, 0b10001000, 0b10111111, 0b01101000, 0b00010101, 0b00101110, 0b01100000, 0b01010101, 0b11100011, 0b10110111, 0b01010001, 0b10011000, 0b00001000, 0b00010100, 0b10000110, 0b01011010, 0b10101010, 0b01000101, 0b01001101, 0b01001001, 0b01110000, 0b00100111, 0b11010010, 0b10010011, 0b11010101, 0b11001010, 0b10101011, 0b00000010, 0b10000011, 0b01100001, 0b00000101, 0b00100100, 0b11001110, 0b10000111, 0b00100010, 0b11000010, 0b10101001, 0b10101101, 0b00011000, 0b10001100, 0b01001101, 0b01111000, 0b11010001, 0b10001001, 0b00010110, 0b10110000, 0b01010111, 0b11000111, 0b01100010, 0b10100010, 0b11000000, 0b00110100, 0b00100100, 0b01010010, 0b10101110, 0b01011010, 0b01000000, 0b00110010, 0b10001101, 0b00100001, 0b00001000, 0b01000011, 0b00110100, 0b10110110, 0b11010010, 0b10110110, 0b11011001, 0b00011001, 0b11100001, 0b01100000, 0b01100111, 0b00011010, 0b00111001, 0b01100000, 0b11010000, 0b01000100, 0b01111010, 0b10010100, 0b10011010, 0b00001001, 0b10001000, 0b10000011, 0b10101000, 0b01110100, 0b01010101, 0b00010000, 0b00100111, 0b10100001, 0b01011101, 0b01101000, 0b00011110, 0b00100011, 0b11001000, 0b00110010, 0b11100000, 0b00011001, 0b00000011, 0b01000100, 0b01110011, 0b01001000, 0b10110001, 0b00111000, 0b11000011, 0b11100110, 0b00101010, 0b01010111, 0b01100001, 0b10011000, 0b10110101, 0b00011100, 0b00001010, 0b01101000, 0b11000101, 0b10000001, 0b10001111, 0b10101100, 0b00000010, 0b00101001, 0b00011010, 0b01000111, 0b11100011, 0b10010100, 0b00010001, 0b01001110, 0b01100100, 0b00101110, 0b00010100, 0b11001011, 0b00111101, 0b11011100, 0b00010100, 0b11000101, 0b00000110, 0b00010000, 0b11101001, 0b00101001, 0b10110001, 0b10000010, 0b11101001, 0b00110000, 0b01000111, 0b11100011, 0b00110100, 0b00011001, 0b11000011, 0b00100101, 0b00001010, 0b00110000, ]; const INIT: &[WheelInit; 30] = &[ WheelInit { next_mult_factor: 1, wheel_index: 0 }, // 0 WheelInit { next_mult_factor: 0, wheel_index: 0 }, // 1 WheelInit { next_mult_factor: 5, wheel_index: 1 }, // 2 WheelInit { next_mult_factor: 4, wheel_index: 1 }, // 3 WheelInit { next_mult_factor: 3, wheel_index: 1 }, // 4 WheelInit { next_mult_factor: 2, wheel_index: 1 }, // 5 WheelInit { next_mult_factor: 1, wheel_index: 1 }, // 6 WheelInit { next_mult_factor: 0, wheel_index: 1 }, // 7 WheelInit { next_mult_factor: 3, wheel_index: 2 }, // 8 WheelInit { next_mult_factor: 2, wheel_index: 2 }, // 9 WheelInit { next_mult_factor: 1, wheel_index: 2 }, // 10 WheelInit { next_mult_factor: 0, wheel_index: 2 }, // 11 WheelInit { next_mult_factor: 1, wheel_index: 3 }, // 12 WheelInit { next_mult_factor: 0, wheel_index: 3 }, // 13 WheelInit { next_mult_factor: 3, wheel_index: 4 }, // 14 WheelInit { next_mult_factor: 2, wheel_index: 4 }, // 15 WheelInit { next_mult_factor: 1, wheel_index: 4 }, // 16 WheelInit { next_mult_factor: 0, wheel_index: 4 }, // 17 WheelInit { next_mult_factor: 1, wheel_index: 5 }, // 18 WheelInit { next_mult_factor: 0, wheel_index: 5 }, // 19 WheelInit { next_mult_factor: 3, wheel_index: 6 }, // 20 WheelInit { next_mult_factor: 2, wheel_index: 6 }, // 21 WheelInit { next_mult_factor: 1, wheel_index: 6 }, // 22 WheelInit { next_mult_factor: 0, wheel_index: 6 }, // 23 WheelInit { next_mult_factor: 5, wheel_index: 7 }, // 24 WheelInit { next_mult_factor: 4, wheel_index: 7 }, // 25 WheelInit { next_mult_factor: 3, wheel_index: 7 }, // 26 WheelInit { next_mult_factor: 2, wheel_index: 7 }, // 27 WheelInit { next_mult_factor: 1, wheel_index: 7 }, // 28 WheelInit { next_mult_factor: 0, wheel_index: 7 }, // 29 ]; const WHEEL: &[WheelElem; 64] = &[ // remainder 1 WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 1, next: -7 }, // remainder 7 WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 1, next: -7 }, // remainder 11 WheelElem { unset_bit: 251, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 0, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 1, next: -7 }, // remainder 13 WheelElem { unset_bit: 247, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 2, correction: 1, next: -7 }, // remainder 17 WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 6, correction: 3, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 1, next: -7 }, // remainder 19 WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 4, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 6, correction: 4, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 2, correction: 1, next: -7 }, // remainder 23 WheelElem { unset_bit: 191, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 127, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 1, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 3, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 6, correction: 5, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 2, correction: 1, next: -7 }, // remainder 29 WheelElem { unset_bit: 127, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 191, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 223, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 239, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 247, next_mult_factor: 2, correction: 2, next: 1 }, WheelElem { unset_bit: 251, next_mult_factor: 4, correction: 4, next: 1 }, WheelElem { unset_bit: 253, next_mult_factor: 6, correction: 6, next: 1 }, WheelElem { unset_bit: 254, next_mult_factor: 2, correction: 1, next: -7 }, ]; pub unsafe fn hardcoded_sieve(bytes: &mut [u8], si_: &mut usize, wi_: &mut usize, prime: usize) { let bytes = bytes; let start = bytes.as_mut_ptr(); let len = bytes.len() as isize; let largest_step = ::std::cmp::min(len, 30 * (prime as isize + 1) - 1); let loop_len = len - largest_step; let loop_end = start.offset(loop_len); let end = start.offset(len); let si = *si_ as isize; let mut p = start.offset(si); let mut wi = *wi_; let prime_ = prime as isize; 'outer: loop { match wi { 0..=7 => { // 30 * x + 1 loop { 'label7: loop { 'label6: loop { 'label5: loop { 'label4: loop { 'label3: loop { 'label2: loop { 'label1: loop { 'label0: loop { match wi { 0 => break 'label0, 1 => break 'label1, 2 => break 'label2, 3 => break 'label3, 4 => break 'label4, 5 => break 'label5, 6 => break 'label6, _ => break 'label7, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 6 + 0) && p.wrapping_offset(prime_ * 6 + 0) < end); *p.offset(prime_ * 6 + 0) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 0) && p.wrapping_offset(prime_ * 10 + 0) < end); *p.offset(prime_ * 10 + 0) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 0) && p.wrapping_offset(prime_ * 12 + 0) < end); *p.offset(prime_ * 12 + 0) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 0) && p.wrapping_offset(prime_ * 16 + 0) < end); *p.offset(prime_ * 16 + 0) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 0) && p.wrapping_offset(prime_ * 18 + 0) < end); *p.offset(prime_ * 18 + 0) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 0) && p.wrapping_offset(prime_ * 22 + 0) < end); *p.offset(prime_ * 22 + 0) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 0) && p.wrapping_offset(prime_ * 28 + 0) < end); *p.offset(prime_ * 28 + 0) &= 127; let p2 = p.wrapping_offset(prime_ * 30 + 1); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 0; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label1 } if p >= end { wi = 1; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label2 } if p >= end { wi = 2; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label3 } if p >= end { wi = 3; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label4 } if p >= end { wi = 4; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label5 } if p >= end { wi = 5; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label6 } if p >= end { wi = 6; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 0); p = if p <= p2 { p2 } else { end }; break 'label7 } if p >= end { wi = 7; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 0 } } 8..=15 => { // 30 * x + 7 loop { 'label15: loop { 'label14: loop { 'label13: loop { 'label12: loop { 'label11: loop { 'label10: loop { 'label9: loop { 'label8: loop { match wi { 8 => break 'label8, 9 => break 'label9, 10 => break 'label10, 11 => break 'label11, 12 => break 'label12, 13 => break 'label13, 14 => break 'label14, _ => break 'label15, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 6 + 1) && p.wrapping_offset(prime_ * 6 + 1) < end); *p.offset(prime_ * 6 + 1) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 2) && p.wrapping_offset(prime_ * 10 + 2) < end); *p.offset(prime_ * 10 + 2) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 3) && p.wrapping_offset(prime_ * 12 + 3) < end); *p.offset(prime_ * 12 + 3) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 3) && p.wrapping_offset(prime_ * 16 + 3) < end); *p.offset(prime_ * 16 + 3) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 4) && p.wrapping_offset(prime_ * 18 + 4) < end); *p.offset(prime_ * 18 + 4) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 5) && p.wrapping_offset(prime_ * 22 + 5) < end); *p.offset(prime_ * 22 + 5) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 6) && p.wrapping_offset(prime_ * 28 + 6) < end); *p.offset(prime_ * 28 + 6) &= 191; let p2 = p.wrapping_offset(prime_ * 30 + 7); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 8; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label9 } if p >= end { wi = 9; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label10 } if p >= end { wi = 10; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label11 } if p >= end { wi = 11; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 0); p = if p <= p2 { p2 } else { end }; break 'label12 } if p >= end { wi = 12; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label13 } if p >= end { wi = 13; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label14 } if p >= end { wi = 14; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 1); p = if p <= p2 { p2 } else { end }; break 'label15 } if p >= end { wi = 15; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 8 } } 16..=23 => { // 30 * x + 11 loop { 'label23: loop { 'label22: loop { 'label21: loop { 'label20: loop { 'label19: loop { 'label18: loop { 'label17: loop { 'label16: loop { match wi { 16 => break 'label16, 17 => break 'label17, 18 => break 'label18, 19 => break 'label19, 20 => break 'label20, 21 => break 'label21, 22 => break 'label22, _ => break 'label23, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 6 + 2) && p.wrapping_offset(prime_ * 6 + 2) < end); *p.offset(prime_ * 6 + 2) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 4) && p.wrapping_offset(prime_ * 10 + 4) < end); *p.offset(prime_ * 10 + 4) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 4) && p.wrapping_offset(prime_ * 12 + 4) < end); *p.offset(prime_ * 12 + 4) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 6) && p.wrapping_offset(prime_ * 16 + 6) < end); *p.offset(prime_ * 16 + 6) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 6) && p.wrapping_offset(prime_ * 18 + 6) < end); *p.offset(prime_ * 18 + 6) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 8) && p.wrapping_offset(prime_ * 22 + 8) < end); *p.offset(prime_ * 22 + 8) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 10) && p.wrapping_offset(prime_ * 28 + 10) < end); *p.offset(prime_ * 28 + 10) &= 223; let p2 = p.wrapping_offset(prime_ * 30 + 11); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 16; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label17 } if p >= end { wi = 17; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label18 } if p >= end { wi = 18; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label19 } if p >= end { wi = 19; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label20 } if p >= end { wi = 20; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 0); p = if p <= p2 { p2 } else { end }; break 'label21 } if p >= end { wi = 21; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label22 } if p >= end { wi = 22; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 2); p = if p <= p2 { p2 } else { end }; break 'label23 } if p >= end { wi = 23; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 16 } } 24..=31 => { // 30 * x + 13 loop { 'label31: loop { 'label30: loop { 'label29: loop { 'label28: loop { 'label27: loop { 'label26: loop { 'label25: loop { 'label24: loop { match wi { 24 => break 'label24, 25 => break 'label25, 26 => break 'label26, 27 => break 'label27, 28 => break 'label28, 29 => break 'label29, 30 => break 'label30, _ => break 'label31, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 6 + 3) && p.wrapping_offset(prime_ * 6 + 3) < end); *p.offset(prime_ * 6 + 3) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 4) && p.wrapping_offset(prime_ * 10 + 4) < end); *p.offset(prime_ * 10 + 4) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 5) && p.wrapping_offset(prime_ * 12 + 5) < end); *p.offset(prime_ * 12 + 5) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 7) && p.wrapping_offset(prime_ * 16 + 7) < end); *p.offset(prime_ * 16 + 7) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 8) && p.wrapping_offset(prime_ * 18 + 8) < end); *p.offset(prime_ * 18 + 8) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 9) && p.wrapping_offset(prime_ * 22 + 9) < end); *p.offset(prime_ * 22 + 9) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 12) && p.wrapping_offset(prime_ * 28 + 12) < end); *p.offset(prime_ * 28 + 12) &= 239; let p2 = p.wrapping_offset(prime_ * 30 + 13); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 24; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label25 } if p >= end { wi = 25; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label26 } if p >= end { wi = 26; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label27 } if p >= end { wi = 27; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label28 } if p >= end { wi = 28; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label29 } if p >= end { wi = 29; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 1); p = if p <= p2 { p2 } else { end }; break 'label30 } if p >= end { wi = 30; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label31 } if p >= end { wi = 31; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 24 } } 32..=39 => { // 30 * x + 17 loop { 'label39: loop { 'label38: loop { 'label37: loop { 'label36: loop { 'label35: loop { 'label34: loop { 'label33: loop { 'label32: loop { match wi { 32 => break 'label32, 33 => break 'label33, 34 => break 'label34, 35 => break 'label35, 36 => break 'label36, 37 => break 'label37, 38 => break 'label38, _ => break 'label39, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 6 + 3) && p.wrapping_offset(prime_ * 6 + 3) < end); *p.offset(prime_ * 6 + 3) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 6) && p.wrapping_offset(prime_ * 10 + 6) < end); *p.offset(prime_ * 10 + 6) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 7) && p.wrapping_offset(prime_ * 12 + 7) < end); *p.offset(prime_ * 12 + 7) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 9) && p.wrapping_offset(prime_ * 16 + 9) < end); *p.offset(prime_ * 16 + 9) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 10) && p.wrapping_offset(prime_ * 18 + 10) < end); *p.offset(prime_ * 18 + 10) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 13) && p.wrapping_offset(prime_ * 22 + 13) < end); *p.offset(prime_ * 22 + 13) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 16) && p.wrapping_offset(prime_ * 28 + 16) < end); *p.offset(prime_ * 28 + 16) &= 247; let p2 = p.wrapping_offset(prime_ * 30 + 17); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 32; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label33 } if p >= end { wi = 33; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label34 } if p >= end { wi = 34; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label35 } if p >= end { wi = 35; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label36 } if p >= end { wi = 36; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label37 } if p >= end { wi = 37; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label38 } if p >= end { wi = 38; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 6 + 3); p = if p <= p2 { p2 } else { end }; break 'label39 } if p >= end { wi = 39; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 32 } } 40..=47 => { // 30 * x + 19 loop { 'label47: loop { 'label46: loop { 'label45: loop { 'label44: loop { 'label43: loop { 'label42: loop { 'label41: loop { 'label40: loop { match wi { 40 => break 'label40, 41 => break 'label41, 42 => break 'label42, 43 => break 'label43, 44 => break 'label44, 45 => break 'label45, 46 => break 'label46, _ => break 'label47, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 6 + 4) && p.wrapping_offset(prime_ * 6 + 4) < end); *p.offset(prime_ * 6 + 4) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 6) && p.wrapping_offset(prime_ * 10 + 6) < end); *p.offset(prime_ * 10 + 6) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 8) && p.wrapping_offset(prime_ * 12 + 8) < end); *p.offset(prime_ * 12 + 8) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 10) && p.wrapping_offset(prime_ * 16 + 10) < end); *p.offset(prime_ * 16 + 10) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 12) && p.wrapping_offset(prime_ * 18 + 12) < end); *p.offset(prime_ * 18 + 12) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 14) && p.wrapping_offset(prime_ * 22 + 14) < end); *p.offset(prime_ * 22 + 14) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 18) && p.wrapping_offset(prime_ * 28 + 18) < end); *p.offset(prime_ * 28 + 18) &= 251; let p2 = p.wrapping_offset(prime_ * 30 + 19); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 40; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label41 } if p >= end { wi = 41; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label42 } if p >= end { wi = 42; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label43 } if p >= end { wi = 43; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label44 } if p >= end { wi = 44; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label45 } if p >= end { wi = 45; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 4 + 2); p = if p <= p2 { p2 } else { end }; break 'label46 } if p >= end { wi = 46; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 6 + 4); p = if p <= p2 { p2 } else { end }; break 'label47 } if p >= end { wi = 47; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 40 } } 48..=55 => { // 30 * x + 23 loop { 'label55: loop { 'label54: loop { 'label53: loop { 'label52: loop { 'label51: loop { 'label50: loop { 'label49: loop { 'label48: loop { match wi { 48 => break 'label48, 49 => break 'label49, 50 => break 'label50, 51 => break 'label51, 52 => break 'label52, 53 => break 'label53, 54 => break 'label54, _ => break 'label55, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 6 + 5) && p.wrapping_offset(prime_ * 6 + 5) < end); *p.offset(prime_ * 6 + 5) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 8) && p.wrapping_offset(prime_ * 10 + 8) < end); *p.offset(prime_ * 10 + 8) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 9) && p.wrapping_offset(prime_ * 12 + 9) < end); *p.offset(prime_ * 12 + 9) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 13) && p.wrapping_offset(prime_ * 16 + 13) < end); *p.offset(prime_ * 16 + 13) &= 254; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 14) && p.wrapping_offset(prime_ * 18 + 14) < end); *p.offset(prime_ * 18 + 14) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 17) && p.wrapping_offset(prime_ * 22 + 17) < end); *p.offset(prime_ * 22 + 17) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 22) && p.wrapping_offset(prime_ * 28 + 22) < end); *p.offset(prime_ * 28 + 22) &= 253; let p2 = p.wrapping_offset(prime_ * 30 + 23); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 48; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label49 } if p >= end { wi = 49; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label50 } if p >= end { wi = 50; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label51 } if p >= end { wi = 51; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label52 } if p >= end { wi = 52; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; break 'label53 } if p >= end { wi = 53; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 3); p = if p <= p2 { p2 } else { end }; break 'label54 } if p >= end { wi = 54; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 6 + 5); p = if p <= p2 { p2 } else { end }; break 'label55 } if p >= end { wi = 55; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 48 } } 56..=63 => { // 30 * x + 29 loop { 'label63: loop { 'label62: loop { 'label61: loop { 'label60: loop { 'label59: loop { 'label58: loop { 'label57: loop { 'label56: loop { match wi { 56 => break 'label56, 57 => break 'label57, 58 => break 'label58, 59 => break 'label59, 60 => break 'label60, 61 => break 'label61, 62 => break 'label62, _ => break 'label63, } } while p < loop_end { p = crate::b(p); safe_assert!(start <= p.wrapping_offset(prime_ * 0 + 0) && p.wrapping_offset(prime_ * 0 + 0) < end); *p.offset(prime_ * 0 + 0) &= 127; safe_assert!(start <= p.wrapping_offset(prime_ * 6 + 6) && p.wrapping_offset(prime_ * 6 + 6) < end); *p.offset(prime_ * 6 + 6) &= 191; safe_assert!(start <= p.wrapping_offset(prime_ * 10 + 10) && p.wrapping_offset(prime_ * 10 + 10) < end); *p.offset(prime_ * 10 + 10) &= 223; safe_assert!(start <= p.wrapping_offset(prime_ * 12 + 12) && p.wrapping_offset(prime_ * 12 + 12) < end); *p.offset(prime_ * 12 + 12) &= 239; safe_assert!(start <= p.wrapping_offset(prime_ * 16 + 16) && p.wrapping_offset(prime_ * 16 + 16) < end); *p.offset(prime_ * 16 + 16) &= 247; safe_assert!(start <= p.wrapping_offset(prime_ * 18 + 18) && p.wrapping_offset(prime_ * 18 + 18) < end); *p.offset(prime_ * 18 + 18) &= 251; safe_assert!(start <= p.wrapping_offset(prime_ * 22 + 22) && p.wrapping_offset(prime_ * 22 + 22) < end); *p.offset(prime_ * 22 + 22) &= 253; safe_assert!(start <= p.wrapping_offset(prime_ * 28 + 28) && p.wrapping_offset(prime_ * 28 + 28) < end); *p.offset(prime_ * 28 + 28) &= 254; let p2 = p.wrapping_offset(prime_ * 30 + 29); p = if p <= p2 { p2 } else { end }; } if p >= end { wi = 56; break 'outer; } safe_assert!(start <= p && p < end); *p &= 127; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label57 } if p >= end { wi = 57; break 'outer; } safe_assert!(start <= p && p < end); *p &= 191; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label58 } if p >= end { wi = 58; break 'outer; } safe_assert!(start <= p && p < end); *p &= 223; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label59 } if p >= end { wi = 59; break 'outer; } safe_assert!(start <= p && p < end); *p &= 239; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label60 } if p >= end { wi = 60; break 'outer; } safe_assert!(start <= p && p < end); *p &= 247; let p2 = p.wrapping_offset(prime_ * 2 + 2); p = if p <= p2 { p2 } else { end }; break 'label61 } if p >= end { wi = 61; break 'outer; } safe_assert!(start <= p && p < end); *p &= 251; let p2 = p.wrapping_offset(prime_ * 4 + 4); p = if p <= p2 { p2 } else { end }; break 'label62 } if p >= end { wi = 62; break 'outer; } safe_assert!(start <= p && p < end); *p &= 253; let p2 = p.wrapping_offset(prime_ * 6 + 6); p = if p <= p2 { p2 } else { end }; break 'label63 } if p >= end { wi = 63; break 'outer; } safe_assert!(start <= p && p < end); *p &= 254; let p2 = p.wrapping_offset(prime_ * 2 + 1); p = if p <= p2 { p2 } else { end }; wi = 56 } } _ => unreachable!("{}", wi), } } *si_ = (p as usize).wrapping_sub(end as usize); *wi_ = wi; }