From 8f162cb7c4f3a6edaff7c1ab756538093fd76bbf Mon Sep 17 00:00:00 2001 From: Jacob Zhong Date: Tue, 26 Apr 2022 04:32:21 -0400 Subject: [PATCH] Adapt to PreInv --- ROADMAP.md | 4 +- examples/divisor_sigma.rs | 6 + examples/prime_omega.rs | 5 + src/buffer.rs | 10 +- src/factor.rs | 4 +- src/integer.rs | 2 + src/nt_funcs.rs | 101 +- src/tables.rs | 3084 +++++++++++++------------------------ src/traits.rs | 7 +- 9 files changed, 1127 insertions(+), 2096 deletions(-) create mode 100644 examples/divisor_sigma.rs create mode 100644 examples/prime_omega.rs diff --git a/ROADMAP.md b/ROADMAP.md index 3a57797..cf82539 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -2,7 +2,6 @@ - Implement factorization for Gaussian integers (and other quadratic integers?) - Implement a wrapper supporting fast modular arithmetics and use it to speed up is_prime64 and factors64 - Implement SIQS -- Add benchmarks for factorization & primality test (ref: SageMath benchmark tests) - Euler totient # Roadmap for v1 @@ -15,3 +14,6 @@ - Support `rug` and `ibig` as backend - Support `rug` & `primal` or `primesieve-sys` as PrimeBuffer backend - Support async and multi-thread + +# Not in plan +- Support number field sieve factorization (this is efficient only for very larg numbers) diff --git a/examples/divisor_sigma.rs b/examples/divisor_sigma.rs new file mode 100644 index 0000000..69d8be3 --- /dev/null +++ b/examples/divisor_sigma.rs @@ -0,0 +1,6 @@ +// https://en.wikipedia.org/wiki/Divisor_function +// TODO(v0.3.2): implement divisor sigma as example for factorization + +fn main() { + println!("nothing here") +} diff --git a/examples/prime_omega.rs b/examples/prime_omega.rs new file mode 100644 index 0000000..2844c0b --- /dev/null +++ b/examples/prime_omega.rs @@ -0,0 +1,5 @@ +// https://en.wikipedia.org/wiki/Prime_omega_function + +fn main() { + unimplemented!() +} \ No newline at end of file diff --git a/src/buffer.rs b/src/buffer.rs index 2189234..9707f33 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -12,7 +12,7 @@ use crate::factor::{pollard_rho, trial_division}; use crate::nt_funcs::{ - factorize64, factors, is_prime64, next_prime, nth_prime_bounds, nth_prime_est, prev_prime, + factorize128, factors, is_prime64, next_prime, nth_prime_bounds, nth_prime_est, prev_prime, }; use crate::primality::{PrimalityBase, PrimalityRefBase}; use crate::tables::{SMALL_PRIMES, SMALL_PRIMES_NEXT}; @@ -123,11 +123,11 @@ pub trait PrimeBufferExt: for<'a> PrimeBuffer<'a> { where for<'r> &'r T: PrimalityRefBase, { - // shortcut if the target is in u64 range - if let Some(x) = target.to_u64() { - return Ok(factorize64(x) + // shortcut if the target is in u128 range + if let Some(x) = target.to_u128() { + return Ok(factorize128(x) .into_iter() - .map(|(k, v)| (T::from_u64(k).unwrap(), v)) + .map(|(k, v)| (T::from_u128(k).unwrap(), v)) .collect()); } let config = config.unwrap_or(FactorizationConfig::default()); diff --git a/src/factor.rs b/src/factor.rs index 7fce830..62de154 100644 --- a/src/factor.rs +++ b/src/factor.rs @@ -11,6 +11,8 @@ use std::collections::BTreeMap; /// The target is guaranteed fully factored only if bound * bound > target, where bound = max(primes). /// The parameter limit additionally sets the maximum of primes to be tried. /// The residual will be Ok(1) or Ok(p) if fully factored. +/// +/// TODO: implement fast check for small primes with BigInts in the precomputed table, and skip them in this function pub fn trial_division< I: Iterator, T: Integer + Clone + Roots + NumRef + FromPrimitive, @@ -85,7 +87,7 @@ where return None; } - // FIXME: optimize abs_diff for montgomery form + // FIXME: optimize abs_diff for montgomery form if we are going to use the abs_diff in the std lib let diff = if b > a { &b - &a } else { &a - &b }; // abs_diff let d = diff.gcd(target); if d > T::one() && &d < target { diff --git a/src/integer.rs b/src/integer.rs index 49d959e..8d256ef 100644 --- a/src/integer.rs +++ b/src/integer.rs @@ -59,6 +59,8 @@ macro_rules! impl_exactroot_prim { } } )*}; + // TODO: it might worth use QUAD_RESIDUE and CUBIC_RESIDUE for large size + // primitive integers, need benchmark } impl_exactroot_prim!(u8 u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize); diff --git a/src/nt_funcs.rs b/src/nt_funcs.rs index ed5b284..00477ea 100644 --- a/src/nt_funcs.rs +++ b/src/nt_funcs.rs @@ -15,15 +15,17 @@ use crate::buffer::{NaiveBuffer, PrimeBufferExt}; use crate::mint::Mint; use crate::factor::{pollard_rho, squfof}; use crate::primality::{PrimalityBase, PrimalityRefBase}; -use crate::tables::{MOEBIUS_ODD, SMALL_PRIMES, SMALL_PRIMES_NEXT, WHEEL_NEXT, WHEEL_PREV, WHEEL_SIZE}; +use crate::tables::{MOEBIUS_ODD, SMALL_PRIMES, WHEEL_NEXT, WHEEL_PREV, WHEEL_SIZE}; #[cfg(feature = "big-table")] -use crate::tables::{SMALL_PRIMES_INV, SMALL_PRIMES_INVLIM, ZETA_LOG_TABLE}; +use crate::tables::{SMALL_PRIMES_INV, ZETA_LOG_TABLE, SMALL_PRIMES_NEXT}; use crate::traits::{FactorizationConfig, Primality, PrimalityTestConfig, PrimalityUtils}; use crate::RandPrime; #[cfg(feature = "num-bigint")] use num_bigint::{BigUint, RandBigInt}; use num_integer::Roots; use num_modular::{ModularCoreOps, MontgomeryInt, ModularInteger}; +#[cfg(feature = "num-bigint")] +use num_modular::DivExact; use num_traits::{CheckedAdd, FromPrimitive, Num, RefNum, ToPrimitive}; use rand::{random, Rng}; use std::collections::BTreeMap; @@ -49,6 +51,7 @@ pub fn is_prime64(target: u64) -> bool { return SMALL_PRIMES.binary_search(&u).is_ok(); } else { // check remainder against the wheel table + // this step eliminates any number that is not coprime to WHEEL_SIZE let pos = (target % WHEEL_SIZE as u64) as usize; if pos == 0 || WHEEL_NEXT[pos] < WHEEL_NEXT[pos-1] { return false; @@ -100,6 +103,7 @@ pub fn is_prime64(target: u64) -> bool { return SMALL_PRIMES.binary_search(&(target as u16)).is_ok(); } else { // check remainder against the wheel table + // this step eliminates any number that is not coprime to WHEEL_SIZE let pos = (target % WHEEL_SIZE as u64) as usize; if pos == 0 || WHEEL_NEXT[pos] < WHEEL_NEXT[pos-1] { return false; @@ -158,7 +162,9 @@ pub fn factorize64(target: u64) -> BTreeMap { // https://github.com/radii/msieve // Pari/GP: ifac_crack let mut result = BTreeMap::new(); - let f2 = target.trailing_zeros(); // quick check on factors of 2 + + // quick check on factors of 2 + let f2 = target.trailing_zeros(); if f2 == 0 { if is_prime64(target) { result.insert(target, 1); @@ -192,34 +198,35 @@ pub fn factorize64(target: u64) -> BTreeMap { } #[cfg(feature = "big-table")] - // divisibility check with pre-computed tables - for (&p, (&pinv, plim)) in SMALL_PRIMES - .iter() - .zip(SMALL_PRIMES_INV.iter().zip(SMALL_PRIMES_INVLIM)) + // divisibility check with pre-computed tables, see comments on SMALL_PRIMES_INV for reference + for (p, &pinv) in SMALL_PRIMES + .iter().map(|&p| p as u64) + .zip(SMALL_PRIMES_INV.iter()) .skip(1) { - let p64 = p as u64; - if p64 > tsqrt { + // only need to test primes up to sqrt(target) + if p > tsqrt { factored = true; break; } - let mut r = residual; - let mut k: u32 = 0; + let mut exp: usize = 0; loop { - let r2 = r.wrapping_mul(pinv); - - if r2 <= plim { - k += 1; - r = r2; - } else { - break; + match residual.div_exact(p, &pinv) { + Some(q) => { + // residual is divisible by p + exp += 1; + residual = q; + }, + None => { + // otherwise + if exp > 0 { + result.insert(p, exp); + } + break; + } } } - if k > 0 { - residual = residual / p64.pow(k); - result.insert(p64, k as usize); - } if residual == 1 { factored = true; break; @@ -281,6 +288,8 @@ pub fn factorize64(target: u64) -> BTreeMap { result } +// TODO: GNU factor uses [Lucas test](https://en.wikipedia.org/wiki/Lucas_primality_test) to prove primality, we could use that as well +// (only need to test 64bit ~ 128bit) pub fn factorize128(target: u128) -> BTreeMap { // shortcut for u64 if target < (1u128 << 64) { @@ -291,28 +300,64 @@ pub fn factorize128(target: u128) -> BTreeMap { } let mut result = BTreeMap::new(); - let f2 = target.trailing_zeros(); // quick check on factors of 2 + + // quick check on factors of 2 + let f2 = target.trailing_zeros(); if f2 != 0 { result.insert(2, f2 as usize); } + let mut residual = target >> f2; // trial division using primes in the table - // TODO(v0.3.2): speed up this by precompute tables - let mut residual = target >> f2; + #[cfg(not(feature = "big-table"))] for p in SMALL_PRIMES.iter().skip(1).map(|&v| v as u128) { while residual % p == 0 { residual = residual / p; *result.entry(p).or_insert(0) += 1; } + if residual == 1 { + break; + } } + + #[cfg(feature = "big-table")] + // divisibility check with pre-computed tables, see comments on SMALL_PRIMES_INV for reference + for (p, &pinv) in SMALL_PRIMES + .iter().map(|&p| p as u64) + .zip(SMALL_PRIMES_INV.iter()) + .skip(1) + { + let mut exp: usize = 0; + loop { + match residual.div_exact(p, &pinv) { + Some(q) => { + // residual is divisible by p + exp += 1; + residual = q; + }, + None => { + // otherwise + if exp > 0 { + result.insert(p as u128, exp); + } + break; + } + } + } + if residual == 1 { + break; + } + } + if residual == 1 { return result; } - // then try pollard's rho and SQUFOF methods util fully factored - let mut todo = vec![residual]; + // then try pollard's rho util fully factored + // TODO: split todo list into large(u128) and small(u64) two lists to utilize the efficient u64 prime test + let mut todo = vec![residual]; // cofactors to be processed while let Some(target) = todo.pop() { - if is_prime(&Mint::from(target), Some(PrimalityTestConfig::bpsw())).probably() { + if is_prime(&Mint::from(target), None).probably() { *result.entry(target).or_insert(0) += 1; } else { let divisor = loop { diff --git a/src/tables.rs b/src/tables.rs index de9bafb..bc9bdd4 100644 --- a/src/tables.rs +++ b/src/tables.rs @@ -88,2066 +88,1040 @@ pub const SMALL_PRIMES: [u16; 1024] = [ pub const SMALL_PRIMES_NEXT: u64 = 8167; //////////////////// Pre-computed inversions for primes //////////////////// +#[cfg(feature = "big-table")] +type P64 = num_modular::PreInv; /// Precomputed modular inverse for fast divisibility check /// -/// We could have store them in u16 and do double width check, but don't bother. /// Note that the factor 2 should be eliminated before checking the primes -/// Reference: +#[rustfmt::skip] #[cfg(feature = "big-table")] -pub const SMALL_PRIMES_INV: [u64; 1024] = [ - 0x0000000000000000, - 0xaaaaaaaaaaaaaaab, - 0xcccccccccccccccd, - 0x6db6db6db6db6db7, - 0x2e8ba2e8ba2e8ba3, - 0x4ec4ec4ec4ec4ec5, - 0xf0f0f0f0f0f0f0f1, - 0x86bca1af286bca1b, - 0xd37a6f4de9bd37a7, - 0x34f72c234f72c235, - 0xef7bdef7bdef7bdf, - 0x14c1bacf914c1bad, - 0x8f9c18f9c18f9c19, - 0x82fa0be82fa0be83, - 0x51b3bea3677d46cf, - 0x21cfb2b78c13521d, - 0xcbeea4e1a08ad8f3, - 0x4fbcda3ac10c9715, - 0xf0b7672a07a44c6b, - 0x193d4bb7e327a977, - 0x7e3f1f8fc7e3f1f9, - 0x9b8b577e613716af, - 0xa3784a062b2e43db, - 0xf47e8fd1fa3f47e9, - 0xa3a0fd5c5f02a3a1, - 0x3a4c0a237c32b16d, - 0xdab7ec1dd3431b57, - 0x77a04c8f8d28ac43, - 0xa6c0964fda6c0965, - 0x90fdbc090fdbc091, - 0x7efdfbf7efdfbf7f, - 0x03e88cb3c9484e2b, - 0xe21a291c077975b9, - 0x3aef6ca970586723, - 0xdf5b0f768ce2cabd, - 0x6fe4dfc9bf937f27, - 0x5b4fe5e92c0685b5, - 0x1f693a1c451ab30b, - 0x8d07aa27db35a717, - 0x882383b30d516325, - 0xed6866f8d962ae7b, - 0x3454dca410f8ed9d, - 0x1d7ca632ee936f3f, - 0x70bf015390948f41, - 0xc96bdb9d3d137e0d, - 0x2697cc8aef46c0f7, - 0xc0e8f2a76e68575b, - 0x687763dfdb43bb1f, - 0x1b10ea929ba144cb, - 0x1d10c4c0478bbced, - 0x63fb9aeb1fdcd759, - 0x64afaa4f437b2e0f, - 0xf010fef010fef011, - 0x28cbfbeb9a020a33, - 0xff00ff00ff00ff01, - 0xd624fd1470e99cb7, - 0x8fb3ddbd6205b5c5, - 0xd57da36ca27acdef, - 0xee70c03b25e4463d, - 0xc5b1a6b80749cb29, - 0x47768073c9b97113, - 0x2591e94884ce32ad, - 0xf02806abc74be1fb, - 0x7ec3e8f3a7198487, - 0x58550f8a39409d09, - 0xec9e48ae6f71de15, - 0x2ff3a018bfce8063, - 0x7f9ec3fcf61fe7b1, - 0x89f5abe570e046d3, - 0xda971b23f1545af5, - 0x79d5f00b9a7862a1, - 0x4dba1df32a128a57, - 0x87530217b7747d8f, - 0x30baae53bb5e06dd, - 0xee70206c12e9b5b3, - 0xcdde9462ec9dbe7f, - 0xafb64b05ec41cf4d, - 0x02944ff5aec02945, - 0x2cb033128382df71, - 0x1ccacc0c84b1c2a9, - 0x19a93db575eb3a0b, - 0xcebeef94fa86fe2d, - 0x6faa77fb3f8df54f, - 0x68a58af00975a751, - 0xd56e36d0c3efac07, - 0xd8b44c47a8299b73, - 0x02d9ccaf9ba70e41, - 0x0985e1c023d9e879, - 0x2a343316c494d305, - 0x70cb7916ab67652f, - 0xd398f132fb10fe5b, - 0x6f2a38a6bf54fa1f, - 0x211df689b98f81d7, - 0x0e994983e90f1ec3, - 0xad671e44bed87f3b, - 0xf9623a0516e70fc7, - 0x4b7129be9dece355, - 0x190f3b7473f62c39, - 0x63dacc9aad46f9a3, - 0xc1108fda24e8d035, - 0xb77578472319bd8b, - 0x473d20a1c7ed9da5, - 0xfbe85af0fea2c8fb, - 0x58a1f7e6ce0f4c09, - 0x1a00e58c544986f3, - 0x7194a17f55a10dc1, - 0x7084944785e33763, - 0xba10679bd84886b1, - 0xebe9c6bb31260967, - 0x97a3fe4bd1ff25e9, - 0x6c6388395b84d99f, - 0x8c51da6a1335df6d, - 0x46f3234475d5add9, - 0x905605ca3c619a43, - 0xcee8dff304767747, - 0xff99c27f00663d81, - 0xacca407f671ddc2b, - 0xe71298bac1e12337, - 0xfa1e94309cd09045, - 0xbebccb8e91496b9b, - 0x312fa30cc7d7b8bd, - 0x6160ff9e9f006161, - 0x6b03673b5e28152d, - 0xfe802ffa00bfe803, - 0xe66fe25c9e907c7b, - 0x3f8b236c76528895, - 0xf6f923bf01ce2c0d, - 0x6c3d3d98bed7c42f, - 0x30981efcd4b010e7, - 0x6f691fc81ebbe575, - 0xb10480ddb47b52cb, - 0x74cd59ed64f3f0d7, - 0x0105cb81316d6c0f, - 0x9be64c6d91c1195d, - 0x71b3f945a27b1f49, - 0x77d80d50e508fd01, - 0xa5eb778e133551cd, - 0x18657d3c2d8a3f1b, - 0x2e40e220c34ad735, - 0xa76593c70a714919, - 0x1eef452124eea383, - 0x38206dc242ba771d, - 0x4cd4c35807772287, - 0x83de917d5e69ddf3, - 0x882ef0403b4a6c15, - 0xf8fb6c51c606b677, - 0xb4abaac446d3e1fd, - 0xa9f83bbe484a14e9, - 0x0bebbc0d1ce874d3, - 0xbd418eaf0473189f, - 0x44e3af6f372b7e65, - 0xc87fdace4f9e5d91, - 0xec93479c446bd9bb, - 0xdac4d592e777c647, - 0xa63ea8c8f61f0c23, - 0xe476062ea5cbbb6f, - 0xdf68761c69daac27, - 0xb813d737637aa061, - 0xa3a77aac1fb15099, - 0x17f0c3e0712c5825, - 0xfd912a70ff30637b, - 0xfbb3b5dc01131289, - 0x856d560a0f5acdf7, - 0x96472f314d3f89e3, - 0xa76f5c7ed2253531, - 0x816eae7c7bf69fe7, - 0xb6a2bea4cfb1781f, - 0xa3900c53318e81ed, - 0x60aa7f5d9f148d11, - 0x6be8c0102c7a505d, - 0x8ff3f0ed28728f33, - 0x680e0a87e5ec7155, - 0xbbf70fa49fe829b7, - 0xd69d1e7b6a50ca39, - 0x1a1e0f46b6d26aef, - 0x7429f9a7a8251829, - 0xd9c2219d1b863613, - 0x91406c1820d077ad, - 0x521f4ec02e3d2b97, - 0xbb8283b63dc8eba5, - 0x431eda153229ebbf, - 0xaf0bf78d7e01686b, - 0xa9ced0742c086e8d, - 0xc26458ad9f632df9, - 0xbbff1255dff892af, - 0xcbd49a333f04d8fd, - 0xec84ed6f9cfdeff5, - 0x97980cc40bda9d4b, - 0x777f34d524f5cbd9, - 0x2797051d94cbbb7f, - 0xea769051b4f43b81, - 0xce7910f3034d4323, - 0x92791d1374f5b99b, - 0x89a5645cc68ea1b5, - 0x5f8aacf796c0cf0b, - 0xf2e90a15e33edf99, - 0x8e99e5feb897c451, - 0xaca2eda38fb91695, - 0x5d9b737be5ea8b41, - 0x4aefe1db93fd7cf7, - 0xa0994ef20b3f8805, - 0x103890bda912822f, - 0xb441659d13a9147d, - 0x1e2134440c4c3f21, - 0x263a27727a6883c3, - 0x78e221472ab33855, - 0x95eac88e82e6faff, - 0xf66c258317be8dab, - 0x09ee202c7cb91939, - 0x8d2fca1042a09ea3, - 0x82779c856d8b8bf1, - 0x3879361cba8a223d, - 0xf23f43639c3182a7, - 0xa03868fc474bcd13, - 0x651e78b8c5311a97, - 0x8ffce639c00c6719, - 0xf7b460754b0b61cf, - 0x7b03f3359b8e63b1, - 0xa55c5326041eb667, - 0x647f88ab896a76f5, - 0x8fd971434a55a46d, - 0x9fbf969958046447, - 0x9986feba69be3a81, - 0xa668b3e6d053796f, - 0x97694e6589f4e09b, - 0x37890c00b7721dbd, - 0x5ac094a235f37ea9, - 0x31cff775f2d5d65f, - 0xddad8e6b36505217, - 0x5a27df897062cd03, - 0xe2396fe0fdb5a625, - 0xb352a4957e82317b, - 0xd8ab3f2c60c2ea3f, - 0x6893f702f0452479, - 0x9686fdc182acf7e3, - 0x6854037173dce12f, - 0x7f0ded1685c27331, - 0xeeda72e1fe490b7d, - 0x9e7bfc959a8e6e53, - 0x49b314d6d4753dd7, - 0x2e8f8c5ac4aa1b3b, - 0xb8ef723481163d33, - 0x6a2ec96a594287b7, - 0xdba41c6d13aab8c5, - 0xc2adbe648dc3aaf1, - 0x87a2bade565f91a7, - 0x4d6fe8798c01f5df, - 0x3791310c8c23d98b, - 0xf80e446b01228883, - 0x9aed1436fbf500cf, - 0x7839b54cc8b24115, - 0xc128c646ad0309c1, - 0x14de631624a3c377, - 0x3f7b9fe68b0ecbf9, - 0x284ffd75ec00a285, - 0x37803cb80dea2ddb, - 0x86b63f7c9ac4c6fd, - 0x8b6851d1bd99b9d3, - 0xb62fda77ca343b6d, - 0x1f0dc009e34383c9, - 0x496dc21ddd35b97f, - 0xb0e96ce17090f82b, - 0xaadf05acdd7d024d, - 0xcb138196746eafb5, - 0x347f523736755d61, - 0xd14a48a051f7dd0b, - 0x474d71b1ce914d25, - 0x386063f5e28c1f89, - 0x1db7325e32d04e73, - 0xfef748d3893b880d, - 0x2f3351506e935605, - 0x7a3637fa2376415b, - 0x4ac525d2baa21969, - 0x3a11c16b42cd351f, - 0x6c7abde0049c2a11, - 0x54dad0303e069ac7, - 0xebf1ac9fdfe91433, - 0xfafdda8237cec655, - 0xdce3ff6e71ffb739, - 0xbed5737d6286db1b, - 0xe479e431fe08b4df, - 0x9dd9b0dd7742f897, - 0x8f09d7402c5a5e87, - 0x9216d5c4d958738d, - 0xb3139ba11d34ca63, - 0x47d54f7ed644afaf, - 0x92a81d85cf11a1b1, - 0x754b26533253bdfd, - 0xbbe0efc980bfd467, - 0xc0d8d594f024dca1, - 0x8238d43bcaac1a65, - 0x27779c1fae6175bb, - 0xa746ca9af708b2c9, - 0x93f3cd9f389be823, - 0x5cb4a4c04c489345, - 0xbf6047743e85b6b5, - 0x61c147831563545f, - 0xedb47c0ae62dee9d, - 0x0a3824386673a573, - 0xa4a77d19e575a0eb, - 0xa2bee045e066c279, - 0xc23618de8ab43d05, - 0x266b515216cb9f2f, - 0xe279edd9e9c2e85b, - 0xd0c591c221dc9c53, - 0x06da8ee9c9ee7c21, - 0x9dfebcaf4c27e8c3, - 0x49aeff9f19dd6de5, - 0x86976a57a296e9c7, - 0xa3b9abf4872b84cd, - 0x34fca6483895e6ef, - 0x34b5a333988f873d, - 0xd9dd4f19b5f17be1, - 0xb935b507fd0ce78b, - 0xb450f5540660e797, - 0x63ff82831ffc1419, - 0x8992f718c22a32fb, - 0x5f3253ad0d37e7bf, - 0x007c0ffe0fc007c1, - 0x4d8ebadc0c0640b1, - 0xe2729af831037bdb, - 0xb8f64bf30feebfe9, - 0xda93124b544c0bf5, - 0x9cf7ff0b593c539f, - 0xd6bd8861fa0e07d9, - 0x5cfe75c0bd8ab891, - 0x43e808757c2e862b, - 0x90caa96d595c9d93, - 0x8fd550625d07135f, - 0x76b010a86e209f2d, - 0xecc0426447769b25, - 0xe381339caabe3295, - 0xd1b190a2d0c7673f, - 0xc3bce3cf26b0e7eb, - 0x5f87e76f56c61ce3, - 0xc06c6857a124b353, - 0x38c040fcba630f75, - 0xd078bc4fbd533b21, - 0xde8e15c5dd354f59, - 0xca61d53d7414260f, - 0xb56bf5ba8eae635d, - 0x44a72cb0fb6e3949, - 0x879839a714f45bcd, - 0x02a8994fde5314b7, - 0xb971920cf2b90135, - 0x8a8fd0b7df9a6e8b, - 0xb31f9a84c1c6eaad, - 0x92293b02823c6d83, - 0xeee77ff20fe5ddcf, - 0x0e1ea0f6c496c11d, - 0xfdf2d3d6f88ccb6b, - 0xfa9d74a3457738f9, - 0xefc3ca3db71a5785, - 0x8e2071718d0d6daf, - 0xbc0fdbfeb6cfabfd, - 0x1eeab613e5e5aee9, - 0x2d2388e90e9e929f, - 0x81dbafba588ddb43, - 0x52eebc51c4799791, - 0x1c6bc4693b45a047, - 0x06eee0974498874d, - 0xd85b7377a9953cb9, - 0x4b6df412d4caf56f, - 0x6b8afbbb4a053493, - 0xcc5299c96ac7720b, - 0xadce84b5c710aa99, - 0x9d673f5aa3804225, - 0xe6541268efbce7f7, - 0xfcf41e76cf5be669, - 0x5c3eb5dc31c383cb, - 0x301832d11d8ad6c3, - 0x2e9c0942f1ce450f, - 0x97f3f2be37a39a5d, - 0xe8b7d8a9654187c7, - 0xb5d024d7da5b1b55, - 0xb8ba9d6e7ae3501b, - 0xf50865f71b90f1df, - 0x739c1682847df9e1, - 0xc470a4d842b90ed1, - 0x1fb1be11698cc409, - 0xd8d5512a7cd35d15, - 0xa5496821723e07f9, - 0xbcc8c6d7abaa8167, - 0x52c396c95eb619a1, - 0x6eb7e380878ec74b, - 0x3d5513b504537157, - 0x314391f8862e948f, - 0xdc0b17cfcd81f5dd, - 0x2f6bea3ec89044b3, - 0xce13a05869f1b57f, - 0x7593474e8ace3581, - 0x07fc329295a05e4d, - 0xb05377cba4908d23, - 0xe7b2131a628aa39b, - 0x9031dbed7de01527, - 0x76844b1c670aa9a9, - 0x6a03f4533b08915f, - 0x1dbca579db0a3999, - 0x002ffe800bffa003, - 0x478ab1a3e936139d, - 0x66e722bc4c5cc095, - 0x7a8f63c717278541, - 0xdf6eee24d292bc2f, - 0x9fc20d17237dd569, - 0xcdf9932356bda2ed, - 0x97b5e332e80f68d7, - 0x46eee26fd875e2e5, - 0x3548a8e65157a611, - 0xc288d03be9b71e3b, - 0x8151186db38937ab, - 0x7800b910895a45f1, - 0xaee0b024182eec3d, - 0x96323eda173b5713, - 0x0ed0dbd03ae77c8b, - 0xf73800b7828dc119, - 0x1b61715ec22b7ca5, - 0xa8533a991ead64bf, - 0x7f6c7290e46c2e77, - 0x6325e8d907b01db1, - 0x28909f70152a1067, - 0xea7077af0997a0f5, - 0x7e605cad10c32e6d, - 0x471b33570635b38f, - 0xab559fa997a61bb3, - 0xad4bdae562bddab9, - 0x055e1b2f2ed62f45, - 0x03cd328b1a2dca9b, - 0xd28f4e08733218a9, - 0xb6800b077f186293, - 0x6fbd138c3fd9c207, - 0xb117ccd12ae88a89, - 0x2f1a1a044046bceb, - 0x548aba0b060541e3, - 0xcf4e808cea111b2f, - 0xdbec1b4fa855a475, - 0xe3f794eb600d7821, - 0x34fae0d9a11f7c59, - 0xf006b0ccbbac085d, - 0x3f45076dc3114733, - 0xeef49bfa58a1a1b7, - 0x12c4218bea691fa3, - 0xbc7504e3bd5e64f1, - 0x4ee21c292bb92fad, - 0x34338b7327a4bacf, - 0x3fe5c0833d6fccd1, - 0xb1e70743535203c1, - 0xefbb5dcdfb4e43d3, - 0xca68467ca5394f9f, - 0x8c51c081408b97a1, - 0x3275a899dfa5dd65, - 0x9e674cb62e1b78bb, - 0xa37ff5bb2a998d47, - 0x792a999db131a22b, - 0x1b48841bc30d29b9, - 0xf06721d2011d3471, - 0x93fd2386dff85ebd, - 0x4ce72f54c07ed9b5, - 0xd6d0fd3e71dd827b, - 0x856405fb1eed819d, - 0x8ea8aceb7c443989, - 0x34a13026f62e5873, - 0x1eea0208ec0af4f7, - 0x63679853cea598cb, - 0xc30b3ebd61f2d0ed, - 0x7eb9037bc7f43bc3, - 0xa583e6f6ce016411, - 0xf1938d895f1a74c7, - 0x80cf1491c1e81e33, - 0x3c0f12886ba8f301, - 0x0e4b786e0dfcc5ab, - 0x672684c93f2d41ef, - 0xe00757badb35c51b, - 0xd6d84afe66472edf, - 0xfbbc0eedcbbfb6e1, - 0x250f43aa08a84983, - 0x04400e927b1acaa5, - 0x56572be34b9d3215, - 0x87964ef7781c62bf, - 0x29ed84051c06e9af, - 0xb00acd11ed3f87fd, - 0x06307881744152d9, - 0x7a786459f5c1ccc9, - 0x1308125d74563281, - 0x395310a480b3e34d, - 0x35985baa8b202837, - 0x96304a6e052b3223, - 0xbd8265fc9af8fd45, - 0x1b6d0b383ec58e0b, - 0xc21a7c3b68b28503, - 0x236fa180fbfd6007, - 0xc42accd440ed9595, - 0x7acf7128236ba3f7, - 0xf909367a987b9c79, - 0xb64efb252bfba705, - 0x980d4f5a7e4cd25b, - 0xe1ecc4ef27b0c37d, - 0x9111aebb81d72653, - 0x8951f985cb2c67ed, - 0xc439d4fc54e0b5d7, - 0xe857bf31896d533b, - 0xb614bb4cb5023755, - 0x938a89e5473bf1ff, - 0xeac481aca34de039, - 0x14b961badf4809a7, - 0x76784fecba352435, - 0xefa689bb58aef5e1, - 0xb2b2c4db9c3a8197, - 0x2503bc992279f8cf, - 0xd2ab9aec5ca1541d, - 0x3e78ba1460f99af3, - 0x0a01426572cfcb63, - 0xbea857968f3cbd67, - 0x78db213eefe659e9, - 0x963e8541a74d35f5, - 0x9e22d152776f2e43, - 0x05d10d39d1e1f291, - 0x374468dccaced1dd, - 0x8d145c7d110c5ad5, - 0x3251a39f5acb5737, - 0xa66e50171443506f, - 0x124f69ad91dd4cbd, - 0xec24f8f2a61a2793, - 0xb472148e656b7a51, - 0x0adf9570e1142f07, - 0x89bf33b065119789, - 0x8f0149803cb291eb, - 0x8334b63afd190a31, - 0x920908d50d6aba7d, - 0x57d8b018c5a33d53, - 0xea1773092dc27ee5, - 0xcae5f38b7bf2e00f, - 0x2bd02df34f695349, - 0xddfecd5be62e2eb7, - 0xdbf849ebec96c4a3, - 0xda31d4d0187357c5, - 0xe34e21cc2d5418a7, - 0x68ca5137a9e574ad, - 0x3eaa0d0f804bfd19, - 0x554fb753cc20e9d1, - 0x797afcca1300756b, - 0x8b8d950b52eeea77, - 0xfb6cd166acabc185, - 0x4eb6c5ed9437a7af, - 0xd1eddbd91b790cdb, - 0x93d714ea4d8948e9, - 0x3ca13ed8145188d3, - 0x829086016da89c57, - 0xd7da1f432124a543, - 0x7ead5581632fb07f, - 0x35443837f63ec3bd, - 0x89e2b200e5519461, - 0xe9ae44f0b7289c0b, - 0x94387a277b9fa817, - 0xc84f1a58abfc2c25, - 0x71101d8e3c83377b, - 0xc024abe5c50ba69d, - 0x15de4eb365a65d73, - 0x09ed28a76bcca931, - 0x816bffbf4a00205b, - 0x1f5c71543d558069, - 0xf25c64d0ec53b859, - 0x96c02c2ef1e0ff0f, - 0x19a804816870a333, - 0x6de49add0971c555, - 0x528087e684c71aab, - 0xa94152c269bcdeef, - 0x0379450a3c2b6bdf, - 0xd2cd38bafe5373e1, - 0xc29df2bea71d8bad, - 0xc15862775f302e83, - 0x1016af2fe55ede09, - 0x3d26dbd9d1910715, - 0x621dab2dfaf3dfbf, - 0xb6f1d7ac287338b1, - 0x8d9e9f0c3f9e7fd9, - 0x60a93f8762e914bb, - 0xb14371f247c159c9, - 0x6dd3b484471d4eb3, - 0xcd172f4701c1684d, - 0x0372e686ed8bb537, - 0xbc07f7ca65c5b071, - 0xab2b6170c3f78d9b, - 0xf3d74f461fe6f5b5, - 0xdbc13f4b31f3230b, - 0xd1420716e3f1572d, - 0xd5be2fd4d805464f, - 0xc68b97c136943851, - 0x9e27918af7cfb473, - 0x5ec8ab6c36ac7f41, - 0x964076331dd90979, - 0x30198eff77b002d7, - 0x3af7cb9583ece011, - 0x34ce06f643d9883b, - 0x79f767e528708c55, - 0x185332d2ef2313cd, - 0x43b611b84c8332a3, - 0xc2e215e4f43bb63d, - 0xf94b9dd22ce44e97, - 0xd895834a1db166a5, - 0x347d2f16d19b8d09, - 0x1b54d4dc45b7d98d, - 0x117ac30d9a044877, - 0x0e10b78a67a526e9, - 0x92da68a818688a9f, - 0xcf2b6c87f741f84b, - 0xd264f9bd41e18ed9, - 0x733cbeaa97166d8f, - 0xc9f475b021d22e81, - 0x731f76f2ec4c852b, - 0xdaf6f0c978f69945, - 0x749c8ad20c61ec93, - 0x09307ff8bd3c1261, - 0x334a69fb5a486e2d, - 0x1f36c7bf31578617, - 0x31ebbcc279ea6103, - 0x42e2aad119f466eb, - 0x106ec05a0ab1450d, - 0xb1b38db92a99e731, - 0x784ae377e67071e7, - 0x3e9e1471ba6671d7, - 0x82c29b59d4d73d0f, - 0xc23dd07128b5525d, - 0x4d4e5ce0e9245133, - 0xc8fd1057c09f8cc5, - 0xea1516e94f394035, - 0xb5e3319c564ee9df, - 0x126a69f90d822d8b, - 0x501ed6348857aa19, - 0xde344a324eee1c83, - 0x1dd9690cb2c406d1, - 0x08d6c5178d5e4387, - 0x4cea4050a3e8fdc1, - 0xc114a06acc83f777, - 0x20b060ebc0ea01db, - 0xfe50045acb78c99f, - 0x291a68705b196e91, - 0xc1042c724273e2bb, - 0x2cee680bb165b7c9, - 0xfd2ff9f12e0776d5, - 0x166a5da63af2cc6f, - 0xedd16a5930408d27, - 0x2adf30c26528844f, - 0x9a48d6572b5eec7b, - 0x6e8bf2877503cb9d, - 0xea27a191a7045389, - 0x6eb091f34dd45d3f, - 0xdc8a6cabb2937d41, - 0xbc2f04f254922a05, - 0x41431f4d6eb38631, - 0x7bd717435a08291f, - 0x4232df9c91fc1a55, - 0xa4651e1d5382eab7, - 0x7cfb5409de4cf3c5, - 0xcdd636fb068b9929, - 0xee8f95e740462c97, - 0x490f97b3a758b4a5, - 0x641431563c441287, - 0xb743dad3ec45916b, - 0x7b188be8f55c878d, - 0xd805648b2ca54ef9, - 0x76dbe6eef60123af, - 0x3711525e6a9e8867, - 0x85c2215cb383d8f5, - 0xe58f554c89825857, - 0x8fbd3b17c01dacd9, - 0x4c8c39dc7aedee65, - 0x653ac6dda86cd3b3, - 0x0d61c6791a9c2c81, - 0xb627a30090354237, - 0x83a89a539c527c23, - 0x28c8c09330e90d71, - 0xee1178d27b1f029b, - 0xcecc740b37860ab5, - 0x79736fde910c485f, - 0x6873d51f2487234f, - 0x2a112180614fb973, - 0xcb04cea98508f4eb, - 0xc2fcd2c527e28d7d, - 0x980203ee10393c69, - 0x3fa90a1d7d75681f, - 0xdbf3bfefef217cc3, - 0x66a17fd3087b41e5, - 0x962195d496fbbd3b, - 0xc705a86155443e49, - 0x3f298ee0be6febff, - 0xaa99b084e62fa613, - 0x1f000cb7d0b46fe1, - 0x9ed7858637c9b2cf, - 0x4d871aaf27c106fb, - 0x2e6a467cdc75a4f3, - 0xe9d938fb696dde8d, - 0x40ec71b0b1554485, - 0x3aae12f861e5f3e9, - 0xa97565873959f843, - 0x0b5a960c09fbca8f, - 0x463fe3d268012c91, - 0xe59a6bd5f5ee1bdd, - 0x6542e84d7775ce45, - 0x8b6eef58fd9effa9, - 0x58993dbb9f98075f, - 0x2997955a810acf61, - 0x76e3d2f5077db451, - 0xb37c1d2867e30907, - 0x53ce6e09bd8d8695, - 0x39db291ea2a6b0e3, - 0xddd265ab9c58847d, - 0x5beca8562dddd0cb, - 0xb69031c153ddbed7, - 0xd03c2271b42a6fcd, - 0xcd6fd19e63e40ea3, - 0xf7687aa8e4fd7bf1, - 0x649dfda112a272a7, - 0xecf7866a56d526df, - 0x72bbf1cfdaebfead, - 0x55f6a48df7055719, - 0x80060bffcfa00183, - 0x8a104f309919b087, - 0x98fa7db7652f6a15, - 0x5d7d1b3df70f7ac1, - 0x16ab7b5e04cc1f6b, - 0x78a5bfd2e5ececf9, - 0x6506392e171d869f, - 0xc3fc12e221ef146d, - 0xf8aa132822c33657, - 0x894496574f536f43, - 0x8b2546b08fb4cbd5, - 0x043bbb561bd1aa7f, - 0x2412c7cc4ea7a12b, - 0x6f0bd406dd71696f, - 0xad475c6988d54b71, - 0xd812e5d48dbbba27, - 0x22aaca437ba04893, - 0xdba6ff1fecd5f09d, - 0x13016d3396286773, - 0xc746494631bcfa41, - 0xd14888565bf6a10d, - 0xc002ef885f0adf05, - 0xe5a04da7fee6ade7, - 0xc114ce5468593bc7, - 0x0bb6747dd7f577b7, - 0x395ce5a20f285839, - 0x6eee8be66e8618ef, - 0x52acf64297f1241b, - 0x361dcc48a364093d, - 0x342d6f475d72e629, - 0x5e978bd46410d413, - 0xcc3433d75ba015ad, - 0x1c83b7628458d4fb, - 0xf9ca45637e38f809, - 0xcbed792ffaf6b115, - 0x9abd961d8c0e8c8d, - 0xe69572fa659340af, - 0x9187e7483a6436fd, - 0x1e9c726993bed9d9, - 0x243554db91976365, - 0x04d06ff994c0088f, - 0x25b76abcb74889dd, - 0x3a409642893c779b, - 0x8f8f620d8bc0c927, - 0x6f9f196b3369855f, - 0x92a522bb0638ed99, - 0x96270f1efdd7004f, - 0xb4844b380fdaa79d, - 0x108936aa5f9c1495, - 0x0b60f606f104c9eb, - 0xc663dfe8263b302f, - 0xc91a280b9110b15b, - 0x0904287118d10969, - 0x160d36a5d31bf553, - 0xe84f5fda3c67ad21, - 0xbd85701f72d4b6ed, - 0x4c50cf5924dee1c3, - 0x2455aaf1633bb6e5, - 0xd775b39f549b8ac7, - 0x87fcdda7a252cb49, - 0x53df2e3bd254a739, - 0x8915e69623a5f7ef, - 0x1ef24c80742dd08b, - 0xb4d87aaa6fb1e897, - 0x788573e8b92dbbfb, - 0x02527b137b0878c1, - 0x1870a7c8dee9f4f5, - 0x39b99e40910a224b, - 0x45821c0abd4df247, - 0x10fe2b2f50e02fb3, - 0x5762b90c043f0345, - 0x82a67b9193b27bbd, - 0xa6e914e28ec37693, - 0x835d9a4facaf445f, - 0x48def8175884f82d, - 0xae900e2d7c9a6f7b, - 0x1c08431bdd18be89, - 0xb370a66d684fd83f, - 0xb4be33e18f93b279, - 0x310c50872a7dd5e3, - 0x447ab1281276697d, - 0xc2f122216b2a6c21, - 0xab99c8b5ae1c3059, - 0xb78e17a2227d593b, - 0xabf97d03f7269c5d, - 0x867aefc9fdbfe7ff, - 0xf7f7ad182e47d5b7, - 0x50dff95a9847721b, - 0xe4cb8a0e83cb6a35, - 0x8da72ecdf9247a1d, - 0xc5b04bfc87f31d87, - 0xe2dcf622ea2b00f3, - 0xb9ce9f2e4972f46b, - 0x1ed785c911bf59f9, - 0x4ddb8a4eed70e085, - 0x81e93b4df68c24fd, - 0xee0d0812afcd8357, - 0xf62e3ba72268a891, - 0x3194d367c8154147, - 0xd096ede8e30c20d5, - 0xd68624d27b87a77f, - 0xb728fcdc11c8204d, - 0x9d6b6038077e066f, - 0xaa732d7a4a360d93, - 0x36af98a423972db5, - 0xc31d00da12940f17, - 0xed85352107410b25, - 0x829c85ee6db8567b, - 0xef60258952cc6d89, - 0xcf28c2e0da787741, - 0x57567d8494af28f7, - 0x2c7c98518f174031, - 0xb28b363a36825ae7, - 0xed1ffeb64f9ae769, - 0xcbbb0115e9b9a31f, - 0x8d3c5fecb7f9e4ed, - 0x816271698195cfc3, - 0x9ac939d1c2b1d35d, - 0xdd9fb7017b0ec455, - 0xc94cab1e57276e3d, - 0x8b8806b117c79913, - 0xa9e63292a3269fd1, - 0x76da5710f1e989fb, - 0xdded6688d83a918d, - 0x4e446b6a305428f9, - 0x4ddaca7a3696cfb1, - 0x7eadc4eb87f26ed3, - 0x76c13a0ff04c00c9, - 0xcbf800504d2a2681, - 0x0731dada6c4fec9b, - 0xbcb52a664e63f627, - 0xf1f9abda071c2aa9, - 0xf262ffa620ffe20b, - 0x93774a3d57199a99, - 0xfb3541cd467a1903, - 0x6828cab6b4fe8f51, - 0x12ac03e3d624cc9d, - 0x6363bd1e9bb7d7f7, - 0x334cfd676a484d2f, - 0xd511acd86f143a53, - 0x73fc2490e0062be5, - 0x10780dda36b78b55, - 0xabf601274064e0ab, - 0x3ef3e4ca27e4a2cd, - 0x9216a26e690a16f1, - 0xbae4849e6034bda7, - 0xf943a0520e01e9e1, - 0x7c89958f48f6658b, - 0xe67128750e0545a5, - 0xc6c9e1d414516ccf, - 0x805307f996e9e81d, - 0x3eddd2cff46ad5bf, - 0x35582c1aeb5aae85, - 0x4973c88573ef6eb1, - 0x3063f627c1e715d9, - 0x711ad679a8dcc243, - 0x51c224a17a3db4b3, - 0x612325ca50ddaed5, - 0x9929a7b6b7958b37, - 0xa78d222e5a857bb9, - 0x3ad0ffe3198d139b, - 0x08b4659ac547ed17, - 0x1752e8904aff1003, - 0x60745c37ee4e5925, - 0x29e2da1f6557ee51, - 0x80d78c24ac49cb89, - 0xc56c3b495c8d1f79, - 0xcf5bdf9f5088ac2f, - 0x8a44800e4fae4e7d, - 0xdd76384277e578e7, - 0x20b1562d2703facb, - 0xef56caf96e9d8e3b, - 0xf54061416aede033, - 0xe0bc78c21a26e4ff, - 0x0524f92731a179cd, - 0x5d3b4ad7deafec8b, - 0x508828f744da88ad, - 0x6e82014031710bcf, - 0xadf3b77a22595dd1, - 0x0d8f0c03f7ea8a87, - 0x2c49e3483c3a05f3, - 0xccecbc98c91274c1, - 0x273a08941bb71e77, - 0xdead5a1e3f341baf, - 0x83eee092593309fd, - 0x4af5f1bd3ae87ce9, - 0x4ca85ad2301c9e6d, - 0x1b19592cd31a3943, - 0x3e7aa05e6dcd81bb, - 0x86336cecb02ba47f, - 0xa96b30d0c8a44b2b, - 0xb7c63fa0cfca0571, - 0x8eaf59b405a642b5, - 0xdf29e9cbb536dc17, - 0xed14132c82c1d43f, - 0xaf68778e34caab0d, - 0xa4f04a3368941d31, - 0xe9960969357c07e7, - 0xeb47b62b7360b469, - 0x64c653d779ae730f, - 0x479702d3319915c7, - 0xef3c3eebc6803239, - 0x93807b1a2e3c0e1b, - 0x8167e33e3f478029, - 0x60cb76e38c339397, - 0xae34788ffe4bc283, - 0x4b6246a0c6c093a5, - 0x872e594b12b03efb, - 0xbc0ae83ce9045b15, - 0x0ad30a3917e0968d, - 0x124ef5a4e1c7cd63, - 0x5b98fe0e9fe17aaf, - 0x414306cfe45400fd, - 0xa06d1b4fd391e8bb, - 0x11939803a60c2381, - 0x668c11cc37ea6b23, - 0x83f9b2089dc10645, - 0x65dc8ae47af277a9, - 0x6e2368b9c685770b, - 0x3ea137aeba5a6b2d, - 0x735f57adca48f19d, - 0x69a8de0ba1b18107, - 0x8fb84bdf5822bd79, - 0xb8fab3b748562721, - 0xa6c658ea10a65c3b, - 0xe56381f33ab5e549, - 0xe3c224da14988139, - 0x438c253e6d99f513, - 0xc1b99f8841a3a6e1, - 0x63fa18c79c54fa8b, - 0xe7f6f609619d0d1d, - 0x7b39ef3b70afc109, - 0x73922c61ca7452bf, - 0x28d96828332372c1, - 0x6b6e92968c4e8463, - 0x571861f084962edb, - 0xd935c64f140f1ef5, - 0x96459f8fd72a4c4b, - 0x410ba9a2a18242d9, - 0xcf90979f89870391, - 0x10f94ff26bc00add, - 0xa6619fbb9da139b3, - 0x765a23334efb03d5, - 0x6f2f613b5e631837, - 0x666b99bfbcd368b9, - 0x922b78eb01ed45bd, - 0x7079a199c31de6a9, - 0xa181abcda167be5f, - 0x2f6dbbcab3a9822d, - 0xc5a83ff0e43eba17, - 0x28c68613dda7d97b, - 0x5cf33ed49efa5007, - 0x9125fdead661590d, - 0xaee67f478c7325e7, - 0x735b1274a0e89653, - 0x733b56eae1a4e621, - 0x1944ffb316ffe65d, - 0xf26bc3cfd2a01449, - 0xb5827ba68b83e201, - 0xac139507e48eefb7, - 0xeb7676b25834fda3, - 0xad898f4763da5c1b, - 0xea906f224398f9a7, - 0xa8aff3caca28cdad, - 0x46c53aa36b19b083, - 0x9ada32b09603e8cf, - 0xd31f842ef5d8e915, - 0x6124af44730a33f9, - 0x828ec4c2b6e64a85, - 0x3d6f49df999638af, - 0x7641460a0ea89b65, - 0x97703f98fb7fe291, - 0xd343c209e3e6b7b9, - 0x4e5fc01f6a41406f, - 0xb78a05b08aa4bcbd, - 0x3434a14919d34561, - 0xccead7dee120f525, - 0xe1375a2bccd87673, - 0xf727d51420a57141, - 0x2c3b68cfbcebb00d, - 0xda91e2f3e17542f7, - 0xb55f6100ae95d6e3, - 0x6a0c608e0bbaa975, - 0xac5f2fc151c016cb, - 0xb1e5af8146e4d00f, - 0x6e283d3b112602c7, - 0xf9a48bcb76c96e55, - 0xa776780ca4c0e101, - 0x8d40a2d47d99c7c5, - 0x4ed9d8a7aedcefef, - 0x55c5cf9586072313, - 0x62c640e386ef1f09, - 0xdb876e7feb8b02f9, - 0x5b85ac1558bdf263, - 0xb2b13930c2a889b1, - 0xdf53c897124f8c57, - 0x68a69390fdce78dd, - 0x5a1e8f0261e6e7b3, - 0xcce38a9ccaab014d, - 0xb0cd4811fe6a8171, - 0x911c24573e445027, - 0x9e86401e61cac4a9, - 0xfd2731405f265eb5, - 0x3f4c00205c05b02d, - 0xe92e3d0a829a974f, - 0xdec216e5aa47169d, - 0xa0397bf3448bcd73, - 0x9ecf538d7efa905b, - 0xb1037b5f84886421, -]; -/// Limit of modular inverse muliplied by the target integer. Used together with SMALL_PRIMES_INV -#[cfg(feature = "big-table")] -pub const SMALL_PRIMES_INVLIM: [u64; 1024] = [ - 0x7fffffffffffffff, - 0x5555555555555555, - 0x3333333333333333, - 0x2492492492492492, - 0x1745d1745d1745d1, - 0x13b13b13b13b13b1, - 0x0f0f0f0f0f0f0f0f, - 0x0d79435e50d79435, - 0x0b21642c8590b216, - 0x08d3dcb08d3dcb08, - 0x0842108421084210, - 0x06eb3e45306eb3e4, - 0x063e7063e7063e70, - 0x05f417d05f417d05, - 0x0572620ae4c415c9, - 0x04d4873ecade304d, - 0x0456c797dd49c341, - 0x04325c53ef368eb0, - 0x03d226357e16ece5, - 0x039b0ad12073615a, - 0x0381c0e070381c0e, - 0x033d91d2a2067b23, - 0x03159721ed7e7534, - 0x02e05c0b81702e05, - 0x02a3a0fd5c5f02a3, - 0x0288df0cac5b3f5d, - 0x027c45979c95204f, - 0x02647c69456217ec, - 0x02593f69b02593f6, - 0x0243f6f0243f6f02, - 0x0204081020408102, - 0x01f44659e4a42715, - 0x01de5d6e3f8868a4, - 0x01d77b654b82c339, - 0x01b7d6c3dda338b2, - 0x01b2036406c80d90, - 0x01a16d3f97a4b01a, - 0x01920fb49d0e228d, - 0x01886e5f0abb0499, - 0x017ad2208e0ecc35, - 0x016e1f76b4337c6c, - 0x016a13cd15372904, - 0x01571ed3c506b39a, - 0x015390948f40feac, - 0x014cab88725af6e7, - 0x0149539e3b2d066e, - 0x013698df3de07479, - 0x0125e22708092f11, - 0x0120b470c67c0d88, - 0x011e2ef3b3fb8744, - 0x0119453808ca29c0, - 0x0112358e75d30336, - 0x010fef010fef010f, - 0x0105197f7d734041, - 0x00ff00ff00ff00ff, - 0x00f92fb2211855a8, - 0x00f3a0d52cba8723, - 0x00f1d48bcee0d399, - 0x00ec979118f3fc4d, - 0x00e939651fe2d8d3, - 0x00e79372e225fe30, - 0x00dfac1f74346c57, - 0x00d578e97c3f5fe5, - 0x00d2ba083b445250, - 0x00d161543e28e502, - 0x00cebcf8bb5b4169, - 0x00c5fe740317f9d0, - 0x00c2780613c0309e, - 0x00bcdd535db1cc5b, - 0x00bbc8408cd63069, - 0x00b9a7862a0ff465, - 0x00b68d31340e4307, - 0x00b2927c29da5519, - 0x00afb321a1496fdf, - 0x00aceb0f891e6551, - 0x00ab1cbdd3e2970f, - 0x00a87917088e262b, - 0x00a513fd6bb00a51, - 0x00a36e71a2cb0331, - 0x00a03c1688732b30, - 0x009c69169b30446d, - 0x009baade8e4a2f6e, - 0x00980e4156201301, - 0x00975a750ff68a58, - 0x009548e4979e0829, - 0x0093efd1c50e726b, - 0x0091f5bcb8bb02d9, - 0x008f67a1e3fdc261, - 0x008e2917e0e702c6, - 0x008d8be33f95d715, - 0x008c55841c815ed5, - 0x0088d180cd3a4133, - 0x00869222b1acf1ce, - 0x0085797b917765ab, - 0x008355ace3c897db, - 0x00824a4e60b3262b, - 0x0080c121b28bd1ba, - 0x007dc9f3397d4c29, - 0x007d4ece8fe88139, - 0x0079237d65bcce50, - 0x0077cf53c5f7936c, - 0x0075a8accfbdd11e, - 0x007467ac557c228e, - 0x00732d70ed8db8e9, - 0x0072c62a24c3797f, - 0x007194a17f55a10d, - 0x006fa549b41da7e7, - 0x006e8419e6f61221, - 0x006d68b5356c207b, - 0x006d0b803685c01b, - 0x006bf790a8b2d207, - 0x006ae907ef4b96c2, - 0x006a37991a23aead, - 0x0069dfbdd4295b66, - 0x0067dc4c45c8033e, - 0x00663d80ff99c27f, - 0x0065ec17e3559948, - 0x00654ac835cfba5c, - 0x00645c854ae10772, - 0x006372990e5f901f, - 0x006325913c07beef, - 0x006160ff9e9f0061, - 0x0060cdb520e5e88e, - 0x005ff4017fd005ff, - 0x005ed79e31a4dccd, - 0x005d7d42d48ac5ef, - 0x005c6f35ccba5028, - 0x005b2618ec6ad0a5, - 0x005a2553748e42e7, - 0x0059686cf744cd5b, - 0x0058ae97bab79976, - 0x0058345f1876865f, - 0x005743d5bb24795a, - 0x005692c4d1ab74ab, - 0x00561e46a4d5f337, - 0x005538ed06533997, - 0x0054c807f2c0bec2, - 0x005345efbc572d36, - 0x00523a758f941345, - 0x005102370f816c89, - 0x0050cf129fb94acf, - 0x004fd31941cafdd1, - 0x004fa1704aa75945, - 0x004f3ed6d45a63ad, - 0x004f0de57154ebed, - 0x004e1cae8815f811, - 0x004cd47ba5f6ff19, - 0x004c78ae734df709, - 0x004c4b19ed85cfb8, - 0x004bf093221d1218, - 0x004aba3c21dc633f, - 0x004a6360c344de00, - 0x004a383e9f74d68a, - 0x0049e28fbabb9940, - 0x0048417b57c78cd7, - 0x0047f043713f3a2b, - 0x00474ff2a10281cf, - 0x00468b6f9a978f91, - 0x0045f13f1caff2e2, - 0x0045a5228cec23e9, - 0x0045342c556c66b9, - 0x0044c4a23feeced7, - 0x0043c5c20d3c9fe6, - 0x00437e494b239798, - 0x0043142d118e47cb, - 0x0042ab5c73a13458, - 0x004221950db0f3db, - 0x0041bbb2f80a4553, - 0x0040f391612c6680, - 0x0040b1e94173fefd, - 0x004050647d9d0445, - 0x004030241b144f3b, - 0x003f90c2ab542cb1, - 0x003f71412d59f597, - 0x003f137701b98841, - 0x003e79886b60e278, - 0x003e5b1916a7181d, - 0x003dc4a50968f524, - 0x003da6e4c9550321, - 0x003d4e4f06f1def3, - 0x003c4a6bdd24f9a4, - 0x003c11d54b525c73, - 0x003bf5b1c5721065, - 0x003bbdb9862f23b4, - 0x003b6a8801db5440, - 0x003b183cf0fed886, - 0x003aabe394bdc3f4, - 0x003a5ba3e76156da, - 0x003a0c3e953378db, - 0x0038f03561320b1e, - 0x0038d6ecaef5908a, - 0x003859cf221e6069, - 0x0037f7415dc9588a, - 0x00377df0d3902626, - 0x00373622136907fa, - 0x0036ef0c3b39b92f, - 0x0036915f47d55e6d, - 0x0036072cf3f866fd, - 0x0035d9b737be5ea8, - 0x0035961559cc81c7, - 0x0035531c897a4592, - 0x00353ceebd3e98a4, - 0x0034fad381585e5e, - 0x00347884d1103130, - 0x00340dd3ac39bf56, - 0x003351fdfecc140c, - 0x00333d72b089b524, - 0x0033148d44d6b261, - 0x0032d7aef8412458, - 0x0032c3850e79c0f1, - 0x00328766d59048a2, - 0x00325fa18cb11833, - 0x00324bd659327e22, - 0x0032246e784360f4, - 0x0031afa5f1a33a08, - 0x00319c63ff398e70, - 0x003162f7519a86a7, - 0x0030271fc9d3fc3c, - 0x002ff104ae89750b, - 0x002fbb62a236d133, - 0x002f74997d2070b4, - 0x002ed84aa8b6fce3, - 0x002e832df7a46dbd, - 0x002e0e0846857cab, - 0x002decfbdfb55ee6, - 0x002ddc876f3ff488, - 0x002dbbc1d4c482c4, - 0x002d8af0e0de0556, - 0x002d4a7b7d14b30a, - 0x002d2a85073bcf4e, - 0x002d1a9ab13e8be4, - 0x002ceb1eb4b9fd8b, - 0x002c8d503a79794c, - 0x002c404d708784ed, - 0x002c31066315ec52, - 0x002c1297d80f2664, - 0x002c037044c55f6b, - 0x002be5404cd13086, - 0x002bb845adaf0cce, - 0x002b5f62c639f16d, - 0x002b07e6734f2b88, - 0x002ace569d8342b7, - 0x002a791d5dbd4dcf, - 0x002a4eff8113017c, - 0x002a3319e156df32, - 0x002a0986286526ea, - 0x0029d29551d91e39, - 0x0029b7529e109f0a, - 0x00298137491ea465, - 0x0029665e1eb9f9da, - 0x002909752e019a5e, - 0x0028ef35e2e5efb0, - 0x0028c815aa4b8278, - 0x0028bb1b867199da, - 0x0028a13ff5d7b002, - 0x00287ab3f173e755, - 0x00286dead67713bd, - 0x002847bfcda6503e, - 0x002808c1ea6b4777, - 0x00278d0e0f23ff61, - 0x002768863c093c7f, - 0x0027505115a73ca8, - 0x00274441a61dc1b9, - 0x0026b5c166113cf0, - 0x00269e65ad07b18e, - 0x002692c25f877560, - 0x002658fa7523cd11, - 0x0026148710cf0f9e, - 0x002609363b22524f, - 0x0025d1065a1c1122, - 0x0025a48a382b863f, - 0x0025837190eccdbc, - 0x00256292e95d510c, - 0x002541eda98d068c, - 0x0024e15087fed8f5, - 0x0024c18b20979e5d, - 0x0024ac7b336de0c5, - 0x0024a1fc478c60bb, - 0x002463801231c009, - 0x0024300fd506ed33, - 0x0023f314a494da81, - 0x0023cadedd2fad3a, - 0x00237b7ed2664a03, - 0x0023372967dbaf1d, - 0x00231a308a371f20, - 0x002306fa63e1e600, - 0x0022fd6731575684, - 0x0022ea507805749c, - 0x0022e0cce8b3d720, - 0x0022b1887857d161, - 0x00227977fcc49cc0, - 0x00225db37b5e5f4f, - 0x0022421b91322ed6, - 0x0021f05b35f52102, - 0x0021e75de5c70d60, - 0x0021a01d6c19be96, - 0x0021974a6615c81a, - 0x00213767697cf36a, - 0x00211d9f7fad35f1, - 0x0020fb7d9dd36c18, - 0x0020e2123d661e0e, - 0x0020d135b66ae990, - 0x0020c8cded4d7a8e, - 0x0020b80b3f43ddbf, - 0x002096b9180f46a6, - 0x00207de7e28de5da, - 0x002054dec8cf1fb3, - 0x00204cb630b3aab5, - 0x00202428adc37beb, - 0x001fec0c7834def4, - 0x001fc46fae98a1d0, - 0x001facda430ff619, - 0x001f7e17dd8e15e5, - 0x001f765a3556a4ee, - 0x001f66ea49d802f1, - 0x001f5f3800faf9c0, - 0x001f38f4e6c0f1f9, - 0x001f0b8546752578, - 0x001f03ff83f001f0, - 0x001ec853b0a3883c, - 0x001ec0ee573723eb, - 0x001eaad38e6f6894, - 0x001e9c28a765fe53, - 0x001e94d8758c2003, - 0x001e707ba8f65e68, - 0x001e53a2a68f574e, - 0x001e1380a56b438d, - 0x001dbf9f513a3802, - 0x001db1d1d58bc600, - 0x001d9d358f53de38, - 0x001d81e6df6165c7, - 0x001d4bdf7fd40e30, - 0x001d452c7a1c958d, - 0x001d37cf9b902659, - 0x001d1d3a5791e97b, - 0x001ce89fe6b47416, - 0x001ce219f3235071, - 0x001cd516dcf92139, - 0x001cbb33bd1c2b8b, - 0x001ca7e7d2546688, - 0x001c94b5c1b3dbd3, - 0x001c87f7f9c241c1, - 0x001c6202706c35a9, - 0x001c5bb8a9437632, - 0x001c174343b4111e, - 0x001c04d0d3e46b42, - 0x001bfeb00fbf4308, - 0x001bec5dce0b202d, - 0x001be03444620037, - 0x001bce09c66f6fc3, - 0x001ba40228d02b30, - 0x001b9225b1cf8919, - 0x001b864a2ff3f53f, - 0x001b80604150e49b, - 0x001b6eb1aaeaacf3, - 0x001b62f48da3c8cc, - 0x001b516babe96092, - 0x001b2e9cef1e0c87, - 0x001b1d56bedc849b, - 0x001b0c267546aec0, - 0x001ae45f62024fa0, - 0x001ad917631b5f54, - 0x001ac83d18cb608f, - 0x001aa6c7ad8c063f, - 0x001a90a7b1228e2a, - 0x001a8027c03ba059, - 0x001a7533289deb89, - 0x001a2ed7ce16b49f, - 0x0019fefc0a279a73, - 0x0019e4b0cd873b5f, - 0x0019cfcdfd60e514, - 0x0019c56932d66c85, - 0x0019b5e1ab6fc7c2, - 0x0019b0b8a62f2a73, - 0x0019a149fc98942c, - 0x001969517ec25b85, - 0x00194b3083360ba8, - 0x00194631f4bebdc1, - 0x00191e84127268fd, - 0x00190adbb543984f, - 0x001901130bd18200, - 0x0018e3e6b889ac94, - 0x0018c233420e1ec1, - 0x0018aa5872d92bd6, - 0x0018a5989945ccf9, - 0x00189c1e60b57f60, - 0x0018893fbc8690b9, - 0x00187b2bb3e1041c, - 0x00186d27c9cdcfb8, - 0x001863d8bf4f2c1c, - 0x00185f33e2ad7593, - 0x001855ef75973e13, - 0x001848160153f134, - 0x001835b72e6f0656, - 0x00182c922d83eb39, - 0x0018280243c0365a, - 0x00181a5cd5898e73, - 0x001803c0961773aa, - 0x0017ff4005ffd001, - 0x0017e8d670433edb, - 0x0017d7066cf4bb5d, - 0x0017ce285b806b1f, - 0x0017af52cdf27e02, - 0x0017997d47d01039, - 0x00177f7ec2c6d0ba, - 0x00177b2f3cd00756, - 0x00176e4a22f692a0, - 0x001765b94271e11b, - 0x001761732b044ae4, - 0x00173f7a5300a2bc, - 0x001722112b48be1f, - 0x001719b7a16eb843, - 0x00170d3c99cc5052, - 0x0016fcad7aed3bb6, - 0x0016f051b8231ffd, - 0x0016e81beae20643, - 0x0016c3721584c1d8, - 0x0016b34c2ba09663, - 0x00169f3ce292ddcd, - 0x00169344b2220a0d, - 0x001687592593c1b1, - 0x00167787f1418ec9, - 0x001663e190395ff2, - 0x00164c7a4b6eb5b3, - 0x0016316a061182fd, - 0x001629ba914584e4, - 0x00161e3d57de21b2, - 0x001612cc01b977f0, - 0x00160efe30c525ff, - 0x0015da45249ec5de, - 0x0015d68ab4acff92, - 0x0015c3f989d1eb15, - 0x0015b535ad11b8f0, - 0x0015addb3f424ec1, - 0x00159445cb91be6b, - 0x00158d0199771e63, - 0x00157e87d9b69e04, - 0x001568f58bc01ac3, - 0x00155e3c993fda9b, - 0x001548eacc5e1e6e, - 0x001541d8f91ba6a7, - 0x00153747060cc340, - 0x001514569f93f7c4, - 0x00150309705d3d79, - 0x0014ff97020cf5bf, - 0x0014e42c114cf47e, - 0x0014b835bdcb6447, - 0x0014b182b53a9ab7, - 0x0014ae2ad094a3d3, - 0x00149a320ea59f96, - 0x001490441de1a2fb, - 0x001489aacce57200, - 0x001475f82ad6ff99, - 0x00146c2cfe53204f, - 0x00145f2ca490d4a1, - 0x001458b2aae0ec87, - 0x00144bcb0a3a3150, - 0x001428a1e65441d4, - 0x00142575a6c210d7, - 0x00141f2025ba5c46, - 0x00141bf6e35420fd, - 0x001409141d1d313a, - 0x0013dd8bc19c3513, - 0x0013da76f714dc8f, - 0x0013d13e50f8f49e, - 0x0013c80e37ca3819, - 0x0013bee69fa99ccf, - 0x0013b8d0ede55835, - 0x0013afb7680bb054, - 0x0013acb0c3841c96, - 0x00139a9c5f434fde, - 0x0013949cf33a0d9d, - 0x001382b4a00c31b0, - 0x00137fbbc0eedcbb, - 0x001370ecf047b069, - 0x00136df9790e3155, - 0x0013567dd8defd5b, - 0x0013539261fdbc34, - 0x00133c564292d28a, - 0x001333ae178d6388, - 0x0013170ad00d1fd7, - 0x0013005f01db0947, - 0x0012f51d40342210, - 0x0012ef815e4ed950, - 0x0012ecb4abccd827, - 0x0012e71dc1d3d820, - 0x0012e45389a16495, - 0x0012c5d9226476cc, - 0x0012badc391156fd, - 0x0012aa78e412f522, - 0x0012a251f5f47fd1, - 0x001294cb85c53534, - 0x0012921963beb65e, - 0x00128cb777c69ca8, - 0x001284aa6cf07294, - 0x001281fcf6ac7f87, - 0x001279f937367db9, - 0x00126cad0488be94, - 0x00126a06794646a2, - 0x00125a2f2bcd3e95, - 0x00124d108389e6b1, - 0x00124a73083771ac, - 0x00123d6acda0620a, - 0x00122b4b2917eafd, - 0x00122391bfce1e2f, - 0x00121e6f1ea579f2, - 0x001216c09e471568, - 0x00120c8cb9d93909, - 0x001204ed58e64ef9, - 0x0011fd546578f00c, - 0x0011e9310b8b4c9c, - 0x0011da3405db9911, - 0x0011d7b6f4eb055d, - 0x0011d2bee748c145, - 0x0011c1706ddce7a7, - 0x0011ba0fed2a4f14, - 0x0011b528538ed64a, - 0x0011ab61404242ac, - 0x00119f378ce81d2f, - 0x001195889ece79da, - 0x00118e4c65387077, - 0x001187161d70e725, - 0x00116cd6d1c85239, - 0x001165bbe7ce86b1, - 0x0011635ee344ce36, - 0x0011579767b6d679, - 0x00114734711e2b54, - 0x0011428b90147f05, - 0x00113b92f3021636, - 0x001126cabc886884, - 0x0011247eb1b85976, - 0x0011190bb01efd65, - 0x0011091de0fd679c, - 0x001104963c7e4e0b, - 0x00110253516420b0, - 0x0010f70db7c41797, - 0x0010e75ee2bf9ecd, - 0x0010e2e91c6e0676, - 0x0010da049b9d428d, - 0x0010c6248fe3b1a2, - 0x0010c1c03ed690eb, - 0x0010bb2e1379e3a2, - 0x0010b8fe7f61228e, - 0x0010b4a10d60a4f7, - 0x0010ae192681ec0f, - 0x0010abecfbe5b0ae, - 0x00109eefd568b96d, - 0x00109a9ff178b40c, - 0x00108531e22f9ff9, - 0x00106ddec1af4417, - 0x0010614174a4911d, - 0x00105f291f0448e7, - 0x00105afa0ef32891, - 0x001054b777bd2530, - 0x00104e79a97fb69e, - 0x00104c661eafd845, - 0x0010462ea939c933, - 0x00102f8baa442836, - 0x00102d7ff7e94004, - 0x0010275ff9f13c02, - 0x001017213fcbb4d3, - 0x00101112234579d1, - 0x00100501907d271c, - 0x00100300901b0510, - 0x000ffd008fe5050f, - 0x000ff10e02dd5084, - 0x000fe13b9c80c67f, - 0x000fdf4384be37ad, - 0x000fdb54cbe8766e, - 0x000fd5725ca6ff32, - 0x000fc7c84684c6fb, - 0x000fc3e5265dbaa8, - 0x000fc1f44e0cae12, - 0x000fb0921c50a7af, - 0x000f999fd70cbc6b, - 0x000f9023fd5339d0, - 0x000f8a78ce671475, - 0x000f8895fee86574, - 0x000f7f2ecb084b10, - 0x000f7d4eb7d10c29, - 0x000f73f52277a3c3, - 0x000f7217c598961c, - 0x000f68cbb1448f42, - 0x000f633d0276e4c5, - 0x000f6163ac20ec79, - 0x000f582ba2bc16c6, - 0x000f5654f43290a0, - 0x000f4d2a23810bc6, - 0x000f47af4d6a2f27, - 0x000f4066f2b6e652, - 0x000f2555048e3a92, - 0x000f1c64588a5bf6, - 0x000f1a9be09cb411, - 0x000f11b7d5259d39, - 0x000f0aa284e7f802, - 0x000f0556e5e3b7f2, - 0x000efc8bcbc808e5, - 0x000eecd1a690efbb, - 0x000ee79aed6d65f2, - 0x000edd386114d83a, - 0x000ed2e44366e5e2, - 0x000ed12cf8e17f64, - 0x000ec1cd284b2b2d, - 0x000ebcb44cadda1e, - 0x000eb9505943771d, - 0x000eb43d57efeadc, - 0x000eaf2dd4c00b03, - 0x000ea0141c1ba6a6, - 0x000e9e68805f05a7, - 0x000e96142b87e431, - 0x000e8a7acd811b8c, - 0x000e8587db3e001d, - 0x000e823d186d44dc, - 0x000e8098463ee194, - 0x000e7d4fbfb3ee1d, - 0x000e69bba6981ffa, - 0x000e681c5cf7d707, - 0x000e5e684930e334, - 0x000e5993247dc92d, - 0x000e4cbfee201016, - 0x000e465ee7daf979, - 0x000e4199de07af5c, - 0x000e3cd8031d4f40, - 0x000e2ea56c157eb2, - 0x000e221e5d4d3c73, - 0x000e208f09a841c7, - 0x000e1d716a945161, - 0x000e18c78ec8fd4d, - 0x000e173a4a162079, - 0x000e1294881bb494, - 0x000e0df1d5f24661, - 0x000e063ec7f50b1e, - 0x000e01a4313dc53d, - 0x000df8780f47c350, - 0x000def57e8eb9666, - 0x000de1bdf3f63d46, - 0x000de03cb5099809, - 0x000ddbbaecc84bc9, - 0x000dd8bb5ca73db6, - 0x000dcb4d529a6e07, - 0x000dc55da73dea60, - 0x000db3ad2585011f, - 0x000db0becf636a79, - 0x000daf481ca6fefb, - 0x000dac5ba7565dae, - 0x000da7fb4e419d19, - 0x000da6867a88d327, - 0x000d9dd005f50b02, - 0x000d9aeb01f763f7, - 0x000d90d31dd5804a, - 0x000d7b6453358f31, - 0x000d744e69d900e4, - 0x000d7011a317260e, - 0x000d67a0126e7c19, - 0x000d5dd39e775bd7, - 0x000d59a4f2990168, - 0x000d52b24cb6269d, - 0x000d4a6571da4f04, - 0x000d49044eac6581, - 0x000d4642e40d1129, - 0x000d4222e81fe723, - 0x000d3ca6e8c89f41, - 0x000d388ce29d4edc, - 0x000d31bc7b7d8013, - 0x000d306071c13fd5, - 0x000d2da935479b1a, - 0x000d2430aa043597, - 0x000d2025bc6c7db7, - 0x000d1c1d4ad1732b, - 0x000d196e5f46f8c8, - 0x000d156a0c9293e8, - 0x000d1413d26e0aee, - 0x000d0d68c6a4128f, - 0x000d0c142eaf3837, - 0x000d01792ab9d70d, - 0x000cf990317775bc, - 0x000cf44f8c38790a, - 0x000ce88d96d10e45, - 0x000ce5f39b07e906, - 0x000ce20e98148847, - 0x000cda4b9c30ccd7, - 0x000cd9015ae32495, - 0x000cd524244aca36, - 0x000cd14940099cf6, - 0x000ccd70ac089a07, - 0x000cbb9c535c4371, - 0x000cb7d0b46fe0ff, - 0x000caefe5d7135f4, - 0x000cac7b5f00f0cd, - 0x000ca7785ceddbea, - 0x000ca13a2a86e1db, - 0x000c9c4009753007, - 0x000c94d02e64bfab, - 0x000c89b8c9c875ef, - 0x000c87447737277e, - 0x000c860aaa2514e3, - 0x000c8397c813f1b9, - 0x000c74fa805d6d56, - 0x000c6db8a1f5cdfe, - 0x000c6a1add9e2398, - 0x000c68e6be826648, - 0x000c5f4e25fc9df0, - 0x000c5bb8bf2ad1cd, - 0x000c58256b316ced, - 0x000c4fd5ad917b5b, - 0x000c49ecb3ea4d7a, - 0x000c41b00b7d950a, - 0x000c3f57990b87a1, - 0x000c2ddcb31250f8, - 0x000c2a63b3651432, - 0x000c26ecae1db72e, - 0x000c2377a18c051e, - 0x000c1ede9efcec29, - 0x000c1b6e258d13a0, - 0x000c19243f5399bb, - 0x000c17ff9f400305, - 0x000c112865703b94, - 0x000c0dbfaea33225, - 0x000c0b7af12ddfb9, - 0x000c0a58e464462c, - 0x000c06f40512eef2, - 0x000bfa9275a2b247, - 0x000bf7367402cdf0, - 0x000bf61833f4f921, - 0x000bf3dc543a74a1, - 0x000be9d9302a7115, - 0x000be8bd6e051e01, - 0x000be6868804d5a6, - 0x000bdfe6c4359f0e, - 0x000bdeccdb0b5c3a, - 0x000bdb8058ee429a, - 0x000bd94e5c1b371f, - 0x000bcb1d293b1af3, - 0x000bc7db8db0c1a5, - 0x000bc49bbdfd2662, - 0x000bc2723240f402, - 0x000bbe217c2b7c13, - 0x000bb8c10aab27b2, - 0x000ba7ad528a7e79, - 0x000b9f3611b48c5e, - 0x000b9e2806e5e7c4, - 0x000b9aff0c4913fe, - 0x000b98e4aedd581c, - 0x000b97d7c94b7dc2, - 0x000b95be902d9d9e, - 0x000b94b23c872b90, - 0x000b8f77714d15a1, - 0x000b882d0beff6a1, - 0x000b850ff9852703, - 0x000b82fd86db8806, - 0x000b7edadd32f76c, - 0x000b79b3b4df3b7b, - 0x000b769e6d59833f, - 0x000b6c636b5141ff, - 0x000b6a59ceae8801, - 0x000b6955461e38f7, - 0x000b6648c2dc6bc2, - 0x000b572282260209, - 0x000b552072bde889, - 0x000b511e7552f9c4, - 0x000b4c1ff34a5c0e, - 0x000b4922f58d4aa2, - 0x000b46278c16b967, - 0x000b42301cd99b49, - 0x000b3f385dd77e4e, - 0x000b394d8ef8f0f6, - 0x000b375601507c14, - 0x000b3463f76be376, - 0x000b3368f6c4a07c, - 0x000b3078fc1c25f0, - 0x000b2e84854e93e5, - 0x000b2b971aa909a4, - 0x000b2a9da39d6bc8, - 0x000b25c0dc29a0fc, - 0x000b24c8698449a7, - 0x000b1d0ae579aefe, - 0x000b1a2698ea2f9e, - 0x000b108dc4186078, - 0x000b0ea463b00212, - 0x000b08ec37007962, - 0x000b024778cc023c, - 0x000af515df36a88e, - 0x000af24635f6561e, - 0x000ae8f1b92baeaf, - 0x000ae715eee11f8e, - 0x000adec0b0a3bb36, - 0x000adb10aa4c956f, - 0x000ad84e49752245, - 0x000ad6782597f0c2, - 0x000ad3b81a0d72fe, - 0x000acd52beced79e, - 0x000aca9755063254, - 0x000ac7dd4cafb12a, - 0x000ac354f80dca44, - 0x000ac26d5c2b8ad2, - 0x000abde997dabd3d, - 0x000ab883aa1100a0, - 0x000ab4ed637f5a0b, - 0x000ab074e9febf52, - 0x000aaf90778c2039, - 0x000aab1c7684f034, - 0x000aa78f20ebbb3e, - 0x000aa23f8dafd4cc, - 0x000a9dd69cad5934, - 0x000a935004a07302, - 0x000a9270690f3d14, - 0x000a90b1a0aa5d30, - 0x000a8d35c9d731e9, - 0x000a8a9a6a51f16c, - 0x000a88de370f596b, - 0x000a856786adae36, - 0x000a7da4c77d3161, - 0x000a7959f863d4a1, - 0x000a76c85e80c195, - 0x000a743806dc44c4, - 0x000a735d866dfa0a, - 0x000a70cedb02531e, - 0x000a6c8e842c770f, - 0x000a67791215dd74, - 0x000a66a0a51d363d, - 0x000a626893011861, - 0x000a5fe22c55c089, - 0x000a5d5cffb77275, - 0x000a5ad90c4186e5, - 0x000a578057e7c2eb, - 0x000a54ff3bb10e91, - 0x000a50d5683edc94, - 0x000a4e57854b3df4, - 0x000a4d8328c4b800, - 0x000a4b06e01d97b3, - 0x000a488bca2c4449, - 0x000a4611e6132ed5, - 0x000a41f40f39e646, - 0x000a3eab5c3e44e9, - 0x000a34ddd50561e0, - 0x000a326d60e94186, - 0x000a2985a81ce614, - 0x000a28b72e26f82e, - 0x000a217aa3479693, - 0x000a1fe05c62df4b, - 0x000a1cad538aebf9, - 0x000a18b05f490083, - 0x000a0ccc4c28fc31, - 0x000a09a544d01ffe, - 0x000a0294aa53e9a2, - 0x000a01041a6aaed5, - 0x000a003c01680870, - 0x0009fc5558a971c8, - 0x0009f9ff9c3c03e5, - 0x0009f9389b864ab9, - 0x0009f6e4534bdca8, - 0x0009f557687235c2, - 0x0009ee633c0391ab, - 0x0009eb4f28e0bb39, - 0x0009e6b49e92e4bb, - 0x0009dfd4ccbd0045, - 0x0009d9c0828536c1, - 0x0009d77ad449f777, - 0x0009d6b92b28ee48, - 0x0009d231a476ed51, - 0x0009cfef711bf120, - 0x0009cc2e1448b765, - 0x0009cb6e26cbc64d, - 0x0009c7b03b4a9c67, - 0x0009c6f0fd980ab1, - 0x0009c4b3f3a30c3f, - 0x0009c0fb29436687, - 0x0009bbca025b7aec, - 0x0009ba4f4421e52c, - 0x0009b1783809ff03, - 0x0009b0bc5b4d2eac, - 0x0009aae172fd8b9c, - 0x0009aa26954607ed, - 0x0009a681e758a022, - 0x0009a5c7b284942e, - 0x0009a2264ecc5558, - 0x00099aebb39be56f, - 0x0009997ae1a9faac, - 0x000998c2a22b6900, - 0x000997527603f8a8, - 0x00099473685e4d50, - 0x00098eba72512a13, - 0x00098c96d8dee9e1, - 0x00098a743453554e, - 0x000989be33c9e6bd, - 0x0009857c692e9a59, - 0x00097fd540c05c9e, - 0x00097d04302ed944, - 0x00097b9c48289935, - 0x0009798133ece717, - 0x00096f07c683689e, - 0x00096e55d6393fc5, - 0x00096addad861696, - 0x00096a2c5a2cf0cf, - 0x00096818fc825eba, - 0x000966b74027f48a, - 0x000964a56850b8ed, - 0x000962947990eb36, - 0x00095fd4a4c885e0, - 0x00095dc5d3954fde, - 0x00095c671ddfe516, - 0x0009584d6340ddf1, - 0x00095641de84afcc, - 0x000953893c386521, - 0x00094f7740d87794, - 0x00094e1cb70c9ce0, - 0x00094962ecbcc7ce, - 0x00094559c69059cf, - 0x000941ff7e640716, - 0x000939fd7a24b099, - 0x000937ff22c014bd, - 0x000934050872c09e, - 0x00093209446d56f6, - 0x0009316033b5bd22, - 0x00092a22b9a79374, - 0x000927838edba206, - 0x000921a2e7112833, - 0x00091e623d5660d0, - 0x00091c6fc0cab8b6, - 0x000917e7d88028eb, - 0x0009169d455585cd, - 0x000915f81ef2d529, - 0x0009140938595d3a, - 0x000910d2360a450e, - 0x00090e417104eabd, - 0x00090c55d0fdea28, - 0x00090b0e84c04f20, - 0x000909243fac6b70, - 0x0008ff9d0440d137, - 0x0008fb3192789d73, - 0x0008f80c0d5031e3, - 0x0008f76b3664f164, - 0x0008f3a80550abc3, - 0x0008f087c50e00c4, - 0x0008efe7fb408cc2, - 0x0008eaecce5c4fd7, - 0x0008ea4dccaaec0b, - 0x0008e4ba9fbc2ff0, - 0x0008dd5688a3b7d6, - 0x0008d7d3821fd94f, - 0x0008d5feb03c31d7, - 0x0008d12033cc9d30, - 0x0008cbac4dec6a82, - 0x0008c9dc80ab604b, - 0x0008c942115dcc96, - 0x0008c3d7df67b539, - 0x0008c2a4bc35cb3b, - 0x0008c0d8a4f1f264, - 0x0008c03f71cbf906, - 0x0008bd42abd9a107, - 0x0008bae051d7f6ff, - 0x0008b7e735068135, - 0x0008b61f82c5fb08, - 0x0008b4588a74a05a, - 0x0008b1fb0a7ed403, - 0x0008b0ccc5d8f5c8, - 0x0008af07f8ac5146, - 0x0008ae71328ffd49, - 0x0008ab8086624822, - 0x0008aaea3ab5ae89, - 0x0008a7661f7020fe, - 0x0008a63ab88aa8dd, - 0x0008a47a35d020f3, - 0x0008a2ba68a3cebf, - 0x0008a2254c852497, - 0x00089ea849898bb3, - 0x00089d7f3e285109, - 0x000899720af36739, - 0x00089442160d11dc, - 0x0008931bd5875a22, - 0x000891630877aedf, - 0x00088baaad83e38f, - 0x00088a86b9090aa4, - 0x0008883fb99bf244, - 0x0008868b45e727ee, - 0x00088568aef30d47, - 0x0008832468f0bcdd, - 0x00088202b9a4df76, - 0x00087e0f31872e9b, - 0x00087c5ecd731f42, - 0x00087b3eea3bb388, - 0x00087751a6c67d78, - 0x000873f6e2f9d34a, - 0x000872d938dcfc01, - 0x0008724a80151dba, - 0x000869f677f6cc1a, - 0x000868db701df58d, - 0x0008623f563a7d6d, - 0x00086099ef0c8886, - 0x00085ef52d38fe87, - 0x00085bad981c7847, - 0x0008586893de7cfc, - 0x0008549b491e9efe, - 0x000852fb3859bea4, - 0x000851e631fc08f8, - 0x0008515bc9cde5f1, - 0x000850472f6185b3, - 0x00084b6defbc166b, - 0x000849d17159854b, - 0x0008469a54a20645, - 0x00084476f9401ade, - 0x000842dd2e2dc25d, - 0x000841cc543f58cb, - 0x00083e9b6c3df688, - 0x00083e1382f22ff9, - 0x00083ae57a327933, - 0x000832fd15e00939, - 0x00082ecb9c6669ac, - 0x00082e45ba6652c4, - 0x00082cb47b00abaa, - 0x000826fa5d0ce5aa, - 0x000823598cfc6865, - 0x000821cc79da73f1, - 0x00081f37ff3d12c0, - 0x00081c21947b0acd, - 0x00081a97404af5f7, - 0x00081a13f02d110e, - 0x0008190d81c9877b, - 0x000817016c0b3ffd, - 0x00081473c50ac33e, - 0x000812ec59f2d11a, - 0x0008116582e237c8, - 0x00080b4fe85ec545, - 0x000807c7894d029a, +pub const SMALL_PRIMES_INV: [P64; 1024] = [ + // the first should be 2, but 2 has not modular inverse + P64::new(0x0000000000000001, 0xffffffffffffffff), + P64::new(0xaaaaaaaaaaaaaaab, 0x5555555555555555), + P64::new(0xcccccccccccccccd, 0x3333333333333333), + P64::new(0x6db6db6db6db6db7, 0x2492492492492492), + P64::new(0x2e8ba2e8ba2e8ba3, 0x1745d1745d1745d1), + P64::new(0x4ec4ec4ec4ec4ec5, 0x13b13b13b13b13b1), + P64::new(0xf0f0f0f0f0f0f0f1, 0x0f0f0f0f0f0f0f0f), + P64::new(0x86bca1af286bca1b, 0x0d79435e50d79435), + P64::new(0xd37a6f4de9bd37a7, 0x0b21642c8590b216), + P64::new(0x34f72c234f72c235, 0x08d3dcb08d3dcb08), + P64::new(0xef7bdef7bdef7bdf, 0x0842108421084210), + P64::new(0x14c1bacf914c1bad, 0x06eb3e45306eb3e4), + P64::new(0x8f9c18f9c18f9c19, 0x063e7063e7063e70), + P64::new(0x82fa0be82fa0be83, 0x05f417d05f417d05), + P64::new(0x51b3bea3677d46cf, 0x0572620ae4c415c9), + P64::new(0x21cfb2b78c13521d, 0x04d4873ecade304d), + P64::new(0xcbeea4e1a08ad8f3, 0x0456c797dd49c341), + P64::new(0x4fbcda3ac10c9715, 0x04325c53ef368eb0), + P64::new(0xf0b7672a07a44c6b, 0x03d226357e16ece5), + P64::new(0x193d4bb7e327a977, 0x039b0ad12073615a), + P64::new(0x7e3f1f8fc7e3f1f9, 0x0381c0e070381c0e), + P64::new(0x9b8b577e613716af, 0x033d91d2a2067b23), + P64::new(0xa3784a062b2e43db, 0x03159721ed7e7534), + P64::new(0xf47e8fd1fa3f47e9, 0x02e05c0b81702e05), + P64::new(0xa3a0fd5c5f02a3a1, 0x02a3a0fd5c5f02a3), + P64::new(0x3a4c0a237c32b16d, 0x0288df0cac5b3f5d), + P64::new(0xdab7ec1dd3431b57, 0x027c45979c95204f), + P64::new(0x77a04c8f8d28ac43, 0x02647c69456217ec), + P64::new(0xa6c0964fda6c0965, 0x02593f69b02593f6), + P64::new(0x90fdbc090fdbc091, 0x0243f6f0243f6f02), + P64::new(0x7efdfbf7efdfbf7f, 0x0204081020408102), + P64::new(0x03e88cb3c9484e2b, 0x01f44659e4a42715), + P64::new(0xe21a291c077975b9, 0x01de5d6e3f8868a4), + P64::new(0x3aef6ca970586723, 0x01d77b654b82c339), + P64::new(0xdf5b0f768ce2cabd, 0x01b7d6c3dda338b2), + P64::new(0x6fe4dfc9bf937f27, 0x01b2036406c80d90), + P64::new(0x5b4fe5e92c0685b5, 0x01a16d3f97a4b01a), + P64::new(0x1f693a1c451ab30b, 0x01920fb49d0e228d), + P64::new(0x8d07aa27db35a717, 0x01886e5f0abb0499), + P64::new(0x882383b30d516325, 0x017ad2208e0ecc35), + P64::new(0xed6866f8d962ae7b, 0x016e1f76b4337c6c), + P64::new(0x3454dca410f8ed9d, 0x016a13cd15372904), + P64::new(0x1d7ca632ee936f3f, 0x01571ed3c506b39a), + P64::new(0x70bf015390948f41, 0x015390948f40feac), + P64::new(0xc96bdb9d3d137e0d, 0x014cab88725af6e7), + P64::new(0x2697cc8aef46c0f7, 0x0149539e3b2d066e), + P64::new(0xc0e8f2a76e68575b, 0x013698df3de07479), + P64::new(0x687763dfdb43bb1f, 0x0125e22708092f11), + P64::new(0x1b10ea929ba144cb, 0x0120b470c67c0d88), + P64::new(0x1d10c4c0478bbced, 0x011e2ef3b3fb8744), + P64::new(0x63fb9aeb1fdcd759, 0x0119453808ca29c0), + P64::new(0x64afaa4f437b2e0f, 0x0112358e75d30336), + P64::new(0xf010fef010fef011, 0x010fef010fef010f), + P64::new(0x28cbfbeb9a020a33, 0x0105197f7d734041), + P64::new(0xff00ff00ff00ff01, 0x00ff00ff00ff00ff), + P64::new(0xd624fd1470e99cb7, 0x00f92fb2211855a8), + P64::new(0x8fb3ddbd6205b5c5, 0x00f3a0d52cba8723), + P64::new(0xd57da36ca27acdef, 0x00f1d48bcee0d399), + P64::new(0xee70c03b25e4463d, 0x00ec979118f3fc4d), + P64::new(0xc5b1a6b80749cb29, 0x00e939651fe2d8d3), + P64::new(0x47768073c9b97113, 0x00e79372e225fe30), + P64::new(0x2591e94884ce32ad, 0x00dfac1f74346c57), + P64::new(0xf02806abc74be1fb, 0x00d578e97c3f5fe5), + P64::new(0x7ec3e8f3a7198487, 0x00d2ba083b445250), + P64::new(0x58550f8a39409d09, 0x00d161543e28e502), + P64::new(0xec9e48ae6f71de15, 0x00cebcf8bb5b4169), + P64::new(0x2ff3a018bfce8063, 0x00c5fe740317f9d0), + P64::new(0x7f9ec3fcf61fe7b1, 0x00c2780613c0309e), + P64::new(0x89f5abe570e046d3, 0x00bcdd535db1cc5b), + P64::new(0xda971b23f1545af5, 0x00bbc8408cd63069), + P64::new(0x79d5f00b9a7862a1, 0x00b9a7862a0ff465), + P64::new(0x4dba1df32a128a57, 0x00b68d31340e4307), + P64::new(0x87530217b7747d8f, 0x00b2927c29da5519), + P64::new(0x30baae53bb5e06dd, 0x00afb321a1496fdf), + P64::new(0xee70206c12e9b5b3, 0x00aceb0f891e6551), + P64::new(0xcdde9462ec9dbe7f, 0x00ab1cbdd3e2970f), + P64::new(0xafb64b05ec41cf4d, 0x00a87917088e262b), + P64::new(0x02944ff5aec02945, 0x00a513fd6bb00a51), + P64::new(0x2cb033128382df71, 0x00a36e71a2cb0331), + P64::new(0x1ccacc0c84b1c2a9, 0x00a03c1688732b30), + P64::new(0x19a93db575eb3a0b, 0x009c69169b30446d), + P64::new(0xcebeef94fa86fe2d, 0x009baade8e4a2f6e), + P64::new(0x6faa77fb3f8df54f, 0x00980e4156201301), + P64::new(0x68a58af00975a751, 0x00975a750ff68a58), + P64::new(0xd56e36d0c3efac07, 0x009548e4979e0829), + P64::new(0xd8b44c47a8299b73, 0x0093efd1c50e726b), + P64::new(0x02d9ccaf9ba70e41, 0x0091f5bcb8bb02d9), + P64::new(0x0985e1c023d9e879, 0x008f67a1e3fdc261), + P64::new(0x2a343316c494d305, 0x008e2917e0e702c6), + P64::new(0x70cb7916ab67652f, 0x008d8be33f95d715), + P64::new(0xd398f132fb10fe5b, 0x008c55841c815ed5), + P64::new(0x6f2a38a6bf54fa1f, 0x0088d180cd3a4133), + P64::new(0x211df689b98f81d7, 0x00869222b1acf1ce), + P64::new(0x0e994983e90f1ec3, 0x0085797b917765ab), + P64::new(0xad671e44bed87f3b, 0x008355ace3c897db), + P64::new(0xf9623a0516e70fc7, 0x00824a4e60b3262b), + P64::new(0x4b7129be9dece355, 0x0080c121b28bd1ba), + P64::new(0x190f3b7473f62c39, 0x007dc9f3397d4c29), + P64::new(0x63dacc9aad46f9a3, 0x007d4ece8fe88139), + P64::new(0xc1108fda24e8d035, 0x0079237d65bcce50), + P64::new(0xb77578472319bd8b, 0x0077cf53c5f7936c), + P64::new(0x473d20a1c7ed9da5, 0x0075a8accfbdd11e), + P64::new(0xfbe85af0fea2c8fb, 0x007467ac557c228e), + P64::new(0x58a1f7e6ce0f4c09, 0x00732d70ed8db8e9), + P64::new(0x1a00e58c544986f3, 0x0072c62a24c3797f), + P64::new(0x7194a17f55a10dc1, 0x007194a17f55a10d), + P64::new(0x7084944785e33763, 0x006fa549b41da7e7), + P64::new(0xba10679bd84886b1, 0x006e8419e6f61221), + P64::new(0xebe9c6bb31260967, 0x006d68b5356c207b), + P64::new(0x97a3fe4bd1ff25e9, 0x006d0b803685c01b), + P64::new(0x6c6388395b84d99f, 0x006bf790a8b2d207), + P64::new(0x8c51da6a1335df6d, 0x006ae907ef4b96c2), + P64::new(0x46f3234475d5add9, 0x006a37991a23aead), + P64::new(0x905605ca3c619a43, 0x0069dfbdd4295b66), + P64::new(0xcee8dff304767747, 0x0067dc4c45c8033e), + P64::new(0xff99c27f00663d81, 0x00663d80ff99c27f), + P64::new(0xacca407f671ddc2b, 0x0065ec17e3559948), + P64::new(0xe71298bac1e12337, 0x00654ac835cfba5c), + P64::new(0xfa1e94309cd09045, 0x00645c854ae10772), + P64::new(0xbebccb8e91496b9b, 0x006372990e5f901f), + P64::new(0x312fa30cc7d7b8bd, 0x006325913c07beef), + P64::new(0x6160ff9e9f006161, 0x006160ff9e9f0061), + P64::new(0x6b03673b5e28152d, 0x0060cdb520e5e88e), + P64::new(0xfe802ffa00bfe803, 0x005ff4017fd005ff), + P64::new(0xe66fe25c9e907c7b, 0x005ed79e31a4dccd), + P64::new(0x3f8b236c76528895, 0x005d7d42d48ac5ef), + P64::new(0xf6f923bf01ce2c0d, 0x005c6f35ccba5028), + P64::new(0x6c3d3d98bed7c42f, 0x005b2618ec6ad0a5), + P64::new(0x30981efcd4b010e7, 0x005a2553748e42e7), + P64::new(0x6f691fc81ebbe575, 0x0059686cf744cd5b), + P64::new(0xb10480ddb47b52cb, 0x0058ae97bab79976), + P64::new(0x74cd59ed64f3f0d7, 0x0058345f1876865f), + P64::new(0x0105cb81316d6c0f, 0x005743d5bb24795a), + P64::new(0x9be64c6d91c1195d, 0x005692c4d1ab74ab), + P64::new(0x71b3f945a27b1f49, 0x00561e46a4d5f337), + P64::new(0x77d80d50e508fd01, 0x005538ed06533997), + P64::new(0xa5eb778e133551cd, 0x0054c807f2c0bec2), + P64::new(0x18657d3c2d8a3f1b, 0x005345efbc572d36), + P64::new(0x2e40e220c34ad735, 0x00523a758f941345), + P64::new(0xa76593c70a714919, 0x005102370f816c89), + P64::new(0x1eef452124eea383, 0x0050cf129fb94acf), + P64::new(0x38206dc242ba771d, 0x004fd31941cafdd1), + P64::new(0x4cd4c35807772287, 0x004fa1704aa75945), + P64::new(0x83de917d5e69ddf3, 0x004f3ed6d45a63ad), + P64::new(0x882ef0403b4a6c15, 0x004f0de57154ebed), + P64::new(0xf8fb6c51c606b677, 0x004e1cae8815f811), + P64::new(0xb4abaac446d3e1fd, 0x004cd47ba5f6ff19), + P64::new(0xa9f83bbe484a14e9, 0x004c78ae734df709), + P64::new(0x0bebbc0d1ce874d3, 0x004c4b19ed85cfb8), + P64::new(0xbd418eaf0473189f, 0x004bf093221d1218), + P64::new(0x44e3af6f372b7e65, 0x004aba3c21dc633f), + P64::new(0xc87fdace4f9e5d91, 0x004a6360c344de00), + P64::new(0xec93479c446bd9bb, 0x004a383e9f74d68a), + P64::new(0xdac4d592e777c647, 0x0049e28fbabb9940), + P64::new(0xa63ea8c8f61f0c23, 0x0048417b57c78cd7), + P64::new(0xe476062ea5cbbb6f, 0x0047f043713f3a2b), + P64::new(0xdf68761c69daac27, 0x00474ff2a10281cf), + P64::new(0xb813d737637aa061, 0x00468b6f9a978f91), + P64::new(0xa3a77aac1fb15099, 0x0045f13f1caff2e2), + P64::new(0x17f0c3e0712c5825, 0x0045a5228cec23e9), + P64::new(0xfd912a70ff30637b, 0x0045342c556c66b9), + P64::new(0xfbb3b5dc01131289, 0x0044c4a23feeced7), + P64::new(0x856d560a0f5acdf7, 0x0043c5c20d3c9fe6), + P64::new(0x96472f314d3f89e3, 0x00437e494b239798), + P64::new(0xa76f5c7ed2253531, 0x0043142d118e47cb), + P64::new(0x816eae7c7bf69fe7, 0x0042ab5c73a13458), + P64::new(0xb6a2bea4cfb1781f, 0x004221950db0f3db), + P64::new(0xa3900c53318e81ed, 0x0041bbb2f80a4553), + P64::new(0x60aa7f5d9f148d11, 0x0040f391612c6680), + P64::new(0x6be8c0102c7a505d, 0x0040b1e94173fefd), + P64::new(0x8ff3f0ed28728f33, 0x004050647d9d0445), + P64::new(0x680e0a87e5ec7155, 0x004030241b144f3b), + P64::new(0xbbf70fa49fe829b7, 0x003f90c2ab542cb1), + P64::new(0xd69d1e7b6a50ca39, 0x003f71412d59f597), + P64::new(0x1a1e0f46b6d26aef, 0x003f137701b98841), + P64::new(0x7429f9a7a8251829, 0x003e79886b60e278), + P64::new(0xd9c2219d1b863613, 0x003e5b1916a7181d), + P64::new(0x91406c1820d077ad, 0x003dc4a50968f524), + P64::new(0x521f4ec02e3d2b97, 0x003da6e4c9550321), + P64::new(0xbb8283b63dc8eba5, 0x003d4e4f06f1def3), + P64::new(0x431eda153229ebbf, 0x003c4a6bdd24f9a4), + P64::new(0xaf0bf78d7e01686b, 0x003c11d54b525c73), + P64::new(0xa9ced0742c086e8d, 0x003bf5b1c5721065), + P64::new(0xc26458ad9f632df9, 0x003bbdb9862f23b4), + P64::new(0xbbff1255dff892af, 0x003b6a8801db5440), + P64::new(0xcbd49a333f04d8fd, 0x003b183cf0fed886), + P64::new(0xec84ed6f9cfdeff5, 0x003aabe394bdc3f4), + P64::new(0x97980cc40bda9d4b, 0x003a5ba3e76156da), + P64::new(0x777f34d524f5cbd9, 0x003a0c3e953378db), + P64::new(0x2797051d94cbbb7f, 0x0038f03561320b1e), + P64::new(0xea769051b4f43b81, 0x0038d6ecaef5908a), + P64::new(0xce7910f3034d4323, 0x003859cf221e6069), + P64::new(0x92791d1374f5b99b, 0x0037f7415dc9588a), + P64::new(0x89a5645cc68ea1b5, 0x00377df0d3902626), + P64::new(0x5f8aacf796c0cf0b, 0x00373622136907fa), + P64::new(0xf2e90a15e33edf99, 0x0036ef0c3b39b92f), + P64::new(0x8e99e5feb897c451, 0x0036915f47d55e6d), + P64::new(0xaca2eda38fb91695, 0x0036072cf3f866fd), + P64::new(0x5d9b737be5ea8b41, 0x0035d9b737be5ea8), + P64::new(0x4aefe1db93fd7cf7, 0x0035961559cc81c7), + P64::new(0xa0994ef20b3f8805, 0x0035531c897a4592), + P64::new(0x103890bda912822f, 0x00353ceebd3e98a4), + P64::new(0xb441659d13a9147d, 0x0034fad381585e5e), + P64::new(0x1e2134440c4c3f21, 0x00347884d1103130), + P64::new(0x263a27727a6883c3, 0x00340dd3ac39bf56), + P64::new(0x78e221472ab33855, 0x003351fdfecc140c), + P64::new(0x95eac88e82e6faff, 0x00333d72b089b524), + P64::new(0xf66c258317be8dab, 0x0033148d44d6b261), + P64::new(0x09ee202c7cb91939, 0x0032d7aef8412458), + P64::new(0x8d2fca1042a09ea3, 0x0032c3850e79c0f1), + P64::new(0x82779c856d8b8bf1, 0x00328766d59048a2), + P64::new(0x3879361cba8a223d, 0x00325fa18cb11833), + P64::new(0xf23f43639c3182a7, 0x00324bd659327e22), + P64::new(0xa03868fc474bcd13, 0x0032246e784360f4), + P64::new(0x651e78b8c5311a97, 0x0031afa5f1a33a08), + P64::new(0x8ffce639c00c6719, 0x00319c63ff398e70), + P64::new(0xf7b460754b0b61cf, 0x003162f7519a86a7), + P64::new(0x7b03f3359b8e63b1, 0x0030271fc9d3fc3c), + P64::new(0xa55c5326041eb667, 0x002ff104ae89750b), + P64::new(0x647f88ab896a76f5, 0x002fbb62a236d133), + P64::new(0x8fd971434a55a46d, 0x002f74997d2070b4), + P64::new(0x9fbf969958046447, 0x002ed84aa8b6fce3), + P64::new(0x9986feba69be3a81, 0x002e832df7a46dbd), + P64::new(0xa668b3e6d053796f, 0x002e0e0846857cab), + P64::new(0x97694e6589f4e09b, 0x002decfbdfb55ee6), + P64::new(0x37890c00b7721dbd, 0x002ddc876f3ff488), + P64::new(0x5ac094a235f37ea9, 0x002dbbc1d4c482c4), + P64::new(0x31cff775f2d5d65f, 0x002d8af0e0de0556), + P64::new(0xddad8e6b36505217, 0x002d4a7b7d14b30a), + P64::new(0x5a27df897062cd03, 0x002d2a85073bcf4e), + P64::new(0xe2396fe0fdb5a625, 0x002d1a9ab13e8be4), + P64::new(0xb352a4957e82317b, 0x002ceb1eb4b9fd8b), + P64::new(0xd8ab3f2c60c2ea3f, 0x002c8d503a79794c), + P64::new(0x6893f702f0452479, 0x002c404d708784ed), + P64::new(0x9686fdc182acf7e3, 0x002c31066315ec52), + P64::new(0x6854037173dce12f, 0x002c1297d80f2664), + P64::new(0x7f0ded1685c27331, 0x002c037044c55f6b), + P64::new(0xeeda72e1fe490b7d, 0x002be5404cd13086), + P64::new(0x9e7bfc959a8e6e53, 0x002bb845adaf0cce), + P64::new(0x49b314d6d4753dd7, 0x002b5f62c639f16d), + P64::new(0x2e8f8c5ac4aa1b3b, 0x002b07e6734f2b88), + P64::new(0xb8ef723481163d33, 0x002ace569d8342b7), + P64::new(0x6a2ec96a594287b7, 0x002a791d5dbd4dcf), + P64::new(0xdba41c6d13aab8c5, 0x002a4eff8113017c), + P64::new(0xc2adbe648dc3aaf1, 0x002a3319e156df32), + P64::new(0x87a2bade565f91a7, 0x002a0986286526ea), + P64::new(0x4d6fe8798c01f5df, 0x0029d29551d91e39), + P64::new(0x3791310c8c23d98b, 0x0029b7529e109f0a), + P64::new(0xf80e446b01228883, 0x00298137491ea465), + P64::new(0x9aed1436fbf500cf, 0x0029665e1eb9f9da), + P64::new(0x7839b54cc8b24115, 0x002909752e019a5e), + P64::new(0xc128c646ad0309c1, 0x0028ef35e2e5efb0), + P64::new(0x14de631624a3c377, 0x0028c815aa4b8278), + P64::new(0x3f7b9fe68b0ecbf9, 0x0028bb1b867199da), + P64::new(0x284ffd75ec00a285, 0x0028a13ff5d7b002), + P64::new(0x37803cb80dea2ddb, 0x00287ab3f173e755), + P64::new(0x86b63f7c9ac4c6fd, 0x00286dead67713bd), + P64::new(0x8b6851d1bd99b9d3, 0x002847bfcda6503e), + P64::new(0xb62fda77ca343b6d, 0x002808c1ea6b4777), + P64::new(0x1f0dc009e34383c9, 0x00278d0e0f23ff61), + P64::new(0x496dc21ddd35b97f, 0x002768863c093c7f), + P64::new(0xb0e96ce17090f82b, 0x0027505115a73ca8), + P64::new(0xaadf05acdd7d024d, 0x00274441a61dc1b9), + P64::new(0xcb138196746eafb5, 0x0026b5c166113cf0), + P64::new(0x347f523736755d61, 0x00269e65ad07b18e), + P64::new(0xd14a48a051f7dd0b, 0x002692c25f877560), + P64::new(0x474d71b1ce914d25, 0x002658fa7523cd11), + P64::new(0x386063f5e28c1f89, 0x0026148710cf0f9e), + P64::new(0x1db7325e32d04e73, 0x002609363b22524f), + P64::new(0xfef748d3893b880d, 0x0025d1065a1c1122), + P64::new(0x2f3351506e935605, 0x0025a48a382b863f), + P64::new(0x7a3637fa2376415b, 0x0025837190eccdbc), + P64::new(0x4ac525d2baa21969, 0x00256292e95d510c), + P64::new(0x3a11c16b42cd351f, 0x002541eda98d068c), + P64::new(0x6c7abde0049c2a11, 0x0024e15087fed8f5), + P64::new(0x54dad0303e069ac7, 0x0024c18b20979e5d), + P64::new(0xebf1ac9fdfe91433, 0x0024ac7b336de0c5), + P64::new(0xfafdda8237cec655, 0x0024a1fc478c60bb), + P64::new(0xdce3ff6e71ffb739, 0x002463801231c009), + P64::new(0xbed5737d6286db1b, 0x0024300fd506ed33), + P64::new(0xe479e431fe08b4df, 0x0023f314a494da81), + P64::new(0x9dd9b0dd7742f897, 0x0023cadedd2fad3a), + P64::new(0x8f09d7402c5a5e87, 0x00237b7ed2664a03), + P64::new(0x9216d5c4d958738d, 0x0023372967dbaf1d), + P64::new(0xb3139ba11d34ca63, 0x00231a308a371f20), + P64::new(0x47d54f7ed644afaf, 0x002306fa63e1e600), + P64::new(0x92a81d85cf11a1b1, 0x0022fd6731575684), + P64::new(0x754b26533253bdfd, 0x0022ea507805749c), + P64::new(0xbbe0efc980bfd467, 0x0022e0cce8b3d720), + P64::new(0xc0d8d594f024dca1, 0x0022b1887857d161), + P64::new(0x8238d43bcaac1a65, 0x00227977fcc49cc0), + P64::new(0x27779c1fae6175bb, 0x00225db37b5e5f4f), + P64::new(0xa746ca9af708b2c9, 0x0022421b91322ed6), + P64::new(0x93f3cd9f389be823, 0x0021f05b35f52102), + P64::new(0x5cb4a4c04c489345, 0x0021e75de5c70d60), + P64::new(0xbf6047743e85b6b5, 0x0021a01d6c19be96), + P64::new(0x61c147831563545f, 0x0021974a6615c81a), + P64::new(0xedb47c0ae62dee9d, 0x00213767697cf36a), + P64::new(0x0a3824386673a573, 0x00211d9f7fad35f1), + P64::new(0xa4a77d19e575a0eb, 0x0020fb7d9dd36c18), + P64::new(0xa2bee045e066c279, 0x0020e2123d661e0e), + P64::new(0xc23618de8ab43d05, 0x0020d135b66ae990), + P64::new(0x266b515216cb9f2f, 0x0020c8cded4d7a8e), + P64::new(0xe279edd9e9c2e85b, 0x0020b80b3f43ddbf), + P64::new(0xd0c591c221dc9c53, 0x002096b9180f46a6), + P64::new(0x06da8ee9c9ee7c21, 0x00207de7e28de5da), + P64::new(0x9dfebcaf4c27e8c3, 0x002054dec8cf1fb3), + P64::new(0x49aeff9f19dd6de5, 0x00204cb630b3aab5), + P64::new(0x86976a57a296e9c7, 0x00202428adc37beb), + P64::new(0xa3b9abf4872b84cd, 0x001fec0c7834def4), + P64::new(0x34fca6483895e6ef, 0x001fc46fae98a1d0), + P64::new(0x34b5a333988f873d, 0x001facda430ff619), + P64::new(0xd9dd4f19b5f17be1, 0x001f7e17dd8e15e5), + P64::new(0xb935b507fd0ce78b, 0x001f765a3556a4ee), + P64::new(0xb450f5540660e797, 0x001f66ea49d802f1), + P64::new(0x63ff82831ffc1419, 0x001f5f3800faf9c0), + P64::new(0x8992f718c22a32fb, 0x001f38f4e6c0f1f9), + P64::new(0x5f3253ad0d37e7bf, 0x001f0b8546752578), + P64::new(0x007c0ffe0fc007c1, 0x001f03ff83f001f0), + P64::new(0x4d8ebadc0c0640b1, 0x001ec853b0a3883c), + P64::new(0xe2729af831037bdb, 0x001ec0ee573723eb), + P64::new(0xb8f64bf30feebfe9, 0x001eaad38e6f6894), + P64::new(0xda93124b544c0bf5, 0x001e9c28a765fe53), + P64::new(0x9cf7ff0b593c539f, 0x001e94d8758c2003), + P64::new(0xd6bd8861fa0e07d9, 0x001e707ba8f65e68), + P64::new(0x5cfe75c0bd8ab891, 0x001e53a2a68f574e), + P64::new(0x43e808757c2e862b, 0x001e1380a56b438d), + P64::new(0x90caa96d595c9d93, 0x001dbf9f513a3802), + P64::new(0x8fd550625d07135f, 0x001db1d1d58bc600), + P64::new(0x76b010a86e209f2d, 0x001d9d358f53de38), + P64::new(0xecc0426447769b25, 0x001d81e6df6165c7), + P64::new(0xe381339caabe3295, 0x001d4bdf7fd40e30), + P64::new(0xd1b190a2d0c7673f, 0x001d452c7a1c958d), + P64::new(0xc3bce3cf26b0e7eb, 0x001d37cf9b902659), + P64::new(0x5f87e76f56c61ce3, 0x001d1d3a5791e97b), + P64::new(0xc06c6857a124b353, 0x001ce89fe6b47416), + P64::new(0x38c040fcba630f75, 0x001ce219f3235071), + P64::new(0xd078bc4fbd533b21, 0x001cd516dcf92139), + P64::new(0xde8e15c5dd354f59, 0x001cbb33bd1c2b8b), + P64::new(0xca61d53d7414260f, 0x001ca7e7d2546688), + P64::new(0xb56bf5ba8eae635d, 0x001c94b5c1b3dbd3), + P64::new(0x44a72cb0fb6e3949, 0x001c87f7f9c241c1), + P64::new(0x879839a714f45bcd, 0x001c6202706c35a9), + P64::new(0x02a8994fde5314b7, 0x001c5bb8a9437632), + P64::new(0xb971920cf2b90135, 0x001c174343b4111e), + P64::new(0x8a8fd0b7df9a6e8b, 0x001c04d0d3e46b42), + P64::new(0xb31f9a84c1c6eaad, 0x001bfeb00fbf4308), + P64::new(0x92293b02823c6d83, 0x001bec5dce0b202d), + P64::new(0xeee77ff20fe5ddcf, 0x001be03444620037), + P64::new(0x0e1ea0f6c496c11d, 0x001bce09c66f6fc3), + P64::new(0xfdf2d3d6f88ccb6b, 0x001ba40228d02b30), + P64::new(0xfa9d74a3457738f9, 0x001b9225b1cf8919), + P64::new(0xefc3ca3db71a5785, 0x001b864a2ff3f53f), + P64::new(0x8e2071718d0d6daf, 0x001b80604150e49b), + P64::new(0xbc0fdbfeb6cfabfd, 0x001b6eb1aaeaacf3), + P64::new(0x1eeab613e5e5aee9, 0x001b62f48da3c8cc), + P64::new(0x2d2388e90e9e929f, 0x001b516babe96092), + P64::new(0x81dbafba588ddb43, 0x001b2e9cef1e0c87), + P64::new(0x52eebc51c4799791, 0x001b1d56bedc849b), + P64::new(0x1c6bc4693b45a047, 0x001b0c267546aec0), + P64::new(0x06eee0974498874d, 0x001ae45f62024fa0), + P64::new(0xd85b7377a9953cb9, 0x001ad917631b5f54), + P64::new(0x4b6df412d4caf56f, 0x001ac83d18cb608f), + P64::new(0x6b8afbbb4a053493, 0x001aa6c7ad8c063f), + P64::new(0xcc5299c96ac7720b, 0x001a90a7b1228e2a), + P64::new(0xadce84b5c710aa99, 0x001a8027c03ba059), + P64::new(0x9d673f5aa3804225, 0x001a7533289deb89), + P64::new(0xe6541268efbce7f7, 0x001a2ed7ce16b49f), + P64::new(0xfcf41e76cf5be669, 0x0019fefc0a279a73), + P64::new(0x5c3eb5dc31c383cb, 0x0019e4b0cd873b5f), + P64::new(0x301832d11d8ad6c3, 0x0019cfcdfd60e514), + P64::new(0x2e9c0942f1ce450f, 0x0019c56932d66c85), + P64::new(0x97f3f2be37a39a5d, 0x0019b5e1ab6fc7c2), + P64::new(0xe8b7d8a9654187c7, 0x0019b0b8a62f2a73), + P64::new(0xb5d024d7da5b1b55, 0x0019a149fc98942c), + P64::new(0xb8ba9d6e7ae3501b, 0x001969517ec25b85), + P64::new(0xf50865f71b90f1df, 0x00194b3083360ba8), + P64::new(0x739c1682847df9e1, 0x00194631f4bebdc1), + P64::new(0xc470a4d842b90ed1, 0x00191e84127268fd), + P64::new(0x1fb1be11698cc409, 0x00190adbb543984f), + P64::new(0xd8d5512a7cd35d15, 0x001901130bd18200), + P64::new(0xa5496821723e07f9, 0x0018e3e6b889ac94), + P64::new(0xbcc8c6d7abaa8167, 0x0018c233420e1ec1), + P64::new(0x52c396c95eb619a1, 0x0018aa5872d92bd6), + P64::new(0x6eb7e380878ec74b, 0x0018a5989945ccf9), + P64::new(0x3d5513b504537157, 0x00189c1e60b57f60), + P64::new(0x314391f8862e948f, 0x0018893fbc8690b9), + P64::new(0xdc0b17cfcd81f5dd, 0x00187b2bb3e1041c), + P64::new(0x2f6bea3ec89044b3, 0x00186d27c9cdcfb8), + P64::new(0xce13a05869f1b57f, 0x001863d8bf4f2c1c), + P64::new(0x7593474e8ace3581, 0x00185f33e2ad7593), + P64::new(0x07fc329295a05e4d, 0x001855ef75973e13), + P64::new(0xb05377cba4908d23, 0x001848160153f134), + P64::new(0xe7b2131a628aa39b, 0x001835b72e6f0656), + P64::new(0x9031dbed7de01527, 0x00182c922d83eb39), + P64::new(0x76844b1c670aa9a9, 0x0018280243c0365a), + P64::new(0x6a03f4533b08915f, 0x00181a5cd5898e73), + P64::new(0x1dbca579db0a3999, 0x001803c0961773aa), + P64::new(0x002ffe800bffa003, 0x0017ff4005ffd001), + P64::new(0x478ab1a3e936139d, 0x0017e8d670433edb), + P64::new(0x66e722bc4c5cc095, 0x0017d7066cf4bb5d), + P64::new(0x7a8f63c717278541, 0x0017ce285b806b1f), + P64::new(0xdf6eee24d292bc2f, 0x0017af52cdf27e02), + P64::new(0x9fc20d17237dd569, 0x0017997d47d01039), + P64::new(0xcdf9932356bda2ed, 0x00177f7ec2c6d0ba), + P64::new(0x97b5e332e80f68d7, 0x00177b2f3cd00756), + P64::new(0x46eee26fd875e2e5, 0x00176e4a22f692a0), + P64::new(0x3548a8e65157a611, 0x001765b94271e11b), + P64::new(0xc288d03be9b71e3b, 0x001761732b044ae4), + P64::new(0x8151186db38937ab, 0x00173f7a5300a2bc), + P64::new(0x7800b910895a45f1, 0x001722112b48be1f), + P64::new(0xaee0b024182eec3d, 0x001719b7a16eb843), + P64::new(0x96323eda173b5713, 0x00170d3c99cc5052), + P64::new(0x0ed0dbd03ae77c8b, 0x0016fcad7aed3bb6), + P64::new(0xf73800b7828dc119, 0x0016f051b8231ffd), + P64::new(0x1b61715ec22b7ca5, 0x0016e81beae20643), + P64::new(0xa8533a991ead64bf, 0x0016c3721584c1d8), + P64::new(0x7f6c7290e46c2e77, 0x0016b34c2ba09663), + P64::new(0x6325e8d907b01db1, 0x00169f3ce292ddcd), + P64::new(0x28909f70152a1067, 0x00169344b2220a0d), + P64::new(0xea7077af0997a0f5, 0x001687592593c1b1), + P64::new(0x7e605cad10c32e6d, 0x00167787f1418ec9), + P64::new(0x471b33570635b38f, 0x001663e190395ff2), + P64::new(0xab559fa997a61bb3, 0x00164c7a4b6eb5b3), + P64::new(0xad4bdae562bddab9, 0x0016316a061182fd), + P64::new(0x055e1b2f2ed62f45, 0x001629ba914584e4), + P64::new(0x03cd328b1a2dca9b, 0x00161e3d57de21b2), + P64::new(0xd28f4e08733218a9, 0x001612cc01b977f0), + P64::new(0xb6800b077f186293, 0x00160efe30c525ff), + P64::new(0x6fbd138c3fd9c207, 0x0015da45249ec5de), + P64::new(0xb117ccd12ae88a89, 0x0015d68ab4acff92), + P64::new(0x2f1a1a044046bceb, 0x0015c3f989d1eb15), + P64::new(0x548aba0b060541e3, 0x0015b535ad11b8f0), + P64::new(0xcf4e808cea111b2f, 0x0015addb3f424ec1), + P64::new(0xdbec1b4fa855a475, 0x00159445cb91be6b), + P64::new(0xe3f794eb600d7821, 0x00158d0199771e63), + P64::new(0x34fae0d9a11f7c59, 0x00157e87d9b69e04), + P64::new(0xf006b0ccbbac085d, 0x001568f58bc01ac3), + P64::new(0x3f45076dc3114733, 0x00155e3c993fda9b), + P64::new(0xeef49bfa58a1a1b7, 0x001548eacc5e1e6e), + P64::new(0x12c4218bea691fa3, 0x001541d8f91ba6a7), + P64::new(0xbc7504e3bd5e64f1, 0x00153747060cc340), + P64::new(0x4ee21c292bb92fad, 0x001514569f93f7c4), + P64::new(0x34338b7327a4bacf, 0x00150309705d3d79), + P64::new(0x3fe5c0833d6fccd1, 0x0014ff97020cf5bf), + P64::new(0xb1e70743535203c1, 0x0014e42c114cf47e), + P64::new(0xefbb5dcdfb4e43d3, 0x0014b835bdcb6447), + P64::new(0xca68467ca5394f9f, 0x0014b182b53a9ab7), + P64::new(0x8c51c081408b97a1, 0x0014ae2ad094a3d3), + P64::new(0x3275a899dfa5dd65, 0x00149a320ea59f96), + P64::new(0x9e674cb62e1b78bb, 0x001490441de1a2fb), + P64::new(0xa37ff5bb2a998d47, 0x001489aacce57200), + P64::new(0x792a999db131a22b, 0x001475f82ad6ff99), + P64::new(0x1b48841bc30d29b9, 0x00146c2cfe53204f), + P64::new(0xf06721d2011d3471, 0x00145f2ca490d4a1), + P64::new(0x93fd2386dff85ebd, 0x001458b2aae0ec87), + P64::new(0x4ce72f54c07ed9b5, 0x00144bcb0a3a3150), + P64::new(0xd6d0fd3e71dd827b, 0x001428a1e65441d4), + P64::new(0x856405fb1eed819d, 0x00142575a6c210d7), + P64::new(0x8ea8aceb7c443989, 0x00141f2025ba5c46), + P64::new(0x34a13026f62e5873, 0x00141bf6e35420fd), + P64::new(0x1eea0208ec0af4f7, 0x001409141d1d313a), + P64::new(0x63679853cea598cb, 0x0013dd8bc19c3513), + P64::new(0xc30b3ebd61f2d0ed, 0x0013da76f714dc8f), + P64::new(0x7eb9037bc7f43bc3, 0x0013d13e50f8f49e), + P64::new(0xa583e6f6ce016411, 0x0013c80e37ca3819), + P64::new(0xf1938d895f1a74c7, 0x0013bee69fa99ccf), + P64::new(0x80cf1491c1e81e33, 0x0013b8d0ede55835), + P64::new(0x3c0f12886ba8f301, 0x0013afb7680bb054), + P64::new(0x0e4b786e0dfcc5ab, 0x0013acb0c3841c96), + P64::new(0x672684c93f2d41ef, 0x00139a9c5f434fde), + P64::new(0xe00757badb35c51b, 0x0013949cf33a0d9d), + P64::new(0xd6d84afe66472edf, 0x001382b4a00c31b0), + P64::new(0xfbbc0eedcbbfb6e1, 0x00137fbbc0eedcbb), + P64::new(0x250f43aa08a84983, 0x001370ecf047b069), + P64::new(0x04400e927b1acaa5, 0x00136df9790e3155), + P64::new(0x56572be34b9d3215, 0x0013567dd8defd5b), + P64::new(0x87964ef7781c62bf, 0x0013539261fdbc34), + P64::new(0x29ed84051c06e9af, 0x00133c564292d28a), + P64::new(0xb00acd11ed3f87fd, 0x001333ae178d6388), + P64::new(0x06307881744152d9, 0x0013170ad00d1fd7), + P64::new(0x7a786459f5c1ccc9, 0x0013005f01db0947), + P64::new(0x1308125d74563281, 0x0012f51d40342210), + P64::new(0x395310a480b3e34d, 0x0012ef815e4ed950), + P64::new(0x35985baa8b202837, 0x0012ecb4abccd827), + P64::new(0x96304a6e052b3223, 0x0012e71dc1d3d820), + P64::new(0xbd8265fc9af8fd45, 0x0012e45389a16495), + P64::new(0x1b6d0b383ec58e0b, 0x0012c5d9226476cc), + P64::new(0xc21a7c3b68b28503, 0x0012badc391156fd), + P64::new(0x236fa180fbfd6007, 0x0012aa78e412f522), + P64::new(0xc42accd440ed9595, 0x0012a251f5f47fd1), + P64::new(0x7acf7128236ba3f7, 0x001294cb85c53534), + P64::new(0xf909367a987b9c79, 0x0012921963beb65e), + P64::new(0xb64efb252bfba705, 0x00128cb777c69ca8), + P64::new(0x980d4f5a7e4cd25b, 0x001284aa6cf07294), + P64::new(0xe1ecc4ef27b0c37d, 0x001281fcf6ac7f87), + P64::new(0x9111aebb81d72653, 0x001279f937367db9), + P64::new(0x8951f985cb2c67ed, 0x00126cad0488be94), + P64::new(0xc439d4fc54e0b5d7, 0x00126a06794646a2), + P64::new(0xe857bf31896d533b, 0x00125a2f2bcd3e95), + P64::new(0xb614bb4cb5023755, 0x00124d108389e6b1), + P64::new(0x938a89e5473bf1ff, 0x00124a73083771ac), + P64::new(0xeac481aca34de039, 0x00123d6acda0620a), + P64::new(0x14b961badf4809a7, 0x00122b4b2917eafd), + P64::new(0x76784fecba352435, 0x00122391bfce1e2f), + P64::new(0xefa689bb58aef5e1, 0x00121e6f1ea579f2), + P64::new(0xb2b2c4db9c3a8197, 0x001216c09e471568), + P64::new(0x2503bc992279f8cf, 0x00120c8cb9d93909), + P64::new(0xd2ab9aec5ca1541d, 0x001204ed58e64ef9), + P64::new(0x3e78ba1460f99af3, 0x0011fd546578f00c), + P64::new(0x0a01426572cfcb63, 0x0011e9310b8b4c9c), + P64::new(0xbea857968f3cbd67, 0x0011da3405db9911), + P64::new(0x78db213eefe659e9, 0x0011d7b6f4eb055d), + P64::new(0x963e8541a74d35f5, 0x0011d2bee748c145), + P64::new(0x9e22d152776f2e43, 0x0011c1706ddce7a7), + P64::new(0x05d10d39d1e1f291, 0x0011ba0fed2a4f14), + P64::new(0x374468dccaced1dd, 0x0011b528538ed64a), + P64::new(0x8d145c7d110c5ad5, 0x0011ab61404242ac), + P64::new(0x3251a39f5acb5737, 0x00119f378ce81d2f), + P64::new(0xa66e50171443506f, 0x001195889ece79da), + P64::new(0x124f69ad91dd4cbd, 0x00118e4c65387077), + P64::new(0xec24f8f2a61a2793, 0x001187161d70e725), + P64::new(0xb472148e656b7a51, 0x00116cd6d1c85239), + P64::new(0x0adf9570e1142f07, 0x001165bbe7ce86b1), + P64::new(0x89bf33b065119789, 0x0011635ee344ce36), + P64::new(0x8f0149803cb291eb, 0x0011579767b6d679), + P64::new(0x8334b63afd190a31, 0x00114734711e2b54), + P64::new(0x920908d50d6aba7d, 0x0011428b90147f05), + P64::new(0x57d8b018c5a33d53, 0x00113b92f3021636), + P64::new(0xea1773092dc27ee5, 0x001126cabc886884), + P64::new(0xcae5f38b7bf2e00f, 0x0011247eb1b85976), + P64::new(0x2bd02df34f695349, 0x0011190bb01efd65), + P64::new(0xddfecd5be62e2eb7, 0x0011091de0fd679c), + P64::new(0xdbf849ebec96c4a3, 0x001104963c7e4e0b), + P64::new(0xda31d4d0187357c5, 0x00110253516420b0), + P64::new(0xe34e21cc2d5418a7, 0x0010f70db7c41797), + P64::new(0x68ca5137a9e574ad, 0x0010e75ee2bf9ecd), + P64::new(0x3eaa0d0f804bfd19, 0x0010e2e91c6e0676), + P64::new(0x554fb753cc20e9d1, 0x0010da049b9d428d), + P64::new(0x797afcca1300756b, 0x0010c6248fe3b1a2), + P64::new(0x8b8d950b52eeea77, 0x0010c1c03ed690eb), + P64::new(0xfb6cd166acabc185, 0x0010bb2e1379e3a2), + P64::new(0x4eb6c5ed9437a7af, 0x0010b8fe7f61228e), + P64::new(0xd1eddbd91b790cdb, 0x0010b4a10d60a4f7), + P64::new(0x93d714ea4d8948e9, 0x0010ae192681ec0f), + P64::new(0x3ca13ed8145188d3, 0x0010abecfbe5b0ae), + P64::new(0x829086016da89c57, 0x00109eefd568b96d), + P64::new(0xd7da1f432124a543, 0x00109a9ff178b40c), + P64::new(0x7ead5581632fb07f, 0x00108531e22f9ff9), + P64::new(0x35443837f63ec3bd, 0x00106ddec1af4417), + P64::new(0x89e2b200e5519461, 0x0010614174a4911d), + P64::new(0xe9ae44f0b7289c0b, 0x00105f291f0448e7), + P64::new(0x94387a277b9fa817, 0x00105afa0ef32891), + P64::new(0xc84f1a58abfc2c25, 0x001054b777bd2530), + P64::new(0x71101d8e3c83377b, 0x00104e79a97fb69e), + P64::new(0xc024abe5c50ba69d, 0x00104c661eafd845), + P64::new(0x15de4eb365a65d73, 0x0010462ea939c933), + P64::new(0x09ed28a76bcca931, 0x00102f8baa442836), + P64::new(0x816bffbf4a00205b, 0x00102d7ff7e94004), + P64::new(0x1f5c71543d558069, 0x0010275ff9f13c02), + P64::new(0xf25c64d0ec53b859, 0x001017213fcbb4d3), + P64::new(0x96c02c2ef1e0ff0f, 0x00101112234579d1), + P64::new(0x19a804816870a333, 0x00100501907d271c), + P64::new(0x6de49add0971c555, 0x00100300901b0510), + P64::new(0x528087e684c71aab, 0x000ffd008fe5050f), + P64::new(0xa94152c269bcdeef, 0x000ff10e02dd5084), + P64::new(0x0379450a3c2b6bdf, 0x000fe13b9c80c67f), + P64::new(0xd2cd38bafe5373e1, 0x000fdf4384be37ad), + P64::new(0xc29df2bea71d8bad, 0x000fdb54cbe8766e), + P64::new(0xc15862775f302e83, 0x000fd5725ca6ff32), + P64::new(0x1016af2fe55ede09, 0x000fc7c84684c6fb), + P64::new(0x3d26dbd9d1910715, 0x000fc3e5265dbaa8), + P64::new(0x621dab2dfaf3dfbf, 0x000fc1f44e0cae12), + P64::new(0xb6f1d7ac287338b1, 0x000fb0921c50a7af), + P64::new(0x8d9e9f0c3f9e7fd9, 0x000f999fd70cbc6b), + P64::new(0x60a93f8762e914bb, 0x000f9023fd5339d0), + P64::new(0xb14371f247c159c9, 0x000f8a78ce671475), + P64::new(0x6dd3b484471d4eb3, 0x000f8895fee86574), + P64::new(0xcd172f4701c1684d, 0x000f7f2ecb084b10), + P64::new(0x0372e686ed8bb537, 0x000f7d4eb7d10c29), + P64::new(0xbc07f7ca65c5b071, 0x000f73f52277a3c3), + P64::new(0xab2b6170c3f78d9b, 0x000f7217c598961c), + P64::new(0xf3d74f461fe6f5b5, 0x000f68cbb1448f42), + P64::new(0xdbc13f4b31f3230b, 0x000f633d0276e4c5), + P64::new(0xd1420716e3f1572d, 0x000f6163ac20ec79), + P64::new(0xd5be2fd4d805464f, 0x000f582ba2bc16c6), + P64::new(0xc68b97c136943851, 0x000f5654f43290a0), + P64::new(0x9e27918af7cfb473, 0x000f4d2a23810bc6), + P64::new(0x5ec8ab6c36ac7f41, 0x000f47af4d6a2f27), + P64::new(0x964076331dd90979, 0x000f4066f2b6e652), + P64::new(0x30198eff77b002d7, 0x000f2555048e3a92), + P64::new(0x3af7cb9583ece011, 0x000f1c64588a5bf6), + P64::new(0x34ce06f643d9883b, 0x000f1a9be09cb411), + P64::new(0x79f767e528708c55, 0x000f11b7d5259d39), + P64::new(0x185332d2ef2313cd, 0x000f0aa284e7f802), + P64::new(0x43b611b84c8332a3, 0x000f0556e5e3b7f2), + P64::new(0xc2e215e4f43bb63d, 0x000efc8bcbc808e5), + P64::new(0xf94b9dd22ce44e97, 0x000eecd1a690efbb), + P64::new(0xd895834a1db166a5, 0x000ee79aed6d65f2), + P64::new(0x347d2f16d19b8d09, 0x000edd386114d83a), + P64::new(0x1b54d4dc45b7d98d, 0x000ed2e44366e5e2), + P64::new(0x117ac30d9a044877, 0x000ed12cf8e17f64), + P64::new(0x0e10b78a67a526e9, 0x000ec1cd284b2b2d), + P64::new(0x92da68a818688a9f, 0x000ebcb44cadda1e), + P64::new(0xcf2b6c87f741f84b, 0x000eb9505943771d), + P64::new(0xd264f9bd41e18ed9, 0x000eb43d57efeadc), + P64::new(0x733cbeaa97166d8f, 0x000eaf2dd4c00b03), + P64::new(0xc9f475b021d22e81, 0x000ea0141c1ba6a6), + P64::new(0x731f76f2ec4c852b, 0x000e9e68805f05a7), + P64::new(0xdaf6f0c978f69945, 0x000e96142b87e431), + P64::new(0x749c8ad20c61ec93, 0x000e8a7acd811b8c), + P64::new(0x09307ff8bd3c1261, 0x000e8587db3e001d), + P64::new(0x334a69fb5a486e2d, 0x000e823d186d44dc), + P64::new(0x1f36c7bf31578617, 0x000e8098463ee194), + P64::new(0x31ebbcc279ea6103, 0x000e7d4fbfb3ee1d), + P64::new(0x42e2aad119f466eb, 0x000e69bba6981ffa), + P64::new(0x106ec05a0ab1450d, 0x000e681c5cf7d707), + P64::new(0xb1b38db92a99e731, 0x000e5e684930e334), + P64::new(0x784ae377e67071e7, 0x000e5993247dc92d), + P64::new(0x3e9e1471ba6671d7, 0x000e4cbfee201016), + P64::new(0x82c29b59d4d73d0f, 0x000e465ee7daf979), + P64::new(0xc23dd07128b5525d, 0x000e4199de07af5c), + P64::new(0x4d4e5ce0e9245133, 0x000e3cd8031d4f40), + P64::new(0xc8fd1057c09f8cc5, 0x000e2ea56c157eb2), + P64::new(0xea1516e94f394035, 0x000e221e5d4d3c73), + P64::new(0xb5e3319c564ee9df, 0x000e208f09a841c7), + P64::new(0x126a69f90d822d8b, 0x000e1d716a945161), + P64::new(0x501ed6348857aa19, 0x000e18c78ec8fd4d), + P64::new(0xde344a324eee1c83, 0x000e173a4a162079), + P64::new(0x1dd9690cb2c406d1, 0x000e1294881bb494), + P64::new(0x08d6c5178d5e4387, 0x000e0df1d5f24661), + P64::new(0x4cea4050a3e8fdc1, 0x000e063ec7f50b1e), + P64::new(0xc114a06acc83f777, 0x000e01a4313dc53d), + P64::new(0x20b060ebc0ea01db, 0x000df8780f47c350), + P64::new(0xfe50045acb78c99f, 0x000def57e8eb9666), + P64::new(0x291a68705b196e91, 0x000de1bdf3f63d46), + P64::new(0xc1042c724273e2bb, 0x000de03cb5099809), + P64::new(0x2cee680bb165b7c9, 0x000ddbbaecc84bc9), + P64::new(0xfd2ff9f12e0776d5, 0x000dd8bb5ca73db6), + P64::new(0x166a5da63af2cc6f, 0x000dcb4d529a6e07), + P64::new(0xedd16a5930408d27, 0x000dc55da73dea60), + P64::new(0x2adf30c26528844f, 0x000db3ad2585011f), + P64::new(0x9a48d6572b5eec7b, 0x000db0becf636a79), + P64::new(0x6e8bf2877503cb9d, 0x000daf481ca6fefb), + P64::new(0xea27a191a7045389, 0x000dac5ba7565dae), + P64::new(0x6eb091f34dd45d3f, 0x000da7fb4e419d19), + P64::new(0xdc8a6cabb2937d41, 0x000da6867a88d327), + P64::new(0xbc2f04f254922a05, 0x000d9dd005f50b02), + P64::new(0x41431f4d6eb38631, 0x000d9aeb01f763f7), + P64::new(0x7bd717435a08291f, 0x000d90d31dd5804a), + P64::new(0x4232df9c91fc1a55, 0x000d7b6453358f31), + P64::new(0xa4651e1d5382eab7, 0x000d744e69d900e4), + P64::new(0x7cfb5409de4cf3c5, 0x000d7011a317260e), + P64::new(0xcdd636fb068b9929, 0x000d67a0126e7c19), + P64::new(0xee8f95e740462c97, 0x000d5dd39e775bd7), + P64::new(0x490f97b3a758b4a5, 0x000d59a4f2990168), + P64::new(0x641431563c441287, 0x000d52b24cb6269d), + P64::new(0xb743dad3ec45916b, 0x000d4a6571da4f04), + P64::new(0x7b188be8f55c878d, 0x000d49044eac6581), + P64::new(0xd805648b2ca54ef9, 0x000d4642e40d1129), + P64::new(0x76dbe6eef60123af, 0x000d4222e81fe723), + P64::new(0x3711525e6a9e8867, 0x000d3ca6e8c89f41), + P64::new(0x85c2215cb383d8f5, 0x000d388ce29d4edc), + P64::new(0xe58f554c89825857, 0x000d31bc7b7d8013), + P64::new(0x8fbd3b17c01dacd9, 0x000d306071c13fd5), + P64::new(0x4c8c39dc7aedee65, 0x000d2da935479b1a), + P64::new(0x653ac6dda86cd3b3, 0x000d2430aa043597), + P64::new(0x0d61c6791a9c2c81, 0x000d2025bc6c7db7), + P64::new(0xb627a30090354237, 0x000d1c1d4ad1732b), + P64::new(0x83a89a539c527c23, 0x000d196e5f46f8c8), + P64::new(0x28c8c09330e90d71, 0x000d156a0c9293e8), + P64::new(0xee1178d27b1f029b, 0x000d1413d26e0aee), + P64::new(0xcecc740b37860ab5, 0x000d0d68c6a4128f), + P64::new(0x79736fde910c485f, 0x000d0c142eaf3837), + P64::new(0x6873d51f2487234f, 0x000d01792ab9d70d), + P64::new(0x2a112180614fb973, 0x000cf990317775bc), + P64::new(0xcb04cea98508f4eb, 0x000cf44f8c38790a), + P64::new(0xc2fcd2c527e28d7d, 0x000ce88d96d10e45), + P64::new(0x980203ee10393c69, 0x000ce5f39b07e906), + P64::new(0x3fa90a1d7d75681f, 0x000ce20e98148847), + P64::new(0xdbf3bfefef217cc3, 0x000cda4b9c30ccd7), + P64::new(0x66a17fd3087b41e5, 0x000cd9015ae32495), + P64::new(0x962195d496fbbd3b, 0x000cd524244aca36), + P64::new(0xc705a86155443e49, 0x000cd14940099cf6), + P64::new(0x3f298ee0be6febff, 0x000ccd70ac089a07), + P64::new(0xaa99b084e62fa613, 0x000cbb9c535c4371), + P64::new(0x1f000cb7d0b46fe1, 0x000cb7d0b46fe0ff), + P64::new(0x9ed7858637c9b2cf, 0x000caefe5d7135f4), + P64::new(0x4d871aaf27c106fb, 0x000cac7b5f00f0cd), + P64::new(0x2e6a467cdc75a4f3, 0x000ca7785ceddbea), + P64::new(0xe9d938fb696dde8d, 0x000ca13a2a86e1db), + P64::new(0x40ec71b0b1554485, 0x000c9c4009753007), + P64::new(0x3aae12f861e5f3e9, 0x000c94d02e64bfab), + P64::new(0xa97565873959f843, 0x000c89b8c9c875ef), + P64::new(0x0b5a960c09fbca8f, 0x000c87447737277e), + P64::new(0x463fe3d268012c91, 0x000c860aaa2514e3), + P64::new(0xe59a6bd5f5ee1bdd, 0x000c8397c813f1b9), + P64::new(0x6542e84d7775ce45, 0x000c74fa805d6d56), + P64::new(0x8b6eef58fd9effa9, 0x000c6db8a1f5cdfe), + P64::new(0x58993dbb9f98075f, 0x000c6a1add9e2398), + P64::new(0x2997955a810acf61, 0x000c68e6be826648), + P64::new(0x76e3d2f5077db451, 0x000c5f4e25fc9df0), + P64::new(0xb37c1d2867e30907, 0x000c5bb8bf2ad1cd), + P64::new(0x53ce6e09bd8d8695, 0x000c58256b316ced), + P64::new(0x39db291ea2a6b0e3, 0x000c4fd5ad917b5b), + P64::new(0xddd265ab9c58847d, 0x000c49ecb3ea4d7a), + P64::new(0x5beca8562dddd0cb, 0x000c41b00b7d950a), + P64::new(0xb69031c153ddbed7, 0x000c3f57990b87a1), + P64::new(0xd03c2271b42a6fcd, 0x000c2ddcb31250f8), + P64::new(0xcd6fd19e63e40ea3, 0x000c2a63b3651432), + P64::new(0xf7687aa8e4fd7bf1, 0x000c26ecae1db72e), + P64::new(0x649dfda112a272a7, 0x000c2377a18c051e), + P64::new(0xecf7866a56d526df, 0x000c1ede9efcec29), + P64::new(0x72bbf1cfdaebfead, 0x000c1b6e258d13a0), + P64::new(0x55f6a48df7055719, 0x000c19243f5399bb), + P64::new(0x80060bffcfa00183, 0x000c17ff9f400305), + P64::new(0x8a104f309919b087, 0x000c112865703b94), + P64::new(0x98fa7db7652f6a15, 0x000c0dbfaea33225), + P64::new(0x5d7d1b3df70f7ac1, 0x000c0b7af12ddfb9), + P64::new(0x16ab7b5e04cc1f6b, 0x000c0a58e464462c), + P64::new(0x78a5bfd2e5ececf9, 0x000c06f40512eef2), + P64::new(0x6506392e171d869f, 0x000bfa9275a2b247), + P64::new(0xc3fc12e221ef146d, 0x000bf7367402cdf0), + P64::new(0xf8aa132822c33657, 0x000bf61833f4f921), + P64::new(0x894496574f536f43, 0x000bf3dc543a74a1), + P64::new(0x8b2546b08fb4cbd5, 0x000be9d9302a7115), + P64::new(0x043bbb561bd1aa7f, 0x000be8bd6e051e01), + P64::new(0x2412c7cc4ea7a12b, 0x000be6868804d5a6), + P64::new(0x6f0bd406dd71696f, 0x000bdfe6c4359f0e), + P64::new(0xad475c6988d54b71, 0x000bdeccdb0b5c3a), + P64::new(0xd812e5d48dbbba27, 0x000bdb8058ee429a), + P64::new(0x22aaca437ba04893, 0x000bd94e5c1b371f), + P64::new(0xdba6ff1fecd5f09d, 0x000bcb1d293b1af3), + P64::new(0x13016d3396286773, 0x000bc7db8db0c1a5), + P64::new(0xc746494631bcfa41, 0x000bc49bbdfd2662), + P64::new(0xd14888565bf6a10d, 0x000bc2723240f402), + P64::new(0xc002ef885f0adf05, 0x000bbe217c2b7c13), + P64::new(0xe5a04da7fee6ade7, 0x000bb8c10aab27b2), + P64::new(0xc114ce5468593bc7, 0x000ba7ad528a7e79), + P64::new(0x0bb6747dd7f577b7, 0x000b9f3611b48c5e), + P64::new(0x395ce5a20f285839, 0x000b9e2806e5e7c4), + P64::new(0x6eee8be66e8618ef, 0x000b9aff0c4913fe), + P64::new(0x52acf64297f1241b, 0x000b98e4aedd581c), + P64::new(0x361dcc48a364093d, 0x000b97d7c94b7dc2), + P64::new(0x342d6f475d72e629, 0x000b95be902d9d9e), + P64::new(0x5e978bd46410d413, 0x000b94b23c872b90), + P64::new(0xcc3433d75ba015ad, 0x000b8f77714d15a1), + P64::new(0x1c83b7628458d4fb, 0x000b882d0beff6a1), + P64::new(0xf9ca45637e38f809, 0x000b850ff9852703), + P64::new(0xcbed792ffaf6b115, 0x000b82fd86db8806), + P64::new(0x9abd961d8c0e8c8d, 0x000b7edadd32f76c), + P64::new(0xe69572fa659340af, 0x000b79b3b4df3b7b), + P64::new(0x9187e7483a6436fd, 0x000b769e6d59833f), + P64::new(0x1e9c726993bed9d9, 0x000b6c636b5141ff), + P64::new(0x243554db91976365, 0x000b6a59ceae8801), + P64::new(0x04d06ff994c0088f, 0x000b6955461e38f7), + P64::new(0x25b76abcb74889dd, 0x000b6648c2dc6bc2), + P64::new(0x3a409642893c779b, 0x000b572282260209), + P64::new(0x8f8f620d8bc0c927, 0x000b552072bde889), + P64::new(0x6f9f196b3369855f, 0x000b511e7552f9c4), + P64::new(0x92a522bb0638ed99, 0x000b4c1ff34a5c0e), + P64::new(0x96270f1efdd7004f, 0x000b4922f58d4aa2), + P64::new(0xb4844b380fdaa79d, 0x000b46278c16b967), + P64::new(0x108936aa5f9c1495, 0x000b42301cd99b49), + P64::new(0x0b60f606f104c9eb, 0x000b3f385dd77e4e), + P64::new(0xc663dfe8263b302f, 0x000b394d8ef8f0f6), + P64::new(0xc91a280b9110b15b, 0x000b375601507c14), + P64::new(0x0904287118d10969, 0x000b3463f76be376), + P64::new(0x160d36a5d31bf553, 0x000b3368f6c4a07c), + P64::new(0xe84f5fda3c67ad21, 0x000b3078fc1c25f0), + P64::new(0xbd85701f72d4b6ed, 0x000b2e84854e93e5), + P64::new(0x4c50cf5924dee1c3, 0x000b2b971aa909a4), + P64::new(0x2455aaf1633bb6e5, 0x000b2a9da39d6bc8), + P64::new(0xd775b39f549b8ac7, 0x000b25c0dc29a0fc), + P64::new(0x87fcdda7a252cb49, 0x000b24c8698449a7), + P64::new(0x53df2e3bd254a739, 0x000b1d0ae579aefe), + P64::new(0x8915e69623a5f7ef, 0x000b1a2698ea2f9e), + P64::new(0x1ef24c80742dd08b, 0x000b108dc4186078), + P64::new(0xb4d87aaa6fb1e897, 0x000b0ea463b00212), + P64::new(0x788573e8b92dbbfb, 0x000b08ec37007962), + P64::new(0x02527b137b0878c1, 0x000b024778cc023c), + P64::new(0x1870a7c8dee9f4f5, 0x000af515df36a88e), + P64::new(0x39b99e40910a224b, 0x000af24635f6561e), + P64::new(0x45821c0abd4df247, 0x000ae8f1b92baeaf), + P64::new(0x10fe2b2f50e02fb3, 0x000ae715eee11f8e), + P64::new(0x5762b90c043f0345, 0x000adec0b0a3bb36), + P64::new(0x82a67b9193b27bbd, 0x000adb10aa4c956f), + P64::new(0xa6e914e28ec37693, 0x000ad84e49752245), + P64::new(0x835d9a4facaf445f, 0x000ad6782597f0c2), + P64::new(0x48def8175884f82d, 0x000ad3b81a0d72fe), + P64::new(0xae900e2d7c9a6f7b, 0x000acd52beced79e), + P64::new(0x1c08431bdd18be89, 0x000aca9755063254), + P64::new(0xb370a66d684fd83f, 0x000ac7dd4cafb12a), + P64::new(0xb4be33e18f93b279, 0x000ac354f80dca44), + P64::new(0x310c50872a7dd5e3, 0x000ac26d5c2b8ad2), + P64::new(0x447ab1281276697d, 0x000abde997dabd3d), + P64::new(0xc2f122216b2a6c21, 0x000ab883aa1100a0), + P64::new(0xab99c8b5ae1c3059, 0x000ab4ed637f5a0b), + P64::new(0xb78e17a2227d593b, 0x000ab074e9febf52), + P64::new(0xabf97d03f7269c5d, 0x000aaf90778c2039), + P64::new(0x867aefc9fdbfe7ff, 0x000aab1c7684f034), + P64::new(0xf7f7ad182e47d5b7, 0x000aa78f20ebbb3e), + P64::new(0x50dff95a9847721b, 0x000aa23f8dafd4cc), + P64::new(0xe4cb8a0e83cb6a35, 0x000a9dd69cad5934), + P64::new(0x8da72ecdf9247a1d, 0x000a935004a07302), + P64::new(0xc5b04bfc87f31d87, 0x000a9270690f3d14), + P64::new(0xe2dcf622ea2b00f3, 0x000a90b1a0aa5d30), + P64::new(0xb9ce9f2e4972f46b, 0x000a8d35c9d731e9), + P64::new(0x1ed785c911bf59f9, 0x000a8a9a6a51f16c), + P64::new(0x4ddb8a4eed70e085, 0x000a88de370f596b), + P64::new(0x81e93b4df68c24fd, 0x000a856786adae36), + P64::new(0xee0d0812afcd8357, 0x000a7da4c77d3161), + P64::new(0xf62e3ba72268a891, 0x000a7959f863d4a1), + P64::new(0x3194d367c8154147, 0x000a76c85e80c195), + P64::new(0xd096ede8e30c20d5, 0x000a743806dc44c4), + P64::new(0xd68624d27b87a77f, 0x000a735d866dfa0a), + P64::new(0xb728fcdc11c8204d, 0x000a70cedb02531e), + P64::new(0x9d6b6038077e066f, 0x000a6c8e842c770f), + P64::new(0xaa732d7a4a360d93, 0x000a67791215dd74), + P64::new(0x36af98a423972db5, 0x000a66a0a51d363d), + P64::new(0xc31d00da12940f17, 0x000a626893011861), + P64::new(0xed85352107410b25, 0x000a5fe22c55c089), + P64::new(0x829c85ee6db8567b, 0x000a5d5cffb77275), + P64::new(0xef60258952cc6d89, 0x000a5ad90c4186e5), + P64::new(0xcf28c2e0da787741, 0x000a578057e7c2eb), + P64::new(0x57567d8494af28f7, 0x000a54ff3bb10e91), + P64::new(0x2c7c98518f174031, 0x000a50d5683edc94), + P64::new(0xb28b363a36825ae7, 0x000a4e57854b3df4), + P64::new(0xed1ffeb64f9ae769, 0x000a4d8328c4b800), + P64::new(0xcbbb0115e9b9a31f, 0x000a4b06e01d97b3), + P64::new(0x8d3c5fecb7f9e4ed, 0x000a488bca2c4449), + P64::new(0x816271698195cfc3, 0x000a4611e6132ed5), + P64::new(0x9ac939d1c2b1d35d, 0x000a41f40f39e646), + P64::new(0xdd9fb7017b0ec455, 0x000a3eab5c3e44e9), + P64::new(0xc94cab1e57276e3d, 0x000a34ddd50561e0), + P64::new(0x8b8806b117c79913, 0x000a326d60e94186), + P64::new(0xa9e63292a3269fd1, 0x000a2985a81ce614), + P64::new(0x76da5710f1e989fb, 0x000a28b72e26f82e), + P64::new(0xdded6688d83a918d, 0x000a217aa3479693), + P64::new(0x4e446b6a305428f9, 0x000a1fe05c62df4b), + P64::new(0x4ddaca7a3696cfb1, 0x000a1cad538aebf9), + P64::new(0x7eadc4eb87f26ed3, 0x000a18b05f490083), + P64::new(0x76c13a0ff04c00c9, 0x000a0ccc4c28fc31), + P64::new(0xcbf800504d2a2681, 0x000a09a544d01ffe), + P64::new(0x0731dada6c4fec9b, 0x000a0294aa53e9a2), + P64::new(0xbcb52a664e63f627, 0x000a01041a6aaed5), + P64::new(0xf1f9abda071c2aa9, 0x000a003c01680870), + P64::new(0xf262ffa620ffe20b, 0x0009fc5558a971c8), + P64::new(0x93774a3d57199a99, 0x0009f9ff9c3c03e5), + P64::new(0xfb3541cd467a1903, 0x0009f9389b864ab9), + P64::new(0x6828cab6b4fe8f51, 0x0009f6e4534bdca8), + P64::new(0x12ac03e3d624cc9d, 0x0009f557687235c2), + P64::new(0x6363bd1e9bb7d7f7, 0x0009ee633c0391ab), + P64::new(0x334cfd676a484d2f, 0x0009eb4f28e0bb39), + P64::new(0xd511acd86f143a53, 0x0009e6b49e92e4bb), + P64::new(0x73fc2490e0062be5, 0x0009dfd4ccbd0045), + P64::new(0x10780dda36b78b55, 0x0009d9c0828536c1), + P64::new(0xabf601274064e0ab, 0x0009d77ad449f777), + P64::new(0x3ef3e4ca27e4a2cd, 0x0009d6b92b28ee48), + P64::new(0x9216a26e690a16f1, 0x0009d231a476ed51), + P64::new(0xbae4849e6034bda7, 0x0009cfef711bf120), + P64::new(0xf943a0520e01e9e1, 0x0009cc2e1448b765), + P64::new(0x7c89958f48f6658b, 0x0009cb6e26cbc64d), + P64::new(0xe67128750e0545a5, 0x0009c7b03b4a9c67), + P64::new(0xc6c9e1d414516ccf, 0x0009c6f0fd980ab1), + P64::new(0x805307f996e9e81d, 0x0009c4b3f3a30c3f), + P64::new(0x3eddd2cff46ad5bf, 0x0009c0fb29436687), + P64::new(0x35582c1aeb5aae85, 0x0009bbca025b7aec), + P64::new(0x4973c88573ef6eb1, 0x0009ba4f4421e52c), + P64::new(0x3063f627c1e715d9, 0x0009b1783809ff03), + P64::new(0x711ad679a8dcc243, 0x0009b0bc5b4d2eac), + P64::new(0x51c224a17a3db4b3, 0x0009aae172fd8b9c), + P64::new(0x612325ca50ddaed5, 0x0009aa26954607ed), + P64::new(0x9929a7b6b7958b37, 0x0009a681e758a022), + P64::new(0xa78d222e5a857bb9, 0x0009a5c7b284942e), + P64::new(0x3ad0ffe3198d139b, 0x0009a2264ecc5558), + P64::new(0x08b4659ac547ed17, 0x00099aebb39be56f), + P64::new(0x1752e8904aff1003, 0x0009997ae1a9faac), + P64::new(0x60745c37ee4e5925, 0x000998c2a22b6900), + P64::new(0x29e2da1f6557ee51, 0x000997527603f8a8), + P64::new(0x80d78c24ac49cb89, 0x00099473685e4d50), + P64::new(0xc56c3b495c8d1f79, 0x00098eba72512a13), + P64::new(0xcf5bdf9f5088ac2f, 0x00098c96d8dee9e1), + P64::new(0x8a44800e4fae4e7d, 0x00098a743453554e), + P64::new(0xdd76384277e578e7, 0x000989be33c9e6bd), + P64::new(0x20b1562d2703facb, 0x0009857c692e9a59), + P64::new(0xef56caf96e9d8e3b, 0x00097fd540c05c9e), + P64::new(0xf54061416aede033, 0x00097d04302ed944), + P64::new(0xe0bc78c21a26e4ff, 0x00097b9c48289935), + P64::new(0x0524f92731a179cd, 0x0009798133ece717), + P64::new(0x5d3b4ad7deafec8b, 0x00096f07c683689e), + P64::new(0x508828f744da88ad, 0x00096e55d6393fc5), + P64::new(0x6e82014031710bcf, 0x00096addad861696), + P64::new(0xadf3b77a22595dd1, 0x00096a2c5a2cf0cf), + P64::new(0x0d8f0c03f7ea8a87, 0x00096818fc825eba), + P64::new(0x2c49e3483c3a05f3, 0x000966b74027f48a), + P64::new(0xccecbc98c91274c1, 0x000964a56850b8ed), + P64::new(0x273a08941bb71e77, 0x000962947990eb36), + P64::new(0xdead5a1e3f341baf, 0x00095fd4a4c885e0), + P64::new(0x83eee092593309fd, 0x00095dc5d3954fde), + P64::new(0x4af5f1bd3ae87ce9, 0x00095c671ddfe516), + P64::new(0x4ca85ad2301c9e6d, 0x0009584d6340ddf1), + P64::new(0x1b19592cd31a3943, 0x00095641de84afcc), + P64::new(0x3e7aa05e6dcd81bb, 0x000953893c386521), + P64::new(0x86336cecb02ba47f, 0x00094f7740d87794), + P64::new(0xa96b30d0c8a44b2b, 0x00094e1cb70c9ce0), + P64::new(0xb7c63fa0cfca0571, 0x00094962ecbcc7ce), + P64::new(0x8eaf59b405a642b5, 0x00094559c69059cf), + P64::new(0xdf29e9cbb536dc17, 0x000941ff7e640716), + P64::new(0xed14132c82c1d43f, 0x000939fd7a24b099), + P64::new(0xaf68778e34caab0d, 0x000937ff22c014bd), + P64::new(0xa4f04a3368941d31, 0x000934050872c09e), + P64::new(0xe9960969357c07e7, 0x00093209446d56f6), + P64::new(0xeb47b62b7360b469, 0x0009316033b5bd22), + P64::new(0x64c653d779ae730f, 0x00092a22b9a79374), + P64::new(0x479702d3319915c7, 0x000927838edba206), + P64::new(0xef3c3eebc6803239, 0x000921a2e7112833), + P64::new(0x93807b1a2e3c0e1b, 0x00091e623d5660d0), + P64::new(0x8167e33e3f478029, 0x00091c6fc0cab8b6), + P64::new(0x60cb76e38c339397, 0x000917e7d88028eb), + P64::new(0xae34788ffe4bc283, 0x0009169d455585cd), + P64::new(0x4b6246a0c6c093a5, 0x000915f81ef2d529), + P64::new(0x872e594b12b03efb, 0x0009140938595d3a), + P64::new(0xbc0ae83ce9045b15, 0x000910d2360a450e), + P64::new(0x0ad30a3917e0968d, 0x00090e417104eabd), + P64::new(0x124ef5a4e1c7cd63, 0x00090c55d0fdea28), + P64::new(0x5b98fe0e9fe17aaf, 0x00090b0e84c04f20), + P64::new(0x414306cfe45400fd, 0x000909243fac6b70), + P64::new(0xa06d1b4fd391e8bb, 0x0008ff9d0440d137), + P64::new(0x11939803a60c2381, 0x0008fb3192789d73), + P64::new(0x668c11cc37ea6b23, 0x0008f80c0d5031e3), + P64::new(0x83f9b2089dc10645, 0x0008f76b3664f164), + P64::new(0x65dc8ae47af277a9, 0x0008f3a80550abc3), + P64::new(0x6e2368b9c685770b, 0x0008f087c50e00c4), + P64::new(0x3ea137aeba5a6b2d, 0x0008efe7fb408cc2), + P64::new(0x735f57adca48f19d, 0x0008eaecce5c4fd7), + P64::new(0x69a8de0ba1b18107, 0x0008ea4dccaaec0b), + P64::new(0x8fb84bdf5822bd79, 0x0008e4ba9fbc2ff0), + P64::new(0xb8fab3b748562721, 0x0008dd5688a3b7d6), + P64::new(0xa6c658ea10a65c3b, 0x0008d7d3821fd94f), + P64::new(0xe56381f33ab5e549, 0x0008d5feb03c31d7), + P64::new(0xe3c224da14988139, 0x0008d12033cc9d30), + P64::new(0x438c253e6d99f513, 0x0008cbac4dec6a82), + P64::new(0xc1b99f8841a3a6e1, 0x0008c9dc80ab604b), + P64::new(0x63fa18c79c54fa8b, 0x0008c942115dcc96), + P64::new(0xe7f6f609619d0d1d, 0x0008c3d7df67b539), + P64::new(0x7b39ef3b70afc109, 0x0008c2a4bc35cb3b), + P64::new(0x73922c61ca7452bf, 0x0008c0d8a4f1f264), + P64::new(0x28d96828332372c1, 0x0008c03f71cbf906), + P64::new(0x6b6e92968c4e8463, 0x0008bd42abd9a107), + P64::new(0x571861f084962edb, 0x0008bae051d7f6ff), + P64::new(0xd935c64f140f1ef5, 0x0008b7e735068135), + P64::new(0x96459f8fd72a4c4b, 0x0008b61f82c5fb08), + P64::new(0x410ba9a2a18242d9, 0x0008b4588a74a05a), + P64::new(0xcf90979f89870391, 0x0008b1fb0a7ed403), + P64::new(0x10f94ff26bc00add, 0x0008b0ccc5d8f5c8), + P64::new(0xa6619fbb9da139b3, 0x0008af07f8ac5146), + P64::new(0x765a23334efb03d5, 0x0008ae71328ffd49), + P64::new(0x6f2f613b5e631837, 0x0008ab8086624822), + P64::new(0x666b99bfbcd368b9, 0x0008aaea3ab5ae89), + P64::new(0x922b78eb01ed45bd, 0x0008a7661f7020fe), + P64::new(0x7079a199c31de6a9, 0x0008a63ab88aa8dd), + P64::new(0xa181abcda167be5f, 0x0008a47a35d020f3), + P64::new(0x2f6dbbcab3a9822d, 0x0008a2ba68a3cebf), + P64::new(0xc5a83ff0e43eba17, 0x0008a2254c852497), + P64::new(0x28c68613dda7d97b, 0x00089ea849898bb3), + P64::new(0x5cf33ed49efa5007, 0x00089d7f3e285109), + P64::new(0x9125fdead661590d, 0x000899720af36739), + P64::new(0xaee67f478c7325e7, 0x00089442160d11dc), + P64::new(0x735b1274a0e89653, 0x0008931bd5875a22), + P64::new(0x733b56eae1a4e621, 0x000891630877aedf), + P64::new(0x1944ffb316ffe65d, 0x00088baaad83e38f), + P64::new(0xf26bc3cfd2a01449, 0x00088a86b9090aa4), + P64::new(0xb5827ba68b83e201, 0x0008883fb99bf244), + P64::new(0xac139507e48eefb7, 0x0008868b45e727ee), + P64::new(0xeb7676b25834fda3, 0x00088568aef30d47), + P64::new(0xad898f4763da5c1b, 0x0008832468f0bcdd), + P64::new(0xea906f224398f9a7, 0x00088202b9a4df76), + P64::new(0xa8aff3caca28cdad, 0x00087e0f31872e9b), + P64::new(0x46c53aa36b19b083, 0x00087c5ecd731f42), + P64::new(0x9ada32b09603e8cf, 0x00087b3eea3bb388), + P64::new(0xd31f842ef5d8e915, 0x00087751a6c67d78), + P64::new(0x6124af44730a33f9, 0x000873f6e2f9d34a), + P64::new(0x828ec4c2b6e64a85, 0x000872d938dcfc01), + P64::new(0x3d6f49df999638af, 0x0008724a80151dba), + P64::new(0x7641460a0ea89b65, 0x000869f677f6cc1a), + P64::new(0x97703f98fb7fe291, 0x000868db701df58d), + P64::new(0xd343c209e3e6b7b9, 0x0008623f563a7d6d), + P64::new(0x4e5fc01f6a41406f, 0x00086099ef0c8886), + P64::new(0xb78a05b08aa4bcbd, 0x00085ef52d38fe87), + P64::new(0x3434a14919d34561, 0x00085bad981c7847), + P64::new(0xccead7dee120f525, 0x0008586893de7cfc), + P64::new(0xe1375a2bccd87673, 0x0008549b491e9efe), + P64::new(0xf727d51420a57141, 0x000852fb3859bea4), + P64::new(0x2c3b68cfbcebb00d, 0x000851e631fc08f8), + P64::new(0xda91e2f3e17542f7, 0x0008515bc9cde5f1), + P64::new(0xb55f6100ae95d6e3, 0x000850472f6185b3), + P64::new(0x6a0c608e0bbaa975, 0x00084b6defbc166b), + P64::new(0xac5f2fc151c016cb, 0x000849d17159854b), + P64::new(0xb1e5af8146e4d00f, 0x0008469a54a20645), + P64::new(0x6e283d3b112602c7, 0x00084476f9401ade), + P64::new(0xf9a48bcb76c96e55, 0x000842dd2e2dc25d), + P64::new(0xa776780ca4c0e101, 0x000841cc543f58cb), + P64::new(0x8d40a2d47d99c7c5, 0x00083e9b6c3df688), + P64::new(0x4ed9d8a7aedcefef, 0x00083e1382f22ff9), + P64::new(0x55c5cf9586072313, 0x00083ae57a327933), + P64::new(0x62c640e386ef1f09, 0x000832fd15e00939), + P64::new(0xdb876e7feb8b02f9, 0x00082ecb9c6669ac), + P64::new(0x5b85ac1558bdf263, 0x00082e45ba6652c4), + P64::new(0xb2b13930c2a889b1, 0x00082cb47b00abaa), + P64::new(0xdf53c897124f8c57, 0x000826fa5d0ce5aa), + P64::new(0x68a69390fdce78dd, 0x000823598cfc6865), + P64::new(0x5a1e8f0261e6e7b3, 0x000821cc79da73f1), + P64::new(0xcce38a9ccaab014d, 0x00081f37ff3d12c0), + P64::new(0xb0cd4811fe6a8171, 0x00081c21947b0acd), + P64::new(0x911c24573e445027, 0x00081a97404af5f7), + P64::new(0x9e86401e61cac4a9, 0x00081a13f02d110e), + P64::new(0xfd2731405f265eb5, 0x0008190d81c9877b), + P64::new(0x3f4c00205c05b02d, 0x000817016c0b3ffd), + P64::new(0xe92e3d0a829a974f, 0x00081473c50ac33e), + P64::new(0xdec216e5aa47169d, 0x000812ec59f2d11a), + P64::new(0xa0397bf3448bcd73, 0x0008116582e237c8), + P64::new(0x9ecf538d7efa905b, 0x00080b4fe85ec545), + P64::new(0xb1037b5f84886421, 0x000807c7894d029a), ]; //////////////////// Tables for Miller-rabin bases of 32/64-bit integers using Bradley's hashing //////////////////// diff --git a/src/traits.rs b/src/traits.rs index 2ae6e18..6f0f4d4 100644 --- a/src/traits.rs +++ b/src/traits.rs @@ -110,7 +110,7 @@ impl Default for PrimalityTestConfig { } impl PrimalityTestConfig { - /// Create a configuration with the known stongest deterministic primality test + /// Create a configuration with the **stongest deterministic** primality test available pub fn strict() -> Self { Self::bpsw() // TODO: change to 2-base SPRP + VPRP } @@ -204,11 +204,6 @@ pub trait ExactRoots: Roots + Pow + Clone { } } -// TODO: implement quick div_exact (which might be useful in various functions) -// REF: GMP `mpz_divexact` -// FLINT `fmpz_divexact` -// factor.c `divexact_21` - // TODO: implement quick is_x_power (specifically is_235_power) // This could be used during factorization to filter out perfect powers // REF: PARI/GP `Z_ispowerall`, `is_357_power`