diff --git a/Cargo.lock b/Cargo.lock index 830a1a5c43..026e46afe4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3061,6 +3061,7 @@ dependencies = [ "e3-sortition", "e3-trbfv", "e3-utils", + "e3-zk-helpers", "serde", "tracing", ] @@ -3311,6 +3312,7 @@ version = "0.1.15" dependencies = [ "actix", "alloy", + "alloy-dyn-abi", "alloy-primitives", "anyhow", "async-trait", diff --git a/circuits/lib/src/configs/default/mod.nr b/circuits/lib/src/configs/default/mod.nr index 784c388279..f2b4b39294 100644 --- a/circuits/lib/src/configs/default/mod.nr +++ b/circuits/lib/src/configs/default/mod.nr @@ -13,4 +13,4 @@ pub use super::insecure::threshold; /// Max number of non-zero coefficients in the message polynomial. /// This is a conservative estimate that should be okay for most use cases. -pub global MAX_MSG_NON_ZERO_COEFFS: u32 = 80; +pub global MAX_MSG_NON_ZERO_COEFFS: u32 = 100; diff --git a/circuits/lib/src/configs/insecure/threshold.nr b/circuits/lib/src/configs/insecure/threshold.nr index 91bc812cdd..0ee509ae5a 100644 --- a/circuits/lib/src/configs/insecure/threshold.nr +++ b/circuits/lib/src/configs/insecure/threshold.nr @@ -23,206 +23,206 @@ pub global Q_INVERSE_MOD_T: Field = 57; pub global CRP: [Polynomial; L] = [ Polynomial::new([ - 61461185977, - 47035965113, - 56969982871, + 21888242871839275222246405745257275088548364400416034343698204186568550278585, + 21888242871839275222246405745257275088548364400416034343698204186554125057721, + 21888242871839275222246405745257275088548364400416034343698204186564059075479, 12001391859, - 49870533135, + 21888242871839275222246405745257275088548364400416034343698204186556959625743, 15455314297, - 63751299493, - 56324052407, - 65631346269, - 36530468952, - 62843140864, + 21888242871839275222246405745257275088548364400416034343698204186570840392101, + 21888242871839275222246405745257275088548364400416034343698204186563413145015, + 21888242871839275222246405745257275088548364400416034343698204186572720438877, + 21888242871839275222246405745257275088548364400416034343698204186543619561560, + 21888242871839275222246405745257275088548364400416034343698204186569932233472, 7525518489, - 35464128985, - 55000494110, - 37037493931, - 44077857155, + 21888242871839275222246405745257275088548364400416034343698204186542553221593, + 21888242871839275222246405745257275088548364400416034343698204186562089586718, + 21888242871839275222246405745257275088548364400416034343698204186544126586539, + 21888242871839275222246405745257275088548364400416034343698204186551166949763, 34315933038, - 57135291820, - 49498695681, - 34897867020, - 56996368898, - 55048287916, - 59640559842, - 66097301562, + 21888242871839275222246405745257275088548364400416034343698204186564224384428, + 21888242871839275222246405745257275088548364400416034343698204186556587788289, + 21888242871839275222246405745257275088548364400416034343698204186541986959628, + 21888242871839275222246405745257275088548364400416034343698204186564085461506, + 21888242871839275222246405745257275088548364400416034343698204186562137380524, + 21888242871839275222246405745257275088548364400416034343698204186566729652450, + 21888242871839275222246405745257275088548364400416034343698204186573186394170, 16236724763, 24541564356, - 34907839294, - 67739626095, - 54994068261, + 21888242871839275222246405745257275088548364400416034343698204186541996931902, + 21888242871839275222246405745257275088548364400416034343698204186574828718703, + 21888242871839275222246405745257275088548364400416034343698204186562083160869, 32278208326, - 53432743122, - 56532591135, + 21888242871839275222246405745257275088548364400416034343698204186560521835730, + 21888242871839275222246405745257275088548364400416034343698204186563621683743, 23149190424, - 57712379738, + 21888242871839275222246405745257275088548364400416034343698204186564801472346, 23417171157, - 54048502723, - 37233703243, + 21888242871839275222246405745257275088548364400416034343698204186561137595331, + 21888242871839275222246405745257275088548364400416034343698204186544322795851, 25182775752, 23820725830, - 46188249890, - 66396768204, + 21888242871839275222246405745257275088548364400416034343698204186553277342498, + 21888242871839275222246405745257275088548364400416034343698204186573485860812, 899445957, 18897924138, 17355713538, 25399576475, - 59409053468, + 21888242871839275222246405745257275088548364400416034343698204186566498146076, 31550970203, - 56380757062, + 21888242871839275222246405745257275088548364400416034343698204186563469849670, 9693574613, 14332025222, 13952036697, 16494757218, - 60987874751, - 60239388666, - 62236116743, + 21888242871839275222246405745257275088548364400416034343698204186568076967359, + 21888242871839275222246405745257275088548364400416034343698204186567328481274, + 21888242871839275222246405745257275088548364400416034343698204186569325209351, 26363916064, - 36621735283, - 54437776106, + 21888242871839275222246405745257275088548364400416034343698204186543710827891, + 21888242871839275222246405745257275088548364400416034343698204186561526868714, 8161054742, - 35431584972, - 56871852015, - 39028430584, + 21888242871839275222246405745257275088548364400416034343698204186542520677580, + 21888242871839275222246405745257275088548364400416034343698204186563960944623, + 21888242871839275222246405745257275088548364400416034343698204186546117523192, 31992852619, 12682192094, - 42701635710, + 21888242871839275222246405745257275088548364400416034343698204186549790728318, 5141156057, 10849374639, - 42291144065, + 21888242871839275222246405745257275088548364400416034343698204186549380236673, 23147821452, - 58011241247, + 21888242871839275222246405745257275088548364400416034343698204186565100333855, 20235893889, 22339689228, - 61022890038, - 42417724429, + 21888242871839275222246405745257275088548364400416034343698204186568111982646, + 21888242871839275222246405745257275088548364400416034343698204186549506817037, 4410794663, - 34491920851, + 21888242871839275222246405745257275088548364400416034343698204186541581013459, 19482653489, - 40259529624, + 21888242871839275222246405745257275088548364400416034343698204186547348622232, 23590475535, 1591229202, 12639945631, - 47086256272, - 35240841263, - 60628595328, - 45320561566, - 37204932759, - 41184325862, + 21888242871839275222246405745257275088548364400416034343698204186554175348880, + 21888242871839275222246405745257275088548364400416034343698204186542329933871, + 21888242871839275222246405745257275088548364400416034343698204186567717687936, + 21888242871839275222246405745257275088548364400416034343698204186552409654174, + 21888242871839275222246405745257275088548364400416034343698204186544294025367, + 21888242871839275222246405745257275088548364400416034343698204186548273418470, 7756171764, 2211849734, - 44492020707, - 54027652395, - 60426144562, + 21888242871839275222246405745257275088548364400416034343698204186551581113315, + 21888242871839275222246405745257275088548364400416034343698204186561116745003, + 21888242871839275222246405745257275088548364400416034343698204186567515237170, 904646789, - 60779544839, - 59657215702, - 52969414652, - 66953660232, - 47732142528, + 21888242871839275222246405745257275088548364400416034343698204186567868637447, + 21888242871839275222246405745257275088548364400416034343698204186566746308310, + 21888242871839275222246405745257275088548364400416034343698204186560058507260, + 21888242871839275222246405745257275088548364400416034343698204186574042752840, + 21888242871839275222246405745257275088548364400416034343698204186554821235136, 6623586518, - 67286846947, - 55287963290, - 47884135019, + 21888242871839275222246405745257275088548364400416034343698204186574375939555, + 21888242871839275222246405745257275088548364400416034343698204186562377055898, + 21888242871839275222246405745257275088548364400416034343698204186554973227627, 17930386352, - 66350538241, + 21888242871839275222246405745257275088548364400416034343698204186573439630849, 33466903065, 15722623915, 2239123248, 16026658743, 31321678859, - 40284026941, - 53110959464, + 21888242871839275222246405745257275088548364400416034343698204186547373119549, + 21888242871839275222246405745257275088548364400416034343698204186560200052072, 24607776988, 13760377257, - 65202477790, + 21888242871839275222246405745257275088548364400416034343698204186572291570398, 1668010527, 7559004167, - 38517625934, + 21888242871839275222246405745257275088548364400416034343698204186545606718542, 20774921651, - 56256624598, - 66234114137, - 54856447142, + 21888242871839275222246405745257275088548364400416034343698204186563345717206, + 21888242871839275222246405745257275088548364400416034343698204186573323206745, + 21888242871839275222246405745257275088548364400416034343698204186561945539750, 12632570433, - 42899978482, - 59478421066, - 53634722025, + 21888242871839275222246405745257275088548364400416034343698204186549989071090, + 21888242871839275222246405745257275088548364400416034343698204186566567513674, + 21888242871839275222246405745257275088548364400416034343698204186560723814633, 13279073155, - 34648961650, - 68699984996, + 21888242871839275222246405745257275088548364400416034343698204186541738054258, + 21888242871839275222246405745257275088548364400416034343698204186575789077604, 29903078001, 1426127125, - 55439493440, - 62842955589, - 53540777878, - 51644651267, - 52210071568, + 21888242871839275222246405745257275088548364400416034343698204186562528586048, + 21888242871839275222246405745257275088548364400416034343698204186569932048197, + 21888242871839275222246405745257275088548364400416034343698204186560629870486, + 21888242871839275222246405745257275088548364400416034343698204186558733743875, + 21888242871839275222246405745257275088548364400416034343698204186559299164176, 4423341557, - 56520193181, - 49594323377, + 21888242871839275222246405745257275088548364400416034343698204186563609285789, + 21888242871839275222246405745257275088548364400416034343698204186556683415985, 5531856612, 27779852013, 28200493416, 3747939028, - 59549082847, + 21888242871839275222246405745257275088548364400416034343698204186566638175455, 2091724990, - 62135139680, + 21888242871839275222246405745257275088548364400416034343698204186569224232288, 17458044213, 23617737377, - 53098514571, - 64342901068, - 50023902604, - 48529401697, + 21888242871839275222246405745257275088548364400416034343698204186560187607179, + 21888242871839275222246405745257275088548364400416034343698204186571431993676, + 21888242871839275222246405745257275088548364400416034343698204186557112995212, + 21888242871839275222246405745257275088548364400416034343698204186555618494305, 3922902983, - 50735637408, - 42515647299, + 21888242871839275222246405745257275088548364400416034343698204186557824730016, + 21888242871839275222246405745257275088548364400416034343698204186549604739907, 21614690698, 8489444890, 5312080839, 21226150498, - 38231922342, + 21888242871839275222246405745257275088548364400416034343698204186545321014950, 16608574810, 12390966403, 25501200679, - 41250990215, - 48706833987, + 21888242871839275222246405745257275088548364400416034343698204186548340082823, + 21888242871839275222246405745257275088548364400416034343698204186555795926595, 32389911575, 11076037475, 6723206429, 33346671186, - 50422490243, + 21888242871839275222246405745257275088548364400416034343698204186557511582851, 12754408606, 10947312482, 1233873730, - 62743459539, - 47353095638, + 21888242871839275222246405745257275088548364400416034343698204186569832552147, + 21888242871839275222246405745257275088548364400416034343698204186554442188246, 27811003740, 17039517971, 23346567989, - 57355650693, + 21888242871839275222246405745257275088548364400416034343698204186564444743301, 16376874004, - 52256702497, - 47096898296, - 34391731975, + 21888242871839275222246405745257275088548364400416034343698204186559345795105, + 21888242871839275222246405745257275088548364400416034343698204186554185990904, + 21888242871839275222246405745257275088548364400416034343698204186541480824583, 15179098755, - 60372744463, - 34891180857, + 21888242871839275222246405745257275088548364400416034343698204186567461837071, + 21888242871839275222246405745257275088548364400416034343698204186541980273465, 33253269960, - 45540918658, - 36238830557, - 65498298147, + 21888242871839275222246405745257275088548364400416034343698204186552630011266, + 21888242871839275222246405745257275088548364400416034343698204186543327923165, + 21888242871839275222246405745257275088548364400416034343698204186572587390755, 13313191190, - 62085490915, + 21888242871839275222246405745257275088548364400416034343698204186569174583523, 9916006595, 28250819993, 30481552385, - 63123383219, + 21888242871839275222246405745257275088548364400416034343698204186570212475827, 17016507368, - 48235679948, + 21888242871839275222246405745257275088548364400416034343698204186555324772556, 25645070920, - 36902784931, - 44301742204, + 21888242871839275222246405745257275088548364400416034343698204186543991877539, + 21888242871839275222246405745257275088548364400416034343698204186551390834812, 12462618176, 21267777046, 23265612065, @@ -231,34 +231,34 @@ pub global CRP: [Polynomial; L] = [ 17634668413, 2531319374, 5903585438, - 60649119477, - 51308167018, + 21888242871839275222246405745257275088548364400416034343698204186567738212085, + 21888242871839275222246405745257275088548364400416034343698204186558397259626, 24046303157, - 36244968580, - 59054976251, + 21888242871839275222246405745257275088548364400416034343698204186543334061188, + 21888242871839275222246405745257275088548364400416034343698204186566144068859, 19389709996, 12944829953, 4929471791, 12196817728, 9163132937, - 58281027802, - 47138611289, - 57651027774, + 21888242871839275222246405745257275088548364400416034343698204186565370120410, + 21888242871839275222246405745257275088548364400416034343698204186554227703897, + 21888242871839275222246405745257275088548364400416034343698204186564740120382, 22422326096, 13445595393, - 49644441825, + 21888242871839275222246405745257275088548364400416034343698204186556733534433, 32874024059, 13086171772, - 42123227532, + 21888242871839275222246405745257275088548364400416034343698204186549212320140, 4890690925, - 46196393626, - 34873376810, + 21888242871839275222246405745257275088548364400416034343698204186553285486234, + 21888242871839275222246405745257275088548364400416034343698204186541962469418, 16864097485, - 47562748615, - 42624153747, - 47111364539, + 21888242871839275222246405745257275088548364400416034343698204186554651841223, + 21888242871839275222246405745257275088548364400416034343698204186549713246355, + 21888242871839275222246405745257275088548364400416034343698204186554200457147, 21724777122, - 49328313718, + 21888242871839275222246405745257275088548364400416034343698204186556417406326, 10891309487, 19746343895, 5580395260, @@ -269,517 +269,517 @@ pub global CRP: [Polynomial; L] = [ 33805794863, 13165607604, 13035837688, - 51405194094, - 64310470902, + 21888242871839275222246405745257275088548364400416034343698204186558494286702, + 21888242871839275222246405745257275088548364400416034343698204186571399563510, 1094552272, 22164110333, - 34610690960, - 64298135402, + 21888242871839275222246405745257275088548364400416034343698204186541699783568, + 21888242871839275222246405745257275088548364400416034343698204186571387228010, 27886492844, - 53742727958, - 39260973809, + 21888242871839275222246405745257275088548364400416034343698204186560831820566, + 21888242871839275222246405745257275088548364400416034343698204186546350066417, 4317295440, 31795416027, 7863814854, - 64019985785, - 45394506123, - 57274466726, - 47384702023, - 45350408282, + 21888242871839275222246405745257275088548364400416034343698204186571109078393, + 21888242871839275222246405745257275088548364400416034343698204186552483598731, + 21888242871839275222246405745257275088548364400416034343698204186564363559334, + 21888242871839275222246405745257275088548364400416034343698204186554473794631, + 21888242871839275222246405745257275088548364400416034343698204186552439500890, 3241516133, - 50776620746, - 53792834140, + 21888242871839275222246405745257275088548364400416034343698204186557865713354, + 21888242871839275222246405745257275088548364400416034343698204186560881926748, 20668054456, 28783343358, 1418833394, - 42623623861, + 21888242871839275222246405745257275088548364400416034343698204186549712716469, 16751325758, 27309288838, 23422095054, - 62305839529, + 21888242871839275222246405745257275088548364400416034343698204186569394932137, 12882297831, 21490196950, 13876977646, - 67488309083, - 52428357999, - 63478541045, + 21888242871839275222246405745257275088548364400416034343698204186574577401691, + 21888242871839275222246405745257275088548364400416034343698204186559517450607, + 21888242871839275222246405745257275088548364400416034343698204186570567633653, 1099200606, 9908352690, - 63992323552, - 42343036357, + 21888242871839275222246405745257275088548364400416034343698204186571081416160, + 21888242871839275222246405745257275088548364400416034343698204186549432128965, 4178705147, 17706995945, - 47956528884, - 68528641333, + 21888242871839275222246405745257275088548364400416034343698204186555045621492, + 21888242871839275222246405745257275088548364400416034343698204186575617733941, 16512122665, - 65709592560, + 21888242871839275222246405745257275088548364400416034343698204186572798685168, 11315351222, 6665704173, - 57570574417, - 66617946741, + 21888242871839275222246405745257275088548364400416034343698204186564659667025, + 21888242871839275222246405745257275088548364400416034343698204186573707039349, 32203806970, - 45758894151, + 21888242871839275222246405745257275088548364400416034343698204186552847986759, 4122367988, 8352927278, - 49634284706, - 40257008250, - 67364378715, + 21888242871839275222246405745257275088548364400416034343698204186556723377314, + 21888242871839275222246405745257275088548364400416034343698204186547346100858, + 21888242871839275222246405745257275088548364400416034343698204186574453471323, 15922094072, - 62543928894, + 21888242871839275222246405745257275088548364400416034343698204186569633021502, 9174188114, 16079231471, - 42634625835, + 21888242871839275222246405745257275088548364400416034343698204186549723718443, 14695910169, 33842659952, - 52712350568, + 21888242871839275222246405745257275088548364400416034343698204186559801443176, 26838456171, 20318037835, 7907834533, - 48232773142, - 64204097505, + 21888242871839275222246405745257275088548364400416034343698204186555321865750, + 21888242871839275222246405745257275088548364400416034343698204186571293190113, 3712285275, 17143162723, 15064763896, - 44312331202, + 21888242871839275222246405745257275088548364400416034343698204186551401423810, 31202336488, 27340408061, - 40817639078, + 21888242871839275222246405745257275088548364400416034343698204186547906731686, 7561815814, 8665575711, - 61347527627, - 37842410759, + 21888242871839275222246405745257275088548364400416034343698204186568436620235, + 21888242871839275222246405745257275088548364400416034343698204186544931503367, 18653055478, - 41531321440, - 52838741572, + 21888242871839275222246405745257275088548364400416034343698204186548620414048, + 21888242871839275222246405745257275088548364400416034343698204186559927834180, 28154483952, - 68324854951, + 21888242871839275222246405745257275088548364400416034343698204186575413947559, 275643495, 24511911779, - 35067729248, + 21888242871839275222246405745257275088548364400416034343698204186542156821856, 27924842193, 2355462421, - 42916961694, - 46416553844, - 53975195637, - 39491426063, + 21888242871839275222246405745257275088548364400416034343698204186550006054302, + 21888242871839275222246405745257275088548364400416034343698204186553505646452, + 21888242871839275222246405745257275088548364400416034343698204186561064288245, + 21888242871839275222246405745257275088548364400416034343698204186546580518671, 20690298982, - 36469346488, - 50548547976, - 68482660801, + 21888242871839275222246405745257275088548364400416034343698204186543558439096, + 21888242871839275222246405745257275088548364400416034343698204186557637640584, + 21888242871839275222246405745257275088548364400416034343698204186575571753409, 15331713894, 1036915986, - 63021832097, - 44349142754, + 21888242871839275222246405745257275088548364400416034343698204186570110924705, + 21888242871839275222246405745257275088548364400416034343698204186551438235362, 28159941701, - 49242459522, - 57222992011, - 46415764578, + 21888242871839275222246405745257275088548364400416034343698204186556331552130, + 21888242871839275222246405745257275088548364400416034343698204186564312084619, + 21888242871839275222246405745257275088548364400416034343698204186553504857186, 24408151601, - 48284606488, + 21888242871839275222246405745257275088548364400416034343698204186555373699096, 11170050093, - 42186517395, + 21888242871839275222246405745257275088548364400416034343698204186549275610003, 24084072247, 3990578276, 21680867241, 26556257130, 14064390948, 8203005863, - 61428883189, + 21888242871839275222246405745257275088548364400416034343698204186568517975797, 28194604677, 25879220271, - 59039981124, - 67395911398, + 21888242871839275222246405745257275088548364400416034343698204186566129073732, + 21888242871839275222246405745257275088548364400416034343698204186574485004006, 34304244207, - 68281887928, + 21888242871839275222246405745257275088548364400416034343698204186575370980536, 28046128685, - 43593070073, - 43187343763, + 21888242871839275222246405745257275088548364400416034343698204186550682162681, + 21888242871839275222246405745257275088548364400416034343698204186550276436371, 4784151546, - 63970421736, - 47149552798, - 43207716891, + 21888242871839275222246405745257275088548364400416034343698204186571059514344, + 21888242871839275222246405745257275088548364400416034343698204186554238645406, + 21888242871839275222246405745257275088548364400416034343698204186550296809499, 10820741919, 21437410990, - 46916717349, + 21888242871839275222246405745257275088548364400416034343698204186554005809957, 19492106654, 3464870090, 16234823474, 17830761558, 6762818732, 14953030311, - 49941473542, - 47879388560, + 21888242871839275222246405745257275088548364400416034343698204186557030566150, + 21888242871839275222246405745257275088548364400416034343698204186554968481168, 13222719462, - 61192006893, + 21888242871839275222246405745257275088548364400416034343698204186568281099501, 25830713223, - 53356422543, + 21888242871839275222246405745257275088548364400416034343698204186560445515151, 6601818331, 19192239048, 31278922620, - 58165869601, + 21888242871839275222246405745257275088548364400416034343698204186565254962209, 12316059853, 15231317843, 20189389638, 22661367514, 18334093840, - 44866733880, - 39336631212, - 44577791944, + 21888242871839275222246405745257275088548364400416034343698204186551955826488, + 21888242871839275222246405745257275088548364400416034343698204186546425723820, + 21888242871839275222246405745257275088548364400416034343698204186551666884552, 145071532, - 66115284714, + 21888242871839275222246405745257275088548364400416034343698204186573204377322, 21840311291, - 64014933646, + 21888242871839275222246405745257275088548364400416034343698204186571104026254, 19037997962, - 43427699509, + 21888242871839275222246405745257275088548364400416034343698204186550516792117, 27388543320, - 58023443443, + 21888242871839275222246405745257275088548364400416034343698204186565112536051, 27407444914, - 36390119356, + 21888242871839275222246405745257275088548364400416034343698204186543479211964, 4867196029, - 45278665549, + 21888242871839275222246405745257275088548364400416034343698204186552367758157, 32878682327, - 34907972456, - 37178138320, - 50930050922, + 21888242871839275222246405745257275088548364400416034343698204186541997065064, + 21888242871839275222246405745257275088548364400416034343698204186544267230928, + 21888242871839275222246405745257275088548364400416034343698204186558019143530, 589102718, 21700165049, 3239778031, 3672011925, 14095342260, - 53838162518, + 21888242871839275222246405745257275088548364400416034343698204186560927255126, 17078351686, 23084794792, - 61261871894, - 59397255464, + 21888242871839275222246405745257275088548364400416034343698204186568350964502, + 21888242871839275222246405745257275088548364400416034343698204186566486348072, 15349622719, 19158382248, - 67727623064, + 21888242871839275222246405745257275088548364400416034343698204186574816715672, 23924382943, - 68307567306, - 63525193410, - 58529613601, - 43637694160, + 21888242871839275222246405745257275088548364400416034343698204186575396659914, + 21888242871839275222246405745257275088548364400416034343698204186570614286018, + 21888242871839275222246405745257275088548364400416034343698204186565618706209, + 21888242871839275222246405745257275088548364400416034343698204186550726786768, 21849263478, 25957360968, 23006937573, - 58861370913, - 48142256975, - 44412189160, - 49351103967, + 21888242871839275222246405745257275088548364400416034343698204186565950463521, + 21888242871839275222246405745257275088548364400416034343698204186555231349583, + 21888242871839275222246405745257275088548364400416034343698204186551501281768, + 21888242871839275222246405745257275088548364400416034343698204186556440196575, 23593050794, 29648335762, 6252921658, - 68694672490, + 21888242871839275222246405745257275088548364400416034343698204186575783765098, 31709587945, 27812909838, 22459664729, - 63609179449, - 56737904405, + 21888242871839275222246405745257275088548364400416034343698204186570698272057, + 21888242871839275222246405745257275088548364400416034343698204186563826997013, 10856357469, 29794806410, 21762737532, - 58621311148, + 21888242871839275222246405745257275088548364400416034343698204186565710403756, 29969900941, 18453797806, - 54126384037, + 21888242871839275222246405745257275088548364400416034343698204186561215476645, 268956585, 20250029160, - 38741886250, - 43738197418, - 51959845435, + 21888242871839275222246405745257275088548364400416034343698204186545830978858, + 21888242871839275222246405745257275088548364400416034343698204186550827290026, + 21888242871839275222246405745257275088548364400416034343698204186559048938043, 26393792166, - 54125829791, + 21888242871839275222246405745257275088548364400416034343698204186561214922399, 25772351632, - 47343168114, - 60984515852, + 21888242871839275222246405745257275088548364400416034343698204186554432260722, + 21888242871839275222246405745257275088548364400416034343698204186568073608460, 28442524526, - 36179785934, + 21888242871839275222246405745257275088548364400416034343698204186543268878542, 11954111849, - 36120125100, - 66441468276, - 68471068889, - 58384945365, + 21888242871839275222246405745257275088548364400416034343698204186543209217708, + 21888242871839275222246405745257275088548364400416034343698204186573530560884, + 21888242871839275222246405745257275088548364400416034343698204186575560161497, + 21888242871839275222246405745257275088548364400416034343698204186565474037973, 31847579573, - 41895566570, + 21888242871839275222246405745257275088548364400416034343698204186548984659178, 28243485517, - 45784935184, - 66096958309, - 42362573500, - 38582685636, - 68488320279, - 51499353578, - 46622474478, + 21888242871839275222246405745257275088548364400416034343698204186552874027792, + 21888242871839275222246405745257275088548364400416034343698204186573186050917, + 21888242871839275222246405745257275088548364400416034343698204186549451666108, + 21888242871839275222246405745257275088548364400416034343698204186545671778244, + 21888242871839275222246405745257275088548364400416034343698204186575577412887, + 21888242871839275222246405745257275088548364400416034343698204186558588446186, + 21888242871839275222246405745257275088548364400416034343698204186553711567086, 3759185154, 6563544873, - 38985704890, - 67766061551, + 21888242871839275222246405745257275088548364400416034343698204186546074797498, + 21888242871839275222246405745257275088548364400416034343698204186574855154159, 28379323670, - 47373345237, + 21888242871839275222246405745257275088548364400416034343698204186554462437845, 16323608124, - 45305036770, - 46306329955, - 43399152221, + 21888242871839275222246405745257275088548364400416034343698204186552394129378, + 21888242871839275222246405745257275088548364400416034343698204186553395422563, + 21888242871839275222246405745257275088548364400416034343698204186550488244829, 2983609262, - 56281127762, - 40534737100, + 21888242871839275222246405745257275088548364400416034343698204186563370220370, + 21888242871839275222246405745257275088548364400416034343698204186547623829708, 6397937469, 33294921932, - 52500471975, + 21888242871839275222246405745257275088548364400416034343698204186559589564583, 30279783957, 9033475512, - 57269871537, - 56624078732, + 21888242871839275222246405745257275088548364400416034343698204186564358964145, + 21888242871839275222246405745257275088548364400416034343698204186563713171340, 4113434174, - 49494079766, - 64736008441, + 21888242871839275222246405745257275088548364400416034343698204186556583172374, + 21888242871839275222246405745257275088548364400416034343698204186571825101049, 31467599459, - 36461827052, - 49557748339, + 21888242871839275222246405745257275088548364400416034343698204186543550919660, + 21888242871839275222246405745257275088548364400416034343698204186556646840947, ]), Polynomial::new([ 2275528436, 19467792773, 28745794964, 15450926350, - 49612032946, - 67919068518, - 61803298746, + 21888242871839275222246405745257275088548364400416034343698204186556701297586, + 21888242871839275222246405745257275088548364400416034343698204186575008333158, + 21888242871839275222246405745257275088548364400416034343698204186568892563386, 26129658728, 12623280338, - 53531552070, - 54819814730, - 58878198832, + 21888242871839275222246405745257275088548364400416034343698204186560620816710, + 21888242871839275222246405745257275088548364400416034343698204186561909079370, + 21888242871839275222246405745257275088548364400416034343698204186565967463472, 23184398555, - 49858058597, - 44298913634, - 45592229312, - 66449240571, - 34551898073, - 34754103142, - 41626980045, - 67721769555, - 35665301733, - 58579131484, - 57461920999, - 51688013648, + 21888242871839275222246405745257275088548364400416034343698204186556947323237, + 21888242871839275222246405745257275088548364400416034343698204186551388178274, + 21888242871839275222246405745257275088548364400416034343698204186552681493952, + 21888242871839275222246405745257275088548364400416034343698204186573538505211, + 21888242871839275222246405745257275088548364400416034343698204186541641162713, + 21888242871839275222246405745257275088548364400416034343698204186541843367782, + 21888242871839275222246405745257275088548364400416034343698204186548716244685, + 21888242871839275222246405745257275088548364400416034343698204186574811034195, + 21888242871839275222246405745257275088548364400416034343698204186542754566373, + 21888242871839275222246405745257275088548364400416034343698204186565668396124, + 21888242871839275222246405745257275088548364400416034343698204186564551185639, + 21888242871839275222246405745257275088548364400416034343698204186558777278288, 26992433968, - 38344574872, - 45749894594, + 21888242871839275222246405745257275088548364400416034343698204186545433839512, + 21888242871839275222246405745257275088548364400416034343698204186552839159234, 30254234687, - 37524816497, - 47018316062, - 64002742424, - 68580417453, + 21888242871839275222246405745257275088548364400416034343698204186544614081137, + 21888242871839275222246405745257275088548364400416034343698204186554107580702, + 21888242871839275222246405745257275088548364400416034343698204186571092007064, + 21888242871839275222246405745257275088548364400416034343698204186575669682093, 19697423219, - 61710304888, - 62391891434, + 21888242871839275222246405745257275088548364400416034343698204186568799569528, + 21888242871839275222246405745257275088548364400416034343698204186569481156074, 15615187533, - 58298797026, - 64374138684, - 66555147895, - 48587765283, + 21888242871839275222246405745257275088548364400416034343698204186565388061666, + 21888242871839275222246405745257275088548364400416034343698204186571463403324, + 21888242871839275222246405745257275088548364400416034343698204186573644412535, + 21888242871839275222246405745257275088548364400416034343698204186555677029923, 2742020117, 31377328025, - 42320755884, + 21888242871839275222246405745257275088548364400416034343698204186549410020524, 29337106321, - 48838568601, - 63247838763, - 64270223283, + 21888242871839275222246405745257275088548364400416034343698204186555927833241, + 21888242871839275222246405745257275088548364400416034343698204186570337103403, + 21888242871839275222246405745257275088548364400416034343698204186571359487923, 26264665510, - 34889515729, - 65448204981, - 48833197824, + 21888242871839275222246405745257275088548364400416034343698204186541978780369, + 21888242871839275222246405745257275088548364400416034343698204186572537469621, + 21888242871839275222246405745257275088548364400416034343698204186555922462464, 1291979088, 15751543159, - 54373564464, - 47938184037, - 48941451057, - 39804044912, + 21888242871839275222246405745257275088548364400416034343698204186561462829104, + 21888242871839275222246405745257275088548364400416034343698204186555027448677, + 21888242871839275222246405745257275088548364400416034343698204186556030715697, + 21888242871839275222246405745257275088548364400416034343698204186546893309552, 27093544533, - 37783270718, + 21888242871839275222246405745257275088548364400416034343698204186544872535358, 2445802122, 4348006916, - 53479205587, - 62516364900, + 21888242871839275222246405745257275088548364400416034343698204186560568470227, + 21888242871839275222246405745257275088548364400416034343698204186569605629540, 20745040439, 32329847565, 31935143191, 17744928410, - 55289415531, + 21888242871839275222246405745257275088548364400416034343698204186562378680171, 14141755156, 3708220464, - 61023992010, - 66662314400, - 54657752505, - 35102044815, + 21888242871839275222246405745257275088548364400416034343698204186568113256650, + 21888242871839275222246405745257275088548364400416034343698204186573751579040, + 21888242871839275222246405745257275088548364400416034343698204186561747017145, + 21888242871839275222246405745257275088548364400416034343698204186542191309455, 7147600604, - 36552276464, - 43178291242, - 34449472232, + 21888242871839275222246405745257275088548364400416034343698204186543641541104, + 21888242871839275222246405745257275088548364400416034343698204186550267555882, + 21888242871839275222246405745257275088548364400416034343698204186541538736872, 7572953274, 3433975809, 26416906130, 16061375613, 13356829462, 21394771881, - 49677037648, - 52660411765, - 49431215186, - 55228993462, - 50800826395, - 48597585032, + 21888242871839275222246405745257275088548364400416034343698204186556766302288, + 21888242871839275222246405745257275088548364400416034343698204186559749676405, + 21888242871839275222246405745257275088548364400416034343698204186556520479826, + 21888242871839275222246405745257275088548364400416034343698204186562318258102, + 21888242871839275222246405745257275088548364400416034343698204186557890091035, + 21888242871839275222246405745257275088548364400416034343698204186555686849672, 17653364810, - 57359640749, - 67006767450, - 47236350019, + 21888242871839275222246405745257275088548364400416034343698204186564448905389, + 21888242871839275222246405745257275088548364400416034343698204186574096032090, + 21888242871839275222246405745257275088548364400416034343698204186554325614659, 6894101261, - 41023620080, - 65104422023, + 21888242871839275222246405745257275088548364400416034343698204186548112884720, + 21888242871839275222246405745257275088548364400416034343698204186572193686663, 1226485896, - 63174069887, - 62641753536, - 48298224863, + 21888242871839275222246405745257275088548364400416034343698204186570263334527, + 21888242871839275222246405745257275088548364400416034343698204186569731018176, + 21888242871839275222246405745257275088548364400416034343698204186555387489503, 29373620783, - 34379006661, - 41983052475, - 40479513729, + 21888242871839275222246405745257275088548364400416034343698204186541468271301, + 21888242871839275222246405745257275088548364400416034343698204186549072317115, + 21888242871839275222246405745257275088548364400416034343698204186547568778369, 19360593867, 23832634900, 22941537157, 13024079281, - 61144439789, - 49662795676, + 21888242871839275222246405745257275088548364400416034343698204186568233704429, + 21888242871839275222246405745257275088548364400416034343698204186556752060316, 27203249958, 12573477214, - 42488263792, + 21888242871839275222246405745257275088548364400416034343698204186549577528432, 4592323541, 28158451061, 29704659485, - 47496430899, - 48307247398, + 21888242871839275222246405745257275088548364400416034343698204186554585695539, + 21888242871839275222246405745257275088548364400416034343698204186555396512038, 27710162094, 9990581433, - 52737054382, - 65232343596, + 21888242871839275222246405745257275088548364400416034343698204186559826319022, + 21888242871839275222246405745257275088548364400416034343698204186572321608236, 23091959040, 11445872769, - 66322124612, - 68441902011, + 21888242871839275222246405745257275088548364400416034343698204186573411389252, + 21888242871839275222246405745257275088548364400416034343698204186575531166651, 17208059922, 4535089235, - 53295248454, - 47263305540, + 21888242871839275222246405745257275088548364400416034343698204186560384513094, + 21888242871839275222246405745257275088548364400416034343698204186554352570180, 5776509236, - 36491243542, - 39455048128, - 48123550824, + 21888242871839275222246405745257275088548364400416034343698204186543580508182, + 21888242871839275222246405745257275088548364400416034343698204186546544312768, + 21888242871839275222246405745257275088548364400416034343698204186555212815464, 17604837172, - 49117497310, + 21888242871839275222246405745257275088548364400416034343698204186556206761950, 22953641540, - 62591521204, + 21888242871839275222246405745257275088548364400416034343698204186569680785844, 6239103317, - 57551278948, + 21888242871839275222246405745257275088548364400416034343698204186564640543588, 16335654747, 8581585624, - 58463599910, - 48021866451, - 60091952099, - 45093575851, + 21888242871839275222246405745257275088548364400416034343698204186565552864550, + 21888242871839275222246405745257275088548364400416034343698204186555111131091, + 21888242871839275222246405745257275088548364400416034343698204186567181216739, + 21888242871839275222246405745257275088548364400416034343698204186552182840491, 9641923098, - 64462965005, - 46090630059, - 49347830445, + 21888242871839275222246405745257275088548364400416034343698204186571552229645, + 21888242871839275222246405745257275088548364400416034343698204186553179894699, + 21888242871839275222246405745257275088548364400416034343698204186556437095085, 29165562264, 11751724456, - 50859809155, + 21888242871839275222246405745257275088548364400416034343698204186557949073795, 22967183366, - 44966475970, + 21888242871839275222246405745257275088548364400416034343698204186552055740610, 25238968367, 30800038583, 15353972142, 4385718403, - 45384226443, + 21888242871839275222246405745257275088548364400416034343698204186552473491083, 1037701131, - 63140442254, + 21888242871839275222246405745257275088548364400416034343698204186570229706894, 27649371170, 11382127638, - 46840697583, + 21888242871839275222246405745257275088548364400416034343698204186553929962223, 17699437532, 31696891879, - 46195002032, + 21888242871839275222246405745257275088548364400416034343698204186553284266672, 26053232623, 12028293515, 9046597550, - 41503622714, - 55741723590, + 21888242871839275222246405745257275088548364400416034343698204186548592887354, + 21888242871839275222246405745257275088548364400416034343698204186562830988230, 8419883517, - 59146463417, - 64589057470, + 21888242871839275222246405745257275088548364400416034343698204186566235728057, + 21888242871839275222246405745257275088548364400416034343698204186571678322110, 9432451648, - 43346161792, - 41431623316, + 21888242871839275222246405745257275088548364400416034343698204186550435426432, + 21888242871839275222246405745257275088548364400416034343698204186548520887956, 16512429406, - 38401537523, - 47175538720, - 44746207468, + 21888242871839275222246405745257275088548364400416034343698204186545490802163, + 21888242871839275222246405745257275088548364400416034343698204186554264803360, + 21888242871839275222246405745257275088548364400416034343698204186551835472108, 13093962684, - 52583229712, + 21888242871839275222246405745257275088548364400416034343698204186559672494352, 3848492063, - 66946061899, - 62072078413, + 21888242871839275222246405745257275088548364400416034343698204186574035326539, + 21888242871839275222246405745257275088548364400416034343698204186569161343053, 3619675515, 26449746618, - 67325067882, + 21888242871839275222246405745257275088548364400416034343698204186574414332522, 26814987890, 33384626716, 1670982450, 10510708058, 23043716869, 24126821849, - 36723543009, + 21888242871839275222246405745257275088548364400416034343698204186543812807649, 7092420020, 1004735995, 25221178805, - 35368578800, + 21888242871839275222246405745257275088548364400416034343698204186542457843440, 9191161374, - 37709146662, - 40035266388, + 21888242871839275222246405745257275088548364400416034343698204186544798411302, + 21888242871839275222246405745257275088548364400416034343698204186547124531028, 16212894276, 23799213376, - 40946355658, + 21888242871839275222246405745257275088548364400416034343698204186548035620298, 6051690029, - 50811473221, - 51520087196, + 21888242871839275222246405745257275088548364400416034343698204186557900737861, + 21888242871839275222246405745257275088548364400416034343698204186558609351836, 20171150607, 1638415983, - 40089555074, - 56271548032, + 21888242871839275222246405745257275088548364400416034343698204186547178819714, + 21888242871839275222246405745257275088548364400416034343698204186563360812672, 6635330563, 14092920214, 11114217246, - 57493813753, - 60942579077, + 21888242871839275222246405745257275088548364400416034343698204186564583078393, + 21888242871839275222246405745257275088548364400416034343698204186568031843717, 27534344871, - 42626781943, - 52177833677, - 39255106792, - 61868151753, + 21888242871839275222246405745257275088548364400416034343698204186549716046583, + 21888242871839275222246405745257275088548364400416034343698204186559267098317, + 21888242871839275222246405745257275088548364400416034343698204186546344371432, + 21888242871839275222246405745257275088548364400416034343698204186568957416393, 14469523611, 27815045418, - 60727846093, - 48438100776, - 38889745557, + 21888242871839275222246405745257275088548364400416034343698204186567817110733, + 21888242871839275222246405745257275088548364400416034343698204186555527365416, + 21888242871839275222246405745257275088548364400416034343698204186545979010197, 12773432616, 26365240376, 3141553080, 21937580434, - 48469979774, - 41952411649, + 21888242871839275222246405745257275088548364400416034343698204186555559244414, + 21888242871839275222246405745257275088548364400416034343698204186549041676289, 12001465108, 33627048061, - 48685483857, + 21888242871839275222246405745257275088548364400416034343698204186555774748497, 33230844147, - 45232123560, + 21888242871839275222246405745257275088548364400416034343698204186552321388200, 8468015783, 16372895878, 21374379722, @@ -788,253 +788,253 @@ pub global CRP: [Polynomial; L] = [ 24678870760, 22310947814, 5196430270, - 49303449038, - 57978190026, - 45887182969, + 21888242871839275222246405745257275088548364400416034343698204186556392713678, + 21888242871839275222246405745257275088548364400416034343698204186565067454666, + 21888242871839275222246405745257275088548364400416034343698204186552976447609, 16025589779, - 47142971789, + 21888242871839275222246405745257275088548364400416034343698204186554232236429, 27348303065, - 65906470849, - 56193911669, - 58514329132, - 45081143026, + 21888242871839275222246405745257275088548364400416034343698204186572995735489, + 21888242871839275222246405745257275088548364400416034343698204186563283176309, + 21888242871839275222246405745257275088548364400416034343698204186565603593772, + 21888242871839275222246405745257275088548364400416034343698204186552170407666, 10705374951, - 60216301613, - 36048602781, - 56554350244, - 36863429568, + 21888242871839275222246405745257275088548364400416034343698204186567305566253, + 21888242871839275222246405745257275088548364400416034343698204186543137867421, + 21888242871839275222246405745257275088548364400416034343698204186563643614884, + 21888242871839275222246405745257275088548364400416034343698204186543952694208, 14208373985, 14721577335, - 47563148773, - 41889790243, + 21888242871839275222246405745257275088548364400416034343698204186554652413413, + 21888242871839275222246405745257275088548364400416034343698204186548979054883, 12510448066, 18828084308, - 37227102897, - 36810485608, + 21888242871839275222246405745257275088548364400416034343698204186544316367537, + 21888242871839275222246405745257275088548364400416034343698204186543899750248, 930743799, - 67803215484, + 21888242871839275222246405745257275088548364400416034343698204186574892480124, 8853406748, 27785691587, - 60170898691, - 42493605857, - 57261668330, - 63484754347, - 52017103107, - 52642574325, - 45009622224, - 64195958400, + 21888242871839275222246405745257275088548364400416034343698204186567260163331, + 21888242871839275222246405745257275088548364400416034343698204186549582870497, + 21888242871839275222246405745257275088548364400416034343698204186564350932970, + 21888242871839275222246405745257275088548364400416034343698204186570574018987, + 21888242871839275222246405745257275088548364400416034343698204186559106367747, + 21888242871839275222246405745257275088548364400416034343698204186559731838965, + 21888242871839275222246405745257275088548364400416034343698204186552098886864, + 21888242871839275222246405745257275088548364400416034343698204186571285223040, 7695640267, 13757003996, - 53432722342, + 21888242871839275222246405745257275088548364400416034343698204186560521986982, 22792176236, 28331565984, 22157312707, 15843589870, 22848669504, 23984260758, - 57468611140, + 21888242871839275222246405745257275088548364400416034343698204186564557875780, 9466221079, - 64492171170, - 48586343539, - 66176309707, - 38771438216, + 21888242871839275222246405745257275088548364400416034343698204186571581435810, + 21888242871839275222246405745257275088548364400416034343698204186555675608179, + 21888242871839275222246405745257275088548364400416034343698204186573265574347, + 21888242871839275222246405745257275088548364400416034343698204186545860702856, 14857816497, 14330815349, - 63217616957, - 56336832913, - 34810454507, - 34373077293, + 21888242871839275222246405745257275088548364400416034343698204186570306881597, + 21888242871839275222246405745257275088548364400416034343698204186563426097553, + 21888242871839275222246405745257275088548364400416034343698204186541899719147, + 21888242871839275222246405745257275088548364400416034343698204186541462341933, 1013030213, 2902031420, 33257685442, - 53439698122, + 21888242871839275222246405745257275088548364400416034343698204186560528962762, 11396263851, - 35647133130, + 21888242871839275222246405745257275088548364400416034343698204186542736397770, 22205923935, - 48340266638, + 21888242871839275222246405745257275088548364400416034343698204186555429531278, 7836559508, 21070038373, - 39340632121, + 21888242871839275222246405745257275088548364400416034343698204186546429896761, 2169629227, - 35588654174, + 21888242871839275222246405745257275088548364400416034343698204186542677918814, 17012627881, - 39610221291, - 67572014879, + 21888242871839275222246405745257275088548364400416034343698204186546699485931, + 21888242871839275222246405745257275088548364400416034343698204186574661279519, 7283302611, 24208982743, 20464883427, - 58800583642, - 55425102893, - 66725475083, + 21888242871839275222246405745257275088548364400416034343698204186565889848282, + 21888242871839275222246405745257275088548364400416034343698204186562514367533, + 21888242871839275222246405745257275088548364400416034343698204186573814739723, 21851837206, - 67122405546, + 21888242871839275222246405745257275088548364400416034343698204186574211670186, 8658673690, - 65478250064, + 21888242871839275222246405745257275088548364400416034343698204186572567514704, 33027822918, - 39515565434, + 21888242871839275222246405745257275088548364400416034343698204186546604830074, 9389668916, - 36722149745, - 43575170888, - 47397404327, - 68092080918, - 46211685764, + 21888242871839275222246405745257275088548364400416034343698204186543811414385, + 21888242871839275222246405745257275088548364400416034343698204186550664435528, + 21888242871839275222246405745257275088548364400416034343698204186554486668967, + 21888242871839275222246405745257275088548364400416034343698204186575181345558, + 21888242871839275222246405745257275088548364400416034343698204186553300950404, 11717641527, - 46258276281, - 60352335908, - 55114575038, + 21888242871839275222246405745257275088548364400416034343698204186553347540921, + 21888242871839275222246405745257275088548364400416034343698204186567441600548, + 21888242871839275222246405745257275088548364400416034343698204186562203839678, 30633564037, - 63596227014, - 40746716922, - 50602900524, - 40781167460, - 41773592032, - 63011261636, + 21888242871839275222246405745257275088548364400416034343698204186570685491654, + 21888242871839275222246405745257275088548364400416034343698204186547835981562, + 21888242871839275222246405745257275088548364400416034343698204186557692165164, + 21888242871839275222246405745257275088548364400416034343698204186547870432100, + 21888242871839275222246405745257275088548364400416034343698204186548862856672, + 21888242871839275222246405745257275088548364400416034343698204186570100526276, 19629019367, 8915127154, - 38471469844, + 21888242871839275222246405745257275088548364400416034343698204186545560734484, 10718346621, - 59658443636, + 21888242871839275222246405745257275088548364400416034343698204186566747708276, 22107689521, 9463299489, 15076034121, - 37850882400, + 21888242871839275222246405745257275088548364400416034343698204186544940147040, 20131950773, 16169673920, - 46664208680, - 36435935676, - 42282979997, + 21888242871839275222246405745257275088548364400416034343698204186553753473320, + 21888242871839275222246405745257275088548364400416034343698204186543525200316, + 21888242871839275222246405745257275088548364400416034343698204186549372244637, 22930376094, 8678339952, - 45686120166, - 37678371961, + 21888242871839275222246405745257275088548364400416034343698204186552775384806, + 21888242871839275222246405745257275088548364400416034343698204186544767636601, 19817688468, 20718079990, 32164382786, - 51709505624, + 21888242871839275222246405745257275088548364400416034343698204186558798770264, 20920563425, - 54245230703, + 21888242871839275222246405745257275088548364400416034343698204186561334495343, 32427219465, - 37098148943, + 21888242871839275222246405745257275088548364400416034343698204186544187413583, 10327636301, - 48403217721, + 21888242871839275222246405745257275088548364400416034343698204186555492482361, 9064488571, - 41421918923, + 21888242871839275222246405745257275088548364400416034343698204186548511183563, 9319464254, - 34756418474, + 21888242871839275222246405745257275088548364400416034343698204186541845683114, 13838722005, - 62905293832, - 58843803111, + 21888242871839275222246405745257275088548364400416034343698204186569994558472, + 21888242871839275222246405745257275088548364400416034343698204186565933067751, 25908319036, - 39348237253, - 50621569759, + 21888242871839275222246405745257275088548364400416034343698204186546437501893, + 21888242871839275222246405745257275088548364400416034343698204186557710834399, 861408222, 26410229915, 24328171124, - 64464448986, + 21888242871839275222246405745257275088548364400416034343698204186571553713626, 7311160290, 5147824223, 8694073921, - 67776391323, + 21888242871839275222246405745257275088548364400416034343698204186574865655963, 1011312984, - 51018700237, - 48458972639, + 21888242871839275222246405745257275088548364400416034343698204186558107964877, + 21888242871839275222246405745257275088548364400416034343698204186555548237279, 4651799316, - 64733764715, - 64361253173, + 21888242871839275222246405745257275088548364400416034343698204186571823029355, + 21888242871839275222246405745257275088548364400416034343698204186571450517813, 8749972198, - 58207829714, + 21888242871839275222246405745257275088548364400416034343698204186565297094354, 11493149239, - 35508859141, - 55821462549, - 49887487847, + 21888242871839275222246405745257275088548364400416034343698204186542598123781, + 21888242871839275222246405745257275088548364400416034343698204186562910727189, + 21888242871839275222246405745257275088548364400416034343698204186556976752487, 31154007329, 213571335, - 50612994435, - 36805772654, - 68386745094, + 21888242871839275222246405745257275088548364400416034343698204186557702259075, + 21888242871839275222246405745257275088548364400416034343698204186543895037294, + 21888242871839275222246405745257275088548364400416034343698204186575476009734, 8585729363, - 55503695044, + 21888242871839275222246405745257275088548364400416034343698204186562592959684, 1267596756, 32896249972, 17777753356, - 63963196471, - 46065236210, + 21888242871839275222246405745257275088548364400416034343698204186571052461111, + 21888242871839275222246405745257275088548364400416034343698204186553154500850, 7701670958, 12915548183, 20766212089, - 37477305705, + 21888242871839275222246405745257275088548364400416034343698204186544566570345, 12272825944, 3971327583, - 64699791992, - 61716964123, + 21888242871839275222246405745257275088548364400416034343698204186571789056632, + 21888242871839275222246405745257275088548364400416034343698204186568806228763, 15634030046, 7093160426, 9674354420, - 51510253674, + 21888242871839275222246405745257275088548364400416034343698204186558599518314, 1223209421, 34088171801, 19287958871, - 60825711863, - 57900143539, + 21888242871839275222246405745257275088548364400416034343698204186567914976503, + 21888242871839275222246405745257275088548364400416034343698204186564989408179, 29656861443, - 36389577916, - 60040001283, - 50552917017, - 42280763978, - 48960100126, - 50308906957, - 66922514869, - 65544899093, - 47240398560, - 65295110910, + 21888242871839275222246405745257275088548364400416034343698204186543478842556, + 21888242871839275222246405745257275088548364400416034343698204186567129265923, + 21888242871839275222246405745257275088548364400416034343698204186557642181657, + 21888242871839275222246405745257275088548364400416034343698204186549370028618, + 21888242871839275222246405745257275088548364400416034343698204186556049364766, + 21888242871839275222246405745257275088548364400416034343698204186557398171597, + 21888242871839275222246405745257275088548364400416034343698204186574011779509, + 21888242871839275222246405745257275088548364400416034343698204186572634163733, + 21888242871839275222246405745257275088548364400416034343698204186554329663200, + 21888242871839275222246405745257275088548364400416034343698204186572384375550, 29285124153, 17967826648, - 63764842247, + 21888242871839275222246405745257275088548364400416034343698204186570854106887, 6116642392, - 65246028410, + 21888242871839275222246405745257275088548364400416034343698204186572335293050, 5716517539, 3197142939, 4427759454, 27609654497, - 34414721563, + 21888242871839275222246405745257275088548364400416034343698204186541503986203, 30981897614, - 53972932192, - 44649667928, - 50930459351, - 60700840116, + 21888242871839275222246405745257275088548364400416034343698204186561062196832, + 21888242871839275222246405745257275088548364400416034343698204186551738932568, + 21888242871839275222246405745257275088548364400416034343698204186558019723991, + 21888242871839275222246405745257275088548364400416034343698204186567790104756, 17359073831, 27037635518, 29609943774, - 44284948829, + 21888242871839275222246405745257275088548364400416034343698204186551374213469, 26322539743, 13670036631, 2164275456, - 45269244278, + 21888242871839275222246405745257275088548364400416034343698204186552358508918, 17597955996, 27696616150, 28417154207, - 37020342928, + 21888242871839275222246405745257275088548364400416034343698204186544109607568, 8085395607, - 66679312321, + 21888242871839275222246405745257275088548364400416034343698204186573768576961, 797319029, - 35900205722, - 50733974616, + 21888242871839275222246405745257275088548364400416034343698204186542989470362, + 21888242871839275222246405745257275088548364400416034343698204186557823239256, 6880644850, 33496942167, 34097644723, - 47409175499, + 21888242871839275222246405745257275088548364400416034343698204186554498440139, 27309165388, - 54978234790, - 38580222875, + 21888242871839275222246405745257275088548364400416034343698204186562067499430, + 21888242871839275222246405745257275088548364400416034343698204186545669487515, 15911437465, - 56279685480, - 50403967817, - 60005556538, + 21888242871839275222246405745257275088548364400416034343698204186563368950120, + 21888242871839275222246405745257275088548364400416034343698204186557493232457, + 21888242871839275222246405745257275088548364400416034343698204186567094821178, 30980003980, 13352012392, 21109813097, - 64144537069, - 35655020460, + 21888242871839275222246405745257275088548364400416034343698204186571233801709, + 21888242871839275222246405745257275088548364400416034343698204186542744285100, 8161437682, 18490582675, 17717240376, @@ -1043,10 +1043,10 @@ pub global CRP: [Polynomial; L] = [ 3007401776, 13276033442, 27820946688, - 66732401912, + 21888242871839275222246405745257275088548364400416034343698204186573821666552, 17036469707, - 36688531239, - 48718357304, + 21888242871839275222246405745257275088548364400416034343698204186543777795879, + 21888242871839275222246405745257275088548364400416034343698204186555807621944, 20874826817, 30687773632, ]), @@ -1088,7 +1088,7 @@ pk_aggregation (CIRCUIT 5) ------------------------------------- ************************************/ -pub global PK_AGGREGATION_BIT_PK: u32 = 35; +pub global PK_AGGREGATION_BIT_PK: u32 = 36; pub global PK_AGGREGATION_CONFIGS: PkAggregationConfigs = PkAggregationConfigs::new(QIS); @@ -1098,8 +1098,8 @@ user_data_encryption (USED FOR DATA ENCRYPTION) ------------------------------------- ************************************/ -pub global USER_DATA_ENCRYPTION_BIT_PK: u32 = 35; -pub global USER_DATA_ENCRYPTION_BIT_CT: u32 = 35; +pub global USER_DATA_ENCRYPTION_BIT_PK: u32 = 36; +pub global USER_DATA_ENCRYPTION_BIT_CT: u32 = 36; pub global USER_DATA_ENCRYPTION_BIT_U: u32 = 1; pub global USER_DATA_ENCRYPTION_BIT_E0: u32 = 5; pub global USER_DATA_ENCRYPTION_BIT_E1: u32 = 5; @@ -1110,7 +1110,7 @@ pub global USER_DATA_ENCRYPTION_BIT_P1: u32 = 9; pub global USER_DATA_ENCRYPTION_BIT_P2: u32 = 35; pub global USER_DATA_ENCRYPTION_K0IS: [Field; L] = [61160268678, 8933500027]; -pub global USER_DATA_ENCRYPTION_PK_BOUNDS: [Field; L] = [34359701504, 34359615488]; +pub global USER_DATA_ENCRYPTION_PK_BOUNDS: [Field; L] = [68719403008, 68719230976]; pub global USER_DATA_ENCRYPTION_E0_BOUND: Field = 20; pub global USER_DATA_ENCRYPTION_E1_BOUND: Field = 20; pub global USER_DATA_ENCRYPTION_U_BOUND: Field = 1; diff --git a/circuits/lib/src/configs/secure/threshold.nr b/circuits/lib/src/configs/secure/threshold.nr index 40ec5fbc58..ddb0d08bdd 100644 --- a/circuits/lib/src/configs/secure/threshold.nr +++ b/circuits/lib/src/configs/secure/threshold.nr @@ -30,490 +30,490 @@ pub global Q_INVERSE_MOD_T: Field = 21; pub global CRP: [Polynomial; L] = [ Polynomial::new([ - 1666838063904304, + 21888242871839275222246405745257275088548364400416034343698203601614050194992, 198092196459841, 51435662373109, 250510419448628, 781426260922968, - 1896814415033622, - 1420043741126206, + 21888242871839275222246405745257275088548364400416034343698203831590401324310, + 21888242871839275222246405745257275088548364400416034343698203354819727416894, 322621471342752, - 1990010240048264, + 21888242871839275222246405745257275088548364400416034343698203924786226338952, 361659322026084, 895811362610357, 199339580897879, - 1540604172255858, - 1618094537083355, - 1992313249370465, + 21888242871839275222246405745257275088548364400416034343698203475380158546546, + 21888242871839275222246405745257275088548364400416034343698203552870523374043, + 21888242871839275222246405745257275088548364400416034343698203927089235661153, 464795530839812, 953109449477564, - 1419711176720721, + 21888242871839275222246405745257275088548364400416034343698203354487163011409, 957421842963376, 825882842289512, 608111634774372, - 1623878383228104, + 21888242871839275222246405745257275088548364400416034343698203558654369518792, 346041924944440, 77029463901023, - 1476816637179340, - 1847552403358689, + 21888242871839275222246405745257275088548364400416034343698203411592623470028, + 21888242871839275222246405745257275088548364400416034343698203782328389649377, 856980783870729, - 1508116743026214, + 21888242871839275222246405745257275088548364400416034343698203442892729316902, 503789038772564, - 1674914168365937, + 21888242871839275222246405745257275088548364400416034343698203609690154656625, 294061855762256, 977897481527032, 650643420771480, 81316673633236, 9735941910308, - 1810819406196548, + 21888242871839275222246405745257275088548364400416034343698203745595392487236, 807811192837870, - 1787801556124006, - 1628104605342444, + 21888242871839275222246405745257275088548364400416034343698203722577542414694, + 21888242871839275222246405745257275088548364400416034343698203562880591633132, 600086251534035, 636056534768916, - 1131530252915815, - 1255704360183763, + 21888242871839275222246405745257275088548364400416034343698203066306239206503, + 21888242871839275222246405745257275088548364400416034343698203190480346474451, 95218918469775, - 2040073901845704, - 2190923300890339, - 2129557408280233, - 1825606695301201, + 21888242871839275222246405745257275088548364400416034343698203974849888136392, + 21888242871839275222246405745257275088548364400416034343698204125699287181027, + 21888242871839275222246405745257275088548364400416034343698204064333394570921, + 21888242871839275222246405745257275088548364400416034343698203760382681591889, 858311725710238, - 2085738069632449, + 21888242871839275222246405745257275088548364400416034343698204020514055923137, 728216351479062, - 2222409891668965, + 21888242871839275222246405745257275088548364400416034343698204157185877959653, 408916890608415, 221777469533572, - 1503036764859128, - 1505455671500325, + 21888242871839275222246405745257275088548364400416034343698203437812751149816, + 21888242871839275222246405745257275088548364400416034343698203440231657791013, 930451524671678, - 1362697704316651, - 1632285077756587, - 1499048643040664, + 21888242871839275222246405745257275088548364400416034343698203297473690607339, + 21888242871839275222246405745257275088548364400416034343698203567061064047275, + 21888242871839275222246405745257275088548364400416034343698203433824629331352, 79869826355466, 986888947574802, - 1522234604757688, - 1325868244625762, - 1694757952177932, - 1392845355590898, + 21888242871839275222246405745257275088548364400416034343698203457010591048376, + 21888242871839275222246405745257275088548364400416034343698203260644230916450, + 21888242871839275222246405745257275088548364400416034343698203629533938468620, + 21888242871839275222246405745257275088548364400416034343698203327621341881586, 833262400538044, - 1248980897186294, + 21888242871839275222246405745257275088548364400416034343698203183756883476982, 185899050581064, - 2094270676296619, + 21888242871839275222246405745257275088548364400416034343698204029046662587307, 825001755505720, - 2207792985372830, - 2175324765889308, + 21888242871839275222246405745257275088548364400416034343698204142568971663518, + 21888242871839275222246405745257275088548364400416034343698204110100752179996, 566132271356101, - 1193091914303481, - 1145415849728820, + 21888242871839275222246405745257275088548364400416034343698203127867900594169, + 21888242871839275222246405745257275088548364400416034343698203080191836019508, 1112758291477166, - 2046550970123572, + 21888242871839275222246405745257275088548364400416034343698203981326956414260, 746504607097521, - 1590824539730575, - 1355923605926158, - 1224568403934937, - 2083966633612809, + 21888242871839275222246405745257275088548364400416034343698203525600526021263, + 21888242871839275222246405745257275088548364400416034343698203290699592216846, + 21888242871839275222246405745257275088548364400416034343698203159344390225625, + 21888242871839275222246405745257275088548364400416034343698204018742619903497, 1045053730589594, - 1403446140065070, - 2088111397999184, - 1202373165947124, + 21888242871839275222246405745257275088548364400416034343698203338222126355758, + 21888242871839275222246405745257275088548364400416034343698204022887384289872, + 21888242871839275222246405745257275088548364400416034343698203137149152237812, 731074538941241, - 1385136154633382, + 21888242871839275222246405745257275088548364400416034343698203319912140924070, 9327532806284, 676430662939897, 372946526503852, - 1778848192564402, + 21888242871839275222246405745257275088548364400416034343698203713624178855090, 478277374585757, 1060265088293272, - 1479686012342199, - 1226107227856770, - 1460163197522801, + 21888242871839275222246405745257275088548364400416034343698203414461998632887, + 21888242871839275222246405745257275088548364400416034343698203160883214147458, + 21888242871839275222246405745257275088548364400416034343698203394939183813489, 658890072820806, - 1824428682071442, + 21888242871839275222246405745257275088548364400416034343698203759204668362130, 1070145583149417, 274733435832022, - 1381903858861143, + 21888242871839275222246405745257275088548364400416034343698203316679845151831, 368412562966204, - 1430382496808576, - 1853896598168923, - 1584229499949206, - 2205492262538098, + 21888242871839275222246405745257275088548364400416034343698203365158483099264, + 21888242871839275222246405745257275088548364400416034343698203788672584459611, + 21888242871839275222246405745257275088548364400416034343698203519005486239894, + 21888242871839275222246405745257275088548364400416034343698204140268248828786, 744333757293518, 1068995172787174, 284548461760869, 925855966951823, - 1632589261772008, + 21888242871839275222246405745257275088548364400416034343698203567365248062696, 380330124256276, - 1480202015625718, + 21888242871839275222246405745257275088548364400416034343698203414978001916406, 602415533761058, 1019602145898572, 529315989027678, 3755717817685, 471189200605056, 64721691596020, - 1396082717142355, + 21888242871839275222246405745257275088548364400416034343698203330858703433043, 387312882468116, - 1871814589404278, - 1719605689086772, - 1652315999912496, - 2076274105650007, - 2065860844538433, + 21888242871839275222246405745257275088548364400416034343698203806590575694966, + 21888242871839275222246405745257275088548364400416034343698203654381675377460, + 21888242871839275222246405745257275088548364400416034343698203587091986203184, + 21888242871839275222246405745257275088548364400416034343698204011050091940695, + 21888242871839275222246405745257275088548364400416034343698204000636830829121, 727493780829341, - 2213140414827622, - 1277758019348629, + 21888242871839275222246405745257275088548364400416034343698204147916401118310, + 21888242871839275222246405745257275088548364400416034343698203212534005639317, 447332094008105, - 1156399521326194, - 2099487183029222, - 1815907414559049, + 21888242871839275222246405745257275088548364400416034343698203091175507616882, + 21888242871839275222246405745257275088548364400416034343698204034263169319910, + 21888242871839275222246405745257275088548364400416034343698203750683400849737, 127089960964197, - 1312991321054421, - 1709739682752836, - 2068271875579851, - 1821232367316197, - 2024728252379659, + 21888242871839275222246405745257275088548364400416034343698203247767307345109, + 21888242871839275222246405745257275088548364400416034343698203644515669043524, + 21888242871839275222246405745257275088548364400416034343698204003047861870539, + 21888242871839275222246405745257275088548364400416034343698203756008353606885, + 21888242871839275222246405745257275088548364400416034343698203959504238670347, 1028727551908939, 124252319736319, - 2138681844125797, - 1455430795288653, - 1915255996514106, - 1724905331508691, + 21888242871839275222246405745257275088548364400416034343698204073457830416485, + 21888242871839275222246405745257275088548364400416034343698203390206781579341, + 21888242871839275222246405745257275088548364400416034343698203850031982804794, + 21888242871839275222246405745257275088548364400416034343698203659681317799379, 1064587643588743, - 1945613996992732, - 1747251893142884, - 1945419807141796, - 1497785119444923, - 1421274184591670, + 21888242871839275222246405745257275088548364400416034343698203880389983283420, + 21888242871839275222246405745257275088548364400416034343698203682027879433572, + 21888242871839275222246405745257275088548364400416034343698203880195793432484, + 21888242871839275222246405745257275088548364400416034343698203432561105735611, + 21888242871839275222246405745257275088548364400416034343698203356050170882358, 509144962793866, - 2058377444508224, + 21888242871839275222246405745257275088548364400416034343698203993153430798912, 426877472799930, - 1425749000909650, - 1134224277046388, + 21888242871839275222246405745257275088548364400416034343698203360524987200338, + 21888242871839275222246405745257275088548364400416034343698203069000263337076, 984275344264741, 949242663132517, - 1895555571070103, - 1757733327162112, + 21888242871839275222246405745257275088548364400416034343698203830331557360791, + 21888242871839275222246405745257275088548364400416034343698203692509313452800, 779476710210196, - 1347483023874866, + 21888242871839275222246405745257275088548364400416034343698203282259010165554, 49064984149363, - 1549710235134228, - 1306483739805499, + 21888242871839275222246405745257275088548364400416034343698203484486221424916, + 21888242871839275222246405745257275088548364400416034343698203241259726096187, 433842240943317, 24493648784578, - 1174544250810727, + 21888242871839275222246405745257275088548364400416034343698203109320237101415, 880292802560081, 1056219875686524, - 1836531997836035, + 21888242871839275222246405745257275088548364400416034343698203771307984126723, 682421832392863, - 1898650627051421, - 1281371472803754, + 21888242871839275222246405745257275088548364400416034343698203833426613342109, + 21888242871839275222246405745257275088548364400416034343698203216147459094442, 395705154141185, - 1567188536586974, + 21888242871839275222246405745257275088548364400416034343698203501964522877662, 1083005732076478, - 1647643922538494, - 1828816499058155, + 21888242871839275222246405745257275088548364400416034343698203582419908829182, + 21888242871839275222246405745257275088548364400416034343698203763592485348843, 1108693589936522, 900802951907400, - 2102880504250079, - 1523837878915732, - 1904633922646804, - 1417711902595091, + 21888242871839275222246405745257275088548364400416034343698204037656490540767, + 21888242871839275222246405745257275088548364400416034343698203458613865206420, + 21888242871839275222246405745257275088548364400416034343698203839409908937492, + 21888242871839275222246405745257275088548364400416034343698203352487888885779, 102474353600995, - 2211338805960994, - 1149351330961831, - 1140331839713232, + 21888242871839275222246405745257275088548364400416034343698204146114792251682, + 21888242871839275222246405745257275088548364400416034343698203084127317252519, + 21888242871839275222246405745257275088548364400416034343698203075107826003920, 681972652371769, - 1894755557073482, + 21888242871839275222246405745257275088548364400416034343698203829531543364170, 563358144693034, 966299020472700, - 1300162301805882, - 1192691324159102, - 2198472387646221, + 21888242871839275222246405745257275088548364400416034343698203234938288096570, + 21888242871839275222246405745257275088548364400416034343698203127467310449790, + 21888242871839275222246405745257275088548364400416034343698204133248373936909, 10611719644044, - 1239495850467949, - 1126812648943931, + 21888242871839275222246405745257275088548364400416034343698203174271836758637, + 21888242871839275222246405745257275088548364400416034343698203061588635234619, 760016133460748, 569974815392787, 944818860811731, - 1654340019895910, - 2012681010291914, + 21888242871839275222246405745257275088548364400416034343698203589116006186598, + 21888242871839275222246405745257275088548364400416034343698203947456996582602, 119509525319264, 550298960912946, - 2089732603130099, - 1809159128967032, - 2058702248784879, + 21888242871839275222246405745257275088548364400416034343698204024508589420787, + 21888242871839275222246405745257275088548364400416034343698203743935115257720, + 21888242871839275222246405745257275088548364400416034343698203993478235075567, 725105918690464, - 1149670306415067, + 21888242871839275222246405745257275088548364400416034343698203084446292705755, 227032500602472, 998263999163748, - 1684039566730626, + 21888242871839275222246405745257275088548364400416034343698203618815553021314, 806017241368370, - 1195486013666378, - 2231672405778486, - 1401396594012881, + 21888242871839275222246405745257275088548364400416034343698203130261999957066, + 21888242871839275222246405745257275088548364400416034343698204166448392069174, + 21888242871839275222246405745257275088548364400416034343698203336172580303569, 441269728464591, 338788431106032, - 2124736250798773, - 1423294234500421, - 1337844540478505, - 1687259638321298, - 1580947367828330, - 1541391845224964, + 21888242871839275222246405745257275088548364400416034343698204059512237089461, + 21888242871839275222246405745257275088548364400416034343698203358070220791109, + 21888242871839275222246405745257275088548364400416034343698203272620526769193, + 21888242871839275222246405745257275088548364400416034343698203622035624611986, + 21888242871839275222246405745257275088548364400416034343698203515723354119018, + 21888242871839275222246405745257275088548364400416034343698203476167831515652, 414617921600764, - 1787323829701919, + 21888242871839275222246405745257275088548364400416034343698203722099815992607, 348313870694551, - 1540006915890732, - 1846520006389354, - 1175077696916213, + 21888242871839275222246405745257275088548364400416034343698203474782902181420, + 21888242871839275222246405745257275088548364400416034343698203781295992680042, + 21888242871839275222246405745257275088548364400416034343698203109853683206901, 846698758898197, - 1498632811821308, - 1619267522457203, - 1521563845633210, - 2019873036947196, + 21888242871839275222246405745257275088548364400416034343698203433408798111996, + 21888242871839275222246405745257275088548364400416034343698203554043508747891, + 21888242871839275222246405745257275088548364400416034343698203456339831923898, + 21888242871839275222246405745257275088548364400416034343698203954649023237884, 815657387341698, - 1680516891730242, + 21888242871839275222246405745257275088548364400416034343698203615292878020930, 694961300407385, - 1489595956055291, - 1488048850991266, - 1418992431091714, + 21888242871839275222246405745257275088548364400416034343698203424371942345979, + 21888242871839275222246405745257275088548364400416034343698203422824837281954, + 21888242871839275222246405745257275088548364400416034343698203353768417382402, 902179155987543, - 1234873466070636, - 1515728323055064, + 21888242871839275222246405745257275088548364400416034343698203169649452361324, + 21888242871839275222246405745257275088548364400416034343698203450504309345752, 893456109832294, 1067303946693928, 862455084791430, 336058138834674, - 1259322630428896, - 2012925293011068, - 1650279286352216, + 21888242871839275222246405745257275088548364400416034343698203194098616719584, + 21888242871839275222246405745257275088548364400416034343698203947701279301756, + 21888242871839275222246405745257275088548364400416034343698203585055272642904, 975572747506388, - 1552003220373897, + 21888242871839275222246405745257275088548364400416034343698203486779206664585, 647232548184401, 20968436514191, 154755932870481, - 1865292525248903, + 21888242871839275222246405745257275088548364400416034343698203800068511539591, 601707633753659, 387905551543145, - 1934004701725105, - 1792372528854346, + 21888242871839275222246405745257275088548364400416034343698203868780688015793, + 21888242871839275222246405745257275088548364400416034343698203727148515145034, 365108441405092, 253270819375738, - 2095949539893940, + 21888242871839275222246405745257275088548364400416034343698204030725526184628, 947819565315018, 390107187528421, 498268751120484, - 1764050000866415, + 21888242871839275222246405745257275088548364400416034343698203698825987157103, 461901516226963, - 2158444182892349, - 2199138500916943, + 21888242871839275222246405745257275088548364400416034343698204093220169183037, + 21888242871839275222246405745257275088548364400416034343698204133914487207631, 443990377953291, - 1473261254957705, - 1920045225903443, + 21888242871839275222246405745257275088548364400416034343698203408037241248393, + 21888242871839275222246405745257275088548364400416034343698203854821212194131, 780199425157401, - 1292351200938430, + 21888242871839275222246405745257275088548364400416034343698203227127187229118, 647081019171694, 337469351455107, - 1316337770792926, + 21888242871839275222246405745257275088548364400416034343698203251113757083614, 214190481083087, - 1161356958137272, - 1970620615146774, + 21888242871839275222246405745257275088548364400416034343698203096132944427960, + 21888242871839275222246405745257275088548364400416034343698203905396601437462, 1035771783067351, 1110417828238803, 780804580853953, 541732238265054, 14494610822209, - 1298313681008415, + 21888242871839275222246405745257275088548364400416034343698203233089667299103, 556746554571612, 164414117728142, 402827853470553, - 1532017822028520, - 1945501844234723, - 2039253260069174, + 21888242871839275222246405745257275088548364400416034343698203466793808319208, + 21888242871839275222246405745257275088548364400416034343698203880277830525411, + 21888242871839275222246405745257275088548364400416034343698203974029246359862, 992263650623783, - 1205363299804764, + 21888242871839275222246405745257275088548364400416034343698203140139286095452, 291662814725231, - 2030241926131537, - 1236503363647793, - 1585451165256826, + 21888242871839275222246405745257275088548364400416034343698203965017912422225, + 21888242871839275222246405745257275088548364400416034343698203171279349938481, + 21888242871839275222246405745257275088548364400416034343698203520227151547514, 569689800869274, - 2090553543381152, - 1972724368777043, - 2068500224987202, - 1802755975856935, + 21888242871839275222246405745257275088548364400416034343698204025329529671840, + 21888242871839275222246405745257275088548364400416034343698203907500355067731, + 21888242871839275222246405745257275088548364400416034343698204003276211277890, + 21888242871839275222246405745257275088548364400416034343698203737531962147623, 209716367219214, - 1644558974851276, - 2211078352252016, - 2243498465840021, + 21888242871839275222246405745257275088548364400416034343698203579334961141964, + 21888242871839275222246405745257275088548364400416034343698204145854338542704, + 21888242871839275222246405745257275088548364400416034343698204178274452130709, 400952312973692, - 1755137788704575, - 1907699628256998, - 1956133063433652, - 1267008634884109, - 1918257461142574, + 21888242871839275222246405745257275088548364400416034343698203689913774995263, + 21888242871839275222246405745257275088548364400416034343698203842475614547686, + 21888242871839275222246405745257275088548364400416034343698203890909049724340, + 21888242871839275222246405745257275088548364400416034343698203201784621174797, + 21888242871839275222246405745257275088548364400416034343698203853033447433262, 66891656453829, - 1262592160964710, - 1769200890452289, - 2013539416779813, + 21888242871839275222246405745257275088548364400416034343698203197368147255398, + 21888242871839275222246405745257275088548364400416034343698203703976876742977, + 21888242871839275222246405745257275088548364400416034343698203948315403070501, 869174163040423, - 2164981849000390, + 21888242871839275222246405745257275088548364400416034343698204099757835291078, 910345681991143, 720786572338177, 982104069972428, 79506531349677, 52990525980528, - 1810292451124857, + 21888242871839275222246405745257275088548364400416034343698203745068437415545, 329457551867910, 885459561720883, - 1326976005902680, - 1367122485376759, + 21888242871839275222246405745257275088548364400416034343698203261751992193368, + 21888242871839275222246405745257275088548364400416034343698203301898471667447, 890190592613409, 1049551266460276, 195832632811530, - 2176565945746343, - 1823500071763010, + 21888242871839275222246405745257275088548364400416034343698204111341932037031, + 21888242871839275222246405745257275088548364400416034343698203758276058053698, 557953880936426, 856806546727202, 820158881723675, 348948893827224, - 1284864503908971, + 21888242871839275222246405745257275088548364400416034343698203219640490199659, 423621046986193, - 2237868386377600, + 21888242871839275222246405745257275088548364400416034343698204172644372668288, 992461069005550, - 2222655924776770, + 21888242871839275222246405745257275088548364400416034343698204157431911067458, 195752018545652, 1097890053098462, 17581598634035, 1045421367721670, - 2213746675590796, - 1130455392344731, - 2107343455569960, - 2171950766910769, + 21888242871839275222246405745257275088548364400416034343698204148522661881484, + 21888242871839275222246405745257275088548364400416034343698203065231378635419, + 21888242871839275222246405745257275088548364400416034343698204042119441860648, + 21888242871839275222246405745257275088548364400416034343698204106726753201457, 964880006016151, - 1172393978865803, - 2157357025491198, - 1767839898101481, - 2052172857123543, - 2128245793374643, + 21888242871839275222246405745257275088548364400416034343698203107169965156491, + 21888242871839275222246405745257275088548364400416034343698204092133011781886, + 21888242871839275222246405745257275088548364400416034343698203702615884392169, + 21888242871839275222246405745257275088548364400416034343698203986948843414231, + 21888242871839275222246405745257275088548364400416034343698204063021779665331, 136486949845154, - 1460768715345086, - 1331143059077191, - 1970098389910398, + 21888242871839275222246405745257275088548364400416034343698203395544701635774, + 21888242871839275222246405745257275088548364400416034343698203265919045367879, + 21888242871839275222246405745257275088548364400416034343698203904874376201086, 960574274445433, 18376324166273, - 1217561715877829, - 1943884617552421, - 1215825194065916, - 1218183597342153, - 1163365112423645, + 21888242871839275222246405745257275088548364400416034343698203152337702168517, + 21888242871839275222246405745257275088548364400416034343698203878660603843109, + 21888242871839275222246405745257275088548364400416034343698203150601180356604, + 21888242871839275222246405745257275088548364400416034343698203152959583632841, + 21888242871839275222246405745257275088548364400416034343698203098141098714333, 802452016608632, 410551443668066, 211615127489693, - 1907367935735019, - 1583639569048899, - 1532766549999357, - 1735286341857548, + 21888242871839275222246405745257275088548364400416034343698203842143922025707, + 21888242871839275222246405745257275088548364400416034343698203518415555339587, + 21888242871839275222246405745257275088548364400416034343698203467542536290045, + 21888242871839275222246405745257275088548364400416034343698203670062328148236, 724493114667820, - 1609954441485764, + 21888242871839275222246405745257275088548364400416034343698203544730427776452, 495491952916569, 1060644517237602, 11599909685128, 723535888374053, 935087225350297, - 1664661167811257, + 21888242871839275222246405745257275088548364400416034343698203599437154101945, 731458030064859, - 2046034027306401, - 1768440575627655, - 2000698082858067, + 21888242871839275222246405745257275088548364400416034343698203980810013597089, + 21888242871839275222246405745257275088548364400416034343698203703216561918343, + 21888242871839275222246405745257275088548364400416034343698203935474069148755, 331360783658921, 143023734164166, - 1949275140637958, + 21888242871839275222246405745257275088548364400416034343698203884051126928646, 278441835277888, - 1597962578167538, + 21888242871839275222246405745257275088548364400416034343698203532738564458226, 843721159885546, - 1350325965093760, + 21888242871839275222246405745257275088548364400416034343698203285101951384448, 580330022955892, 272082773995940, - 1412049071485801, + 21888242871839275222246405745257275088548364400416034343698203346825057776489, 891429389708341, 713362241824012, - 1953988097749085, - 1279387224740998, + 21888242871839275222246405745257275088548364400416034343698203888764084039773, + 21888242871839275222246405745257275088548364400416034343698203214163211031686, 533044999024809, 738871951971390, - 1557194213526742, + 21888242871839275222246405745257275088548364400416034343698203491970199817430, 928428292447153, - 2074080291558704, + 21888242871839275222246405745257275088548364400416034343698204008856277849392, 832104841504213, 992145067086241, - 1456569639242188, - 1352397180212720, - 1801606552848851, + 21888242871839275222246405745257275088548364400416034343698203391345625532876, + 21888242871839275222246405745257275088548364400416034343698203287173166503408, + 21888242871839275222246405745257275088548364400416034343698203736382539139539, 286509512972636, - 1288205597865688, + 21888242871839275222246405745257275088548364400416034343698203222981584156376, 500094737475882, 992909629308017, 682089644316653, 542943169357053, 1120018772402835, 967038376089782, - 1598881711642640, + 21888242871839275222246405745257275088548364400416034343698203533657697933328, 20153356626272, - 1833167364020756, + 21888242871839275222246405745257275088548364400416034343698203767943350311444, 53699645453074, - 1951982735101589, - 1967133481385644, - 1662771545474741, + 21888242871839275222246405745257275088548364400416034343698203886758721392277, + 21888242871839275222246405745257275088548364400416034343698203901909467676332, + 21888242871839275222246405745257275088548364400416034343698203597547531765429, 238767373377168, - 2128340588616206, - 2238002916642305, - 2030946493630426, - 1280213225187397, + 21888242871839275222246405745257275088548364400416034343698204063116574906894, + 21888242871839275222246405745257275088548364400416034343698204172778902932993, + 21888242871839275222246405745257275088548364400416034343698203965722479921114, + 21888242871839275222246405745257275088548364400416034343698203214989211478085, 1023123065812712, - 2104121368831557, - 1555703093170287, - 1953700650377087, + 21888242871839275222246405745257275088548364400416034343698204038897355122245, + 21888242871839275222246405745257275088548364400416034343698203490479079460975, + 21888242871839275222246405745257275088548364400416034343698203888476636667775, 310109169878427, 458988181554135, 573306974570604, 991639439681608, - 1402724885471713, - 2247411351947010, + 21888242871839275222246405745257275088548364400416034343698203337500871762401, + 21888242871839275222246405745257275088548364400416034343698204182187338237698, 599301156971639, - 1659425262561841, + 21888242871839275222246405745257275088548364400416034343698203594201248852529, 411082637686696, - 1835582389063269, - 1413143760611121, + 21888242871839275222246405745257275088548364400416034343698203770358375353957, + 21888242871839275222246405745257275088548364400416034343698203347919746901809, 737235907829561, - 2187593822163141, - 1409801538970115, - 2236996475434516, - 1581996735931200, - 1341211198658761, - 1448460050251302, + 21888242871839275222246405745257275088548364400416034343698204122369808453829, + 21888242871839275222246405745257275088548364400416034343698203344577525260803, + 21888242871839275222246405745257275088548364400416034343698204171772461725204, + 21888242871839275222246405745257275088548364400416034343698203516772722221888, + 21888242871839275222246405745257275088548364400416034343698203275987184949449, + 21888242871839275222246405745257275088548364400416034343698203383236036541990, 779822203989826, - 1625091727726115, + 21888242871839275222246405745257275088548364400416034343698203559867714016803, 748503244948420, 734457258013197, 1107310155881843, 779457011487440, - 1889306815677906, - 1603051243097950, - 1464644777238592, + 21888242871839275222246405745257275088548364400416034343698203824082801968594, + 21888242871839275222246405745257275088548364400416034343698203537827229388638, + 21888242871839275222246405745257275088548364400416034343698203399420763529280, 1104430126655584, 556616491998385, - 1629399306491516, + 21888242871839275222246405745257275088548364400416034343698203564175292782204, 437816184932107, - 2035989230999255, + 21888242871839275222246405745257275088548364400416034343698203970765217289943, 861352478497115, - 1894197440856554, - 1275093376686461, - 1193014267865719, + 21888242871839275222246405745257275088548364400416034343698203828973427147242, + 21888242871839275222246405745257275088548364400416034343698203209869362977149, + 21888242871839275222246405745257275088548364400416034343698203127790254156407, 1014976786019021, - 1401959076959647, - 1720905049437656, - 1798057355145858, - 2074081024249115, + 21888242871839275222246405745257275088548364400416034343698203336735063250335, + 21888242871839275222246405745257275088548364400416034343698203655681035728344, + 21888242871839275222246405745257275088548364400416034343698203732833341436546, + 21888242871839275222246405745257275088548364400416034343698204008857010539803, 912155011394842, - 1379164501317518, + 21888242871839275222246405745257275088548364400416034343698203313940487608206, 837985055033021, 1048554388426012, 629800797020430, @@ -524,286 +524,286 @@ pub global CRP: [Polynomial; L] = [ 362950574859004, 234265637108867, 394798718654148, - 1165750464990033, + 21888242871839275222246405745257275088548364400416034343698203100526451280721, 505980326192521, 127273850188709, 1075716056814326, - 2027667673583874, + 21888242871839275222246405745257275088548364400416034343698203962443659874562, 826517324338960, 1085585939643223, - 1828181414686448, + 21888242871839275222246405745257275088548364400416034343698203762957400977136, 334659977677696, - 1906466190220383, - 2119566216740517, + 21888242871839275222246405745257275088548364400416034343698203841242176511071, + 21888242871839275222246405745257275088548364400416034343698204054342203031205, 460066838732011, 667606296330325, - 2196527579050397, - 1342102548401991, - 1767846357409060, - 1164550137161631, - 1630599169591126, + 21888242871839275222246405745257275088548364400416034343698204131303565341085, + 21888242871839275222246405745257275088548364400416034343698203276878534692679, + 21888242871839275222246405745257275088548364400416034343698203702622343699748, + 21888242871839275222246405745257275088548364400416034343698203099326123452319, + 21888242871839275222246405745257275088548364400416034343698203565375155881814, 1004074945946345, - 2048303916629411, + 21888242871839275222246405745257275088548364400416034343698203983079902920099, 366980104645927, - 1538918850410853, + 21888242871839275222246405745257275088548364400416034343698203473694836701541, 620880136821615, - 1956991787335425, + 21888242871839275222246405745257275088548364400416034343698203891767773626113, 239668370733252, 30883434788425, 275043606869117, 1079167120961077, 106017437862587, - 1921754157463673, - 1325169959051597, + 21888242871839275222246405745257275088548364400416034343698203856530143754361, + 21888242871839275222246405745257275088548364400416034343698203259945945342285, 232529679780561, 937436809924285, 454701735543182, - 1326435788159216, + 21888242871839275222246405745257275088548364400416034343698203261211774449904, 512265332696503, - 1349170360034063, - 1832331508179506, - 1930382864194329, - 1798747281146797, - 1281098305536405, - 2062939548903540, + 21888242871839275222246405745257275088548364400416034343698203283946346324751, + 21888242871839275222246405745257275088548364400416034343698203767107494470194, + 21888242871839275222246405745257275088548364400416034343698203865158850485017, + 21888242871839275222246405745257275088548364400416034343698203733523267437485, + 21888242871839275222246405745257275088548364400416034343698203215874291827093, + 21888242871839275222246405745257275088548364400416034343698203997715535194228, 677586112723889, - 1356908583422499, + 21888242871839275222246405745257275088548364400416034343698203291684569713187, 575328656040442, 252701832677209, - 2128239393122726, + 21888242871839275222246405745257275088548364400416034343698204063015379413414, 1066898679134724, - 1412989937303344, - 2039965223063243, - 1497984798786927, - 2218593889270221, + 21888242871839275222246405745257275088548364400416034343698203347765923594032, + 21888242871839275222246405745257275088548364400416034343698203974741209353931, + 21888242871839275222246405745257275088548364400416034343698203432760785077615, + 21888242871839275222246405745257275088548364400416034343698204153369875560909, 542733666034953, 1001722613663863, 681104649479325, - 1941106231787866, + 21888242871839275222246405745257275088548364400416034343698203875882218078554, 581385203038478, 592322058847859, - 1819798434426032, + 21888242871839275222246405745257275088548364400416034343698203754574420716720, 566528296914175, - 1673388613885430, + 21888242871839275222246405745257275088548364400416034343698203608164600176118, 702592166318910, - 2025797812321719, + 21888242871839275222246405745257275088548364400416034343698203960573798612407, 438095849484076, 1002866600213083, 258369018328744, 747089306617732, 846088247233465, - 2097657502673069, - 1185184517406805, + 21888242871839275222246405745257275088548364400416034343698204032433488963757, + 21888242871839275222246405745257275088548364400416034343698203119960503697493, 728020508574676, 31812429735786, - 1942348478193777, + 21888242871839275222246405745257275088548364400416034343698203877124464484465, 1072790611319979, - 1251523362033009, - 2123713983307165, + 21888242871839275222246405745257275088548364400416034343698203186299348323697, + 21888242871839275222246405745257275088548364400416034343698204058489969597853, 42659686402690, 322557792379109, 482632182208284, 1079714216399515, 158734280105541, - 1215394026961399, + 21888242871839275222246405745257275088548364400416034343698203150170013252087, 203828724297790, - 1133093278603353, - 2015995731698133, + 21888242871839275222246405745257275088548364400416034343698203067869264894041, + 21888242871839275222246405745257275088548364400416034343698203950771717988821, 763762545635573, 1042401927386099, 895692220640502, - 1911109954978816, + 21888242871839275222246405745257275088548364400416034343698203845885941269504, 840973205520217, - 1743711122651447, - 1268855404745305, - 2097654259051475, + 21888242871839275222246405745257275088548364400416034343698203678487108942135, + 21888242871839275222246405745257275088548364400416034343698203203631391035993, + 21888242871839275222246405745257275088548364400416034343698204032430245342163, 296102443773203, - 1254220381835271, - 1601228664107183, - 1371839188050976, - 1808858915932225, - 1258307405159848, + 21888242871839275222246405745257275088548364400416034343698203188996368125959, + 21888242871839275222246405745257275088548364400416034343698203536004650397871, + 21888242871839275222246405745257275088548364400416034343698203306615174341664, + 21888242871839275222246405745257275088548364400416034343698203743634902222913, + 21888242871839275222246405745257275088548364400416034343698203193083391450536, 377478138149889, - 2139252150460599, - 1407856735738332, + 21888242871839275222246405745257275088548364400416034343698204074028136751287, + 21888242871839275222246405745257275088548364400416034343698203342632722029020, 737343650545944, 790577334606931, - 1531085162279264, - 2169248545845060, - 1425682423873863, + 21888242871839275222246405745257275088548364400416034343698203465861148569952, + 21888242871839275222246405745257275088548364400416034343698204104024532135748, + 21888242871839275222246405745257275088548364400416034343698203360458410164551, 322094643327425, - 1378704804969181, - 1689537453078503, + 21888242871839275222246405745257275088548364400416034343698203313480791259869, + 21888242871839275222246405745257275088548364400416034343698203624313439369191, 35223057735827, - 1834148607711197, - 2122631839733836, - 1143482707758413, - 1331089257908086, - 1622713265251739, + 21888242871839275222246405745257275088548364400416034343698203768924594001885, + 21888242871839275222246405745257275088548364400416034343698204057407826024524, + 21888242871839275222246405745257275088548364400416034343698203078258694049101, + 21888242871839275222246405745257275088548364400416034343698203265865244198774, + 21888242871839275222246405745257275088548364400416034343698203557489251542427, 687387562757987, - 1721167949728503, - 1840971939293274, + 21888242871839275222246405745257275088548364400416034343698203655943936019191, + 21888242871839275222246405745257275088548364400416034343698203775747925583962, 425370841909514, 307315553307995, 264747526014001, - 1130189905626100, - 2133665506817310, + 21888242871839275222246405745257275088548364400416034343698203064965891916788, + 21888242871839275222246405745257275088548364400416034343698204068441493107998, 238562143655084, 316261429010827, 980944562637546, - 1444293662963943, - 1829068912278432, + 21888242871839275222246405745257275088548364400416034343698203379069649254631, + 21888242871839275222246405745257275088548364400416034343698203763844898569120, 543374312897297, - 2002739293762719, - 1268533205671259, + 21888242871839275222246405745257275088548364400416034343698203937515280053407, + 21888242871839275222246405745257275088548364400416034343698203203309191961947, 847228225459934, - 1982143697877841, + 21888242871839275222246405745257275088548364400416034343698203916919684168529, 835362667909099, - 1449373150314112, - 1537305037220880, + 21888242871839275222246405745257275088548364400416034343698203384149136604800, + 21888242871839275222246405745257275088548364400416034343698203472081023511568, 998048202521974, 452522871215817, - 1873523843549376, + 21888242871839275222246405745257275088548364400416034343698203808299829840064, 145906181996147, 198201574060552, - 1862726882934981, + 21888242871839275222246405745257275088548364400416034343698203797502869225669, 952238800921196, 311685485162432, - 2038128658675820, + 21888242871839275222246405745257275088548364400416034343698203972904644966508, 199757272394703, - 1315284095927813, + 21888242871839275222246405745257275088548364400416034343698203250060082218501, 80613410570595, - 2224825999910000, - 1697266664461638, + 21888242871839275222246405745257275088548364400416034343698204159601986200688, + 21888242871839275222246405745257275088548364400416034343698203632042650752326, 505487084110117, - 1999752577716750, + 21888242871839275222246405745257275088548364400416034343698203934528564007438, 640926757140415, - 1489187107983717, + 21888242871839275222246405745257275088548364400416034343698203423963094274405, 1125691722036860, - 1856643940541712, - 1741802491691039, - 1694320946211032, + 21888242871839275222246405745257275088548364400416034343698203791419926832400, + 21888242871839275222246405745257275088548364400416034343698203676578477981727, + 21888242871839275222246405745257275088548364400416034343698203629096932501720, 324257009877277, - 1434263755918239, + 21888242871839275222246405745257275088548364400416034343698203369039742208927, 1095905328145698, - 1235620780703914, + 21888242871839275222246405745257275088548364400416034343698203170396766994602, 1066123606998767, - 1461895178130065, + 21888242871839275222246405745257275088548364400416034343698203396671164420753, 2256024932798, - 2239219752817693, - 2238708684302865, + 21888242871839275222246405745257275088548364400416034343698204173995739108381, + 21888242871839275222246405745257275088548364400416034343698204173484670593553, 1083628675328621, - 1839060116352878, + 21888242871839275222246405745257275088548364400416034343698203773836102643566, 682480240563415, - 1866588220444048, + 21888242871839275222246405745257275088548364400416034343698203801364206734736, 840255108010928, 277920183552667, - 1529623696981956, + 21888242871839275222246405745257275088548364400416034343698203464399683272644, 983570100130129, 218421605608163, - 1734686148014345, - 2119709127444079, - 1379925556880168, + 21888242871839275222246405745257275088548364400416034343698203669462134305033, + 21888242871839275222246405745257275088548364400416034343698204054485113734767, + 21888242871839275222246405745257275088548364400416034343698203314701543170856, 1018183572769090, 304753503568767, 791715518640517, 957470544247769, 717401907121454, - 1434438404545774, + 21888242871839275222246405745257275088548364400416034343698203369214390836462, 590220074114322, - 1893521257387882, + 21888242871839275222246405745257275088548364400416034343698203828297243678570, 283541077675676, - 1590684722539677, + 21888242871839275222246405745257275088548364400416034343698203525460708830365, 996466272845, - 1193351133383569, + 21888242871839275222246405745257275088548364400416034343698203128127119674257, 394066180773224, 411039778812404, 765599954919661, - 1525554791664984, - 1342042665766606, - 1262332187253151, + 21888242871839275222246405745257275088548364400416034343698203460330777955672, + 21888242871839275222246405745257275088548364400416034343698203276818652057294, + 21888242871839275222246405745257275088548364400416034343698203197108173543839, 608888050590091, - 2158557510896960, - 1857951497649692, - 1849248012236996, + 21888242871839275222246405745257275088548364400416034343698204093333497187648, + 21888242871839275222246405745257275088548364400416034343698203792727483940380, + 21888242871839275222246405745257275088548364400416034343698203784023998527684, 158273236577770, 701411320846426, - 1835987754211278, + 21888242871839275222246405745257275088548364400416034343698203770763740501966, 11617355593106, 551985536241827, - 1668320410499232, + 21888242871839275222246405745257275088548364400416034343698203603096396789920, 690003342662791, 107706003654481, - 1205668596184781, + 21888242871839275222246405745257275088548364400416034343698203140444582475469, 390102845846686, - 1460659150321911, + 21888242871839275222246405745257275088548364400416034343698203395435136612599, 582555960523959, 1097554489282042, 827782661661895, 801443659969062, - 1546594884489090, + 21888242871839275222246405745257275088548364400416034343698203481370870779778, 592557250365336, - 2220292566902745, + 21888242871839275222246405745257275088548364400416034343698204155068553193433, 624377395237081, - 1931481272310696, + 21888242871839275222246405745257275088548364400416034343698203866257258601384, 250588776187632, - 1689132740238061, + 21888242871839275222246405745257275088548364400416034343698203623908726528749, 127474199828774, 1100741294359772, 270162708605459, - 1490747628423558, + 21888242871839275222246405745257275088548364400416034343698203425523614714246, 379973537567664, 720891900869063, 1030824096925693, - 1380900327702985, - 1365631576081111, + 21888242871839275222246405745257275088548364400416034343698203315676313993673, + 21888242871839275222246405745257275088548364400416034343698203300407562371799, 931073674039097, - 1960302868487255, + 21888242871839275222246405745257275088548364400416034343698203895078854777943, 1002849858936654, 1122979713597032, 531965801068449, 339074425705563, - 1346584101634008, - 1906630461045486, + 21888242871839275222246405745257275088548364400416034343698203281360087924696, + 21888242871839275222246405745257275088548364400416034343698203841406447336174, 967585065808800, 839922062859227, - 1315836992483215, + 21888242871839275222246405745257275088548364400416034343698203250612978773903, 588701621312565, 5823137356919, 816250972817176, 161280768106219, 989190161505419, 857619738820580, - 1965965592993879, + 21888242871839275222246405745257275088548364400416034343698203900741579284567, 910647911811330, 542238482733317, 709016123176274, 100911814375203, - 1971303266197959, + 21888242871839275222246405745257275088548364400416034343698203906079252488647, 665981732206022, 1004660455839298, - 2057611300949191, - 2103437519282597, - 1300435518750565, + 21888242871839275222246405745257275088548364400416034343698203992387287239879, + 21888242871839275222246405745257275088548364400416034343698204038213505573285, + 21888242871839275222246405745257275088548364400416034343698203235211505041253, 1045783888687606, 122240995978462, - 2013368798960490, - 1345633541363733, - 2166176628002196, + 21888242871839275222246405745257275088548364400416034343698203948144785251178, + 21888242871839275222246405745257275088548364400416034343698203280409527654421, + 21888242871839275222246405745257275088548364400416034343698204100952614292884, 123950477430731, 515462487032095, 964545746548230, - 1579638694852765, + 21888242871839275222246405745257275088548364400416034343698203514414681143453, 624027080198769, - 2223907923403445, + 21888242871839275222246405745257275088548364400416034343698204158683909694133, 546774986143324, - 1221591354750692, + 21888242871839275222246405745257275088548364400416034343698203156367341041380, 862340680092737, 152386921017636, - 1641191576942973, - 1353106045199067, - 1861024529699314, - 1533266393278861, + 21888242871839275222246405745257275088548364400416034343698203575967563233661, + 21888242871839275222246405745257275088548364400416034343698203287882031489755, + 21888242871839275222246405745257275088548364400416034343698203795800515990002, + 21888242871839275222246405745257275088548364400416034343698203468042379569549, 188870520342256, 816467918630060, 397540174161513, @@ -811,559 +811,559 @@ pub global CRP: [Polynomial; L] = [ 493468003346133, 1065260403578394, 1017734124550082, - 1883351188653255, + 21888242871839275222246405745257275088548364400416034343698203818127174943943, 488406669866827, 207272948900749, - 2138995229119994, + 21888242871839275222246405745257275088548364400416034343698204073771215410682, 710204073230307, 106100547544171, - 1310319274823073, - 2013202550053658, - 1133447950552283, - 2025960123941465, - 1480914157932471, + 21888242871839275222246405745257275088548364400416034343698203245095261113761, + 21888242871839275222246405745257275088548364400416034343698203947978536344346, + 21888242871839275222246405745257275088548364400416034343698203068223936842971, + 21888242871839275222246405745257275088548364400416034343698203960736110232153, + 21888242871839275222246405745257275088548364400416034343698203415690144223159, 480389978390873, 335033689158113, 587765485613653, - 1354058077787550, + 21888242871839275222246405745257275088548364400416034343698203288834064078238, 818914714206074, 152528929921608, 507999265858410, 272211759927275, 1027985953428524, 538889005596398, - 1549397320762502, - 2188935413096745, - 1801629573239544, + 21888242871839275222246405745257275088548364400416034343698203484173307053190, + 21888242871839275222246405745257275088548364400416034343698204123711399387433, + 21888242871839275222246405745257275088548364400416034343698203736405559530232, 404830539169768, 1048983209911969, 1066014040999733, - 1290966101975818, + 21888242871839275222246405745257275088548364400416034343698203225742088266506, 240649975838100, 420136263257130, - 1844865475507687, - 1857301363479109, - 1679819452162412, - 1569524865631072, - 1534976014850950, + 21888242871839275222246405745257275088548364400416034343698203779641461798375, + 21888242871839275222246405745257275088548364400416034343698203792077349769797, + 21888242871839275222246405745257275088548364400416034343698203614595438453100, + 21888242871839275222246405745257275088548364400416034343698203504300851921760, + 21888242871839275222246405745257275088548364400416034343698203469752001141638, 658055009033287, - 1650334095319632, + 21888242871839275222246405745257275088548364400416034343698203585110081610320, 243105443746922, 50061965019760, 977468218143612, 179077735342060, - 2245390007304732, - 1406013444200144, + 21888242871839275222246405745257275088548364400416034343698204180165993595420, + 21888242871839275222246405745257275088548364400416034343698203340789430490832, 128611056404798, 839646285868528, 746096691590588, - 1603518491599141, + 21888242871839275222246405745257275088548364400416034343698203538294477889829, 670464464112698, 293639325081483, 1085965744441142, - 1138440819196759, + 21888242871839275222246405745257275088548364400416034343698203073216805487447, 482398394912213, - 1648880761397303, + 21888242871839275222246405745257275088548364400416034343698203583656747687991, 227638159753225, 311042877417171, - 1487002949950673, + 21888242871839275222246405745257275088548364400416034343698203421778936241361, 1068189942269374, - 1942207625414103, + 21888242871839275222246405745257275088548364400416034343698203876983611704791, 308533419530289, 199285312635739, - 1577306623596453, - 1579251810424985, + 21888242871839275222246405745257275088548364400416034343698203512082609887141, + 21888242871839275222246405745257275088548364400416034343698203514027796715673, 718024490687031, - 1349989829300396, + 21888242871839275222246405745257275088548364400416034343698203284765815591084, 821921419823154, 1038779655723385, 757424213330753, 922649218600119, 219078185668745, 737933396454798, - 1279624598123906, - 1186469666834149, + 21888242871839275222246405745257275088548364400416034343698203214400584414594, + 21888242871839275222246405745257275088548364400416034343698203121245653124837, 819011414399653, 217591628708234, - 1539866407131078, - 1201947089449193, - 2202352216002198, - 1563478473763586, + 21888242871839275222246405745257275088548364400416034343698203474642393421766, + 21888242871839275222246405745257275088548364400416034343698203136723075739881, + 21888242871839275222246405745257275088548364400416034343698204137128202292886, + 21888242871839275222246405745257275088548364400416034343698203498254460054274, 57328514745525, - 1832759521502116, - 1282650315630033, + 21888242871839275222246405745257275088548364400416034343698203767535507792804, + 21888242871839275222246405745257275088548364400416034343698203217426301920721, 737299979830559, - 1611373149645705, + 21888242871839275222246405745257275088548364400416034343698203546149135936393, 735121557929866, 570904863187206, - 1272553866808970, + 21888242871839275222246405745257275088548364400416034343698203207329853099658, 1030920766539928, - 1394837627423143, + 21888242871839275222246405745257275088548364400416034343698203329613613713831, 303494419847288, 423442634051933, 570342238795091, - 1214821139927715, - 1802200420742048, + 21888242871839275222246405745257275088548364400416034343698203149597126218403, + 21888242871839275222246405745257275088548364400416034343698203736976407032736, 201157897774678, - 1391872200571500, + 21888242871839275222246405745257275088548364400416034343698203326648186862188, 680907394237061, - 1703669291729964, - 1424119770271671, - 1943600594777594, + 21888242871839275222246405745257275088548364400416034343698203638445278020652, + 21888242871839275222246405745257275088548364400416034343698203358895756562359, + 21888242871839275222246405745257275088548364400416034343698203878376581068282, 855228188816, 400678358159039, 565388805760265, 1049105529940614, 333525084826972, 1005004732078339, - 1430379755046829, - 2180283867372158, + 21888242871839275222246405745257275088548364400416034343698203365155741337517, + 21888242871839275222246405745257275088548364400416034343698204115059853662846, 159761294478680, 492174484822738, - 1985621943613898, + 21888242871839275222246405745257275088548364400416034343698203920397929904586, 704586225755581, - 1826310524276644, + 21888242871839275222246405745257275088548364400416034343698203761086510567332, 640000019068885, 577800141373714, - 1670582064531246, + 21888242871839275222246405745257275088548364400416034343698203605358050821934, 992715651411470, 763101918845001, 643953806797259, - 1644185285546972, - 1134895242638343, + 21888242871839275222246405745257275088548364400416034343698203578961271837660, + 21888242871839275222246405745257275088548364400416034343698203069671228929031, 717332534737410, 383813028782201, 1057644410032979, - 1293110863833535, - 1412477852949000, - 1467723740450111, - 1513761332301210, + 21888242871839275222246405745257275088548364400416034343698203227886850124223, + 21888242871839275222246405745257275088548364400416034343698203347253839239688, + 21888242871839275222246405745257275088548364400416034343698203402499726740799, + 21888242871839275222246405745257275088548364400416034343698203448537318591898, 1092896137893849, - 1852250539822705, - 1441964909554873, + 21888242871839275222246405745257275088548364400416034343698203787026526113393, + 21888242871839275222246405745257275088548364400416034343698203376740895845561, 951890974301726, 859322258683414, - 1524032011499478, - 1529766665756946, + 21888242871839275222246405745257275088548364400416034343698203458807997790166, + 21888242871839275222246405745257275088548364400416034343698203464542652047634, 728972697943951, - 2242885747915946, + 21888242871839275222246405745257275088548364400416034343698204177661734206634, 504913510127457, - 1362398309167483, - 2078459561937909, - 1348613814413237, - 1682582957422290, - 1666922822853883, - 1437731225093162, + 21888242871839275222246405745257275088548364400416034343698203297174295458171, + 21888242871839275222246405745257275088548364400416034343698204013235548228597, + 21888242871839275222246405745257275088548364400416034343698203283389800703925, + 21888242871839275222246405745257275088548364400416034343698203617358943712978, + 21888242871839275222246405745257275088548364400416034343698203601698809144571, + 21888242871839275222246405745257275088548364400416034343698203372507211383850, 165478048418783, 1028164482367066, - 1772900926051553, + 21888242871839275222246405745257275088548364400416034343698203707676912342241, 1109157833913998, - 1773837982728705, - 1690466069212982, - 1477901507053010, + 21888242871839275222246405745257275088548364400416034343698203708613969019393, + 21888242871839275222246405745257275088548364400416034343698203625242055503670, + 21888242871839275222246405745257275088548364400416034343698203412677493343698, 142770891693455, 81320703532544, - 2164421084271683, - 2016658432715686, + 21888242871839275222246405745257275088548364400416034343698204099197070562371, + 21888242871839275222246405745257275088548364400416034343698203951434419006374, 839216441734913, 533828483727436, - 2112187375407304, + 21888242871839275222246405745257275088548364400416034343698204046963361697992, 683366751832305, 798471311481733, 911385529766861, - 1498172272021877, - 1598064182656710, + 21888242871839275222246405745257275088548364400416034343698203432948258312565, + 21888242871839275222246405745257275088548364400416034343698203532840168947398, 735943494539022, 1111041356913709, 1045933022030075, 411183615496305, - 1845311866997387, + 21888242871839275222246405745257275088548364400416034343698203780087853288075, 711118107208995, 931493779966185, 714024898321265, - 1593131694610088, - 1400127512435990, - 1369156799142339, - 1794631283333529, + 21888242871839275222246405745257275088548364400416034343698203527907680900776, + 21888242871839275222246405745257275088548364400416034343698203334903498726678, + 21888242871839275222246405745257275088548364400416034343698203303932785433027, + 21888242871839275222246405745257275088548364400416034343698203729407269624217, 672117223001284, 749025155357337, - 2193247000980716, + 21888242871839275222246405745257275088548364400416034343698204128022987271404, 797698807487503, 404543686416404, 97470631422922, 600355655196703, 683026712061056, - 1760728772649075, + 21888242871839275222246405745257275088548364400416034343698203695504758939763, 317733937951011, 231839032789148, 602675901054829, 43454119915481, - 1463675062272246, - 1640635401103979, - 1984483074298460, + 21888242871839275222246405745257275088548364400416034343698203398451048562934, + 21888242871839275222246405745257275088548364400416034343698203575411387394667, + 21888242871839275222246405745257275088548364400416034343698203919259060589148, 641788803030453, - 1343940304319292, + 21888242871839275222246405745257275088548364400416034343698203278716290609980, 572573297909872, - 1749073442474432, - 1876155379812648, + 21888242871839275222246405745257275088548364400416034343698203683849428765120, + 21888242871839275222246405745257275088548364400416034343698203810931366103336, 852566975179404, 1034218286786103, 585374074304501, 204426448381632, 677443714363191, 207600018450580, - 1945172801048597, - 2003499685356461, - 1544343457470799, + 21888242871839275222246405745257275088548364400416034343698203879948787339285, + 21888242871839275222246405745257275088548364400416034343698203938275671647149, + 21888242871839275222246405745257275088548364400416034343698203479119443761487, 1099743279478534, - 1519640550547254, + 21888242871839275222246405745257275088548364400416034343698203454416536837942, 462753819433427, - 2133160884868070, - 1740847622623437, - 1582787415247606, + 21888242871839275222246405745257275088548364400416034343698204067936871158758, + 21888242871839275222246405745257275088548364400416034343698203675623608914125, + 21888242871839275222246405745257275088548364400416034343698203517563401538294, 757827952690271, 358756153488042, - 1410939620163186, - 1994931319438632, + 21888242871839275222246405745257275088548364400416034343698203345715606453874, + 21888242871839275222246405745257275088548364400416034343698203929707305729320, 573209560496423, - 1440049581503801, + 21888242871839275222246405745257275088548364400416034343698203374825567794489, 919265884848302, 269465760178492, - 1367536056931776, + 21888242871839275222246405745257275088548364400416034343698203302312043222464, 943273270984608, 465949119716313, - 2001904392787114, - 1209248295888876, - 1810097495966421, - 1820267587086985, - 2118132770643796, + 21888242871839275222246405745257275088548364400416034343698203936680379077802, + 21888242871839275222246405745257275088548364400416034343698203144024282179564, + 21888242871839275222246405745257275088548364400416034343698203744873482257109, + 21888242871839275222246405745257275088548364400416034343698203755043573377673, + 21888242871839275222246405745257275088548364400416034343698204052908756934484, 704775976511052, 1025208037397343, - 1569712154788045, - 1148536160560791, + 21888242871839275222246405745257275088548364400416034343698203504488141078733, + 21888242871839275222246405745257275088548364400416034343698203083312146851479, 332028967981989, - 1282103056446111, + 21888242871839275222246405745257275088548364400416034343698203216879042736799, 129141041337759, - 1866559962275483, - 1874815811594684, + 21888242871839275222246405745257275088548364400416034343698203801335948566171, + 21888242871839275222246405745257275088548364400416034343698203809591797885372, 859738759123706, 626532026021513, 816265135988989, 175104535510798, - 1407555300657703, + 21888242871839275222246405745257275088548364400416034343698203342331286948391, 685815333982637, - 1692324442099535, - 1539730109485983, - 2194049853762602, - 1252085017860717, - 1151444909449651, - 2191249691487013, - 1448197968576964, + 21888242871839275222246405745257275088548364400416034343698203627100428390223, + 21888242871839275222246405745257275088548364400416034343698203474506095776671, + 21888242871839275222246405745257275088548364400416034343698204128825840053290, + 21888242871839275222246405745257275088548364400416034343698203186861004151405, + 21888242871839275222246405745257275088548364400416034343698203086220895740339, + 21888242871839275222246405745257275088548364400416034343698204126025677777701, + 21888242871839275222246405745257275088548364400416034343698203382973954867652, 794983979255297, 413232500515277, 595794635056341, - 1653180381387023, - 1961825780099470, - 1392173974835837, - 1634142755713869, - 1644705224734120, - 1980930040904522, - 1899966524793555, + 21888242871839275222246405745257275088548364400416034343698203587956367677711, + 21888242871839275222246405745257275088548364400416034343698203896601766390158, + 21888242871839275222246405745257275088548364400416034343698203326949961126525, + 21888242871839275222246405745257275088548364400416034343698203568918742004557, + 21888242871839275222246405745257275088548364400416034343698203579481211024808, + 21888242871839275222246405745257275088548364400416034343698203915706027195210, + 21888242871839275222246405745257275088548364400416034343698203834742511084243, 645932234507790, - 2097293584508015, + 21888242871839275222246405745257275088548364400416034343698204032069570798703, 691453811276256, - 1505817449985642, + 21888242871839275222246405745257275088548364400416034343698203440593436276330, 286877876318623, 1080713984219700, - 1148008163618157, + 21888242871839275222246405745257275088548364400416034343698203082784149908845, 654738066084118, - 2045395368504694, + 21888242871839275222246405745257275088548364400416034343698203980171354795382, 1074399331072693, - 2070876735577127, - 1711853344853624, + 21888242871839275222246405745257275088548364400416034343698204005652721867815, + 21888242871839275222246405745257275088548364400416034343698203646629331144312, 761497162962075, 811886192909147, - 1896561982780778, + 21888242871839275222246405745257275088548364400416034343698203831337969071466, 1044773381638669, 687996251116628, 933635588886269, - 2238150303855054, + 21888242871839275222246405745257275088548364400416034343698204172926290145742, 254467028127973, 810931449389114, 73215401687960, - 1706766867141760, + 21888242871839275222246405745257275088548364400416034343698203641542853432448, 164423863501770, - 1750164664609569, - 1632425508189963, + 21888242871839275222246405745257275088548364400416034343698203684940650900257, + 21888242871839275222246405745257275088548364400416034343698203567201494480651, 391396602626547, - 1552898329139265, - 1314566765492101, - 1518796106965869, - 1451474758320887, - 1205448171798431, - 2104015718639008, + 21888242871839275222246405745257275088548364400416034343698203487674315429953, + 21888242871839275222246405745257275088548364400416034343698203249342751782789, + 21888242871839275222246405745257275088548364400416034343698203453572093256557, + 21888242871839275222246405745257275088548364400416034343698203386250744611575, + 21888242871839275222246405745257275088548364400416034343698203140224158089119, + 21888242871839275222246405745257275088548364400416034343698204038791704929696, 971711080108871, 732896666203089, - 1665010537651292, - 2185772658944047, - 1825338769514625, - 1496208881474139, - 1876413140416509, + 21888242871839275222246405745257275088548364400416034343698203599786523941980, + 21888242871839275222246405745257275088548364400416034343698204120548645234735, + 21888242871839275222246405745257275088548364400416034343698203760114755805313, + 21888242871839275222246405745257275088548364400416034343698203430984867764827, + 21888242871839275222246405745257275088548364400416034343698203811189126707197, 287009040647513, 110547089472550, - 1344883263554984, + 21888242871839275222246405745257275088548364400416034343698203279659249845672, 665751079427420, - 2090723505192228, + 21888242871839275222246405745257275088548364400416034343698204025499491482916, 316675508738406, - 1187063600085485, + 21888242871839275222246405745257275088548364400416034343698203121839586376173, 539957780112152, - 1971954623183188, + 21888242871839275222246405745257275088548364400416034343698203906730609473876, 1125063352629586, - 1972148939726316, + 21888242871839275222246405745257275088548364400416034343698203906924926017004, 681295625497426, - 2201636153067259, + 21888242871839275222246405745257275088548364400416034343698204136412139357947, 930399559602986, - 1471335888592850, + 21888242871839275222246405745257275088548364400416034343698203406111874883538, 8023395356497, 158810279999532, 645674513865843, - 1192105882694198, - 1847979906589766, - 2065272145128493, + 21888242871839275222246405745257275088548364400416034343698203126881868984886, + 21888242871839275222246405745257275088548364400416034343698203782755892880454, + 21888242871839275222246405745257275088548364400416034343698204000048131419181, 124586297516557, 355232109796128, - 1189018241051207, - 1667353418788411, + 21888242871839275222246405745257275088548364400416034343698203123794227341895, + 21888242871839275222246405745257275088548364400416034343698203602129405079099, 114916129414484, 1057237516353958, - 1205653877685551, - 1194951928332874, - 1715852426392599, + 21888242871839275222246405745257275088548364400416034343698203140429863976239, + 21888242871839275222246405745257275088548364400416034343698203129727914623562, + 21888242871839275222246405745257275088548364400416034343698203650628412683287, 738110318699153, - 2056269786303347, + 21888242871839275222246405745257275088548364400416034343698203991045772594035, 364017979431744, - 1694232849620887, - 2179925272805584, + 21888242871839275222246405745257275088548364400416034343698203629008835911575, + 21888242871839275222246405745257275088548364400416034343698204114701259096272, 116270791366397, - 1871960122054308, - 1730729599081261, - 1732973183691655, - 2027835397522638, - 1687944574496474, - 2241145653574345, - 2150021069444175, + 21888242871839275222246405745257275088548364400416034343698203806736108344996, + 21888242871839275222246405745257275088548364400416034343698203665505585371949, + 21888242871839275222246405745257275088548364400416034343698203667749169982343, + 21888242871839275222246405745257275088548364400416034343698203962611383813326, + 21888242871839275222246405745257275088548364400416034343698203622720560787162, + 21888242871839275222246405745257275088548364400416034343698204175921639865033, + 21888242871839275222246405745257275088548364400416034343698204084797055734863, 1016029300313019, - 1820220965950107, + 21888242871839275222246405745257275088548364400416034343698203754996952240795, 641541952833100, - 1199787371967169, - 2103602425115854, - 1740165461770336, - 1364146867414581, - 1790850419992355, - 1990757617319906, + 21888242871839275222246405745257275088548364400416034343698203134563358257857, + 21888242871839275222246405745257275088548364400416034343698204038378411406542, + 21888242871839275222246405745257275088548364400416034343698203674941448061024, + 21888242871839275222246405745257275088548364400416034343698203298922853705269, + 21888242871839275222246405745257275088548364400416034343698203725626406283043, + 21888242871839275222246405745257275088548364400416034343698203925533603610594, 419402152985618, - 1415579946448449, - 1843635548651117, + 21888242871839275222246405745257275088548364400416034343698203350355932739137, + 21888242871839275222246405745257275088548364400416034343698203778411534941805, 790365604476795, 256045020208456, 1007071639242433, - 1957608219761220, + 21888242871839275222246405745257275088548364400416034343698203892384206051908, 566787463065732, 244651058241430, - 1957591133003701, + 21888242871839275222246405745257275088548364400416034343698203892367119294389, 166298560780079, - 2114914804519815, - 2012893594010805, + 21888242871839275222246405745257275088548364400416034343698204049690790810503, + 21888242871839275222246405745257275088548364400416034343698203947669580301493, 1063792801354370, 247371531369697, - 1176719368912747, - 1205355331529070, - 2033376641230091, - 2227704153780413, + 21888242871839275222246405745257275088548364400416034343698203111495355203435, + 21888242871839275222246405745257275088548364400416034343698203140131317819758, + 21888242871839275222246405745257275088548364400416034343698203968152627520779, + 21888242871839275222246405745257275088548364400416034343698204162480140071101, 94773280827280, - 2102405499316771, - 1792287977062530, + 21888242871839275222246405745257275088548364400416034343698204037181485607459, + 21888242871839275222246405745257275088548364400416034343698203727063963353218, 1069726619159952, 674095951948274, - 1156520444158628, - 2092994782501434, - 2233241065489101, - 2198542479231278, + 21888242871839275222246405745257275088548364400416034343698203091296430449316, + 21888242871839275222246405745257275088548364400416034343698204027770768792122, + 21888242871839275222246405745257275088548364400416034343698204168017051779789, + 21888242871839275222246405745257275088548364400416034343698204133318465521966, 1112655653747543, - 2121520849195636, + 21888242871839275222246405745257275088548364400416034343698204056296835486324, 250540705244733, - 1975854877435129, + 21888242871839275222246405745257275088548364400416034343698203910630863725817, 548480378229537, - 1829288985577547, - 1800191999726016, + 21888242871839275222246405745257275088548364400416034343698203764064971868235, + 21888242871839275222246405745257275088548364400416034343698203734967986016704, 607856031569824, 455766823992278, - 1589293111316107, + 21888242871839275222246405745257275088548364400416034343698203524069097606795, 419888965567535, 736125729702126, - 1745519448179404, + 21888242871839275222246405745257275088548364400416034343698203680295434470092, 1122731909708625, 83148982517104, 917686010146413, - 2135860423692584, + 21888242871839275222246405745257275088548364400416034343698204070636409983272, 523889627781290, 684980850602386, - 1207074855490349, - 1875650242645103, + 21888242871839275222246405745257275088548364400416034343698203141850841781037, + 21888242871839275222246405745257275088548364400416034343698203810426228935791, 38997454156594, 929047925666737, - 1702406163264855, - 2171762770276327, + 21888242871839275222246405745257275088548364400416034343698203637182149555543, + 21888242871839275222246405745257275088548364400416034343698204106538756567015, 882388212449858, - 1888057994616858, + 21888242871839275222246405745257275088548364400416034343698203822833980907546, 77179644319257, 179746995920843, 341490659071447, 788352060066164, 997014715794807, - 1453314821311355, + 21888242871839275222246405745257275088548364400416034343698203388090807602043, 48296279689970, 122459736129486, - 1151793273044688, - 1970204968336136, - 2081465018717451, - 1680963640231627, - 1509359148166615, + 21888242871839275222246405745257275088548364400416034343698203086569259335376, + 21888242871839275222246405745257275088548364400416034343698203904980954626824, + 21888242871839275222246405745257275088548364400416034343698204016241005008139, + 21888242871839275222246405745257275088548364400416034343698203615739626522315, + 21888242871839275222246405745257275088548364400416034343698203444135134457303, 595426503114804, 789279436357038, 27140296449187, 244722480052079, - 1230104213916795, + 21888242871839275222246405745257275088548364400416034343698203164880200207483, 727523587872205, 899394514451843, - 1621941903813043, + 21888242871839275222246405745257275088548364400416034343698203556717890103731, 416903870986498, 490805209317043, 352816060929173, - 1646757378319321, + 21888242871839275222246405745257275088548364400416034343698203581533364610009, 439917281961086, - 1539275628723390, + 21888242871839275222246405745257275088548364400416034343698203474051615014078, 393494114308504, 486048443083451, - 1499301267418078, + 21888242871839275222246405745257275088548364400416034343698203434077253708766, 739347166302848, 586069049928134, 497946366537359, - 1744087380890626, + 21888242871839275222246405745257275088548364400416034343698203678863367181314, 345328087900181, - 1164875401808196, + 21888242871839275222246405745257275088548364400416034343698203099651388098884, 525347407842750, 433837197238747, 1043437583552579, - 1589239253828879, - 1908894841376824, + 21888242871839275222246405745257275088548364400416034343698203524015240119567, + 21888242871839275222246405745257275088548364400416034343698203843670827667512, 330334756862003, - 1175312490742336, + 21888242871839275222246405745257275088548364400416034343698203110088477033024, 540718588530930, - 1525237933928323, - 1481017027620698, + 21888242871839275222246405745257275088548364400416034343698203460013920219011, + 21888242871839275222246405745257275088548364400416034343698203415793013911386, 507576743530489, - 1153468476244386, - 1566836535315533, - 1884398940173093, - 1604788563799078, - 1697117353311759, + 21888242871839275222246405745257275088548364400416034343698203088244462535074, + 21888242871839275222246405745257275088548364400416034343698203501612521606221, + 21888242871839275222246405745257275088548364400416034343698203819174926463781, + 21888242871839275222246405745257275088548364400416034343698203539564550089766, + 21888242871839275222246405745257275088548364400416034343698203631893339602447, 794376573693597, - 1533816590834695, - 2019433017759778, + 21888242871839275222246405745257275088548364400416034343698203468592577125383, + 21888242871839275222246405745257275088548364400416034343698203954209004050466, 111366382040389, - 1706255319019720, - 1351034978065207, + 21888242871839275222246405745257275088548364400416034343698203641031305310408, + 21888242871839275222246405745257275088548364400416034343698203285810964355895, 927047957194539, 488254485745027, - 2129009152124829, + 21888242871839275222246405745257275088548364400416034343698204063785138415517, 922836360778432, 259192553900238, - 1728914705777035, + 21888242871839275222246405745257275088548364400416034343698203663690692067723, 459652321230900, - 1615401897235941, + 21888242871839275222246405745257275088548364400416034343698203550177883526629, 371523691536617, - 1163698752363359, - 1556427245874531, - 1255350702552812, + 21888242871839275222246405745257275088548364400416034343698203098474738654047, + 21888242871839275222246405745257275088548364400416034343698203491203232165219, + 21888242871839275222246405745257275088548364400416034343698203190126688843500, 1118102306203832, 5535659885836, 291591166672025, 63145705450874, 80810704167624, 503684836796892, - 1308879967294964, - 1774477612970576, + 21888242871839275222246405745257275088548364400416034343698203243655953585652, + 21888242871839275222246405745257275088548364400416034343698203709253599261264, 1083965662541186, 388493969479010, 246746273740970, - 1510476712234903, + 21888242871839275222246405745257275088548364400416034343698203445252698525591, 276036568850176, - 1144614227179466, - 1427684505061402, - 1182345945357861, + 21888242871839275222246405745257275088548364400416034343698203079390213470154, + 21888242871839275222246405745257275088548364400416034343698203362460491352090, + 21888242871839275222246405745257275088548364400416034343698203117121931648549, 778044899111784, 22264811936185, - 1867295086366753, - 1981246536258806, - 1979787424328836, + 21888242871839275222246405745257275088548364400416034343698203802071072657441, + 21888242871839275222246405745257275088548364400416034343698203916022522549494, + 21888242871839275222246405745257275088548364400416034343698203914563410619524, 720499567368629, - 1562001428915430, + 21888242871839275222246405745257275088548364400416034343698203496777415206118, 885378554782346, 216424292823174, 1071024719072966, - 1306969102755352, + 21888242871839275222246405745257275088548364400416034343698203241745089046040, 233782714801707, - 1286625764457733, - 1984954968878865, - 1779581970741021, + 21888242871839275222246405745257275088548364400416034343698203221401750748421, + 21888242871839275222246405745257275088548364400416034343698203919730955169553, + 21888242871839275222246405745257275088548364400416034343698203714357957031709, 22888551998068, - 1847122399641461, - 1403818387739115, + 21888242871839275222246405745257275088548364400416034343698203781898385932149, + 21888242871839275222246405745257275088548364400416034343698203338594374029803, 343625838766123, - 1140530704824244, + 21888242871839275222246405745257275088548364400416034343698203075306691114932, 638295727111016, - 1749646137982081, - 1848067100719825, + 21888242871839275222246405745257275088548364400416034343698203684422124272769, + 21888242871839275222246405745257275088548364400416034343698203782843087010513, 854455991034199, 42638327378210, - 1922944647453481, - 1854230856144983, - 1190823420391741, - 2084014790934884, + 21888242871839275222246405745257275088548364400416034343698203857720633744169, + 21888242871839275222246405745257275088548364400416034343698203789006842435671, + 21888242871839275222246405745257275088548364400416034343698203125599406682429, + 21888242871839275222246405745257275088548364400416034343698204018790777225572, 146557321629795, 895750658351679, 354605733021226, 524548166583824, - 1465913797970427, + 21888242871839275222246405745257275088548364400416034343698203400689784261115, 5088046626070, - 1852122553079806, + 21888242871839275222246405745257275088548364400416034343698203786898539370494, 372615841395213, - 1249202057194108, - 1695153843397233, - 1931576610219284, + 21888242871839275222246405745257275088548364400416034343698203183978043484796, + 21888242871839275222246405745257275088548364400416034343698203629929829687921, + 21888242871839275222246405745257275088548364400416034343698203866352596509972, 1054261081494714, - 1466670214084363, + 21888242871839275222246405745257275088548364400416034343698203401446200375051, 558691447534889, - 1300386650811510, + 21888242871839275222246405745257275088548364400416034343698203235162637102198, 812317717593491, 365298559337683, 412003950518313, - 1577611733737769, + 21888242871839275222246405745257275088548364400416034343698203512387720028457, 459984634943813, 272297016428445, - 1210883755496619, - 2224354991996353, - 1838516048148770, + 21888242871839275222246405745257275088548364400416034343698203145659741787307, + 21888242871839275222246405745257275088548364400416034343698204159130978287041, + 21888242871839275222246405745257275088548364400416034343698203773292034439458, 730782473992693, - 1588927246854225, + 21888242871839275222246405745257275088548364400416034343698203523703233144913, 116004120308350, - 1634586267740788, - 1349156896417651, + 21888242871839275222246405745257275088548364400416034343698203569362254031476, + 21888242871839275222246405745257275088548364400416034343698203283932882708339, 52704574615694, - 1297587688561834, + 21888242871839275222246405745257275088548364400416034343698203232363674852522, 990955995896868, - 2224624831280995, + 21888242871839275222246405745257275088548364400416034343698204159400817571683, 583249102582122, 294759264075591, 906465004287219, @@ -1371,65 +1371,65 @@ pub global CRP: [Polynomial; L] = [ 494741630853788, 891303356767485, 885856762810194, - 1455656872004227, - 1953489863045895, - 1756242788706438, - 1206104244717847, - 1609167806366914, + 21888242871839275222246405745257275088548364400416034343698203390432858294915, + 21888242871839275222246405745257275088548364400416034343698203888265849336583, + 21888242871839275222246405745257275088548364400416034343698203691018774997126, + 21888242871839275222246405745257275088548364400416034343698203140880231008535, + 21888242871839275222246405745257275088548364400416034343698203543943792657602, 865172927799594, - 1273721999431694, + 21888242871839275222246405745257275088548364400416034343698203208497985722382, 386931134240009, - 1834292500702476, - 1856538328735903, - 1330243266154607, + 21888242871839275222246405745257275088548364400416034343698203769068486993164, + 21888242871839275222246405745257275088548364400416034343698203791314315026591, + 21888242871839275222246405745257275088548364400416034343698203265019252445295, 80259785356639, 814187157723766, - 1173154640473315, - 1793398369490634, + 21888242871839275222246405745257275088548364400416034343698203107930626764003, + 21888242871839275222246405745257275088548364400416034343698203728174355781322, 516196004749785, - 1416034383734612, + 21888242871839275222246405745257275088548364400416034343698203350810370025300, 1004135219384665, - 1531421064789712, + 21888242871839275222246405745257275088548364400416034343698203466197051080400, 1100404150148365, - 1549670264926661, + 21888242871839275222246405745257275088548364400416034343698203484446251217349, 309246397074542, - 1552875393481837, - 2087343086017281, - 1528900127709704, - 2165398314891488, + 21888242871839275222246405745257275088548364400416034343698203487651379772525, + 21888242871839275222246405745257275088548364400416034343698204022119072307969, + 21888242871839275222246405745257275088548364400416034343698203463676114000392, + 21888242871839275222246405745257275088548364400416034343698204100174301182176, 9158961856913, - 1972345221643339, - 1348606590356416, + 21888242871839275222246405745257275088548364400416034343698203907121207934027, + 21888242871839275222246405745257275088548364400416034343698203283382576647104, 105986785497486, - 1164881896518399, + 21888242871839275222246405745257275088548364400416034343698203099657882809087, 404102618961475, 595803384216820, 774214807076628, 508289953451140, 310675369764055, - 1140819253708260, + 21888242871839275222246405745257275088548364400416034343698203075595239998948, 689790329659478, 988901504684874, - 1962473869839833, - 1426287344295060, - 1286999525702771, - 2132671344526611, + 21888242871839275222246405745257275088548364400416034343698203897249856130521, + 21888242871839275222246405745257275088548364400416034343698203361063330585748, + 21888242871839275222246405745257275088548364400416034343698203221775511993459, + 21888242871839275222246405745257275088548364400416034343698204067447330817299, 169446941698659, - 1472622442987959, + 21888242871839275222246405745257275088548364400416034343698203407398429278647, 746589314511433, - 1859357488287353, + 21888242871839275222246405745257275088548364400416034343698203794133474578041, 4887781042547, 570301810222839, 1007308685380408, 826704126456993, - 1427579294890052, + 21888242871839275222246405745257275088548364400416034343698203362355281180740, 433699503279536, - 1950972184284997, + 21888242871839275222246405745257275088548364400416034343698203885748170575685, 946786815075469, 384001241812478, - 2087484610487150, + 21888242871839275222246405745257275088548364400416034343698204022260596777838, 287987789949204, - 1267405799323846, + 21888242871839275222246405745257275088548364400416034343698203202181785614534, 382231560268082, 450271537539216, 420803065481225, @@ -1437,508 +1437,508 @@ pub global CRP: [Polynomial; L] = [ 326470349060595, 1108989942985943, 984639598068914, - 1161125517792605, + 21888242871839275222246405745257275088548364400416034343698203095901504083293, 442229231122897, - 2112634231319734, + 21888242871839275222246405745257275088548364400416034343698204047410217610422, 1052444813276229, 373062036818428, - 1535077457271648, - 2148889914089297, + 21888242871839275222246405745257275088548364400416034343698203469853443562336, + 21888242871839275222246405745257275088548364400416034343698204083665900379985, 283809574801633, 803369453072523, - 1634914760967332, - 1713368561509351, + 21888242871839275222246405745257275088548364400416034343698203569690747258020, + 21888242871839275222246405745257275088548364400416034343698203648144547800039, 208080530977795, 108865891270012, 176691556294937, - 1162699936844565, - 1884634704334839, + 21888242871839275222246405745257275088548364400416034343698203097475923135253, + 21888242871839275222246405745257275088548364400416034343698203819410690625527, 63877379873772, - 1476380985312886, - 1766777704874184, + 21888242871839275222246405745257275088548364400416034343698203411156971603574, + 21888242871839275222246405745257275088548364400416034343698203701553691164872, 794041707652247, 250860632804032, - 1314278394902979, - 1277670942738094, - 2247660259985466, + 21888242871839275222246405745257275088548364400416034343698203249054381193667, + 21888242871839275222246405745257275088548364400416034343698203212446929028782, + 21888242871839275222246405745257275088548364400416034343698204182436246276154, 266500361214071, 810477512871086, 408620212446522, - 1460784515354903, + 21888242871839275222246405745257275088548364400416034343698203395560501645591, 644756125595368, - 2123899445001122, + 21888242871839275222246405745257275088548364400416034343698204058675431291810, 347863083622649, - 1465152378185200, + 21888242871839275222246405745257275088548364400416034343698203399928364475888, 1065279374491119, - 1437798470079560, + 21888242871839275222246405745257275088548364400416034343698203372574456370248, 195877345539228, 481331328548896, 402787934335796, - 2047660631769456, - 1484101889982771, + 21888242871839275222246405745257275088548364400416034343698203982436618060144, + 21888242871839275222246405745257275088548364400416034343698203418877876273459, 16509700972841, 124110562333052, 595060000107581, - 1682569483778965, - 1340793513291021, - 2131755991686181, + 21888242871839275222246405745257275088548364400416034343698203617345470069653, + 21888242871839275222246405745257275088548364400416034343698203275569499581709, + 21888242871839275222246405745257275088548364400416034343698204066531977976869, 1083309306870413, 949807526259887, - 1314331007370083, - 1427467448173478, + 21888242871839275222246405745257275088548364400416034343698203249106993660771, + 21888242871839275222246405745257275088548364400416034343698203362243434464166, 183110929116019, 942383579383590, - 1339012762183926, - 1203405067792587, + 21888242871839275222246405745257275088548364400416034343698203273788748474614, + 21888242871839275222246405745257275088548364400416034343698203138181054083275, 766413559071960, - 2194743298273353, - 1745482880188768, - 1974349063912383, + 21888242871839275222246405745257275088548364400416034343698204129519284564041, + 21888242871839275222246405745257275088548364400416034343698203680258866479456, + 21888242871839275222246405745257275088548364400416034343698203909125050203071, 559612502719198, 1125411674167312, 990876712443891, 1075075804170988, 656465049838410, - 1418445005143821, - 1232679044453237, + 21888242871839275222246405745257275088548364400416034343698203353220991434509, + 21888242871839275222246405745257275088548364400416034343698203167455030743925, 783120716575472, - 2229850862177499, + 21888242871839275222246405745257275088548364400416034343698204164626848468187, 766003074763397, - 1461432841552701, - 2032124080554690, + 21888242871839275222246405745257275088548364400416034343698203396208827843389, + 21888242871839275222246405745257275088548364400416034343698203966900066845378, 173788925549742, 314290613039343, - 2005835734192448, + 21888242871839275222246405745257275088548364400416034343698203940611720483136, 224138538044889, - 2019039771792792, + 21888242871839275222246405745257275088548364400416034343698203953815758083480, 193616750230495, - 2197959263396877, + 21888242871839275222246405745257275088548364400416034343698204132735249687565, 341160035677637, - 1864642713023334, - 1808073637357514, - 1672528263542470, - 1783076330304424, + 21888242871839275222246405745257275088548364400416034343698203799418699314022, + 21888242871839275222246405745257275088548364400416034343698203742849623648202, + 21888242871839275222246405745257275088548364400416034343698203607304249833158, + 21888242871839275222246405745257275088548364400416034343698203717852316595112, 564450113584828, 411286764490711, 493395899083006, - 1170972593632354, + 21888242871839275222246405745257275088548364400416034343698203105748579923042, 639920044422556, 352541085540060, - 1960418744165080, - 1933143545972210, + 21888242871839275222246405745257275088548364400416034343698203895194730455768, + 21888242871839275222246405745257275088548364400416034343698203867919532262898, 176516004340839, - 1638246695670663, + 21888242871839275222246405745257275088548364400416034343698203573022681961351, 250902478268581, - 1940514753910238, - 1437686764014083, + 21888242871839275222246405745257275088548364400416034343698203875290740200926, + 21888242871839275222246405745257275088548364400416034343698203372462750304771, 133700599638782, - 2124868727326390, - 1646537700890259, + 21888242871839275222246405745257275088548364400416034343698204059644713617078, + 21888242871839275222246405745257275088548364400416034343698203581313687180947, 676329342632202, 781197161323610, - 1687431500807279, - 1198025851290411, + 21888242871839275222246405745257275088548364400416034343698203622207487097967, + 21888242871839275222246405745257275088548364400416034343698203132801837581099, 272237112364313, 126775182687090, 118083263257824, - 1672319164016744, + 21888242871839275222246405745257275088548364400416034343698203607095150307432, 513348754096580, - 1227495256986607, + 21888242871839275222246405745257275088548364400416034343698203162271243277295, 623261533739680, 821557598551837, - 1300235955884399, - 1847697980263914, + 21888242871839275222246405745257275088548364400416034343698203235011942175087, + 21888242871839275222246405745257275088548364400416034343698203782473966554602, 274997595143019, - 1835640843347866, + 21888242871839275222246405745257275088548364400416034343698203770416829638554, 711200556881402, 802494891634840, 175887102362651, - 1371284980521008, + 21888242871839275222246405745257275088548364400416034343698203306060966811696, 356889837329890, 426998894691447, 750882600917670, 390780903491512, 492607267032026, 957348614716662, - 2179086195196653, + 21888242871839275222246405745257275088548364400416034343698204113862181487341, 674670352420971, 685284541571234, - 1397766337906270, - 2075582562376418, - 1964065758158614, - 1960246167855348, - 2213115276448829, + 21888242871839275222246405745257275088548364400416034343698203332542324196958, + 21888242871839275222246405745257275088548364400416034343698204010358548667106, + 21888242871839275222246405745257275088548364400416034343698203898841744449302, + 21888242871839275222246405745257275088548364400416034343698203895022154146036, + 21888242871839275222246405745257275088548364400416034343698204147891262739517, 834121323699750, 557344863325872, 517595926659990, 917254635828342, - 2183573319199449, + 21888242871839275222246405745257275088548364400416034343698204118349305490137, 767932112698422, - 1661982061247868, + 21888242871839275222246405745257275088548364400416034343698203596758047538556, 203872584410278, - 2173338106661585, - 1872209294201537, - 2097436968599731, - 1721981738322445, + 21888242871839275222246405745257275088548364400416034343698204108114092952273, + 21888242871839275222246405745257275088548364400416034343698203806985280492225, + 21888242871839275222246405745257275088548364400416034343698204032212954890419, + 21888242871839275222246405745257275088548364400416034343698203656757724613133, 911127410034820, 954424727931601, - 2168561097228089, - 1458512050793477, + 21888242871839275222246405745257275088548364400416034343698204103337083518777, + 21888242871839275222246405745257275088548364400416034343698203393288037084165, 26878493930092, 508193970697557, - 2163140062004368, - 1701098142836890, - 2070054853040110, - 2075805053097206, - 2026490849151168, + 21888242871839275222246405745257275088548364400416034343698204097916048295056, + 21888242871839275222246405745257275088548364400416034343698203635874129127578, + 21888242871839275222246405745257275088548364400416034343698204004830839330798, + 21888242871839275222246405745257275088548364400416034343698204010581039387894, + 21888242871839275222246405745257275088548364400416034343698203961266835441856, 445227884801634, - 2094677775031039, + 21888242871839275222246405745257275088548364400416034343698204029453761321727, 975818296343097, - 1574334094482250, - 1505903096935415, - 1358360118375288, + 21888242871839275222246405745257275088548364400416034343698203509110080772938, + 21888242871839275222246405745257275088548364400416034343698203440679083226103, + 21888242871839275222246405745257275088548364400416034343698203293136104665976, 655032144871037, - 1697095244542701, - 1661839246588305, - 1717382221811593, + 21888242871839275222246405745257275088548364400416034343698203631871230833389, + 21888242871839275222246405745257275088548364400416034343698203596615232878993, + 21888242871839275222246405745257275088548364400416034343698203652158208102281, 809511191498488, 609371072131323, - 1650523295281382, + 21888242871839275222246405745257275088548364400416034343698203585299281572070, 530007392201873, - 1570334059515082, + 21888242871839275222246405745257275088548364400416034343698203505110045805770, 338136372773505, 124408090168291, - 1668573755331477, - 1848896175648848, - 1480431802827960, + 21888242871839275222246405745257275088548364400416034343698203603349741622165, + 21888242871839275222246405745257275088548364400416034343698203783672161939536, + 21888242871839275222246405745257275088548364400416034343698203415207789118648, 420478121853586, - 2014134004313935, - 1628900005002747, - 1325014753699278, + 21888242871839275222246405745257275088548364400416034343698203948909990604623, + 21888242871839275222246405745257275088548364400416034343698203563675991293435, + 21888242871839275222246405745257275088548364400416034343698203259790739989966, 404416746618059, 99043868565060, 655135181271752, - 1710775533251876, - 1432051119378095, + 21888242871839275222246405745257275088548364400416034343698203645551519542564, + 21888242871839275222246405745257275088548364400416034343698203366827105668783, 482855163087632, - 1659717080979547, + 21888242871839275222246405745257275088548364400416034343698203594493067270235, 898594077634880, - 1499788423340197, + 21888242871839275222246405745257275088548364400416034343698203434564409630885, 19127101025181, - 2085250425613500, - 2161881899779406, - 2210273409662877, - 1629569549965242, + 21888242871839275222246405745257275088548364400416034343698204020026411904188, + 21888242871839275222246405745257275088548364400416034343698204096657886070094, + 21888242871839275222246405745257275088548364400416034343698204145049395953565, + 21888242871839275222246405745257275088548364400416034343698203564345536255930, 430698322463543, - 1251933300869638, + 21888242871839275222246405745257275088548364400416034343698203186709287160326, 762732839328855, 831505430105939, - 1667356678067483, - 2155349398787739, - 2019085634578317, - 1750957529105349, - 1907444757638352, + 21888242871839275222246405745257275088548364400416034343698203602132664358171, + 21888242871839275222246405745257275088548364400416034343698204090125385078427, + 21888242871839275222246405745257275088548364400416034343698203953861620869005, + 21888242871839275222246405745257275088548364400416034343698203685733515396037, + 21888242871839275222246405745257275088548364400416034343698203842220743929040, 819912786460443, 290292807885633, - 2114172052178306, + 21888242871839275222246405745257275088548364400416034343698204048948038468994, 887451526778542, 277190934939863, 717161442606171, 1102578486397967, 964307344334230, - 2055869370635393, - 1423995800541617, - 1940879334806068, - 1897023835064484, - 1824694576047968, - 2211509272777888, - 2101723406612720, + 21888242871839275222246405745257275088548364400416034343698203990645356926081, + 21888242871839275222246405745257275088548364400416034343698203358771786832305, + 21888242871839275222246405745257275088548364400416034343698203875655321096756, + 21888242871839275222246405745257275088548364400416034343698203831799821355172, + 21888242871839275222246405745257275088548364400416034343698203759470562338656, + 21888242871839275222246405745257275088548364400416034343698204146285259068576, + 21888242871839275222246405745257275088548364400416034343698204036499392903408, 695428891794680, 1000130801696783, 737855537329376, - 1673624099100734, + 21888242871839275222246405745257275088548364400416034343698203608400085391422, 684533318338223, 246989066717716, - 1309049553824043, - 1238869473793966, - 1459761825454503, + 21888242871839275222246405745257275088548364400416034343698203243825540114731, + 21888242871839275222246405745257275088548364400416034343698203173645460084654, + 21888242871839275222246405745257275088548364400416034343698203394537811745191, 796663562664230, - 1931267088039428, - 1728279842224626, + 21888242871839275222246405745257275088548364400416034343698203866043074330116, + 21888242871839275222246405745257275088548364400416034343698203663055828515314, 893773273048654, - 1345569528190500, - 1784762307303026, + 21888242871839275222246405745257275088548364400416034343698203280345514481188, + 21888242871839275222246405745257275088548364400416034343698203719538293593714, 791632917005833, 7536641333223, 9495081657166, - 1298570392790217, + 21888242871839275222246405745257275088548364400416034343698203233346379080905, 190756900584188, 706702097962124, - 1196243043292015, + 21888242871839275222246405745257275088548364400416034343698203131019029582703, 570203557164911, 310762288897964, 78547769386725, 236262188854691, - 1533079559264807, + 21888242871839275222246405745257275088548364400416034343698203467855545555495, 15241179430456, 711599944714482, - 1380465231726956, - 1620224088209112, - 1614907110922908, - 1219696053270509, - 1434803258612953, - 1556406000767729, + 21888242871839275222246405745257275088548364400416034343698203315241218017644, + 21888242871839275222246405745257275088548364400416034343698203555000074499800, + 21888242871839275222246405745257275088548364400416034343698203549683097213596, + 21888242871839275222246405745257275088548364400416034343698203154472039561197, + 21888242871839275222246405745257275088548364400416034343698203369579244903641, + 21888242871839275222246405745257275088548364400416034343698203491181987058417, 283647170431839, 401723639919864, 1105092682098384, - 1275375444005095, - 2094919285220317, - 2088205805765126, + 21888242871839275222246405745257275088548364400416034343698203210151430295783, + 21888242871839275222246405745257275088548364400416034343698204029695271511005, + 21888242871839275222246405745257275088548364400416034343698204022981792055814, 994473484790594, - 1785836555018914, - 1462837508370160, + 21888242871839275222246405745257275088548364400416034343698203720612541309602, + 21888242871839275222246405745257275088548364400416034343698203397613494660848, 762695078739215, - 1251104360816905, - 1898486333799803, - 1470619514369524, - 1504368155821264, + 21888242871839275222246405745257275088548364400416034343698203185880347107593, + 21888242871839275222246405745257275088548364400416034343698203833262320090491, + 21888242871839275222246405745257275088548364400416034343698203405395500660212, + 21888242871839275222246405745257275088548364400416034343698203439144142111952, 393846301336022, - 1142058818866615, + 21888242871839275222246405745257275088548364400416034343698203076834805157303, 1025007408780007, - 1828919811727317, + 21888242871839275222246405745257275088548364400416034343698203763695798018005, 850305433220610, 1011437428672204, - 1835445583167371, + 21888242871839275222246405745257275088548364400416034343698203770221569458059, 723131969305298, - 1922424844478893, - 1134224963954545, + 21888242871839275222246405745257275088548364400416034343698203857200830769581, + 21888242871839275222246405745257275088548364400416034343698203069000950245233, 984578545049981, 559186623048929, - 2043168806720027, - 1234198647086725, + 21888242871839275222246405745257275088548364400416034343698203977944793010715, + 21888242871839275222246405745257275088548364400416034343698203168974633377413, 704323333696582, 952267322091708, 399791169758350, 340379817671400, - 1193254710331638, + 21888242871839275222246405745257275088548364400416034343698203128030696622326, 922655479081758, - 1943684945584649, - 1256857138839136, + 21888242871839275222246405745257275088548364400416034343698203878460931875337, + 21888242871839275222246405745257275088548364400416034343698203191633125129824, 892319318346669, 10639266628036, 1067340091975212, 1097817699683111, - 1241893768484091, + 21888242871839275222246405745257275088548364400416034343698203176669754774779, 625687489444558, - 1775745651435048, - 1673930932157117, + 21888242871839275222246405745257275088548364400416034343698203710521637725736, + 21888242871839275222246405745257275088548364400416034343698203608706918447805, 896690089476677, - 1701523851017219, + 21888242871839275222246405745257275088548364400416034343698203636299837307907, 968827196881944, - 1566252699791350, - 1924272187553905, - 1477067440296759, + 21888242871839275222246405745257275088548364400416034343698203501028686082038, + 21888242871839275222246405745257275088548364400416034343698203859048173844593, + 21888242871839275222246405745257275088548364400416034343698203411843426587447, 693215604800778, 86506751588752, 626935492307831, - 2021939559998654, - 1475831932351473, - 1585614881164353, - 1342280843438632, - 1447469846370797, - 2093986006579164, - 2040694381983616, + 21888242871839275222246405745257275088548364400416034343698203956715546289342, + 21888242871839275222246405745257275088548364400416034343698203410607918642161, + 21888242871839275222246405745257275088548364400416034343698203520390867455041, + 21888242871839275222246405745257275088548364400416034343698203277056829729320, + 21888242871839275222246405745257275088548364400416034343698203382245832661485, + 21888242871839275222246405745257275088548364400416034343698204028761992869852, + 21888242871839275222246405745257275088548364400416034343698203975470368274304, 1111765353628342, - 1513571306606444, - 1895591189276022, + 21888242871839275222246405745257275088548364400416034343698203448347292897132, + 21888242871839275222246405745257275088548364400416034343698203830367175566710, 398053992695234, 368340116341496, 16187654514398, - 1268197628963187, + 21888242871839275222246405745257275088548364400416034343698203202973615253875, 963617759041407, - 1864484253104619, + 21888242871839275222246405745257275088548364400416034343698203799260239395307, 184878181923622, - 2051600119654903, - 1377816126837558, + 21888242871839275222246405745257275088548364400416034343698203986376105945591, + 21888242871839275222246405745257275088548364400416034343698203312592113128246, 620082894820170, 682749611581912, 958546290379460, 30303714943787, 955868882860389, 262464558786607, - 1947355964609810, + 21888242871839275222246405745257275088548364400416034343698203882131950900498, 125506291094181, - 1511462231231700, - 1204792445102888, + 21888242871839275222246405745257275088548364400416034343698203446238217522388, + 21888242871839275222246405745257275088548364400416034343698203139568431393576, 1084948965671847, - 1172125477114955, + 21888242871839275222246405745257275088548364400416034343698203106901463405643, 483732337263583, - 1145437471887442, - 1986558139950464, + 21888242871839275222246405745257275088548364400416034343698203080213458178130, + 21888242871839275222246405745257275088548364400416034343698203921334126241152, 32218169153146, - 1419235999448587, + 21888242871839275222246405745257275088548364400416034343698203354011985739275, 889572605860741, 520993334642559, - 1136222533391131, - 1758801365683161, - 2210414897575111, + 21888242871839275222246405745257275088548364400416034343698203070998519681819, + 21888242871839275222246405745257275088548364400416034343698203693577351973849, + 21888242871839275222246405745257275088548364400416034343698204145190883865799, 463253033600966, 300072750745751, - 1659125980401316, + 21888242871839275222246405745257275088548364400416034343698203593901966692004, 767085083377826, 449008479624571, 956354027657618, - 1803743454676509, - 1987223108278802, - 1925575389381692, + 21888242871839275222246405745257275088548364400416034343698203738519440967197, + 21888242871839275222246405745257275088548364400416034343698203921999094569490, + 21888242871839275222246405745257275088548364400416034343698203860351375672380, 837487182719692, 77917027499663, 273872363341668, 453190208825821, - 1631090088641873, - 1738379471081963, - 1478304427493802, + 21888242871839275222246405745257275088548364400416034343698203565866074932561, + 21888242871839275222246405745257275088548364400416034343698203673155457372651, + 21888242871839275222246405745257275088548364400416034343698203413080413784490, 618972069157640, - 1247219627971429, - 1256342667234961, - 2016309843493228, - 1998099384487392, - 1150447785633078, + 21888242871839275222246405745257275088548364400416034343698203181995614262117, + 21888242871839275222246405745257275088548364400416034343698203191118653525649, + 21888242871839275222246405745257275088548364400416034343698203951085829783916, + 21888242871839275222246405745257275088548364400416034343698203932875370778080, + 21888242871839275222246405745257275088548364400416034343698203085223771923766, 889011337557862, 137040906486934, 135528825348783, 152994003006640, 375317780680790, - 1538087329734919, + 21888242871839275222246405745257275088548364400416034343698203472863316025607, 602696348346218, 1085046233228382, - 2174259865408317, - 1779577130903524, + 21888242871839275222246405745257275088548364400416034343698204109035851699005, + 21888242871839275222246405745257275088548364400416034343698203714353117194212, 1083409076135903, - 1171225063224759, - 1169222049990592, - 2075220040679683, - 2087805828204828, + 21888242871839275222246405745257275088548364400416034343698203106001049515447, + 21888242871839275222246405745257275088548364400416034343698203103998036281280, + 21888242871839275222246405745257275088548364400416034343698204009996026970371, + 21888242871839275222246405745257275088548364400416034343698204022581814495516, 471144135195442, - 1999638131178978, + 21888242871839275222246405745257275088548364400416034343698203934414117469666, 549642538402606, - 1829940970799811, + 21888242871839275222246405745257275088548364400416034343698203764716957090499, 316418104573493, 892889667608712, - 1186391549248093, + 21888242871839275222246405745257275088548364400416034343698203121167535538781, 725566026395352, 303950244274174, - 1343764862076587, - 1771639898802374, + 21888242871839275222246405745257275088548364400416034343698203278540848367275, + 21888242871839275222246405745257275088548364400416034343698203706415885093062, 237197544805704, - 1470783064792857, + 21888242871839275222246405745257275088548364400416034343698203405559051083545, 812338973318010, 77638353894586, 815517898219137, - 1523941897839205, + 21888242871839275222246405745257275088548364400416034343698203458717884129893, 254830187320060, - 2083910660506122, - 1798748464561095, - 1830662443760201, + 21888242871839275222246405745257275088548364400416034343698204018686646796810, + 21888242871839275222246405745257275088548364400416034343698203733524450851783, + 21888242871839275222246405745257275088548364400416034343698203765438430050889, 912064507610404, - 1887096913831893, + 21888242871839275222246405745257275088548364400416034343698203821872900122581, 598629630789852, - 1494138571019835, + 21888242871839275222246405745257275088548364400416034343698203428914557310523, 92851367911716, - 1655833829462760, - 1622154520549472, - 2160257161360452, - 1229850241485234, + 21888242871839275222246405745257275088548364400416034343698203590609815753448, + 21888242871839275222246405745257275088548364400416034343698203556930506840160, + 21888242871839275222246405745257275088548364400416034343698204095033147651140, + 21888242871839275222246405745257275088548364400416034343698203164626227775922, 303509640348375, - 1229103667385347, - 1906755261389569, - 1884881067906946, + 21888242871839275222246405745257275088548364400416034343698203163879653676035, + 21888242871839275222246405745257275088548364400416034343698203841531247680257, + 21888242871839275222246405745257275088548364400416034343698203819657054197634, 668595683854727, - 1786282707797169, + 21888242871839275222246405745257275088548364400416034343698203721058694087857, 560973730776772, - 1528123495077145, - 2114470163705797, + 21888242871839275222246405745257275088548364400416034343698203462899481367833, + 21888242871839275222246405745257275088548364400416034343698204049246149996485, 1082715665671577, 215484690410486, - 1594375048291991, + 21888242871839275222246405745257275088548364400416034343698203529151034582679, 238605569846413, - 2219316216787323, + 21888242871839275222246405745257275088548364400416034343698204154092203078011, 631892638130358, - 1416660157206573, - 1443008252258199, - 1655574675127083, + 21888242871839275222246405745257275088548364400416034343698203351436143497261, + 21888242871839275222246405745257275088548364400416034343698203377784238548887, + 21888242871839275222246405745257275088548364400416034343698203590350661417771, 288179251048724, 39988432588343, - 1955778274112873, - 2237235504975551, + 21888242871839275222246405745257275088548364400416034343698203890554260403561, + 21888242871839275222246405745257275088548364400416034343698204172011491266239, 214300044132756, 883721358776047, 611857941684898, 435459069799796, - 1689745584783454, + 21888242871839275222246405745257275088548364400416034343698203624521571074142, 341012256871915, 1000951657097494, 529867004030675, - 1266768941820205, - 1826642611700644, + 21888242871839275222246405745257275088548364400416034343698203201544928110893, + 21888242871839275222246405745257275088548364400416034343698203761418597991332, 805798073193465, - 1660389568913977, - 2145434534861316, + 21888242871839275222246405745257275088548364400416034343698203595165555204665, + 21888242871839275222246405745257275088548364400416034343698204080210521152004, 670255448101684, 154772923680045, 40560516307459, 250613896906092, - 1522673537602300, - 2143468949448695, - 1900945177055084, - 1869484590114891, + 21888242871839275222246405745257275088548364400416034343698203457449523892988, + 21888242871839275222246405745257275088548364400416034343698204078244935739383, + 21888242871839275222246405745257275088548364400416034343698203835721163345772, + 21888242871839275222246405745257275088548364400416034343698203804260576405579, 752216436785898, 1052385730202986, - 1893960129516637, - 1700000580492721, - 1987843936649458, + 21888242871839275222246405745257275088548364400416034343698203828736115807325, + 21888242871839275222246405745257275088548364400416034343698203634776566783409, + 21888242871839275222246405745257275088548364400416034343698203922619922940146, 797207266741200, 678295884173235, - 1779508139222604, + 21888242871839275222246405745257275088548364400416034343698203714284125513292, 1065088043345013, 521667838134751, - 1133450571671137, + 21888242871839275222246405745257275088548364400416034343698203068226557961825, 171588881772628, - 1492074017570243, + 21888242871839275222246405745257275088548364400416034343698203426850003860931, 96126319951529, - 1270927802100487, + 21888242871839275222246405745257275088548364400416034343698203205703788391175, 398797442427096, - 2099969870800817, - 1665223338365630, + 21888242871839275222246405745257275088548364400416034343698204034745857091505, + 21888242871839275222246405745257275088548364400416034343698203599999324656318, 864400809346082, - 1726937826913478, + 21888242871839275222246405745257275088548364400416034343698203661713813204166, 960139334415835, 1022914188741959, - 2098764667345415, + 21888242871839275222246405745257275088548364400416034343698204033540653636103, 757771488267193, 713068377543813, 78990119478542, - 2062536585199554, + 21888242871839275222246405745257275088548364400416034343698203997312571490242, 581633578430755, 998011955437995, 738225378112097, 1053262430988684, - 1812677650415536, - 1957353519080806, + 21888242871839275222246405745257275088548364400416034343698203747453636706224, + 21888242871839275222246405745257275088548364400416034343698203892129505371494, 277211783534541, 822882812521016, - 1489152341446931, - 2152388278215843, - 1530116987517606, + 21888242871839275222246405745257275088548364400416034343698203423928327737619, + 21888242871839275222246405745257275088548364400416034343698204087164264506531, + 21888242871839275222246405745257275088548364400416034343698203464892973808294, 363794990875740, 300780406311855, 5044432831138, - 1459364687024672, - 1799168708097592, - 1278548364814633, - 1477793026546374, - 2250305878946880, - 1156836897642480, + 21888242871839275222246405745257275088548364400416034343698203394140673315360, + 21888242871839275222246405745257275088548364400416034343698203733944694388280, + 21888242871839275222246405745257275088548364400416034343698203213324351105321, + 21888242871839275222246405745257275088548364400416034343698203412569012837062, + 21888242871839275222246405745257275088548364400416034343698204185081865237568, + 21888242871839275222246405745257275088548364400416034343698203091612883933168, 710545852469814, 627692035929158, 679298834514893, @@ -1946,1027 +1946,1027 @@ pub global CRP: [Polynomial; L] = [ 439974726263368, 101497476887979, 184057949428472, - 1331442692834897, + 21888242871839275222246405745257275088548364400416034343698203266218679125585, 60091156210798, - 1232325682695135, + 21888242871839275222246405745257275088548364400416034343698203167101668985823, 809170166044627, 557358308241415, - 2236416930584509, + 21888242871839275222246405745257275088548364400416034343698204171192916875197, 911808909775042, 837916817185072, - 2209936553175039, + 21888242871839275222246405745257275088548364400416034343698204144712539465727, 133714502252856, - 2103225369857255, + 21888242871839275222246405745257275088548364400416034343698204038001356147943, 359703899411247, 193613810107591, 1079499957539881, - 2169127762376137, - 1970461268842991, - 1328839866594727, - 1415336871807392, - 1738726146699572, + 21888242871839275222246405745257275088548364400416034343698204103903748666825, + 21888242871839275222246405745257275088548364400416034343698203905237255133679, + 21888242871839275222246405745257275088548364400416034343698203263615852885415, + 21888242871839275222246405745257275088548364400416034343698203350112858098080, + 21888242871839275222246405745257275088548364400416034343698203673502132990260, 944193423682844, - 1441524723226784, + 21888242871839275222246405745257275088548364400416034343698203376300709517472, 404123402998958, - 1473436750321902, - 1856979417016008, - 1697058283250158, - 1758635358366651, - 1226877365524412, - 2171177650819194, + 21888242871839275222246405745257275088548364400416034343698203408212736612590, + 21888242871839275222246405745257275088548364400416034343698203791755403306696, + 21888242871839275222246405745257275088548364400416034343698203631834269540846, + 21888242871839275222246405745257275088548364400416034343698203693411344657339, + 21888242871839275222246405745257275088548364400416034343698203161653351815100, + 21888242871839275222246405745257275088548364400416034343698204105953637109882, 232988764403048, - 2110581299682480, + 21888242871839275222246405745257275088548364400416034343698204045357285973168, 722634395931445, - 2117496089978066, + 21888242871839275222246405745257275088548364400416034343698204052272076268754, 376753647564784, - 2203576211426816, + 21888242871839275222246405745257275088548364400416034343698204138352197717504, 486013096111976, 780145425299315, 710239220345373, 452852198788097, - 1476998432020367, - 1747199377921217, + 21888242871839275222246405745257275088548364400416034343698203411774418311055, + 21888242871839275222246405745257275088548364400416034343698203681975364211905, 338624419614197, - 1690942288720027, + 21888242871839275222246405745257275088548364400416034343698203625718275010715, 755572281171446, 72347866994125, 793079832255978, - 1301435531447630, + 21888242871839275222246405745257275088548364400416034343698203236211517738318, 315297309136236, 775272529570621, 442655824649023, - 1790984228303307, - 1380614740584470, - 1491805851824023, - 1946505613036167, - 1938888836771975, + 21888242871839275222246405745257275088548364400416034343698203725760214593995, + 21888242871839275222246405745257275088548364400416034343698203315390726875158, + 21888242871839275222246405745257275088548364400416034343698203426581838114711, + 21888242871839275222246405745257275088548364400416034343698203881281599326855, + 21888242871839275222246405745257275088548364400416034343698203873664823062663, 978323155670737, 1077889246369316, - 2075879185318017, - 1619053309519012, - 2220064395927753, - 1681078689199209, + 21888242871839275222246405745257275088548364400416034343698204010655171608705, + 21888242871839275222246405745257275088548364400416034343698203553829295809700, + 21888242871839275222246405745257275088548364400416034343698204154840382218441, + 21888242871839275222246405745257275088548364400416034343698203615854675489897, 810134966653317, 500210547675797, 84561778560057, - 1731382161224731, - 1738400427048823, + 21888242871839275222246405745257275088548364400416034343698203666158147515419, + 21888242871839275222246405745257275088548364400416034343698203673176413339511, 1117345455592313, - 1982471089310621, - 1543858900486636, - 1844938702422927, + 21888242871839275222246405745257275088548364400416034343698203917247075601309, + 21888242871839275222246405745257275088548364400416034343698203478634886777324, + 21888242871839275222246405745257275088548364400416034343698203779714688713615, 1019185700672213, 483771391633211, - 2076131819592705, + 21888242871839275222246405745257275088548364400416034343698204010907805883393, 675583244528606, - 1159175517784074, + 21888242871839275222246405745257275088548364400416034343698203093951504074762, 350395340934992, 772913785177878, - 1529070239272345, + 21888242871839275222246405745257275088548364400416034343698203463846225563033, 432701544789349, - 1909963141379638, - 2121031380877567, - 1501349732564448, + 21888242871839275222246405745257275088548364400416034343698203844739127670326, + 21888242871839275222246405745257275088548364400416034343698204055807367168255, + 21888242871839275222246405745257275088548364400416034343698203436125718855136, 795866991518026, - 1270173081842337, - 2071490126118474, + 21888242871839275222246405745257275088548364400416034343698203204949068133025, + 21888242871839275222246405745257275088548364400416034343698204006266112409162, 799959686235561, 939582026956087, - 1564355172601641, + 21888242871839275222246405745257275088548364400416034343698203499131158892329, 512279969535027, - 1626404173927863, - 2241055378755556, - 1972669977387958, + 21888242871839275222246405745257275088548364400416034343698203561180160218551, + 21888242871839275222246405745257275088548364400416034343698204175831365046244, + 21888242871839275222246405745257275088548364400416034343698203907445963678646, 71045109600259, 237093407302788, 533845455448402, 429992133116183, - 1867452624714570, - 1460560313245542, - 2207642448254306, + 21888242871839275222246405745257275088548364400416034343698203802228611005258, + 21888242871839275222246405745257275088548364400416034343698203395336299536230, + 21888242871839275222246405745257275088548364400416034343698204142418434544994, 338953495202294, 89290219307401, 40307886185486, - 2015062137906770, + 21888242871839275222246405745257275088548364400416034343698203949838124197458, 337756411429927, - 2013338417281884, + 21888242871839275222246405745257275088548364400416034343698203948114403572572, 1114840078796985, - 2169046598857945, + 21888242871839275222246405745257275088548364400416034343698204103822585148633, 450258878469384, - 2156083271411491, + 21888242871839275222246405745257275088548364400416034343698204090859257702179, 484944854612625, 1088426087871904, - 1646903352032324, + 21888242871839275222246405745257275088548364400416034343698203581679338323012, 634087701786621, 222534187596986, - 1584350405803342, - 1177348858470084, - 2136906148257096, + 21888242871839275222246405745257275088548364400416034343698203519126392094030, + 21888242871839275222246405745257275088548364400416034343698203112124844760772, + 21888242871839275222246405745257275088548364400416034343698204071682134547784, 195431045127455, 692419028852112, 1066016641454397, 591374854737783, 550298483171437, 128361793356574, - 1599349413629890, - 1320503726153896, - 2079121167846808, + 21888242871839275222246405745257275088548364400416034343698203534125399920578, + 21888242871839275222246405745257275088548364400416034343698203255279712444584, + 21888242871839275222246405745257275088548364400416034343698204013897154137496, 482948547215267, - 1756000717445426, - 1426779485598727, + 21888242871839275222246405745257275088548364400416034343698203690776703736114, + 21888242871839275222246405745257275088548364400416034343698203361555471889415, 288517534350985, 722636700435571, 232555854934189, - 1436341390127922, - 1529511642788329, - 2060149726298541, + 21888242871839275222246405745257275088548364400416034343698203371117376418610, + 21888242871839275222246405745257275088548364400416034343698203464287629079017, + 21888242871839275222246405745257275088548364400416034343698203994925712589229, 563489655689829, 865502268396385, - 1664680176824684, - 1413674564485075, - 1502628451294049, - 1402864700517183, - 1995618867943186, - 1382158329146693, + 21888242871839275222246405745257275088548364400416034343698203599456163115372, + 21888242871839275222246405745257275088548364400416034343698203348450550775763, + 21888242871839275222246405745257275088548364400416034343698203437404437584737, + 21888242871839275222246405745257275088548364400416034343698203337640686807871, + 21888242871839275222246405745257275088548364400416034343698203930394854233874, + 21888242871839275222246405745257275088548364400416034343698203316934315437381, 902562252788353, 105677197955319, 695969646287500, - 1724989188765559, - 1647623336100242, + 21888242871839275222246405745257275088548364400416034343698203659765175056247, + 21888242871839275222246405745257275088548364400416034343698203582399322390930, 949298937989366, 436573249359919, 94263259753846, - 1167889991976769, - 1475939159509927, + 21888242871839275222246405745257275088548364400416034343698203102665978267457, + 21888242871839275222246405745257275088548364400416034343698203410715145800615, 450103156752297, - 2019733342345111, + 21888242871839275222246405745257275088548364400416034343698203954509328635799, 226377391887934, - 1336818471662564, + 21888242871839275222246405745257275088548364400416034343698203271594457953252, 63796469219652, - 1716552938361315, + 21888242871839275222246405745257275088548364400416034343698203651328924652003, 1076263057202774, 263592748453821, - 1133118093223324, - 1670515813308185, - 1549304386671334, - 1605925026487247, + 21888242871839275222246405745257275088548364400416034343698203067894079514012, + 21888242871839275222246405745257275088548364400416034343698203605291799598873, + 21888242871839275222246405745257275088548364400416034343698203484080372962022, + 21888242871839275222246405745257275088548364400416034343698203540701012777935, 1023135026826643, - 1402344384975138, + 21888242871839275222246405745257275088548364400416034343698203337120371265826, 782492612853779, 1077830867181566, - 1779465142565975, - 2093641927528148, - 2084290020934803, + 21888242871839275222246405745257275088548364400416034343698203714241128856663, + 21888242871839275222246405745257275088548364400416034343698204028417913818836, + 21888242871839275222246405745257275088548364400416034343698204019066007225491, 325571910124133, 406671394399745, - 1263516603491669, + 21888242871839275222246405745257275088548364400416034343698203198292589782357, 1058699847629321, - 2124198477248110, + 21888242871839275222246405745257275088548364400416034343698204058974463538798, 42994492233998, 943938813749930, 334385900762705, 257825095209772, - 1170009120655961, + 21888242871839275222246405745257275088548364400416034343698203104785106946649, 94305034210731, 240247196014827, 667269407180862, 840762704102426, - 1961931854401679, + 21888242871839275222246405745257275088548364400416034343698203896707840692367, 605608471717254, 636005592907688, - 2032691261240004, + 21888242871839275222246405745257275088548364400416034343698203967467247530692, 197331270625936, 513295656600691, - 1560340121332628, - 1608098078706764, - 1840842058900809, + 21888242871839275222246405745257275088548364400416034343698203495116107623316, + 21888242871839275222246405745257275088548364400416034343698203542874064997452, + 21888242871839275222246405745257275088548364400416034343698203775618045191497, 462575724806118, 61958761134339, 1114782483068782, - 1780820853428651, - 1927727212064755, + 21888242871839275222246405745257275088548364400416034343698203715596839719339, + 21888242871839275222246405745257275088548364400416034343698203862503198355443, 1110375874071092, 612804891712117, 889091875129392, - 1238235102721202, - 1833499795172580, - 1266198079326822, - 2223258888079030, - 2187647804135062, + 21888242871839275222246405745257275088548364400416034343698203173011089011890, + 21888242871839275222246405745257275088548364400416034343698203768275781463268, + 21888242871839275222246405745257275088548364400416034343698203200974065617510, + 21888242871839275222246405745257275088548364400416034343698204158034874369718, + 21888242871839275222246405745257275088548364400416034343698204122423790425750, 904899467172649, 107289422114745, 336888176891353, 208496417073510, 915415109006994, - 1631323743608993, + 21888242871839275222246405745257275088548364400416034343698203566099729899681, 529798469162737, - 1435907549686007, + 21888242871839275222246405745257275088548364400416034343698203370683535976695, 107683912129086, - 1713766766033240, - 1532740934484973, + 21888242871839275222246405745257275088548364400416034343698203648542752323928, + 21888242871839275222246405745257275088548364400416034343698203467516920775661, 423229651770285, 1111077313875399, - 1589360056500855, + 21888242871839275222246405745257275088548364400416034343698203524136042791543, 646967569975160, 326866932347675, - 1447813227502849, + 21888242871839275222246405745257275088548364400416034343698203382589213793537, 85523610875275, 821386659531724, 1007057968031073, - 1663995972887931, + 21888242871839275222246405745257275088548364400416034343698203598771959178619, 35302782179715, - 1990790266548111, + 21888242871839275222246405745257275088548364400416034343698203925566252838799, 680436355381996, - 1993156454258379, - 2130717986801608, + 21888242871839275222246405745257275088548364400416034343698203927932440549067, + 21888242871839275222246405745257275088548364400416034343698204065493973092296, 795555733542704, 20227279292638, 285921384720079, 608881548184620, - 2118464215320799, + 21888242871839275222246405745257275088548364400416034343698204053240201611487, 695692130979641, - 1486377757516707, + 21888242871839275222246405745257275088548364400416034343698203421153743807395, 343724080930301, - 1169939489828691, + 21888242871839275222246405745257275088548364400416034343698203104715476119379, 876699347859259, 878104207599136, 645274190254079, - 1443181916381158, + 21888242871839275222246405745257275088548364400416034343698203377957902671846, 655904540032008, 926684107216226, - 1949303667262754, + 21888242871839275222246405745257275088548364400416034343698203884079653553442, 569014182333018, - 2177702587728188, + 21888242871839275222246405745257275088548364400416034343698204112478574018876, 674543705071358, - 1854693762142561, - 2034218619988743, + 21888242871839275222246405745257275088548364400416034343698203789469748433249, + 21888242871839275222246405745257275088548364400416034343698203968994606279431, 205179143608193, 108716192417141, - 1921428301523177, - 1775556734235472, + 21888242871839275222246405745257275088548364400416034343698203856204287813865, + 21888242871839275222246405745257275088548364400416034343698203710332720526160, 413964805643909, 764481847755955, - 2218246781335906, - 1171313968914014, - 1988668563364570, - 1580701482843434, + 21888242871839275222246405745257275088548364400416034343698204153022767626594, + 21888242871839275222246405745257275088548364400416034343698203106089955204702, + 21888242871839275222246405745257275088548364400416034343698203923444549655258, + 21888242871839275222246405745257275088548364400416034343698203515477469134122, 291495839391159, - 1447732779169770, - 1456671624045911, - 1815405489156998, - 1520446078757071, - 1964442489284656, + 21888242871839275222246405745257275088548364400416034343698203382508765460458, + 21888242871839275222246405745257275088548364400416034343698203391447610336599, + 21888242871839275222246405745257275088548364400416034343698203750181475447686, + 21888242871839275222246405745257275088548364400416034343698203455222065047759, + 21888242871839275222246405745257275088548364400416034343698203899218475575344, 548230988268188, 747317165704003, - 1136317249130792, + 21888242871839275222246405745257275088548364400416034343698203071093235421480, 747937570652925, - 2092430764104070, + 21888242871839275222246405745257275088548364400416034343698204027206750394758, 620687505543716, - 1299721065292777, + 21888242871839275222246405745257275088548364400416034343698203234497051583465, 521902537648570, 173794717576122, - 1149286929251272, + 21888242871839275222246405745257275088548364400416034343698203084062915541960, 671531102726404, - 2163037648081292, - 1584740742255084, + 21888242871839275222246405745257275088548364400416034343698204097813634371980, + 21888242871839275222246405745257275088548364400416034343698203519516728545772, 807091226028353, - 2220577984545312, + 21888242871839275222246405745257275088548364400416034343698204155353970836000, 134651778500794, 35176581978343, - 1398028931059852, + 21888242871839275222246405745257275088548364400416034343698203332804917350540, 765285341042567, 677521335874046, - 1334560804889237, + 21888242871839275222246405745257275088548364400416034343698203269336791179925, 803825817429366, 135627053327719, 826286665662941, 1085244117486520, - 2178714401561302, - 1691335403924664, - 2248195555747426, - 1960543682198734, - 1475624912310341, + 21888242871839275222246405745257275088548364400416034343698204113490387851990, + 21888242871839275222246405745257275088548364400416034343698203626111390215352, + 21888242871839275222246405745257275088548364400416034343698204182971542038114, + 21888242871839275222246405745257275088548364400416034343698203895319668489422, + 21888242871839275222246405745257275088548364400416034343698203410400898601029, 774133379438783, 856610261938633, 315308510079525, 967917847971417, - 1258425065431418, - 1755041477204440, + 21888242871839275222246405745257275088548364400416034343698203193201051722106, + 21888242871839275222246405745257275088548364400416034343698203689817463495128, 1122281640045989, 853535078126058, - 1619817871567221, + 21888242871839275222246405745257275088548364400416034343698203554593857857909, 1038899553401954, - 1897966885507794, + 21888242871839275222246405745257275088548364400416034343698203832742871798482, 652812368489325, 717538291260258, - 1760490257193751, - 2131696378740913, - 2021398693397141, - 1137100825338841, + 21888242871839275222246405745257275088548364400416034343698203695266243484439, + 21888242871839275222246405745257275088548364400416034343698204066472365031601, + 21888242871839275222246405745257275088548364400416034343698203956174679687829, + 21888242871839275222246405745257275088548364400416034343698203071876811629529, 713819752264432, - 1342306893651217, - 2016452269703293, + 21888242871839275222246405745257275088548364400416034343698203277082879941905, + 21888242871839275222246405745257275088548364400416034343698203951228255993981, 946574787999999, - 2212953289509802, + 21888242871839275222246405745257275088548364400416034343698204147729275800490, 950911245659031, 259978925610960, 480685442767534, 875366833782357, 494095979931320, 467099612799796, - 2203435755272739, + 21888242871839275222246405745257275088548364400416034343698204138211741563427, 430434453940191, - 1145904482841112, - 1287348619675565, + 21888242871839275222246405745257275088548364400416034343698203080680469131800, + 21888242871839275222246405745257275088548364400416034343698203222124605966253, 1091406395753603, 247436727176861, - 1604998464826876, + 21888242871839275222246405745257275088548364400416034343698203539774451117564, 356953692114827, - 1739378718801010, + 21888242871839275222246405745257275088548364400416034343698203674154705091698, 1098592683148245, 109711691185570, - 2115588689508249, + 21888242871839275222246405745257275088548364400416034343698204050364675798937, 957722513763720, - 1321541042745955, + 21888242871839275222246405745257275088548364400416034343698203256317029036643, 842058111811134, 343811401212495, - 1279519958410087, - 1978170993661545, - 1965397568344909, + 21888242871839275222246405745257275088548364400416034343698203214295944700775, + 21888242871839275222246405745257275088548364400416034343698203912946979952233, + 21888242871839275222246405745257275088548364400416034343698203900173554635597, 1079001430372717, 1119695131812102, 81263996536748, - 1605949570006610, + 21888242871839275222246405745257275088548364400416034343698203540725556297298, 775341775958833, - 1673035427337150, - 1507255071325161, - 1855330835485449, + 21888242871839275222246405745257275088548364400416034343698203607811413627838, + 21888242871839275222246405745257275088548364400416034343698203442031057615849, + 21888242871839275222246405745257275088548364400416034343698203790106821776137, 346338317758571, - 2118944887086457, - 1256904982284317, - 2240668728232257, - 1709665491068873, - 1920725402530457, + 21888242871839275222246405745257275088548364400416034343698204053720873377145, + 21888242871839275222246405745257275088548364400416034343698203191680968575005, + 21888242871839275222246405745257275088548364400416034343698204175444714522945, + 21888242871839275222246405745257275088548364400416034343698203644441477359561, + 21888242871839275222246405745257275088548364400416034343698203855501388821145, 431852826303850, - 1149049861090699, - 1198134016197964, - 1417864571623891, - 1612515037944791, + 21888242871839275222246405745257275088548364400416034343698203083825847381387, + 21888242871839275222246405745257275088548364400416034343698203132910002488652, + 21888242871839275222246405745257275088548364400416034343698203352640557914579, + 21888242871839275222246405745257275088548364400416034343698203547291024235479, 161916754104175, 687845071421460, - 1293135716248505, - 1754915147498238, - 1873458293376860, - 1205095036926621, - 1783223435088449, - 1286118629738587, + 21888242871839275222246405745257275088548364400416034343698203227911702539193, + 21888242871839275222246405745257275088548364400416034343698203689691133788926, + 21888242871839275222246405745257275088548364400416034343698203808234279667548, + 21888242871839275222246405745257275088548364400416034343698203139871023217309, + 21888242871839275222246405745257275088548364400416034343698203717999421379137, + 21888242871839275222246405745257275088548364400416034343698203220894616029275, 930364621902372, 1054917495361047, 112848903395021, - 2128862729341973, + 21888242871839275222246405745257275088548364400416034343698204063638715632661, 445799600895729, - 1209014963489803, - 2167506950844500, + 21888242871839275222246405745257275088548364400416034343698203143790949780491, + 21888242871839275222246405745257275088548364400416034343698204102282937135188, 251007667297344, 967629142306012, 786133090157531, - 2244808975958563, - 1954813431596179, - 2106199834567394, - 1561710050260555, + 21888242871839275222246405745257275088548364400416034343698204179584962249251, + 21888242871839275222246405745257275088548364400416034343698203889589417886867, + 21888242871839275222246405745257275088548364400416034343698204040975820858082, + 21888242871839275222246405745257275088548364400416034343698203496486036551243, 1100181294001131, - 1725349832609857, - 1589362073958486, - 1954746818854537, - 1972899721901185, - 1567669309567228, - 1963389602566667, - 1206333621620506, - 1596808983784864, + 21888242871839275222246405745257275088548364400416034343698203660125818900545, + 21888242871839275222246405745257275088548364400416034343698203524138060249174, + 21888242871839275222246405745257275088548364400416034343698203889522805145225, + 21888242871839275222246405745257275088548364400416034343698203907675708191873, + 21888242871839275222246405745257275088548364400416034343698203502445295857916, + 21888242871839275222246405745257275088548364400416034343698203898165588857355, + 21888242871839275222246405745257275088548364400416034343698203141109607911194, + 21888242871839275222246405745257275088548364400416034343698203531584970075552, 801545525125383, 539625996126806, 236830392880017, 792186164009472, 573358331129254, - 1692438799246052, - 1451016616483028, + 21888242871839275222246405745257275088548364400416034343698203627214785536740, + 21888242871839275222246405745257275088548364400416034343698203385792602773716, 438803499618675, - 1611734394815631, - 1272031296868253, + 21888242871839275222246405745257275088548364400416034343698203546510381106319, + 21888242871839275222246405745257275088548364400416034343698203206807283158941, 864126904599732, 1125562673153675, - 1296645477347229, + 21888242871839275222246405745257275088548364400416034343698203231421463637917, 1124187395690655, 415008727302722, - 2224272655664847, + 21888242871839275222246405745257275088548364400416034343698204159048641955535, 580210061171549, - 1146658612551001, - 1175140365265995, - 1742876518274353, - 1579257395370338, + 21888242871839275222246405745257275088548364400416034343698203081434598841689, + 21888242871839275222246405745257275088548364400416034343698203109916351556683, + 21888242871839275222246405745257275088548364400416034343698203677652504565041, + 21888242871839275222246405745257275088548364400416034343698203514033381661026, 1039512548839725, 956411283393986, - 1503379490710779, + 21888242871839275222246405745257275088548364400416034343698203438155477001467, 1109345889759872, - 1372684822120794, + 21888242871839275222246405745257275088548364400416034343698203307460808411482, 825925267035009, - 1983178399667824, - 1896032162464731, - 1725954465159024, - 2189937418371774, + 21888242871839275222246405745257275088548364400416034343698203917954385958512, + 21888242871839275222246405745257275088548364400416034343698203830808148755419, + 21888242871839275222246405745257275088548364400416034343698203660730451449712, + 21888242871839275222246405745257275088548364400416034343698204124713404662462, 738093115936925, 338563566486509, - 1457182062606598, - 2162363195647307, + 21888242871839275222246405745257275088548364400416034343698203391958048897286, + 21888242871839275222246405745257275088548364400416034343698204097139181937995, 217019145671381, 140041630933148, 404910887039739, 614560535650274, 225015649590387, 260286479494064, - 1330152595463892, + 21888242871839275222246405745257275088548364400416034343698203264928581754580, 914368697531845, - 1912667947906532, - 1274053289733654, + 21888242871839275222246405745257275088548364400416034343698203847443934197220, + 21888242871839275222246405745257275088548364400416034343698203208829276024342, 253021075396156, - 2059877453993281, + 21888242871839275222246405745257275088548364400416034343698203994653440283969, 917431282784698, - 2042746505231590, + 21888242871839275222246405745257275088548364400416034343698203977522491522278, 621987615231101, - 1508637301144727, - 1884683164304796, + 21888242871839275222246405745257275088548364400416034343698203443413287435415, + 21888242871839275222246405745257275088548364400416034343698203819459150595484, 603896854695826, 581687620594233, - 1272045660591537, - 2229395149957937, + 21888242871839275222246405745257275088548364400416034343698203206821646882225, + 21888242871839275222246405745257275088548364400416034343698204164171136248625, 349598748707871, - 1454544521534142, - 1536508877237654, - 1790531453616148, + 21888242871839275222246405745257275088548364400416034343698203389320507824830, + 21888242871839275222246405745257275088548364400416034343698203471284863528342, + 21888242871839275222246405745257275088548364400416034343698203725307439906836, 784836811485905, 932740129070453, 555603407894076, - 1825758522234323, + 21888242871839275222246405745257275088548364400416034343698203760534508525011, 202643506380177, 441236705095458, - 1169232831261755, + 21888242871839275222246405745257275088548364400416034343698203104008817552443, 501524406308710, 1016953162676532, - 1316847277035487, + 21888242871839275222246405745257275088548364400416034343698203251623263326175, 367148790332068, 616466691289459, 179916606578944, 1043705268726067, 559480316754446, 625998043959953, - 1208651818598864, - 1327830468252594, - 2171494676163338, + 21888242871839275222246405745257275088548364400416034343698203143427804889552, + 21888242871839275222246405745257275088548364400416034343698203262606454543282, + 21888242871839275222246405745257275088548364400416034343698204106270662454026, 222721820608070, - 1820163951226254, - 2191365226953521, - 2084320479714331, - 1289659442423612, + 21888242871839275222246405745257275088548364400416034343698203754939937516942, + 21888242871839275222246405745257275088548364400416034343698204126141213244209, + 21888242871839275222246405745257275088548364400416034343698204019096466005019, + 21888242871839275222246405745257275088548364400416034343698203224435428714300, 683249699839753, 1088981062246560, 854139350308907, - 1171528317977033, - 1379415066602318, + 21888242871839275222246405745257275088548364400416034343698203106304304267721, + 21888242871839275222246405745257275088548364400416034343698203314191052893006, 534052843837949, 175937019447873, - 1268017967198222, + 21888242871839275222246405745257275088548364400416034343698203202793953488910, 740152455351962, 503670160078366, 57005805693337, - 1144920777652223, - 1610388728659156, + 21888242871839275222246405745257275088548364400416034343698203079696763942911, + 21888242871839275222246405745257275088548364400416034343698203545164714949844, 972358104815605, 294105346657132, 403708384341721, 950156589744080, 486452124897059, - 2206446974536998, + 21888242871839275222246405745257275088548364400416034343698204141222960827686, 412423087928577, 574423936224466, - 1717892575335194, + 21888242871839275222246405745257275088548364400416034343698203652668561625882, 501088951587306, - 1229918175598621, - 2100182069147592, - 1746040488853905, + 21888242871839275222246405745257275088548364400416034343698203164694161889309, + 21888242871839275222246405745257275088548364400416034343698204034958055438280, + 21888242871839275222246405745257275088548364400416034343698203680816475144593, 1055150659294022, 205931830705818, 572070284290112, - 2102627840932075, + 21888242871839275222246405745257275088548364400416034343698204037403827222763, 1042625956186330, - 1395425668564751, + 21888242871839275222246405745257275088548364400416034343698203330201654855439, 956723787498612, 673893058206867, - 1509326226678813, + 21888242871839275222246405745257275088548364400416034343698203444102212969501, 697860033346339, 1012027816426265, - 1184584913865939, - 1528354545802174, + 21888242871839275222246405745257275088548364400416034343698203119360900156627, + 21888242871839275222246405745257275088548364400416034343698203463130532092862, 197850814327907, - 2032268556017470, - 2015413980728615, + 21888242871839275222246405745257275088548364400416034343698203967044542308158, + 21888242871839275222246405745257275088548364400416034343698203950189967019303, 764110155186341, - 1469510531404416, - 1568982900858571, - 2219894850401805, - 1530246591892843, - 1949150110182150, - 2077289492683114, + 21888242871839275222246405745257275088548364400416034343698203404286517695104, + 21888242871839275222246405745257275088548364400416034343698203503758887149259, + 21888242871839275222246405745257275088548364400416034343698204154670836692493, + 21888242871839275222246405745257275088548364400416034343698203465022578183531, + 21888242871839275222246405745257275088548364400416034343698203883926096472838, + 21888242871839275222246405745257275088548364400416034343698204012065478973802, 185428757312886, - 1495781603713048, - 1364268560247971, + 21888242871839275222246405745257275088548364400416034343698203430557590003736, + 21888242871839275222246405745257275088548364400416034343698203299044546538659, 43092780399787, 578963373268612, - 1400307329811927, + 21888242871839275222246405745257275088548364400416034343698203335083316102615, 779922482790840, 802576530544143, 154860693106144, 679326562434689, - 2095562200560647, + 21888242871839275222246405745257275088548364400416034343698204030338186851335, 581753929933113, 699105509546808, - 1856150099332853, + 21888242871839275222246405745257275088548364400416034343698203790926085623541, 63230268914058, 144846275876885, - 2212026483799676, + 21888242871839275222246405745257275088548364400416034343698204146802470090364, 663050209659130, - 1826771298069077, + 21888242871839275222246405745257275088548364400416034343698203761547284359765, 1122193153545508, 939352245237852, 39541268257188, 1011564415779340, - 2223276067320127, + 21888242871839275222246405745257275088548364400416034343698204158052053610815, 70976814038346, 140825085838009, 675002218252102, - 1248965506855913, - 2014359221544349, - 2167180275363181, + 21888242871839275222246405745257275088548364400416034343698203183741493146601, + 21888242871839275222246405745257275088548364400416034343698203949135207835037, + 21888242871839275222246405745257275088548364400416034343698204101956261653869, 98021861821739, - 1417369392785740, - 2085141850144362, - 1801380083984143, - 2018011609172677, + 21888242871839275222246405745257275088548364400416034343698203352145379076428, + 21888242871839275222246405745257275088548364400416034343698204019917836435050, + 21888242871839275222246405745257275088548364400416034343698203736156070274831, + 21888242871839275222246405745257275088548364400416034343698203952787595463365, 1047366908261377, - 1540999004447754, + 21888242871839275222246405745257275088548364400416034343698203475774990738442, 783804023191364, - 1225513726216500, + 21888242871839275222246405745257275088548364400416034343698203160289712507188, 95859904040444, 736298948755886, 792249279263197, - 2128994813166788, + 21888242871839275222246405745257275088548364400416034343698204063770799457476, 847321330313797, - 1512601190381581, - 2144610156507037, + 21888242871839275222246405745257275088548364400416034343698203447377176672269, + 21888242871839275222246405745257275088548364400416034343698204079386142797725, 872318929662915, - 2039461726038750, + 21888242871839275222246405745257275088548364400416034343698203974237712329438, 897805900581005, - 1597307324697328, - 1780428997124496, + 21888242871839275222246405745257275088548364400416034343698203532083310988016, + 21888242871839275222246405745257275088548364400416034343698203715204983415184, 578494406424288, 488459327868728, - 2019514870616901, + 21888242871839275222246405745257275088548364400416034343698203954290856907589, 1058397626603802, 959965837336040, 1084923667866677, - 1874275106919688, - 1608665243977335, - 1261378403044767, - 1841120369702905, + 21888242871839275222246405745257275088548364400416034343698203809051093210376, + 21888242871839275222246405745257275088548364400416034343698203543441230268023, + 21888242871839275222246405745257275088548364400416034343698203196154389335455, + 21888242871839275222246405745257275088548364400416034343698203775896355993593, 351311500380042, 59040296383005, - 1713799220451886, + 21888242871839275222246405745257275088548364400416034343698203648575206742574, 264944823773764, - 1826002404787695, + 21888242871839275222246405745257275088548364400416034343698203760778391078383, 930890807128277, 15803235711366, 55367894050916, 365932803769317, 648160907218515, 123099714293438, - 2058020471236605, + 21888242871839275222246405745257275088548364400416034343698203992796457527293, 681660814267130, 683770995078609, 800458001351654, - 1191311497779426, + 21888242871839275222246405745257275088548364400416034343698203126087484070114, 1038012246465924, - 1414695268368371, + 21888242871839275222246405745257275088548364400416034343698203349471254659059, 425495796972922, 699877224006658, - 1825884180914836, - 1997603724036557, + 21888242871839275222246405745257275088548364400416034343698203760660167205524, + 21888242871839275222246405745257275088548364400416034343698203932379710327245, 879142235017656, 349819824986449, 328079363040665, 194806282866458, 626987545448166, 985729327461685, - 1902262125884858, + 21888242871839275222246405745257275088548364400416034343698203837038112175546, 182839837732094, 941587538380802, - 2034347845476744, + 21888242871839275222246405745257275088548364400416034343698203969123831767432, 21708719731475, - 2015799118584789, + 21888242871839275222246405745257275088548364400416034343698203950575104875477, 776024463434655, 1019598590731068, - 1839277465091360, - 1525090615344435, + 21888242871839275222246405745257275088548364400416034343698203774053451382048, + 21888242871839275222246405745257275088548364400416034343698203459866601635123, 369738468600396, 17733233850303, - 1309067113935528, + 21888242871839275222246405745257275088548364400416034343698203243843100226216, 971918601698852, - 1944829927776128, - 1887610851522903, + 21888242871839275222246405745257275088548364400416034343698203879605914066816, + 21888242871839275222246405745257275088548364400416034343698203822386837813591, 620653207596893, - 1488628532473985, - 1365390118119522, + 21888242871839275222246405745257275088548364400416034343698203423404518764673, + 21888242871839275222246405745257275088548364400416034343698203300166104410210, 587699399785754, - 1278949157928500, - 1766975022624648, + 21888242871839275222246405745257275088548364400416034343698203213725144219188, + 21888242871839275222246405745257275088548364400416034343698203701751008915336, 10853250564942, 1049798965566456, - 1772870283646699, - 2128313857735317, - 1282881254472781, - 1550120661345223, + 21888242871839275222246405745257275088548364400416034343698203707646269937387, + 21888242871839275222246405745257275088548364400416034343698204063089844026005, + 21888242871839275222246405745257275088548364400416034343698203217657240763469, + 21888242871839275222246405745257275088548364400416034343698203484896647635911, 601900314308513, 683260531167120, 989363210006189, 181355591674059, 1099732509823466, - 1494854725329880, + 21888242871839275222246405745257275088548364400416034343698203429630711620568, 1032837777897856, - 1996041909832667, - 1353778011030755, - 1281039698738956, - 1497947780198673, - 1500534987826277, - 1843494019174038, + 21888242871839275222246405745257275088548364400416034343698203930817896123355, + 21888242871839275222246405745257275088548364400416034343698203288553997321443, + 21888242871839275222246405745257275088548364400416034343698203215815685029644, + 21888242871839275222246405745257275088548364400416034343698203432723766489361, + 21888242871839275222246405745257275088548364400416034343698203435310974116965, + 21888242871839275222246405745257275088548364400416034343698203778270005464726, 287429054062537, - 2246565342595906, - 1260131838482613, - 2063026349976660, + 21888242871839275222246405745257275088548364400416034343698204181341328886594, + 21888242871839275222246405745257275088548364400416034343698203194907824773301, + 21888242871839275222246405745257275088548364400416034343698203997802336267348, 173322926390809, - 1231283603351529, - 1788291216234358, - 1325496138212861, - 1636426404321672, - 1878214861657628, - 1919275361822211, + 21888242871839275222246405745257275088548364400416034343698203166059589642217, + 21888242871839275222246405745257275088548364400416034343698203723067202525046, + 21888242871839275222246405745257275088548364400416034343698203260272124503549, + 21888242871839275222246405745257275088548364400416034343698203571202390612360, + 21888242871839275222246405745257275088548364400416034343698203812990847948316, + 21888242871839275222246405745257275088548364400416034343698203854051348112899, 1010983846687255, 1094768564535777, - 1858494098311669, + 21888242871839275222246405745257275088548364400416034343698203793270084602357, 539965234778085, 111691099697439, - 2190591373544072, + 21888242871839275222246405745257275088548364400416034343698204125367359834760, 122004034950284, - 1201657296794036, - 1693153258887820, + 21888242871839275222246405745257275088548364400416034343698203136433283084724, + 21888242871839275222246405745257275088548364400416034343698203627929245178508, 508674194103944, 874801987291031, 413469690635355, - 1558098997023178, - 1768799728973565, + 21888242871839275222246405745257275088548364400416034343698203492874983313866, + 21888242871839275222246405745257275088548364400416034343698203703575715264253, 1092368134492853, 308185773384668, - 2158337555323922, - 1186839375501882, + 21888242871839275222246405745257275088548364400416034343698204093113541614610, + 21888242871839275222246405745257275088548364400416034343698203121615361792570, 841758798779519, - 1175400841878246, + 21888242871839275222246405745257275088548364400416034343698203110176828168934, 12262207234743, - 1966265474379416, + 21888242871839275222246405745257275088548364400416034343698203901041460670104, 415486038001184, 155931203037309, - 1351445343313165, + 21888242871839275222246405745257275088548364400416034343698203286221329603853, 280116889150184, 701391074771389, - 1264451744474358, + 21888242871839275222246405745257275088548364400416034343698203199227730765046, 770529289648320, - 1418826301046617, + 21888242871839275222246405745257275088548364400416034343698203353602287337305, 678442580047708, 75796841289135, - 1360806569103562, + 21888242871839275222246405745257275088548364400416034343698203295582555394250, 41544330330215, - 2157610298265189, + 21888242871839275222246405745257275088548364400416034343698204092386284555877, 497598574491414, 357903738667520, - 2090137922564756, - 2086480312236661, + 21888242871839275222246405745257275088548364400416034343698204024913908855444, + 21888242871839275222246405745257275088548364400416034343698204021256298527349, 419055984129041, 827315159988629, 285434071399602, - 1682636368567291, + 21888242871839275222246405745257275088548364400416034343698203617412354857979, 343218703845743, - 1697486579711350, - 2096940310375245, + 21888242871839275222246405745257275088548364400416034343698203632262566002038, + 21888242871839275222246405745257275088548364400416034343698204031716296665933, 760670584160119, 272735515467664, 371411758646980, 428252304742253, - 2120910184071105, - 1205668570669389, + 21888242871839275222246405745257275088548364400416034343698204055686170361793, + 21888242871839275222246405745257275088548364400416034343698203140444556960077, 692969846984450, 772591503385732, - 1398934760945349, + 21888242871839275222246405745257275088548364400416034343698203333710747236037, 313461065559119, - 1896478103040502, - 1156440544467936, + 21888242871839275222246405745257275088548364400416034343698203831254089331190, + 21888242871839275222246405745257275088548364400416034343698203091216530758624, 107766000699741, - 1908205347493149, + 21888242871839275222246405745257275088548364400416034343698203842981333783837, 194304256422453, - 1739300310941876, + 21888242871839275222246405745257275088548364400416034343698203674076297232564, 552143487560555, 860766893167856, - 1812927345343786, + 21888242871839275222246405745257275088548364400416034343698203747703331634474, 834808087481318, 893995103955088, - 2034364094080090, - 1801687172372595, + 21888242871839275222246405745257275088548364400416034343698203969140080370778, + 21888242871839275222246405745257275088548364400416034343698203736463158663283, 794255445276253, - 1347284351099271, - 1571681604265597, - 1432350276998022, + 21888242871839275222246405745257275088548364400416034343698203282060337389959, + 21888242871839275222246405745257275088548364400416034343698203506457590556285, + 21888242871839275222246405745257275088548364400416034343698203367126263288710, 418595165452616, 471104930317834, - 1530536408585646, - 2040077494987621, - 1333218545252687, + 21888242871839275222246405745257275088548364400416034343698203465312394876334, + 21888242871839275222246405745257275088548364400416034343698203974853481278309, + 21888242871839275222246405745257275088548364400416034343698203267994531543375, 583605703177893, - 1172826015220296, - 1674327326903266, + 21888242871839275222246405745257275088548364400416034343698203107602001510984, + 21888242871839275222246405745257275088548364400416034343698203609103313193954, 117203671940793, 272038835085649, 534085056015829, - 1643361780425775, - 1634187655178674, + 21888242871839275222246405745257275088548364400416034343698203578137766716463, + 21888242871839275222246405745257275088548364400416034343698203568963641469362, 921703284411898, 895288815668274, - 1340741701187216, + 21888242871839275222246405745257275088548364400416034343698203275517687477904, 829519917386679, 836358441426712, 51224227690039, - 1780383146407165, - 2054592769222841, + 21888242871839275222246405745257275088548364400416034343698203715159132697853, + 21888242871839275222246405745257275088548364400416034343698203989368755513529, 398823678563552, - 1549999718508094, + 21888242871839275222246405745257275088548364400416034343698203484775704798782, 451671989747634, 637948517295113, - 1513780832730524, - 1659506640196712, - 1264232874930927, + 21888242871839275222246405745257275088548364400416034343698203448556819021212, + 21888242871839275222246405745257275088548364400416034343698203594282626487400, + 21888242871839275222246405745257275088548364400416034343698203199008861221615, 988049141445305, 187525957787060, - 1286736912432754, + 21888242871839275222246405745257275088548364400416034343698203221512898723442, 355476087864380, - 1379402123216500, - 1226622472387436, + 21888242871839275222246405745257275088548364400416034343698203314178109507188, + 21888242871839275222246405745257275088548364400416034343698203161398458678124, 327162504416888, 89162291940000, 1088014914680316, - 1580548839494382, + 21888242871839275222246405745257275088548364400416034343698203515324825785070, 676472690047601, - 1508198985415652, + 21888242871839275222246405745257275088548364400416034343698203442974971706340, 703814167016493, 398721534910968, - 2172255509086604, - 1321304601540399, + 21888242871839275222246405745257275088548364400416034343698204107031495377292, + 21888242871839275222246405745257275088548364400416034343698203256080587831087, 34346769473971, - 1538564388306717, - 1956534800105569, + 21888242871839275222246405745257275088548364400416034343698203473340374597405, + 21888242871839275222246405745257275088548364400416034343698203891310786396257, 616333054701073, - 1518387044185840, + 21888242871839275222246405745257275088548364400416034343698203453163030476528, 289568212361016, - 1775058531819410, + 21888242871839275222246405745257275088548364400416034343698203709834518110098, 715983062079897, - 1527748642018813, - 1579663183520585, - 1510217900626426, + 21888242871839275222246405745257275088548364400416034343698203462524628309501, + 21888242871839275222246405745257275088548364400416034343698203514439169811273, + 21888242871839275222246405745257275088548364400416034343698203444993886917114, 570312337477030, 352442154949831, - 1734654626108485, - 1894947597512518, + 21888242871839275222246405745257275088548364400416034343698203669430612399173, + 21888242871839275222246405745257275088548364400416034343698203829723583803206, 562031068798658, 507105156533859, 1010343150732678, - 1986773362523452, - 1530180504450454, + 21888242871839275222246405745257275088548364400416034343698203921549348814140, + 21888242871839275222246405745257275088548364400416034343698203464956490741142, 32081571198584, 246878562765029, - 1213667198934805, - 1920616273225657, + 21888242871839275222246405745257275088548364400416034343698203148443185225493, + 21888242871839275222246405745257275088548364400416034343698203855392259516345, 671500032342848, - 1344664320947344, + 21888242871839275222246405745257275088548364400416034343698203279440307238032, 537849827551039, - 1823575322289061, + 21888242871839275222246405745257275088548364400416034343698203758351308579749, 648115835453213, 759325901732554, 785740971584487, - 1615725079080721, + 21888242871839275222246405745257275088548364400416034343698203550501065371409, 306345297110852, 377987136208425, - 1713521704550698, + 21888242871839275222246405745257275088548364400416034343698203648297690841386, 203371197767066, 496409198534766, - 1277303937741481, + 21888242871839275222246405745257275088548364400416034343698203212079924032169, 334971637883839, - 1736629388814993, - 2156425496382470, - 1631508904808728, - 1271079349696470, + 21888242871839275222246405745257275088548364400416034343698203671405375105681, + 21888242871839275222246405745257275088548364400416034343698204091201482673158, + 21888242871839275222246405745257275088548364400416034343698203566284891099416, + 21888242871839275222246405745257275088548364400416034343698203205855335987158, 553700281304885, - 2102263984794873, + 21888242871839275222246405745257275088548364400416034343698204037039971085561, 218949782372019, - 1630927452362327, + 21888242871839275222246405745257275088548364400416034343698203565703438653015, 962376931831807, 195401564682592, 981103333476105, - 2202745118799411, - 1870941869529751, + 21888242871839275222246405745257275088548364400416034343698204137521105090099, + 21888242871839275222246405745257275088548364400416034343698203805717855820439, 861201918079077, - 2212712709940361, - 1894897975321094, + 21888242871839275222246405745257275088548364400416034343698204147488696231049, + 21888242871839275222246405745257275088548364400416034343698203829673961611782, 923722473684577, 573301307617513, - 1614086155009315, + 21888242871839275222246405745257275088548364400416034343698203548862141300003, 744433798563916, - 1426148890489345, + 21888242871839275222246405745257275088548364400416034343698203360924876780033, 98420797976220, 600078286899187, - 1490111023314623, - 2215722607341462, + 21888242871839275222246405745257275088548364400416034343698203424887009605311, + 21888242871839275222246405745257275088548364400416034343698204150498593632150, 185235595723201, 518533657257042, 666426450533644, 140223554530466, - 1939882764277787, - 1715300518723057, - 1698676564706873, + 21888242871839275222246405745257275088548364400416034343698203874658750568475, + 21888242871839275222246405745257275088548364400416034343698203650076505013745, + 21888242871839275222246405745257275088548364400416034343698203633452550997561, 347236536022950, - 1189942541905841, + 21888242871839275222246405745257275088548364400416034343698203124718528196529, 722596534546326, 744938992071008, - 1913784097634324, - 1164043569150134, - 1171829128062523, - 1901035795755905, + 21888242871839275222246405745257275088548364400416034343698203848560083925012, + 21888242871839275222246405745257275088548364400416034343698203098819555440822, + 21888242871839275222246405745257275088548364400416034343698203106605114353211, + 21888242871839275222246405745257275088548364400416034343698203835811782046593, 286092533522816, - 1877621277225764, + 21888242871839275222246405745257275088548364400416034343698203812397263516452, 421115471046525, 375376956380298, - 1560987446259364, + 21888242871839275222246405745257275088548364400416034343698203495763432550052, 514549824917865, 992880393467036, 998066623243163, 696698933378004, 150294912475229, - 1519637719479479, - 1602183415167374, + 21888242871839275222246405745257275088548364400416034343698203454413705770167, + 21888242871839275222246405745257275088548364400416034343698203536959401458062, 95689579338997, - 2037172768612482, + 21888242871839275222246405745257275088548364400416034343698203971948754903170, 458755873115738, 721445420482816, - 1258021927558479, + 21888242871839275222246405745257275088548364400416034343698203192797913849167, 1107161298417931, 696170369620480, 292732714999116, - 1959256263841489, + 21888242871839275222246405745257275088548364400416034343698203894032250132177, 902923352928186, - 1766541466882893, - 1412741563184046, - 1614323203134112, - 2158933098936751, + 21888242871839275222246405745257275088548364400416034343698203701317453173581, + 21888242871839275222246405745257275088548364400416034343698203347517549474734, + 21888242871839275222246405745257275088548364400416034343698203549099189424800, + 21888242871839275222246405745257275088548364400416034343698204093709085227439, 93465703317348, - 1868256520539990, + 21888242871839275222246405745257275088548364400416034343698203803032506830678, 872316214145710, 301740770999565, - 1476110096179856, + 21888242871839275222246405745257275088548364400416034343698203410886082470544, 723394666794327, - 1459758543561519, - 2177652587769470, + 21888242871839275222246405745257275088548364400416034343698203394534529852207, + 21888242871839275222246405745257275088548364400416034343698204112428574060158, 469628045418244, 836290833971701, - 1346239927539915, - 2028528784670696, - 1334147810723932, + 21888242871839275222246405745257275088548364400416034343698203281015913830603, + 21888242871839275222246405745257275088548364400416034343698203963304770961384, + 21888242871839275222246405745257275088548364400416034343698203268923797014620, 646175534136241, - 1661629391906102, - 2126660652547641, - 1348096089616757, + 21888242871839275222246405745257275088548364400416034343698203596405378196790, + 21888242871839275222246405745257275088548364400416034343698204061436638838329, + 21888242871839275222246405745257275088548364400416034343698203282872075907445, 811159209464500, 91826615119363, 560417110310099, - 1170741423655876, + 21888242871839275222246405745257275088548364400416034343698203105517409946564, 49800462037626, - 2029509788561056, + 21888242871839275222246405745257275088548364400416034343698203964285774851744, 617633438253345, 1094142216793784, - 1883333174180648, - 1608324234448425, - 1604942178582213, + 21888242871839275222246405745257275088548364400416034343698203818109160471336, + 21888242871839275222246405745257275088548364400416034343698203543100220739113, + 21888242871839275222246405745257275088548364400416034343698203539718164872901, 157153870116035, 850547252923416, - 1537234210948130, - 2230512170539213, + 21888242871839275222246405745257275088548364400416034343698203472010197238818, + 21888242871839275222246405745257275088548364400416034343698204165288156829901, 745098698680169, 644888274041801, 258704280476796, - 1616138007681663, - 1364991181729276, + 21888242871839275222246405745257275088548364400416034343698203550913993972351, + 21888242871839275222246405745257275088548364400416034343698203299767168019964, 1054737539338484, 622749081818631, 400266567601623, - 2035552453933268, - 1534387902673746, - 1231830893707946, + 21888242871839275222246405745257275088548364400416034343698203970328440223956, + 21888242871839275222246405745257275088548364400416034343698203469163888964434, + 21888242871839275222246405745257275088548364400416034343698203166606879998634, 269044539857080, - 1696387898419597, - 1242734838751815, - 1169546641313434, - 1377876538082754, - 1176782956404693, - 1525398272597526, + 21888242871839275222246405745257275088548364400416034343698203631163884710285, + 21888242871839275222246405745257275088548364400416034343698203177510825042503, + 21888242871839275222246405745257275088548364400416034343698203104322627604122, + 21888242871839275222246405745257275088548364400416034343698203312652524373442, + 21888242871839275222246405745257275088548364400416034343698203111558942695381, + 21888242871839275222246405745257275088548364400416034343698203460174258888214, 460840520439709, 895615201952525, - 1572092158408675, - 1729991105478895, - 1958014647452720, - 2015631891341825, + 21888242871839275222246405745257275088548364400416034343698203506868144699363, + 21888242871839275222246405745257275088548364400416034343698203664767091769583, + 21888242871839275222246405745257275088548364400416034343698203892790633743408, + 21888242871839275222246405745257275088548364400416034343698203950407877632513, 756843127401424, - 1623842746876249, + 21888242871839275222246405745257275088548364400416034343698203558618733166937, 904263326706532, 282177530509279, 586333755465877, - 1743198113428173, + 21888242871839275222246405745257275088548364400416034343698203677974099718861, 795809752499259, - 2023696330318979, - 2177607182854508, - 1649274594792055, - 1939525257259198, + 21888242871839275222246405745257275088548364400416034343698203958472316609667, + 21888242871839275222246405745257275088548364400416034343698204112383169145196, + 21888242871839275222246405745257275088548364400416034343698203584050581082743, + 21888242871839275222246405745257275088548364400416034343698203874301243549886, 1105385820283247, - 1723484056672128, + 21888242871839275222246405745257275088548364400416034343698203658260042962816, 755157584607940, 330975757127126, 186992482794029, - 2047368986633825, - 1777846124175468, - 2125676806027904, + 21888242871839275222246405745257275088548364400416034343698203982144972924513, + 21888242871839275222246405745257275088548364400416034343698203712622110466156, + 21888242871839275222246405745257275088548364400416034343698204060452792318592, 294216877916276, - 1651347274765115, + 21888242871839275222246405745257275088548364400416034343698203586123261055803, 421470829242217, 1122081591323831, 897856529452235, 740555054129354, - 2017233989023715, - 1569432879253182, + 21888242871839275222246405745257275088548364400416034343698203952009975314403, + 21888242871839275222246405745257275088548364400416034343698203504208865543870, 1070779357309368, - 1127213753619872, + 21888242871839275222246405745257275088548364400416034343698203061989739910560, 945592063513560, - 2102298213783720, + 21888242871839275222246405745257275088548364400416034343698204037074200074408, 557793662987315, - 1940762391580351, - 2012517721610960, + 21888242871839275222246405745257275088548364400416034343698203875538377871039, + 21888242871839275222246405745257275088548364400416034343698203947293707901648, 650524837888927, 21325773442099, 411812483610810, - 1755866805741134, - 1711446689575691, + 21888242871839275222246405745257275088548364400416034343698203690642792031822, + 21888242871839275222246405745257275088548364400416034343698203646222675866379, 904686077794486, - 2248766101495635, + 21888242871839275222246405745257275088548364400416034343698204183542087786323, 258464831772240, - 1154214783964045, + 21888242871839275222246405745257275088548364400416034343698203088990770254733, 814316754398855, 725368467743790, 813398862284365, - 1925883984467348, + 21888242871839275222246405745257275088548364400416034343698203860659970758036, 987027405840255, - 2045524000532712, - 1588082837838024, - 1516681180544937, - 1432104846103963, + 21888242871839275222246405745257275088548364400416034343698203980299986823400, + 21888242871839275222246405745257275088548364400416034343698203522858824128712, + 21888242871839275222246405745257275088548364400416034343698203451457166835625, + 21888242871839275222246405745257275088548364400416034343698203366880832394651, 949871073371276, 476637055867834, - 1229968779631178, - 1622161152978173, - 1457708650354931, + 21888242871839275222246405745257275088548364400416034343698203164744765921866, + 21888242871839275222246405745257275088548364400416034343698203556937139268861, + 21888242871839275222246405745257275088548364400416034343698203392484636645619, 933754006711731, 1051171500163394, 509381578887589, - 1469274538242454, - 1431512821607950, + 21888242871839275222246405745257275088548364400416034343698203404050524533142, + 21888242871839275222246405745257275088548364400416034343698203366288807898638, 259874695971129, - 2098673553301711, - 1389650167539446, - 1574844709368435, + 21888242871839275222246405745257275088548364400416034343698204033449539592399, + 21888242871839275222246405745257275088548364400416034343698203324426153830134, + 21888242871839275222246405745257275088548364400416034343698203509620695659123, 983393471208129, - 1761566187171162, - 1982646423166479, - 1835640752707327, + 21888242871839275222246405745257275088548364400416034343698203696342173461850, + 21888242871839275222246405745257275088548364400416034343698203917422409457167, + 21888242871839275222246405745257275088548364400416034343698203770416738998015, 25436490652817, - 2207211393595567, + 21888242871839275222246405745257275088548364400416034343698204141987379886255, 1042045170589025, 887569254173476, 230105135753027, @@ -2976,22 +2976,22 @@ pub global CRP: [Polynomial; L] = [ 359977020690702, 791778533285337, 536481413166757, - 1428095817731018, - 1786354816753559, + 21888242871839275222246405745257275088548364400416034343698203362871804021706, + 21888242871839275222246405745257275088548364400416034343698203721130803044247, 910945666075212, 873010474819622, 513033371591597, 683297153474797, - 1945359441017026, - 1947932305692399, - 1549240681947424, - 1549479331257219, - 2182817525264314, - 2130207402850088, + 21888242871839275222246405745257275088548364400416034343698203880135427307714, + 21888242871839275222246405745257275088548364400416034343698203882708291983087, + 21888242871839275222246405745257275088548364400416034343698203484016668238112, + 21888242871839275222246405745257275088548364400416034343698203484255317547907, + 21888242871839275222246405745257275088548364400416034343698204117593511555002, + 21888242871839275222246405745257275088548364400416034343698204064983389140776, 192206665647616, - 1902840004458641, - 2090623600787202, - 1185401088886457, + 21888242871839275222246405745257275088548364400416034343698203837615990749329, + 21888242871839275222246405745257275088548364400416034343698204025399587077890, + 21888242871839275222246405745257275088548364400416034343698203120177075177145, 627663009322616, 599759289769141, 73866992004207, @@ -3001,293 +3001,293 @@ pub global CRP: [Polynomial; L] = [ 1079659548525126, 945524180526709, 228395217410413, - 2056481287233775, - 1803364474203429, + 21888242871839275222246405745257275088548364400416034343698203991257273524463, + 21888242871839275222246405745257275088548364400416034343698203738140460494117, 801314088732758, 1069601619494782, 610707323286485, - 1199495404658603, - 1458826768253974, + 21888242871839275222246405745257275088548364400416034343698203134271390949291, + 21888242871839275222246405745257275088548364400416034343698203393602754544662, 269370513831817, - 1421706016075194, + 21888242871839275222246405745257275088548364400416034343698203356482002365882, 995880463266485, - 1664525268749336, + 21888242871839275222246405745257275088548364400416034343698203599301255040024, 568278316900994, 357449124128341, 1089217375695219, - 1621772699730937, - 1239042768132973, + 21888242871839275222246405745257275088548364400416034343698203556548686021625, + 21888242871839275222246405745257275088548364400416034343698203173818754423661, 592688604456752, 484891943974406, - 1902795516116050, + 21888242871839275222246405745257275088548364400416034343698203837571502406738, 748025503798792, - 1825347382561937, + 21888242871839275222246405745257275088548364400416034343698203760123368852625, 898350619858290, - 1838209496261260, - 1633278254579484, + 21888242871839275222246405745257275088548364400416034343698203772985482551948, + 21888242871839275222246405745257275088548364400416034343698203568054240870172, 885986550352767, 425071373695984, 521388220388788, 246141018984028, - 1930874265159458, - 1609902356817764, + 21888242871839275222246405745257275088548364400416034343698203865650251450146, + 21888242871839275222246405745257275088548364400416034343698203544678343108452, 659116875640835, 854872438004862, 121741932956675, - 2171206685328510, + 21888242871839275222246405745257275088548364400416034343698204105982671619198, 619477114474860, 578897513342030, - 1860563430232101, + 21888242871839275222246405745257275088548364400416034343698203795339416522789, 117561360930803, - 1933666102170615, + 21888242871839275222246405745257275088548364400416034343698203868442088461303, 565118666147709, 705741789777608, - 1855574424606944, + 21888242871839275222246405745257275088548364400416034343698203790350410897632, 366949272373232, 187539105272123, - 1348839575986688, + 21888242871839275222246405745257275088548364400416034343698203283615562277376, 284355924412549, - 1737521296514463, - 1133650446953579, - 2203241217906365, - 1801307871553276, - 2213543384466078, - 1586266055868232, + 21888242871839275222246405745257275088548364400416034343698203672297282805151, + 21888242871839275222246405745257275088548364400416034343698203068426433244267, + 21888242871839275222246405745257275088548364400416034343698204138017204197053, + 21888242871839275222246405745257275088548364400416034343698203736083857843964, + 21888242871839275222246405745257275088548364400416034343698204148319370756766, + 21888242871839275222246405745257275088548364400416034343698203521042042158920, 18625201303667, - 2141710296802940, + 21888242871839275222246405745257275088548364400416034343698204076486283093628, 418977739887080, 675773830799218, - 2084671377194807, + 21888242871839275222246405745257275088548364400416034343698204019447363485495, 563099922247250, - 1848966784044399, + 21888242871839275222246405745257275088548364400416034343698203783742770335087, 343974290137681, 130030422704411, 423628605903009, 699620227200400, 546681717102268, - 1431586933738297, - 1883845240261838, - 1490610089035978, - 1184205272252841, - 1200230408496194, + 21888242871839275222246405745257275088548364400416034343698203366362920028985, + 21888242871839275222246405745257275088548364400416034343698203818621226552526, + 21888242871839275222246405745257275088548364400416034343698203425386075326666, + 21888242871839275222246405745257275088548364400416034343698203118981258543529, + 21888242871839275222246405745257275088548364400416034343698203135006394786882, 446516136667322, - 1149897281319363, - 2245498643116415, + 21888242871839275222246405745257275088548364400416034343698203084673267610051, + 21888242871839275222246405745257275088548364400416034343698204180274629407103, 546605484964330, - 2108339605440717, + 21888242871839275222246405745257275088548364400416034343698204043115591731405, 942925049251090, - 2130060209723129, - 1974085250463180, + 21888242871839275222246405745257275088548364400416034343698204064836196013817, + 21888242871839275222246405745257275088548364400416034343698203908861236753868, 864404504270239, - 2010266478525296, + 21888242871839275222246405745257275088548364400416034343698203945042464815984, 450511159423492, 310545455335908, - 2109880169245490, - 1913704057094277, - 1565297716503197, - 1927895006027771, - 1419061509792241, - 1446594703307869, - 1362069504843250, - 1677430936478969, + 21888242871839275222246405745257275088548364400416034343698204044656155536178, + 21888242871839275222246405745257275088548364400416034343698203848480043384965, + 21888242871839275222246405745257275088548364400416034343698203500073702793885, + 21888242871839275222246405745257275088548364400416034343698203862670992318459, + 21888242871839275222246405745257275088548364400416034343698203353837496082929, + 21888242871839275222246405745257275088548364400416034343698203381370689598557, + 21888242871839275222246405745257275088548364400416034343698203296845491133938, + 21888242871839275222246405745257275088548364400416034343698203612206922769657, 512495370393061, - 2250867738033555, - 1403685857030230, - 1967088482332648, - 1411691713903971, - 1555214440710957, - 1706405402432597, + 21888242871839275222246405745257275088548364400416034343698204185643724324243, + 21888242871839275222246405745257275088548364400416034343698203338461843320918, + 21888242871839275222246405745257275088548364400416034343698203901864468623336, + 21888242871839275222246405745257275088548364400416034343698203346467700194659, + 21888242871839275222246405745257275088548364400416034343698203489990427001645, + 21888242871839275222246405745257275088548364400416034343698203641181388723285, 1119319862611377, - 1712119718415165, - 2026470770080477, + 21888242871839275222246405745257275088548364400416034343698203646895704705853, + 21888242871839275222246405745257275088548364400416034343698203961246756371165, 839885567645871, 588951858676076, 23053313652588, - 1168664920372337, - 1175851031019112, - 2019849050099843, - 1497771896110769, - 1761737778971567, - 2193687936238251, - 1171630706967225, + 21888242871839275222246405745257275088548364400416034343698203103440906663025, + 21888242871839275222246405745257275088548364400416034343698203110627017309800, + 21888242871839275222246405745257275088548364400416034343698203954625036390531, + 21888242871839275222246405745257275088548364400416034343698203432547882401457, + 21888242871839275222246405745257275088548364400416034343698203696513765262255, + 21888242871839275222246405745257275088548364400416034343698204128463922528939, + 21888242871839275222246405745257275088548364400416034343698203106406693257913, 946130295042678, - 1379465329580800, + 21888242871839275222246405745257275088548364400416034343698203314241315871488, 763010847716399, 359258317943571, 150133846358247, - 2131024531931911, - 1937024559774055, - 1521473767004340, - 1565178025874207, + 21888242871839275222246405745257275088548364400416034343698204065800518222599, + 21888242871839275222246405745257275088548364400416034343698203871800546064743, + 21888242871839275222246405745257275088548364400416034343698203456249753295028, + 21888242871839275222246405745257275088548364400416034343698203499954012164895, 340963256853094, - 2166820928532425, + 21888242871839275222246405745257275088548364400416034343698204101596914823113, 429056051617237, - 1481584957970510, - 2027620966658972, + 21888242871839275222246405745257275088548364400416034343698203416360944261198, + 21888242871839275222246405745257275088548364400416034343698203962396952949660, 582035519577016, 949871684705562, 753661507106306, - 1943292081226213, + 21888242871839275222246405745257275088548364400416034343698203878068067516901, 477611756950731, - 1750929390538248, - 1190957963498324, + 21888242871839275222246405745257275088548364400416034343698203685705376828936, + 21888242871839275222246405745257275088548364400416034343698203125733949789012, 899556425423692, 253119069730188, 495090765444668, 971028059712595, 338639750285224, 532973017411248, - 2102962461977355, + 21888242871839275222246405745257275088548364400416034343698204037738448268043, 1083461755699982, 1048250482614718, 502409108760716, 19681488014477, 54088540310444, - 1610649393762203, - 1467730782263453, + 21888242871839275222246405745257275088548364400416034343698203545425380052891, + 21888242871839275222246405745257275088548364400416034343698203402506768554141, 544046740425525, 446848489924747, 219138422410967, - 1333191184715771, + 21888242871839275222246405745257275088548364400416034343698203267967171006459, 1059270294898237, 740862831433502, - 1953706241237326, - 1381428739674815, + 21888242871839275222246405745257275088548364400416034343698203888482227528014, + 21888242871839275222246405745257275088548364400416034343698203316204725965503, 910137620593193, 1074525523704321, 484141146966624, 1115662563454570, 257734500281818, 469545670991146, - 1367030463070499, + 21888242871839275222246405745257275088548364400416034343698203301806449361187, 494480753752923, 501846538753073, - 1923552114846238, - 2233551352621964, - 1299183605223156, + 21888242871839275222246405745257275088548364400416034343698203858328101136926, + 21888242871839275222246405745257275088548364400416034343698204168327338912652, + 21888242871839275222246405745257275088548364400416034343698203233959591513844, 583137307396903, - 1289340546329377, + 21888242871839275222246405745257275088548364400416034343698203224116532620065, 927586928815565, - 1297443341708019, - 1939060815776081, - 1131723328780462, - 2130129613336314, - 2193161347064151, - 1158934204373004, - 2165759269021088, - 1546333158153167, - 1928195711197390, - 1894834902499338, - 2042657699936941, + 21888242871839275222246405745257275088548364400416034343698203232219327998707, + 21888242871839275222246405745257275088548364400416034343698203873836802066769, + 21888242871839275222246405745257275088548364400416034343698203066499315071150, + 21888242871839275222246405745257275088548364400416034343698204064905599627002, + 21888242871839275222246405745257275088548364400416034343698204127937333354839, + 21888242871839275222246405745257275088548364400416034343698203093710190663692, + 21888242871839275222246405745257275088548364400416034343698204100535255311776, + 21888242871839275222246405745257275088548364400416034343698203481109144443855, + 21888242871839275222246405745257275088548364400416034343698203862971697488078, + 21888242871839275222246405745257275088548364400416034343698203829610888790026, + 21888242871839275222246405745257275088548364400416034343698203977433686227629, 1098638753787980, 223586524541770, - 1505580617431065, - 1202706208236358, + 21888242871839275222246405745257275088548364400416034343698203440356603721753, + 21888242871839275222246405745257275088548364400416034343698203137482194527046, 71650070448043, 563360008966053, - 1460673567231153, + 21888242871839275222246405745257275088548364400416034343698203395449553521841, 977466601266865, 847881447667045, 876781552004632, - 2055732136878151, - 1546540309010355, - 1875297995395300, - 1785859771047053, + 21888242871839275222246405745257275088548364400416034343698203990508123168839, + 21888242871839275222246405745257275088548364400416034343698203481316295301043, + 21888242871839275222246405745257275088548364400416034343698203810073981685988, + 21888242871839275222246405745257275088548364400416034343698203720635757337741, 761496915874572, 763987765674335, 1116182300986860, 172636724024370, - 1716506187017886, + 21888242871839275222246405745257275088548364400416034343698203651282173308574, 598236242625861, 296480598621975, 818023116821466, - 1505198185223587, - 1935566532240414, + 21888242871839275222246405745257275088548364400416034343698203439974171514275, + 21888242871839275222246405745257275088548364400416034343698203870342518531102, 1104494984692907, 278449763075708, - 1293633090652115, - 1239638264380363, + 21888242871839275222246405745257275088548364400416034343698203228409076942803, + 21888242871839275222246405745257275088548364400416034343698203174414250671051, 970731418765706, 1082538616179086, - 1250708361245995, + 21888242871839275222246405745257275088548364400416034343698203185484347536683, 930789526238132, 775955337585701, 1083774418398882, - 1944408113596470, - 2118753357065350, - 1176871704095843, + 21888242871839275222246405745257275088548364400416034343698203879184099887158, + 21888242871839275222246405745257275088548364400416034343698204053529343356038, + 21888242871839275222246405745257275088548364400416034343698203111647690386531, 241401811385643, 623764502436132, - 1641842325667079, + 21888242871839275222246405745257275088548364400416034343698203576618311957767, 531590092570360, - 1795401062911425, - 1786862232205213, - 1683648890946943, - 2140602846636891, + 21888242871839275222246405745257275088548364400416034343698203730177049202113, + 21888242871839275222246405745257275088548364400416034343698203721638218495901, + 21888242871839275222246405745257275088548364400416034343698203618424877237631, + 21888242871839275222246405745257275088548364400416034343698204075378832927579, 34786843538729, 26774124277180, 1000868279412725, 807905019385781, 643359015890184, - 1389643663678356, + 21888242871839275222246405745257275088548364400416034343698203324419649969044, 684353078489377, 189950430397904, - 1242036561145992, - 1950891239038539, + 21888242871839275222246405745257275088548364400416034343698203176812547436680, + 21888242871839275222246405745257275088548364400416034343698203885667225329227, 632617009848902, 107164499255727, 778453485901099, 979063391072485, - 2111176114831082, + 21888242871839275222246405745257275088548364400416034343698204045952101121770, 558270331279053, - 1894491286934179, + 21888242871839275222246405745257275088548364400416034343698203829267273224867, 625847625149468, - 1390508438578394, + 21888242871839275222246405745257275088548364400416034343698203325284424869082, 572613458917156, - 2208202099916720, + 21888242871839275222246405745257275088548364400416034343698204142978086207408, 827838688358473, 346318849848471, 633449430635522, 975231015718976, 320328042870856, - 1259468809015249, - 2147631185892444, + 21888242871839275222246405745257275088548364400416034343698203194244795305937, + 21888242871839275222246405745257275088548364400416034343698204082407172183132, 41812312102382, 401404893580056, - 1342109151189572, - 1961845998085600, - 1944193726047452, + 21888242871839275222246405745257275088548364400416034343698203276885137480260, + 21888242871839275222246405745257275088548364400416034343698203896621984376288, + 21888242871839275222246405745257275088548364400416034343698203878969712338140, 358105862752428, 911249124245277, 235531705310886, - 1462836461569466, - 1381590977955769, - 1386485196697614, - 1428618249036705, - 2153438961178875, - 1770935666826762, - 1621831919098979, + 21888242871839275222246405745257275088548364400416034343698203397612447860154, + 21888242871839275222246405745257275088548364400416034343698203316366964246457, + 21888242871839275222246405745257275088548364400416034343698203321261182988302, + 21888242871839275222246405745257275088548364400416034343698203363394235327393, + 21888242871839275222246405745257275088548364400416034343698204088214947469563, + 21888242871839275222246405745257275088548364400416034343698203705711653117450, + 21888242871839275222246405745257275088548364400416034343698203556607905389667, 1009311328960623, - 1839288719007140, + 21888242871839275222246405745257275088548364400416034343698203774064705297828, 1109742390497958, 594791284706274, 315517501452171, - 1972740642195381, + 21888242871839275222246405745257275088548364400416034343698203907516628486069, 974950830975471, 478832209304900, 560800109180906, - 1140921918055955, - 1156486717318624, + 21888242871839275222246405745257275088548364400416034343698203075697904346643, + 21888242871839275222246405745257275088548364400416034343698203091262703609312, 328636385539241, - 1503524631855129, + 21888242871839275222246405745257275088548364400416034343698203438300618145817, 16173159997122, 303658873889713, - 1643008956631702, + 21888242871839275222246405745257275088548364400416034343698203577784942922390, 716000835623883, 423950614701377, - 1361664554289091, - 1815039480739698, - 2017463554677654, + 21888242871839275222246405745257275088548364400416034343698203296440540579779, + 21888242871839275222246405745257275088548364400416034343698203749815467030386, + 21888242871839275222246405745257275088548364400416034343698203952239540968342, 851364468484832, 896368079412624, 287459942220769, @@ -3296,31 +3296,31 @@ pub global CRP: [Polynomial; L] = [ 634171742394642, 477033657960189, 227038922200981, - 1817816413999942, + 21888242871839275222246405745257275088548364400416034343698203752592400290630, 947204683798372, 423195408657707, 933854025281440, 326040381479301, 81222954973014, 434735814565402, - 1350967982854192, - 1942197324333847, - 1901007574670371, - 1853039344658716, + 21888242871839275222246405745257275088548364400416034343698203285743969144880, + 21888242871839275222246405745257275088548364400416034343698203876973310624535, + 21888242871839275222246405745257275088548364400416034343698203835783560961059, + 21888242871839275222246405745257275088548364400416034343698203787815330949404, 1123608690816603, 866918143603642, - 1323488280935231, - 2088611849093303, - 2132476680432338, + 21888242871839275222246405745257275088548364400416034343698203258264267225919, + 21888242871839275222246405745257275088548364400416034343698204023387835383991, + 21888242871839275222246405745257275088548364400416034343698204067252666723026, 610246150320705, 304232080227, - 1611377495731090, + 21888242871839275222246405745257275088548364400416034343698203546153482021778, 769880673735251, 140417204205621, 434002694632437, - 1704351165254651, - 2182217337771472, - 1294378628569387, + 21888242871839275222246405745257275088548364400416034343698203639127151545339, + 21888242871839275222246405745257275088548364400416034343698204116993324062160, + 21888242871839275222246405745257275088548364400416034343698203229154614860075, 139210418209496, 594501503375048, 305559767507215, @@ -3329,50 +3329,50 @@ pub global CRP: [Polynomial; L] = [ 730797229050911, 11005706539650, 576309814207447, - 1467974665982511, + 21888242871839275222246405745257275088548364400416034343698203402750652273199, 815677887586137, - 1576248450939733, + 21888242871839275222246405745257275088548364400416034343698203511024437230421, 396242935604756, 896218467592110, 1108486204167048, 603982956592658, 652757105925, - 1605899114707001, - 1544184345445566, + 21888242871839275222246405745257275088548364400416034343698203540675100997689, + 21888242871839275222246405745257275088548364400416034343698203478960331736254, 880013364271843, - 2130479936151607, - 1346555786188161, - 2176020580739272, - 1762590016543961, + 21888242871839275222246405745257275088548364400416034343698204065255922442295, + 21888242871839275222246405745257275088548364400416034343698203281331772478849, + 21888242871839275222246405745257275088548364400416034343698204110796567029960, + 21888242871839275222246405745257275088548364400416034343698203697366002834649, 424283191412154, - 1681353985019050, - 1760015687967176, - 1985098998403040, - 1874885618670129, - 1711488129854980, - 1756955416945470, + 21888242871839275222246405745257275088548364400416034343698203616129971309738, + 21888242871839275222246405745257275088548364400416034343698203694791674257864, + 21888242871839275222246405745257275088548364400416034343698203919874984693728, + 21888242871839275222246405745257275088548364400416034343698203809661604960817, + 21888242871839275222246405745257275088548364400416034343698203646264116145668, + 21888242871839275222246405745257275088548364400416034343698203691731403236158, 728260581120105, 775202733680440, - 1739419700227908, - 1618215835583842, + 21888242871839275222246405745257275088548364400416034343698203674195686518596, + 21888242871839275222246405745257275088548364400416034343698203552991821874530, 604136048073125, - 2061708434511366, - 1290281205734969, + 21888242871839275222246405745257275088548364400416034343698203996484420802054, + 21888242871839275222246405745257275088548364400416034343698203225057192025657, 805676780001604, - 1450421332007900, + 21888242871839275222246405745257275088548364400416034343698203385197318298588, 131609254254169, - 1689440763201219, - 1463257791021021, + 21888242871839275222246405745257275088548364400416034343698203624216749491907, + 21888242871839275222246405745257275088548364400416034343698203398033777311709, 177902545367397, - 2226002780785260, - 1374325790450271, - 2159040592331659, + 21888242871839275222246405745257275088548364400416034343698204160778767075948, + 21888242871839275222246405745257275088548364400416034343698203309101776740959, + 21888242871839275222246405745257275088548364400416034343698204093816578622347, 1039291011492766, 747281127036539, - 1611588591610397, + 21888242871839275222246405745257275088548364400416034343698203546364577901085, 3788907551028, 362395240511356, - 1786693362964407, + 21888242871839275222246405745257275088548364400416034343698203721469349255095, 69573901424777, 869343073436306, 480779174900877, @@ -3381,47 +3381,47 @@ pub global CRP: [Polynomial; L] = [ 647204773639910, 218408534196692, 166347089118354, - 2088685446156038, + 21888242871839275222246405745257275088548364400416034343698204023461432446726, 380607863227328, 681199050366632, - 2181117249999973, + 21888242871839275222246405745257275088548364400416034343698204115893236290661, 847551801545978, - 1224269268365841, + 21888242871839275222246405745257275088548364400416034343698203159045254656529, 944493211322211, 716375556522385, 685754964110892, - 1391510765129071, - 1992137712068539, + 21888242871839275222246405745257275088548364400416034343698203326286751419759, + 21888242871839275222246405745257275088548364400416034343698203926913698359227, 601792511425257, 607933784468273, - 1714187900086829, - 1866937154572538, + 21888242871839275222246405745257275088548364400416034343698203648963886377517, + 21888242871839275222246405745257275088548364400416034343698203801713140863226, 303265310618625, - 2098620963521165, - 1912774384772168, + 21888242871839275222246405745257275088548364400416034343698204033396949811853, + 21888242871839275222246405745257275088548364400416034343698203847550371062856, 771933348289565, 237122709970135, 803422543558163, 508196438982938, 805028314768234, 1027393186065638, - 2016539904690769, + 21888242871839275222246405745257275088548364400416034343698203951315890981457, 162379667394974, 924779190879483, - 1851609971044804, + 21888242871839275222246405745257275088548364400416034343698203786385957335492, 776588560532879, - 1279167098105417, - 1322968685033139, - 1419822453293064, - 1362794262528076, + 21888242871839275222246405745257275088548364400416034343698203213943084396105, + 21888242871839275222246405745257275088548364400416034343698203257744671323827, + 21888242871839275222246405745257275088548364400416034343698203354598439583752, + 21888242871839275222246405745257275088548364400416034343698203297570248818764, 479288197460664, 1054585537834845, - 1153157163761256, + 21888242871839275222246405745257275088548364400416034343698203087933150051944, 916112630341590, 829030017110311, 484256855753580, - 1512683178429209, - 1743645361943538, + 21888242871839275222246405745257275088548364400416034343698203447459164719897, + 21888242871839275222246405745257275088548364400416034343698203678421348234226, 384869762780378, 991134572880792, 311342158292950, @@ -3430,25 +3430,25 @@ pub global CRP: [Polynomial; L] = [ 185587118624098, 13033509730314, 278995838746273, - 1232574332318748, - 1307332271474058, - 1167833906171543, - 1600592665056504, + 21888242871839275222246405745257275088548364400416034343698203167350318609436, + 21888242871839275222246405745257275088548364400416034343698203242108257764746, + 21888242871839275222246405745257275088548364400416034343698203102609892462231, + 21888242871839275222246405745257275088548364400416034343698203535368651347192, 1017488898226629, 436677030716431, - 1806012227432266, + 21888242871839275222246405745257275088548364400416034343698203740788213722954, 771251894102786, - 1861361665340752, - 1790466769713367, + 21888242871839275222246405745257275088548364400416034343698203796137651631440, + 21888242871839275222246405745257275088548364400416034343698203725242756004055, 684041518224810, - 1685463648918978, - 1741166626479418, - 1553497625133343, - 2183076106599044, - 1574625985183719, - 1743945574473429, - 2204397407109549, - 1334039042306088, + 21888242871839275222246405745257275088548364400416034343698203620239635209666, + 21888242871839275222246405745257275088548364400416034343698203675942612770106, + 21888242871839275222246405745257275088548364400416034343698203488273611424031, + 21888242871839275222246405745257275088548364400416034343698204117852092889732, + 21888242871839275222246405745257275088548364400416034343698203509401971474407, + 21888242871839275222246405745257275088548364400416034343698203678721560764117, + 21888242871839275222246405745257275088548364400416034343698204139173393400237, + 21888242871839275222246405745257275088548364400416034343698203268815028596776, 678958591402381, 55772194225585, 1047723980800997, @@ -3456,130 +3456,130 @@ pub global CRP: [Polynomial; L] = [ 807477736061711, 193358111199817, 1010333355580248, - 1414462220131704, + 21888242871839275222246405745257275088548364400416034343698203349238206422392, 648829889663638, - 1487271464691557, - 2142268122285407, + 21888242871839275222246405745257275088548364400416034343698203422047450982245, + 21888242871839275222246405745257275088548364400416034343698204077044108576095, 551400624571927, - 1395805537192614, + 21888242871839275222246405745257275088548364400416034343698203330581523483302, 131647382771044, 908553295686383, 836692969641734, 1107766000053538, - 1203962002277331, + 21888242871839275222246405745257275088548364400416034343698203138737988568019, 854916549412013, - 1999128466759024, + 21888242871839275222246405745257275088548364400416034343698203933904453049712, 233305328575747, - 1921751289273631, - 1947956074668277, + 21888242871839275222246405745257275088548364400416034343698203856527275564319, + 21888242871839275222246405745257275088548364400416034343698203882732060958965, 428722831409181, - 1177777690859899, - 1405776683501600, - 2091718314537919, + 21888242871839275222246405745257275088548364400416034343698203112553677150587, + 21888242871839275222246405745257275088548364400416034343698203340552669792288, + 21888242871839275222246405745257275088548364400416034343698204026494300828607, 590409248619682, 653804968062261, 404891563880329, 202397732681106, - 1292155728278715, + 21888242871839275222246405745257275088548364400416034343698203226931714569403, 1077805846939036, 400786686852609, 289133180784220, - 1964439652268169, + 21888242871839275222246405745257275088548364400416034343698203899215638558857, 257949620178319, - 2031650201676300, + 21888242871839275222246405745257275088548364400416034343698203966426187966988, 186092276236049, 872729853146581, 950604690054962, 15385254880941, - 1448270972467101, + 21888242871839275222246405745257275088548364400416034343698203383046958757789, 209679066426503, 911687603133330, - 2029392349657165, - 1392703247453796, - 2109943517605290, - 1813494874734954, + 21888242871839275222246405745257275088548364400416034343698203964168335947853, + 21888242871839275222246405745257275088548364400416034343698203327479233744484, + 21888242871839275222246405745257275088548364400416034343698204044719503895978, + 21888242871839275222246405745257275088548364400416034343698203748270861025642, 819070689064123, 413292066161430, 442391797851784, 659072804515946, - 2106206034537769, + 21888242871839275222246405745257275088548364400416034343698204040982020828457, 362252344539475, 202719540028999, - 2168307670541252, - 1990202745570402, + 21888242871839275222246405745257275088548364400416034343698204103083656831940, + 21888242871839275222246405745257275088548364400416034343698203924978731861090, 1073803477438670, - 1451038671774266, - 2249010656500184, - 1147901261497742, + 21888242871839275222246405745257275088548364400416034343698203385814658064954, + 21888242871839275222246405745257275088548364400416034343698204183786642790872, + 21888242871839275222246405745257275088548364400416034343698203082677247788430, 566422114541047, - 1367099620250324, + 21888242871839275222246405745257275088548364400416034343698203301875606541012, 198913059725242, - 2004093567312418, - 2004969759644760, + 21888242871839275222246405745257275088548364400416034343698203938869553603106, + 21888242871839275222246405745257275088548364400416034343698203939745745935448, 1094189858506405, - 1899326421012925, - 1215742795512603, + 21888242871839275222246405745257275088548364400416034343698203834102407303613, + 21888242871839275222246405745257275088548364400416034343698203150518781803291, 567250548481776, 812542249824717, - 2162715016774435, + 21888242871839275222246405745257275088548364400416034343698204097491003065123, 330353477793709, 350196390124860, - 1366598742238062, + 21888242871839275222246405745257275088548364400416034343698203301374728528750, 335547325471992, - 1545968777189284, + 21888242871839275222246405745257275088548364400416034343698203480744763479972, 710414203108814, - 1793128343136895, - 1248964803636625, + 21888242871839275222246405745257275088548364400416034343698203727904329427583, + 21888242871839275222246405745257275088548364400416034343698203183740789927313, 995018828636987, 750724629750103, 520801085976612, 481029797376885, 774283263884609, - 1676791061546593, + 21888242871839275222246405745257275088548364400416034343698203611567047837281, 606557163854719, - 1427958094333220, + 21888242871839275222246405745257275088548364400416034343698203362734080623908, 767402949183276, 55218244556178, 736087264380735, 329828381200679, - 1515680295459834, + 21888242871839275222246405745257275088548364400416034343698203450456281750522, 39166659054298, - 1879761952462490, + 21888242871839275222246405745257275088548364400416034343698203814537938753178, 291240464597318, 890312962129431, 351962509157009, 286689025736816, - 1223382601899002, - 1258536226432397, - 1742722355428690, + 21888242871839275222246405745257275088548364400416034343698203158158588189690, + 21888242871839275222246405745257275088548364400416034343698203193312212723085, + 21888242871839275222246405745257275088548364400416034343698203677498341719378, 919116698134749, 280790963453534, - 1328916144168426, + 21888242871839275222246405745257275088548364400416034343698203263692130459114, 141050990363320, 476158769215675, 1000683916706551, - 1920010476823536, + 21888242871839275222246405745257275088548364400416034343698203854786463114224, 800423977577617, 362913751886016, 458267763106213, 243357029051686, 806152036972619, - 1802640961610522, + 21888242871839275222246405745257275088548364400416034343698203737416947901210, 158079152778612, 480304019308400, 121641244989792, - 1379923799239383, - 1727495891472798, - 2227788865800615, + 21888242871839275222246405745257275088548364400416034343698203314699785530071, + 21888242871839275222246405745257275088548364400416034343698203662271877763486, + 21888242871839275222246405745257275088548364400416034343698204162564852091303, 1048048905079647, 39436127859690, 966842497390123, - 1627243054946695, + 21888242871839275222246405745257275088548364400416034343698203562019041237383, 874206020758219, - 1840462859056536, - 1684446849472301, + 21888242871839275222246405745257275088548364400416034343698203775238845347224, + 21888242871839275222246405745257275088548364400416034343698203619222835762989, 51327958350643, - 2178444618916444, + 21888242871839275222246405745257275088548364400416034343698204113220605207132, 271011330019078, 132059664070039, 585878469489854, @@ -3587,115 +3587,115 @@ pub global CRP: [Polynomial; L] = [ 558458155163926, 969851138406424, 615128640388696, - 1957467735487966, + 21888242871839275222246405745257275088548364400416034343698203892243721778654, 851638273514153, 89443354175051, - 1716711667199298, - 1228314019996140, + 21888242871839275222246405745257275088548364400416034343698203651487653489986, + 21888242871839275222246405745257275088548364400416034343698203163090006286828, 229921000013267, 1063167098889988, - 1973728435537812, + 21888242871839275222246405745257275088548364400416034343698203908504421828500, 218462117346168, 840209662283125, 443537325919807, 202562671168923, - 1998565354220018, + 21888242871839275222246405745257275088548364400416034343698203933341340510706, 1117753844033107, 746207155961302, - 2087257884238526, + 21888242871839275222246405745257275088548364400416034343698204022033870529214, 1069211956817699, 383084795637148, 1122800014938639, - 1632020292802279, + 21888242871839275222246405745257275088548364400416034343698203566796279092967, 238440458350906, 1120554232512413, - 1746641186181228, - 2041011354783950, + 21888242871839275222246405745257275088548364400416034343698203681417172471916, + 21888242871839275222246405745257275088548364400416034343698203975787341074638, 595427480383488, - 1235810558424371, - 1895797417927939, - 2026194981072159, - 1854006588378218, - 1505750296889273, - 1929358301437116, - 1745264880052498, - 1183641767326839, - 2223031451498332, - 1866389632794135, + 21888242871839275222246405745257275088548364400416034343698203170586544715059, + 21888242871839275222246405745257275088548364400416034343698203830573404218627, + 21888242871839275222246405745257275088548364400416034343698203960970967362847, + 21888242871839275222246405745257275088548364400416034343698203788782574668906, + 21888242871839275222246405745257275088548364400416034343698203440526283179961, + 21888242871839275222246405745257275088548364400416034343698203864134287727804, + 21888242871839275222246405745257275088548364400416034343698203680040866343186, + 21888242871839275222246405745257275088548364400416034343698203118417753617527, + 21888242871839275222246405745257275088548364400416034343698204157807437789020, + 21888242871839275222246405745257275088548364400416034343698203801165619084823, 905824139836848, 577926602228372, 229651350100395, - 1438014367014654, + 21888242871839275222246405745257275088548364400416034343698203372790353305342, 513158086493292, 1088864282769897, - 1865091219894131, + 21888242871839275222246405745257275088548364400416034343698203799867206184819, 32046922379187, 65652324943470, 204883785067889, - 1515627432698459, + 21888242871839275222246405745257275088548364400416034343698203450403418989147, 932810087857587, - 1397946949488904, - 2026344810447210, + 21888242871839275222246405745257275088548364400416034343698203332722935779592, + 21888242871839275222246405745257275088548364400416034343698203961120796737898, 371007082700741, 573544227779200, - 1893217759458096, - 1805681501430484, + 21888242871839275222246405745257275088548364400416034343698203827993745748784, + 21888242871839275222246405745257275088548364400416034343698203740457487721172, 504334228911944, - 1483523898312457, + 21888242871839275222246405745257275088548364400416034343698203418299884603145, 953563276799060, 954429796983541, - 1889848953719862, + 21888242871839275222246405745257275088548364400416034343698203824624940010550, 335288717070206, 664287747112421, 45739616979551, 209571899804324, 343238815301715, 607753233146631, - 1391117712427219, + 21888242871839275222246405745257275088548364400416034343698203325893698717907, 993208195939064, 1024562569371955, - 2196832717587298, - 1997110925614340, - 1644949035204421, - 1176199188727842, - 1269426539652472, + 21888242871839275222246405745257275088548364400416034343698204131608703877986, + 21888242871839275222246405745257275088548364400416034343698203931886911905028, + 21888242871839275222246405745257275088548364400416034343698203579725021495109, + 21888242871839275222246405745257275088548364400416034343698203110975175018530, + 21888242871839275222246405745257275088548364400416034343698203204202525943160, 654357972718819, - 1601038415383111, + 21888242871839275222246405745257275088548364400416034343698203535814401673799, 803921193772110, 257591728353698, 461685690587408, - 1327666367435741, - 2059210950312340, + 21888242871839275222246405745257275088548364400416034343698203262442353726429, + 21888242871839275222246405745257275088548364400416034343698203993986936603028, 616510297745452, 508302828819465, - 1587548179419391, + 21888242871839275222246405745257275088548364400416034343698203522324165710079, 24580195602410, - 1262200715213997, + 21888242871839275222246405745257275088548364400416034343698203196976701504685, 846660547659649, - 1965274931761066, + 21888242871839275222246405745257275088548364400416034343698203900050918051754, 70185453098150, - 1922366532932117, + 21888242871839275222246405745257275088548364400416034343698203857142519222805, 143137420413957, 519953876818474, - 1178027254128794, - 1679736935546903, - 2146603742751635, - 1534768984607623, + 21888242871839275222246405745257275088548364400416034343698203112803240419482, + 21888242871839275222246405745257275088548364400416034343698203614512921837591, + 21888242871839275222246405745257275088548364400416034343698204081379729042323, + 21888242871839275222246405745257275088548364400416034343698203469544970898311, 203611195254337, 881268493572356, - 1396874425863461, + 21888242871839275222246405745257275088548364400416034343698203331650412154149, 506715015278795, 693568797548133, - 1255173409878381, + 21888242871839275222246405745257275088548364400416034343698203189949396169069, 883941787155689, - 1952187125788227, - 1241489366732021, + 21888242871839275222246405745257275088548364400416034343698203886963112078915, + 21888242871839275222246405745257275088548364400416034343698203176265353022709, 397738112551571, - 1649595576870346, - 2119522528071918, + 21888242871839275222246405745257275088548364400416034343698203584371563161034, + 21888242871839275222246405745257275088548364400416034343698204054298514362606, 752304666792128, - 1588582525013647, - 1483328123793433, + 21888242871839275222246405745257275088548364400416034343698203523358511304335, + 21888242871839275222246405745257275088548364400416034343698203418104110084121, 184972083966125, 1082772993496432, 616370190490137, @@ -3704,118 +3704,118 @@ pub global CRP: [Polynomial; L] = [ 766352977487536, 638789241379435, 943956387543240, - 1535744807766586, - 1450362200230565, + 21888242871839275222246405745257275088548364400416034343698203470520794057274, + 21888242871839275222246405745257275088548364400416034343698203385138186521253, 737266588590517, 471384886351814, 6556128939795, - 2103836828431254, - 1276754121937970, + 21888242871839275222246405745257275088548364400416034343698204038612814721942, + 21888242871839275222246405745257275088548364400416034343698203211530108228658, 888284635692622, - 1716758243728170, - 1519089200952774, - 1350576468637026, - 1551506391806690, + 21888242871839275222246405745257275088548364400416034343698203651534230018858, + 21888242871839275222246405745257275088548364400416034343698203453865187243462, + 21888242871839275222246405745257275088548364400416034343698203285352454927714, + 21888242871839275222246405745257275088548364400416034343698203486282378097378, 250230246648284, - 2228184593338680, - 1579802361799055, + 21888242871839275222246405745257275088548364400416034343698204162960579629368, + 21888242871839275222246405745257275088548364400416034343698203514578348089743, 718546051393810, 942321266968119, - 1691687494503095, + 21888242871839275222246405745257275088548364400416034343698203626463480793783, 1117614940636986, 398147105171897, 152935145747521, - 1522631986419822, - 1848229805840067, + 21888242871839275222246405745257275088548364400416034343698203457407972710510, + 21888242871839275222246405745257275088548364400416034343698203783005792130755, 824276114593707, 930678242266670, - 1704649320820529, - 1282438714645597, - 1287782093861763, - 1326384660235556, - 1403598342614236, + 21888242871839275222246405745257275088548364400416034343698203639425307111217, + 21888242871839275222246405745257275088548364400416034343698203217214700936285, + 21888242871839275222246405745257275088548364400416034343698203222558080152451, + 21888242871839275222246405745257275088548364400416034343698203261160646526244, + 21888242871839275222246405745257275088548364400416034343698203338374328904924, 488609221331099, 952453038287508, - 1701849023252300, + 21888242871839275222246405745257275088548364400416034343698203636625009542988, 350764689584018, 1032582584568299, 571378484702601, 432756810619768, 164448115668111, - 1314002183708850, + 21888242871839275222246405745257275088548364400416034343698203248778169999538, 737313267971340, 979418508357453, 913625299501626, - 1640850141266701, - 1757436130928618, - 1445829939604592, - 2010671301785637, - 1726968647943702, + 21888242871839275222246405745257275088548364400416034343698203575626127557389, + 21888242871839275222246405745257275088548364400416034343698203692212117219306, + 21888242871839275222246405745257275088548364400416034343698203380605925895280, + 21888242871839275222246405745257275088548364400416034343698203945447288076325, + 21888242871839275222246405745257275088548364400416034343698203661744634234390, 217739583793006, 480938117014001, 392010758569804, - 2249599814721454, - 1840358047362364, - 1568707048768103, - 2192623533461599, - 1492744025728513, + 21888242871839275222246405745257275088548364400416034343698204184375801012142, + 21888242871839275222246405745257275088548364400416034343698203775134033653052, + 21888242871839275222246405745257275088548364400416034343698203503483035058791, + 21888242871839275222246405745257275088548364400416034343698204127399519752287, + 21888242871839275222246405745257275088548364400416034343698203427520012019201, 1110510062264043, - 1591867808616496, + 21888242871839275222246405745257275088548364400416034343698203526643794907184, 571289029306753, 906341455428846, - 1695978377615710, + 21888242871839275222246405745257275088548364400416034343698203630754363906398, 809551962318209, 263556720580328, 1088337953800232, 485075803748036, - 1534205588226069, - 2039094224167669, + 21888242871839275222246405745257275088548364400416034343698203468981574516757, + 21888242871839275222246405745257275088548364400416034343698203973870210458357, 502084476429028, 235006808625517, - 1994865774333160, - 1490797785545581, + 21888242871839275222246405745257275088548364400416034343698203929641760623848, + 21888242871839275222246405745257275088548364400416034343698203425573771836269, 674643474649720, - 1607058676416759, + 21888242871839275222246405745257275088548364400416034343698203541834662707447, 794117791540033, 127462919420886, 433961890014806, - 2079752149524602, - 2043621302852222, + 21888242871839275222246405745257275088548364400416034343698204014528135815290, + 21888242871839275222246405745257275088548364400416034343698203978397289142910, 951001982065143, - 1314100917137030, + 21888242871839275222246405745257275088548364400416034343698203248876903427718, 240230081859704, - 1225666049693549, - 1839445257385985, - 2119155489794174, - 1412120901217643, + 21888242871839275222246405745257275088548364400416034343698203160442035984237, + 21888242871839275222246405745257275088548364400416034343698203774221243676673, + 21888242871839275222246405745257275088548364400416034343698204053931476084862, + 21888242871839275222246405745257275088548364400416034343698203346896887508331, 771631905454787, - 1855737835337656, - 1407148563966865, - 2051405258357166, - 1825199886105569, - 2229905422503048, - 1902669586188263, - 1258751584332626, - 1815416545299262, + 21888242871839275222246405745257275088548364400416034343698203790513821628344, + 21888242871839275222246405745257275088548364400416034343698203341924550257553, + 21888242871839275222246405745257275088548364400416034343698203986181244647854, + 21888242871839275222246405745257275088548364400416034343698203759975872396257, + 21888242871839275222246405745257275088548364400416034343698204164681408793736, + 21888242871839275222246405745257275088548364400416034343698203837445572478951, + 21888242871839275222246405745257275088548364400416034343698203193527570623314, + 21888242871839275222246405745257275088548364400416034343698203750192531589950, 560988464803287, - 1945761866881299, + 21888242871839275222246405745257275088548364400416034343698203880537853171987, 1082093290806615, 549747374233918, 506691276905612, 797944998579637, - 1838124406223787, - 1597216299060665, + 21888242871839275222246405745257275088548364400416034343698203772900392514475, + 21888242871839275222246405745257275088548364400416034343698203531992285351353, 269242338119758, - 1884204574573792, - 1197046859812931, + 21888242871839275222246405745257275088548364400416034343698203818980560864480, + 21888242871839275222246405745257275088548364400416034343698203131822846103619, 1085842042239307, - 2137178858672686, - 1878842860710339, - 2120156999739968, + 21888242871839275222246405745257275088548364400416034343698204071954844963374, + 21888242871839275222246405745257275088548364400416034343698203813618847001027, + 21888242871839275222246405745257275088548364400416034343698204054932986030656, 1053284490048555, 88806488518451, - 1618423612568927, - 1676386394593644, + 21888242871839275222246405745257275088548364400416034343698203553199598859615, + 21888242871839275222246405745257275088548364400416034343698203611162380884332, 161064478366048, 171671166044865, 701285498126610, @@ -3823,29 +3823,29 @@ pub global CRP: [Polynomial; L] = [ 585324213145676, 452682396775056, 156997052695484, - 1994064716103851, + 21888242871839275222246405745257275088548364400416034343698203928840702394539, 797450956780813, 207588471334388, 638875059797506, 655052305157656, - 1484360484564617, - 1904652811183926, - 2162356084609696, + 21888242871839275222246405745257275088548364400416034343698203419136470855305, + 21888242871839275222246405745257275088548364400416034343698203839428797474614, + 21888242871839275222246405745257275088548364400416034343698204097132070900384, 193043121388468, 815126391184120, 646379098021154, - 2224112830429721, + 21888242871839275222246405745257275088548364400416034343698204158888816720409, 675044288770603, - 1449646991364626, + 21888242871839275222246405745257275088548364400416034343698203384422977655314, 36755855641427, 225689672958732, - 2035289269102064, - 1396220373203194, + 21888242871839275222246405745257275088548364400416034343698203970065255392752, + 21888242871839275222246405745257275088548364400416034343698203330996359493882, 765077959843859, 276378699300213, 29472168004986, 876492324305583, - 1374845530365534, + 21888242871839275222246405745257275088548364400416034343698203309621516656222, 719048482914196, 1053499562471944, 810635238155239, @@ -3855,757 +3855,757 @@ pub global CRP: [Polynomial; L] = [ 626023970816947, 827811818006940, 1001044530948484, - 1691083335535244, + 21888242871839275222246405745257275088548364400416034343698203625859321825932, 843799784932422, 26307050415983, 897693179002494, - 2073327829050414, - 1475204204904878, + 21888242871839275222246405745257275088548364400416034343698204008103815341102, + 21888242871839275222246405745257275088548364400416034343698203409980191195566, 455550099035508, - 1943944601312238, - 1867910729710935, - 1506223143747658, - 1250642586068763, + 21888242871839275222246405745257275088548364400416034343698203878720587602926, + 21888242871839275222246405745257275088548364400416034343698203802686716001623, + 21888242871839275222246405745257275088548364400416034343698203440999130038346, + 21888242871839275222246405745257275088548364400416034343698203185418572359451, 192250930459842, - 1699370665860486, - 1140679282944837, + 21888242871839275222246405745257275088548364400416034343698203634146652151174, + 21888242871839275222246405745257275088548364400416034343698203075455269235525, 76439709546619, 465569514579346, 849540744023800, - 2062487293760576, - 1313000522610554, - 1556979923492867, - 2013125187923958, - 1444529268533833, + 21888242871839275222246405745257275088548364400416034343698203997263280051264, + 21888242871839275222246405745257275088548364400416034343698203247776508901242, + 21888242871839275222246405745257275088548364400416034343698203491755909783555, + 21888242871839275222246405745257275088548364400416034343698203947901174214646, + 21888242871839275222246405745257275088548364400416034343698203379305254824521, 360436865590319, - 1671870651726137, + 21888242871839275222246405745257275088548364400416034343698203606646638016825, 481570815298912, 208164594711193, - 1916717898628421, - 1425099067372172, - 1889645896086356, - 1732319458880407, + 21888242871839275222246405745257275088548364400416034343698203851493884919109, + 21888242871839275222246405745257275088548364400416034343698203359875053662860, + 21888242871839275222246405745257275088548364400416034343698203824421882377044, + 21888242871839275222246405745257275088548364400416034343698203667095445171095, 58113826006938, 663439461538355, 718470553603305, - 1900568924777262, - 1616168086012866, + 21888242871839275222246405745257275088548364400416034343698203835344911067950, + 21888242871839275222246405745257275088548364400416034343698203550944072303554, 910359699340211, - 1590970554368235, + 21888242871839275222246405745257275088548364400416034343698203525746540658923, 277598655743050, - 1476512199627260, + 21888242871839275222246405745257275088548364400416034343698203411288185917948, 630110692478625, - 1404172500042719, - 1195928652215577, - 1484591710828488, - 1763173890637334, + 21888242871839275222246405745257275088548364400416034343698203338948486333407, + 21888242871839275222246405745257275088548364400416034343698203130704638506265, + 21888242871839275222246405745257275088548364400416034343698203419367697119176, + 21888242871839275222246405745257275088548364400416034343698203697949876928022, 365497370816288, - 1467817875644606, - 1684504530575470, - 1883834417232103, + 21888242871839275222246405745257275088548364400416034343698203402593861935294, + 21888242871839275222246405745257275088548364400416034343698203619280516866158, + 21888242871839275222246405745257275088548364400416034343698203818610403522791, 633189803540568, - 1869881038597811, + 21888242871839275222246405745257275088548364400416034343698203804657024888499, 1042728550926086, - 1276649108436336, - 1620757675148501, - 1657916693317941, + 21888242871839275222246405745257275088548364400416034343698203211425094727024, + 21888242871839275222246405745257275088548364400416034343698203555533661439189, + 21888242871839275222246405745257275088548364400416034343698203592692679608629, 1055702135224517, 1036944117703493, 51319163427145, 1106413188640971, - 1173579027285933, - 2213443410342655, - 1967062739830652, + 21888242871839275222246405745257275088548364400416034343698203108355013576621, + 21888242871839275222246405745257275088548364400416034343698204148219396633343, + 21888242871839275222246405745257275088548364400416034343698203901838726121340, 323325120809869, 858183574625121, - 2246548775349928, + 21888242871839275222246405745257275088548364400416034343698204181324761640616, 163062602857216, - 1370684377730551, - 1405965776767109, + 21888242871839275222246405745257275088548364400416034343698203305460364021239, + 21888242871839275222246405745257275088548364400416034343698203340741763057797, 757537374293239, - 2108992011622123, - 2227980143629149, - 1887696624944144, - 1280766535968771, - 1235134322198662, - 1587037148681855, + 21888242871839275222246405745257275088548364400416034343698204043767997912811, + 21888242871839275222246405745257275088548364400416034343698204162756129919837, + 21888242871839275222246405745257275088548364400416034343698203822472611234832, + 21888242871839275222246405745257275088548364400416034343698203215542522259459, + 21888242871839275222246405745257275088548364400416034343698203169910308489350, + 21888242871839275222246405745257275088548364400416034343698203521813134972543, 356207897976503, - 1628410275023331, + 21888242871839275222246405745257275088548364400416034343698203563186261314019, 926329929314995, 798572480306776, - 2209541643678402, + 21888242871839275222246405745257275088548364400416034343698204144317629969090, 573596991070753, - 1496205746119245, + 21888242871839275222246405745257275088548364400416034343698203430981732409933, 646798586338537, - 1617237874844942, - 2229595074697997, + 21888242871839275222246405745257275088548364400416034343698203552013861135630, + 21888242871839275222246405745257275088548364400416034343698204164371060988685, 596654871350984, - 2151036790140260, - 1693912987502991, - 2163597633746095, + 21888242871839275222246405745257275088548364400416034343698204085812776430948, + 21888242871839275222246405745257275088548364400416034343698203628688973793679, + 21888242871839275222246405745257275088548364400416034343698204098373620036783, 702154562872667, 447715680373437, 939949615627240, - 1910332795083436, - 1486621989578134, + 21888242871839275222246405745257275088548364400416034343698203845108781374124, + 21888242871839275222246405745257275088548364400416034343698203421397975868822, 297908100799240, - 1222431550474945, - 1789812020087087, - 1597894229720497, + 21888242871839275222246405745257275088548364400416034343698203157207536765633, + 21888242871839275222246405745257275088548364400416034343698203724588006377775, + 21888242871839275222246405745257275088548364400416034343698203532670216011185, 875917183269112, - 1581690259345297, + 21888242871839275222246405745257275088548364400416034343698203516466245635985, 633463156031463, - 1933075889438354, - 2035734031710227, - 1386002589137707, + 21888242871839275222246405745257275088548364400416034343698203867851875729042, + 21888242871839275222246405745257275088548364400416034343698203970510018000915, + 21888242871839275222246405745257275088548364400416034343698203320778575428395, 228473430305785, 70774541078918, 656141353515355, 1022663483770016, - 1182932747484398, - 2121510770887976, + 21888242871839275222246405745257275088548364400416034343698203117708733775086, + 21888242871839275222246405745257275088548364400416034343698204056286757178664, 687379175706373, - 1141467685665855, - 1838421169869399, + 21888242871839275222246405745257275088548364400416034343698203076243671956543, + 21888242871839275222246405745257275088548364400416034343698203773197156160087, 1028003001846630, 1012608298977255, - 2001052983784826, - 1256280694686393, - 1853657127247554, + 21888242871839275222246405745257275088548364400416034343698203935828970075514, + 21888242871839275222246405745257275088548364400416034343698203191056680977081, + 21888242871839275222246405745257275088548364400416034343698203788433113538242, 271850054471093, 655466597795619, 257284713651297, 471019157357864, 1018103628837359, - 1363932695574047, - 1548828827065066, + 21888242871839275222246405745257275088548364400416034343698203298708681864735, + 21888242871839275222246405745257275088548364400416034343698203483604813355754, 510529092985978, - 1945022310703073, + 21888242871839275222246405745257275088548364400416034343698203879798296993761, 1031232685309007, - 1429457796738056, - 1948587667662303, - 1648997745242133, - 1297962929324296, + 21888242871839275222246405745257275088548364400416034343698203364233783028744, + 21888242871839275222246405745257275088548364400416034343698203883363653952991, + 21888242871839275222246405745257275088548364400416034343698203583773731532821, + 21888242871839275222246405745257275088548364400416034343698203232738915614984, 1070982364799130, 687096446397165, 761948071243685, 883024100186782, - 2095289970520986, + 21888242871839275222246405745257275088548364400416034343698204030065956811674, 774503213901117, 70093709295731, - 1547946252280788, - 1602448164862824, + 21888242871839275222246405745257275088548364400416034343698203482722238571476, + 21888242871839275222246405745257275088548364400416034343698203537224151153512, 182045377488172, - 1782522199244443, - 1785922864532218, + 21888242871839275222246405745257275088548364400416034343698203717298185535131, + 21888242871839275222246405745257275088548364400416034343698203720698850822906, 1080617482654714, 344882789593977, 937580464376835, 1119429931488217, 299256869148943, - 1236913392413630, - 1613162143064126, - 1507133265768418, - 1883501363211989, - 1959850167716871, - 1697268504385474, + 21888242871839275222246405745257275088548364400416034343698203171689378704318, + 21888242871839275222246405745257275088548364400416034343698203547938129354814, + 21888242871839275222246405745257275088548364400416034343698203441909252059106, + 21888242871839275222246405745257275088548364400416034343698203818277349502677, + 21888242871839275222246405745257275088548364400416034343698203894626154007559, + 21888242871839275222246405745257275088548364400416034343698203632044490676162, 866365579052277, - 1830550116845256, + 21888242871839275222246405745257275088548364400416034343698203765326103135944, 810782115658372, - 1765763590026053, - 2249837380520078, + 21888242871839275222246405745257275088548364400416034343698203700539576316741, + 21888242871839275222246405745257275088548364400416034343698204184613366810766, 1123510717993082, 166867293101536, - 1804108444678686, + 21888242871839275222246405745257275088548364400416034343698203738884430969374, 384283317705372, - 1351554814516103, - 2049063264719533, - 2089576782963396, + 21888242871839275222246405745257275088548364400416034343698203286330800806791, + 21888242871839275222246405745257275088548364400416034343698203983839251010221, + 21888242871839275222246405745257275088548364400416034343698204024352769254084, 899922636196445, 494355321328177, 874213687099205, - 2071437882792927, + 21888242871839275222246405745257275088548364400416034343698204006213869083615, 406509247799670, - 2051499599763271, - 1509937846969622, + 21888242871839275222246405745257275088548364400416034343698203986275586053959, + 21888242871839275222246405745257275088548364400416034343698203444713833260310, 392968100383756, - 2231137402598432, - 1143918466498245, + 21888242871839275222246405745257275088548364400416034343698204165913388889120, + 21888242871839275222246405745257275088548364400416034343698203078694452788933, 455764453956102, - 1516719110619634, + 21888242871839275222246405745257275088548364400416034343698203451495096910322, 590656149493843, - 1223934054170013, - 1331907387041023, + 21888242871839275222246405745257275088548364400416034343698203158710040460701, + 21888242871839275222246405745257275088548364400416034343698203266683373331711, 982440482579438, - 1961682959079378, + 21888242871839275222246405745257275088548364400416034343698203896458945370066, 304926424612551, 131143837433004, 247419455739463, 133679341334832, 711433287246242, - 2036995532462062, - 2121345046099589, + 21888242871839275222246405745257275088548364400416034343698203971771518752750, + 21888242871839275222246405745257275088548364400416034343698204056121032390277, 985348460832936, 624799398104458, - 1756798923344766, + 21888242871839275222246405745257275088548364400416034343698203691574909635454, 1025350708231762, 634181161068469, 1030319025258800, 540195559408847, - 1472661578040456, + 21888242871839275222246405745257275088548364400416034343698203407437564331144, 943443127061368, - 2125268933393959, + 21888242871839275222246405745257275088548364400416034343698204060044919684647, 130212614966937, - 2083946711849649, - 1592462122003555, + 21888242871839275222246405745257275088548364400416034343698204018722698140337, + 21888242871839275222246405745257275088548364400416034343698203527238108294243, 509276735334418, 224215241062325, 534138624491932, 172052000895568, 724889140642381, - 1814894596151740, + 21888242871839275222246405745257275088548364400416034343698203749670582442428, 229800674901610, 647252950573367, 504495821317203, - 2202749062439973, - 1793046570268971, - 1226009211248343, + 21888242871839275222246405745257275088548364400416034343698204137525048730661, + 21888242871839275222246405745257275088548364400416034343698203727822556559659, + 21888242871839275222246405745257275088548364400416034343698203160785197539031, 1033272628282252, 257853487715261, 1552128800999, - 1794102758869205, - 1253433861073186, - 1130239194458025, + 21888242871839275222246405745257275088548364400416034343698203728878745159893, + 21888242871839275222246405745257275088548364400416034343698203188209847363874, + 21888242871839275222246405745257275088548364400416034343698203065015180748713, 482218919933170, - 1717907346122885, - 2087001566146470, + 21888242871839275222246405745257275088548364400416034343698203652683332413573, + 21888242871839275222246405745257275088548364400416034343698204021777552437158, 280145159975422, 65616389579361, - 1181476066327836, - 1353877167228162, + 21888242871839275222246405745257275088548364400416034343698203116252052618524, + 21888242871839275222246405745257275088548364400416034343698203288653153518850, 943046026774724, - 1732542924923707, - 1490721791275594, + 21888242871839275222246405745257275088548364400416034343698203667318911214395, + 21888242871839275222246405745257275088548364400416034343698203425497777566282, 654295103687741, 743960272633466, 1047827907768836, 273020986730895, - 2115731557827735, - 1237925753938034, - 1870712261430893, - 1689645839752506, + 21888242871839275222246405745257275088548364400416034343698204050507544118423, + 21888242871839275222246405745257275088548364400416034343698203172701740228722, + 21888242871839275222246405745257275088548364400416034343698203805488247721581, + 21888242871839275222246405745257275088548364400416034343698203624421826043194, 890529458298252, 455401677340318, 55305906345546, 913715747331471, 235584532767083, 194904909256321, - 2227928178771559, + 21888242871839275222246405745257275088548364400416034343698204162704165062247, 989315538069315, - 1805076091540347, - 1345425138071713, + 21888242871839275222246405745257275088548364400416034343698203739852077831035, + 21888242871839275222246405745257275088548364400416034343698203280201124362401, 221980864608480, 790034086591273, - 1375779434242440, - 1256315698946205, - 1303700448088286, + 21888242871839275222246405745257275088548364400416034343698203310555420533128, + 21888242871839275222246405745257275088548364400416034343698203191091685236893, + 21888242871839275222246405745257275088548364400416034343698203238476434378974, 177938211508191, 833445543429169, 53920079007711, - 1497307193491412, - 1140431202686863, + 21888242871839275222246405745257275088548364400416034343698203432083179782100, + 21888242871839275222246405745257275088548364400416034343698203075207188977551, 431975591656650, - 1498048419040830, - 1263571581347401, - 1808574611863686, + 21888242871839275222246405745257275088548364400416034343698203432824405331518, + 21888242871839275222246405745257275088548364400416034343698203198347567638089, + 21888242871839275222246405745257275088548364400416034343698203743350598154374, 906284703672618, - 2052102171531326, + 21888242871839275222246405745257275088548364400416034343698203986878157822014, 574541983857316, - 1369074895733083, - 1669064451471103, - 1632966961856541, + 21888242871839275222246405745257275088548364400416034343698203303850882023771, + 21888242871839275222246405745257275088548364400416034343698203603840437761791, + 21888242871839275222246405745257275088548364400416034343698203567742948147229, 1117189113874925, 940181985079439, - 1665676843711680, - 1259883181017292, - 1863116548272467, - 1827587974925852, - 1492023815875470, + 21888242871839275222246405745257275088548364400416034343698203600452830002368, + 21888242871839275222246405745257275088548364400416034343698203194659167307980, + 21888242871839275222246405745257275088548364400416034343698203797892534563155, + 21888242871839275222246405745257275088548364400416034343698203762363961216540, + 21888242871839275222246405745257275088548364400416034343698203426799802166158, 1109739207266649, 679169831801208, - 2136925629325193, + 21888242871839275222246405745257275088548364400416034343698204071701615615881, 196771045621920, 586726791541617, - 1843072237990537, - 1554016967804658, + 21888242871839275222246405745257275088548364400416034343698203777848224281225, + 21888242871839275222246405745257275088548364400416034343698203488792954095346, 86625701444752, - 2048517692357291, + 21888242871839275222246405745257275088548364400416034343698203983293678647979, 338747481933217, - 2149958343487348, + 21888242871839275222246405745257275088548364400416034343698204084734329778036, 85973539766761, - 2073222409363903, + 21888242871839275222246405745257275088548364400416034343698204007998395654591, 262535118084326, 155183765810430, 247709135580871, - 1169304731468238, - 1177021153749590, + 21888242871839275222246405745257275088548364400416034343698203104080717758926, + 21888242871839275222246405745257275088548364400416034343698203111797140040278, 310694998635352, - 1133355264130110, + 21888242871839275222246405745257275088548364400416034343698203068131250420798, 412303427776994, - 1722729740266551, - 1589775948493809, - 1446548105380580, - 1856052934768302, + 21888242871839275222246405745257275088548364400416034343698203657505726557239, + 21888242871839275222246405745257275088548364400416034343698203524551934784497, + 21888242871839275222246405745257275088548364400416034343698203381324091671268, + 21888242871839275222246405745257275088548364400416034343698203790828921058990, 1072988087532382, - 1434994519520035, + 21888242871839275222246405745257275088548364400416034343698203369770505810723, 165490251750480, - 1808847073029159, + 21888242871839275222246405745257275088548364400416034343698203743623059319847, 379940084266937, - 1658155026036100, + 21888242871839275222246405745257275088548364400416034343698203592931012326788, 1062484890618374, 486530925195067, - 1863986344171869, + 21888242871839275222246405745257275088548364400416034343698203798762330462557, 901399319915821, 229369319633498, 91390206366920, - 1127318670570912, + 21888242871839275222246405745257275088548364400416034343698203062094656861600, 83070880892452, 401372908517263, - 2249700310467891, - 1858258810256129, + 21888242871839275222246405745257275088548364400416034343698204184476296758579, + 21888242871839275222246405745257275088548364400416034343698203793034796546817, 444258055828445, - 2075039323066060, + 21888242871839275222246405745257275088548364400416034343698204009815309356748, 558603620349501, - 1831040576399260, - 1943222850778173, + 21888242871839275222246405745257275088548364400416034343698203765816562689948, + 21888242871839275222246405745257275088548364400416034343698203877998837068861, 869053085023365, - 2070224636838944, + 21888242871839275222246405745257275088548364400416034343698204005000623129632, 933208574378069, - 2026559249680578, - 1911846385064069, - 1858174033004527, - 1303159763452852, + 21888242871839275222246405745257275088548364400416034343698203961335235971266, + 21888242871839275222246405745257275088548364400416034343698203846622371354757, + 21888242871839275222246405745257275088548364400416034343698203792950019295215, + 21888242871839275222246405745257275088548364400416034343698203237935749743540, 691887011003306, 56625471435654, 757183216774894, - 1235911469293716, + 21888242871839275222246405745257275088548364400416034343698203170687455584404, 771717624043485, 817793177226404, - 1719004742206933, + 21888242871839275222246405745257275088548364400416034343698203653780728497621, 1033496981953625, 1104465918461354, - 1735160146282428, - 2007626334629306, - 2179974513010916, - 2011174224572003, + 21888242871839275222246405745257275088548364400416034343698203669936132573116, + 21888242871839275222246405745257275088548364400416034343698203942402320919994, + 21888242871839275222246405745257275088548364400416034343698204114750499301604, + 21888242871839275222246405745257275088548364400416034343698203945950210862691, 586360150665970, 798747888868667, 1105027025903115, 207424280777772, - 2230603680123799, - 1739584701182552, - 1490178630578824, - 1798514464172109, + 21888242871839275222246405745257275088548364400416034343698204165379666414487, + 21888242871839275222246405745257275088548364400416034343698203674360687473240, + 21888242871839275222246405745257275088548364400416034343698203424954616869512, + 21888242871839275222246405745257275088548364400416034343698203733290450462797, 756090441154725, 538152586385346, - 1551731117031174, + 21888242871839275222246405745257275088548364400416034343698203486507103321862, 298067897337548, - 1458250237107493, + 21888242871839275222246405745257275088548364400416034343698203393026223398181, 104007921507195, 981634605354252, - 1553235027734086, + 21888242871839275222246405745257275088548364400416034343698203488011014024774, 769123100496402, - 1247096752659920, - 2033135339928478, + 21888242871839275222246405745257275088548364400416034343698203181872738950608, + 21888242871839275222246405745257275088548364400416034343698203967911326219166, 313445823211107, 348576827843358, 1073521978032744, 18574167252495, 234634197624718, 571473031006103, - 1627151825559916, + 21888242871839275222246405745257275088548364400416034343698203561927811850604, 359508006615160, 171312898153442, 445513534743545, 1063175392553660, 799517208857222, - 1522285998316178, + 21888242871839275222246405745257275088548364400416034343698203457061984606866, 434073321993143, 581886290551844, - 1661565947218143, - 1512623143518263, - 1530655890199228, - 1453948988076140, + 21888242871839275222246405745257275088548364400416034343698203596341933508831, + 21888242871839275222246405745257275088548364400416034343698203447399129808951, + 21888242871839275222246405745257275088548364400416034343698203465431876489916, + 21888242871839275222246405745257275088548364400416034343698203388724974366828, 647250872004678, 705662384283423, - 2144999691096824, + 21888242871839275222246405745257275088548364400416034343698204079775677387512, 613067470203927, - 2214377337657757, + 21888242871839275222246405745257275088548364400416034343698204149153323948445, 218060699488358, - 1532236262435901, - 1746578118949732, - 1888273150783634, + 21888242871839275222246405745257275088548364400416034343698203467012248726589, + 21888242871839275222246405745257275088548364400416034343698203681354105240420, + 21888242871839275222246405745257275088548364400416034343698203823049137074322, 579661210540970, - 2085912757643817, - 1626911571618556, - 1781313102974630, - 1249516692551012, - 1543382114526748, + 21888242871839275222246405745257275088548364400416034343698204020688743934505, + 21888242871839275222246405745257275088548364400416034343698203561687557909244, + 21888242871839275222246405745257275088548364400416034343698203716089089265318, + 21888242871839275222246405745257275088548364400416034343698203184292678841700, + 21888242871839275222246405745257275088548364400416034343698203478158100817436, 364764268176406, 773068475546342, - 2062714885408705, - 2094716458475106, - 1699179212500587, + 21888242871839275222246405745257275088548364400416034343698203997490871699393, + 21888242871839275222246405745257275088548364400416034343698204029492444765794, + 21888242871839275222246405745257275088548364400416034343698203633955198791275, 578807989657367, - 2119581270519334, + 21888242871839275222246405745257275088548364400416034343698204054357256810022, 868570919799103, 1036234836677592, - 1796509988569798, - 2167957976332275, - 1332741142745193, - 1873581820905578, - 1925612977587332, - 1417462064749958, + 21888242871839275222246405745257275088548364400416034343698203731285974860486, + 21888242871839275222246405745257275088548364400416034343698204102733962622963, + 21888242871839275222246405745257275088548364400416034343698203267517129035881, + 21888242871839275222246405745257275088548364400416034343698203808357807196266, + 21888242871839275222246405745257275088548364400416034343698203860388963878020, + 21888242871839275222246405745257275088548364400416034343698203352238051040646, 517243202363064, 485671835867573, - 1831522836659112, - 1694759707578492, + 21888242871839275222246405745257275088548364400416034343698203766298822949800, + 21888242871839275222246405745257275088548364400416034343698203629535693869180, 907121745504630, 880449366847136, 368327519683472, 986414033166558, 410492806622505, 352564697974546, - 1887901526546148, - 1676028380229445, + 21888242871839275222246405745257275088548364400416034343698203822677512836836, + 21888242871839275222246405745257275088548364400416034343698203610804366520133, 644057921265159, 486673985273816, 128189771802490, - 2073266121291745, + 21888242871839275222246405745257275088548364400416034343698204008042107582433, 1056913767115102, - 1684731156942194, - 1798650214461161, - 1501299272260075, - 1467129292253006, + 21888242871839275222246405745257275088548364400416034343698203619507143232882, + 21888242871839275222246405745257275088548364400416034343698203733426200751849, + 21888242871839275222246405745257275088548364400416034343698203436075258550763, + 21888242871839275222246405745257275088548364400416034343698203401905278543694, 781255057116748, 92093079999629, 413628199602335, - 1879385517042829, - 2222808082862083, - 1316012986259287, + 21888242871839275222246405745257275088548364400416034343698203814161503333517, + 21888242871839275222246405745257275088548364400416034343698204157584069152771, + 21888242871839275222246405745257275088548364400416034343698203250788972549975, 417750088782074, - 2009955573945665, - 1506177843974751, - 1715849530444032, - 1181034298129969, - 1872240324881345, - 1885040235128968, + 21888242871839275222246405745257275088548364400416034343698203944731560236353, + 21888242871839275222246405745257275088548364400416034343698203440953830265439, + 21888242871839275222246405745257275088548364400416034343698203650625516734720, + 21888242871839275222246405745257275088548364400416034343698203115810284420657, + 21888242871839275222246405745257275088548364400416034343698203807016311172033, + 21888242871839275222246405745257275088548364400416034343698203819816221419656, 615133886047494, - 1653098185731810, - 1659239628371762, - 2211854117215983, - 1957112530585280, - 1443844290720276, + 21888242871839275222246405745257275088548364400416034343698203587874172022498, + 21888242871839275222246405745257275088548364400416034343698203594015614662450, + 21888242871839275222246405745257275088548364400416034343698204146630103506671, + 21888242871839275222246405745257275088548364400416034343698203891888516875968, + 21888242871839275222246405745257275088548364400416034343698203378620277010964, 690460357873105, 422998056325305, - 1201889936104927, + 21888242871839275222246405745257275088548364400416034343698203136665922395615, 259439994801644, 793578619838021, 677824268471001, - 1838895589774325, + 21888242871839275222246405745257275088548364400416034343698203773671576065013, 252957805457005, - 1172370314537250, + 21888242871839275222246405745257275088548364400416034343698203107146300827938, 16988343689141, 238210144786224, - 1947998670132555, - 1354646374814550, - 1618105819976582, + 21888242871839275222246405745257275088548364400416034343698203882774656423243, + 21888242871839275222246405745257275088548364400416034343698203289422361105238, + 21888242871839275222246405745257275088548364400416034343698203552881806267270, 1050711634028179, 676746936578202, - 1580149954529177, - 1987523318412875, - 1778487573000584, - 1784960020441535, + 21888242871839275222246405745257275088548364400416034343698203514925940819865, + 21888242871839275222246405745257275088548364400416034343698203922299304703563, + 21888242871839275222246405745257275088548364400416034343698203713263559291272, + 21888242871839275222246405745257275088548364400416034343698203719736006732223, 952769506004976, - 1539541948281655, + 21888242871839275222246405745257275088548364400416034343698203474317934572343, 550703040765871, - 1899034661823386, - 1963353596051170, + 21888242871839275222246405745257275088548364400416034343698203833810648114074, + 21888242871839275222246405745257275088548364400416034343698203898129582341858, 871027796878825, 1118538994591826, 878948850839635, - 1646708128874350, + 21888242871839275222246405745257275088548364400416034343698203581484115165038, 991250675630855, - 1189815772922292, - 2027302736805512, + 21888242871839275222246405745257275088548364400416034343698203124591759212980, + 21888242871839275222246405745257275088548364400416034343698203962078723096200, 408820887512907, 489144297353260, 914835868651199, - 2117790532450569, - 1431573356986878, + 21888242871839275222246405745257275088548364400416034343698204052566518741257, + 21888242871839275222246405745257275088548364400416034343698203366349343277566, 903980711228200, 1087800170384713, - 1619184454534261, + 21888242871839275222246405745257275088548364400416034343698203553960440824949, 721232816386590, - 1363643374092707, + 21888242871839275222246405745257275088548364400416034343698203298419360383395, 299826469016077, - 1696029908663594, - 1647127757291308, + 21888242871839275222246405745257275088548364400416034343698203630805894954282, + 21888242871839275222246405745257275088548364400416034343698203581903743581996, 223799344382131, 123466103242499, - 1858804609524356, - 1197756371230590, + 21888242871839275222246405745257275088548364400416034343698203793580595815044, + 21888242871839275222246405745257275088548364400416034343698203132532357521278, 301455183533018, 634697785575422, - 1600754318010421, + 21888242871839275222246405745257275088548364400416034343698203535530304301109, 357495564274842, 1100367960680358, - 1491029792102100, - 1954824548130899, - 1644527205540613, + 21888242871839275222246405745257275088548364400416034343698203425805778392788, + 21888242871839275222246405745257275088548364400416034343698203889600534421587, + 21888242871839275222246405745257275088548364400416034343698203579303191831301, 552673099359662, 177964627324916, 276096445750515, - 1325863537090819, - 2156444946876787, - 2248804887527585, - 1345507629721506, - 2164473066402851, + 21888242871839275222246405745257275088548364400416034343698203260639523381507, + 21888242871839275222246405745257275088548364400416034343698204091220933167475, + 21888242871839275222246405745257275088548364400416034343698204183580873818273, + 21888242871839275222246405745257275088548364400416034343698203280283616012194, + 21888242871839275222246405745257275088548364400416034343698204099249052693539, 623607550465463, - 1275289349878778, + 21888242871839275222246405745257275088548364400416034343698203210065336169466, 227625305935230, 993782217848444, 329007665001878, 222887656751197, - 1367700882480599, - 1356656603853228, - 1259160968255251, - 1730040884952752, + 21888242871839275222246405745257275088548364400416034343698203302476868771287, + 21888242871839275222246405745257275088548364400416034343698203291432590143916, + 21888242871839275222246405745257275088548364400416034343698203193936954545939, + 21888242871839275222246405745257275088548364400416034343698203664816871243440, 94365546216632, - 1556009404089383, - 1248482800153757, + 21888242871839275222246405745257275088548364400416034343698203490785390380071, + 21888242871839275222246405745257275088548364400416034343698203183258786444445, 628881630835572, 636687747612477, 394326432092553, - 2183877659857886, - 1458959658183073, - 2131366518676652, - 1537302359339712, + 21888242871839275222246405745257275088548364400416034343698204118653646148574, + 21888242871839275222246405745257275088548364400416034343698203393735644473761, + 21888242871839275222246405745257275088548364400416034343698204066142504967340, + 21888242871839275222246405745257275088548364400416034343698203472078345630400, 839449745236728, 1000953882372213, 947882949373457, - 1333865122659033, - 1492450320045818, + 21888242871839275222246405745257275088548364400416034343698203268641108949721, + 21888242871839275222246405745257275088548364400416034343698203427226306336506, 151639440903763, 126884516313113, 962246782126042, 206852967173999, - 1641986040303233, - 1532732910932286, + 21888242871839275222246405745257275088548364400416034343698203576762026593921, + 21888242871839275222246405745257275088548364400416034343698203467508897222974, 857829038627651, 781790288458580, 530518393818180, 230212302078738, - 1628763521311019, + 21888242871839275222246405745257275088548364400416034343698203563539507601707, 950831941966048, 875893119936067, - 2241787739394238, - 2029122241242747, - 1598611754065023, + 21888242871839275222246405745257275088548364400416034343698204176563725684926, + 21888242871839275222246405745257275088548364400416034343698203963898227533435, + 21888242871839275222246405745257275088548364400416034343698203533387740355711, 99544551776305, 1106166241350152, - 1876859922640422, - 2191040403593880, + 21888242871839275222246405745257275088548364400416034343698203811635908931110, + 21888242871839275222246405745257275088548364400416034343698204125816389884568, 373646734606261, - 1708979257205275, + 21888242871839275222246405745257275088548364400416034343698203643755243495963, 625417269345804, 1037541848757542, 436009611597573, - 1567671386135717, + 21888242871839275222246405745257275088548364400416034343698203502447372426405, 820886424261286, 616939090176639, - 1420551634952416, + 21888242871839275222246405745257275088548364400416034343698203355327621243104, 650760667455082, - 1988421262942730, + 21888242871839275222246405745257275088548364400416034343698203923197249233418, 247479225847601, - 2095719247009182, - 1675159042722211, - 1257210371280953, - 1130015644384328, + 21888242871839275222246405745257275088548364400416034343698204030495233299870, + 21888242871839275222246405745257275088548364400416034343698203609935029012899, + 21888242871839275222246405745257275088548364400416034343698203191986357571641, + 21888242871839275222246405745257275088548364400416034343698203064791630675016, 1035802820453454, - 1957109056598074, - 1662071758477760, + 21888242871839275222246405745257275088548364400416034343698203891885042888762, + 21888242871839275222246405745257275088548364400416034343698203596847744768448, 991468980443554, 1055900178539544, - 2067922407933222, - 2056607631806510, - 1707216413570178, + 21888242871839275222246405745257275088548364400416034343698204002698394223910, + 21888242871839275222246405745257275088548364400416034343698203991383618097198, + 21888242871839275222246405745257275088548364400416034343698203641992399860866, 702829456514162, - 2093023810070138, + 21888242871839275222246405745257275088548364400416034343698204027799796360826, 27149909273181, 209904782909040, 483144487015442, - 1227388879709278, + 21888242871839275222246405745257275088548364400416034343698203162164865999966, 703664227411976, 163777442399452, 166772946066388, - 1347996447271274, + 21888242871839275222246405745257275088548364400416034343698203282772433561962, 897008720212362, - 1730952476903100, - 2157204809058904, - 1286546080632173, - 1571325783328937, + 21888242871839275222246405745257275088548364400416034343698203665728463193788, + 21888242871839275222246405745257275088548364400416034343698204091980795349592, + 21888242871839275222246405745257275088548364400416034343698203221322066922861, + 21888242871839275222246405745257275088548364400416034343698203506101769619625, 715857878900738, - 2021429447855638, - 2116364277029630, - 2204840193804379, + 21888242871839275222246405745257275088548364400416034343698203956205434146326, + 21888242871839275222246405745257275088548364400416034343698204051140263320318, + 21888242871839275222246405745257275088548364400416034343698204139616180095067, 124337759076877, 1067816941615760, 658309882010351, - 2090605481257309, + 21888242871839275222246405745257275088548364400416034343698204025381467547997, 194912821252313, - 1982857112669639, - 1955442497203830, + 21888242871839275222246405745257275088548364400416034343698203917633098960327, + 21888242871839275222246405745257275088548364400416034343698203890218483494518, 307198208513534, - 2076676340522593, + 21888242871839275222246405745257275088548364400416034343698204011452326813281, 852544670398523, - 1836281012820383, - 1774406207206238, - 1575003302774052, - 1406461879598708, - 2175125275376835, + 21888242871839275222246405745257275088548364400416034343698203771056999111071, + 21888242871839275222246405745257275088548364400416034343698203709182193496926, + 21888242871839275222246405745257275088548364400416034343698203509779289064740, + 21888242871839275222246405745257275088548364400416034343698203341237865889396, + 21888242871839275222246405745257275088548364400416034343698204109901261667523, 357496431254726, 1086725541784577, - 1672462746054531, + 21888242871839275222246405745257275088548364400416034343698203607238732345219, 15851895169959, - 1467144369200970, - 1961150557614738, - 1500519058674173, + 21888242871839275222246405745257275088548364400416034343698203401920355491658, + 21888242871839275222246405745257275088548364400416034343698203895926543905426, + 21888242871839275222246405745257275088548364400416034343698203435295044964861, 297645439847142, - 1511746679559861, - 1231222450046567, - 1678852492874741, - 1906474671303447, + 21888242871839275222246405745257275088548364400416034343698203446522665850549, + 21888242871839275222246405745257275088548364400416034343698203165998436337255, + 21888242871839275222246405745257275088548364400416034343698203613628479165429, + 21888242871839275222246405745257275088548364400416034343698203841250657594135, 1021145398031120, - 1722930479413178, + 21888242871839275222246405745257275088548364400416034343698203657706465703866, 909626014114396, 823725429464930, - 1853216959391398, - 2069562851750168, + 21888242871839275222246405745257275088548364400416034343698203787992945682086, + 21888242871839275222246405745257275088548364400416034343698204004338838040856, 60725160722700, - 2076451905431626, - 2032532261374524, - 1569565524844489, - 1268770958610337, - 2047428984061800, + 21888242871839275222246405745257275088548364400416034343698204011227891722314, + 21888242871839275222246405745257275088548364400416034343698203967308247665212, + 21888242871839275222246405745257275088548364400416034343698203504341511135177, + 21888242871839275222246405745257275088548364400416034343698203203546944901025, + 21888242871839275222246405745257275088548364400416034343698203982204970352488, 810839257904885, - 1801908151924559, + 21888242871839275222246405745257275088548364400416034343698203736684138215247, 531846097993578, - 1583149644033701, - 1682663999160165, - 2058221758126865, - 1328113255889594, + 21888242871839275222246405745257275088548364400416034343698203517925630324389, + 21888242871839275222246405745257275088548364400416034343698203617439985450853, + 21888242871839275222246405745257275088548364400416034343698203992997744417553, + 21888242871839275222246405745257275088548364400416034343698203262889242180282, 10940074029657, 27590702206455, 635207789583388, - 1642969850310003, - 1874307547143640, - 1373593469510857, - 1268114001661905, - 1978348188434323, + 21888242871839275222246405745257275088548364400416034343698203577745836600691, + 21888242871839275222246405745257275088548364400416034343698203809083533434328, + 21888242871839275222246405745257275088548364400416034343698203308369455801545, + 21888242871839275222246405745257275088548364400416034343698203202889987952593, + 21888242871839275222246405745257275088548364400416034343698203913124174725011, 700414183333042, - 1661727093574943, + 21888242871839275222246405745257275088548364400416034343698203596503079865631, 837245133246396, - 1203876791624117, + 21888242871839275222246405745257275088548364400416034343698203138652777914805, 257996725277842, 516674275824073, - 2017572402615340, + 21888242871839275222246405745257275088548364400416034343698203952348388906028, 327105836695675, 163530686251532, - 1278163028018636, + 21888242871839275222246405745257275088548364400416034343698203212939014309324, 162923407506850, - 1717491760223119, - 2065204922579565, - 2162828577362942, - 2220204060431861, - 2152859675295020, - 1413072612708145, + 21888242871839275222246405745257275088548364400416034343698203652267746513807, + 21888242871839275222246405745257275088548364400416034343698203999980908870253, + 21888242871839275222246405745257275088548364400416034343698204097604563653630, + 21888242871839275222246405745257275088548364400416034343698204154980046722549, + 21888242871839275222246405745257275088548364400416034343698204087635661585708, + 21888242871839275222246405745257275088548364400416034343698203347848598998833, 419464925649127, 732226687541059, 524594006482337, 548296095678200, - 2006821041967927, - 1214921752454758, + 21888242871839275222246405745257275088548364400416034343698203941597028258615, + 21888242871839275222246405745257275088548364400416034343698203149697738745446, 417251853774256, 851988398255718, - 1606971630858943, + 21888242871839275222246405745257275088548364400416034343698203541747617149631, 978171702334846, - 1391107482202925, + 21888242871839275222246405745257275088548364400416034343698203325883468493613, 93205071283571, 1089918497061751, - 1911782267919960, + 21888242871839275222246405745257275088548364400416034343698203846558254210648, 220755755981220, - 1860959815006160, + 21888242871839275222246405745257275088548364400416034343698203795735801296848, 620855950212405, - 1868746112714661, - 1489693422022084, + 21888242871839275222246405745257275088548364400416034343698203803522099005349, + 21888242871839275222246405745257275088548364400416034343698203424469408312772, 475861042444294, 606238229940521, 584714199538690, - 1625228165994048, - 1833892437035459, - 1758746115069905, + 21888242871839275222246405745257275088548364400416034343698203560004152284736, + 21888242871839275222246405745257275088548364400416034343698203768668423326147, + 21888242871839275222246405745257275088548364400416034343698203693522101360593, 54327646188591, - 2021127911004006, - 1885694992342033, - 2027307555112406, + 21888242871839275222246405745257275088548364400416034343698203955903897294694, + 21888242871839275222246405745257275088548364400416034343698203820470978632721, + 21888242871839275222246405745257275088548364400416034343698203962083541403094, 376032973828305, 744774050267126, 4865120824849, 779503497979018, 913252552289600, 527572436491268, - 1584107869826258, - 1816356254405639, - 1791740026392915, + 21888242871839275222246405745257275088548364400416034343698203518883856116946, + 21888242871839275222246405745257275088548364400416034343698203751132240696327, + 21888242871839275222246405745257275088548364400416034343698203726516012683603, 953819887692802, - 2165054149498908, - 2191557032677583, - 1368681102534098, - 2111787968367874, - 1947569977928863, - 2230238552666516, - 1901946719169136, - 2102649617604500, + 21888242871839275222246405745257275088548364400416034343698204099830135789596, + 21888242871839275222246405745257275088548364400416034343698204126333018968271, + 21888242871839275222246405745257275088548364400416034343698203303457088824786, + 21888242871839275222246405745257275088548364400416034343698204046563954658562, + 21888242871839275222246405745257275088548364400416034343698203882345964219551, + 21888242871839275222246405745257275088548364400416034343698204165014538957204, + 21888242871839275222246405745257275088548364400416034343698203836722705459824, + 21888242871839275222246405745257275088548364400416034343698204037425603895188, 609422920549216, - 1906135961943144, - 1813695413413622, + 21888242871839275222246405745257275088548364400416034343698203840911948233832, + 21888242871839275222246405745257275088548364400416034343698203748471399704310, 907792302642530, 188204042863261, - 1286859074122359, + 21888242871839275222246405745257275088548364400416034343698203221635060413047, 334879760449506, 921565982020647, - 1351581395782470, - 1808583476578436, - 1266855264163064, + 21888242871839275222246405745257275088548364400416034343698203286357382073158, + 21888242871839275222246405745257275088548364400416034343698203743359462869124, + 21888242871839275222246405745257275088548364400416034343698203201631250453752, 363490517596561, - 1410870424334997, + 21888242871839275222246405745257275088548364400416034343698203345646410625685, 430780703994066, 503502175789204, - 1224988136942076, - 1578164414638562, + 21888242871839275222246405745257275088548364400416034343698203159764123232764, + 21888242871839275222246405745257275088548364400416034343698203512940400929250, 576745057345887, - 2198777298178079, + 21888242871839275222246405745257275088548364400416034343698204133553284468767, 53587369271918, 712051334976101, - 1780639915463797, - 1587672535784631, + 21888242871839275222246405745257275088548364400416034343698203715415901754485, + 21888242871839275222246405745257275088548364400416034343698203522448522075319, 379176465645950, 803845070117350, 766746722831061, - 1173360365063096, - 1367064935410234, - 2103072943497669, + 21888242871839275222246405745257275088548364400416034343698203108136351353784, + 21888242871839275222246405745257275088548364400416034343698203301840921700922, + 21888242871839275222246405745257275088548364400416034343698204037848929788357, 162129261057499, 130574543330449, 541731293139886, @@ -4614,637 +4614,637 @@ pub global CRP: [Polynomial; L] = [ 711161335414105, 629236560677188, 1042016657461366, - 1826781176401372, + 21888242871839275222246405745257275088548364400416034343698203761557162692060, 423777907076189, 935306925169272, - 1476182856522844, - 1797050238480382, - 1645357435340051, + 21888242871839275222246405745257275088548364400416034343698203410958842813532, + 21888242871839275222246405745257275088548364400416034343698203731826224771070, + 21888242871839275222246405745257275088548364400416034343698203580133421630739, 796291858537042, 685935225809220, 743900120512333, - 1395502774590936, - 1732672707739325, - 1402255505548302, - 1233769021343843, - 1288888745130915, - 2215651324027406, + 21888242871839275222246405745257275088548364400416034343698203330278760881624, + 21888242871839275222246405745257275088548364400416034343698203667448694030013, + 21888242871839275222246405745257275088548364400416034343698203337031491838990, + 21888242871839275222246405745257275088548364400416034343698203168545007634531, + 21888242871839275222246405745257275088548364400416034343698203223664731421603, + 21888242871839275222246405745257275088548364400416034343698204150427310318094, 1056815865177230, - 1526398371386072, - 1315426105122564, - 1152050044343622, - 1747248313154660, - 2043338546130380, + 21888242871839275222246405745257275088548364400416034343698203461174357676760, + 21888242871839275222246405745257275088548364400416034343698203250202091413252, + 21888242871839275222246405745257275088548364400416034343698203086826030634310, + 21888242871839275222246405745257275088548364400416034343698203682024299445348, + 21888242871839275222246405745257275088548364400416034343698203978114532421068, 448861315938534, 458266655431100, 475189719639069, 130711138992231, - 1348205149566938, + 21888242871839275222246405745257275088548364400416034343698203282981135857626, 129245452943626, - 1142896302822437, - 1873521197489801, - 2059089375483635, + 21888242871839275222246405745257275088548364400416034343698203077672289113125, + 21888242871839275222246405745257275088548364400416034343698203808297183780489, + 21888242871839275222246405745257275088548364400416034343698203993865361774323, 845785950033864, - 1383520097977359, - 2040994751932984, + 21888242871839275222246405745257275088548364400416034343698203318296084268047, + 21888242871839275222246405745257275088548364400416034343698203975770738223672, 363638433332134, - 2003455807415943, - 2016714530068470, + 21888242871839275222246405745257275088548364400416034343698203938231793706631, + 21888242871839275222246405745257275088548364400416034343698203951490516359158, 477796800694639, 186296725443575, 891492804904493, - 1713277781825176, - 1743335355990948, - 1617907258362109, - 1538518717963182, + 21888242871839275222246405745257275088548364400416034343698203648053768115864, + 21888242871839275222246405745257275088548364400416034343698203678111342281636, + 21888242871839275222246405745257275088548364400416034343698203552683244652797, + 21888242871839275222246405745257275088548364400416034343698203473294704253870, 551021815652234, 479171710675534, 802675020651390, 1008358947211638, - 1527586884733369, - 1129248642233939, - 1960388141417588, + 21888242871839275222246405745257275088548364400416034343698203462362871024057, + 21888242871839275222246405745257275088548364400416034343698203064024628524627, + 21888242871839275222246405745257275088548364400416034343698203895164127708276, 874464150289413, - 1777407608031560, - 2220864643176262, - 1545700657893270, - 1344094783309675, + 21888242871839275222246405745257275088548364400416034343698203712183594322248, + 21888242871839275222246405745257275088548364400416034343698204155640629466950, + 21888242871839275222246405745257275088548364400416034343698203480476644183958, + 21888242871839275222246405745257275088548364400416034343698203278870769600363, 468555362744787, - 1468954876293811, + 21888242871839275222246405745257275088548364400416034343698203403730862584499, 1097991907112176, - 1489436471816843, - 1583949746658389, + 21888242871839275222246405745257275088548364400416034343698203424212458107531, + 21888242871839275222246405745257275088548364400416034343698203518725732949077, 492426853267227, 519226284206684, - 1802702546429583, - 1822040546846346, + 21888242871839275222246405745257275088548364400416034343698203737478532720271, + 21888242871839275222246405745257275088548364400416034343698203756816533137034, 1098107453827847, 997578782903481, - 1327103066449070, + 21888242871839275222246405745257275088548364400416034343698203261879052739758, 878920554904561, - 1637688463211001, - 1558288837970092, + 21888242871839275222246405745257275088548364400416034343698203572464449501689, + 21888242871839275222246405745257275088548364400416034343698203493064824260780, 583067116933567, - 1789376124308794, + 21888242871839275222246405745257275088548364400416034343698203724152110599482, 998549951051051, - 1479411900851637, + 21888242871839275222246405745257275088548364400416034343698203414187887142325, 808204270718289, 502443728170798, - 1715293208010279, - 1607311660249167, - 1514433709098963, + 21888242871839275222246405745257275088548364400416034343698203650069194300967, + 21888242871839275222246405745257275088548364400416034343698203542087646539855, + 21888242871839275222246405745257275088548364400416034343698203449209695389651, 408920172709105, 589129816543120, 1008579739390548, - 1911926091714803, - 1770786063383616, + 21888242871839275222246405745257275088548364400416034343698203846702078005491, + 21888242871839275222246405745257275088548364400416034343698203705562049674304, 682438131798724, - 1614248386179391, - 1567559073720299, - 1313164593223380, - 1405433399092467, + 21888242871839275222246405745257275088548364400416034343698203549024372470079, + 21888242871839275222246405745257275088548364400416034343698203502335060010987, + 21888242871839275222246405745257275088548364400416034343698203247940579514068, + 21888242871839275222246405745257275088548364400416034343698203340209385383155, 343751289909742, 322376335240343, 792745947900770, - 1881054177601862, - 1850872279667563, - 1370483047129125, + 21888242871839275222246405745257275088548364400416034343698203815830163892550, + 21888242871839275222246405745257275088548364400416034343698203785648265958251, + 21888242871839275222246405745257275088548364400416034343698203305259033419813, 54871355868916, - 1951166985955103, + 21888242871839275222246405745257275088548364400416034343698203885942972245791, 960440528657235, - 1867672130726992, - 1133473706487654, - 1157793268768527, + 21888242871839275222246405745257275088548364400416034343698203802448117017680, + 21888242871839275222246405745257275088548364400416034343698203068249692778342, + 21888242871839275222246405745257275088548364400416034343698203092569255059215, 164113145461743, - 1932573136674408, - 1304094193129114, + 21888242871839275222246405745257275088548364400416034343698203867349122965096, + 21888242871839275222246405745257275088548364400416034343698203238870179419802, 251237795509111, - 1849290576201297, + 21888242871839275222246405745257275088548364400416034343698203784066562491985, 1013558493029207, - 1627836921425544, + 21888242871839275222246405745257275088548364400416034343698203562612907716232, 200477392431988, - 2113625323799547, + 21888242871839275222246405745257275088548364400416034343698204048401310090235, 46917659850143, - 1319166973337801, - 2125235077764649, - 1514176700814432, + 21888242871839275222246405745257275088548364400416034343698203253942959628489, + 21888242871839275222246405745257275088548364400416034343698204060011064055337, + 21888242871839275222246405745257275088548364400416034343698203448952687105120, 880676861139204, - 1772969589660240, + 21888242871839275222246405745257275088548364400416034343698203707745575950928, 213869988914502, - 1380721985146457, - 2151255812799095, + 21888242871839275222246405745257275088548364400416034343698203315497971437145, + 21888242871839275222246405745257275088548364400416034343698204086031799089783, 602158605298019, - 1197918100524502, + 21888242871839275222246405745257275088548364400416034343698203132694086815190, 568967756287881, 489862156337379, - 1755455993207959, - 1328410079857647, + 21888242871839275222246405745257275088548364400416034343698203690231979498647, + 21888242871839275222246405745257275088548364400416034343698203263186066148335, 356686701607295, - 1891771203662472, - 1284811619679744, + 21888242871839275222246405745257275088548364400416034343698203826547189953160, + 21888242871839275222246405745257275088548364400416034343698203219587605970432, 687356995290128, - 2071367057386036, - 1771530989655973, + 21888242871839275222246405745257275088548364400416034343698204006143043676724, + 21888242871839275222246405745257275088548364400416034343698203706306975946661, 519456182313819, - 1496752798490786, - 1595680270662634, + 21888242871839275222246405745257275088548364400416034343698203431528784781474, + 21888242871839275222246405745257275088548364400416034343698203530456256953322, 734157536164983, - 1542601164726718, + 21888242871839275222246405745257275088548364400416034343698203477377151017406, 887605258272202, 930407677705477, 909658499645997, - 1236250175037869, - 2204932777060764, + 21888242871839275222246405745257275088548364400416034343698203171026161328557, + 21888242871839275222246405745257275088548364400416034343698204139708763351452, 928515026667418, 95934733654981, 678789729947434, 116226351136793, - 2247990116098929, - 1217150128889561, - 1593303640749186, - 1201766844817070, + 21888242871839275222246405745257275088548364400416034343698204182766102389617, + 21888242871839275222246405745257275088548364400416034343698203151926115180249, + 21888242871839275222246405745257275088548364400416034343698203528079627039874, + 21888242871839275222246405745257275088548364400416034343698203136542831107758, 702289986166633, - 1130225695678477, + 21888242871839275222246405745257275088548364400416034343698203065001681969165, 460395394474252, - 1794347474870201, - 2055489551993328, - 2187558376738047, - 1655443656362738, + 21888242871839275222246405745257275088548364400416034343698203729123461160889, + 21888242871839275222246405745257275088548364400416034343698203990265538284016, + 21888242871839275222246405745257275088548364400416034343698204122334363028735, + 21888242871839275222246405745257275088548364400416034343698203590219642653426, 887431006545402, - 1602766164625908, - 1413351437546163, + 21888242871839275222246405745257275088548364400416034343698203537542150916596, + 21888242871839275222246405745257275088548364400416034343698203348127423836851, 657018421592546, - 2125635416292984, - 2161839823204107, - 1555553352681271, + 21888242871839275222246405745257275088548364400416034343698204060411402583672, + 21888242871839275222246405745257275088548364400416034343698204096615809494795, + 21888242871839275222246405745257275088548364400416034343698203490329338971959, 172352073759112, - 1586514115274250, - 1905284562620857, - 1436206157818260, - 1991716135762893, + 21888242871839275222246405745257275088548364400416034343698203521290101564938, + 21888242871839275222246405745257275088548364400416034343698203840060548911545, + 21888242871839275222246405745257275088548364400416034343698203370982144108948, + 21888242871839275222246405745257275088548364400416034343698203926492122053581, 814467231603263, 980778874106183, - 2231833735649207, - 1633922164527088, + 21888242871839275222246405745257275088548364400416034343698204166609721939895, + 21888242871839275222246405745257275088548364400416034343698203568698150817776, 660969542728609, - 1679767638489463, + 21888242871839275222246405745257275088548364400416034343698203614543624780151, 765811986243919, 837860973589351, - 1766774051335379, + 21888242871839275222246405745257275088548364400416034343698203701550037626067, 1065746155514168, - 1275130355123629, - 2053243750054889, - 1870391654541167, + 21888242871839275222246405745257275088548364400416034343698203209906341414317, + 21888242871839275222246405745257275088548364400416034343698203988019736345577, + 21888242871839275222246405745257275088548364400416034343698203805167640831855, 332689769125771, 388606928871679, - 1163752256297336, + 21888242871839275222246405745257275088548364400416034343698203098528242588024, 34427368721778, - 1359364126588713, + 21888242871839275222246405745257275088548364400416034343698203294140112879401, 830846202148014, 814821976298760, - 1815825593586355, + 21888242871839275222246405745257275088548364400416034343698203750601579877043, 226887833195915, - 1579493405416108, - 1750194701712200, + 21888242871839275222246405745257275088548364400416034343698203514269391706796, + 21888242871839275222246405745257275088548364400416034343698203684970688002888, 274888251321726, 905832493598956, - 1521885989370220, + 21888242871839275222246405745257275088548364400416034343698203456661975660908, 762425703170546, 957776951781444, 637304313473904, 741717999898015, - 1321931549714279, + 21888242871839275222246405745257275088548364400416034343698203256707536004967, 669865391328921, - 1487313438658842, - 2115270558098577, - 2233635910456340, + 21888242871839275222246405745257275088548364400416034343698203422089424949530, + 21888242871839275222246405745257275088548364400416034343698204050046544389265, + 21888242871839275222246405745257275088548364400416034343698204168411896747028, 475148420627647, 307047043065802, - 1129549532832290, + 21888242871839275222246405745257275088548364400416034343698203064325519122978, 456364703407839, - 2176503465409086, - 1463132731526934, + 21888242871839275222246405745257275088548364400416034343698204111279451699774, + 21888242871839275222246405745257275088548364400416034343698203397908717817622, 55794441724000, - 2078155772458412, - 2065058148679378, - 1618402486478594, - 1169765266984508, - 2095184582873994, - 2146696220999022, - 2073716790933782, + 21888242871839275222246405745257275088548364400416034343698204012931758749100, + 21888242871839275222246405745257275088548364400416034343698203999834134970066, + 21888242871839275222246405745257275088548364400416034343698203553178472769282, + 21888242871839275222246405745257275088548364400416034343698203104541253275196, + 21888242871839275222246405745257275088548364400416034343698204029960569164682, + 21888242871839275222246405745257275088548364400416034343698204081472207289710, + 21888242871839275222246405745257275088548364400416034343698204008492777224470, 18401640060908, 894819357643053, - 1602284434271677, - 1772486583013215, + 21888242871839275222246405745257275088548364400416034343698203537060420562365, + 21888242871839275222246405745257275088548364400416034343698203707262569303903, 34603679786118, - 2031318250944694, + 21888242871839275222246405745257275088548364400416034343698203966094237235382, 475188042516187, 1023087217725608, 254649032071636, - 1850533456504316, + 21888242871839275222246405745257275088548364400416034343698203785309442795004, 306074224273003, - 1248401412502505, + 21888242871839275222246405745257275088548364400416034343698203183177398793193, 336659763797150, - 1940260246999945, - 1875075374318481, + 21888242871839275222246405745257275088548364400416034343698203875036233290633, + 21888242871839275222246405745257275088548364400416034343698203809851360609169, 1018708751228845, 1041701369590575, 863923678739864, - 1651483785822803, + 21888242871839275222246405745257275088548364400416034343698203586259772113491, 28688262117133, 862973339085232, - 1900708166260798, + 21888242871839275222246405745257275088548364400416034343698203835484152551486, 413893618955956, 718963520736422, - 2048697123495335, - 1410298046877942, + 21888242871839275222246405745257275088548364400416034343698203983473109786023, + 21888242871839275222246405745257275088548364400416034343698203345074033168630, 931900065397660, 986244075672199, - 1740113278534912, + 21888242871839275222246405745257275088548364400416034343698203674889264825600, 891824087568873, - 1310729963840329, + 21888242871839275222246405745257275088548364400416034343698203245505950131017, 571849374888959, 890252048496444, - 1343384344988539, + 21888242871839275222246405745257275088548364400416034343698203278160331279227, 250412560557307, - 1596383952701433, + 21888242871839275222246405745257275088548364400416034343698203531159938992121, 925721490857134, - 1946805285782442, - 1263340274610388, - 1668322183158303, - 1683246567387197, - 1399599579288065, - 1844900859567841, + 21888242871839275222246405745257275088548364400416034343698203881581272073130, + 21888242871839275222246405745257275088548364400416034343698203198116260901076, + 21888242871839275222246405745257275088548364400416034343698203603098169448991, + 21888242871839275222246405745257275088548364400416034343698203618022553677885, + 21888242871839275222246405745257275088548364400416034343698203334375565578753, + 21888242871839275222246405745257275088548364400416034343698203779676845858529, 587367616267585, 180578484925552, 1032268387541437, 425292251582857, 220192757842525, - 1713022800920324, + 21888242871839275222246405745257275088548364400416034343698203647798787211012, 355474771771821, 951843096544849, 286157840528762, 601521485822414, - 1714492956801809, - 2007643358317368, - 2064690381406984, - 1827772719877493, - 2090406021842028, + 21888242871839275222246405745257275088548364400416034343698203649268943092497, + 21888242871839275222246405745257275088548364400416034343698203942419344608056, + 21888242871839275222246405745257275088548364400416034343698203999466367697672, + 21888242871839275222246405745257275088548364400416034343698203762548706168181, + 21888242871839275222246405745257275088548364400416034343698204025182008132716, 543361087497089, 986972570226073, - 1777485542055447, - 1401102603364267, + 21888242871839275222246405745257275088548364400416034343698203712261528346135, + 21888242871839275222246405745257275088548364400416034343698203335878589654955, 735682712518455, 733075652293587, - 1931605205036606, + 21888242871839275222246405745257275088548364400416034343698203866381191327294, 378729403137818, 419126409248187, - 1694855488432917, + 21888242871839275222246405745257275088548364400416034343698203629631474723605, 947626678001224, 1107071842754613, 811120213466366, 1114411135086331, - 2125293270729017, - 2152851983201615, + 21888242871839275222246405745257275088548364400416034343698204060069257019705, + 21888242871839275222246405745257275088548364400416034343698204087627969492303, 855610201172190, 479646361474722, 834541858434536, 732681314191353, - 2009669174901345, + 21888242871839275222246405745257275088548364400416034343698203944445161192033, 360491694068542, 407592006438450, 440788841215142, 558616442409822, - 2221566173154062, + 21888242871839275222246405745257275088548364400416034343698204156342159444750, 675772479911683, 1001525526490698, 164556240837614, - 2001671692904631, - 1588845567590666, - 1203611885982172, + 21888242871839275222246405745257275088548364400416034343698203936447679195319, + 21888242871839275222246405745257275088548364400416034343698203523621553881354, + 21888242871839275222246405745257275088548364400416034343698203138387872272860, 57768812421538, - 1886962485954177, + 21888242871839275222246405745257275088548364400416034343698203821738472244865, 193062995774913, - 1937236960185740, + 21888242871839275222246405745257275088548364400416034343698203872012946476428, 997540998970865, - 1897281740455388, - 1931029909357632, + 21888242871839275222246405745257275088548364400416034343698203832057726746076, + 21888242871839275222246405745257275088548364400416034343698203865805895648320, 714519576005337, 884545026329578, - 2149709356091628, + 21888242871839275222246405745257275088548364400416034343698204084485342382316, 550115334250590, 760532155108080, 794827603434103, - 1845196344317071, - 1973262154270081, - 1137448609042809, + 21888242871839275222246405745257275088548364400416034343698203779972330607759, + 21888242871839275222246405745257275088548364400416034343698203908038140560769, + 21888242871839275222246405745257275088548364400416034343698203072224595333497, 189721205429140, 477135585047983, 345523185537831, - 1848275117343768, + 21888242871839275222246405745257275088548364400416034343698203783051103634456, 113565772863208, - 1681564107808976, + 21888242871839275222246405745257275088548364400416034343698203616340094099664, 898267873552828, 1035130951184207, 712251143674735, - 1918535947907172, + 21888242871839275222246405745257275088548364400416034343698203853311934197860, 317513856894966, - 1647561347327429, - 1434942685478238, + 21888242871839275222246405745257275088548364400416034343698203582337333618117, + 21888242871839275222246405745257275088548364400416034343698203369718671768926, 887900768757510, 18096231079994, 15980785307270, - 2016730439533552, + 21888242871839275222246405745257275088548364400416034343698203951506425824240, 1059347632893494, - 2137655619919275, - 1292123516332140, + 21888242871839275222246405745257275088548364400416034343698204072431606209963, + 21888242871839275222246405745257275088548364400416034343698203226899502622828, 893473349866828, - 2184101059822902, + 21888242871839275222246405745257275088548364400416034343698204118877046113590, 301404887626154, 544953084903670, 601083888039924, 469389677799382, 1119497230329356, - 1852395315833121, - 1602057435652492, + 21888242871839275222246405745257275088548364400416034343698203787171302123809, + 21888242871839275222246405745257275088548364400416034343698203536833421943180, 85467403151275, - 2152542583534944, - 1424120440264317, + 21888242871839275222246405745257275088548364400416034343698204087318569825632, + 21888242871839275222246405745257275088548364400416034343698203358896426555005, 877259173405150, - 1415739479941032, - 1875382823034389, + 21888242871839275222246405745257275088548364400416034343698203350515466231720, + 21888242871839275222246405745257275088548364400416034343698203810158809325077, 823961413830351, 33519654428630, 938165823410501, - 1465639542208676, + 21888242871839275222246405745257275088548364400416034343698203400415528499364, 940007061951947, - 2021729831412284, + 21888242871839275222246405745257275088548364400416034343698203956505817702972, 391676826927304, - 1888453204954273, + 21888242871839275222246405745257275088548364400416034343698203823229191244961, 850353194214063, 780509476328460, - 1171313827875722, - 1524954945619124, - 1346566365398823, + 21888242871839275222246405745257275088548364400416034343698203106089814166410, + 21888242871839275222246405745257275088548364400416034343698203459730931909812, + 21888242871839275222246405745257275088548364400416034343698203281342351689511, 571670411545547, - 1977036939046997, - 1611064818672568, + 21888242871839275222246405745257275088548364400416034343698203911812925337685, + 21888242871839275222246405745257275088548364400416034343698203545840804963256, 59551204233345, 50766930847862, - 2162218713315334, + 21888242871839275222246405745257275088548364400416034343698204096994699606022, 907210599119298, 700970327305422, 576830255060662, 1019212433586571, - 1524815327305006, - 2066129675709988, + 21888242871839275222246405745257275088548364400416034343698203459591313595694, + 21888242871839275222246405745257275088548364400416034343698204000905662000676, 710782859982608, 1107397773073014, - 1979162284047202, + 21888242871839275222246405745257275088548364400416034343698203913938270337890, 197106188080247, - 1481274947834443, + 21888242871839275222246405745257275088548364400416034343698203416050934125131, 353542426729461, - 1506093657974452, - 1918232993169028, - 2223978715758295, + 21888242871839275222246405745257275088548364400416034343698203440869644265140, + 21888242871839275222246405745257275088548364400416034343698203853008979459716, + 21888242871839275222246405745257275088548364400416034343698204158754702048983, 286779974507505, - 2063594446272032, - 1353619896375030, + 21888242871839275222246405745257275088548364400416034343698203998370432562720, + 21888242871839275222246405745257275088548364400416034343698203288395882665718, 294574185842533, 288489266699320, 1121680215792022, - 1229373206504974, + 21888242871839275222246405745257275088548364400416034343698203164149192795662, 884681857603054, - 1289454161889989, + 21888242871839275222246405745257275088548364400416034343698203224230148180677, 530893572355669, - 1391292544187987, + 21888242871839275222246405745257275088548364400416034343698203326068530478675, 1045892556029569, - 1563497616607342, + 21888242871839275222246405745257275088548364400416034343698203498273602898030, 170551006051419, - 1535286806596885, + 21888242871839275222246405745257275088548364400416034343698203470062792887573, 916806094016473, - 1872363734523235, + 21888242871839275222246405745257275088548364400416034343698203807139720813923, 828880164102782, - 1542466083372977, + 21888242871839275222246405745257275088548364400416034343698203477242069663665, 655784738574767, 597210423093634, 665381062051502, - 1479522531516454, - 2136652479866470, + 21888242871839275222246405745257275088548364400416034343698203414298517807142, + 21888242871839275222246405745257275088548364400416034343698204071428466157158, 695980872067744, 689972034106787, - 1877724181515108, - 2134762718337433, + 21888242871839275222246405745257275088548364400416034343698203812500167805796, + 21888242871839275222246405745257275088548364400416034343698204069538704628121, 371920567707532, 474877812405562, - 1708455774463704, - 1542243004917149, - 1354880475595089, + 21888242871839275222246405745257275088548364400416034343698203643231760754392, + 21888242871839275222246405745257275088548364400416034343698203477018991207837, + 21888242871839275222246405745257275088548364400416034343698203289656461885777, 17749351709517, 778287524607766, 872102201835041, - 1413897234115131, + 21888242871839275222246405745257275088548364400416034343698203348673220405819, 844794179146301, - 1656726492373682, + 21888242871839275222246405745257275088548364400416034343698203591502478664370, 451384104287724, - 2245727081715094, - 2003983145209421, + 21888242871839275222246405745257275088548364400416034343698204180503068005782, + 21888242871839275222246405745257275088548364400416034343698203938759131500109, 154728689736900, 667891844656814, - 1701216959747802, - 2000973304188140, + 21888242871839275222246405745257275088548364400416034343698203635992946038490, + 21888242871839275222246405745257275088548364400416034343698203935749290478828, 159279266591622, - 2175696408251092, + 21888242871839275222246405745257275088548364400416034343698204110472394541780, 1101771660556467, 352830313300410, 33910300546349, 440979135851858, 353112347681929, - 1792499744482068, + 21888242871839275222246405745257275088548364400416034343698203727275730772756, 870161059072380, - 1364051255200873, - 1198668186980598, - 2245311861469234, + 21888242871839275222246405745257275088548364400416034343698203298827241491561, + 21888242871839275222246405745257275088548364400416034343698203133444173271286, + 21888242871839275222246405745257275088548364400416034343698204180087847759922, 881254480413633, 819863572707469, 1096090431400964, 894182502468459, - 1951040499024078, - 2201715321038863, - 2240970482886472, + 21888242871839275222246405745257275088548364400416034343698203885816485314766, + 21888242871839275222246405745257275088548364400416034343698204136491307329551, + 21888242871839275222246405745257275088548364400416034343698204175746469177160, 146829093475148, - 1725647363610152, + 21888242871839275222246405745257275088548364400416034343698203660423349900840, 43743854951696, 144052653047346, - 2037536264451518, + 21888242871839275222246405745257275088548364400416034343698203972312250742206, 853801616943619, 355488856616778, - 1278628750727239, - 1984591560552439, - 1486510982549044, - 1496396283451966, + 21888242871839275222246405745257275088548364400416034343698203213404737017927, + 21888242871839275222246405745257275088548364400416034343698203919367546843127, + 21888242871839275222246405745257275088548364400416034343698203421286968839732, + 21888242871839275222246405745257275088548364400416034343698203431172269742654, 323646578648385, 190741652048536, 733403747040018, 553827611053444, - 1952358580106374, - 1517372561544475, - 1855675992208493, + 21888242871839275222246405745257275088548364400416034343698203887134566397062, + 21888242871839275222246405745257275088548364400416034343698203452148547835163, + 21888242871839275222246405745257275088548364400416034343698203790451978499181, 189241040547789, 376337361202164, 22429533006510, 266741477458960, 110800902160947, 1061140562562917, - 2146920466192200, - 1443918216976721, - 2088152721329429, + 21888242871839275222246405745257275088548364400416034343698204081696452482888, + 21888242871839275222246405745257275088548364400416034343698203378694203267409, + 21888242871839275222246405745257275088548364400416034343698204022928707620117, 651614434556694, - 1761913443294472, - 1390420648716936, - 1928683963139202, - 1338986446747773, - 1814159741089589, + 21888242871839275222246405745257275088548364400416034343698203696689429585160, + 21888242871839275222246405745257275088548364400416034343698203325196635007624, + 21888242871839275222246405745257275088548364400416034343698203863459949429890, + 21888242871839275222246405745257275088548364400416034343698203273762433038461, + 21888242871839275222246405745257275088548364400416034343698203748935727380277, 1026872998792559, - 1388595138948308, + 21888242871839275222246405745257275088548364400416034343698203323371125238996, 103095816032998, - 1837830526117883, - 2115635799368600, - 1505799099354807, - 1842863897660169, + 21888242871839275222246405745257275088548364400416034343698203772606512408571, + 21888242871839275222246405745257275088548364400416034343698204050411785659288, + 21888242871839275222246405745257275088548364400416034343698203440575085645495, + 21888242871839275222246405745257275088548364400416034343698203777639883950857, 1072150513418248, - 1496069114690031, + 21888242871839275222246405745257275088548364400416034343698203430845100980719, 354227136623424, - 1164429477112008, - 2138539569397858, + 21888242871839275222246405745257275088548364400416034343698203099205463402696, + 21888242871839275222246405745257275088548364400416034343698204073315555688546, 992761274786074, - 1865535859233996, + 21888242871839275222246405745257275088548364400416034343698203800311845524684, 907719048033303, 727863740925515, - 1483630034249300, - 1738597744696863, - 1895498218598973, - 1601860351981287, - 1477937561641415, + 21888242871839275222246405745257275088548364400416034343698203418406020539988, + 21888242871839275222246405745257275088548364400416034343698203673373730987551, + 21888242871839275222246405745257275088548364400416034343698203830274204889661, + 21888242871839275222246405745257275088548364400416034343698203536636338271975, + 21888242871839275222246405745257275088548364400416034343698203412713547932103, 733058382919996, 1124035302913502, 672384954141304, - 1448278006780748, + 21888242871839275222246405745257275088548364400416034343698203383053993071436, 926242983745563, 217520577076331, 287461524232009, 852899857216260, - 2037626233312223, - 1921726605453743, + 21888242871839275222246405745257275088548364400416034343698203972402219602911, + 21888242871839275222246405745257275088548364400416034343698203856502591744431, 337285205239977, 119715386190846, - 1839622914837944, - 1522540827438132, + 21888242871839275222246405745257275088548364400416034343698203774398901128632, + 21888242871839275222246405745257275088548364400416034343698203457316813728820, 1103182209190767, - 1849013181504708, - 2076400372677507, + 21888242871839275222246405745257275088548364400416034343698203783789167795396, + 21888242871839275222246405745257275088548364400416034343698204011176358968195, 487097256487154, 568140461175982, - 2038798417144770, + 21888242871839275222246405745257275088548364400416034343698203973574403435458, 612852007319037, - 1593504821547427, - 2099444452771625, + 21888242871839275222246405745257275088548364400416034343698203528280807838115, + 21888242871839275222246405745257275088548364400416034343698204034220439062313, 222844587163677, - 2202720689566299, - 1954107815848315, + 21888242871839275222246405745257275088548364400416034343698204137496675856987, + 21888242871839275222246405745257275088548364400416034343698203888883802139003, 60686576494400, - 1716739428546198, + 21888242871839275222246405745257275088548364400416034343698203651515414836886, 341573152895915, 1090196487211203, - 1596649322027983, + 21888242871839275222246405745257275088548364400416034343698203531425308318671, 583301219405904, - 1382087508558033, - 1253570380250128, + 21888242871839275222246405745257275088548364400416034343698203316863494848721, + 21888242871839275222246405745257275088548364400416034343698203188346366540816, 72671406414192, - 1640409473906392, - 2160881018126651, + 21888242871839275222246405745257275088548364400416034343698203575185460197080, + 21888242871839275222246405745257275088548364400416034343698204095657004417339, 671475246903237, 671651858169952, 538460620272499, - 1865342510701996, - 2027480205184274, - 1800018813262674, - 1213076866051877, - 1153788657123785, - 1594075899260805, - 1377072195695114, - 1278476322928290, - 2165256882702132, + 21888242871839275222246405745257275088548364400416034343698203800118496992684, + 21888242871839275222246405745257275088548364400416034343698203962256191474962, + 21888242871839275222246405745257275088548364400416034343698203734794799553362, + 21888242871839275222246405745257275088548364400416034343698203147852852342565, + 21888242871839275222246405745257275088548364400416034343698203088564643414473, + 21888242871839275222246405745257275088548364400416034343698203528851885551493, + 21888242871839275222246405745257275088548364400416034343698203311848181985802, + 21888242871839275222246405745257275088548364400416034343698203213252309218978, + 21888242871839275222246405745257275088548364400416034343698204100032868992820, 135959699823765, - 1774080138278614, - 2246516831737151, - 1868797575127653, - 1606250828680295, + 21888242871839275222246405745257275088548364400416034343698203708856124569302, + 21888242871839275222246405745257275088548364400416034343698204181292818027839, + 21888242871839275222246405745257275088548364400416034343698203803573561418341, + 21888242871839275222246405745257275088548364400416034343698203541026814970983, 286309189956278, - 1663374908504615, - 2079748707194831, + 21888242871839275222246405745257275088548364400416034343698203598150894795303, + 21888242871839275222246405745257275088548364400416034343698204014524693485519, 1107729858250519, 1078930013795406, - 2006750560402962, + 21888242871839275222246405745257275088548364400416034343698203941526546693650, 380874603441408, - 1408900718734566, + 21888242871839275222246405745257275088548364400416034343698203343676705025254, 126281003909474, - 2009997567952386, + 21888242871839275222246405745257275088548364400416034343698203944773554243074, 82573566200981, - 1320362437896749, + 21888242871839275222246405745257275088548364400416034343698203255138424187437, 786228443606993, - 2088538753347773, - 2223803300774885, - 1238683579201201, - 2042382277476825, - 1718032730601426, + 21888242871839275222246405745257275088548364400416034343698204023314739638461, + 21888242871839275222246405745257275088548364400416034343698204158579287065573, + 21888242871839275222246405745257275088548364400416034343698203173459565491889, + 21888242871839275222246405745257275088548364400416034343698203977158263767513, + 21888242871839275222246405745257275088548364400416034343698203652808716892114, 271363963439513, 779102829710754, - 1430315792493897, - 1939775687830446, - 1627835364764153, + 21888242871839275222246405745257275088548364400416034343698203365091778784585, + 21888242871839275222246405745257275088548364400416034343698203874551674121134, + 21888242871839275222246405745257275088548364400416034343698203562611351054841, 371075555102934, - 1829699444933403, + 21888242871839275222246405745257275088548364400416034343698203764475431224091, 1122414553666050, 107514529950110, 88050355231023, 145816234608527, 844739257813313, - 2077413153951246, - 1840146432272292, - 1214210388695467, + 21888242871839275222246405745257275088548364400416034343698204012189140241934, + 21888242871839275222246405745257275088548364400416034343698203774922418562980, + 21888242871839275222246405745257275088548364400416034343698203148986374986155, 188767148643303, - 2205009725638390, + 21888242871839275222246405745257275088548364400416034343698204139785711929078, 978407038619331, 1101172441178804, - 1781675005553726, - 1492460914555029, + 21888242871839275222246405745257275088548364400416034343698203716450991844414, + 21888242871839275222246405745257275088548364400416034343698203427236900845717, 212395655932362, 143161315904704, - 1966517637650922, - 2049858263702551, + 21888242871839275222246405745257275088548364400416034343698203901293623941610, + 21888242871839275222246405745257275088548364400416034343698203984634249993239, 840165543383969, 657079585355095, - 1267502989831940, + 21888242871839275222246405745257275088548364400416034343698203202278976122628, 37338539213732, - 1810783405347886, - 1856836558621772, - 1227692192422225, + 21888242871839275222246405745257275088548364400416034343698203745559391638574, + 21888242871839275222246405745257275088548364400416034343698203791612544912460, + 21888242871839275222246405745257275088548364400416034343698203162468178712913, 221581392081597, - 2126893046365570, - 1464992312731896, + 21888242871839275222246405745257275088548364400416034343698204061669032656258, + 21888242871839275222246405745257275088548364400416034343698203399768299022584, 320257623716002, 1000543335833847, 651716061797957, 584901470747851, 353179663849427, - 1991594751370722, + 21888242871839275222246405745257275088548364400416034343698203926370737661410, 138068125684358, - 1239528376916134, + 21888242871839275222246405745257275088548364400416034343698203174304363206822, 585425965909100, 753595282106149, - 1453965604589141, - 1760626925865163, + 21888242871839275222246405745257275088548364400416034343698203388741590879829, + 21888242871839275222246405745257275088548364400416034343698203695402912155851, 752351854135889, 1055723098064268, 1092759955570544, @@ -5253,202 +5253,202 @@ pub global CRP: [Polynomial; L] = [ 677176593994172, 685303045873728, 732882758226248, - 1812621700248786, + 21888242871839275222246405745257275088548364400416034343698203747397686539474, 625068298003916, 27044662616788, - 1377986508354887, + 21888242871839275222246405745257275088548364400416034343698203312762494645575, 598759549618124, - 1593415366881603, + 21888242871839275222246405745257275088548364400416034343698203528191353172291, 816643621558377, 41813269054074, 688694134890461, - 2217818476266317, - 1443142441580997, - 1778235997656945, + 21888242871839275222246405745257275088548364400416034343698204152594462557005, + 21888242871839275222246405745257275088548364400416034343698203377918427871685, + 21888242871839275222246405745257275088548364400416034343698203713011983947633, 811989451562377, - 2048235121515557, + 21888242871839275222246405745257275088548364400416034343698203983011107806245, 140863880451363, 542254093462068, - 1971094837006500, + 21888242871839275222246405745257275088548364400416034343698203905870823297188, 488557214145378, - 1900591079710651, + 21888242871839275222246405745257275088548364400416034343698203835367066001339, 342853757336897, - 1693290178078723, - 1553661715280119, - 1947131903001851, + 21888242871839275222246405745257275088548364400416034343698203628066164369411, + 21888242871839275222246405745257275088548364400416034343698203488437701570807, + 21888242871839275222246405745257275088548364400416034343698203881907889292539, 196870459361546, - 1420106655784583, - 1272521873290703, + 21888242871839275222246405745257275088548364400416034343698203354882642075271, + 21888242871839275222246405745257275088548364400416034343698203207297859581391, 241335423820852, 477300828679739, 433564780264940, 53425954668004, - 1222069930383617, + 21888242871839275222246405745257275088548364400416034343698203156845916674305, 533639179436765, - 1795717383548421, - 2011553661444240, - 2042911230442586, + 21888242871839275222246405745257275088548364400416034343698203730493369839109, + 21888242871839275222246405745257275088548364400416034343698203946329647734928, + 21888242871839275222246405745257275088548364400416034343698203977687216733274, 500419652913615, - 2007206664251371, - 1616155455142617, + 21888242871839275222246405745257275088548364400416034343698203941982650542059, + 21888242871839275222246405745257275088548364400416034343698203550931441433305, 539345731167690, - 1571325257375928, - 1517068404065505, - 2079720452408206, + 21888242871839275222246405745257275088548364400416034343698203506101243666616, + 21888242871839275222246405745257275088548364400416034343698203451844390356193, + 21888242871839275222246405745257275088548364400416034343698204014496438698894, 342174935798873, 1062143278401422, - 1235204584121693, - 1215222223465195, + 21888242871839275222246405745257275088548364400416034343698203169980570412381, + 21888242871839275222246405745257275088548364400416034343698203149998209755883, 454074766802669, 237456698165717, - 2236757536907225, - 1369852722404858, + 21888242871839275222246405745257275088548364400416034343698204171533523197913, + 21888242871839275222246405745257275088548364400416034343698203304628708695546, 196043080575106, - 1296018217835679, - 2054075163700782, + 21888242871839275222246405745257275088548364400416034343698203230794204126367, + 21888242871839275222246405745257275088548364400416034343698203988851149991470, 739503825082483, - 1617386912676957, + 21888242871839275222246405745257275088548364400416034343698203552162898967645, 736581313422022, - 2240612956091297, - 1469471590461597, + 21888242871839275222246405745257275088548364400416034343698204175388942381985, + 21888242871839275222246405745257275088548364400416034343698203404247576752285, 391447980481355, 274730918801237, 934799624003174, 1017036169594440, 773603414958079, 1101228915547343, - 1631572474801303, - 1316109163618242, - 1281955842137892, - 2218678387747322, + 21888242871839275222246405745257275088548364400416034343698203566348461091991, + 21888242871839275222246405745257275088548364400416034343698203250885149908930, + 21888242871839275222246405745257275088548364400416034343698203216731828428580, + 21888242871839275222246405745257275088548364400416034343698204153454374038010, 379918635022093, - 1614126169195930, - 1718027449774176, - 1785221327860728, + 21888242871839275222246405745257275088548364400416034343698203548902155486618, + 21888242871839275222246405745257275088548364400416034343698203652803436064864, + 21888242871839275222246405745257275088548364400416034343698203719997314151416, 886256870764973, - 1740153358098898, - 1832055663918321, - 1775500563052986, + 21888242871839275222246405745257275088548364400416034343698203674929344389586, + 21888242871839275222246405745257275088548364400416034343698203766831650209009, + 21888242871839275222246405745257275088548364400416034343698203710276549343674, 391715655675697, 879324912978107, 1119283185764508, - 1587223007364086, - 2236647628868808, + 21888242871839275222246405745257275088548364400416034343698203521998993654774, + 21888242871839275222246405745257275088548364400416034343698204171423615159496, 636156527697896, - 1571985153743119, + 21888242871839275222246405745257275088548364400416034343698203506761140033807, 411382728989014, 234965162141685, 825642904378818, - 2105252205592622, - 1209377679892149, + 21888242871839275222246405745257275088548364400416034343698204040028191883310, + 21888242871839275222246405745257275088548364400416034343698203144153666182837, 41599181969399, 609348204696258, 20618969142545, 990151274395282, - 1169516567728070, + 21888242871839275222246405745257275088548364400416034343698203104292554018758, 238921680733332, - 1737461598178350, + 21888242871839275222246405745257275088548364400416034343698203672237584469038, 1015157655508879, 380862363390806, 921714624978790, - 1163760088711487, - 1954556735740347, + 21888242871839275222246405745257275088548364400416034343698203098536075002175, + 21888242871839275222246405745257275088548364400416034343698203889332722031035, 466021981034916, - 1269522007245260, + 21888242871839275222246405745257275088548364400416034343698203204297993535948, 489783062112880, 822374972626630, 621841738520784, - 1535727400833111, - 1708679596134059, + 21888242871839275222246405745257275088548364400416034343698203470503387123799, + 21888242871839275222246405745257275088548364400416034343698203643455582424747, 786517765659183, - 1997995556049397, + 21888242871839275222246405745257275088548364400416034343698203932771542340085, 650731232430468, 481777084142895, - 2018724868972546, + 21888242871839275222246405745257275088548364400416034343698203953500855263234, 625011679919055, - 1576439907112857, - 1168249505123851, - 1699589216102779, - 1386188967431822, - 1904398931154186, - 1263710535081216, - 1196850280878423, - 1276286946122316, + 21888242871839275222246405745257275088548364400416034343698203511215893403545, + 21888242871839275222246405745257275088548364400416034343698203103025491414539, + 21888242871839275222246405745257275088548364400416034343698203634365202393467, + 21888242871839275222246405745257275088548364400416034343698203320964953722510, + 21888242871839275222246405745257275088548364400416034343698203839174917444874, + 21888242871839275222246405745257275088548364400416034343698203198486521371904, + 21888242871839275222246405745257275088548364400416034343698203131626267169111, + 21888242871839275222246405745257275088548364400416034343698203211062932413004, 370694804010216, - 1586952228709535, - 2008490276304998, - 1469867680978546, - 2017390134608718, + 21888242871839275222246405745257275088548364400416034343698203521728215000223, + 21888242871839275222246405745257275088548364400416034343698203943266262595686, + 21888242871839275222246405745257275088548364400416034343698203404643667269234, + 21888242871839275222246405745257275088548364400416034343698203952166120899406, 807595561330576, 825857717200465, 546885778501935, - 1591953986553901, - 1355830728220763, - 2207798034575848, - 1785590564910076, + 21888242871839275222246405745257275088548364400416034343698203526729972844589, + 21888242871839275222246405745257275088548364400416034343698203290606714511451, + 21888242871839275222246405745257275088548364400416034343698204142574020866536, + 21888242871839275222246405745257275088548364400416034343698203720366551200764, 434607678717906, 959487211594379, - 1238216096908505, - 2036768667036911, + 21888242871839275222246405745257275088548364400416034343698203172992083199193, + 21888242871839275222246405745257275088548364400416034343698203971544653327599, 857669942609867, 478268023708056, - 1545758774991610, - 2045768359884170, - 1273954866534916, + 21888242871839275222246405745257275088548364400416034343698203480534761282298, + 21888242871839275222246405745257275088548364400416034343698203980544346174858, + 21888242871839275222246405745257275088548364400416034343698203208730852825604, 483188802095617, - 1301441282175000, + 21888242871839275222246405745257275088548364400416034343698203236217268465688, 366777350218012, 205660633668351, - 1933348238173467, - 1731378531885312, + 21888242871839275222246405745257275088548364400416034343698203868124224464155, + 21888242871839275222246405745257275088548364400416034343698203666154518176000, 449887348138806, 46392121239561, 459729872009925, - 1409580408175972, - 2094124616488056, - 2236297781977819, - 1777747383651234, - 1663130157823141, - 1142305938540827, - 1228375447824297, + 21888242871839275222246405745257275088548364400416034343698203344356394466660, + 21888242871839275222246405745257275088548364400416034343698204028900602778744, + 21888242871839275222246405745257275088548364400416034343698204171073768268507, + 21888242871839275222246405745257275088548364400416034343698203712523369941922, + 21888242871839275222246405745257275088548364400416034343698203597906144113829, + 21888242871839275222246405745257275088548364400416034343698203077081924831515, + 21888242871839275222246405745257275088548364400416034343698203163151434114985, 171894878814119, - 2242117776570473, + 21888242871839275222246405745257275088548364400416034343698204176893762861161, 968858103549488, 692584887391382, 590671452302114, - 1324845724665360, + 21888242871839275222246405745257275088548364400416034343698203259621710956048, 884347890079429, - 1576895229146375, - 2076451419430620, + 21888242871839275222246405745257275088548364400416034343698203511671215437063, + 21888242871839275222246405745257275088548364400416034343698204011227405721308, 927542320540095, 214268225942799, 452962518676248, - 1127548442696267, - 1758622803758061, + 21888242871839275222246405745257275088548364400416034343698203062324428986955, + 21888242871839275222246405745257275088548364400416034343698203693398790048749, 568626774192156, - 1145837486839002, + 21888242871839275222246405745257275088548364400416034343698203080613473129690, 973064669003822, - 2016916478142889, + 21888242871839275222246405745257275088548364400416034343698203951692464433577, 438568529639486, 1025496588815372, 767770286800679, 166997568048298, 44584699335991, 30584040762227, - 1374813071433946, - 1866823558977639, - 1292289360561568, + 21888242871839275222246405745257275088548364400416034343698203309589057724634, + 21888242871839275222246405745257275088548364400416034343698203801599545268327, + 21888242871839275222246405745257275088548364400416034343698203227065346852256, 467825558753650, 29072445359489, 759195430430420, - 1844296774442657, - 1699929771246613, + 21888242871839275222246405745257275088548364400416034343698203779072760733345, + 21888242871839275222246405745257275088548364400416034343698203634705757537301, 578087517126698, 684820900292240, - 1748225110695471, - 1385435834386744, - 1389108304376457, - 2078670155923995, + 21888242871839275222246405745257275088548364400416034343698203683001096986159, + 21888242871839275222246405745257275088548364400416034343698203320211820677432, + 21888242871839275222246405745257275088548364400416034343698203323884290667145, + 21888242871839275222246405745257275088548364400416034343698204013446142214683, 104361608569883, 968753899321006, 150965941100616, @@ -5456,404 +5456,404 @@ pub global CRP: [Polynomial; L] = [ 594806816354321, 1039989504232325, 533878833109975, - 1341394705088165, - 1360817559063982, + 21888242871839275222246405745257275088548364400416034343698203276170691378853, + 21888242871839275222246405745257275088548364400416034343698203295593545354670, 321167144136431, 30299703549354, - 2155705974972631, - 1790696112709707, - 1257172815603289, + 21888242871839275222246405745257275088548364400416034343698204090481961263319, + 21888242871839275222246405745257275088548364400416034343698203725472099000395, + 21888242871839275222246405745257275088548364400416034343698203191948801893977, 593684896528314, - 1215807454763120, + 21888242871839275222246405745257275088548364400416034343698203150583441053808, 376139312012489, - 1741166081694982, + 21888242871839275222246405745257275088548364400416034343698203675942067985670, 659872068584919, - 1235871109874293, + 21888242871839275222246405745257275088548364400416034343698203170647096164981, 952243505023190, 1096580548190802, - 1925345172752104, + 21888242871839275222246405745257275088548364400416034343698203860121159042792, 202248954695285, - 1803476049412808, - 1831130516736788, - 1545788029866969, - 2176455482324740, + 21888242871839275222246405745257275088548364400416034343698203738252035703496, + 21888242871839275222246405745257275088548364400416034343698203765906503027476, + 21888242871839275222246405745257275088548364400416034343698203480564016157657, + 21888242871839275222246405745257275088548364400416034343698204111231468615428, 323039584197349, - 1410681000041307, - 2073291482745834, + 21888242871839275222246405745257275088548364400416034343698203345456986331995, + 21888242871839275222246405745257275088548364400416034343698204008067469036522, 663648104874333, 756003272092018, 251361083048650, 552267426891318, 823845658577970, - 1692953577225235, + 21888242871839275222246405745257275088548364400416034343698203627729563515923, 269077743992777, 516562942847860, - 2092088427789392, + 21888242871839275222246405745257275088548364400416034343698204026864414080080, 675059280053898, - 2073426171590968, - 1330592725276675, - 1606369105300487, - 2034543410414447, - 1969004035286411, - 1561727153381359, - 2181840639424820, - 1860904964416165, - 1550754328493418, + 21888242871839275222246405745257275088548364400416034343698204008202157881656, + 21888242871839275222246405745257275088548364400416034343698203265368711567363, + 21888242871839275222246405745257275088548364400416034343698203541145091591175, + 21888242871839275222246405745257275088548364400416034343698203969319396705135, + 21888242871839275222246405745257275088548364400416034343698203903780021577099, + 21888242871839275222246405745257275088548364400416034343698203496503139672047, + 21888242871839275222246405745257275088548364400416034343698204116616625715508, + 21888242871839275222246405745257275088548364400416034343698203795680950706853, + 21888242871839275222246405745257275088548364400416034343698203485530314784106, 319599199799784, - 1253479306142441, + 21888242871839275222246405745257275088548364400416034343698203188255292433129, 116946237696022, - 1999739761383328, + 21888242871839275222246405745257275088548364400416034343698203934515747674016, 724918210986756, 565950311973749, 1113241605700771, 325199761298335, 761948827356970, - 1143612283972176, - 1196310928281027, + 21888242871839275222246405745257275088548364400416034343698203078388270262864, + 21888242871839275222246405745257275088548364400416034343698203131086914571715, 776020132286484, 375661428752786, - 1761585746912891, + 21888242871839275222246405745257275088548364400416034343698203696361733203579, 876612558317670, - 1495600749706435, - 1176822761729418, - 2222121709279567, + 21888242871839275222246405745257275088548364400416034343698203430376735997123, + 21888242871839275222246405745257275088548364400416034343698203111598748020106, + 21888242871839275222246405745257275088548364400416034343698204156897695570255, 696557997095722, - 2121092856957876, - 1889733315590062, - 1133005110091853, - 1937788510535736, - 2126523402268949, + 21888242871839275222246405745257275088548364400416034343698204055868843248564, + 21888242871839275222246405745257275088548364400416034343698203824509301880750, + 21888242871839275222246405745257275088548364400416034343698203067781096382541, + 21888242871839275222246405745257275088548364400416034343698203872564496826424, + 21888242871839275222246405745257275088548364400416034343698204061299388559637, 288985380658216, - 2237442429994566, + 21888242871839275222246405745257275088548364400416034343698204172218416285254, 593034197838189, 823430937404234, 687093668774670, 1083779100031805, - 2232511824310549, + 21888242871839275222246405745257275088548364400416034343698204167287810601237, 397364787366900, 295848775242940, 143787449648054, 866845009009842, - 1475038877662672, - 1852923792882111, + 21888242871839275222246405745257275088548364400416034343698203409814863953360, + 21888242871839275222246405745257275088548364400416034343698203787699779172799, 1027513783163324, 699429548298034, 967810610903993, 569073092416267, - 1676135223421368, + 21888242871839275222246405745257275088548364400416034343698203610911209712056, 642548642581319, 311805678010623, 1065318092778096, - 1588972543023662, + 21888242871839275222246405745257275088548364400416034343698203523748529314350, 948592218709098, 703266956022525, - 2224719026247545, + 21888242871839275222246405745257275088548364400416034343698204159495012538233, 519505064316760, 1060167005802352, 411528370229052, - 2102865101352786, + 21888242871839275222246405745257275088548364400416034343698204037641087643474, 731097043714967, 22810962457491, 510878067676624, - 2005034194979111, + 21888242871839275222246405745257275088548364400416034343698203939810181269799, 883471665805419, - 1176401974566908, - 1349841791884230, + 21888242871839275222246405745257275088548364400416034343698203111177960857596, + 21888242871839275222246405745257275088548364400416034343698203284617778174918, 970164657197190, 543433422371201, 114974809514361, - 1704765763890168, - 2115815024690741, - 2076029280477371, - 1532945794766956, - 1622170434637614, + 21888242871839275222246405745257275088548364400416034343698203639541750180856, + 21888242871839275222246405745257275088548364400416034343698204050591010981429, + 21888242871839275222246405745257275088548364400416034343698204010805266768059, + 21888242871839275222246405745257275088548364400416034343698203467721781057644, + 21888242871839275222246405745257275088548364400416034343698203556946420928302, 1099335928188998, 23397538652219, 577220858910762, - 1979807633718129, - 2150919616292974, - 1947652396997145, - 1857953460041598, - 1778065053001284, - 1167284016200834, + 21888242871839275222246405745257275088548364400416034343698203914583620008817, + 21888242871839275222246405745257275088548364400416034343698204085695602583662, + 21888242871839275222246405745257275088548364400416034343698203882428383287833, + 21888242871839275222246405745257275088548364400416034343698203792729446332286, + 21888242871839275222246405745257275088548364400416034343698203712841039291972, + 21888242871839275222246405745257275088548364400416034343698203102060002491522, 62260053610832, - 1869348366452413, + 21888242871839275222246405745257275088548364400416034343698203804124352743101, 915030432643854, 623743688609680, 948223943935960, 147864462697592, - 1750373341204466, - 1975691662857702, - 1400805773588285, + 21888242871839275222246405745257275088548364400416034343698203685149327495154, + 21888242871839275222246405745257275088548364400416034343698203910467649148390, + 21888242871839275222246405745257275088548364400416034343698203335581759878973, 252727330058414, 308892488138105, - 2125804419887042, + 21888242871839275222246405745257275088548364400416034343698204060580406177730, 22651626542390, 1016561828472277, 278754492675737, 843528430493385, 1073717570214394, - 1773248994226362, - 1452045808600291, + 21888242871839275222246405745257275088548364400416034343698203708024980517050, + 21888242871839275222246405745257275088548364400416034343698203386821794890979, 511794958208882, 1055756167764772, 174110404793005, 198342556815583, - 1496761362657223, - 1763351706841185, - 1369148227089177, + 21888242871839275222246405745257275088548364400416034343698203431537348947911, + 21888242871839275222246405745257275088548364400416034343698203698127693131873, + 21888242871839275222246405745257275088548364400416034343698203303924213379865, 532834825293801, 531670810096061, - 1595300996967187, - 1487691483475032, + 21888242871839275222246405745257275088548364400416034343698203530076983257875, + 21888242871839275222246405745257275088548364400416034343698203422467469765720, 108860254083851, - 1973748933361534, - 1527063507819224, + 21888242871839275222246405745257275088548364400416034343698203908524919652222, + 21888242871839275222246405745257275088548364400416034343698203461839494109912, 237079151918217, 669825977182675, 595806188623534, - 2182002463870780, + 21888242871839275222246405745257275088548364400416034343698204116778450161468, 640804823372408, 657248587987624, 539919172171828, 843671092468068, - 1874671790022731, + 21888242871839275222246405745257275088548364400416034343698203809447776313419, 690262750557824, 10023220770862, - 2110445471858163, - 1974852713242033, - 2074889553471939, - 2006117547565475, - 1739092126513127, - 1861870089701259, - 1285570258957349, + 21888242871839275222246405745257275088548364400416034343698204045221458148851, + 21888242871839275222246405745257275088548364400416034343698203909628699532721, + 21888242871839275222246405745257275088548364400416034343698204009665539762627, + 21888242871839275222246405745257275088548364400416034343698203940893533856163, + 21888242871839275222246405745257275088548364400416034343698203673868112803815, + 21888242871839275222246405745257275088548364400416034343698203796646075991947, + 21888242871839275222246405745257275088548364400416034343698203220346245248037, 973344426954143, - 1862342141590572, + 21888242871839275222246405745257275088548364400416034343698203797118127881260, 255934740526134, - 1857952954960465, - 1191026342627421, - 2070603991151084, - 1287598080618714, + 21888242871839275222246405745257275088548364400416034343698203792728941251153, + 21888242871839275222246405745257275088548364400416034343698203125802328918109, + 21888242871839275222246405745257275088548364400416034343698204005379977441772, + 21888242871839275222246405745257275088548364400416034343698203222374066909402, 510340259598847, - 2134590552240388, + 21888242871839275222246405745257275088548364400416034343698204069366538531076, 847084305671625, 833482335403921, 601475200451060, - 1788117614954912, - 1636624377401063, + 21888242871839275222246405745257275088548364400416034343698203722893601245600, + 21888242871839275222246405745257275088548364400416034343698203571400363691751, 382203600000171, 221905956538447, - 2070535550742075, - 1281937677294304, - 1994148459331844, - 1364932069609115, - 1199259589133842, + 21888242871839275222246405745257275088548364400416034343698204005311537032763, + 21888242871839275222246405745257275088548364400416034343698203216713663584992, + 21888242871839275222246405745257275088548364400416034343698203928924445622532, + 21888242871839275222246405745257275088548364400416034343698203299708055899803, + 21888242871839275222246405745257275088548364400416034343698203134035575424530, 780344084367844, - 2222246275010285, + 21888242871839275222246405745257275088548364400416034343698204157022261300973, 213312011188902, 862101327041862, - 1991930033246159, - 1829129305626686, + 21888242871839275222246405745257275088548364400416034343698203926706019536847, + 21888242871839275222246405745257275088548364400416034343698203763905291917374, 1094906762947855, - 1733485352353806, - 2121202443864366, - 1356594494356474, - 1257475205769899, + 21888242871839275222246405745257275088548364400416034343698203668261338644494, + 21888242871839275222246405745257275088548364400416034343698204055978430155054, + 21888242871839275222246405745257275088548364400416034343698203291370480647162, + 21888242871839275222246405745257275088548364400416034343698203192251192060587, 22854593083041, - 1202532917369452, + 21888242871839275222246405745257275088548364400416034343698203137308903660140, 368652480645625, - 1582445586450937, + 21888242871839275222246405745257275088548364400416034343698203517221572741625, 456905203296869, - 1184856146557271, - 1251840826185151, - 2078956681496672, + 21888242871839275222246405745257275088548364400416034343698203119632132847959, + 21888242871839275222246405745257275088548364400416034343698203186616812475839, + 21888242871839275222246405745257275088548364400416034343698204013732667787360, 929010191496816, 296764389967781, - 1187349289903065, - 2081532884455830, - 1813258826259852, - 1744262316345748, + 21888242871839275222246405745257275088548364400416034343698203122125276193753, + 21888242871839275222246405745257275088548364400416034343698204016308870746518, + 21888242871839275222246405745257275088548364400416034343698203748034812550540, + 21888242871839275222246405745257275088548364400416034343698203679038302636436, 686655866278048, 481942812960261, - 2110993761977908, - 1842276975158574, + 21888242871839275222246405745257275088548364400416034343698204045769748268596, + 21888242871839275222246405745257275088548364400416034343698203777052961449262, 323594647245498, 936740721786223, - 1554089634403401, - 1974672664462565, - 1613181858092625, + 21888242871839275222246405745257275088548364400416034343698203488865620694089, + 21888242871839275222246405745257275088548364400416034343698203909448650753253, + 21888242871839275222246405745257275088548364400416034343698203547957844383313, 462459793249570, - 2235869449288602, - 2111311690652828, + 21888242871839275222246405745257275088548364400416034343698204170645435579290, + 21888242871839275222246405745257275088548364400416034343698204046087676943516, 75183789400206, 590977516660142, - 2024075923790928, + 21888242871839275222246405745257275088548364400416034343698203958851910081616, 724058390267419, 842013536162288, - 1793680121129812, - 1829980298695592, + 21888242871839275222246405745257275088548364400416034343698203728456107420500, + 21888242871839275222246405745257275088548364400416034343698203764756284986280, 133268747555316, - 1412197556496376, - 1677081524710553, - 1881436637151804, - 1984379151008524, - 2234259437992701, + 21888242871839275222246405745257275088548364400416034343698203346973542787064, + 21888242871839275222246405745257275088548364400416034343698203611857511001241, + 21888242871839275222246405745257275088548364400416034343698203816212623442492, + 21888242871839275222246405745257275088548364400416034343698203919155137299212, + 21888242871839275222246405745257275088548364400416034343698204169035424283389, 73967408975480, - 1883908020988981, - 1157256889406665, + 21888242871839275222246405745257275088548364400416034343698203818684007279669, + 21888242871839275222246405745257275088548364400416034343698203092032875697353, 1093310747969739, 187266608856992, 769129407959081, 90188095516835, 644377612780658, - 1297299861739055, + 21888242871839275222246405745257275088548364400416034343698203232075848029743, 797181709727261, - 1706905831898513, - 2159386276919093, - 1963426608653832, - 1267661900696368, + 21888242871839275222246405745257275088548364400416034343698203641681818189201, + 21888242871839275222246405745257275088548364400416034343698204094162263209781, + 21888242871839275222246405745257275088548364400416034343698203898202594944520, + 21888242871839275222246405745257275088548364400416034343698203202437886987056, 1106783509145539, - 1363659587263085, - 1140274283103533, + 21888242871839275222246405745257275088548364400416034343698203298435573553773, + 21888242871839275222246405745257275088548364400416034343698203075050269394221, 645360032414486, 321727348860321, - 2204739654556418, + 21888242871839275222246405745257275088548364400416034343698204139515640847106, 179767527173276, - 1378890035686957, + 21888242871839275222246405745257275088548364400416034343698203313666021977645, 341659277639002, 642698045258929, - 2169661721942075, + 21888242871839275222246405745257275088548364400416034343698204104437708232763, 1071915342677052, - 1322706658559982, + 21888242871839275222246405745257275088548364400416034343698203257482644850670, 227135907135590, 646203508308187, - 1427238209592167, + 21888242871839275222246405745257275088548364400416034343698203362014195882855, 860176510238195, - 1577591940168100, - 2170967078519990, + 21888242871839275222246405745257275088548364400416034343698203512367926458788, + 21888242871839275222246405745257275088548364400416034343698204105743064810678, 501205535284072, - 1301040118841494, + 21888242871839275222246405745257275088548364400416034343698203235816105132182, 444700834266162, - 2087285643958594, - 1936687928040577, - 1739989363503889, - 1755264093745938, + 21888242871839275222246405745257275088548364400416034343698204022061630249282, + 21888242871839275222246405745257275088548364400416034343698203871463914331265, + 21888242871839275222246405745257275088548364400416034343698203674765349794577, + 21888242871839275222246405745257275088548364400416034343698203690040080036626, 763655433856527, - 1676338778715842, - 1794610101255230, + 21888242871839275222246405745257275088548364400416034343698203611114765006530, + 21888242871839275222246405745257275088548364400416034343698203729386087545918, 797788346732337, - 1282411629876583, + 21888242871839275222246405745257275088548364400416034343698203217187616167271, 632496853485292, 256975817052097, 587453171434156, 15603338677212, 109409380912912, - 1781209646355947, - 1353170966702186, - 2095274730613398, - 1605145292446225, + 21888242871839275222246405745257275088548364400416034343698203715985632646635, + 21888242871839275222246405745257275088548364400416034343698203287946952992874, + 21888242871839275222246405745257275088548364400416034343698204030050716904086, + 21888242871839275222246405745257275088548364400416034343698203539921278736913, 746856777169803, 275448022158821, 955969217251600, - 1323122602292519, + 21888242871839275222246405745257275088548364400416034343698203257898588583207, 672937280499922, - 1164474369432939, - 1624253974814718, + 21888242871839275222246405745257275088548364400416034343698203099250355723627, + 21888242871839275222246405745257275088548364400416034343698203559029961105406, 1068351944762822, - 1518974807750755, + 21888242871839275222246405745257275088548364400416034343698203453750794041443, 114368060253159, - 1693534681643294, + 21888242871839275222246405745257275088548364400416034343698203628310667933982, 177756447325404, - 1929036589498311, - 1384334236386786, + 21888242871839275222246405745257275088548364400416034343698203863812575788999, + 21888242871839275222246405745257275088548364400416034343698203319110222677474, 952516782842357, - 1228498324667454, + 21888242871839275222246405745257275088548364400416034343698203163274310958142, 350982853585353, - 1542085969845802, - 1917695276298767, - 1927180182649234, - 1664550812279413, + 21888242871839275222246405745257275088548364400416034343698203476861956136490, + 21888242871839275222246405745257275088548364400416034343698203852471262589455, + 21888242871839275222246405745257275088548364400416034343698203861956168939922, + 21888242871839275222246405745257275088548364400416034343698203599326798570101, 66441056365768, - 1451348222892213, - 1847281684823707, + 21888242871839275222246405745257275088548364400416034343698203386124209182901, + 21888242871839275222246405745257275088548364400416034343698203782057671114395, 428398651033339, 899074378641953, - 1353571930888204, - 1176369331042357, - 1733589949933121, + 21888242871839275222246405745257275088548364400416034343698203288347917178892, + 21888242871839275222246405745257275088548364400416034343698203111145317333045, + 21888242871839275222246405745257275088548364400416034343698203668365936223809, 139368169471219, 564841238119409, - 1156424465734188, - 1869835963134403, + 21888242871839275222246405745257275088548364400416034343698203091200452024876, + 21888242871839275222246405745257275088548364400416034343698203804611949425091, 202288811686362, 290281567905191, - 1541773288512013, + 21888242871839275222246405745257275088548364400416034343698203476549274802701, 94568042601534, 819774950829741, 15540870782812, 1056739627239397, 964986913817445, - 1451532981012059, - 1666892859839651, - 1158607392449766, - 1749268063567115, - 2068313383268806, + 21888242871839275222246405745257275088548364400416034343698203386308967302747, + 21888242871839275222246405745257275088548364400416034343698203601668846130339, + 21888242871839275222246405745257275088548364400416034343698203093383378740454, + 21888242871839275222246405745257275088548364400416034343698203684044049857803, + 21888242871839275222246405745257275088548364400416034343698204003089369559494, 589748717437365, 1007860163510957, - 1703332843202357, + 21888242871839275222246405745257275088548364400416034343698203638108829493045, 323678512998827, 574234814343886, - 1337675363880019, + 21888242871839275222246405745257275088548364400416034343698203272451350170707, 1044462856120813, 8286394427600, 861311509395282, - 1399584478700932, + 21888242871839275222246405745257275088548364400416034343698203334360464991620, 263646762795959, 177036206366574, 898774411290570, 41755756959415, 649203688738511, - 2031730187949171, + 21888242871839275222246405745257275088548364400416034343698203966506174239859, 997459166831170, 167804680715661, 608747109502679, - 2243231897259442, + 21888242871839275222246405745257275088548364400416034343698204178007883550130, 332249752416869, 1081919002015497, - 1617018214641323, + 21888242871839275222246405745257275088548364400416034343698203551794200932011, 847275497371514, 56427350256101, 45326801120984, 910938999112983, 917707200255668, - 1297296204221694, - 2082497929125130, + 21888242871839275222246405745257275088548364400416034343698203232072190512382, + 21888242871839275222246405745257275088548364400416034343698204017273915415818, 1043563669659904, 6481522774539, - 2074585720804584, + 21888242871839275222246405745257275088548364400416034343698204009361707095272, 244653379831815, - 2119583532855596, + 21888242871839275222246405745257275088548364400416034343698204054359519146284, 10721821112731, - 1226380491487319, + 21888242871839275222246405745257275088548364400416034343698203161156477778007, 665422416768049, 375934031198945, - 1323708512656043, - 1503691038080914, + 21888242871839275222246405745257275088548364400416034343698203258484498946731, + 21888242871839275222246405745257275088548364400416034343698203438467024371602, 1108675186250666, 351410525783850, 378491911098859, 61127364279781, - 1525469358892439, + 21888242871839275222246405745257275088548364400416034343698203460245345183127, 398648365631005, - 1746867078316592, + 21888242871839275222246405745257275088548364400416034343698203681643064607280, 298820309217668, 819068056277167, - 1480838767327654, + 21888242871839275222246405745257275088548364400416034343698203415614753618342, 357224410631269, - 1916727379015091, - 2045462206865796, + 21888242871839275222246405745257275088548364400416034343698203851503365305779, + 21888242871839275222246405745257275088548364400416034343698203980238193156484, 141191196887736, - 1964365006520646, + 21888242871839275222246405745257275088548364400416034343698203899140992811334, 954719595298940, 411111549144922, 20703616339317, @@ -5862,261 +5862,261 @@ pub global CRP: [Polynomial; L] = [ 806222741630792, 855377698307073, 230064539261422, - 1978339445516470, + 21888242871839275222246405745257275088548364400416034343698203913115431807158, 317738000357480, - 1705132916627427, + 21888242871839275222246405745257275088548364400416034343698203639908902918115, 422865849260962, 96585563984771, - 1647542147235250, + 21888242871839275222246405745257275088548364400416034343698203582318133525938, 507262707356261, - 1128369855082937, + 21888242871839275222246405745257275088548364400416034343698203063145841373625, 291268132986773, - 1950943384991768, + 21888242871839275222246405745257275088548364400416034343698203885719371282456, 84403350514852, - 1783400896785043, - 1239254431408558, + 21888242871839275222246405745257275088548364400416034343698203718176883075731, + 21888242871839275222246405745257275088548364400416034343698203174030417699246, 10653113165090, 870588442607601, - 1966304382690587, + 21888242871839275222246405745257275088548364400416034343698203901080368981275, 9443542891707, 567661276281137, 761163234397210, 253021767500110, 725747278625794, - 2198024377965160, + 21888242871839275222246405745257275088548364400416034343698204132800364255848, 859790692762915, - 1569184742027009, - 1429355494984552, + 21888242871839275222246405745257275088548364400416034343698203503960728317697, + 21888242871839275222246405745257275088548364400416034343698203364131481275240, 986473032045675, - 1610282087770695, - 2206680470516762, - 1554033929677536, + 21888242871839275222246405745257275088548364400416034343698203545058074061383, + 21888242871839275222246405745257275088548364400416034343698204141456456807450, + 21888242871839275222246405745257275088548364400416034343698203488809915968224, 874997371580054, 837239982119644, 215121634401996, 579132173059736, 846897769947764, - 1872168141361443, - 1236374075509431, + 21888242871839275222246405745257275088548364400416034343698203806944127652131, + 21888242871839275222246405745257275088548364400416034343698203171150061800119, 982857540644788, 181347534994744, 203431556904682, 523524980030020, 235965096586474, 1108963204027478, - 2251429923638526, - 1327414977595947, + 21888242871839275222246405745257275088548364400416034343698204186205909929214, + 21888242871839275222246405745257275088548364400416034343698203262190963886635, 1060887382108354, - 1781738252505102, - 1127030731103895, - 1647936489715825, + 21888242871839275222246405745257275088548364400416034343698203716514238795790, + 21888242871839275222246405745257275088548364400416034343698203061806717394583, + 21888242871839275222246405745257275088548364400416034343698203582712476006513, 685433644587105, 305112315681909, - 1424132804456770, - 1326537463403970, - 1686106895101024, + 21888242871839275222246405745257275088548364400416034343698203358908790747458, + 21888242871839275222246405745257275088548364400416034343698203261313449694658, + 21888242871839275222246405745257275088548364400416034343698203620882881391712, 336977521128506, - 1393657935540721, + 21888242871839275222246405745257275088548364400416034343698203328433921831409, 815906805850711, 372736352447812, 857465632426929, - 1327298147633553, - 1315046561462363, + 21888242871839275222246405745257275088548364400416034343698203262074133924241, + 21888242871839275222246405745257275088548364400416034343698203249822547753051, 804789870747058, 744443327209961, 465090400283168, - 1421144080501562, + 21888242871839275222246405745257275088548364400416034343698203355920066792250, 886455092213230, - 1638521969038651, + 21888242871839275222246405745257275088548364400416034343698203573297955329339, 658726847890157, - 1646592832295405, - 1393084257396014, + 21888242871839275222246405745257275088548364400416034343698203581368818586093, + 21888242871839275222246405745257275088548364400416034343698203327860243686702, 356193526300759, 510105799945358, 655732705303072, - 2024786935717288, - 2015912231090058, + 21888242871839275222246405745257275088548364400416034343698203959562922007976, + 21888242871839275222246405745257275088548364400416034343698203950688217380746, 442372257276416, - 1383109624900502, + 21888242871839275222246405745257275088548364400416034343698203317885611191190, 716799857703335, 330312008070200, - 1600507595860404, + 21888242871839275222246405745257275088548364400416034343698203535283582151092, 272930620735186, - 1334851104852482, + 21888242871839275222246405745257275088548364400416034343698203269627091143170, 721364276529214, - 1395443410083725, - 2195864542962312, - 1950105332885607, + 21888242871839275222246405745257275088548364400416034343698203330219396374413, + 21888242871839275222246405745257275088548364400416034343698204130640529253000, + 21888242871839275222246405745257275088548364400416034343698203884881319176295, 420933956566928, 991323263594758, - 1237930052565992, + 21888242871839275222246405745257275088548364400416034343698203172706038856680, 1120581264606900, 23485536252046, 809210933616834, 287279223712402, 63377404404589, - 2015207608270764, - 2149505307643974, + 21888242871839275222246405745257275088548364400416034343698203949983594561452, + 21888242871839275222246405745257275088548364400416034343698204084281293934662, 1066243757078368, - 1982712012029952, - 2165341672473411, - 1662185695167582, + 21888242871839275222246405745257275088548364400416034343698203917487998320640, + 21888242871839275222246405745257275088548364400416034343698204100117658764099, + 21888242871839275222246405745257275088548364400416034343698203596961681458270, 1080277817854036, - 1648041306051439, + 21888242871839275222246405745257275088548364400416034343698203582817292342127, 193777439450487, - 1498610420678739, + 21888242871839275222246405745257275088548364400416034343698203433386406969427, 63684749450783, - 1297466715425326, + 21888242871839275222246405745257275088548364400416034343698203232242701716014, 903890485373215, - 1168660596280971, + 21888242871839275222246405745257275088548364400416034343698203103436582571659, 315361872326896, 1098867730741283, - 1678422341033115, + 21888242871839275222246405745257275088548364400416034343698203613198327323803, 191612635605073, 391327130618613, 1009611670583693, 733141461645876, - 2061754536840227, - 1313139656618736, - 1957676670051333, + 21888242871839275222246405745257275088548364400416034343698203996530523130915, + 21888242871839275222246405745257275088548364400416034343698203247915642909424, + 21888242871839275222246405745257275088548364400416034343698203892452656342021, 1048692107787629, - 1360941915071013, - 1960944413898151, + 21888242871839275222246405745257275088548364400416034343698203295717901361701, + 21888242871839275222246405745257275088548364400416034343698203895720400188839, 266829252006549, - 1962835573146391, - 1611538713681781, + 21888242871839275222246405745257275088548364400416034343698203897611559437079, + 21888242871839275222246405745257275088548364400416034343698203546314699972469, 175164886862715, - 1585663106739077, - 1188066775995037, - 1390224098363859, - 1494488915934949, + 21888242871839275222246405745257275088548364400416034343698203520439093029765, + 21888242871839275222246405745257275088548364400416034343698203122842762285725, + 21888242871839275222246405745257275088548364400416034343698203325000084654547, + 21888242871839275222246405745257275088548364400416034343698203429264902225637, 796201314386755, 970955419647285, 1024967847623009, 60215466446807, - 1917743825018021, - 1689746010210066, + 21888242871839275222246405745257275088548364400416034343698203852519811308709, + 21888242871839275222246405745257275088548364400416034343698203624521996500754, 473778040020127, 549175043084585, 149585849597769, - 1323274081388307, + 21888242871839275222246405745257275088548364400416034343698203258050067678995, 839046480661264, 948469601235558, - 1882378499794459, - 1382435403209482, + 21888242871839275222246405745257275088548364400416034343698203817154486085147, + 21888242871839275222246405745257275088548364400416034343698203317211389500170, 28273907959553, - 1217183069274241, - 1130212738104297, - 1151781256862548, - 1172865377317291, + 21888242871839275222246405745257275088548364400416034343698203151959055564929, + 21888242871839275222246405745257275088548364400416034343698203064988724394985, + 21888242871839275222246405745257275088548364400416034343698203086557243153236, + 21888242871839275222246405745257275088548364400416034343698203107641363607979, 98457579249972, - 2085130920251102, + 21888242871839275222246405745257275088548364400416034343698204019906906541790, 960151743790354, - 1492951525995221, + 21888242871839275222246405745257275088548364400416034343698203427727512285909, 693046247760398, - 1169877249489870, - 1819520849906365, + 21888242871839275222246405745257275088548364400416034343698203104653235780558, + 21888242871839275222246405745257275088548364400416034343698203754296836197053, 140285878352018, 1101920497966825, - 1769987298534478, + 21888242871839275222246405745257275088548364400416034343698203704763284825166, 569687742106463, - 1188423873414006, + 21888242871839275222246405745257275088548364400416034343698203123199859704694, 362948288038555, 150937470016884, - 1229539082642010, + 21888242871839275222246405745257275088548364400416034343698203164315068932698, 1002316834807507, - 2102300174671324, - 2172076624840350, - 1126317623224778, + 21888242871839275222246405745257275088548364400416034343698204037076160962012, + 21888242871839275222246405745257275088548364400416034343698204106852611131038, + 21888242871839275222246405745257275088548364400416034343698203061093609515466, 577800807208041, 457356627677650, 858803884361600, - 1394580152381679, + 21888242871839275222246405745257275088548364400416034343698203329356138672367, 294938896458996, - 1354054573667176, + 21888242871839275222246405745257275088548364400416034343698203288830559957864, 284372117779057, 447165360212191, - 1416990517477711, + 21888242871839275222246405745257275088548364400416034343698203351766503768399, 681242260209873, - 1935578061377844, - 1455632410721359, + 21888242871839275222246405745257275088548364400416034343698203870354047668532, + 21888242871839275222246405745257275088548364400416034343698203390408397012047, 527929630332245, - 1152575227164744, + 21888242871839275222246405745257275088548364400416034343698203087351213455432, 1067202657730382, 879138686251103, 768210503323053, 660643278363099, 713402613972910, - 1469965671872039, + 21888242871839275222246405745257275088548364400416034343698203404741658162727, 995866124215083, - 1986575067091793, + 21888242871839275222246405745257275088548364400416034343698203921351053382481, 1026615062533378, 974372013161582, 1027889432703476, 283367416366094, - 1986872107315980, - 1947625614739606, - 2108416022288618, - 1811015955868872, + 21888242871839275222246405745257275088548364400416034343698203921648093606668, + 21888242871839275222246405745257275088548364400416034343698203882401601030294, + 21888242871839275222246405745257275088548364400416034343698204043192008579306, + 21888242871839275222246405745257275088548364400416034343698203745791942159560, 457465504614135, 867186596192801, - 1636357062838565, - 1284398761611287, + 21888242871839275222246405745257275088548364400416034343698203571133049129253, + 21888242871839275222246405745257275088548364400416034343698203219174747901975, 368963712023295, 247933119527967, 439076467303191, 742158566734918, - 1728882438506135, - 1751987517845513, + 21888242871839275222246405745257275088548364400416034343698203663658424796823, + 21888242871839275222246405745257275088548364400416034343698203686763504136201, 740952709081707, - 1588870281559295, + 21888242871839275222246405745257275088548364400416034343698203523646267849983, 166339774206923, 1024090483723848, 353638974735778, 1052126831069536, 747783856468520, - 1494215521297899, + 21888242871839275222246405745257275088548364400416034343698203428991507588587, 828382362048000, 578285684509770, 399273165080494, 850279616557814, - 1603917739196793, - 1659280028862004, + 21888242871839275222246405745257275088548364400416034343698203538693725487481, + 21888242871839275222246405745257275088548364400416034343698203594056015152692, 489843966948381, 5696969802585, - 2098220247686387, - 1634986569812898, - 1915166199536450, - 2054850185620236, - 2120450500469028, + 21888242871839275222246405745257275088548364400416034343698204032996233977075, + 21888242871839275222246405745257275088548364400416034343698203569762556103586, + 21888242871839275222246405745257275088548364400416034343698203849942185827138, + 21888242871839275222246405745257275088548364400416034343698203989626171910924, + 21888242871839275222246405745257275088548364400416034343698204055226486759716, 417116988465838, 859463241695803, 278566780332582, - 1874520178920454, - 2142131410145296, - 1835923544795683, + 21888242871839275222246405745257275088548364400416034343698203809296165211142, + 21888242871839275222246405745257275088548364400416034343698204076907396435984, + 21888242871839275222246405745257275088548364400416034343698203770699531086371, 487974558810532, - 2124269760857459, + 21888242871839275222246405745257275088548364400416034343698204059045747148147, 286033034599429, - 1222751688532061, - 2163310097751572, + 21888242871839275222246405745257275088548364400416034343698203157527674822749, + 21888242871839275222246405745257275088548364400416034343698204098086084042260, 168679277693261, - 2139170680640116, - 1171388977172661, + 21888242871839275222246405745257275088548364400416034343698204073946666930804, + 21888242871839275222246405745257275088548364400416034343698203106164963463349, 364565569948716, 54511014858398, 77500797322134, - 1852865400820486, + 21888242871839275222246405745257275088548364400416034343698203787641387111174, 333072014652072, - 1925977242933347, - 1729462252502319, + 21888242871839275222246405745257275088548364400416034343698203860753229224035, + 21888242871839275222246405745257275088548364400416034343698203664238238793007, 358075061960909, 506389056403206, 153038164805217, 112294735668162, 396576221199027, - 1163774260161952, - 2097280736362520, + 21888242871839275222246405745257275088548364400416034343698203098550246452640, + 21888242871839275222246405745257275088548364400416034343698204032056722653208, 256782997133154, 79949645951251, 1073473161057501, @@ -6124,56 +6124,56 @@ pub global CRP: [Polynomial; L] = [ 176918446171350, 76228539254850, 1088735306334752, - 1314662382285634, - 1757108250687965, - 1802728308477558, + 21888242871839275222246405745257275088548364400416034343698203249438368576322, + 21888242871839275222246405745257275088548364400416034343698203691884236978653, + 21888242871839275222246405745257275088548364400416034343698203737504294768246, 740543652928965, - 1621478331328750, + 21888242871839275222246405745257275088548364400416034343698203556254317619438, 623280461813278, - 1324095157357706, - 1814509023967968, - 1162448266372271, + 21888242871839275222246405745257275088548364400416034343698203258871143648394, + 21888242871839275222246405745257275088548364400416034343698203749285010258656, + 21888242871839275222246405745257275088548364400416034343698203097224252662959, 580384480307254, - 1759410760807044, - 1685456216032717, + 21888242871839275222246405745257275088548364400416034343698203694186747097732, + 21888242871839275222246405745257275088548364400416034343698203620232202323405, 725193067795277, - 2210311621470250, + 21888242871839275222246405745257275088548364400416034343698204145087607760938, 364187982997091, - 1638603327689038, + 21888242871839275222246405745257275088548364400416034343698203573379313979726, 722053539996012, 1024590977392268, 1058769239531460, 565120384584711, - 2172989025542298, - 1564052046449843, - 1212960342732192, + 21888242871839275222246405745257275088548364400416034343698204107765011832986, + 21888242871839275222246405745257275088548364400416034343698203498828032740531, + 21888242871839275222246405745257275088548364400416034343698203147736329022880, 434842578395080, 54318423683021, 800541266731649, - 2194833686880384, - 2020708933633543, + 21888242871839275222246405745257275088548364400416034343698204129609673171072, + 21888242871839275222246405745257275088548364400416034343698203955484919924231, 525521680899675, - 1296684649112710, + 21888242871839275222246405745257275088548364400416034343698203231460635403398, 607867165066500, 725851265988002, 74265026493233, 938279165099196, - 1997464300020099, - 1789177433811303, - 1895870609003884, + 21888242871839275222246405745257275088548364400416034343698203932240286310787, + 21888242871839275222246405745257275088548364400416034343698203723953420101991, + 21888242871839275222246405745257275088548364400416034343698203830646595294572, 40047840686281, 217022900783209, - 2145064678809202, - 2244770111471687, + 21888242871839275222246405745257275088548364400416034343698204079840665099890, + 21888242871839275222246405745257275088548364400416034343698204179546097762375, 606399084383209, 224282252953255, 752756881841693, - 1733854593673293, + 21888242871839275222246405745257275088548364400416034343698203668630579963981, 759676539814665, 100255841997308, - 1318054144080474, - 1813444572799062, - 2075009228034035, + 21888242871839275222246405745257275088548364400416034343698203252830130371162, + 21888242871839275222246405745257275088548364400416034343698203748220559089750, + 21888242871839275222246405745257275088548364400416034343698204009785214324723, 20019976383698, 853472692855155, 422189147350480, @@ -6186,96 +6186,96 @@ pub global CRP: [Polynomial; L] = [ 256760585078426, 156180746253457, 429109744351479, - 1291198218200915, + 21888242871839275222246405745257275088548364400416034343698203225974204491603, 379271636933129, 1022293025492881, - 1166775147537181, - 1426948879227376, - 1725064288903983, - 1640404194121573, + 21888242871839275222246405745257275088548364400416034343698203101551133827869, + 21888242871839275222246405745257275088548364400416034343698203361724865518064, + 21888242871839275222246405745257275088548364400416034343698203659840275194671, + 21888242871839275222246405745257275088548364400416034343698203575180180412261, 640187687201547, 477971490346475, 888914401568550, 481973383279436, - 1327168483529234, + 21888242871839275222246405745257275088548364400416034343698203261944469819922, 138429276632531, - 2213445661764800, + 21888242871839275222246405745257275088548364400416034343698204148221648055488, 1060691513969516, 134173220769034, - 1457059214446032, + 21888242871839275222246405745257275088548364400416034343698203391835200736720, 202420989223491, - 1400272357319549, - 1584689098951265, - 1258087882016277, - 1943560456488657, + 21888242871839275222246405745257275088548364400416034343698203335048343610237, + 21888242871839275222246405745257275088548364400416034343698203519465085241953, + 21888242871839275222246405745257275088548364400416034343698203192863868306965, + 21888242871839275222246405745257275088548364400416034343698203878336442779345, 117248470159167, 544247534534818, - 1672648085459196, + 21888242871839275222246405745257275088548364400416034343698203607424071749884, 356034768200342, - 1910171825608780, - 1809491796873913, + 21888242871839275222246405745257275088548364400416034343698203844947811899468, + 21888242871839275222246405745257275088548364400416034343698203744267783164601, 1098285281114951, 531600754269595, 263346373094523, 227243057668747, - 1139433479311289, + 21888242871839275222246405745257275088548364400416034343698203074209465601977, 1121442630031930, 1060522045521962, 684205849725401, 643223517350448, - 2043715517330795, - 2245825515570544, + 21888242871839275222246405745257275088548364400416034343698203978491503621483, + 21888242871839275222246405745257275088548364400416034343698204180601501861232, 234008573138721, - 1948692970343810, - 2185751812306028, + 21888242871839275222246405745257275088548364400416034343698203883468956634498, + 21888242871839275222246405745257275088548364400416034343698204120527798596716, 810033178655680, 433077134169496, 780841931457340, - 1613778991176697, - 1772384759934906, - 1326976161425356, + 21888242871839275222246405745257275088548364400416034343698203548554977467385, + 21888242871839275222246405745257275088548364400416034343698203707160746225594, + 21888242871839275222246405745257275088548364400416034343698203261752147716044, 608917078302274, 897474059950611, - 1834137594722182, - 1690335491672116, + 21888242871839275222246405745257275088548364400416034343698203768913581012870, + 21888242871839275222246405745257275088548364400416034343698203625111477962804, 41271251820273, - 1990999670360991, - 1381806533544270, + 21888242871839275222246405745257275088548364400416034343698203925775656651679, + 21888242871839275222246405745257275088548364400416034343698203316582519834958, 856252742222801, - 1133825801171522, + 21888242871839275222246405745257275088548364400416034343698203068601787462210, 1052390438168599, 1052911548064936, 569335593027093, 117653846902121, 416473175222776, 158573284224398, - 1976980669864425, - 1763485306229046, - 1361876242821875, + 21888242871839275222246405745257275088548364400416034343698203911756656155113, + 21888242871839275222246405745257275088548364400416034343698203698261292519734, + 21888242871839275222246405745257275088548364400416034343698203296652229112563, 428375233430165, - 1981278536895123, - 2086907134804791, - 1360454237004416, + 21888242871839275222246405745257275088548364400416034343698203916054523185811, + 21888242871839275222246405745257275088548364400416034343698204021683121095479, + 21888242871839275222246405745257275088548364400416034343698203295230223295104, 177235648918600, 630591828544199, - 1486928794137524, + 21888242871839275222246405745257275088548364400416034343698203421704780428212, 1038037676881998, 524783196897334, - 1954240825093686, - 1662176018268873, + 21888242871839275222246405745257275088548364400416034343698203889016811384374, + 21888242871839275222246405745257275088548364400416034343698203596952004559561, 254228698295611, 650083102825391, 739368430473204, 992401327853593, - 1573852071959745, + 21888242871839275222246405745257275088548364400416034343698203508628058250433, 57075168204560, 294165566180211, 908513049289960, - 1597826175131287, - 1352269114382629, + 21888242871839275222246405745257275088548364400416034343698203532602161421975, + 21888242871839275222246405745257275088548364400416034343698203287045100673317, 566961598477841, 67151401091456, - 1361375313695886, + 21888242871839275222246405745257275088548364400416034343698203296151299986574, 847980273790683, 470849524995049, 137507355658033, @@ -6283,521 +6283,521 @@ pub global CRP: [Polynomial; L] = [ 657186291350494, 1116090192648855, 292112328064919, - 1477507668311536, + 21888242871839275222246405745257275088548364400416034343698203412283654602224, 753621385271629, - 1691773025619589, - 1835261663352659, - 1415259538527082, - 1405670744313489, - 2081107738172460, + 21888242871839275222246405745257275088548364400416034343698203626549011910277, + 21888242871839275222246405745257275088548364400416034343698203770037649643347, + 21888242871839275222246405745257275088548364400416034343698203350035524817770, + 21888242871839275222246405745257275088548364400416034343698203340446730604177, + 21888242871839275222246405745257275088548364400416034343698204015883724463148, 106759713385886, - 2234313778070411, - 1994774258420185, + 21888242871839275222246405745257275088548364400416034343698204169089764361099, + 21888242871839275222246405745257275088548364400416034343698203929550244710873, 691959099960194, 342130820399080, - 1896715017107256, - 1252973061684165, - 1705324240260887, - 1360354961122387, + 21888242871839275222246405745257275088548364400416034343698203831491003397944, + 21888242871839275222246405745257275088548364400416034343698203187749047974853, + 21888242871839275222246405745257275088548364400416034343698203640100226551575, + 21888242871839275222246405745257275088548364400416034343698203295130947413075, 125335754319299, 32809465665197, 679863683101586, - 2065456696213874, - 1695497550847331, - 1649740355090889, - 1922663373515353, - 1816378797135079, - 1622039155675130, + 21888242871839275222246405745257275088548364400416034343698204000232682504562, + 21888242871839275222246405745257275088548364400416034343698203630273537138019, + 21888242871839275222246405745257275088548364400416034343698203584516341381577, + 21888242871839275222246405745257275088548364400416034343698203857439359806041, + 21888242871839275222246405745257275088548364400416034343698203751154783425767, + 21888242871839275222246405745257275088548364400416034343698203556815141965818, 227669580673079, 315371780465974, - 1637286264640919, + 21888242871839275222246405745257275088548364400416034343698203572062250931607, 903918392232334, - 2150744271357166, - 2029805730267829, + 21888242871839275222246405745257275088548364400416034343698204085520257647854, + 21888242871839275222246405745257275088548364400416034343698203964581716558517, 433034573129909, - 1852721803154019, + 21888242871839275222246405745257275088548364400416034343698203787497789444707, 72344476169712, 98442854315618, - 1842315651093695, + 21888242871839275222246405745257275088548364400416034343698203777091637384383, 274269736061846, - 1220043813680040, - 1284388014989571, - 1430196870211953, - 2205416515130708, - 1236463098655745, + 21888242871839275222246405745257275088548364400416034343698203154819799970728, + 21888242871839275222246405745257275088548364400416034343698203219164001280259, + 21888242871839275222246405745257275088548364400416034343698203364972856502641, + 21888242871839275222246405745257275088548364400416034343698204140192501421396, + 21888242871839275222246405745257275088548364400416034343698203171239084946433, 313459651247161, 935821269260435, 504747312611373, 1054258153035791, - 1684145257158285, + 21888242871839275222246405745257275088548364400416034343698203618921243448973, 719431177748865, 146497171332218, - 1716368012438973, - 1432400415026640, + 21888242871839275222246405745257275088548364400416034343698203651143998729661, + 21888242871839275222246405745257275088548364400416034343698203367176401317328, 203479229640317, - 2167237470925641, + 21888242871839275222246405745257275088548364400416034343698204102013457216329, 364507147039510, - 2068984833069983, - 1378178602863940, - 1597925741505659, + 21888242871839275222246405745257275088548364400416034343698204003760819360671, + 21888242871839275222246405745257275088548364400416034343698203312954589154628, + 21888242871839275222246405745257275088548364400416034343698203532701727796347, 55410710016923, - 1419773169525618, - 2241851769431182, + 21888242871839275222246405745257275088548364400416034343698203354549155816306, + 21888242871839275222246405745257275088548364400416034343698204176627755721870, 713273705307033, - 1718768787637863, + 21888242871839275222246405745257275088548364400416034343698203653544773928551, 266343340564376, 63986198386643, 659288661637867, - 1711796074176689, - 1822940073835606, - 1708520255612798, + 21888242871839275222246405745257275088548364400416034343698203646572060467377, + 21888242871839275222246405745257275088548364400416034343698203757716060126294, + 21888242871839275222246405745257275088548364400416034343698203643296241903486, 96239094585070, 522881691463722, 271264627687826, - 1770715175162331, - 2065016513944662, - 1772544127725923, + 21888242871839275222246405745257275088548364400416034343698203705491161453019, + 21888242871839275222246405745257275088548364400416034343698203999792500235350, + 21888242871839275222246405745257275088548364400416034343698203707320114016611, 357402610071748, 548116306624580, 309803498132073, 284668606415350, - 1917683914259391, + 21888242871839275222246405745257275088548364400416034343698203852459900550079, 841677494676684, 371476145936277, - 2070293535225539, - 1839819992265038, + 21888242871839275222246405745257275088548364400416034343698204005069521516227, + 21888242871839275222246405745257275088548364400416034343698203774595978555726, 881438819745673, 668551277530158, 661247202761499, 979249601866106, - 1706149044674186, + 21888242871839275222246405745257275088548364400416034343698203640925030964874, 890988119871956, 769743990204831, - 2182798623228844, + 21888242871839275222246405745257275088548364400416034343698204117574609519532, 739887283417503, 973393529343378, - 1275013904081901, - 1202286990174758, - 1674925160995261, + 21888242871839275222246405745257275088548364400416034343698203209789890372589, + 21888242871839275222246405745257275088548364400416034343698203137062976465446, + 21888242871839275222246405745257275088548364400416034343698203609701147285949, 434879777267726, 339928130509248, 793920870729111, - 1269480677980723, + 21888242871839275222246405745257275088548364400416034343698203204256664271411, 172971738656484, - 1339879553451740, + 21888242871839275222246405745257275088548364400416034343698203274655539742428, 1121607379454371, - 1485825539667718, - 1262445866737316, - 2250631060636753, + 21888242871839275222246405745257275088548364400416034343698203420601525958406, + 21888242871839275222246405745257275088548364400416034343698203197221853028004, + 21888242871839275222246405745257275088548364400416034343698204185407046927441, 543274966420511, - 1138602995764427, + 21888242871839275222246405745257275088548364400416034343698203073378982055115, 561941114094104, 99861319076379, 413559613765187, 523166849244404, 556213131040250, 962134512104952, - 1165707639613945, + 21888242871839275222246405745257275088548364400416034343698203100483625904633, 95153835914662, - 2126341934221675, - 2052356554412583, + 21888242871839275222246405745257275088548364400416034343698204061117920512363, + 21888242871839275222246405745257275088548364400416034343698203987132540703271, 157624564793264, 864359187149056, 1076084669471502, 414708560361851, 885734268100529, - 1763378624641198, - 2014424902720656, + 21888242871839275222246405745257275088548364400416034343698203698154610931886, + 21888242871839275222246405745257275088548364400416034343698203949200889011344, 692508275743715, - 1558506833488763, - 1963765659131466, - 1195409884095824, + 21888242871839275222246405745257275088548364400416034343698203493282819779451, + 21888242871839275222246405745257275088548364400416034343698203898541645422154, + 21888242871839275222246405745257275088548364400416034343698203130185870386512, 621522810000733, 473280176577785, 682688706276886, - 1257501146336303, + 21888242871839275222246405745257275088548364400416034343698203192277132626991, 775934311398000, 498650061556401, 281158308243099, - 1346809368824078, + 21888242871839275222246405745257275088548364400416034343698203281585355114766, 947871327317302, - 1179956558592518, + 21888242871839275222246405745257275088548364400416034343698203114732544883206, 928678648169714, - 1293868876403015, + 21888242871839275222246405745257275088548364400416034343698203228644862693703, 1069097885335216, - 1774986622303290, - 1593942983708460, - 2222473658332172, - 2040594522642086, - 2154662009826149, + 21888242871839275222246405745257275088548364400416034343698203709762608593978, + 21888242871839275222246405745257275088548364400416034343698203528718969999148, + 21888242871839275222246405745257275088548364400416034343698204157249644622860, + 21888242871839275222246405745257275088548364400416034343698203975370508932774, + 21888242871839275222246405745257275088548364400416034343698204089437996116837, 602982438841745, 491849965348774, - 1738560977408376, - 1181668032361376, - 1425042616761897, - 1166969683985094, - 2131962358646754, - 1693117879920987, + 21888242871839275222246405745257275088548364400416034343698203673336963699064, + 21888242871839275222246405745257275088548364400416034343698203116444018652064, + 21888242871839275222246405745257275088548364400416034343698203359818603052585, + 21888242871839275222246405745257275088548364400416034343698203101745670275782, + 21888242871839275222246405745257275088548364400416034343698204066738344937442, + 21888242871839275222246405745257275088548364400416034343698203627893866211675, 394752148983591, - 1387625497323572, - 1280614467534956, - 1381880052161734, + 21888242871839275222246405745257275088548364400416034343698203322401483614260, + 21888242871839275222246405745257275088548364400416034343698203215390453825644, + 21888242871839275222246405745257275088548364400416034343698203316656038452422, 910079189460476, 576160674299506, - 1581346262771176, - 1575925900380251, - 1201401663576168, + 21888242871839275222246405745257275088548364400416034343698203516122249061864, + 21888242871839275222246405745257275088548364400416034343698203510701886670939, + 21888242871839275222246405745257275088548364400416034343698203136177649866856, 237000836395814, 984954721514832, - 1559107708077694, + 21888242871839275222246405745257275088548364400416034343698203493883694368382, 292716378124353, - 1510036412178464, - 1902007052885159, - 1849289462620965, - 1807112907227226, + 21888242871839275222246405745257275088548364400416034343698203444812398469152, + 21888242871839275222246405745257275088548364400416034343698203836783039175847, + 21888242871839275222246405745257275088548364400416034343698203784065448911653, + 21888242871839275222246405745257275088548364400416034343698203741888893517914, 741454838102156, 79234779028121, 1096367906798827, 201447850153669, - 1380397543434447, + 21888242871839275222246405745257275088548364400416034343698203315173529725135, 90601060830526, - 1253534546130986, + 21888242871839275222246405745257275088548364400416034343698203188310532421674, 555623649251401, 53875731195576, 314800522284377, - 1633408796041674, - 1312403304086141, - 1481125779886597, - 1432650719778455, - 1169005827865434, + 21888242871839275222246405745257275088548364400416034343698203568184782332362, + 21888242871839275222246405745257275088548364400416034343698203247179290376829, + 21888242871839275222246405745257275088548364400416034343698203415901766177285, + 21888242871839275222246405745257275088548364400416034343698203367426706069143, + 21888242871839275222246405745257275088548364400416034343698203103781814156122, 581627535139040, 868135267978972, 529696392055634, 938853726151858, - 1189166964777710, + 21888242871839275222246405745257275088548364400416034343698203123942951068398, 1010453247918501, 1076040638772770, 1118299705032967, - 1572033446192163, - 1170214272009134, + 21888242871839275222246405745257275088548364400416034343698203506809432482851, + 21888242871839275222246405745257275088548364400416034343698203104990258299822, 713890607950478, - 1552768224725119, + 21888242871839275222246405745257275088548364400416034343698203487544211015807, 971476294129437, 310791841199398, - 2081086625035364, + 21888242871839275222246405745257275088548364400416034343698204015862611326052, 901925820445898, 750276405583848, 1071240952429811, - 1935376472318483, + 21888242871839275222246405745257275088548364400416034343698203870152458609171, 1008250083804028, 686356634167150, 475936643197736, 996546121857502, - 1429527780492622, - 2015751958393168, + 21888242871839275222246405745257275088548364400416034343698203364303766783310, + 21888242871839275222246405745257275088548364400416034343698203950527944683856, 1053361672503851, 1103634423782273, - 1345678658713868, + 21888242871839275222246405745257275088548364400416034343698203280454645004556, 541366845682207, - 1539275632532127, + 21888242871839275222246405745257275088548364400416034343698203474051618822815, 870032174408613, 763250528873947, 237655987387049, - 1374043551571151, - 2173270043782359, + 21888242871839275222246405745257275088548364400416034343698203308819537861839, + 21888242871839275222246405745257275088548364400416034343698204108046030073047, 148942177718604, - 1401065292253106, - 1238818882798465, + 21888242871839275222246405745257275088548364400416034343698203335841278543794, + 21888242871839275222246405745257275088548364400416034343698203173594869089153, 536171370721026, - 1808812952133017, - 1727131256148805, - 1769244179713157, + 21888242871839275222246405745257275088548364400416034343698203743588938423705, + 21888242871839275222246405745257275088548364400416034343698203661907242439493, + 21888242871839275222246405745257275088548364400416034343698203704020166003845, 910442025927778, 1068672139090985, - 1961742998401670, - 1728232920077395, + 21888242871839275222246405745257275088548364400416034343698203896518984692358, + 21888242871839275222246405745257275088548364400416034343698203663008906368083, 515833269001291, - 1274145505923050, + 21888242871839275222246405745257275088548364400416034343698203208921492213738, 349835724422837, 987110640109875, - 1675290915863615, + 21888242871839275222246405745257275088548364400416034343698203610066902154303, 680705330526886, 684171596766771, - 1480207521329200, - 2160871100822743, - 1846679432522826, + 21888242871839275222246405745257275088548364400416034343698203414983507619888, + 21888242871839275222246405745257275088548364400416034343698204095647087113431, + 21888242871839275222246405745257275088548364400416034343698203781455418813514, 843534355812345, 572790853686720, - 1639325719307435, + 21888242871839275222246405745257275088548364400416034343698203574101705598123, 579985412104604, 725627989817617, - 1908848807917022, + 21888242871839275222246405745257275088548364400416034343698203843624794207710, 444278982605521, - 2130732351813053, + 21888242871839275222246405745257275088548364400416034343698204065508338103741, 578677405522156, - 1220565158399094, + 21888242871839275222246405745257275088548364400416034343698203155341144689782, 112509210586405, - 1698839410187778, + 21888242871839275222246405745257275088548364400416034343698203633615396478466, 875789792474578, 865632580292895, - 1295528328873046, + 21888242871839275222246405745257275088548364400416034343698203230304315163734, 610620355237056, - 1491883015175086, + 21888242871839275222246405745257275088548364400416034343698203426659001465774, 473801161410911, 336698799201813, - 1876672795649817, + 21888242871839275222246405745257275088548364400416034343698203811448781940505, 179899184816205, 947860896372141, - 1282698777289366, + 21888242871839275222246405745257275088548364400416034343698203217474763580054, 765876328863400, 286276841088194, - 1761131703764477, - 1856582316129872, - 1896318009527620, - 1888262706057503, - 1880756523288213, - 1345047984201210, + 21888242871839275222246405745257275088548364400416034343698203695907690055165, + 21888242871839275222246405745257275088548364400416034343698203791358302420560, + 21888242871839275222246405745257275088548364400416034343698203831093995818308, + 21888242871839275222246405745257275088548364400416034343698203823038692348191, + 21888242871839275222246405745257275088548364400416034343698203815532509578901, + 21888242871839275222246405745257275088548364400416034343698203279823970491898, 338642806214257, 131582392146864, 595020508534188, - 2177993120902546, - 1703718235998578, - 1978687675878390, - 1993415901591924, - 1505397250206806, + 21888242871839275222246405745257275088548364400416034343698204112769107193234, + 21888242871839275222246405745257275088548364400416034343698203638494222289266, + 21888242871839275222246405745257275088548364400416034343698203913463662169078, + 21888242871839275222246405745257275088548364400416034343698203928191887882612, + 21888242871839275222246405745257275088548364400416034343698203440173236497494, 957679065132434, - 1839599399222610, + 21888242871839275222246405745257275088548364400416034343698203774375385513298, 651239105995313, 663222913897511, - 1924660453727350, - 1448171701909035, + 21888242871839275222246405745257275088548364400416034343698203859436440018038, + 21888242871839275222246405745257275088548364400416034343698203382947688199723, 191309601993115, - 2153318763597069, - 1477212911428838, + 21888242871839275222246405745257275088548364400416034343698204088094749887757, + 21888242871839275222246405745257275088548364400416034343698203411988897719526, 154879451221656, - 1917276786931716, - 1670646289395674, + 21888242871839275222246405745257275088548364400416034343698203852052773222404, + 21888242871839275222246405745257275088548364400416034343698203605422275686362, 970115757455168, - 1949386484795364, + 21888242871839275222246405745257275088548364400416034343698203884162471086052, 863099319703699, - 1557845687438646, + 21888242871839275222246405745257275088548364400416034343698203492621673729334, 627685252035968, - 2148097138355637, + 21888242871839275222246405745257275088548364400416034343698204082873124646325, 1056115100952859, - 1307350466795570, + 21888242871839275222246405745257275088548364400416034343698203242126453086258, 74553794724474, - 1866145157483005, + 21888242871839275222246405745257275088548364400416034343698203800921143773693, 975205390225524, - 1247063261171555, + 21888242871839275222246405745257275088548364400416034343698203181839247462243, 421175569794064, - 1339095812529204, + 21888242871839275222246405745257275088548364400416034343698203273871798819892, 707565152603507, - 1144575490331849, - 2139754416931056, - 1142248669526225, - 1861382155774910, + 21888242871839275222246405745257275088548364400416034343698203079351476622537, + 21888242871839275222246405745257275088548364400416034343698204074530403221744, + 21888242871839275222246405745257275088548364400416034343698203077024655816913, + 21888242871839275222246405745257275088548364400416034343698203796158142065598, 950688984809243, 416370202422550, - 2237344962038736, - 2235585731124906, - 2225924767528691, + 21888242871839275222246405745257275088548364400416034343698204172120948329424, + 21888242871839275222246405745257275088548364400416034343698204170361717415594, + 21888242871839275222246405745257275088548364400416034343698204160700753819379, 768920488168888, - 1572119372918737, - 1197879383147514, + 21888242871839275222246405745257275088548364400416034343698203506895359209425, + 21888242871839275222246405745257275088548364400416034343698203132655369438202, 518581128659725, 189299907836446, 24953102209804, 444190313900175, 277396144334791, 689972373150987, - 1358046603769997, - 1436774931141960, - 1259781898553925, + 21888242871839275222246405745257275088548364400416034343698203292822590060685, + 21888242871839275222246405745257275088548364400416034343698203371550917432648, + 21888242871839275222246405745257275088548364400416034343698203194557884844613, 689130394073413, 381018039080829, 625964427562209, - 1242398249891181, - 1404387071750826, - 2131207347919205, + 21888242871839275222246405745257275088548364400416034343698203177174236181869, + 21888242871839275222246405745257275088548364400416034343698203339163058041514, + 21888242871839275222246405745257275088548364400416034343698204065983334209893, 222294881110448, - 2179157137201662, - 1276633705216616, + 21888242871839275222246405745257275088548364400416034343698204113933123492350, + 21888242871839275222246405745257275088548364400416034343698203211409691507304, 742095444602724, 374730116502301, - 2200039269574911, - 1693741768685078, - 1991092412251536, + 21888242871839275222246405745257275088548364400416034343698204134815255865599, + 21888242871839275222246405745257275088548364400416034343698203628517754975766, + 21888242871839275222246405745257275088548364400416034343698203925868398542224, 1059992815943753, 782466913033434, - 1329624907681082, - 1478078345451941, + 21888242871839275222246405745257275088548364400416034343698203264400893971770, + 21888242871839275222246405745257275088548364400416034343698203412854331742629, 1027899781248354, 842337302593663, 504288720653602, - 1657539679653599, - 2137526880996579, - 2232538563442229, - 2190851159995972, + 21888242871839275222246405745257275088548364400416034343698203592315665944287, + 21888242871839275222246405745257275088548364400416034343698204072302867287267, + 21888242871839275222246405745257275088548364400416034343698204167314549732917, + 21888242871839275222246405745257275088548364400416034343698204125627146286660, 67688290496665, - 1853334605238460, + 21888242871839275222246405745257275088548364400416034343698203788110591529148, 821971852397374, 43270383331470, - 1192264958403679, + 21888242871839275222246405745257275088548364400416034343698203127040944694367, 951598976436869, - 2156678381493784, - 1342986811016714, - 1734154341595345, + 21888242871839275222246405745257275088548364400416034343698204091454367784472, + 21888242871839275222246405745257275088548364400416034343698203277762797307402, + 21888242871839275222246405745257275088548364400416034343698203668930327886033, 352542534607021, 332460641440732, - 1840558648665374, + 21888242871839275222246405745257275088548364400416034343698203775334634956062, 292201487362461, 16862651380272, 483551748029494, - 2204932081479396, + 21888242871839275222246405745257275088548364400416034343698204139708067770084, 348016664647507, - 1474234807172982, - 1227150887370240, - 1290928424709803, - 1419678652228813, + 21888242871839275222246405745257275088548364400416034343698203409010793463670, + 21888242871839275222246405745257275088548364400416034343698203161926873660928, + 21888242871839275222246405745257275088548364400416034343698203225704411000491, + 21888242871839275222246405745257275088548364400416034343698203354454638519501, 1035847173510386, - 2159125547886311, - 1658581962719539, + 21888242871839275222246405745257275088548364400416034343698204093901534176999, + 21888242871839275222246405745257275088548364400416034343698203593357949010227, 918011558405901, 987387146507869, 103396149085754, 132992296876882, - 1542472032900821, - 1694774966844931, - 1987036730044915, - 1301987839396674, - 1753155342610875, - 2106006084148657, - 1991569499517981, - 1424881755617172, + 21888242871839275222246405745257275088548364400416034343698203477248019191509, + 21888242871839275222246405745257275088548364400416034343698203629550953135619, + 21888242871839275222246405745257275088548364400416034343698203921812716335603, + 21888242871839275222246405745257275088548364400416034343698203236763825687362, + 21888242871839275222246405745257275088548364400416034343698203687931328901563, + 21888242871839275222246405745257275088548364400416034343698204040782070439345, + 21888242871839275222246405745257275088548364400416034343698203926345485808669, + 21888242871839275222246405745257275088548364400416034343698203359657741907860, 653463748024474, 399781974732459, - 2206793311332892, - 1751418651437707, - 2127142346086883, - 2135624362339432, + 21888242871839275222246405745257275088548364400416034343698204141569297623580, + 21888242871839275222246405745257275088548364400416034343698203686194637728395, + 21888242871839275222246405745257275088548364400416034343698204061918332377571, + 21888242871839275222246405745257275088548364400416034343698204070400348630120, 1012110914457769, - 1843993514557139, - 1358025566013963, - 1238645712312730, + 21888242871839275222246405745257275088548364400416034343698203778769500847827, + 21888242871839275222246405745257275088548364400416034343698203292801552304651, + 21888242871839275222246405745257275088548364400416034343698203173421698603418, 1100078020793445, - 1238922612191163, - 1399704171974622, + 21888242871839275222246405745257275088548364400416034343698203173698598481851, + 21888242871839275222246405745257275088548364400416034343698203334480158265310, 1089079547428982, - 2016856625956422, - 1807176051088525, + 21888242871839275222246405745257275088548364400416034343698203951632612247110, + 21888242871839275222246405745257275088548364400416034343698203741952037379213, 405788006849686, 633349826465671, 612929435976899, 862093567666561, 666224561700212, - 1130998236264137, - 2027048744408750, + 21888242871839275222246405745257275088548364400416034343698203065774222554825, + 21888242871839275222246405745257275088548364400416034343698203961824730699438, 1016758983102261, 37338839761284, - 1611341315329333, - 2099594930345241, - 1933305630688344, + 21888242871839275222246405745257275088548364400416034343698203546117301620021, + 21888242871839275222246405745257275088548364400416034343698204034370916635929, + 21888242871839275222246405745257275088548364400416034343698203868081616979032, 123942279338131, 686987256759834, 422077936600826, - 1276065315946919, - 1577102899913990, - 1272681357246687, + 21888242871839275222246405745257275088548364400416034343698203210841302237607, + 21888242871839275222246405745257275088548364400416034343698203511878886204678, + 21888242871839275222246405745257275088548364400416034343698203207457343537375, 797434258272827, 265925183433035, 966630761678749, - 1259293203945121, + 21888242871839275222246405745257275088548364400416034343698203194069190235809, 1081216598576012, 856487309044582, 666992166825281, 646467060290255, 1022962301992778, - 1916280902006833, + 21888242871839275222246405745257275088548364400416034343698203851056888297521, 733491945142982, 600282065164620, 1035460990124120, - 1257214892636429, + 21888242871839275222246405745257275088548364400416034343698203191990878927117, 870616289078825, 343651599867176, 89066884379678, 616754860451350, 828789275238374, - 2114845812126754, + 21888242871839275222246405745257275088548364400416034343698204049621798417442, 790360204090503, 443563279378690, 1050205008836041, - 1284032862419589, + 21888242871839275222246405745257275088548364400416034343698203218808848710277, 760260346809862, - 1526880505924359, + 21888242871839275222246405745257275088548364400416034343698203461656492215047, 844030418931843, 701575969632190, 923439977935196, - 1481846912350791, + 21888242871839275222246405745257275088548364400416034343698203416622898641479, 461822956591382, - 1412994971560254, - 1915499290258328, - 1921239538775444, + 21888242871839275222246405745257275088548364400416034343698203347770957850942, + 21888242871839275222246405745257275088548364400416034343698203850275276549016, + 21888242871839275222246405745257275088548364400416034343698203856015525066132, 790879982027474, 84760320504878, - 1323366182091826, + 21888242871839275222246405745257275088548364400416034343698203258142168382514, 840032905929627, 467947840544267, 661657592689669, - 2056560426333284, - 1244006924611996, + 21888242871839275222246405745257275088548364400416034343698203991336412623972, + 21888242871839275222246405745257275088548364400416034343698203178782910902684, 146937038372908, - 1683572712358685, + 21888242871839275222246405745257275088548364400416034343698203618348698649373, 849020342236053, 446298484634513, 26520770041161, - 1409740585575432, - 1295536593999174, + 21888242871839275222246405745257275088548364400416034343698203344516571866120, + 21888242871839275222246405745257275088548364400416034343698203230312580289862, 954544974301370, 879591144826685, - 1688152182390891, + 21888242871839275222246405745257275088548364400416034343698203622928168681579, 335632393616676, 14693450708041, 174048225796159, 934622331223025, - 1184577607707563, - 1967224144805463, - 1743868456523896, - 2011214625960327, + 21888242871839275222246405745257275088548364400416034343698203119353593998251, + 21888242871839275222246405745257275088548364400416034343698203902000131096151, + 21888242871839275222246405745257275088548364400416034343698203678644442814584, + 21888242871839275222246405745257275088548364400416034343698203945990612251015, 649733619515222, 733807384731268, - 1912315353514662, + 21888242871839275222246405745257275088548364400416034343698203847091339805350, 159283023347058, - 1252543150009241, - 2171470445448022, + 21888242871839275222246405745257275088548364400416034343698203187319136299929, + 21888242871839275222246405745257275088548364400416034343698204106246431738710, 87926464990846, 6976535740557, 333158150203831, 773041867128637, - 1609627846364510, - 2172825401250829, - 2187219040754887, + 21888242871839275222246405745257275088548364400416034343698203544403832655198, + 21888242871839275222246405745257275088548364400416034343698204107601387541517, + 21888242871839275222246405745257275088548364400416034343698204121995027045575, 370690110731640, - 1167956422169233, - 2213460161173920, - 1422040411083174, + 21888242871839275222246405745257275088548364400416034343698203102732408459921, + 21888242871839275222246405745257275088548364400416034343698204148236147464608, + 21888242871839275222246405745257275088548364400416034343698203356816397373862, 881492907653317, - 1317092673852971, + 21888242871839275222246405745257275088548364400416034343698203251868660143659, 1055604673033562, 483541569912518, - 1760405587585076, + 21888242871839275222246405745257275088548364400416034343698203695181573875764, 838648779985076, - 1671091722191717, + 21888242871839275222246405745257275088548364400416034343698203605867708482405, 277553832221681, 943255152585992, 537980208821033, 1118468080665837, 871289580229780, - 1135012930773560, + 21888242871839275222246405745257275088548364400416034343698203069788917064248, 285850837392667, 684119054139708, 162216619130910, @@ -6806,214 +6806,214 @@ pub global CRP: [Polynomial; L] = [ 559639275666891, 1102603267288027, 574744103735760, - 2230136869536369, + 21888242871839275222246405745257275088548364400416034343698204164912855827057, 353525791231959, - 2146015235564474, + 21888242871839275222246405745257275088548364400416034343698204080791221855162, 544649731539315, 295910556562955, 443436765742251, - 2080783267294226, - 1994148300271022, - 2110171615264892, - 2220634578618434, + 21888242871839275222246405745257275088548364400416034343698204015559253584914, + 21888242871839275222246405745257275088548364400416034343698203928924286561710, + 21888242871839275222246405745257275088548364400416034343698204044947601555580, + 21888242871839275222246405745257275088548364400416034343698204155410564909122, 547870792692084, - 1231912591770578, - 1743249746219556, + 21888242871839275222246405745257275088548364400416034343698203166688578061266, + 21888242871839275222246405745257275088548364400416034343698203678025732510244, 315751432126332, - 1332135196147685, + 21888242871839275222246405745257275088548364400416034343698203266911182438373, 293103242100540, 951672816006846, - 1229133530008842, - 1301200716704783, - 1215677005748240, + 21888242871839275222246405745257275088548364400416034343698203163909516299530, + 21888242871839275222246405745257275088548364400416034343698203235976702995471, + 21888242871839275222246405745257275088548364400416034343698203150452992038928, 73050044153345, 767138636996291, 300940034977426, 554684708990042, 399848438968297, - 1808599629662912, - 1199939751681632, + 21888242871839275222246405745257275088548364400416034343698203743375615953600, + 21888242871839275222246405745257275088548364400416034343698203134715737972320, 910098402171679, 1091652700915858, 719935962566980, - 1412697099700193, - 1452651664343678, - 1823576920173218, + 21888242871839275222246405745257275088548364400416034343698203347473085990881, + 21888242871839275222246405745257275088548364400416034343698203387427650634366, + 21888242871839275222246405745257275088548364400416034343698203758352906463906, 620327428878648, - 1490081707870068, - 1882455492153835, + 21888242871839275222246405745257275088548364400416034343698203424857694160756, + 21888242871839275222246405745257275088548364400416034343698203817231478444523, 47257703992867, - 1746102913799138, + 21888242871839275222246405745257275088548364400416034343698203680878900089826, 342913267623566, 347762289191945, - 2048632416192598, + 21888242871839275222246405745257275088548364400416034343698203983408402483286, 980532729164612, - 2093633748757131, + 21888242871839275222246405745257275088548364400416034343698204028409735047819, 195315183601675, 471491008157944, - 1916170568802117, + 21888242871839275222246405745257275088548364400416034343698203850946555092805, 1063198845920033, 55612670674214, - 1825350924948673, - 1337806751781630, + 21888242871839275222246405745257275088548364400416034343698203760126911239361, + 21888242871839275222246405745257275088548364400416034343698203272582738072318, 193802818276085, - 1890832512341655, - 1853755881216249, - 2139887262428227, - 1554990764901431, - 1140427340934706, + 21888242871839275222246405745257275088548364400416034343698203825608498632343, + 21888242871839275222246405745257275088548364400416034343698203788531867506937, + 21888242871839275222246405745257275088548364400416034343698204074663248718915, + 21888242871839275222246405745257275088548364400416034343698203489766751192119, + 21888242871839275222246405745257275088548364400416034343698203075203327225394, 925159123592098, - 1529390450507342, + 21888242871839275222246405745257275088548364400416034343698203464166436798030, 580812219023366, 597654253836184, 127519475894566, - 2016610466582264, - 1812336717034251, + 21888242871839275222246405745257275088548364400416034343698203951386452872952, + 21888242871839275222246405745257275088548364400416034343698203747112703324939, 603864719838181, 57234211376708, - 1475954719980917, - 2163388739325258, + 21888242871839275222246405745257275088548364400416034343698203410730706271605, + 21888242871839275222246405745257275088548364400416034343698204098164725615946, 648056728796313, 290939902229166, 15463945824955, - 1268180466520976, - 1208962494682106, + 21888242871839275222246405745257275088548364400416034343698203202956452811664, + 21888242871839275222246405745257275088548364400416034343698203143738480972794, 567211411099685, - 2072259182457790, + 21888242871839275222246405745257275088548364400416034343698204007035168748478, 515029869454459, 1117339791915307, 563143430033705, - 2136867462729569, - 1652167408856211, - 1500511108605378, + 21888242871839275222246405745257275088548364400416034343698204071643449020257, + 21888242871839275222246405745257275088548364400416034343698203586943395146899, + 21888242871839275222246405745257275088548364400416034343698203435287094896066, 266469257813466, 642092936454362, - 1991550512762785, - 1582527536395010, - 1699232954371780, + 21888242871839275222246405745257275088548364400416034343698203926326499053473, + 21888242871839275222246405745257275088548364400416034343698203517303522685698, + 21888242871839275222246405745257275088548364400416034343698203634008940662468, 921476862213963, 7659097747201, - 1392361357935445, - 2104898026588971, - 1611640582899208, - 1405016391235296, + 21888242871839275222246405745257275088548364400416034343698203327137344226133, + 21888242871839275222246405745257275088548364400416034343698204039674012879659, + 21888242871839275222246405745257275088548364400416034343698203546416569189896, + 21888242871839275222246405745257275088548364400416034343698203339792377525984, 509889298279509, - 2208035674038789, - 2234233787319511, + 21888242871839275222246405745257275088548364400416034343698204142811660329477, + 21888242871839275222246405745257275088548364400416034343698204169009773610199, 793694037120096, - 1773534880279248, - 1706573126006024, - 1353534136381762, + 21888242871839275222246405745257275088548364400416034343698203708310866569936, + 21888242871839275222246405745257275088548364400416034343698203641349112296712, + 21888242871839275222246405745257275088548364400416034343698203288310122672450, 381590494041687, - 1373754707841973, + 21888242871839275222246405745257275088548364400416034343698203308530694132661, 399050336845872, 450768381415057, - 2106339733016364, - 1858947597408321, + 21888242871839275222246405745257275088548364400416034343698204041115719307052, + 21888242871839275222246405745257275088548364400416034343698203793723583699009, 653221052695145, - 1861953020675196, - 1260249109774336, - 1508299359252768, + 21888242871839275222246405745257275088548364400416034343698203796729006965884, + 21888242871839275222246405745257275088548364400416034343698203195025096065024, + 21888242871839275222246405745257275088548364400416034343698203443075345543456, 2071387445962, - 1352090326803457, + 21888242871839275222246405745257275088548364400416034343698203286866313094145, 757785222856772, 20279310215407, - 1571739705446653, + 21888242871839275222246405745257275088548364400416034343698203506515691737341, 575952068901831, - 1672743770327815, + 21888242871839275222246405745257275088548364400416034343698203607519756618503, 424396067541611, 612018196294125, - 1491974868814908, - 2158404434722306, - 1343230977428032, + 21888242871839275222246405745257275088548364400416034343698203426750855105596, + 21888242871839275222246405745257275088548364400416034343698204093180421012994, + 21888242871839275222246405745257275088548364400416034343698203278006963718720, 519952416602906, 77713637511676, - 1251631168549077, + 21888242871839275222246405745257275088548364400416034343698203186407154839765, 1060926661746614, 125261670629526, - 2169080785117318, + 21888242871839275222246405745257275088548364400416034343698204103856771408006, 246721952605137, 444920055037430, - 1494543288879328, + 21888242871839275222246405745257275088548364400416034343698203429319275170016, 652676110444949, 355488130917432, 869210572870823, 357818227227892, 300540029604029, - 1440569531057583, + 21888242871839275222246405745257275088548364400416034343698203375345517348271, 479094985836576, - 1643502391912610, + 21888242871839275222246405745257275088548364400416034343698203578278378203298, 542505986627519, - 1769945818414781, - 1148483752265389, + 21888242871839275222246405745257275088548364400416034343698203704721804705469, + 21888242871839275222246405745257275088548364400416034343698203083259738556077, 145767895397164, - 1210168470551769, - 2229796798021106, - 1412244453942689, + 21888242871839275222246405745257275088548364400416034343698203144944456842457, + 21888242871839275222246405745257275088548364400416034343698204164572784311794, + 21888242871839275222246405745257275088548364400416034343698203347020440233377, 995809747347020, 76314409530049, 492422947673186, 1094703357298795, - 2187759722465629, + 21888242871839275222246405745257275088548364400416034343698204122535708756317, 1024811974624353, 1041092266917116, 97825815858655, 1124211993461252, - 1146298058265458, - 1301915577178896, + 21888242871839275222246405745257275088548364400416034343698203081074044556146, + 21888242871839275222246405745257275088548364400416034343698203236691563469584, 602185418127395, 529321957315331, - 1483446598481361, + 21888242871839275222246405745257275088548364400416034343698203418222584772049, 378906508164951, 203921283010404, - 1612775446255348, - 1613815443895256, - 1172820803743836, - 1188146553485039, + 21888242871839275222246405745257275088548364400416034343698203547551432546036, + 21888242871839275222246405745257275088548364400416034343698203548591430185944, + 21888242871839275222246405745257275088548364400416034343698203107596790034524, + 21888242871839275222246405745257275088548364400416034343698203122922539775727, 95705561312368, - 2003624328453848, - 1556486713160127, + 21888242871839275222246405745257275088548364400416034343698203938400314744536, + 21888242871839275222246405745257275088548364400416034343698203491262699450815, 969879430920173, - 1813490252015121, - 1494539418463416, + 21888242871839275222246405745257275088548364400416034343698203748266238305809, + 21888242871839275222246405745257275088548364400416034343698203429315404754104, 20480142027597, - 1868498587002240, + 21888242871839275222246405745257275088548364400416034343698203803274573292928, 283306455705192, 541090135800530, 958111004201587, - 1687893673787304, + 21888242871839275222246405745257275088548364400416034343698203622669660077992, 774364518266062, 754660811831464, - 1590347275895027, - 2073367064073372, - 1853901400630864, - 2142730393450573, - 1775070030986579, - 1612619887897650, - 1166353467259407, + 21888242871839275222246405745257275088548364400416034343698203525123262185715, + 21888242871839275222246405745257275088548364400416034343698204008143050364060, + 21888242871839275222246405745257275088548364400416034343698203788677386921552, + 21888242871839275222246405745257275088548364400416034343698204077506379741261, + 21888242871839275222246405745257275088548364400416034343698203709846017277267, + 21888242871839275222246405745257275088548364400416034343698203547395874188338, + 21888242871839275222246405745257275088548364400416034343698203101129453550095, 953361515483948, 296457772392703, - 1321702201284790, - 1441652436637242, - 1438611849386771, - 1143094225499788, - 1887741249174433, + 21888242871839275222246405745257275088548364400416034343698203256478187575478, + 21888242871839275222246405745257275088548364400416034343698203376428422927930, + 21888242871839275222246405745257275088548364400416034343698203373387835677459, + 21888242871839275222246405745257275088548364400416034343698203077870211790476, + 21888242871839275222246405745257275088548364400416034343698203822517235465121, 576253870429198, - 1218320345624585, + 21888242871839275222246405745257275088548364400416034343698203153096331915273, 1050642816181032, - 1951209349594394, + 21888242871839275222246405745257275088548364400416034343698203885985335885082, 341956373389472, 412014528268912, 670157550968587, - 1862996529771802, + 21888242871839275222246405745257275088548364400416034343698203797772516062490, 969703769856407, - 1699481097464101, - 1358924566701510, + 21888242871839275222246405745257275088548364400416034343698203634257083754789, + 21888242871839275222246405745257275088548364400416034343698203293700552992198, 203411575306637, - 2056628187004419, - 1246597374715197, + 21888242871839275222246405745257275088548364400416034343698203991404173295107, + 21888242871839275222246405745257275088548364400416034343698203181373361005885, 233074273443513, - 1716080223610865, + 21888242871839275222246405745257275088548364400416034343698203650856209901553, 213674688316688, 515663382936586, 949247114441776, @@ -7021,106 +7021,106 @@ pub global CRP: [Polynomial; L] = [ 826290951996036, 358173203138117, 772632853411892, - 1297505600365311, + 21888242871839275222246405745257275088548364400416034343698203232281586655999, 525598970942278, - 1469280141969290, - 1141406218903727, - 1399731896405632, - 2177285411821432, + 21888242871839275222246405745257275088548364400416034343698203404056128259978, + 21888242871839275222246405745257275088548364400416034343698203076182205194415, + 21888242871839275222246405745257275088548364400416034343698203334507882696320, + 21888242871839275222246405745257275088548364400416034343698204112061398112120, 63286639329810, - 1431536192736570, - 1193892277365968, - 1791405627595197, - 1694463876456874, + 21888242871839275222246405745257275088548364400416034343698203366312179027258, + 21888242871839275222246405745257275088548364400416034343698203128668263656656, + 21888242871839275222246405745257275088548364400416034343698203726181613885885, + 21888242871839275222246405745257275088548364400416034343698203629239862747562, 898036679484964, 552897448127698, 496708817865070, 155408398419773, - 2245283504588441, - 1332716803885528, - 2243506059653537, - 1377548262655877, - 1542428473164048, + 21888242871839275222246405745257275088548364400416034343698204180059490879129, + 21888242871839275222246405745257275088548364400416034343698203267492790176216, + 21888242871839275222246405745257275088548364400416034343698204178282045944225, + 21888242871839275222246405745257275088548364400416034343698203312324248946565, + 21888242871839275222246405745257275088548364400416034343698203477204459454736, 225343899583009, - 1589324153581192, - 1996772342211306, - 1721658946043742, + 21888242871839275222246405745257275088548364400416034343698203524100139871880, + 21888242871839275222246405745257275088548364400416034343698203931548328501994, + 21888242871839275222246405745257275088548364400416034343698203656434932334430, 763509765007221, - 1228766770591867, + 21888242871839275222246405745257275088548364400416034343698203163542756882555, 1018131476372041, 758541093917191, 69252163648537, - 2102047040975772, + 21888242871839275222246405745257275088548364400416034343698204036823027266460, 1042890221609625, 376837060289004, 1096803697750096, 88299074560151, 878632914698229, - 1185032272019147, + 21888242871839275222246405745257275088548364400416034343698203119808258309835, 978105931227896, - 1290374257787173, + 21888242871839275222246405745257275088548364400416034343698203225150244077861, 514774756341849, 886786572847659, - 2000806131303848, + 21888242871839275222246405745257275088548364400416034343698203935582117594536, 756598472447090, - 1341616412263945, - 1901535869179320, + 21888242871839275222246405745257275088548364400416034343698203276392398554633, + 21888242871839275222246405745257275088548364400416034343698203836311855470008, 448845292629643, - 2213394677334884, + 21888242871839275222246405745257275088548364400416034343698204148170663625572, 531793987002111, - 1976522809612474, + 21888242871839275222246405745257275088548364400416034343698203911298795903162, 590788621276107, 999069111347732, - 1526091908868777, - 1561229017535156, + 21888242871839275222246405745257275088548364400416034343698203460867895159465, + 21888242871839275222246405745257275088548364400416034343698203496005003825844, 871640989287714, - 2144566051064478, - 1315259131643158, - 1729402480277169, + 21888242871839275222246405745257275088548364400416034343698204079342037355166, + 21888242871839275222246405745257275088548364400416034343698203250035117933846, + 21888242871839275222246405745257275088548364400416034343698203664178466567857, 864184498841540, - 1490599251562942, + 21888242871839275222246405745257275088548364400416034343698203425375237853630, 893837349630575, 667155321776491, 242925630061426, - 1572278790785556, - 1334678522291019, - 1882963324692216, + 21888242871839275222246405745257275088548364400416034343698203507054777076244, + 21888242871839275222246405745257275088548364400416034343698203269454508581707, + 21888242871839275222246405745257275088548364400416034343698203817739310982904, 847670738782362, 41535874080222, - 2137212203104470, - 1406558245002594, + 21888242871839275222246405745257275088548364400416034343698204071988189395158, + 21888242871839275222246405745257275088548364400416034343698203341334231293282, 1031704542074704, - 1511393001045650, - 1779762963222881, + 21888242871839275222246405745257275088548364400416034343698203446168987336338, + 21888242871839275222246405745257275088548364400416034343698203714538949513569, 477558759907367, - 1478159837163862, - 1631402972430218, + 21888242871839275222246405745257275088548364400416034343698203412935823454550, + 21888242871839275222246405745257275088548364400416034343698203566178958720906, 1073598858438992, - 1564295591805528, - 1821816574260459, - 1933298469659743, + 21888242871839275222246405745257275088548364400416034343698203499071578096216, + 21888242871839275222246405745257275088548364400416034343698203756592560551147, + 21888242871839275222246405745257275088548364400416034343698203868074455950431, 428633914258403, - 1884045417001923, + 21888242871839275222246405745257275088548364400416034343698203818821403292611, 1018956794760615, - 1724524503471581, + 21888242871839275222246405745257275088548364400416034343698203659300489762269, 704973034599228, 27745313686720, - 1693149501389958, + 21888242871839275222246405745257275088548364400416034343698203627925487680646, 757011186436810, 244958474272071, - 1401016525715103, - 1911051204022127, + 21888242871839275222246405745257275088548364400416034343698203335792512005791, + 21888242871839275222246405745257275088548364400416034343698203845827190312815, 483164640828965, 1097400479848254, 1042124117989036, - 2091386373445330, + 21888242871839275222246405745257275088548364400416034343698204026162359736018, 953200199407918, 1099223298865752, - 1437574669744352, + 21888242871839275222246405745257275088548364400416034343698203372350656035040, 640413928402934, 340578090929527, - 1358233449919571, - 1859339324781858, + 21888242871839275222246405745257275088548364400416034343698203293009436210259, + 21888242871839275222246405745257275088548364400416034343698203794115311072546, 169877347149848, 812589624232732, 1030130245003922, @@ -7131,404 +7131,404 @@ pub global CRP: [Polynomial; L] = [ 615813949678219, 527240649253528, 279770004133403, - 1476996551399392, + 21888242871839275222246405745257275088548364400416034343698203411772537690080, 406179584352720, 690722740803, - 1835409053332789, - 1536091821825053, + 21888242871839275222246405745257275088548364400416034343698203770185039623477, + 21888242871839275222246405745257275088548364400416034343698203470867808115741, 544406877017620, - 1401018656055534, - 1459306633615405, - 1169699162463102, - 1570963581408067, + 21888242871839275222246405745257275088548364400416034343698203335794642346222, + 21888242871839275222246405745257275088548364400416034343698203394082619906093, + 21888242871839275222246405745257275088548364400416034343698203104475148753790, + 21888242871839275222246405745257275088548364400416034343698203505739567698755, 136256274651976, - 1990978128847446, + 21888242871839275222246405745257275088548364400416034343698203925754115138134, 511035779466040, 788997104002606, - 2180261225576883, - 1656055454096534, + 21888242871839275222246405745257275088548364400416034343698204115037211867571, + 21888242871839275222246405745257275088548364400416034343698203590831440387222, 567384016807215, 579886933344830, - 1944522231157917, - 1405247119758384, - 1692817260570604, + 21888242871839275222246405745257275088548364400416034343698203879298217448605, + 21888242871839275222246405745257275088548364400416034343698203340023106049072, + 21888242871839275222246405745257275088548364400416034343698203627593246861292, 891069046564447, - 2228217697424762, - 1259844443081181, - 1584924682904197, + 21888242871839275222246405745257275088548364400416034343698204162993683715450, + 21888242871839275222246405745257275088548364400416034343698203194620429371869, + 21888242871839275222246405745257275088548364400416034343698203519700669194885, 718330960438869, 532232508022728, - 1896329721191844, - 1145000391521745, - 1718843298162884, - 1776510752838204, - 1504020931861973, + 21888242871839275222246405745257275088548364400416034343698203831105707482532, + 21888242871839275222246405745257275088548364400416034343698203079776377812433, + 21888242871839275222246405745257275088548364400416034343698203653619284453572, + 21888242871839275222246405745257275088548364400416034343698203711286739128892, + 21888242871839275222246405745257275088548364400416034343698203438796918152661, 539614253513139, - 1248001302240929, + 21888242871839275222246405745257275088548364400416034343698203182777288531617, 199134836310835, 886844911261870, - 1589498034440683, + 21888242871839275222246405745257275088548364400416034343698203524274020731371, 128246733708956, 919306312161925, - 1650997785622418, + 21888242871839275222246405745257275088548364400416034343698203585773771913106, 1081884990578805, 90435284118999, 201997186842898, - 2190927155501591, + 21888242871839275222246405745257275088548364400416034343698204125703141792279, 328179842958043, - 1628490893922114, - 1730920762288071, - 1384946881328815, + 21888242871839275222246405745257275088548364400416034343698203563266880212802, + 21888242871839275222246405745257275088548364400416034343698203665696748578759, + 21888242871839275222246405745257275088548364400416034343698203319722867619503, 1051340828149556, 1037576264976049, - 1137288421012826, - 1814189168975069, - 1759203234016454, + 21888242871839275222246405745257275088548364400416034343698203072064407303514, + 21888242871839275222246405745257275088548364400416034343698203748965155265757, + 21888242871839275222246405745257275088548364400416034343698203693979220307142, 863654662806363, - 1147534179279804, - 1887068086501184, + 21888242871839275222246405745257275088548364400416034343698203082310165570492, + 21888242871839275222246405745257275088548364400416034343698203821844072791872, 566822892010032, 208968777591091, 1030677463028954, - 1349510016137474, - 1839189497551297, + 21888242871839275222246405745257275088548364400416034343698203284286002428162, + 21888242871839275222246405745257275088548364400416034343698203773965483841985, 841694847303387, - 2250377055603691, - 1806937076235085, - 1868004133774155, + 21888242871839275222246405745257275088548364400416034343698204185153041894379, + 21888242871839275222246405745257275088548364400416034343698203741713062525773, + 21888242871839275222246405745257275088548364400416034343698203802780120064843, 338514057318808, 175406982384412, - 2161647576309825, + 21888242871839275222246405745257275088548364400416034343698204096423562600513, 124197358745410, - 2040361284468591, + 21888242871839275222246405745257275088548364400416034343698203975137270759279, 633000769356823, 122575042855356, - 1977228407719200, + 21888242871839275222246405745257275088548364400416034343698203912004394009888, 63611262144072, 437683567381558, 296012381201979, - 1863133065698240, + 21888242871839275222246405745257275088548364400416034343698203797909051988928, 712095007483032, - 1563654041987778, - 2173341602921581, - 1591016004395790, - 1859980353962605, - 1340166812660733, + 21888242871839275222246405745257275088548364400416034343698203498430028278466, + 21888242871839275222246405745257275088548364400416034343698204108117589212269, + 21888242871839275222246405745257275088548364400416034343698203525791990686478, + 21888242871839275222246405745257275088548364400416034343698203794756340253293, + 21888242871839275222246405745257275088548364400416034343698203274942798951421, 104288108116544, - 1768763745453532, - 1883451928146579, + 21888242871839275222246405745257275088548364400416034343698203703539731744220, + 21888242871839275222246405745257275088548364400416034343698203818227914437267, 953323703453781, - 1638876326252478, + 21888242871839275222246405745257275088548364400416034343698203573652312543166, 922876775064808, 1039469870943160, 261202450205414, - 1832723102680972, + 21888242871839275222246405745257275088548364400416034343698203767499088971660, 631393743024533, 178114362107991, 214256867029074, - 1159286759633111, + 21888242871839275222246405745257275088548364400416034343698203094062745923799, 336044176342469, - 1876856714349077, - 2193099955083501, - 1317254874240790, - 1153399365108388, - 1182614751694119, - 2094795129723113, + 21888242871839275222246405745257275088548364400416034343698203811632700639765, + 21888242871839275222246405745257275088548364400416034343698204127875941374189, + 21888242871839275222246405745257275088548364400416034343698203252030860531478, + 21888242871839275222246405745257275088548364400416034343698203088175351399076, + 21888242871839275222246405745257275088548364400416034343698203117390737984807, + 21888242871839275222246405745257275088548364400416034343698204029571116013801, 816799598084931, 843953515113904, 115818243422110, 702426625809939, - 1199131026642324, + 21888242871839275222246405745257275088548364400416034343698203133907012933012, 664362036309642, 384588495491617, - 1412640796784986, + 21888242871839275222246405745257275088548364400416034343698203347416783075674, 982679795341731, 694171779795128, - 1916682601450534, + 21888242871839275222246405745257275088548364400416034343698203851458587741222, 648892518492774, - 2027039462134975, - 1475976427431723, + 21888242871839275222246405745257275088548364400416034343698203961815448425663, + 21888242871839275222246405745257275088548364400416034343698203410752413722411, 1075382736952400, - 1386140639991431, - 1644209975710903, + 21888242871839275222246405745257275088548364400416034343698203320916626282119, + 21888242871839275222246405745257275088548364400416034343698203578985962001591, 577597451191174, 858389121982390, 645011587124824, 1059407442927141, 604977905207379, - 1149874207069035, - 1425221641176383, - 2239657275159364, - 2185632106319294, + 21888242871839275222246405745257275088548364400416034343698203084650193359723, + 21888242871839275222246405745257275088548364400416034343698203359997627467071, + 21888242871839275222246405745257275088548364400416034343698204174433261450052, + 21888242871839275222246405745257275088548364400416034343698204120408092609982, 449319914888494, - 1180157722956748, + 21888242871839275222246405745257275088548364400416034343698203114933709247436, 1063932831336860, 1002682319963052, 313558495685019, 313895258002814, - 1375397163041952, + 21888242871839275222246405745257275088548364400416034343698203310173149332640, 149778833286397, 92931652964790, 854813692786135, 147129794158378, - 2172825313889905, + 21888242871839275222246405745257275088548364400416034343698204107601300180593, 736665953066125, - 1610919202284437, + 21888242871839275222246405745257275088548364400416034343698203545695188575125, 241710460846987, 267707864184975, - 1687774237279700, + 21888242871839275222246405745257275088548364400416034343698203622550223570388, 704859873116877, 155437072493669, 1061296365927254, 187201961655352, - 1726629297621278, + 21888242871839275222246405745257275088548364400416034343698203661405283911966, 1016467933310001, - 1983839298884762, + 21888242871839275222246405745257275088548364400416034343698203918615285175450, 251341617004392, - 1915593269730859, + 21888242871839275222246405745257275088548364400416034343698203850369256021547, 1097403450863598, 301439991241350, - 1941050322386574, + 21888242871839275222246405745257275088548364400416034343698203875826308677262, 775866081363392, - 1175285184198408, - 2001779827151541, - 1883626043249563, + 21888242871839275222246405745257275088548364400416034343698203110061170489096, + 21888242871839275222246405745257275088548364400416034343698203936555813442229, + 21888242871839275222246405745257275088548364400416034343698203818402029540251, 683732198590601, 1097785601759184, - 2080884766363029, - 1977461066629484, - 2117633575216775, - 1602414936805863, + 21888242871839275222246405745257275088548364400416034343698204015660752653717, + 21888242871839275222246405745257275088548364400416034343698203912237052920172, + 21888242871839275222246405745257275088548364400416034343698204052409561507463, + 21888242871839275222246405745257275088548364400416034343698203537190923096551, 1099784104234516, - 2198947490068354, - 2094503599315979, + 21888242871839275222246405745257275088548364400416034343698204133723476359042, + 21888242871839275222246405745257275088548364400416034343698204029279585606667, 865784124495068, - 1639611630810994, + 21888242871839275222246405745257275088548364400416034343698203574387617101682, 864180365759953, 513950310519751, - 2222737702951276, - 1664362526728699, + 21888242871839275222246405745257275088548364400416034343698204157513689241964, + 21888242871839275222246405745257275088548364400416034343698203599138513019387, 965151425729239, 1043163788527905, 617329863650894, - 1427795730148617, - 2053438283646042, + 21888242871839275222246405745257275088548364400416034343698203362571716439305, + 21888242871839275222246405745257275088548364400416034343698203988214269936730, 831888540626390, 252023454778423, - 1141064170627656, - 1403196053035604, - 1846678216548398, - 1946312564501686, - 1979469346538315, - 1661550034308298, + 21888242871839275222246405745257275088548364400416034343698203075840156918344, + 21888242871839275222246405745257275088548364400416034343698203337972039326292, + 21888242871839275222246405745257275088548364400416034343698203781454202839086, + 21888242871839275222246405745257275088548364400416034343698203881088550792374, + 21888242871839275222246405745257275088548364400416034343698203914245332829003, + 21888242871839275222246405745257275088548364400416034343698203596326020598986, 714715874443270, - 1879135477889768, - 1406323270628236, + 21888242871839275222246405745257275088548364400416034343698203813911464180456, + 21888242871839275222246405745257275088548364400416034343698203341099256918924, 620867018084333, - 1415761780552022, - 1343821051931516, - 1408213204891193, - 2055736758457821, + 21888242871839275222246405745257275088548364400416034343698203350537766842710, + 21888242871839275222246405745257275088548364400416034343698203278597038222204, + 21888242871839275222246405745257275088548364400416034343698203342989191181881, + 21888242871839275222246405745257275088548364400416034343698203990512744748509, 955770728011115, 490461849390518, 1043404858468971, - 1528211059634510, + 21888242871839275222246405745257275088548364400416034343698203462987045925198, 580248958898081, 669830219618888, 998430864074803, 895436566748170, - 2103815875627745, - 1329987775105481, + 21888242871839275222246405745257275088548364400416034343698204038591861918433, + 21888242871839275222246405745257275088548364400416034343698203264763761396169, 505408903293554, - 1975838869595880, + 21888242871839275222246405745257275088548364400416034343698203910614855886568, 1025290692734556, - 1351379387694553, + 21888242871839275222246405745257275088548364400416034343698203286155373985241, 999512206546785, 260304977663013, 783971889821546, 638363055764478, - 2046755205323711, - 1971934839236824, - 2003194398627025, - 1584122045777170, + 21888242871839275222246405745257275088548364400416034343698203981531191614399, + 21888242871839275222246405745257275088548364400416034343698203906710825527512, + 21888242871839275222246405745257275088548364400416034343698203937970384917713, + 21888242871839275222246405745257275088548364400416034343698203518898032067858, 115298992418733, - 1647544816216277, + 21888242871839275222246405745257275088548364400416034343698203582320802506965, 54145846286399, 302396189070623, - 1322383735006549, + 21888242871839275222246405745257275088548364400416034343698203257159721297237, 504615599172520, - 1793257265559946, - 2000174572704233, - 1205489494434454, - 1926679835839332, + 21888242871839275222246405745257275088548364400416034343698203728033251850634, + 21888242871839275222246405745257275088548364400416034343698203934950558994921, + 21888242871839275222246405745257275088548364400416034343698203140265480725142, + 21888242871839275222246405745257275088548364400416034343698203861455822130020, 1015875717965101, - 1666347023021824, - 1673202066217178, - 1840981345327946, - 2062970047223561, + 21888242871839275222246405745257275088548364400416034343698203601123009312512, + 21888242871839275222246405745257275088548364400416034343698203607978052507866, + 21888242871839275222246405745257275088548364400416034343698203775757331618634, + 21888242871839275222246405745257275088548364400416034343698203997746033514249, 8069075237202, - 2176650396988580, + 21888242871839275222246405745257275088548364400416034343698204111426383279268, 462651676637400, - 1462667068976760, - 1293515701481593, + 21888242871839275222246405745257275088548364400416034343698203397443055267448, + 21888242871839275222246405745257275088548364400416034343698203228291687772281, 217935585381642, 228823493301712, - 1809932245544539, - 1740538823541980, - 2241815571406021, + 21888242871839275222246405745257275088548364400416034343698203744708231835227, + 21888242871839275222246405745257275088548364400416034343698203675314809832668, + 21888242871839275222246405745257275088548364400416034343698204176591557696709, 623339357129552, - 1659375268058604, + 21888242871839275222246405745257275088548364400416034343698203594151254349292, 69688996372979, - 1331334615568553, - 1601678255612207, + 21888242871839275222246405745257275088548364400416034343698203266110601859241, + 21888242871839275222246405745257275088548364400416034343698203536454241902895, 859939715267546, 190385045394789, 26337541705638, - 2151346327682427, + 21888242871839275222246405745257275088548364400416034343698204086122313973115, 922126455401937, - 1713484560609038, - 2207190076330558, - 1620684600897126, + 21888242871839275222246405745257275088548364400416034343698203648260546899726, + 21888242871839275222246405745257275088548364400416034343698204141966062621246, + 21888242871839275222246405745257275088548364400416034343698203555460587187814, 575557395313465, 789063040213040, - 1998512018861214, - 1452973494431149, + 21888242871839275222246405745257275088548364400416034343698203933288005151902, + 21888242871839275222246405745257275088548364400416034343698203387749480721837, 913505510551188, 123635618749345, - 1323870218305809, + 21888242871839275222246405745257275088548364400416034343698203258646204596497, 904541411044308, 521185216497100, - 1861020652502933, - 2114482843512478, - 1595845536684917, + 21888242871839275222246405745257275088548364400416034343698203795796638793621, + 21888242871839275222246405745257275088548364400416034343698204049258829803166, + 21888242871839275222246405745257275088548364400416034343698203530621522975605, 168092803955557, 588078071142320, - 1259580523833514, - 1681574811324363, - 2105612219373865, - 1900415905254493, + 21888242871839275222246405745257275088548364400416034343698203194356510124202, + 21888242871839275222246405745257275088548364400416034343698203616350797615051, + 21888242871839275222246405745257275088548364400416034343698204040388205664553, + 21888242871839275222246405745257275088548364400416034343698203835191891545181, 1071899388772955, - 1666560323570572, + 21888242871839275222246405745257275088548364400416034343698203601336309861260, 414025892600644, 334323716172256, 1055859912773872, 249513136159729, 772561240258928, - 1867177546540323, - 1237180242770329, - 1664248537608379, - 1908861687861722, - 1950420851528829, - 1694573673737078, - 1604025862250389, + 21888242871839275222246405745257275088548364400416034343698203801953532831011, + 21888242871839275222246405745257275088548364400416034343698203171956229061017, + 21888242871839275222246405745257275088548364400416034343698203599024523899067, + 21888242871839275222246405745257275088548364400416034343698203843637674152410, + 21888242871839275222246405745257275088548364400416034343698203885196837819517, + 21888242871839275222246405745257275088548364400416034343698203629349660027766, + 21888242871839275222246405745257275088548364400416034343698203538801848541077, 858565755703193, - 1469219428140051, - 1876673665430627, + 21888242871839275222246405745257275088548364400416034343698203403995414430739, + 21888242871839275222246405745257275088548364400416034343698203811449651721315, 825067895237454, 1050684967503440, 1025816783438689, 166625159472448, - 2165620748463322, - 2248686419580745, - 1249537831446292, - 2225246296144990, - 2126027115704332, + 21888242871839275222246405745257275088548364400416034343698204100396734754010, + 21888242871839275222246405745257275088548364400416034343698204183462405871433, + 21888242871839275222246405745257275088548364400416034343698203184313817736980, + 21888242871839275222246405745257275088548364400416034343698204160022282435678, + 21888242871839275222246405745257275088548364400416034343698204060803101995020, 68901687194416, 769757921637373, 550244421748899, 632353031868905, 61446779975807, 450516606142305, - 1212071372511944, - 1264526707789056, - 2010220274652701, - 1795539823544184, + 21888242871839275222246405745257275088548364400416034343698203146847358802632, + 21888242871839275222246405745257275088548364400416034343698203199302694079744, + 21888242871839275222246405745257275088548364400416034343698203944996260943389, + 21888242871839275222246405745257275088548364400416034343698203730315809834872, 1038823356678359, 1103400141390488, 47291775158451, 841223041485649, 781548059167708, 22439289918172, - 1644512137170382, - 1390430224834960, - 1825658843319458, + 21888242871839275222246405745257275088548364400416034343698203579288123461070, + 21888242871839275222246405745257275088548364400416034343698203325206211125648, + 21888242871839275222246405745257275088548364400416034343698203760434829610146, 647919420446563, 468375387324790, 462256967669103, - 1620593201863095, + 21888242871839275222246405745257275088548364400416034343698203555369188153783, 1054871455467801, - 1285131212755873, + 21888242871839275222246405745257275088548364400416034343698203219907199046561, 535685428992842, 971192350067485, - 1244344692472693, + 21888242871839275222246405745257275088548364400416034343698203179120678763381, 11271353152911, - 1496566185250965, - 1856725464093487, + 21888242871839275222246405745257275088548364400416034343698203431342171541653, + 21888242871839275222246405745257275088548364400416034343698203791501450384175, 399209233042493, 768160666895152, 47031091997740, 708193903241781, 77114676086049, - 1327235631925349, - 1235468680457900, + 21888242871839275222246405745257275088548364400416034343698203262011618216037, + 21888242871839275222246405745257275088548364400416034343698203170244666748588, 789108599814362, 703989418864523, 231373480498361, 811615851358609, 982569991844788, - 1550905825383108, + 21888242871839275222246405745257275088548364400416034343698203485681811673796, 561603217339735, - 1709159716808635, + 21888242871839275222246405745257275088548364400416034343698203643935703099323, 489358773784111, - 2122865685435245, - 1263311149633060, + 21888242871839275222246405745257275088548364400416034343698204057641671725933, + 21888242871839275222246405745257275088548364400416034343698203198087135923748, 373367872128460, - 1131087147831025, - 1762873816804635, - 2229844361031764, - 1838322170890473, - 1475288991856012, + 21888242871839275222246405745257275088548364400416034343698203065863134121713, + 21888242871839275222246405745257275088548364400416034343698203697649803095323, + 21888242871839275222246405745257275088548364400416034343698204164620347322452, + 21888242871839275222246405745257275088548364400416034343698203773098157181161, + 21888242871839275222246405745257275088548364400416034343698203410064978146700, 649584864416490, 53808516268224, 1072504598164053, 516138547598844, 609470605934864, 868801811331692, - 2088154804656697, - 1695439288727515, + 21888242871839275222246405745257275088548364400416034343698204022930790947385, + 21888242871839275222246405745257275088548364400416034343698203630215275018203, 699124097144637, 320068186352194, 569150118823905, - 1787253636423983, - 1810863504259989, - 1714500799312445, - 2197933662474132, + 21888242871839275222246405745257275088548364400416034343698203722029622714671, + 21888242871839275222246405745257275088548364400416034343698203745639490550677, + 21888242871839275222246405745257275088548364400416034343698203649276785603133, + 21888242871839275222246405745257275088548364400416034343698204132709648764820, 155435340387532, 243016399840041, - 1992913345264568, - 1461114695779089, - 1504045305644893, - 1544706849577353, + 21888242871839275222246405745257275088548364400416034343698203927689331555256, + 21888242871839275222246405745257275088548364400416034343698203395890682069777, + 21888242871839275222246405745257275088548364400416034343698203438821291935581, + 21888242871839275222246405745257275088548364400416034343698203479482835868041, 779152286024444, 889012019779128, - 2054652042046263, - 1158155528881987, + 21888242871839275222246405745257275088548364400416034343698203989428028336951, + 21888242871839275222246405745257275088548364400416034343698203092931515172675, 213467371618280, 2156410871034, 336530240437204, - 1536886803379294, + 21888242871839275222246405745257275088548364400416034343698203471662789669982, 41551651468672, 6101032445240, 1052460170099237, - 1813186919900706, - 1274722306804443, - 1242375361679893, - 1964493477013244, + 21888242871839275222246405745257275088548364400416034343698203747962906191394, + 21888242871839275222246405745257275088548364400416034343698203209498293095131, + 21888242871839275222246405745257275088548364400416034343698203177151347970581, + 21888242871839275222246405745257275088548364400416034343698203899269463303932, 612205584172004, 264731725360, 595222403226907, 467271325644822, - 1835388627476092, + 21888242871839275222246405745257275088548364400416034343698203770164613766780, 973962619252745, 706953975074263, 592478747153158, @@ -7537,29 +7537,29 @@ pub global CRP: [Polynomial; L] = [ 952459613314684, 1081993623408285, 343425550893119, - 2196695620176418, + 21888242871839275222246405745257275088548364400416034343698204131471606467106, 272541113702959, 773565672847206, 809739873007276, - 1705717249797569, - 1831433177044746, + 21888242871839275222246405745257275088548364400416034343698203640493236088257, + 21888242871839275222246405745257275088548364400416034343698203766209163335434, 1118275920702723, 312920388385996, - 1189341770620314, + 21888242871839275222246405745257275088548364400416034343698203124117756911002, 736806407497327, 826364621341849, - 1608380552458608, + 21888242871839275222246405745257275088548364400416034343698203543156538749296, 46568979763936, - 1740119994781252, - 1387798314751131, + 21888242871839275222246405745257275088548364400416034343698203674895981071940, + 21888242871839275222246405745257275088548364400416034343698203322574301041819, 1048186508286752, - 1651594900696582, - 1373845035558950, + 21888242871839275222246405745257275088548364400416034343698203586370886987270, + 21888242871839275222246405745257275088548364400416034343698203308621021849638, 606512565667745, - 1543720248279939, - 1155153903676507, - 2068075524865483, - 1267882797686567, + 21888242871839275222246405745257275088548364400416034343698203478496234570627, + 21888242871839275222246405745257275088548364400416034343698203089929889967195, + 21888242871839275222246405745257275088548364400416034343698204002851511156171, + 21888242871839275222246405745257275088548364400416034343698203202658783977255, 858958134086373, 100468216334874, 57371303006978, @@ -7570,576 +7570,576 @@ pub global CRP: [Polynomial; L] = [ 417990988516079, 736385915800809, 1021705799263112, - 1233704343939643, - 1644634747631112, - 1800273542710721, + 21888242871839275222246405745257275088548364400416034343698203168480330230331, + 21888242871839275222246405745257275088548364400416034343698203579410733921800, + 21888242871839275222246405745257275088548364400416034343698203735049529001409, 595551846650345, 1090783412315015, 132261620607179, - 1669534490133779, - 1482963201943375, + 21888242871839275222246405745257275088548364400416034343698203604310476424467, + 21888242871839275222246405745257275088548364400416034343698203417739188234063, 459938024414975, - 2185027328856786, + 21888242871839275222246405745257275088548364400416034343698204119803315147474, 117310409449128, 514444901957838, 44259298200148, - 1530972395389069, + 21888242871839275222246405745257275088548364400416034343698203465748381679757, 297113821563275, - 1443136443231954, - 1191107273684459, - 1221501419072208, + 21888242871839275222246405745257275088548364400416034343698203377912429522642, + 21888242871839275222246405745257275088548364400416034343698203125883259975147, + 21888242871839275222246405745257275088548364400416034343698203156277405362896, 398650716562266, - 2034268556637599, + 21888242871839275222246405745257275088548364400416034343698203969044542928287, 148012368438740, - 1494343838975793, - 2102715600189566, - 1186157391068792, - 1354924358323562, - 1666204848544149, + 21888242871839275222246405745257275088548364400416034343698203429119825266481, + 21888242871839275222246405745257275088548364400416034343698204037491586480254, + 21888242871839275222246405745257275088548364400416034343698203120933377359480, + 21888242871839275222246405745257275088548364400416034343698203289700344614250, + 21888242871839275222246405745257275088548364400416034343698203600980834834837, 167975360605387, 297651652081886, 80795328327695, 155690429441380, - 2174401168531230, - 1333660929756136, + 21888242871839275222246405745257275088548364400416034343698204109177154821918, + 21888242871839275222246405745257275088548364400416034343698203268436916046824, 216559153803772, - 2220939115645848, - 1794935626654641, + 21888242871839275222246405745257275088548364400416034343698204155715101936536, + 21888242871839275222246405745257275088548364400416034343698203729711612945329, 189662083563871, - 2054025761949181, - 1846451251560744, + 21888242871839275222246405745257275088548364400416034343698203988801748239869, + 21888242871839275222246405745257275088548364400416034343698203781227237851432, 208881068492385, - 1546710661134309, - 1889296642990369, + 21888242871839275222246405745257275088548364400416034343698203481486647424997, + 21888242871839275222246405745257275088548364400416034343698203824072629281057, 957158422089474, - 2118764265789262, + 21888242871839275222246405745257275088548364400416034343698204053540252079950, 67460191562646, 1081655409776800, 67420795139887, 759895026109113, - 1950257825182038, + 21888242871839275222246405745257275088548364400416034343698203885033811472726, 269804010075373, 816662657730804, 881279095598429, 1016690828043461, - 1661285058168427, + 21888242871839275222246405745257275088548364400416034343698203596061044459115, 209785010163064, - 1220411993429388, + 21888242871839275222246405745257275088548364400416034343698203155187979720076, 996062336115163, - 1678691190406031, + 21888242871839275222246405745257275088548364400416034343698203613467176696719, 736412329633035, - 1206338607740841, - 1640896601613082, - 1537566976845099, - 2172645229340334, + 21888242871839275222246405745257275088548364400416034343698203141114594031529, + 21888242871839275222246405745257275088548364400416034343698203575672587903770, + 21888242871839275222246405745257275088548364400416034343698203472342963135787, + 21888242871839275222246405745257275088548364400416034343698204107421215631022, 428490076272604, 322284112749087, - 1484871474729169, - 1404362653060713, + 21888242871839275222246405745257275088548364400416034343698203419647461019857, + 21888242871839275222246405745257275088548364400416034343698203339138639351401, 63891444964546, 392197236220219, 295664371174790, - 1357934579195511, + 21888242871839275222246405745257275088548364400416034343698203292710565486199, 1059091943013019, 854591713944881, 766787925928206, - 1884176298524890, - 2030194433530297, + 21888242871839275222246405745257275088548364400416034343698203818952284815578, + 21888242871839275222246405745257275088548364400416034343698203964970419820985, 158172732474007, 472248656485154, 742625474459518, - 1795551391827107, + 21888242871839275222246405745257275088548364400416034343698203730327378117795, 772133186318310, 225948028723619, - 1298109275165715, + 21888242871839275222246405745257275088548364400416034343698203232885261456403, 1079295326430890, 30353040417115, - 1724880372504602, + 21888242871839275222246405745257275088548364400416034343698203659656358795290, 1089681892305507, - 1552541479103404, - 1563430587516754, - 2242529294545094, + 21888242871839275222246405745257275088548364400416034343698203487317465394092, + 21888242871839275222246405745257275088548364400416034343698203498206573807442, + 21888242871839275222246405745257275088548364400416034343698204177305280835782, 499957330801388, - 1454349673053252, - 1907351187154056, + 21888242871839275222246405745257275088548364400416034343698203389125659343940, + 21888242871839275222246405745257275088548364400416034343698203842127173444744, 984957532187462, - 1658972896752184, - 1640885013849655, - 1847210350052446, + 21888242871839275222246405745257275088548364400416034343698203593748883042872, + 21888242871839275222246405745257275088548364400416034343698203575661000140343, + 21888242871839275222246405745257275088548364400416034343698203781986336343134, 1110062838734955, - 1978588157152846, + 21888242871839275222246405745257275088548364400416034343698203913364143443534, 962035763897520, - 1885979751385407, + 21888242871839275222246405745257275088548364400416034343698203820755737676095, 471126121147193, - 1609908843085850, + 21888242871839275222246405745257275088548364400416034343698203544684829376538, 694815661820354, 979735707723059, 772895097459730, - 2236650131157554, + 21888242871839275222246405745257275088548364400416034343698204171426117448242, 42083659183006, 662250870688701, 1050214311335952, - 2025595229024164, + 21888242871839275222246405745257275088548364400416034343698203960371215314852, 74578641182670, - 1237011406367288, + 21888242871839275222246405745257275088548364400416034343698203171787392657976, 543880121469974, - 1660322063227604, + 21888242871839275222246405745257275088548364400416034343698203595098049518292, 819163589557681, - 1344586493719659, - 2091191764628847, - 1448798137493691, + 21888242871839275222246405745257275088548364400416034343698203279362480010347, + 21888242871839275222246405745257275088548364400416034343698204025967750919535, + 21888242871839275222246405745257275088548364400416034343698203383574123784379, 596721605768830, 46975778334198, 328160101956475, 358803858452663, - 1251838310890030, + 21888242871839275222246405745257275088548364400416034343698203186614297180718, 296726470669133, 304462498854671, 100821731709827, 772684826972493, - 1277066799296989, - 1160756263538035, - 1920036957236641, - 1302436709575634, - 1567829178643313, - 2048839457821441, - 2152123632814231, - 1285579864532206, - 1250542395360583, - 1297661738986650, - 2178002073274929, - 1532935248039786, - 1194530102222725, + 21888242871839275222246405745257275088548364400416034343698203211842785587677, + 21888242871839275222246405745257275088548364400416034343698203095532249828723, + 21888242871839275222246405745257275088548364400416034343698203854812943527329, + 21888242871839275222246405745257275088548364400416034343698203237212695866322, + 21888242871839275222246405745257275088548364400416034343698203502605164934001, + 21888242871839275222246405745257275088548364400416034343698203983615444112129, + 21888242871839275222246405745257275088548364400416034343698204086899619104919, + 21888242871839275222246405745257275088548364400416034343698203220355850822894, + 21888242871839275222246405745257275088548364400416034343698203185318381651271, + 21888242871839275222246405745257275088548364400416034343698203232437725277338, + 21888242871839275222246405745257275088548364400416034343698204112778059565617, + 21888242871839275222246405745257275088548364400416034343698203467711234330474, + 21888242871839275222246405745257275088548364400416034343698203129306088513413, 555742909720991, 167631594562525, - 1745127909896946, - 1696454752259512, - 1313899089601152, + 21888242871839275222246405745257275088548364400416034343698203679903896187634, + 21888242871839275222246405745257275088548364400416034343698203631230738550200, + 21888242871839275222246405745257275088548364400416034343698203248675075891840, 974609062550802, - 1778605278101348, + 21888242871839275222246405745257275088548364400416034343698203713381264392036, 87750645793651, 53703754896749, - 1902869094456274, - 1632374541641409, + 21888242871839275222246405745257275088548364400416034343698203837645080746962, + 21888242871839275222246405745257275088548364400416034343698203567150527932097, 160487221461865, 843039022364384, - 1334808622037305, - 1141730535065873, + 21888242871839275222246405745257275088548364400416034343698203269584608327993, + 21888242871839275222246405745257275088548364400416034343698203076506521356561, 533640268945489, 543762188139145, - 2100265981909981, + 21888242871839275222246405745257275088548364400416034343698204035041968200669, 955549750147973, 422492210513842, - 1671875029797221, - 1599249831114682, - 1206731711715936, - 2078174550961176, + 21888242871839275222246405745257275088548364400416034343698203606651016087909, + 21888242871839275222246405745257275088548364400416034343698203534025817405370, + 21888242871839275222246405745257275088548364400416034343698203141507698006624, + 21888242871839275222246405745257275088548364400416034343698204012950537251864, 1030063533586159, - 1188561658435273, - 1781068150072074, + 21888242871839275222246405745257275088548364400416034343698203123337644725961, + 21888242871839275222246405745257275088548364400416034343698203715844136362762, 596906940748270, - 1227459989969490, + 21888242871839275222246405745257275088548364400416034343698203162235976260178, 782357425810206, - 1128209173615924, + 21888242871839275222246405745257275088548364400416034343698203062985159906612, 969604050133892, - 2070037263983077, - 1849966301296123, - 1147103697680618, + 21888242871839275222246405745257275088548364400416034343698204004813250273765, + 21888242871839275222246405745257275088548364400416034343698203784742287586811, + 21888242871839275222246405745257275088548364400416034343698203081879683971306, 902999074582557, - 1676495757949693, + 21888242871839275222246405745257275088548364400416034343698203611271744240381, 1028871198249177, 95606572570668, - 1917331890749400, + 21888242871839275222246405745257275088548364400416034343698203852107877040088, 217341287235949, 821895607472395, 240766587938629, 24004363466955, - 1844153858665547, + 21888242871839275222246405745257275088548364400416034343698203778929844956235, 614181815285493, - 1545316892993595, - 1644442570024520, + 21888242871839275222246405745257275088548364400416034343698203480092879284283, + 21888242871839275222246405745257275088548364400416034343698203579218556315208, 1110791157972312, - 1613798672893592, + 21888242871839275222246405745257275088548364400416034343698203548574659184280, 471013746007251, 636510895213586, - 1448724983543581, + 21888242871839275222246405745257275088548364400416034343698203383500969834269, 993769304293025, - 1504032525475279, - 2150052604288835, - 1485602668957749, + 21888242871839275222246405745257275088548364400416034343698203438808511765967, + 21888242871839275222246405745257275088548364400416034343698204084828590579523, + 21888242871839275222246405745257275088548364400416034343698203420378655248437, 508829345341850, - 1247491039322213, + 21888242871839275222246405745257275088548364400416034343698203182267025612901, 739698952630348, - 1938007467843951, + 21888242871839275222246405745257275088548364400416034343698203872783454134639, 192206833421082, 686558084195875, - 1347203740856928, - 1567835718643478, - 1437467711223685, + 21888242871839275222246405745257275088548364400416034343698203281979727147616, + 21888242871839275222246405745257275088548364400416034343698203502611704934166, + 21888242871839275222246405745257275088548364400416034343698203372243697514373, 691808260400350, 548576553878188, 454303279477920, - 1469618132429248, + 21888242871839275222246405745257275088548364400416034343698203404394118719936, 1005344227075836, - 1936718825838006, - 1650686823701895, + 21888242871839275222246405745257275088548364400416034343698203871494812128694, + 21888242871839275222246405745257275088548364400416034343698203585462809992583, 903146550381416, 1105305081978192, - 1308233401100243, - 1320876532301775, - 1150046496300895, - 1185976608060083, + 21888242871839275222246405745257275088548364400416034343698203243009387390931, + 21888242871839275222246405745257275088548364400416034343698203255652518592463, + 21888242871839275222246405745257275088548364400416034343698203084822482591583, + 21888242871839275222246405745257275088548364400416034343698203120752594350771, 1054239645756741, 309396741884350, 734080663140916, - 1408141608605599, - 2216373413145907, - 2148747555208263, + 21888242871839275222246405745257275088548364400416034343698203342917594896287, + 21888242871839275222246405745257275088548364400416034343698204151149399436595, + 21888242871839275222246405745257275088548364400416034343698204083523541498951, 480032819895467, - 1551090928351943, - 2121318212010134, - 1290471524944909, - 1412477169070400, - 1869701473760593, + 21888242871839275222246405745257275088548364400416034343698203485866914642631, + 21888242871839275222246405745257275088548364400416034343698204056094198300822, + 21888242871839275222246405745257275088548364400416034343698203225247511235597, + 21888242871839275222246405745257275088548364400416034343698203347253155361088, + 21888242871839275222246405745257275088548364400416034343698203804477460051281, 1048482008320591, - 1990537302156593, - 2037386831730786, - 1196082666996450, + 21888242871839275222246405745257275088548364400416034343698203925313288447281, + 21888242871839275222246405745257275088548364400416034343698203972162818021474, + 21888242871839275222246405745257275088548364400416034343698203130858653287138, 324188108372025, - 1284045824297483, + 21888242871839275222246405745257275088548364400416034343698203218821810588171, 845626075968511, - 2090309489151476, - 2059119779684025, + 21888242871839275222246405745257275088548364400416034343698204025085475442164, + 21888242871839275222246405745257275088548364400416034343698203993895765974713, 305228006679434, 91173624725221, 350940005305469, 732825424170748, 1102964407488581, - 1136197590300230, - 2112097699570699, + 21888242871839275222246405745257275088548364400416034343698203070973576590918, + 21888242871839275222246405745257275088548364400416034343698204046873685861387, 240084629558480, - 1496514088197141, - 1843743733262000, + 21888242871839275222246405745257275088548364400416034343698203431290074487829, + 21888242871839275222246405745257275088548364400416034343698203778519719552688, 1013943003798450, 732588963062380, 924225630994473, 688809820597221, - 1387937732579252, - 2167309569941066, + 21888242871839275222246405745257275088548364400416034343698203322713718869940, + 21888242871839275222246405745257275088548364400416034343698204102085556231754, 435163008232157, - 1302492373232250, + 21888242871839275222246405745257275088548364400416034343698203237268359522938, 912751887929627, 394937157255055, 422027568946024, 67827874641954, 257294933121240, 902541643969974, - 1351208891093288, + 21888242871839275222246405745257275088548364400416034343698203285984877383976, 759736579421940, - 1282879004062058, - 1553928635386448, - 1356945557037289, + 21888242871839275222246405745257275088548364400416034343698203217654990352746, + 21888242871839275222246405745257275088548364400416034343698203488704621677136, + 21888242871839275222246405745257275088548364400416034343698203291721543327977, 828156586084550, 578210513783898, - 1556750187478205, - 1703409879986300, - 1860269579168143, + 21888242871839275222246405745257275088548364400416034343698203491526173768893, + 21888242871839275222246405745257275088548364400416034343698203638185866276988, + 21888242871839275222246405745257275088548364400416034343698203795045565458831, 965110598948547, - 1203521362205845, - 1457181927583449, - 1147930353601910, - 1843822301989657, + 21888242871839275222246405745257275088548364400416034343698203138297348496533, + 21888242871839275222246405745257275088548364400416034343698203391957913874137, + 21888242871839275222246405745257275088548364400416034343698203082706339892598, + 21888242871839275222246405745257275088548364400416034343698203778598288280345, 192906971309816, 580472082156830, 669178610275786, 836718769215990, 555359488270665, 839663486345576, - 1260678291611633, + 21888242871839275222246405745257275088548364400416034343698203195454277902321, 215046397943797, 736780337515343, 258594263654888, - 1705580920866699, - 1186626522361473, + 21888242871839275222246405745257275088548364400416034343698203640356907157387, + 21888242871839275222246405745257275088548364400416034343698203121402508652161, 1108738993189563, - 2057312112149637, - 2135861122334295, + 21888242871839275222246405745257275088548364400416034343698203992088098440325, + 21888242871839275222246405745257275088548364400416034343698204070637108624983, 984986724024819, 324166885072808, - 1441331078315487, - 1356873323017612, + 21888242871839275222246405745257275088548364400416034343698203376107064606175, + 21888242871839275222246405745257275088548364400416034343698203291649309308300, 694615806313825, - 2162802597223833, - 2132947896595196, - 1551844040207956, - 1855928468627297, - 1571625823377665, + 21888242871839275222246405745257275088548364400416034343698204097578583514521, + 21888242871839275222246405745257275088548364400416034343698204067723882885884, + 21888242871839275222246405745257275088548364400416034343698203486620026498644, + 21888242871839275222246405745257275088548364400416034343698203790704454917985, + 21888242871839275222246405745257275088548364400416034343698203506401809668353, 527657219642936, - 1344094406427130, - 1511285127100613, - 1809575150641675, - 2136890812899833, + 21888242871839275222246405745257275088548364400416034343698203278870392717818, + 21888242871839275222246405745257275088548364400416034343698203446061113391301, + 21888242871839275222246405745257275088548364400416034343698203744351136932363, + 21888242871839275222246405745257275088548364400416034343698204071666799190521, 431366915438886, - 1508428409160171, + 21888242871839275222246405745257275088548364400416034343698203443204395450859, 1087640158108345, - 1331755520144078, + 21888242871839275222246405745257275088548364400416034343698203266531506434766, 19896239330113, - 1525252886198035, + 21888242871839275222246405745257275088548364400416034343698203460028872488723, 512507506085760, 659117694784222, - 1665767607683012, - 1452924229002559, - 1221691842710556, - 1839477996524511, + 21888242871839275222246405745257275088548364400416034343698203600543593973700, + 21888242871839275222246405745257275088548364400416034343698203387700215293247, + 21888242871839275222246405745257275088548364400416034343698203156467829001244, + 21888242871839275222246405745257275088548364400416034343698203774253982815199, 270068085631753, - 1585781199941279, - 2106577992750440, + 21888242871839275222246405745257275088548364400416034343698203520557186231967, + 21888242871839275222246405745257275088548364400416034343698204041353979041128, 1091164308619709, - 1192363623669432, + 21888242871839275222246405745257275088548364400416034343698203127139609960120, 594516955296602, 247663884361228, 1003385778261489, - 2227308446286437, + 21888242871839275222246405745257275088548364400416034343698204162084432577125, 1016768537957126, 77237428260876, - 1995346831147029, - 1825587030698533, + 21888242871839275222246405745257275088548364400416034343698203930122817437717, + 21888242871839275222246405745257275088548364400416034343698203760363016989221, 649818098661521, - 2035981486049821, - 1604912069922700, - 1180388549351087, - 1755366598239919, + 21888242871839275222246405745257275088548364400416034343698203970757472340509, + 21888242871839275222246405745257275088548364400416034343698203539688056213388, + 21888242871839275222246405745257275088548364400416034343698203115164535641775, + 21888242871839275222246405745257275088548364400416034343698203690142584530607, 132159864523891, 179776293030365, 889641873546801, - 1457769303784851, + 21888242871839275222246405745257275088548364400416034343698203392545290075539, 154726529069619, 487721248378910, - 2147894714248822, - 1668042040679734, - 1569542034104490, + 21888242871839275222246405745257275088548364400416034343698204082670700539510, + 21888242871839275222246405745257275088548364400416034343698203602818026970422, + 21888242871839275222246405745257275088548364400416034343698203504318020395178, 840204807382204, 750592826011354, 60803781108136, - 2246941409370280, - 1418124961247850, - 1562375405366778, + 21888242871839275222246405745257275088548364400416034343698204181717395660968, + 21888242871839275222246405745257275088548364400416034343698203352900947538538, + 21888242871839275222246405745257275088548364400416034343698203497151391657466, 412046613436016, - 1938032057205318, + 21888242871839275222246405745257275088548364400416034343698203872808043496006, 976303866492107, 1025425879097751, 853819795666982, 793784879152002, - 1839903771224004, - 1862858295936720, - 1669135930323415, + 21888242871839275222246405745257275088548364400416034343698203774679757514692, + 21888242871839275222246405745257275088548364400416034343698203797634282227408, + 21888242871839275222246405745257275088548364400416034343698203603911916614103, 781299408809730, 535904255879790, 1038532252158782, - 1527575574385621, - 1503292780738602, + 21888242871839275222246405745257275088548364400416034343698203462351560676309, + 21888242871839275222246405745257275088548364400416034343698203438068767029290, 362251137586648, 206685287458636, 462100264290061, - 1711861994272493, + 21888242871839275222246405745257275088548364400416034343698203646637980563181, 414558681978618, 25332157558949, 180711980146291, 1050090358216780, - 1649851010523721, - 1758303792213344, - 1387873856871930, - 2046794048056426, + 21888242871839275222246405745257275088548364400416034343698203584626996814409, + 21888242871839275222246405745257275088548364400416034343698203693079778504032, + 21888242871839275222246405745257275088548364400416034343698203322649843162618, + 21888242871839275222246405745257275088548364400416034343698203981570034347114, 612543989453349, - 1365593607286520, - 1267756863798572, + 21888242871839275222246405745257275088548364400416034343698203300369593577208, + 21888242871839275222246405745257275088548364400416034343698203202532850089260, 810939390617131, - 1284125305152556, + 21888242871839275222246405745257275088548364400416034343698203218901291443244, 872161583939614, 465701290238819, 995939363957103, 1023250541685259, 623208993312520, 149407114157640, - 1927298915651941, - 1742135883884885, + 21888242871839275222246405745257275088548364400416034343698203862074901942629, + 21888242871839275222246405745257275088548364400416034343698203676911870175573, 570488155693313, - 1943037396952824, - 1931303564769045, + 21888242871839275222246405745257275088548364400416034343698203877813383243512, + 21888242871839275222246405745257275088548364400416034343698203866079551059733, 124101663296546, 192654307804244, - 1845206704792575, + 21888242871839275222246405745257275088548364400416034343698203779982691083263, 623239206736982, - 1346606181465256, + 21888242871839275222246405745257275088548364400416034343698203281382167755944, 17057562311964, - 1867487730482438, + 21888242871839275222246405745257275088548364400416034343698203802263716773126, 385221456591243, - 1881595456793715, - 1521258278250475, + 21888242871839275222246405745257275088548364400416034343698203816371443084403, + 21888242871839275222246405745257275088548364400416034343698203456034264541163, 681345551386378, - 1349477842383474, - 1697242147432733, + 21888242871839275222246405745257275088548364400416034343698203284253828674162, + 21888242871839275222246405745257275088548364400416034343698203632018133723421, 56411919144995, - 2111437185624452, - 1531222562926734, + 21888242871839275222246405745257275088548364400416034343698204046213171915140, + 21888242871839275222246405745257275088548364400416034343698203465998549217422, 666873489029111, 434261958958297, 54976744357820, - 1305769983613916, + 21888242871839275222246405745257275088548364400416034343698203240545969904604, 111743311392853, - 2011467373484356, + 21888242871839275222246405745257275088548364400416034343698203946243359775044, 650714360412934, 335745008075375, - 1437574192282892, + 21888242871839275222246405745257275088548364400416034343698203372350178573580, 1117945359301501, 252048099867763, - 1178988137560534, + 21888242871839275222246405745257275088548364400416034343698203113764123851222, 333755428356695, - 1564770535415939, + 21888242871839275222246405745257275088548364400416034343698203499546521706627, 228629656584535, 457045402114441, 887945137446455, - 1255197700543608, - 1316969446712214, - 1152588259509506, - 2044308368652991, - 1356005941558938, + 21888242871839275222246405745257275088548364400416034343698203189973686834296, + 21888242871839275222246405745257275088548364400416034343698203251745433002902, + 21888242871839275222246405745257275088548364400416034343698203087364245800194, + 21888242871839275222246405745257275088548364400416034343698203979084354943679, + 21888242871839275222246405745257275088548364400416034343698203290781927849626, 685206270418585, 411620920808561, 776354754469933, - 1202508700581776, - 1822090051905952, - 1307182163988692, - 1508418330135585, - 1937415653837596, + 21888242871839275222246405745257275088548364400416034343698203137284686872464, + 21888242871839275222246405745257275088548364400416034343698203756866038196640, + 21888242871839275222246405745257275088548364400416034343698203241958150279380, + 21888242871839275222246405745257275088548364400416034343698203443194316426273, + 21888242871839275222246405745257275088548364400416034343698203872191640128284, 23624813726301, 591728378812797, 248727980616554, 779948852535276, - 2210007672231834, - 2129541556944075, - 2119790784699039, + 21888242871839275222246405745257275088548364400416034343698204144783658522522, + 21888242871839275222246405745257275088548364400416034343698204064317543234763, + 21888242871839275222246405745257275088548364400416034343698204054566770989727, 726258513750641, 588547725025185, 151471168564824, 503772765401357, - 1884597186538027, - 1582465226610249, - 2083838973080546, - 1580028904829090, + 21888242871839275222246405745257275088548364400416034343698203819373172828715, + 21888242871839275222246405745257275088548364400416034343698203517241212900937, + 21888242871839275222246405745257275088548364400416034343698204018614959371234, + 21888242871839275222246405745257275088548364400416034343698203514804891119778, 989838202461051, - 1740264669974737, + 21888242871839275222246405745257275088548364400416034343698203675040656265425, 286676613435273, - 1202081405778958, - 1164817003895652, - 1393324394587671, + 21888242871839275222246405745257275088548364400416034343698203136857392069646, + 21888242871839275222246405745257275088548364400416034343698203099592990186340, + 21888242871839275222246405745257275088548364400416034343698203328100380878359, 285815202151883, - 1930222962015201, - 1680853578840406, - 2029109075596480, + 21888242871839275222246405745257275088548364400416034343698203864998948305889, + 21888242871839275222246405745257275088548364400416034343698203615629565131094, + 21888242871839275222246405745257275088548364400416034343698203963885061887168, 495018509594851, - 1289301230689414, - 1993163025743322, - 1257630328680938, - 1135791762649335, - 1126352342439040, - 1448195522379483, - 1812251560600835, + 21888242871839275222246405745257275088548364400416034343698203224077216980102, + 21888242871839275222246405745257275088548364400416034343698203927939012034010, + 21888242871839275222246405745257275088548364400416034343698203192406314971626, + 21888242871839275222246405745257275088548364400416034343698203070567748940023, + 21888242871839275222246405745257275088548364400416034343698203061128328729728, + 21888242871839275222246405745257275088548364400416034343698203382971508670171, + 21888242871839275222246405745257275088548364400416034343698203747027546891523, 779395071615556, 923847373321421, - 1523930387188500, + 21888242871839275222246405745257275088548364400416034343698203458706373479188, 212328786209983, - 1753772749692913, - 2215901841841376, + 21888242871839275222246405745257275088548364400416034343698203688548735983601, + 21888242871839275222246405745257275088548364400416034343698204150677828132064, 49101542926143, - 1880754658541827, - 1735450394153015, - 1630630626130749, - 2136790268421344, + 21888242871839275222246405745257275088548364400416034343698203815530644832515, + 21888242871839275222246405745257275088548364400416034343698203670226380443703, + 21888242871839275222246405745257275088548364400416034343698203565406612421437, + 21888242871839275222246405745257275088548364400416034343698204071566254712032, 1036044685964685, 1038733415942148, 661639423255525, - 1381985366184482, - 1814207919333938, - 1672385973504510, - 1558337682047093, - 2030141897002251, + 21888242871839275222246405745257275088548364400416034343698203316761352475170, + 21888242871839275222246405745257275088548364400416034343698203748983905624626, + 21888242871839275222246405745257275088548364400416034343698203607161959795198, + 21888242871839275222246405745257275088548364400416034343698203493113668337781, + 21888242871839275222246405745257275088548364400416034343698203964917883292939, 123521672515662, 126681057590974, 198243938690243, - 1573490823964382, - 2129199319718812, - 1192577143434650, + 21888242871839275222246405745257275088548364400416034343698203508266810255070, + 21888242871839275222246405745257275088548364400416034343698204063975306009500, + 21888242871839275222246405745257275088548364400416034343698203127353129725338, 699925998629085, - 1724091365245899, - 1723304129714659, + 21888242871839275222246405745257275088548364400416034343698203658867351536587, + 21888242871839275222246405745257275088548364400416034343698203658080116005347, 453239986977553, - 2167654901471277, - 2003223680613792, + 21888242871839275222246405745257275088548364400416034343698204102430887761965, + 21888242871839275222246405745257275088548364400416034343698203937999666904480, 495213471482963, - 1542496497215257, - 1799647910454351, + 21888242871839275222246405745257275088548364400416034343698203477272483505945, + 21888242871839275222246405745257275088548364400416034343698203734423896745039, 1104478409739943, - 1887167962834470, + 21888242871839275222246405745257275088548364400416034343698203821943949125158, 364848587194266, 585934525337184, 182442263465332, - 2215924739659302, - 1280967482714101, + 21888242871839275222246405745257275088548364400416034343698204150700725949990, + 21888242871839275222246405745257275088548364400416034343698203215743469004789, 807466976262787, 514755405300849, - 1216101194156547, + 21888242871839275222246405745257275088548364400416034343698203150877180447235, 711588728431118, - 1233324059085208, - 2150369729598330, - 1526940013054453, - 2120136702898299, - 1167116486403088, - 1929320592682733, + 21888242871839275222246405745257275088548364400416034343698203168100045375896, + 21888242871839275222246405745257275088548364400416034343698204085145715889018, + 21888242871839275222246405745257275088548364400416034343698203461715999345141, + 21888242871839275222246405745257275088548364400416034343698204054912689188987, + 21888242871839275222246405745257275088548364400416034343698203101892472693776, + 21888242871839275222246405745257275088548364400416034343698203864096578973421, 36328436471132, 1049211952295733, - 1216523802947812, - 1763050822810059, + 21888242871839275222246405745257275088548364400416034343698203151299789238500, + 21888242871839275222246405745257275088548364400416034343698203697826809100747, 745344016968095, - 2120245558022564, - 2006171053284170, - 1176192764505848, + 21888242871839275222246405745257275088548364400416034343698204055021544313252, + 21888242871839275222246405745257275088548364400416034343698203940947039574858, + 21888242871839275222246405745257275088548364400416034343698203110968750796536, 94471483285159, 6988413077789, - 2071083900636500, + 21888242871839275222246405745257275088548364400416034343698204005859886927188, 1088125452730806, - 1750009603933615, - 1365963112611749, - 1535809663169585, + 21888242871839275222246405745257275088548364400416034343698203684785590224303, + 21888242871839275222246405745257275088548364400416034343698203300739098902437, + 21888242871839275222246405745257275088548364400416034343698203470585649460273, 601847631686869, - 1645510164819062, - 1295941553966802, - 1740305124438270, + 21888242871839275222246405745257275088548364400416034343698203580286151109750, + 21888242871839275222246405745257275088548364400416034343698203230717540257490, + 21888242871839275222246405745257275088548364400416034343698203675081110728958, 820573885348082, 835166806979107, 556036524068134, - 1847560078802035, - 1972426717960420, - 1717435501615618, - 2071769961883805, + 21888242871839275222246405745257275088548364400416034343698203782336065092723, + 21888242871839275222246405745257275088548364400416034343698203907202704251108, + 21888242871839275222246405745257275088548364400416034343698203652211487906306, + 21888242871839275222246405745257275088548364400416034343698204006545948174493, 597280432120536, 26186010038278, 110538037417931, 352423539649068, 305201376980265, 363854978782178, - 1321663809302880, + 21888242871839275222246405745257275088548364400416034343698203256439795593568, 648892313872499, 943068312041625, 570293807960389, 221124613533329, - 1532225894325811, - 2166426322120421, - 1995180343795843, + 21888242871839275222246405745257275088548364400416034343698203467001880616499, + 21888242871839275222246405745257275088548364400416034343698204101202308411109, + 21888242871839275222246405745257275088548364400416034343698203929956330086531, 830950019760295, 680449627008641, - 1684857897727868, - 2239941579941011, + 21888242871839275222246405745257275088548364400416034343698203619633884018556, + 21888242871839275222246405745257275088548364400416034343698204174717566231699, 803821278055727, 465647231465303, 834523049858470, @@ -8148,142 +8148,142 @@ pub global CRP: [Polynomial; L] = [ 918342498576865, 1100605674010514, 597142347186573, - 1872784555846805, - 2210893720810600, - 2231984555456307, + 21888242871839275222246405745257275088548364400416034343698203807560542137493, + 21888242871839275222246405745257275088548364400416034343698204145669707101288, + 21888242871839275222246405745257275088548364400416034343698204166760541746995, 140777025399138, 952777536408455, - 2022835104322907, + 21888242871839275222246405745257275088548364400416034343698203957611090613595, 306012472377565, - 2124008105182908, - 1642701517355752, - 1705938647582999, + 21888242871839275222246405745257275088548364400416034343698204058784091473596, + 21888242871839275222246405745257275088548364400416034343698203577477503646440, + 21888242871839275222246405745257275088548364400416034343698203640714633873687, 122905466461269, 582062114505960, - 1469454006760675, - 1534206299937052, + 21888242871839275222246405745257275088548364400416034343698203404229993051363, + 21888242871839275222246405745257275088548364400416034343698203468982286227740, 338895708174078, - 1684981618108298, - 2137808658420826, + 21888242871839275222246405745257275088548364400416034343698203619757604398986, + 21888242871839275222246405745257275088548364400416034343698204072584644711514, 1014472491999904, - 1717145784513610, - 2189188548930058, - 1925166687404496, - 1658265280941007, + 21888242871839275222246405745257275088548364400416034343698203651921770804298, + 21888242871839275222246405745257275088548364400416034343698204123964535220746, + 21888242871839275222246405745257275088548364400416034343698203859942673695184, + 21888242871839275222246405745257275088548364400416034343698203593041267231695, 397058142781328, - 1719960900953904, - 1366831763738771, - 1901415978967064, - 1441347896143252, - 1992006333620748, + 21888242871839275222246405745257275088548364400416034343698203654736887244592, + 21888242871839275222246405745257275088548364400416034343698203301607750029459, + 21888242871839275222246405745257275088548364400416034343698203836191965257752, + 21888242871839275222246405745257275088548364400416034343698203376123882433940, + 21888242871839275222246405745257275088548364400416034343698203926782319911436, 134188077731428, - 1213744692335021, - 1744424745450017, + 21888242871839275222246405745257275088548364400416034343698203148520678625709, + 21888242871839275222246405745257275088548364400416034343698203679200731740705, 871962869747349, - 1647211465453121, - 2177213894574095, + 21888242871839275222246405745257275088548364400416034343698203581987451743809, + 21888242871839275222246405745257275088548364400416034343698204111989880864783, 749752595419211, 300037572884220, 817541882731463, - 1410060331558887, + 21888242871839275222246405745257275088548364400416034343698203344836317849575, 290561844549239, 630943406824177, 143660528183658, - 1850971921715609, - 1363557024363157, - 1457987174563278, - 1882314123181124, - 2168990213312930, + 21888242871839275222246405745257275088548364400416034343698203785747908006297, + 21888242871839275222246405745257275088548364400416034343698203298333010653845, + 21888242871839275222246405745257275088548364400416034343698203392763160853966, + 21888242871839275222246405745257275088548364400416034343698203817090109471812, + 21888242871839275222246405745257275088548364400416034343698204103766199603618, 550389181596611, 484752012550933, - 1176464512830495, + 21888242871839275222246405745257275088548364400416034343698203111240499121183, 862208532700959, 485104095869576, - 1593273175458054, + 21888242871839275222246405745257275088548364400416034343698203528049161748742, 737772217666484, 94341977192372, 824436047394079, - 1963342610061549, - 1594470063277504, + 21888242871839275222246405745257275088548364400416034343698203898118596352237, + 21888242871839275222246405745257275088548364400416034343698203529246049568192, 1011648008616303, 726210532091876, 833562891188051, - 1232109859188466, + 21888242871839275222246405745257275088548364400416034343698203166885845479154, 269684073494129, - 2151145632029077, + 21888242871839275222246405745257275088548364400416034343698204085921618319765, 1047559911591627, - 2172706224493655, - 1829412454375928, - 1839073373230533, + 21888242871839275222246405745257275088548364400416034343698204107482210784343, + 21888242871839275222246405745257275088548364400416034343698203764188440666616, + 21888242871839275222246405745257275088548364400416034343698203773849359521221, 625813484230417, - 1465743406648940, - 1392852287842859, + 21888242871839275222246405745257275088548364400416034343698203400519392939628, + 21888242871839275222246405745257275088548364400416034343698203327628274133547, 749107973591631, - 2022447942925744, - 1814842323060183, + 21888242871839275222246405745257275088548364400416034343698203957223929216432, + 21888242871839275222246405745257275088548364400416034343698203749618309350871, 1063542339004734, ]), Polynomial::new([ 2118343962731743, 1019717792455955, 34012379789631, - 2943349963461495, - 3419138534090066, - 2956407817829646, - 4102072798341600, + 21888242871839275222246405745257275088548364400416034343698202626326144193399, + 21888242871839275222246405745257275088548364400416034343698203102114714821970, + 21888242871839275222246405745257275088548364400416034343698202639383998561550, + 21888242871839275222246405745257275088548364400416034343698203785048979073504, 1169631730692581, - 4434428458014976, - 2303703729283382, - 3736817222301148, + 21888242871839275222246405745257275088548364400416034343698204117404638746880, + 21888242871839275222246405745257275088548364400416034343698201986679910015286, + 21888242871839275222246405745257275088548364400416034343698203419793403033052, 277122461401965, - 3544661442608190, - 3142286285204949, - 2437929514069376, - 2641539111156956, + 21888242871839275222246405745257275088548364400416034343698203227637623340094, + 21888242871839275222246405745257275088548364400416034343698202825262465936853, + 21888242871839275222246405745257275088548364400416034343698202120905694801280, + 21888242871839275222246405745257275088548364400416034343698202324515291888860, 1842991996773051, - 4396677246180841, - 3702784598154120, + 21888242871839275222246405745257275088548364400416034343698204079653426912745, + 21888242871839275222246405745257275088548364400416034343698203385760778886024, 377481831911877, 299236085296745, 493672227601314, - 4123006534778760, - 3518258291116015, - 3250670818727977, - 2540769921689081, - 3784349223160734, - 4289894025986484, - 3652050700456841, - 4425783778318249, + 21888242871839275222246405745257275088548364400416034343698203805982715510664, + 21888242871839275222246405745257275088548364400416034343698203201234471847919, + 21888242871839275222246405745257275088548364400416034343698202933646999459881, + 21888242871839275222246405745257275088548364400416034343698202223746102420985, + 21888242871839275222246405745257275088548364400416034343698203467325403892638, + 21888242871839275222246405745257275088548364400416034343698203972870206718388, + 21888242871839275222246405745257275088548364400416034343698203335026881188745, + 21888242871839275222246405745257275088548364400416034343698204108759959050153, 2116783582581411, - 4353870806672095, + 21888242871839275222246405745257275088548364400416034343698204036846987403999, 553559997945928, 1800567054304780, 1676118403541598, - 4199533222434749, - 3485703265319232, + 21888242871839275222246405745257275088548364400416034343698203882509403166653, + 21888242871839275222246405745257275088548364400416034343698203168679446051136, 1593096815350940, - 3507985315241188, + 21888242871839275222246405745257275088548364400416034343698203190961495973092, 1023100214990383, - 3325391343200659, - 3027350868960670, - 3093895479440783, - 3860989674040429, + 21888242871839275222246405745257275088548364400416034343698203008367523932563, + 21888242871839275222246405745257275088548364400416034343698202710327049692574, + 21888242871839275222246405745257275088548364400416034343698202776871660172687, + 21888242871839275222246405745257275088548364400416034343698203543965854772333, 1029350133294776, 1085100594656866, 1096185512751319, 2102824963872020, - 3433053055606867, + 21888242871839275222246405745257275088548364400416034343698203116029236338771, 952186340213058, 642016311950414, 2194911478668169, 1781229895528657, 1780775626443732, - 2750102344567399, - 2884147167676892, + 21888242871839275222246405745257275088548364400416034343698202433078525299303, + 21888242871839275222246405745257275088548364400416034343698202567123348408796, 1819548538401580, 513664642582848, 1686386175198335, - 3461483946212234, + 21888242871839275222246405745257275088548364400416034343698203144460126944138, 1341855717829450, 274301458976745, 1819659745167122, @@ -8292,141 +8292,141 @@ pub global CRP: [Polynomial; L] = [ 126793617927924, 1414013580637386, 2007415854596129, - 4344185225122772, + 21888242871839275222246405745257275088548364400416034343698204027161405854676, 400590590322649, - 3322574152668056, + 21888242871839275222246405745257275088548364400416034343698203005550333399960, 952978137944109, - 3647718453333740, + 21888242871839275222246405745257275088548364400416034343698203330694634065644, 1674696422987579, - 2499937460021313, - 2657196950485954, + 21888242871839275222246405745257275088548364400416034343698202182913640753217, + 21888242871839275222246405745257275088548364400416034343698202340173131217858, 1264445308978859, - 3036140857679464, - 3501986105167061, - 3553348618299870, + 21888242871839275222246405745257275088548364400416034343698202719117038411368, + 21888242871839275222246405745257275088548364400416034343698203184962285898965, + 21888242871839275222246405745257275088548364400416034343698203236324799031774, 1391051260021017, - 3716857457506880, + 21888242871839275222246405745257275088548364400416034343698203399833638238784, 582541168678461, 2250413332511509, - 3915618697703229, + 21888242871839275222246405745257275088548364400416034343698203598594878435133, 1443215181250329, 228151488082467, 1545620772223502, 482643184196419, 1483661382043882, - 3949349557591007, - 3259106880307062, - 3991673960578449, + 21888242871839275222246405745257275088548364400416034343698203632325738322911, + 21888242871839275222246405745257275088548364400416034343698202942083061038966, + 21888242871839275222246405745257275088548364400416034343698203674650141310353, 1918527914506162, 1750258668307094, - 4320473185058314, - 3631343019383705, + 21888242871839275222246405745257275088548364400416034343698204003449365790218, + 21888242871839275222246405745257275088548364400416034343698203314319200115609, 1988170583221230, 1275433410825772, - 3384164158095404, - 3091386181114456, + 21888242871839275222246405745257275088548364400416034343698203067140338827308, + 21888242871839275222246405745257275088548364400416034343698202774362361846360, 2184289798276626, 615469185371904, 2223569261884727, - 3512240898818374, + 21888242871839275222246405745257275088548364400416034343698203195217079550278, 1564052133585432, 4443746928379, 1432704423924356, 33209620381802, - 2951773086309218, + 21888242871839275222246405745257275088548364400416034343698202634749267041122, 248257473024183, - 2333197470785868, + 21888242871839275222246405745257275088548364400416034343698202016173651517772, 1353555246671967, 1637512077862232, - 2604834801688904, - 3471710066256800, + 21888242871839275222246405745257275088548364400416034343698202287810982420808, + 21888242871839275222246405745257275088548364400416034343698203154686246988704, 1925610628714693, - 2908169283759814, - 2962997691540025, + 21888242871839275222246405745257275088548364400416034343698202591145464491718, + 21888242871839275222246405745257275088548364400416034343698202645973872271929, 71732638307328, 1704377902664479, 429319656139734, 807192639290840, - 2325059270854220, + 21888242871839275222246405745257275088548364400416034343698202008035451586124, 161735535929948, 2156789540428964, - 2735500910237316, - 2284075455728596, - 4002995174933328, - 3297654542730260, - 3449621361386978, + 21888242871839275222246405745257275088548364400416034343698202418477090969220, + 21888242871839275222246405745257275088548364400416034343698201967051636460500, + 21888242871839275222246405745257275088548364400416034343698203685971355665232, + 21888242871839275222246405745257275088548364400416034343698202980630723462164, + 21888242871839275222246405745257275088548364400416034343698203132597542118882, 247423815248312, - 2724195722684919, - 4170033107180951, + 21888242871839275222246405745257275088548364400416034343698202407171903416823, + 21888242871839275222246405745257275088548364400416034343698203853009287912855, 1163270924409088, 1527600996449959, - 3871073462213396, + 21888242871839275222246405745257275088548364400416034343698203554049642945300, 295724059132315, 1612865713961232, 1581354845407761, - 3141968994954816, + 21888242871839275222246405745257275088548364400416034343698202824945175686720, 2103482828676274, 472878174824511, - 2656715139280727, + 21888242871839275222246405745257275088548364400416034343698202339691320012631, 145653803399292, 1181702422506247, - 2658586780693019, + 21888242871839275222246405745257275088548364400416034343698202341562961424923, 1014973078694320, 377642670991522, 1429177035621448, - 4402108889695732, - 2882592813990157, - 3249935652246729, - 3029640178679400, - 2641247157916620, - 4213440486963647, + 21888242871839275222246405745257275088548364400416034343698204085085070427636, + 21888242871839275222246405745257275088548364400416034343698202565568994722061, + 21888242871839275222246405745257275088548364400416034343698202932911832978633, + 21888242871839275222246405745257275088548364400416034343698202712616359411304, + 21888242871839275222246405745257275088548364400416034343698202324223338648524, + 21888242871839275222246405745257275088548364400416034343698203896416667695551, 1485972029452555, - 2979823002732375, - 4094363825461613, - 3953541172423747, - 2709938753096965, - 3690418223418335, + 21888242871839275222246405745257275088548364400416034343698202662799183464279, + 21888242871839275222246405745257275088548364400416034343698203777340006193517, + 21888242871839275222246405745257275088548364400416034343698203636517353155651, + 21888242871839275222246405745257275088548364400416034343698202392914933828869, + 21888242871839275222246405745257275088548364400416034343698203373394404150239, 1763080172008439, 649573912252586, - 3096456311850507, - 4246508631696509, + 21888242871839275222246405745257275088548364400416034343698202779432492582411, + 21888242871839275222246405745257275088548364400416034343698203929484812428413, 1907357176106080, 1554613958661361, 1663940601168065, 1478522630790036, 766904270583735, - 2577114022842430, - 3018507001539164, + 21888242871839275222246405745257275088548364400416034343698202260090203574334, + 21888242871839275222246405745257275088548364400416034343698202701483182271068, 765358947271617, - 3002102148426399, + 21888242871839275222246405745257275088548364400416034343698202685078329158303, 1609505853383415, 1291006953140595, 150749557405638, - 3213440140759838, + 21888242871839275222246405745257275088548364400416034343698202896416321491742, 870891387096087, 1432202624611532, 907254100798918, 1796595867219463, - 2517890796116244, - 3032386170013420, + 21888242871839275222246405745257275088548364400416034343698202200866976848148, + 21888242871839275222246405745257275088548364400416034343698202715362350745324, 45190885969356, 478288232918393, - 3005893902353823, + 21888242871839275222246405745257275088548364400416034343698202688870083085727, 478939312432020, 1563468235376598, - 3494535066462095, + 21888242871839275222246405745257275088548364400416034343698203177511247193999, 2135582721257392, - 3576101822068216, + 21888242871839275222246405745257275088548364400416034343698203259078002800120, 1754662220054098, 2118817570453877, 1438765588325092, - 3385293234062854, - 2490488813963760, - 4277201147244346, - 4106377826643670, - 3768837018927502, + 21888242871839275222246405745257275088548364400416034343698203068269414794758, + 21888242871839275222246405745257275088548364400416034343698202173464994695664, + 21888242871839275222246405745257275088548364400416034343698203960177327976250, + 21888242871839275222246405745257275088548364400416034343698203789354007375574, + 21888242871839275222246405745257275088548364400416034343698203451813199659406, 364135732870578, - 3267404718946325, + 21888242871839275222246405745257275088548364400416034343698202950380899678229, 1225014401116626, 1438744150655579, 1338155822773667, @@ -8434,42 +8434,42 @@ pub global CRP: [Polynomial; L] = [ 1767455852342572, 1792799969666869, 805432877250341, - 4332161079889515, + 21888242871839275222246405745257275088548364400416034343698204015137260621419, 1788317667933237, - 4047001441141703, + 21888242871839275222246405745257275088548364400416034343698203729977621873607, 751609689693833, 1631012863591334, 1757280553868836, 799399976787121, - 3440098245055397, - 3487135040009085, - 2548945453035664, - 2354533858410159, + 21888242871839275222246405745257275088548364400416034343698203123074425787301, + 21888242871839275222246405745257275088548364400416034343698203170111220740989, + 21888242871839275222246405745257275088548364400416034343698202231921633767568, + 21888242871839275222246405745257275088548364400416034343698202037510039142063, 1775866211937398, 457227958907176, - 2531345243316151, + 21888242871839275222246405745257275088548364400416034343698202214321424048055, 1843629819546346, - 3534869212373294, - 3452445571816203, + 21888242871839275222246405745257275088548364400416034343698203217845393105198, + 21888242871839275222246405745257275088548364400416034343698203135421752548107, 946385091914442, 411255903180745, - 3392034208434132, + 21888242871839275222246405745257275088548364400416034343698203075010389166036, 1266530683973297, - 2367253766863489, - 2603022522349226, + 21888242871839275222246405745257275088548364400416034343698202050229947595393, + 21888242871839275222246405745257275088548364400416034343698202285998703081130, 950026177362377, 1168898556357532, - 4492609525362271, + 21888242871839275222246405745257275088548364400416034343698204175585706094175, 343239629731805, - 3080364546501655, - 3565304545037435, - 2259187013606844, + 21888242871839275222246405745257275088548364400416034343698202763340727233559, + 21888242871839275222246405745257275088548364400416034343698203248280725769339, + 21888242871839275222246405745257275088548364400416034343698201942163194338748, 1310675740357722, - 3798831358284087, + 21888242871839275222246405745257275088548364400416034343698203481807539015991, 1855830254767148, 469601682575339, - 2946049955808560, - 3731225931609974, + 21888242871839275222246405745257275088548364400416034343698202629026136540464, + 21888242871839275222246405745257275088548364400416034343698203414202112341878, 218453434042461, 292743515480998, 620215674064716, @@ -8477,28 +8477,28 @@ pub global CRP: [Polynomial; L] = [ 1665969045650900, 1152033034500505, 1719934250247912, - 2904269197290148, - 2538211567240691, + 21888242871839275222246405745257275088548364400416034343698202587245378022052, + 21888242871839275222246405745257275088548364400416034343698202221187747972595, 268797532193200, - 3262021100001584, - 3300562965430973, - 3192525760152249, - 3289584218366999, + 21888242871839275222246405745257275088548364400416034343698202944997280733488, + 21888242871839275222246405745257275088548364400416034343698202983539146162877, + 21888242871839275222246405745257275088548364400416034343698202875501940884153, + 21888242871839275222246405745257275088548364400416034343698202972560399098903, 2122845763196365, - 3279595458388326, + 21888242871839275222246405745257275088548364400416034343698202962571639120230, 589278495980785, - 3409094847088345, - 3453698352056566, + 21888242871839275222246405745257275088548364400416034343698203092071027820249, + 21888242871839275222246405745257275088548364400416034343698203136674532788470, 395079883700210, - 3993855325991985, - 3286714934511478, - 2312086303535827, + 21888242871839275222246405745257275088548364400416034343698203676831506723889, + 21888242871839275222246405745257275088548364400416034343698202969691115243382, + 21888242871839275222246405745257275088548364400416034343698201995062484267731, 1185769814679377, 1953112846066343, - 4165072485321269, - 3234962683307407, - 4224115166311261, - 2659789685641266, + 21888242871839275222246405745257275088548364400416034343698203848048666053173, + 21888242871839275222246405745257275088548364400416034343698202917938864039311, + 21888242871839275222246405745257275088548364400416034343698203907091347043165, + 21888242871839275222246405745257275088548364400416034343698202342765866373170, 20918600127472, 873340860327589, 2012426424743885, @@ -8506,1140 +8506,1140 @@ pub global CRP: [Polynomial; L] = [ 1814048311578389, 156604170723849, 782480307359606, - 2934881250312407, + 21888242871839275222246405745257275088548364400416034343698202617857431044311, 1878282672072136, - 2301380715851358, + 21888242871839275222246405745257275088548364400416034343698201984356896583262, 1857630956648339, 113933001542152, 381457147417051, - 3834653737160287, - 3679484767329080, + 21888242871839275222246405745257275088548364400416034343698203517629917892191, + 21888242871839275222246405745257275088548364400416034343698203362460948060984, 1705088306434939, 2098188395506227, - 3661025168616617, - 3153267934524116, + 21888242871839275222246405745257275088548364400416034343698203344001349348521, + 21888242871839275222246405745257275088548364400416034343698202836244115256020, 200552146805755, 541113780006847, 974353282538665, - 3636061829082358, + 21888242871839275222246405745257275088548364400416034343698203319038009814262, 1868150297358538, 246053586815190, 1827932194426836, - 3735325814516842, + 21888242871839275222246405745257275088548364400416034343698203418301995248746, 523627131172919, 1173006407350799, - 2871496731432758, - 3754325942282638, - 3094989462166791, + 21888242871839275222246405745257275088548364400416034343698202554472912164662, + 21888242871839275222246405745257275088548364400416034343698203437302123014542, + 21888242871839275222246405745257275088548364400416034343698202777965642898695, 157097333644095, - 3065361388263981, + 21888242871839275222246405745257275088548364400416034343698202748337568995885, 2191081176927852, 670640915462641, - 4319711752883502, - 4367100260465197, - 4310531650478140, + 21888242871839275222246405745257275088548364400416034343698204002687933615406, + 21888242871839275222246405745257275088548364400416034343698204050076441197101, + 21888242871839275222246405745257275088548364400416034343698203993507831210044, 425181681244760, 530497606298388, 2001730935019035, - 3466547507749480, + 21888242871839275222246405745257275088548364400416034343698203149523688481384, 1686958028128752, 1589314611341684, 982959816008650, - 2619009268614561, + 21888242871839275222246405745257275088548364400416034343698202301985449346465, 1202661014170342, 1874174441434625, 1460900637354197, 2249223984363436, 1985120841716216, - 2474955427754871, + 21888242871839275222246405745257275088548364400416034343698202157931608486775, 2042133995712545, 1437417975865558, 725734340629821, 885382759768426, 1707699601726873, - 3955717444728056, - 2989207719953259, + 21888242871839275222246405745257275088548364400416034343698203638693625459960, + 21888242871839275222246405745257275088548364400416034343698202672183900685163, 1891160288597393, 705504047188747, - 3908295736043000, - 2729855078256445, - 3538314078227013, - 3907349516824310, - 3397099794888980, + 21888242871839275222246405745257275088548364400416034343698203591271916774904, + 21888242871839275222246405745257275088548364400416034343698202412831258988349, + 21888242871839275222246405745257275088548364400416034343698203221290258958917, + 21888242871839275222246405745257275088548364400416034343698203590325697556214, + 21888242871839275222246405745257275088548364400416034343698203080075975620884, 1495974568229722, 265584549999166, 1673374231751074, - 3520532207288531, + 21888242871839275222246405745257275088548364400416034343698203203508388020435, 527704985264254, - 4084689030988143, - 2531427865187871, + 21888242871839275222246405745257275088548364400416034343698203767665211720047, + 21888242871839275222246405745257275088548364400416034343698202214404045919775, 897877630369920, - 2610981601864140, + 21888242871839275222246405745257275088548364400416034343698202293957782596044, 1068937039655307, - 4267365930647582, - 2947766849148751, - 3126794053090390, - 4354144618602601, + 21888242871839275222246405745257275088548364400416034343698203950342111379486, + 21888242871839275222246405745257275088548364400416034343698202630743029880655, + 21888242871839275222246405745257275088548364400416034343698202809770233822294, + 21888242871839275222246405745257275088548364400416034343698204037120799334505, 711208765702515, 792608927562808, - 4472299452686219, + 21888242871839275222246405745257275088548364400416034343698204155275633418123, 1268799530961853, 2094590841948702, 1761134382142128, 1963172845910719, - 2685624919422873, + 21888242871839275222246405745257275088548364400416034343698202368601100154777, 711141499175943, 1600309339602920, 1595159141142374, 428139741340326, 654796515582599, - 3605493798764468, + 21888242871839275222246405745257275088548364400416034343698203288469979496372, 1220984735224572, 2224462654190039, - 4297581312202447, + 21888242871839275222246405745257275088548364400416034343698203980557492934351, 314724235339195, - 2831321828302413, - 2448860237631110, - 3522305392026664, + 21888242871839275222246405745257275088548364400416034343698202514298009034317, + 21888242871839275222246405745257275088548364400416034343698202131836418363014, + 21888242871839275222246405745257275088548364400416034343698203205281572758568, 1233237281936258, - 2836255137409238, - 4316784235539616, - 3926989827345371, - 4044884818220206, + 21888242871839275222246405745257275088548364400416034343698202519231318141142, + 21888242871839275222246405745257275088548364400416034343698203999760416271520, + 21888242871839275222246405745257275088548364400416034343698203609966008077275, + 21888242871839275222246405745257275088548364400416034343698203727860998952110, 1523509714120605, 131593755483213, 468327038822001, - 3358851136498131, + 21888242871839275222246405745257275088548364400416034343698203041827317230035, 759986845666431, 816720812577511, 1398634466159645, 468589526447011, 1150835085896104, - 2702517854253920, + 21888242871839275222246405745257275088548364400416034343698202385494034985824, 1982172154606133, 1877388343559676, 1810793044865233, 997540870614680, - 3414075331495216, + 21888242871839275222246405745257275088548364400416034343698203097051512227120, 111614526397729, - 4111721248048480, + 21888242871839275222246405745257275088548364400416034343698203794697428780384, 28251623297883, - 4224358802407957, + 21888242871839275222246405745257275088548364400416034343698203907334983139861, 1970431067945883, - 4047776695323735, - 3061985870087222, + 21888242871839275222246405745257275088548364400416034343698203730752876055639, + 21888242871839275222246405745257275088548364400416034343698202744962050819126, 471825365201060, 1804122050841371, 511730260366255, 1575824262573135, - 4117848598662790, - 3850328604769625, - 4222479411837260, + 21888242871839275222246405745257275088548364400416034343698203800824779394694, + 21888242871839275222246405745257275088548364400416034343698203533304785501529, + 21888242871839275222246405745257275088548364400416034343698203905455592569164, 199045433749715, - 3274796145501722, + 21888242871839275222246405745257275088548364400416034343698202957772326233626, 1589545800514481, - 2603670272806864, + 21888242871839275222246405745257275088548364400416034343698202286646453538768, 616098749653245, 617983652588954, - 2730029420614326, + 21888242871839275222246405745257275088548364400416034343698202413005601346230, 2075634348738290, - 2404826583338091, - 3060691593695290, - 4434396914833903, + 21888242871839275222246405745257275088548364400416034343698202087802764069995, + 21888242871839275222246405745257275088548364400416034343698202743667774427194, + 21888242871839275222246405745257275088548364400416034343698204117373095565807, 1623781268478798, - 4492486293677584, - 3600770325340884, - 2790951075574138, + 21888242871839275222246405745257275088548364400416034343698204175462474409488, + 21888242871839275222246405745257275088548364400416034343698203283746506072788, + 21888242871839275222246405745257275088548364400416034343698202473927256306042, 664007131324437, 480771447832994, 715969507433920, 1066619023583825, - 3194601321283153, - 2512496479564904, - 2873425475304110, - 2726592184746862, + 21888242871839275222246405745257275088548364400416034343698202877577502015057, + 21888242871839275222246405745257275088548364400416034343698202195472660296808, + 21888242871839275222246405745257275088548364400416034343698202556401656036014, + 21888242871839275222246405745257275088548364400416034343698202409568365478766, 1799265915477273, 607289574084896, 1020116338171348, 2190266419270738, 1187267470563505, - 3907677192486333, - 2365455999561710, + 21888242871839275222246405745257275088548364400416034343698203590653373218237, + 21888242871839275222246405745257275088548364400416034343698202048432180293614, 349621251913423, - 2516364189349622, - 2673034818521952, + 21888242871839275222246405745257275088548364400416034343698202199340370081526, + 21888242871839275222246405745257275088548364400416034343698202356010999253856, 137110760681915, - 4108729041345120, - 2871132671823685, - 3362126334431717, - 3475528159353135, + 21888242871839275222246405745257275088548364400416034343698203791705222077024, + 21888242871839275222246405745257275088548364400416034343698202554108852555589, + 21888242871839275222246405745257275088548364400416034343698203045102515163621, + 21888242871839275222246405745257275088548364400416034343698203158504340085039, 1303919898219413, 1040582887804332, 979557576288775, - 2329383410527079, - 4311335212430257, - 3797653092194246, - 2484614573877187, - 3314916954234734, + 21888242871839275222246405745257275088548364400416034343698202012359591258983, + 21888242871839275222246405745257275088548364400416034343698203994311393162161, + 21888242871839275222246405745257275088548364400416034343698203480629272926150, + 21888242871839275222246405745257275088548364400416034343698202167590754609091, + 21888242871839275222246405745257275088548364400416034343698202997893134966638, 656369278018670, - 2717724565734286, - 2459307411194627, - 3456247278170361, - 3679083033155853, + 21888242871839275222246405745257275088548364400416034343698202400700746466190, + 21888242871839275222246405745257275088548364400416034343698202142283591926531, + 21888242871839275222246405745257275088548364400416034343698203139223458902265, + 21888242871839275222246405745257275088548364400416034343698203362059213887757, 2099387890687603, 1427808797607046, 500545106400972, 1444664556739739, 2201068687070347, 2213241795387114, - 3419634758887780, - 3656145999110019, - 2372308608697279, + 21888242871839275222246405745257275088548364400416034343698203102610939619684, + 21888242871839275222246405745257275088548364400416034343698203339122179841923, + 21888242871839275222246405745257275088548364400416034343698202055284789429183, 918519772521724, - 2679031360749865, - 2398688115005104, + 21888242871839275222246405745257275088548364400416034343698202362007541481769, + 21888242871839275222246405745257275088548364400416034343698202081664295737008, 1409526732103575, - 3637685815471439, - 3094023378597028, + 21888242871839275222246405745257275088548364400416034343698203320661996203343, + 21888242871839275222246405745257275088548364400416034343698202776999559328932, 1192837628250212, - 4294075740045468, - 2626627082140613, + 21888242871839275222246405745257275088548364400416034343698203977051920777372, + 21888242871839275222246405745257275088548364400416034343698202309603262872517, 635759304008331, 593014422107381, 418807865097042, 2235548915295989, 1428387358223534, - 2957318075793229, + 21888242871839275222246405745257275088548364400416034343698202640294256525133, 1823201130983403, 849611828504907, 1540753942898962, 1593743715699526, - 4412045087685594, - 3146109931830205, + 21888242871839275222246405745257275088548364400416034343698204095021268417498, + 21888242871839275222246405745257275088548364400416034343698202829086112562109, 818329119903453, 2158507279648140, 1937396103066770, - 4252257963229712, - 2837877165737762, + 21888242871839275222246405745257275088548364400416034343698203935234143961616, + 21888242871839275222246405745257275088548364400416034343698202520853346469666, 1486410098971542, - 3911558301284349, - 2742767118888364, - 2814660609376577, - 2521629463303803, + 21888242871839275222246405745257275088548364400416034343698203594534482016253, + 21888242871839275222246405745257275088548364400416034343698202425743299620268, + 21888242871839275222246405745257275088548364400416034343698202497636790108481, + 21888242871839275222246405745257275088548364400416034343698202204605644035707, 835931819158832, 988402657305232, 27918844009901, 1409320300758333, - 2897848762824963, + 21888242871839275222246405745257275088548364400416034343698202580824943556867, 1033122678714662, - 2520811548936588, - 3498159318839631, - 4422229604043951, + 21888242871839275222246405745257275088548364400416034343698202203787729668492, + 21888242871839275222246405745257275088548364400416034343698203181135499571535, + 21888242871839275222246405745257275088548364400416034343698204105205784775855, 569448879406883, - 4244340736573759, - 2475743990419402, + 21888242871839275222246405745257275088548364400416034343698203927316917305663, + 21888242871839275222246405745257275088548364400416034343698202158720171151306, 540024792443553, - 2976167751295323, + 21888242871839275222246405745257275088548364400416034343698202659143932027227, 2123148700992722, 1102701484805643, 126354320551025, - 4432910043037901, + 21888242871839275222246405745257275088548364400416034343698204115886223769805, 1789808634292908, - 2515135352270853, + 21888242871839275222246405745257275088548364400416034343698202198111533002757, 1376536021637045, - 3410670684381957, + 21888242871839275222246405745257275088548364400416034343698203093646865113861, 401529407872027, - 3561716166732482, - 3090093069678881, + 21888242871839275222246405745257275088548364400416034343698203244692347464386, + 21888242871839275222246405745257275088548364400416034343698202773069250410785, 1548759574240053, - 3855664402025316, + 21888242871839275222246405745257275088548364400416034343698203538640582757220, 127259206656621, 625784485950444, - 3698538489481773, + 21888242871839275222246405745257275088548364400416034343698203381514670213677, 1710328912542643, 1986388772696301, 324437331416268, - 2629671728394238, + 21888242871839275222246405745257275088548364400416034343698202312647909126142, 1675655323591566, - 2579366035762593, + 21888242871839275222246405745257275088548364400416034343698202262342216494497, 65456324487857, - 3690620481454386, - 3146828668929434, + 21888242871839275222246405745257275088548364400416034343698203373596662186290, + 21888242871839275222246405745257275088548364400416034343698202829804849661338, 694982447957077, 785825976120100, - 3950911840713603, - 4047885102102141, + 21888242871839275222246405745257275088548364400416034343698203633888021445507, + 21888242871839275222246405745257275088548364400416034343698203730861282834045, 1829450731695783, 1502174047603917, 1935916107641128, - 4489176944267433, + 21888242871839275222246405745257275088548364400416034343698204172153124999337, 1649318085604482, - 2684940537399612, - 3797486350139150, - 4256914230350016, + 21888242871839275222246405745257275088548364400416034343698202367916718131516, + 21888242871839275222246405745257275088548364400416034343698203480462530871054, + 21888242871839275222246405745257275088548364400416034343698203939890411081920, 1690120282393026, - 4299482138867147, + 21888242871839275222246405745257275088548364400416034343698203982458319599051, 1642257370435619, 1308136204577066, - 3028024858223987, - 2464771056329878, - 4288925604617777, - 2630631142323192, - 3305819221086599, + 21888242871839275222246405745257275088548364400416034343698202711001038955891, + 21888242871839275222246405745257275088548364400416034343698202147747237061782, + 21888242871839275222246405745257275088548364400416034343698203971901785349681, + 21888242871839275222246405745257275088548364400416034343698202313607323055096, + 21888242871839275222246405745257275088548364400416034343698202988795401818503, 442645102896493, 346959993549361, - 3782154698156209, - 3954370651600396, + 21888242871839275222246405745257275088548364400416034343698203465130878888113, + 21888242871839275222246405745257275088548364400416034343698203637346832332300, 303968527993501, - 3359737728397478, - 2270136648669637, + 21888242871839275222246405745257275088548364400416034343698203042713909129382, + 21888242871839275222246405745257275088548364400416034343698201953112829401541, 534137308792945, 1634869965246732, - 4140993959374829, - 2342773201022904, - 3546342800418112, + 21888242871839275222246405745257275088548364400416034343698203823970140106733, + 21888242871839275222246405745257275088548364400416034343698202025749381754808, + 21888242871839275222246405745257275088548364400416034343698203229318981150016, 416164099047294, - 4153407703599652, - 3502505027790490, + 21888242871839275222246405745257275088548364400416034343698203836383884331556, + 21888242871839275222246405745257275088548364400416034343698203185481208522394, 850192472513582, 1500333211286159, 33464857198901, 2250075518174365, 1476248073535463, 1634094067497206, - 3617750458358882, + 21888242871839275222246405745257275088548364400416034343698203300726639090786, 414669447470745, - 4387091296822774, + 21888242871839275222246405745257275088548364400416034343698204070067477554678, 704233343304936, - 3049676518418919, + 21888242871839275222246405745257275088548364400416034343698202732652699150823, 219021497945415, - 3273031354737780, - 2744707641505543, - 2925596368416979, + 21888242871839275222246405745257275088548364400416034343698202956007535469684, + 21888242871839275222246405745257275088548364400416034343698202427683822237447, + 21888242871839275222246405745257275088548364400416034343698202608572549148883, 230860325948479, - 4012941440396484, + 21888242871839275222246405745257275088548364400416034343698203695917621128388, 1217598316805552, 1825636854997798, - 3113021200545486, - 3226140597229955, - 3332581901432963, + 21888242871839275222246405745257275088548364400416034343698202795997381277390, + 21888242871839275222246405745257275088548364400416034343698202909116777961859, + 21888242871839275222246405745257275088548364400416034343698203015558082164867, 1092052445043192, - 3394133013331233, + 21888242871839275222246405745257275088548364400416034343698203077109194063137, 267386537574429, - 3595031946322491, - 4197755799480918, + 21888242871839275222246405745257275088548364400416034343698203278008127054395, + 21888242871839275222246405745257275088548364400416034343698203880731980212822, 1879156207927583, - 2891044617841325, + 21888242871839275222246405745257275088548364400416034343698202574020798573229, 693888529410568, - 2404301159989932, - 2669123695131546, - 3787838292551228, - 3595267865024971, - 3132370607742343, + 21888242871839275222246405745257275088548364400416034343698202087277340721836, + 21888242871839275222246405745257275088548364400416034343698202352099875863450, + 21888242871839275222246405745257275088548364400416034343698203470814473283132, + 21888242871839275222246405745257275088548364400416034343698203278244045756875, + 21888242871839275222246405745257275088548364400416034343698202815346788474247, 984625223002309, - 4228022661428237, - 3027135735157889, - 2529995997153401, + 21888242871839275222246405745257275088548364400416034343698203910998842160141, + 21888242871839275222246405745257275088548364400416034343698202710111915889793, + 21888242871839275222246405745257275088548364400416034343698202212972177885305, 1253390395684815, 1579662429327919, - 2905072561336716, + 21888242871839275222246405745257275088548364400416034343698202588048742068620, 2189908261508651, 1867869372780110, - 4080375489484708, - 3215276265441676, - 2383493075700085, + 21888242871839275222246405745257275088548364400416034343698203763351670216612, + 21888242871839275222246405745257275088548364400416034343698202898252446173580, + 21888242871839275222246405745257275088548364400416034343698202066469256431989, 1850856717607255, 1305452182818230, - 2489336975513367, + 21888242871839275222246405745257275088548364400416034343698202172313156245271, 1479675637722073, - 3352116692029413, - 3333661210642060, - 4496546848349721, + 21888242871839275222246405745257275088548364400416034343698203035092872761317, + 21888242871839275222246405745257275088548364400416034343698203016637391373964, + 21888242871839275222246405745257275088548364400416034343698204179523029081625, 1310177548620138, - 3439562273785475, - 4108668267249656, - 3562243153284911, - 2968693609991460, - 3581399962382788, - 2257234819700783, + 21888242871839275222246405745257275088548364400416034343698203122538454517379, + 21888242871839275222246405745257275088548364400416034343698203791644447981560, + 21888242871839275222246405745257275088548364400416034343698203245219334016815, + 21888242871839275222246405745257275088548364400416034343698202651669790723364, + 21888242871839275222246405745257275088548364400416034343698203264376143114692, + 21888242871839275222246405745257275088548364400416034343698201940211000432687, 1502047467829418, 1930415194162397, 1769848244515452, 1007748606814, 762829930637240, 2132385160272122, - 4233116099019325, - 3883739893788609, - 2281973804902881, - 2654330549427160, + 21888242871839275222246405745257275088548364400416034343698203916092279751229, + 21888242871839275222246405745257275088548364400416034343698203566716074520513, + 21888242871839275222246405745257275088548364400416034343698201964949985634785, + 21888242871839275222246405745257275088548364400416034343698202337306730159064, 1264902902501266, 851481930813946, - 4094959681554677, + 21888242871839275222246405745257275088548364400416034343698203777935862286581, 2113356339387060, - 2309920546672068, - 3727651699267167, + 21888242871839275222246405745257275088548364400416034343698201992896727403972, + 21888242871839275222246405745257275088548364400416034343698203410627879999071, 320926657288010, - 4197750206709232, + 21888242871839275222246405745257275088548364400416034343698203880726387441136, 1720280317668158, 1999304443998219, - 3570793849613283, + 21888242871839275222246405745257275088548364400416034343698203253770030345187, 5174811826616, - 4448748512315802, + 21888242871839275222246405745257275088548364400416034343698204131724693047706, 1825083102822107, 1441413426507152, - 2651019020898537, + 21888242871839275222246405745257275088548364400416034343698202333995201630441, 1198220075836161, - 4308898507908926, - 2571636050740815, - 3305288889312867, - 4255992451339749, - 4142564316623289, + 21888242871839275222246405745257275088548364400416034343698203991874688640830, + 21888242871839275222246405745257275088548364400416034343698202254612231472719, + 21888242871839275222246405745257275088548364400416034343698202988265070044771, + 21888242871839275222246405745257275088548364400416034343698203938968632071653, + 21888242871839275222246405745257275088548364400416034343698203825540497355193, 1490689637787235, - 3079634426428205, - 2637311206186061, - 3401489524285607, + 21888242871839275222246405745257275088548364400416034343698202762610607160109, + 21888242871839275222246405745257275088548364400416034343698202320287386917965, + 21888242871839275222246405745257275088548364400416034343698203084465705017511, 644785117135046, 1086710270172013, - 4208035886509627, + 21888242871839275222246405745257275088548364400416034343698203891012067241531, 2065264571590560, 109670409479614, 942796989210366, 1868653989698632, 292276197749467, - 3508126896948033, + 21888242871839275222246405745257275088548364400416034343698203191103077679937, 2157099113104235, 1990842248313844, - 3308641452596724, + 21888242871839275222246405745257275088548364400416034343698202991617633328628, 965650639045913, 1135530808252008, - 2671795689834172, - 4481421048501360, - 2848266995680723, + 21888242871839275222246405745257275088548364400416034343698202354771870566076, + 21888242871839275222246405745257275088548364400416034343698204164397229233264, + 21888242871839275222246405745257275088548364400416034343698202531243176412627, 393524149710508, 1825863942720547, 1932034394012512, - 2615982921828507, - 2549290322609095, + 21888242871839275222246405745257275088548364400416034343698202298959102560411, + 21888242871839275222246405745257275088548364400416034343698202232266503340999, 1124732408873797, 51119621054239, 1665133045686940, 358348941392399, 2054249309557432, - 4303559922178122, + 21888242871839275222246405745257275088548364400416034343698203986536102910026, 2047831233798143, - 2493569679935800, - 4153035237890067, - 3092778242637653, - 2774624235149789, + 21888242871839275222246405745257275088548364400416034343698202176545860667704, + 21888242871839275222246405745257275088548364400416034343698203836011418621971, + 21888242871839275222246405745257275088548364400416034343698202775754423369557, + 21888242871839275222246405745257275088548364400416034343698202457600415881693, 42625890497408, 72715811381520, 1670831718706428, - 2620455329093520, + 21888242871839275222246405745257275088548364400416034343698202303431509825424, 1567489406575886, 2235327959562310, - 2367793308263847, - 3440897742005027, - 2677886947664615, + 21888242871839275222246405745257275088548364400416034343698202050769488995751, + 21888242871839275222246405745257275088548364400416034343698203123873922736931, + 21888242871839275222246405745257275088548364400416034343698202360863128396519, 1071838694398155, 856761547389523, 1383821880760892, - 2877271849119151, - 2319623552055481, + 21888242871839275222246405745257275088548364400416034343698202560248029851055, + 21888242871839275222246405745257275088548364400416034343698202002599732787385, 1597763719310762, 663471853821741, 1170527632589669, - 3307082519273312, - 3482245489482386, - 3427546709621916, - 4262276600345516, - 2590625050492349, + 21888242871839275222246405745257275088548364400416034343698202990058700005216, + 21888242871839275222246405745257275088548364400416034343698203165221670214290, + 21888242871839275222246405745257275088548364400416034343698203110522890353820, + 21888242871839275222246405745257275088548364400416034343698203945252781077420, + 21888242871839275222246405745257275088548364400416034343698202273601231224253, 1285670763801980, - 3267257276520605, - 3289911974642645, - 3036803542557770, + 21888242871839275222246405745257275088548364400416034343698202950233457252509, + 21888242871839275222246405745257275088548364400416034343698202972888155374549, + 21888242871839275222246405745257275088548364400416034343698202719779723289674, 818427527909015, - 3340650029958064, + 21888242871839275222246405745257275088548364400416034343698203023626210689968, 1348302325147558, 2054518598309304, 1226269354509830, 1078388697138164, - 2381044906207261, + 21888242871839275222246405745257275088548364400416034343698202064021086939165, 1431186888790701, - 2681767199926806, + 21888242871839275222246405745257275088548364400416034343698202364743380658710, 270252592237011, - 3678509200204352, + 21888242871839275222246405745257275088548364400416034343698203361485380936256, 124493839645619, - 2333243386020458, - 4500963806338354, - 3241547639166326, - 4129282267762867, + 21888242871839275222246405745257275088548364400416034343698202016219566752362, + 21888242871839275222246405745257275088548364400416034343698204183939987070258, + 21888242871839275222246405745257275088548364400416034343698202924523819898230, + 21888242871839275222246405745257275088548364400416034343698203812258448494771, 117759556286415, - 4098269818203193, + 21888242871839275222246405745257275088548364400416034343698203781245998935097, 1882585124713112, 1215163522243392, - 4148150029317441, - 3320391251501710, + 21888242871839275222246405745257275088548364400416034343698203831126210049345, + 21888242871839275222246405745257275088548364400416034343698203003367432233614, 633667438209566, 263837250274233, 185713983475683, 1111105964220169, - 3912106401982889, - 3057215010559727, - 3447887655407132, - 3271010322101067, - 2700391378419846, + 21888242871839275222246405745257275088548364400416034343698203595082582714793, + 21888242871839275222246405745257275088548364400416034343698202740191191291631, + 21888242871839275222246405745257275088548364400416034343698203130863836139036, + 21888242871839275222246405745257275088548364400416034343698202953986502832971, + 21888242871839275222246405745257275088548364400416034343698202383367559151750, 105311689432659, - 2369182776381164, + 21888242871839275222246405745257275088548364400416034343698202052158957113068, 1877686664335902, - 3880588997787778, - 3218704496556890, - 2668547442015069, - 2848093553936306, - 2821724782934389, - 4426007900627086, - 2595137805326329, + 21888242871839275222246405745257275088548364400416034343698203563565178519682, + 21888242871839275222246405745257275088548364400416034343698202901680677288794, + 21888242871839275222246405745257275088548364400416034343698202351523622746973, + 21888242871839275222246405745257275088548364400416034343698202531069734668210, + 21888242871839275222246405745257275088548364400416034343698202504700963666293, + 21888242871839275222246405745257275088548364400416034343698204108984081358990, + 21888242871839275222246405745257275088548364400416034343698202278113986058233, 1506838997607717, - 4443686635565671, + 21888242871839275222246405745257275088548364400416034343698204126662816297575, 101223356683652, 1091362883235039, 621652082152973, - 2791741504613115, - 2544441070610256, + 21888242871839275222246405745257275088548364400416034343698202474717685345019, + 21888242871839275222246405745257275088548364400416034343698202227417251342160, 440334731682512, 2219354038027648, 1044230943183280, 533821791950591, - 3884368544965821, + 21888242871839275222246405745257275088548364400416034343698203567344725697725, 312086549613718, - 2928225144645102, + 21888242871839275222246405745257275088548364400416034343698202611201325377006, 228943183231248, - 2308410777784465, - 3150443514398140, + 21888242871839275222246405745257275088548364400416034343698201991386958516369, + 21888242871839275222246405745257275088548364400416034343698202833419695130044, 2184583858488833, - 3770017078433651, + 21888242871839275222246405745257275088548364400416034343698203452993259165555, 1139848439888608, - 2793291642434822, + 21888242871839275222246405745257275088548364400416034343698202476267823166726, 1919059437790868, - 3867315410427572, - 2882229190769212, - 2554948831818522, - 4227164362988865, - 4427118261150254, - 2501831412675556, - 4237002100300906, - 4122843133103426, + 21888242871839275222246405745257275088548364400416034343698203550291591159476, + 21888242871839275222246405745257275088548364400416034343698202565205371501116, + 21888242871839275222246405745257275088548364400416034343698202237925012550426, + 21888242871839275222246405745257275088548364400416034343698203910140543720769, + 21888242871839275222246405745257275088548364400416034343698204110094441882158, + 21888242871839275222246405745257275088548364400416034343698202184807593407460, + 21888242871839275222246405745257275088548364400416034343698203919978281032810, + 21888242871839275222246405745257275088548364400416034343698203805819313835330, 925044107880171, 1467030136223987, - 3273176423195765, - 3361621354503468, + 21888242871839275222246405745257275088548364400416034343698202956152603927669, + 21888242871839275222246405745257275088548364400416034343698203044597535235372, 1210328583605600, - 2999902733544960, - 4125529654136782, + 21888242871839275222246405745257275088548364400416034343698202682878914276864, + 21888242871839275222246405745257275088548364400416034343698203808505834868686, 411657026925263, 608415437951768, - 2843638133901017, + 21888242871839275222246405745257275088548364400416034343698202526614314632921, 1041747092282432, 1884163421054307, - 4362658578755220, - 3794462802292005, - 4306595479988219, + 21888242871839275222246405745257275088548364400416034343698204045634759487124, + 21888242871839275222246405745257275088548364400416034343698203477438983023909, + 21888242871839275222246405745257275088548364400416034343698203989571660720123, 79760119798128, - 2585251350138655, + 21888242871839275222246405745257275088548364400416034343698202268227530870559, 2168050841260492, 476591156671192, 169056292773498, 957565012844789, 1589733223523330, - 4255705233899264, - 3185597432281977, - 4323475576266566, - 2720098466715220, + 21888242871839275222246405745257275088548364400416034343698203938681414631168, + 21888242871839275222246405745257275088548364400416034343698202868573613013881, + 21888242871839275222246405745257275088548364400416034343698204006451756998470, + 21888242871839275222246405745257275088548364400416034343698202403074647447124, 560264374615789, 558067697360870, - 2331352594075155, - 2687509570634217, + 21888242871839275222246405745257275088548364400416034343698202014328774807059, + 21888242871839275222246405745257275088548364400416034343698202370485751366121, 2229033493368685, 593628214088414, - 3355589067118406, + 21888242871839275222246405745257275088548364400416034343698203038565247850310, 506846778365619, - 2475323391430938, + 21888242871839275222246405745257275088548364400416034343698202158299572162842, 693343727309222, 341423434621227, 230990735773837, 113561165821619, - 3444604797117865, - 2869665974725174, + 21888242871839275222246405745257275088548364400416034343698203127580977849769, + 21888242871839275222246405745257275088548364400416034343698202552642155457078, 809832441056230, - 3344741246189990, - 3578227603028518, + 21888242871839275222246405745257275088548364400416034343698203027717426921894, + 21888242871839275222246405745257275088548364400416034343698203261203783760422, 1542769662187132, - 2706275796624279, + 21888242871839275222246405745257275088548364400416034343698202389251977356183, 1106903448268640, 574090670638413, 1681650969144415, 2075796394758754, 1203912501407512, - 3747089339839404, + 21888242871839275222246405745257275088548364400416034343698203430065520571308, 662272013201702, 1908683407098775, 706742208487431, 1403870493290747, - 2298191097879491, - 2837970893925736, - 3727543514728984, + 21888242871839275222246405745257275088548364400416034343698201981167278611395, + 21888242871839275222246405745257275088548364400416034343698202520947074657640, + 21888242871839275222246405745257275088548364400416034343698203410519695460888, 1924373650924459, - 2346074950206712, + 21888242871839275222246405745257275088548364400416034343698202029051130938616, 646130348066415, - 2707642667830913, - 2254253911896172, + 21888242871839275222246405745257275088548364400416034343698202390618848562817, + 21888242871839275222246405745257275088548364400416034343698201937230092628076, 986203159146752, 1874751408521655, - 2873472639846524, + 21888242871839275222246405745257275088548364400416034343698202556448820578428, 614131881807121, 288616907164399, - 3955893374533768, + 21888242871839275222246405745257275088548364400416034343698203638869555265672, 376028336624428, 1002488718193018, - 4130672759215562, - 2307840055746729, - 3937932915951077, + 21888242871839275222246405745257275088548364400416034343698203813648939947466, + 21888242871839275222246405745257275088548364400416034343698201990816236478633, + 21888242871839275222246405745257275088548364400416034343698203620909096682981, 495903499362916, 1968603650396154, 1300749752425792, - 2580961462442187, - 3575096008909080, - 3594673059029819, - 2711047780656727, - 2419192140433647, + 21888242871839275222246405745257275088548364400416034343698202263937643174091, + 21888242871839275222246405745257275088548364400416034343698203258072189640984, + 21888242871839275222246405745257275088548364400416034343698203277649239761723, + 21888242871839275222246405745257275088548364400416034343698202394023961388631, + 21888242871839275222246405745257275088548364400416034343698202102168321165551, 2199694370032941, - 3447357884721260, + 21888242871839275222246405745257275088548364400416034343698203130334065453164, 1228820128815576, - 3965855176767547, + 21888242871839275222246405745257275088548364400416034343698203648831357499451, 1506456061014397, 538047312514451, 1022449814619475, - 2784036435176028, - 3630106587720577, - 3431962581415892, - 3183319416186215, + 21888242871839275222246405745257275088548364400416034343698202467012615907932, + 21888242871839275222246405745257275088548364400416034343698203313082768452481, + 21888242871839275222246405745257275088548364400416034343698203114938762147796, + 21888242871839275222246405745257275088548364400416034343698202866295596918119, 1747783964832358, 1918635506209138, - 2396930635737018, + 21888242871839275222246405745257275088548364400416034343698202079906816468922, 2015289955728382, - 4022176584412386, + 21888242871839275222246405745257275088548364400416034343698203705152765144290, 589601948148532, 542971780511780, 1512176783351858, 2178500843362702, - 2644490822723311, + 21888242871839275222246405745257275088548364400416034343698202327467003455215, 2218619807256913, 892042726387793, - 2389625949854478, + 21888242871839275222246405745257275088548364400416034343698202072602130586382, 849907546027828, - 3181255821853969, + 21888242871839275222246405745257275088548364400416034343698202864232002585873, 1746424660930241, - 3762202942101376, + 21888242871839275222246405745257275088548364400416034343698203445179122833280, 658242164094334, - 4387685365782091, - 2683493692503050, + 21888242871839275222246405745257275088548364400416034343698204070661546513995, + 21888242871839275222246405745257275088548364400416034343698202366469873234954, 251444964609323, 1255326617879506, 1177116814650126, 1326209315465387, - 4110374989637319, + 21888242871839275222246405745257275088548364400416034343698203793351170369223, 2029174225211906, 1988988659005184, - 3399189493327748, + 21888242871839275222246405745257275088548364400416034343698203082165674059652, 1788709342433149, - 3680243139558927, - 2440217409988079, - 4129711571872669, + 21888242871839275222246405745257275088548364400416034343698203363219320290831, + 21888242871839275222246405745257275088548364400416034343698202123193590719983, + 21888242871839275222246405745257275088548364400416034343698203812687752604573, 34378960708485, 1625588387069642, - 3066547495780424, - 3316285871700182, + 21888242871839275222246405745257275088548364400416034343698202749523676512328, + 21888242871839275222246405745257275088548364400416034343698202999262052432086, 2222793398452401, 489434251051641, 678025635283548, 1867679633274257, - 2770703192904795, + 21888242871839275222246405745257275088548364400416034343698202453679373636699, 4992410112939, - 3403475599303088, - 3677868427678030, + 21888242871839275222246405745257275088548364400416034343698203086451780034992, + 21888242871839275222246405745257275088548364400416034343698203360844608409934, 1666715322053908, - 3364637375133539, + 21888242871839275222246405745257275088548364400416034343698203047613555865443, 1430247377560146, - 2696659691041142, - 2715380442295721, - 3518520597128780, + 21888242871839275222246405745257275088548364400416034343698202379635871773046, + 21888242871839275222246405745257275088548364400416034343698202398356623027625, + 21888242871839275222246405745257275088548364400416034343698203201496777860684, 1994449723633159, 1270696919442560, 1952074785569864, 1377615659659643, 1971221486729540, 366328278965346, - 3445286338573344, - 4203913443128432, - 3679891932550865, - 4392924275805560, - 2786627598839405, + 21888242871839275222246405745257275088548364400416034343698203128262519305248, + 21888242871839275222246405745257275088548364400416034343698203886889623860336, + 21888242871839275222246405745257275088548364400416034343698203362868113282769, + 21888242871839275222246405745257275088548364400416034343698204075900456537464, + 21888242871839275222246405745257275088548364400416034343698202469603779571309, 2003988823496437, - 4481370620191406, - 3833004359681330, - 2482008347981493, - 4079830814385929, + 21888242871839275222246405745257275088548364400416034343698204164346800923310, + 21888242871839275222246405745257275088548364400416034343698203515980540413234, + 21888242871839275222246405745257275088548364400416034343698202164984528713397, + 21888242871839275222246405745257275088548364400416034343698203762806995117833, 2023699571185067, - 2984698448841908, - 2773184322326134, - 4276203556249316, - 3332559195883527, + 21888242871839275222246405745257275088548364400416034343698202667674629573812, + 21888242871839275222246405745257275088548364400416034343698202456160503058038, + 21888242871839275222246405745257275088548364400416034343698203959179736981220, + 21888242871839275222246405745257275088548364400416034343698203015535376615431, 1266969494835078, 765546091757204, 1973733366778546, 187417206633827, 1594962351618996, - 2984750775932386, + 21888242871839275222246405745257275088548364400416034343698202667726956664290, 2069522827765077, 748199238888155, 2054490538463042, 957040552147980, - 4447077520726664, - 2382530125455394, + 21888242871839275222246405745257275088548364400416034343698204130053701458568, + 21888242871839275222246405745257275088548364400416034343698202065506306187298, 467084127596369, 154239496405173, - 3184964256594620, + 21888242871839275222246405745257275088548364400416034343698202867940437326524, 2110749814855695, 350262100133177, - 3421208866178553, + 21888242871839275222246405745257275088548364400416034343698203104185046910457, 868253109612062, - 2916722327149931, - 3331380222099059, - 3300649892526074, - 3234715489638968, + 21888242871839275222246405745257275088548364400416034343698202599698507881835, + 21888242871839275222246405745257275088548364400416034343698203014356402830963, + 21888242871839275222246405745257275088548364400416034343698202983626073257978, + 21888242871839275222246405745257275088548364400416034343698202917691670370872, 2018706553869741, - 3075413098888995, + 21888242871839275222246405745257275088548364400416034343698202758389279620899, 323905296705835, - 3307060110300368, - 2368855490182516, + 21888242871839275222246405745257275088548364400416034343698202990036291032272, + 21888242871839275222246405745257275088548364400416034343698202051831670914420, 176785290202722, 1510642517409131, 1501863575264790, - 3678198434386744, + 21888242871839275222246405745257275088548364400416034343698203361174615118648, 712124992792173, - 3885763850816361, + 21888242871839275222246405745257275088548364400416034343698203568740031548265, 1807618378442033, - 2936576945954233, + 21888242871839275222246405745257275088548364400416034343698202619553126686137, 1736718779809125, 1705107262186766, 2213515310462843, 1216564029579295, - 2480831886060412, + 21888242871839275222246405745257275088548364400416034343698202163808066792316, 1286826889185407, - 4068807108381143, - 3256781417574745, + 21888242871839275222246405745257275088548364400416034343698203751783289113047, + 21888242871839275222246405745257275088548364400416034343698202939757598306649, 1227947299933744, 587973224292957, 1548230988620868, - 3839764199543640, - 3655268257076913, + 21888242871839275222246405745257275088548364400416034343698203522740380275544, + 21888242871839275222246405745257275088548364400416034343698203338244437808817, 2196593026814316, 1310986187802047, - 2939880632608460, + 21888242871839275222246405745257275088548364400416034343698202622856813340364, 1901357219326314, - 4434458634258540, - 4343484786265601, - 4084898897460318, + 21888242871839275222246405745257275088548364400416034343698204117434814990444, + 21888242871839275222246405745257275088548364400416034343698204026460966997505, + 21888242871839275222246405745257275088548364400416034343698203767875078192222, 1516930466216917, - 3551150633121499, + 21888242871839275222246405745257275088548364400416034343698203234126813853403, 486211655463167, - 2924155325220085, - 2733719010296135, + 21888242871839275222246405745257275088548364400416034343698202607131505951989, + 21888242871839275222246405745257275088548364400416034343698202416695191028039, 2148062139748764, - 2685741980703601, - 2656679868619861, - 3622969005254540, - 2659249048923437, + 21888242871839275222246405745257275088548364400416034343698202368718161435505, + 21888242871839275222246405745257275088548364400416034343698202339656049351765, + 21888242871839275222246405745257275088548364400416034343698203305945185986444, + 21888242871839275222246405745257275088548364400416034343698202342225229655341, 2163920101950506, - 2403465845195093, + 21888242871839275222246405745257275088548364400416034343698202086442025926997, 1210840436575993, 533828645750594, - 3008244344797978, + 21888242871839275222246405745257275088548364400416034343698202691220525529882, 1727231619536599, 135608010901782, 190749795760301, - 3251597738338454, - 3013247006705269, + 21888242871839275222246405745257275088548364400416034343698202934573919070358, + 21888242871839275222246405745257275088548364400416034343698202696223187437173, 1616245439688387, - 4467072063804518, - 2256927028935003, - 4424228459861442, + 21888242871839275222246405745257275088548364400416034343698204150048244536422, + 21888242871839275222246405745257275088548364400416034343698201939903209666907, + 21888242871839275222246405745257275088548364400416034343698204107204640593346, 1795085820132884, - 2866343086447908, + 21888242871839275222246405745257275088548364400416034343698202549319267179812, 1933351679723499, 1725745654209178, 885938141016896, 6899217349338, - 3684921344438981, - 3330816758627054, - 2410310112128876, + 21888242871839275222246405745257275088548364400416034343698203367897525170885, + 21888242871839275222246405745257275088548364400416034343698203013792939358958, + 21888242871839275222246405745257275088548364400416034343698202093286292860780, 1290227834620107, - 4274047794166638, + 21888242871839275222246405745257275088548364400416034343698203957023974898542, 1969575092639473, - 3515331474598783, + 21888242871839275222246405745257275088548364400416034343698203198307655330687, 842615061634228, 694493951900226, 985414860878263, - 3320514484763468, + 21888242871839275222246405745257275088548364400416034343698203003490665495372, 2055826971348805, - 4447151135486097, + 21888242871839275222246405745257275088548364400416034343698204130127316218001, 1687584673949869, - 3995987819733057, + 21888242871839275222246405745257275088548364400416034343698203678964000464961, 1226695717717788, 2079288660453323, 1577951738372652, 883413754931330, - 4124803770282025, + 21888242871839275222246405745257275088548364400416034343698203807779951013929, 1727684766254847, - 3061042308152111, - 3379697003974645, + 21888242871839275222246405745257275088548364400416034343698202744018488884015, + 21888242871839275222246405745257275088548364400416034343698203062673184706549, 2127275512555089, - 3794081530848297, + 21888242871839275222246405745257275088548364400416034343698203477057711580201, 666690033769756, 365594787462126, - 4450005986826179, + 21888242871839275222246405745257275088548364400416034343698204132982167558083, 88579274474534, - 3707179024898789, + 21888242871839275222246405745257275088548364400416034343698203390155205630693, 1002687739323790, - 4382277439743840, - 3412413140849874, + 21888242871839275222246405745257275088548364400416034343698204065253620475744, + 21888242871839275222246405745257275088548364400416034343698203095389321581778, 1288756254422977, 221693809511588, 950755044674174, 1894670034115832, - 2500647997289737, + 21888242871839275222246405745257275088548364400416034343698202183624178021641, 1769703672831920, - 4085360771311522, - 2737462712493497, - 2584045433154961, + 21888242871839275222246405745257275088548364400416034343698203768336952043426, + 21888242871839275222246405745257275088548364400416034343698202420438893225401, + 21888242871839275222246405745257275088548364400416034343698202267021613886865, 786729790954816, 600497162768873, 1958511064769372, 1059289934476248, 1011303497316695, - 2909622141122508, + 21888242871839275222246405745257275088548364400416034343698202592598321854412, 1149582084824935, 1008156170764228, 1111366729343792, - 3553664735949094, + 21888242871839275222246405745257275088548364400416034343698203236640916680998, 2182433700331731, - 2309433936167694, - 2718065222399848, - 2843132095443401, + 21888242871839275222246405745257275088548364400416034343698201992410116899598, + 21888242871839275222246405745257275088548364400416034343698202401041403131752, + 21888242871839275222246405745257275088548364400416034343698202526108276175305, 1042726741709031, - 3261862094839280, + 21888242871839275222246405745257275088548364400416034343698202944838275571184, 493906136840867, 557222603254176, - 4347412607782812, + 21888242871839275222246405745257275088548364400416034343698204030388788514716, 914571238615606, - 3666456773629545, - 3523613286979665, - 4188056026599376, - 3148023130285414, - 3970182761273859, + 21888242871839275222246405745257275088548364400416034343698203349432954361449, + 21888242871839275222246405745257275088548364400416034343698203206589467711569, + 21888242871839275222246405745257275088548364400416034343698203871032207331280, + 21888242871839275222246405745257275088548364400416034343698202830999311017318, + 21888242871839275222246405745257275088548364400416034343698203653158942005763, 1625250658979800, - 2620209762325165, - 4183953176099929, + 21888242871839275222246405745257275088548364400416034343698202303185943057069, + 21888242871839275222246405745257275088548364400416034343698203866929356831833, 1558650703000700, 1200593338862909, 324769991009784, 2211155393650727, - 3453320204735206, + 21888242871839275222246405745257275088548364400416034343698203136296385467110, 2197161560717243, 1000546851276370, - 4351620504095976, + 21888242871839275222246405745257275088548364400416034343698204034596684827880, 706470181418896, - 2937097907038941, + 21888242871839275222246405745257275088548364400416034343698202620074087770845, 2201338135456956, - 4085984645895742, - 2902499309136459, + 21888242871839275222246405745257275088548364400416034343698203768960826627646, + 21888242871839275222246405745257275088548364400416034343698202585475489868363, 9450401180806, - 3785347630065630, - 2877561169917552, + 21888242871839275222246405745257275088548364400416034343698203468323810797534, + 21888242871839275222246405745257275088548364400416034343698202560537350649456, 1131624144083528, - 4320882794063210, + 21888242871839275222246405745257275088548364400416034343698204003858974795114, 675360578298726, - 2390939754507012, - 3965387648869356, - 3011029022032372, + 21888242871839275222246405745257275088548364400416034343698202073915935238916, + 21888242871839275222246405745257275088548364400416034343698203648363829601260, + 21888242871839275222246405745257275088548364400416034343698202694005202764276, 1273507089145151, - 3336153968372912, + 21888242871839275222246405745257275088548364400416034343698203019130149104816, 473864817589954, 89530724736601, 229031847873212, 1086388623506277, - 3924606475017996, - 3100939511134884, + 21888242871839275222246405745257275088548364400416034343698203607582655749900, + 21888242871839275222246405745257275088548364400416034343698202783915691866788, 44589493549808, - 3240648995776140, + 21888242871839275222246405745257275088548364400416034343698202923625176508044, 1613695947689352, - 2584800901915451, - 2345832699249992, - 4157482123968866, + 21888242871839275222246405745257275088548364400416034343698202267777082647355, + 21888242871839275222246405745257275088548364400416034343698202028808879981896, + 21888242871839275222246405745257275088548364400416034343698203840458304700770, 1588070763603955, - 3390214949165084, + 21888242871839275222246405745257275088548364400416034343698203073191129896988, 462034589015470, 822737752099048, 1057172170906916, - 2398191986903679, + 21888242871839275222246405745257275088548364400416034343698202081168167635583, 1259510434603259, 166580359876857, 1054478557328060, 26226445067239, - 4248307959715973, - 4173598348985854, - 3847029800936604, - 3393367028414171, - 2765387456778114, + 21888242871839275222246405745257275088548364400416034343698203931284140447877, + 21888242871839275222246405745257275088548364400416034343698203856574529717758, + 21888242871839275222246405745257275088548364400416034343698203530005981668508, + 21888242871839275222246405745257275088548364400416034343698203076343209146075, + 21888242871839275222246405745257275088548364400416034343698202448363637510018, 1594439871926689, - 4053327151114461, - 4281695670576382, - 2335129170784487, - 3774859935169016, - 2830196123379510, - 4322762318283001, - 4006894894785637, - 2283776389401011, + 21888242871839275222246405745257275088548364400416034343698203736303331846365, + 21888242871839275222246405745257275088548364400416034343698203964671851308286, + 21888242871839275222246405745257275088548364400416034343698202018105351516391, + 21888242871839275222246405745257275088548364400416034343698203457836115900920, + 21888242871839275222246405745257275088548364400416034343698202513172304111414, + 21888242871839275222246405745257275088548364400416034343698204005738499014905, + 21888242871839275222246405745257275088548364400416034343698203689871075517541, + 21888242871839275222246405745257275088548364400416034343698201966752570132915, 801168131310317, - 3719318028711641, + 21888242871839275222246405745257275088548364400416034343698203402294209443545, 862400334421329, - 4007091346868924, - 4144313097868063, + 21888242871839275222246405745257275088548364400416034343698203690067527600828, + 21888242871839275222246405745257275088548364400416034343698203827289278599967, 1969260579941295, - 3479853845912896, - 2548569150571150, + 21888242871839275222246405745257275088548364400416034343698203162830026644800, + 21888242871839275222246405745257275088548364400416034343698202231545331303054, 1634929022343091, 2007500574352418, - 2333874287354636, - 4179858199814448, - 3478321555441239, - 3184792352377411, + 21888242871839275222246405745257275088548364400416034343698202016850468086540, + 21888242871839275222246405745257275088548364400416034343698203862834380546352, + 21888242871839275222246405745257275088548364400416034343698203161297736173143, + 21888242871839275222246405745257275088548364400416034343698202867768533109315, 1053750039048913, 1235768543532776, 2132185534386267, - 2931673033366879, + 21888242871839275222246405745257275088548364400416034343698202614649214098783, 1644963329876037, - 4326326761788357, - 4190942762855323, + 21888242871839275222246405745257275088548364400416034343698204009302942520261, + 21888242871839275222246405745257275088548364400416034343698203873918943587227, 557610830878915, 2143373675373064, - 2955130829394168, + 21888242871839275222246405745257275088548364400416034343698202638107010126072, 1882072829469398, - 3835171826587457, - 4432513560248347, + 21888242871839275222246405745257275088548364400416034343698203518148007319361, + 21888242871839275222246405745257275088548364400416034343698204115489740980251, 1122604083084061, - 3128583320837433, + 21888242871839275222246405745257275088548364400416034343698202811559501569337, 1326640276574730, 111454556842990, - 3273236637626639, - 3176083232391385, + 21888242871839275222246405745257275088548364400416034343698202956212818358543, + 21888242871839275222246405745257275088548364400416034343698202859059413123289, 702409150508644, - 3027940427757840, + 21888242871839275222246405745257275088548364400416034343698202710916608489744, 1505058696637229, - 2886543819452820, - 3210554161249242, + 21888242871839275222246405745257275088548364400416034343698202569520000184724, + 21888242871839275222246405745257275088548364400416034343698202893530341981146, 688361371369309, - 3219409727392237, - 2540505101134087, - 3734591267214923, - 4235574149932298, - 2836167941398338, + 21888242871839275222246405745257275088548364400416034343698202902385908124141, + 21888242871839275222246405745257275088548364400416034343698202223481281865991, + 21888242871839275222246405745257275088548364400416034343698203417567447946827, + 21888242871839275222246405745257275088548364400416034343698203918550330664202, + 21888242871839275222246405745257275088548364400416034343698202519144122130242, 1651872126623535, 100041170759720, 2113708314969778, 1377585035553891, - 2682785181010705, + 21888242871839275222246405745257275088548364400416034343698202365761361742609, 1067757545967714, - 3231286903057868, + 21888242871839275222246405745257275088548364400416034343698202914263083789772, 1734120853181531, 904782300943764, - 3329918215428829, + 21888242871839275222246405745257275088548364400416034343698203012894396160733, 535532201770697, - 4151447295415235, + 21888242871839275222246405745257275088548364400416034343698203834423476147139, 2120333269138717, 443489388534789, 578380080668630, 1612373129763199, - 2467566911488798, + 21888242871839275222246405745257275088548364400416034343698202150543092220702, 993843361400267, - 2562717838454820, + 21888242871839275222246405745257275088548364400416034343698202245694019186724, 807509991954839, 870496772818294, - 3850473342130726, - 3192645219771739, - 3223581946830000, - 2809467710000952, - 3491931793557493, - 3884735483119776, + 21888242871839275222246405745257275088548364400416034343698203533449522862630, + 21888242871839275222246405745257275088548364400416034343698202875621400503643, + 21888242871839275222246405745257275088548364400416034343698202906558127561904, + 21888242871839275222246405745257275088548364400416034343698202492443890732856, + 21888242871839275222246405745257275088548364400416034343698203174907974289397, + 21888242871839275222246405745257275088548364400416034343698203567711663851680, 1025727693716188, - 3352630689457354, - 4320594379015713, - 3523457977828945, + 21888242871839275222246405745257275088548364400416034343698203035606870189258, + 21888242871839275222246405745257275088548364400416034343698204003570559747617, + 21888242871839275222246405745257275088548364400416034343698203206434158560849, 1094954908262331, 304859528856874, 595950582404400, - 3391742770032145, - 2344387394837833, - 3892114945788289, - 4194747080151330, - 3315449371783537, + 21888242871839275222246405745257275088548364400416034343698203074718950764049, + 21888242871839275222246405745257275088548364400416034343698202027363575569737, + 21888242871839275222246405745257275088548364400416034343698203575091126520193, + 21888242871839275222246405745257275088548364400416034343698203877723260883234, + 21888242871839275222246405745257275088548364400416034343698202998425552515441, 1568269088541762, 1415363529491939, - 2553057974500222, - 3110796783230660, - 2816822297233648, + 21888242871839275222246405745257275088548364400416034343698202236034155232126, + 21888242871839275222246405745257275088548364400416034343698202793772963962564, + 21888242871839275222246405745257275088548364400416034343698202499798477965552, 741333094675837, 1309728727609320, 2171228690245842, 1210571028863383, 1388270556442530, - 2709296925792071, + 21888242871839275222246405745257275088548364400416034343698202392273106523975, 988844879759394, 1949031869712314, - 3603449598559015, + 21888242871839275222246405745257275088548364400416034343698203286425779290919, 470841725171644, - 3223870428556796, + 21888242871839275222246405745257275088548364400416034343698202906846609288700, 78935791889114, 890063167968616, - 4447244016258163, + 21888242871839275222246405745257275088548364400416034343698204130220196990067, 172433314720429, - 4316433988973751, - 2256912892516681, + 21888242871839275222246405745257275088548364400416034343698203999410169705655, + 21888242871839275222246405745257275088548364400416034343698201939889073248585, 444089545000780, - 2974752118043990, + 21888242871839275222246405745257275088548364400416034343698202657728298775894, 1166759540419218, 1594700189277284, - 2347497873276894, - 4470222586123988, + 21888242871839275222246405745257275088548364400416034343698202030474054008798, + 21888242871839275222246405745257275088548364400416034343698204153198766855892, 658795910994200, 1484676621949912, 771931332567430, 503791037127040, - 3461738630623618, + 21888242871839275222246405745257275088548364400416034343698203144714811355522, 1911936734560207, 911305111574370, - 3459342252918471, - 2447643648448640, + 21888242871839275222246405745257275088548364400416034343698203142318433650375, + 21888242871839275222246405745257275088548364400416034343698202130619829180544, 272187267540684, - 4333928047133591, - 2493461977956560, - 2534958166607472, + 21888242871839275222246405745257275088548364400416034343698204016904227865495, + 21888242871839275222246405745257275088548364400416034343698202176438158688464, + 21888242871839275222246405745257275088548364400416034343698202217934347339376, 775704177702392, - 2446278776043798, + 21888242871839275222246405745257275088548364400416034343698202129254956775702, 849446054639675, - 3188602894829107, + 21888242871839275222246405745257275088548364400416034343698202871579075561011, 1659007273679237, 1220155824884311, - 2425285833776024, - 3257414849972363, + 21888242871839275222246405745257275088548364400416034343698202108262014507928, + 21888242871839275222246405745257275088548364400416034343698202940391030704267, 362194601747206, 419684292713716, 2031283430692894, - 2749806843306905, + 21888242871839275222246405745257275088548364400416034343698202432783024038809, 1623286070947056, 1913643369267354, - 2827337715126678, - 3398675076587689, + 21888242871839275222246405745257275088548364400416034343698202510313895858582, + 21888242871839275222246405745257275088548364400416034343698203081651257319593, 518550909540392, - 3450890336426085, - 3541016824601433, - 3386412097083037, - 3808865189754660, + 21888242871839275222246405745257275088548364400416034343698203133866517157989, + 21888242871839275222246405745257275088548364400416034343698203223993005333337, + 21888242871839275222246405745257275088548364400416034343698203069388277814941, + 21888242871839275222246405745257275088548364400416034343698203491841370486564, 2075251664969326, 1448153064578563, - 3032816756180968, + 21888242871839275222246405745257275088548364400416034343698202715792936912872, 892974495876334, 1141882059494655, 664365862199843, 481370117104923, - 4323229784034397, + 21888242871839275222246405745257275088548364400416034343698204006205964766301, 1595736836924249, - 3207801784522691, - 3559608766352408, + 21888242871839275222246405745257275088548364400416034343698202890777965254595, + 21888242871839275222246405745257275088548364400416034343698203242584947084312, 1520580147724202, - 3730550636951140, - 4081900282314194, + 21888242871839275222246405745257275088548364400416034343698203413526817683044, + 21888242871839275222246405745257275088548364400416034343698203764876463046098, 2188212454788797, 1020900975321306, - 4243140586985214, + 21888242871839275222246405745257275088548364400416034343698203926116767717118, 1302769994688587, - 2945308305543370, - 4165785293528094, - 3121902860166832, + 21888242871839275222246405745257275088548364400416034343698202628284486275274, + 21888242871839275222246405745257275088548364400416034343698203848761474259998, + 21888242871839275222246405745257275088548364400416034343698202804879040898736, 1362005775568747, 847307628194258, - 3975493257112856, - 3887669375509859, - 4244030193918290, + 21888242871839275222246405745257275088548364400416034343698203658469437844760, + 21888242871839275222246405745257275088548364400416034343698203570645556241763, + 21888242871839275222246405745257275088548364400416034343698203927006374650194, 2101737385803485, - 2486375348801264, + 21888242871839275222246405745257275088548364400416034343698202169351529533168, 2034616918659798, 1598109205616352, - 4278472754711837, + 21888242871839275222246405745257275088548364400416034343698203961448935443741, 1623195257285150, 1179103904353546, - 4407458732523646, - 2663200845639805, + 21888242871839275222246405745257275088548364400416034343698204090434913255550, + 21888242871839275222246405745257275088548364400416034343698202346177026371709, 1638378700237550, - 2566840060945502, + 21888242871839275222246405745257275088548364400416034343698202249816241677406, 1738951443714042, - 2389257508140662, - 4214582865563073, + 21888242871839275222246405745257275088548364400416034343698202072233688872566, + 21888242871839275222246405745257275088548364400416034343698203897559046294977, 556211714932970, - 2742038268485367, + 21888242871839275222246405745257275088548364400416034343698202425014449217271, 1443435148869672, - 3814983365047271, - 4334035302367151, - 4048682686232234, + 21888242871839275222246405745257275088548364400416034343698203497959545779175, + 21888242871839275222246405745257275088548364400416034343698204017011483099055, + 21888242871839275222246405745257275088548364400416034343698203731658866964138, 1133413222766537, 316170248563537, 642399158048698, 711540975219490, - 3710012630357368, + 21888242871839275222246405745257275088548364400416034343698203392988811089272, 1482392341002702, 988852166217104, - 4213637411956721, - 4287597847233803, - 3813755217646822, - 2450198124651235, - 3900308432362921, + 21888242871839275222246405745257275088548364400416034343698203896613592688625, + 21888242871839275222246405745257275088548364400416034343698203970574027965707, + 21888242871839275222246405745257275088548364400416034343698203496731398378726, + 21888242871839275222246405745257275088548364400416034343698202133174305383139, + 21888242871839275222246405745257275088548364400416034343698203583284613094825, 349981051209627, - 4016060462001867, - 4052479232160568, + 21888242871839275222246405745257275088548364400416034343698203699036642733771, + 21888242871839275222246405745257275088548364400416034343698203735455412892472, 1676484451849289, - 3264149537722309, + 21888242871839275222246405745257275088548364400416034343698202947125718454213, 841505488706179, 886655834907981, 2065957107845217, 2050510396799892, - 3016228243277049, - 2910213274171936, + 21888242871839275222246405745257275088548364400416034343698202699204424008953, + 21888242871839275222246405745257275088548364400416034343698202593189454903840, 105417409315459, - 3280747710798813, + 21888242871839275222246405745257275088548364400416034343698202963723891530717, 334443930751628, 2251310152424466, 2174746104722975, 737677972582299, - 3498618665848761, - 4443984718533737, - 2846363350041760, + 21888242871839275222246405745257275088548364400416034343698203181594846580665, + 21888242871839275222246405745257275088548364400416034343698204126960899265641, + 21888242871839275222246405745257275088548364400416034343698202529339530773664, 1495838379635886, - 4029466098672290, + 21888242871839275222246405745257275088548364400416034343698203712442279404194, 8990134965207, 491153531763809, 404234687840035, - 3996030304137477, - 3874655117341738, - 4088755277072784, + 21888242871839275222246405745257275088548364400416034343698203679006484869381, + 21888242871839275222246405745257275088548364400416034343698203557631298073642, + 21888242871839275222246405745257275088548364400416034343698203771731457804688, 1526864166595885, 146398810882592, 1798574022384829, @@ -9647,144 +9647,144 @@ pub global CRP: [Polynomial; L] = [ 284553686769520, 1501956114913354, 1764086104604973, - 2709383675267772, - 3127813585410571, + 21888242871839275222246405745257275088548364400416034343698202392359855999676, + 21888242871839275222246405745257275088548364400416034343698202810789766142475, 712041076869373, 1215992655137239, - 4372513407383281, + 21888242871839275222246405745257275088548364400416034343698204055489588115185, 1380773997024834, 1186158114888129, - 3372049062728280, + 21888242871839275222246405745257275088548364400416034343698203055025243460184, 1305014119295881, 1886481656062685, - 3076709006144754, - 2319476831132351, - 4329153799270945, + 21888242871839275222246405745257275088548364400416034343698202759685186876658, + 21888242871839275222246405745257275088548364400416034343698202002453011864255, + 21888242871839275222246405745257275088548364400416034343698204012129980002849, 1012076268992936, - 3187016785837406, + 21888242871839275222246405745257275088548364400416034343698202869992966569310, 1959954005218679, - 3529588613070346, - 3853840902839621, - 2788785537830630, - 3431838172657094, - 2263479785211735, - 2495177062882790, - 3313934509510368, - 4452653163657093, - 4099114252380959, + 21888242871839275222246405745257275088548364400416034343698203212564793802250, + 21888242871839275222246405745257275088548364400416034343698203536817083571525, + 21888242871839275222246405745257275088548364400416034343698202471761718562534, + 21888242871839275222246405745257275088548364400416034343698203114814353388998, + 21888242871839275222246405745257275088548364400416034343698201946455965943639, + 21888242871839275222246405745257275088548364400416034343698202178153243614694, + 21888242871839275222246405745257275088548364400416034343698202996910690242272, + 21888242871839275222246405745257275088548364400416034343698204135629344388997, + 21888242871839275222246405745257275088548364400416034343698203782090433112863, 1192162144879324, - 4363256745581488, + 21888242871839275222246405745257275088548364400416034343698204046232926313392, 413652708118945, - 4349303562263765, + 21888242871839275222246405745257275088548364400416034343698204032279742995669, 100535607955729, 1003485143158531, - 3599008326744441, - 3271326658977227, + 21888242871839275222246405745257275088548364400416034343698203281984507476345, + 21888242871839275222246405745257275088548364400416034343698202954302839709131, 940237329594405, - 3569295045107446, + 21888242871839275222246405745257275088548364400416034343698203252271225839350, 1028717259820589, 117035609890385, - 2263228718263443, + 21888242871839275222246405745257275088548364400416034343698201946204898995347, 568916961405833, 1380879813804459, 1988648838489424, - 2886263127395920, - 3449672219359001, - 2385524492861954, + 21888242871839275222246405745257275088548364400416034343698202569239308127824, + 21888242871839275222246405745257275088548364400416034343698203132648400090905, + 21888242871839275222246405745257275088548364400416034343698202068500673593858, 1060742422550335, 2202104671560204, 1463100012098177, - 2622160837016711, + 21888242871839275222246405745257275088548364400416034343698202305137017748615, 595516830266150, 1426676262493452, - 3772676349640864, + 21888242871839275222246405745257275088548364400416034343698203455652530372768, 1043940577904676, - 2980164363203612, + 21888242871839275222246405745257275088548364400416034343698202663140543935516, 647459019430299, 1059704091589257, 785401047290219, 1924320064013528, - 3604520725220602, - 3294140663259356, + 21888242871839275222246405745257275088548364400416034343698203287496905952506, + 21888242871839275222246405745257275088548364400416034343698202977116843991260, 552181252612995, 1942343415755458, - 3563659312464300, + 21888242871839275222246405745257275088548364400416034343698203246635493196204, 1664955523020391, 1723571725769379, - 3329484869969459, - 3913384445442995, - 2950400052017501, + 21888242871839275222246405745257275088548364400416034343698203012461050701363, + 21888242871839275222246405745257275088548364400416034343698203596360626174899, + 21888242871839275222246405745257275088548364400416034343698202633376232749405, 858724638155103, 1312498444292522, 1767024193237854, 1542135326957175, - 2839671119241767, + 21888242871839275222246405745257275088548364400416034343698202522647299973671, 2085084703088564, 1235977199030312, - 3794743099260141, - 4457173607877299, - 3660398877384011, - 2729279908306715, - 3545294912206188, - 4285874556331811, + 21888242871839275222246405745257275088548364400416034343698203477719279992045, + 21888242871839275222246405745257275088548364400416034343698204140149788609203, + 21888242871839275222246405745257275088548364400416034343698203343375058115915, + 21888242871839275222246405745257275088548364400416034343698202412256089038619, + 21888242871839275222246405745257275088548364400416034343698203228271092938092, + 21888242871839275222246405745257275088548364400416034343698203968850737063715, 1313410026589318, - 3443215008943866, - 3582392041491135, - 3597191055129272, - 3049406803610778, + 21888242871839275222246405745257275088548364400416034343698203126191189675770, + 21888242871839275222246405745257275088548364400416034343698203265368222223039, + 21888242871839275222246405745257275088548364400416034343698203280167235861176, + 21888242871839275222246405745257275088548364400416034343698202732382984342682, 315103517460416, - 3786852561948645, - 4366183864988211, - 2567780645570211, + 21888242871839275222246405745257275088548364400416034343698203469828742680549, + 21888242871839275222246405745257275088548364400416034343698204049160045720115, + 21888242871839275222246405745257275088548364400416034343698202250756826302115, 1511575381407327, 917198187928848, 1554331407571715, 1266541558983462, 38064433166335, - 3962553145400296, + 21888242871839275222246405745257275088548364400416034343698203645529326132200, 2239808072185809, 1486205064268698, - 2497681154943012, + 21888242871839275222246405745257275088548364400416034343698202180657335674916, 91108277022740, - 3059590860719363, + 21888242871839275222246405745257275088548364400416034343698202742567041451267, 2220758232844730, - 4360907311520110, + 21888242871839275222246405745257275088548364400416034343698204043883492252014, 2219048439518923, - 3859545319338491, + 21888242871839275222246405745257275088548364400416034343698203542521500070395, 1950750048067264, 2052041342777902, 1429413500797205, - 3411852500706926, - 2516962777955586, + 21888242871839275222246405745257275088548364400416034343698203094828681438830, + 21888242871839275222246405745257275088548364400416034343698202199938958687490, 705291950974941, 1960321781172172, - 2579568294108331, + 21888242871839275222246405745257275088548364400416034343698202262544474840235, 889345773863307, 1303616618928727, - 2707376538912593, - 3249553905492770, - 3425659498558450, - 3603230732978112, + 21888242871839275222246405745257275088548364400416034343698202390352719644497, + 21888242871839275222246405745257275088548364400416034343698202932530086224674, + 21888242871839275222246405745257275088548364400416034343698203108635679290354, + 21888242871839275222246405745257275088548364400416034343698203286206913710016, 171484554772918, - 4244760084091322, - 2660980087282082, + 21888242871839275222246405745257275088548364400416034343698203927736264823226, + 21888242871839275222246405745257275088548364400416034343698202343956268013986, 1879128164927574, - 4247908368950568, + 21888242871839275222246405745257275088548364400416034343698203930884549682472, 395507124001093, 430410851084573, - 3126507379017919, - 2650890149309060, + 21888242871839275222246405745257275088548364400416034343698202809483559749823, + 21888242871839275222246405745257275088548364400416034343698202333866330040964, 733783798854539, - 3201018797234364, + 21888242871839275222246405745257275088548364400416034343698202883994977966268, 1632428845560125, - 2920523782507738, - 3878378319609733, - 4429424855511189, - 2728484066236081, + 21888242871839275222246405745257275088548364400416034343698202603499963239642, + 21888242871839275222246405745257275088548364400416034343698203561354500341637, + 21888242871839275222246405745257275088548364400416034343698204112401036243093, + 21888242871839275222246405745257275088548364400416034343698202411460246967985, 955111464573213, - 2796184156347613, + 21888242871839275222246405745257275088548364400416034343698202479160337079517, 169696795916284, - 2468267900971632, + 21888242871839275222246405745257275088548364400416034343698202151244081703536, 1462108979510339, 2100511686041561, 718727305402494, @@ -9795,152 +9795,152 @@ pub global CRP: [Polynomial; L] = [ 355390809220177, 1194982056876454, 1322067119001247, - 2264019122311606, - 4104078532262043, + 21888242871839275222246405745257275088548364400416034343698201946995303043510, + 21888242871839275222246405745257275088548364400416034343698203787054712993947, 1289349214649026, 1754299858814510, - 2490270091874641, - 2349205860096879, + 21888242871839275222246405745257275088548364400416034343698202173246272606545, + 21888242871839275222246405745257275088548364400416034343698202032182040828783, 1404196882210509, 1324388134506204, - 2361768253958093, + 21888242871839275222246405745257275088548364400416034343698202044744434689997, 833936027618404, 2184915533155244, - 3852010803408294, + 21888242871839275222246405745257275088548364400416034343698203534986984140198, 1031144347032540, 1677083360955475, - 3286731363637511, - 3799612319318958, + 21888242871839275222246405745257275088548364400416034343698202969707544369415, + 21888242871839275222246405745257275088548364400416034343698203482588500050862, 285530775515131, - 2394688908604446, + 21888242871839275222246405745257275088548364400416034343698202077665089336350, 650030710316988, 640736736065831, - 3145413201597965, + 21888242871839275222246405745257275088548364400416034343698202828389382329869, 1533574886071665, - 3710628787038960, + 21888242871839275222246405745257275088548364400416034343698203393604967770864, 2068158683357637, 1697052185936349, - 4057662309970020, + 21888242871839275222246405745257275088548364400416034343698203740638490701924, 503486427574679, - 3048830267221314, - 4218379061335721, - 4494263057999000, - 2317737189509569, + 21888242871839275222246405745257275088548364400416034343698202731806447953218, + 21888242871839275222246405745257275088548364400416034343698203901355242067625, + 21888242871839275222246405745257275088548364400416034343698204177239238730904, + 21888242871839275222246405745257275088548364400416034343698202000713370241473, 1959526194166765, - 4214243152950614, + 21888242871839275222246405745257275088548364400416034343698203897219333682518, 2205777402470944, 989930169207523, 1181308824856336, 1696271256610143, - 2820278999925883, + 21888242871839275222246405745257275088548364400416034343698202503255180657787, 102863981099806, 1346042533815337, 1593335441867405, - 3070958528998781, - 3171885032950885, + 21888242871839275222246405745257275088548364400416034343698202753934709730685, + 21888242871839275222246405745257275088548364400416034343698202854861213682789, 1976824558926772, - 3376005258571119, - 4404421790007198, - 3574943341491554, - 4307460227650870, + 21888242871839275222246405745257275088548364400416034343698203058981439303023, + 21888242871839275222246405745257275088548364400416034343698204087397970739102, + 21888242871839275222246405745257275088548364400416034343698203257919522223458, + 21888242871839275222246405745257275088548364400416034343698203990436408382774, 433140521780481, - 4370264972168587, - 3967481263638654, + 21888242871839275222246405745257275088548364400416034343698204053241152900491, + 21888242871839275222246405745257275088548364400416034343698203650457444370558, 1666367984110839, 702366841280860, - 2886013001966872, + 21888242871839275222246405745257275088548364400416034343698202568989182698776, 2128242801518397, - 3974206228782688, - 3482161846934147, - 3920606637609124, - 3274288314857041, - 3119846132803519, + 21888242871839275222246405745257275088548364400416034343698203657182409514592, + 21888242871839275222246405745257275088548364400416034343698203165138027666051, + 21888242871839275222246405745257275088548364400416034343698203603582818341028, + 21888242871839275222246405745257275088548364400416034343698202957264495588945, + 21888242871839275222246405745257275088548364400416034343698202802822313535423, 1532898966469225, 1195861990519340, 1993436914558169, 1968116183636849, - 3279880501525724, - 2688061523584157, + 21888242871839275222246405745257275088548364400416034343698202962856682257628, + 21888242871839275222246405745257275088548364400416034343698202371037704316061, 48548564159080, - 3554607336622151, + 21888242871839275222246405745257275088548364400416034343698203237583517354055, 1179916789248911, 1457097074436065, - 4495451732211120, - 2407775750871383, - 4210343143901510, - 3707590915548857, - 4026487063456365, + 21888242871839275222246405745257275088548364400416034343698204178427912943024, + 21888242871839275222246405745257275088548364400416034343698202090751931603287, + 21888242871839275222246405745257275088548364400416034343698203893319324633414, + 21888242871839275222246405745257275088548364400416034343698203390567096280761, + 21888242871839275222246405745257275088548364400416034343698203709463244188269, 1235437857146926, 1750687478119146, 2195723389326369, 1001522861453454, 308365225617372, - 2659827874155045, + 21888242871839275222246405745257275088548364400416034343698202342804054886949, 1657201989546336, 1044935032662582, 2167983639296390, 280997282491371, 72861714489436, - 4406933625762918, - 2414414634858848, - 3036237051186366, + 21888242871839275222246405745257275088548364400416034343698204089909806494822, + 21888242871839275222246405745257275088548364400416034343698202097390815590752, + 21888242871839275222246405745257275088548364400416034343698202719213231918270, 311439570322450, - 3724395738109947, + 21888242871839275222246405745257275088548364400416034343698203407371918841851, 2177099540203880, 2088243246427534, 2090180510153206, 290948044975478, - 3039740372072437, - 2393348764826300, + 21888242871839275222246405745257275088548364400416034343698202722716552804341, + 21888242871839275222246405745257275088548364400416034343698202076324945558204, 455082141394866, - 3974894629594511, + 21888242871839275222246405745257275088548364400416034343698203657870810326415, 632468662973925, - 4384139389862678, + 21888242871839275222246405745257275088548364400416034343698204067115570594582, 1113210218143795, 1342088487199242, 1252483105073914, 594367726586754, - 4020098840002628, - 2357391303877966, - 2553104449577313, + 21888242871839275222246405745257275088548364400416034343698203703075020734532, + 21888242871839275222246405745257275088548364400416034343698202040367484609870, + 21888242871839275222246405745257275088548364400416034343698202236080630309217, 676255519331036, 418171248046337, - 4138498024557706, - 2575207363649155, - 3778035418279225, + 21888242871839275222246405745257275088548364400416034343698203821474205289610, + 21888242871839275222246405745257275088548364400416034343698202258183544381059, + 21888242871839275222246405745257275088548364400416034343698203461011599011129, 1949832926451453, - 2473427370587476, + 21888242871839275222246405745257275088548364400416034343698202156403551319380, 817950902316028, - 3343359902824445, - 3579361581578480, - 2496073148083329, - 4231119412735399, - 2483068755228691, - 3635377340057020, + 21888242871839275222246405745257275088548364400416034343698203026336083556349, + 21888242871839275222246405745257275088548364400416034343698203262337762310384, + 21888242871839275222246405745257275088548364400416034343698202179049328815233, + 21888242871839275222246405745257275088548364400416034343698203914095593467303, + 21888242871839275222246405745257275088548364400416034343698202166044935960595, + 21888242871839275222246405745257275088548364400416034343698203318353520788924, 940148856135672, 231724867325854, 1101478596359661, 63590669505712, - 2354909402796423, + 21888242871839275222246405745257275088548364400416034343698202037885583528327, 129523751802902, 980702425814862, - 3591844543793429, + 21888242871839275222246405745257275088548364400416034343698203274820724525333, 1898213295131618, 1718880721072342, 919750635730607, 911729057120114, - 2259951334058414, + 21888242871839275222246405745257275088548364400416034343698201942927514790318, 608195813521606, - 3781008204500415, - 3071850902116963, + 21888242871839275222246405745257275088548364400416034343698203463984385232319, + 21888242871839275222246405745257275088548364400416034343698202754827082848867, 883976933923662, - 3836580735043953, - 4030228841613022, + 21888242871839275222246405745257275088548364400416034343698203519556915775857, + 21888242871839275222246405745257275088548364400416034343698203713205022344926, 1818837918610212, 1588433834792323, 1102996060827120, 2131037051202603, - 4404276608917523, + 21888242871839275222246405745257275088548364400416034343698204087252789649427, 1957330079181043, 827025549355741, 2234867112448009, @@ -9949,27 +9949,27 @@ pub global CRP: [Polynomial; L] = [ 1505225365467315, 1070039015821868, 284574848622273, - 3397626470994094, - 3437891566310941, - 3295125237895525, + 21888242871839275222246405745257275088548364400416034343698203080602651725998, + 21888242871839275222246405745257275088548364400416034343698203120867747042845, + 21888242871839275222246405745257275088548364400416034343698202978101418627429, 1349762255355231, 131592618349880, - 3375236458374575, + 21888242871839275222246405745257275088548364400416034343698203058212639106479, 878449788425875, 245005043744069, 2216638913270428, - 4067393012629877, + 21888242871839275222246405745257275088548364400416034343698203750369193361781, 647233344906271, - 3415969869676488, - 3386030187065585, - 3808038557320066, + 21888242871839275222246405745257275088548364400416034343698203098946050408392, + 21888242871839275222246405745257275088548364400416034343698203069006367797489, + 21888242871839275222246405745257275088548364400416034343698203491014738051970, 151716314633451, - 4156094633646129, - 3569465867918116, + 21888242871839275222246405745257275088548364400416034343698203839070814378033, + 21888242871839275222246405745257275088548364400416034343698203252442048650020, 2131389292746523, - 2592185895638939, + 21888242871839275222246405745257275088548364400416034343698202275162076370843, 344706564149798, - 3324071865611959, + 21888242871839275222246405745257275088548364400416034343698203007048046343863, 1943283133838241, 2038895513889705, 1639227663368281, @@ -9977,1281 +9977,1281 @@ pub global CRP: [Polynomial; L] = [ 501637625706440, 916246764513149, 1350125361994666, - 3365842321073248, - 3703930579945738, + 21888242871839275222246405745257275088548364400416034343698203048818501805152, + 21888242871839275222246405745257275088548364400416034343698203386906760677642, 1702034537880954, - 2656884579328387, + 21888242871839275222246405745257275088548364400416034343698202339860760060291, 1366904308376972, 295659666049910, - 3046559262479701, + 21888242871839275222246405745257275088548364400416034343698202729535443211605, 1104657185607837, 1244904599983896, 1913830212993009, 1618655697266086, 2179026612253262, 999962367386944, - 3300552468411942, - 3220388905516413, + 21888242871839275222246405745257275088548364400416034343698202983528649143846, + 21888242871839275222246405745257275088548364400416034343698202903365086248317, 617567503209787, 1060018226086352, - 3891579945278149, - 3017714758012410, - 3403943041639160, + 21888242871839275222246405745257275088548364400416034343698203574556126010053, + 21888242871839275222246405745257275088548364400416034343698202700690938744314, + 21888242871839275222246405745257275088548364400416034343698203086919222371064, 1710585454935504, 285013075958424, - 4148647282347070, - 3200097839042322, + 21888242871839275222246405745257275088548364400416034343698203831623463078974, + 21888242871839275222246405745257275088548364400416034343698202883074019774226, 700273730713558, - 2464987804335822, + 21888242871839275222246405745257275088548364400416034343698202147963985067726, 125843009195375, - 4132390460669267, + 21888242871839275222246405745257275088548364400416034343698203815366641401171, 799866448977621, 1988451810187388, - 4193262691805581, + 21888242871839275222246405745257275088548364400416034343698203876238872537485, 2064902013134976, 546692450363518, 1849165124903650, - 4477861876812066, - 4278858229250237, + 21888242871839275222246405745257275088548364400416034343698204160838057543970, + 21888242871839275222246405745257275088548364400416034343698203961834409982141, 476846093329063, 538370063866817, 526080804641710, - 2513254443583328, + 21888242871839275222246405745257275088548364400416034343698202196230624315232, 86825548319214, - 2939399892578059, - 2398260766336452, + 21888242871839275222246405745257275088548364400416034343698202622376073309963, + 21888242871839275222246405745257275088548364400416034343698202081236947068356, 718065851667321, 1161840039243022, - 2512951346195665, - 2748733449259575, - 2671701455444633, + 21888242871839275222246405745257275088548364400416034343698202195927526927569, + 21888242871839275222246405745257275088548364400416034343698202431709629991479, + 21888242871839275222246405745257275088548364400416034343698202354677636176537, 1571263785167330, 168416783314682, 1511154960957740, 2227768806816911, 913894267676040, - 2583385714549201, - 4242420088108029, + 21888242871839275222246405745257275088548364400416034343698202266361895281105, + 21888242871839275222246405745257275088548364400416034343698203925396268839933, 399530871420588, 846535603513902, 450321692228756, - 3541065380148430, - 2994244620958698, + 21888242871839275222246405745257275088548364400416034343698203224041560880334, + 21888242871839275222246405745257275088548364400416034343698202677220801690602, 2208841548298438, 664604707316301, 1778252141296186, - 3341735715906082, - 3359292201176962, + 21888242871839275222246405745257275088548364400416034343698203024711896637986, + 21888242871839275222246405745257275088548364400416034343698203042268381908866, 1970624694593881, 865561336550201, - 2629416206402319, - 2685662725124269, - 2309985539236940, - 4284195878715432, + 21888242871839275222246405745257275088548364400416034343698202312392387134223, + 21888242871839275222246405745257275088548364400416034343698202368638905856173, + 21888242871839275222246405745257275088548364400416034343698201992961719968844, + 21888242871839275222246405745257275088548364400416034343698203967172059447336, 1710839971725294, - 2791163000519676, + 21888242871839275222246405745257275088548364400416034343698202474139181251580, 249378052270135, - 3473416999707077, + 21888242871839275222246405745257275088548364400416034343698203156393180438981, 764572929060627, 9048381695619, - 2408844359142183, + 21888242871839275222246405745257275088548364400416034343698202091820539874087, 950192335115007, 137629383725430, 1932051963712391, - 4363388826113373, + 21888242871839275222246405745257275088548364400416034343698204046365006845277, 1712409139911771, - 3987583105126903, + 21888242871839275222246405745257275088548364400416034343698203670559285858807, 1279204613079463, 1794576835542286, 1956213740636851, - 4432088651362365, - 3396049746017561, - 3311572462973590, + 21888242871839275222246405745257275088548364400416034343698204115064832094269, + 21888242871839275222246405745257275088548364400416034343698203079025926749465, + 21888242871839275222246405745257275088548364400416034343698202994548643705494, 1515294242075476, - 2574605945734530, - 3016383084433789, + 21888242871839275222246405745257275088548364400416034343698202257582126466434, + 21888242871839275222246405745257275088548364400416034343698202699359265165693, 512332391698785, - 3207939045642884, - 3570147317106849, + 21888242871839275222246405745257275088548364400416034343698202890915226374788, + 21888242871839275222246405745257275088548364400416034343698203253123497838753, 494537092530272, - 4386094665969106, + 21888242871839275222246405745257275088548364400416034343698204069070846701010, 456250225980097, 480622731862232, - 2518672915829820, + 21888242871839275222246405745257275088548364400416034343698202201649096561724, 1339524666700120, 491219423433877, - 4043738016233736, + 21888242871839275222246405745257275088548364400416034343698203726714196965640, 2244709481405585, 856808370983053, - 3830647771633584, - 3913874936863777, + 21888242871839275222246405745257275088548364400416034343698203513623952365488, + 21888242871839275222246405745257275088548364400416034343698203596851117595681, 461812147035609, - 3158488711752837, - 2705421864519889, + 21888242871839275222246405745257275088548364400416034343698202841464892484741, + 21888242871839275222246405745257275088548364400416034343698202388398045251793, 439485431569648, - 4156529781903522, + 21888242871839275222246405745257275088548364400416034343698203839505962635426, 309993107354233, 429870609478472, 748957212053759, - 3739971528054212, + 21888242871839275222246405745257275088548364400416034343698203422947708786116, 497526749182345, 745960801812620, - 3632987142372566, - 3720132070565138, - 3043605047600303, + 21888242871839275222246405745257275088548364400416034343698203315963323104470, + 21888242871839275222246405745257275088548364400416034343698203403108251297042, + 21888242871839275222246405745257275088548364400416034343698202726581228332207, 1734996423927570, - 2308948138527734, - 3047165854745672, + 21888242871839275222246405745257275088548364400416034343698201991924319259638, + 21888242871839275222246405745257275088548364400416034343698202730142035477576, 614180285234785, - 3537309934780792, + 21888242871839275222246405745257275088548364400416034343698203220286115512696, 1935992874077029, - 2796617054194177, + 21888242871839275222246405745257275088548364400416034343698202479593234926081, 750722902006553, - 4127823029595433, + 21888242871839275222246405745257275088548364400416034343698203810799210327337, 2076701151791842, 536583020985422, - 2326376371479214, + 21888242871839275222246405745257275088548364400416034343698202009352552211118, 931741005079153, - 3476295022971287, + 21888242871839275222246405745257275088548364400416034343698203159271203703191, 1049875595985825, 753467462686657, - 4397874029644380, + 21888242871839275222246405745257275088548364400416034343698204080850210376284, 617900962976886, - 2774682882535734, + 21888242871839275222246405745257275088548364400416034343698202457659063267638, 140600841439977, 846725474255, 2132683636928425, - 3862419263992316, - 3341591898907839, - 3046773075167480, + 21888242871839275222246405745257275088548364400416034343698203545395444724220, + 21888242871839275222246405745257275088548364400416034343698203024568079639743, + 21888242871839275222246405745257275088548364400416034343698202729749255899384, 301383475267097, 342748790094535, - 2598552327985414, - 3301729049668249, - 4495609308610241, - 3805686240041457, - 3000753149659638, - 3078464382010965, + 21888242871839275222246405745257275088548364400416034343698202281528508717318, + 21888242871839275222246405745257275088548364400416034343698202984705230400153, + 21888242871839275222246405745257275088548364400416034343698204178585489342145, + 21888242871839275222246405745257275088548364400416034343698203488662420773361, + 21888242871839275222246405745257275088548364400416034343698202683729330391542, + 21888242871839275222246405745257275088548364400416034343698202761440562742869, 805428662354935, - 2628111707005387, + 21888242871839275222246405745257275088548364400416034343698202311087887737291, 1349101071758276, - 2841608760024278, + 21888242871839275222246405745257275088548364400416034343698202524584940756182, 1413029828012988, 95013476147298, 1157819273549223, - 2468805304781415, - 2817160042468210, - 2716629271824822, - 4166859480408545, + 21888242871839275222246405745257275088548364400416034343698202151781485513319, + 21888242871839275222246405745257275088548364400416034343698202500136223200114, + 21888242871839275222246405745257275088548364400416034343698202399605452556726, + 21888242871839275222246405745257275088548364400416034343698203849835661140449, 1603038899251127, - 4030916495444217, - 3537992242251815, + 21888242871839275222246405745257275088548364400416034343698203713892676176121, + 21888242871839275222246405745257275088548364400416034343698203220968422983719, 357893082638101, - 3767986707113202, + 21888242871839275222246405745257275088548364400416034343698203450962887845106, 1440270406084256, - 4188091441869533, - 2469820292294035, + 21888242871839275222246405745257275088548364400416034343698203871067622601437, + 21888242871839275222246405745257275088548364400416034343698202152796473025939, 1445957810358740, 644326575749400, - 3041282511437981, + 21888242871839275222246405745257275088548364400416034343698202724258692169885, 1969982610485872, 1653668694334877, - 3463779809570518, - 2809558600772435, - 2762410004752895, - 3908204747874173, + 21888242871839275222246405745257275088548364400416034343698203146755990302422, + 21888242871839275222246405745257275088548364400416034343698202492534781504339, + 21888242871839275222246405745257275088548364400416034343698202445386185484799, + 21888242871839275222246405745257275088548364400416034343698203591180928606077, 476657892050409, 1005048485990272, 1118161385254060, - 2307114314270317, - 2519302455630280, - 4331296718711076, + 21888242871839275222246405745257275088548364400416034343698201990090495002221, + 21888242871839275222246405745257275088548364400416034343698202202278636362184, + 21888242871839275222246405745257275088548364400416034343698204014272899442980, 317647558500708, - 4122613577475372, + 21888242871839275222246405745257275088548364400416034343698203805589758207276, 2180639541566515, 233806547341284, 1305719507125634, - 2307709469787770, - 4420785797413885, + 21888242871839275222246405745257275088548364400416034343698201990685650519674, + 21888242871839275222246405745257275088548364400416034343698204103761978145789, 814696934814230, 1929599420682351, - 3392805229095665, + 21888242871839275222246405745257275088548364400416034343698203075781409827569, 417506640486191, - 3221534067368934, - 2898868621808147, - 4129981095807864, - 3142353385618024, + 21888242871839275222246405745257275088548364400416034343698202904510248100838, + 21888242871839275222246405745257275088548364400416034343698202581844802540051, + 21888242871839275222246405745257275088548364400416034343698203812957276539768, + 21888242871839275222246405745257275088548364400416034343698202825329566349928, 1717960584338263, 845372913125996, - 3797849288953161, - 4185190104623980, - 3005005644263449, - 3817214131998265, - 4248409450639986, - 2947044917004314, + 21888242871839275222246405745257275088548364400416034343698203480825469685065, + 21888242871839275222246405745257275088548364400416034343698203868166285355884, + 21888242871839275222246405745257275088548364400416034343698202687981824995353, + 21888242871839275222246405745257275088548364400416034343698203500190312730169, + 21888242871839275222246405745257275088548364400416034343698203931385631371890, + 21888242871839275222246405745257275088548364400416034343698202630021097736218, 420202012176601, 891904730728987, 347582770206596, 95058528644983, 1474983069013288, 932419088870835, - 4448696677828518, + 21888242871839275222246405745257275088548364400416034343698204131672858560422, 1952848719902514, 525780267114936, - 3277671039322554, - 4062099839403426, + 21888242871839275222246405745257275088548364400416034343698202960647220054458, + 21888242871839275222246405745257275088548364400416034343698203745076020135330, 629990505538401, - 2457459070563429, + 21888242871839275222246405745257275088548364400416034343698202140435251295333, 987692744544895, 2105527649579746, - 3654618816857105, + 21888242871839275222246405745257275088548364400416034343698203337594997589009, 130140183522125, - 2288880987458447, - 3745515984712744, + 21888242871839275222246405745257275088548364400416034343698201971857168190351, + 21888242871839275222246405745257275088548364400416034343698203428492165444648, 717998123823806, 226928562045616, - 4076651057940340, + 21888242871839275222246405745257275088548364400416034343698203759627238672244, 990334520342843, 297930888094812, 641065683004972, 1050926617306297, - 4414996160023131, + 21888242871839275222246405745257275088548364400416034343698204097972340755035, 1214764934488612, - 2786725463432233, + 21888242871839275222246405745257275088548364400416034343698202469701644164137, 145623747710418, 2062796819049608, - 3187270216544108, + 21888242871839275222246405745257275088548364400416034343698202870246397276012, 233419164691372, - 2754714592181533, - 2347213416281974, - 2441368946154292, + 21888242871839275222246405745257275088548364400416034343698202437690772913437, + 21888242871839275222246405745257275088548364400416034343698202030189597013878, + 21888242871839275222246405745257275088548364400416034343698202124345126886196, 1430472388244163, - 3008616043485031, - 4087778001112524, + 21888242871839275222246405745257275088548364400416034343698202691592224216935, + 21888242871839275222246405745257275088548364400416034343698203770754181844428, 1878829831177774, - 4210080478115188, + 21888242871839275222246405745257275088548364400416034343698203893056658847092, 2226626144444699, 1525464924173015, - 3958706648189962, - 2266111362864343, + 21888242871839275222246405745257275088548364400416034343698203641682828921866, + 21888242871839275222246405745257275088548364400416034343698201949087543596247, 1383226317965068, 1619056006311092, 1894454002151170, - 4376245504678244, - 2716016382781934, + 21888242871839275222246405745257275088548364400416034343698204059221685410148, + 21888242871839275222246405745257275088548364400416034343698202398992563513838, 1838971473706303, 327183713876080, 577677031377998, - 3339003826342514, + 21888242871839275222246405745257275088548364400416034343698203021980007074418, 509044678385478, - 4052787979400830, - 3296059784926744, + 21888242871839275222246405745257275088548364400416034343698203735764160132734, + 21888242871839275222246405745257275088548364400416034343698202979035965658648, 1256722234510052, - 3979831889994420, + 21888242871839275222246405745257275088548364400416034343698203662808070726324, 2162865253957394, 1131764933118037, 901667668757543, - 2383372170882603, + 21888242871839275222246405745257275088548364400416034343698202066348351614507, 1658786842870042, - 2325145433049645, - 3208674239343826, + 21888242871839275222246405745257275088548364400416034343698202008121613781549, + 21888242871839275222246405745257275088548364400416034343698202891650420075730, 566827604240067, - 3681673520425415, - 2402502497894931, - 4157710262967264, + 21888242871839275222246405745257275088548364400416034343698203364649701157319, + 21888242871839275222246405745257275088548364400416034343698202085478678626835, + 21888242871839275222246405745257275088548364400416034343698203840686443699168, 1612164281351144, 105720420098139, 484858603624981, 201034244274521, 651441629026850, - 2783406290169688, - 2670218596722273, + 21888242871839275222246405745257275088548364400416034343698202466382470901592, + 21888242871839275222246405745257275088548364400416034343698202353194777454177, 230939630936618, 238268588913388, - 3894341178372693, - 4403693091446419, + 21888242871839275222246405745257275088548364400416034343698203577317359104597, + 21888242871839275222246405745257275088548364400416034343698204086669272178323, 819137909180817, 360990165860658, 1081479288410434, - 2773952751242280, - 2266216411179350, + 21888242871839275222246405745257275088548364400416034343698202456928931974184, + 21888242871839275222246405745257275088548364400416034343698201949192591911254, 1346780536566008, - 2431450184284562, + 21888242871839275222246405745257275088548364400416034343698202114426365016466, 1692492659815742, - 3366112520203731, + 21888242871839275222246405745257275088548364400416034343698203049088700935635, 1163894714673025, - 4434029134249189, + 21888242871839275222246405745257275088548364400416034343698204117005314981093, 1133257543886761, - 3660973350282996, - 3379865865249558, + 21888242871839275222246405745257275088548364400416034343698203343949531014900, + 21888242871839275222246405745257275088548364400416034343698203062842045981462, 1187243059345783, 1427890749693717, - 4432670672829832, - 2425326157269180, - 2580222708488410, + 21888242871839275222246405745257275088548364400416034343698204115646853561736, + 21888242871839275222246405745257275088548364400416034343698202108302338001084, + 21888242871839275222246405745257275088548364400416034343698202263198889220314, 1588337967612514, 655071003833531, - 3455922400837149, - 4210500031357214, - 2688769126212498, + 21888242871839275222246405745257275088548364400416034343698203138898581569053, + 21888242871839275222246405745257275088548364400416034343698203893476212089118, + 21888242871839275222246405745257275088548364400416034343698202371745306944402, 1625182064809042, - 3653526889284316, + 21888242871839275222246405745257275088548364400416034343698203336503070016220, 37318518431247, 1097373580704623, - 4200786916496893, + 21888242871839275222246405745257275088548364400416034343698203883763097228797, 556759748789491, 1839992384278824, 1092525482186296, - 3293388486553726, + 21888242871839275222246405745257275088548364400416034343698202976364667285630, 1843750639465219, - 3247107852833584, - 3939664282827905, - 3881784720911835, - 3971932620040303, + 21888242871839275222246405745257275088548364400416034343698202930084033565488, + 21888242871839275222246405745257275088548364400416034343698203622640463559809, + 21888242871839275222246405745257275088548364400416034343698203564760901643739, + 21888242871839275222246405745257275088548364400416034343698203654908800772207, 2123072693755088, - 2806146679395771, - 3774072518897625, + 21888242871839275222246405745257275088548364400416034343698202489122860127675, + 21888242871839275222246405745257275088548364400416034343698203457048699629529, 1671007596268642, 519766491598809, - 3262907680843107, + 21888242871839275222246405745257275088548364400416034343698202945883861575011, 1080150135484356, - 3728630571837983, + 21888242871839275222246405745257275088548364400416034343698203411606752569887, 1536011278652731, - 4401008298917362, + 21888242871839275222246405745257275088548364400416034343698204083984479649266, 966426904825619, 455452982925389, - 4246001560332270, - 3608619354032040, - 4435888206393356, + 21888242871839275222246405745257275088548364400416034343698203928977741064174, + 21888242871839275222246405745257275088548364400416034343698203291595534763944, + 21888242871839275222246405745257275088548364400416034343698204118864387125260, 943589119432573, - 3497613712048084, + 21888242871839275222246405745257275088548364400416034343698203180589892779988, 992322662094525, 1840668354407500, - 3849575111224347, + 21888242871839275222246405745257275088548364400416034343698203532551291956251, 2164069409870203, 1740704278847231, 245792559307636, - 2307642903883646, + 21888242871839275222246405745257275088548364400416034343698201990619084615550, 204382793450424, - 3250322073107176, + 21888242871839275222246405745257275088548364400416034343698202933298253839080, 1672494955759343, 1596700875802612, - 3268892811802566, - 4227917366510158, - 3360257333637872, - 3447546998185245, - 4049053537829082, - 4331358183517233, + 21888242871839275222246405745257275088548364400416034343698202951868992534470, + 21888242871839275222246405745257275088548364400416034343698203910893547242062, + 21888242871839275222246405745257275088548364400416034343698203043233514369776, + 21888242871839275222246405745257275088548364400416034343698203130523178917149, + 21888242871839275222246405745257275088548364400416034343698203732029718560986, + 21888242871839275222246405745257275088548364400416034343698204014334364249137, 363935857513168, - 4018030050784879, + 21888242871839275222246405745257275088548364400416034343698203701006231516783, 1302774277001057, - 4237926613556041, - 3469906348616189, - 2810293499068564, + 21888242871839275222246405745257275088548364400416034343698203920902794287945, + 21888242871839275222246405745257275088548364400416034343698203152882529348093, + 21888242871839275222246405745257275088548364400416034343698202493269679800468, 1644068921956930, 1472073400781237, 704645023415023, - 4228554183326795, - 2664535003574646, + 21888242871839275222246405745257275088548364400416034343698203911530364058699, + 21888242871839275222246405745257275088548364400416034343698202347511184306550, 2151336080998324, - 4031302611992889, - 3608937303294182, - 3333342869723797, + 21888242871839275222246405745257275088548364400416034343698203714278792724793, + 21888242871839275222246405745257275088548364400416034343698203291913484026086, + 21888242871839275222246405745257275088548364400416034343698203016319050455701, 2119565716415046, - 3844991540235918, - 2394648681514827, - 4199337780147534, - 4398959669943098, + 21888242871839275222246405745257275088548364400416034343698203527967720967822, + 21888242871839275222246405745257275088548364400416034343698202077624862246731, + 21888242871839275222246405745257275088548364400416034343698203882313960879438, + 21888242871839275222246405745257275088548364400416034343698204081935850675002, 1809580212214782, - 3002083038787449, + 21888242871839275222246405745257275088548364400416034343698202685059219519353, 1768339715771232, - 3490872537612591, - 3548307103287718, - 4037700736566018, - 3553109642200485, + 21888242871839275222246405745257275088548364400416034343698203173848718344495, + 21888242871839275222246405745257275088548364400416034343698203231283284019622, + 21888242871839275222246405745257275088548364400416034343698203720676917297922, + 21888242871839275222246405745257275088548364400416034343698203236085822932389, 62211193704070, - 2753821494109503, - 4134647328389347, + 21888242871839275222246405745257275088548364400416034343698202436797674841407, + 21888242871839275222246405745257275088548364400416034343698203817623509121251, 1257528236080618, 969401825890117, - 2261836892047019, - 2808513316982821, + 21888242871839275222246405745257275088548364400416034343698201944813072778923, + 21888242871839275222246405745257275088548364400416034343698202491489497714725, 1656420198901771, 954480145837589, - 2809694768047719, - 4498525586584187, + 21888242871839275222246405745257275088548364400416034343698202492670948779623, + 21888242871839275222246405745257275088548364400416034343698204181501767316091, 13161213120324, 1723506014840119, - 3809182298515231, - 2567622979393884, - 4294032921022068, - 4305634471267692, - 3454525693250156, - 3407936335726243, - 3978478379082639, - 4027579417735033, - 4433627867221022, + 21888242871839275222246405745257275088548364400416034343698203492158479247135, + 21888242871839275222246405745257275088548364400416034343698202250599160125788, + 21888242871839275222246405745257275088548364400416034343698203977009101753972, + 21888242871839275222246405745257275088548364400416034343698203988610651999596, + 21888242871839275222246405745257275088548364400416034343698203137501873982060, + 21888242871839275222246405745257275088548364400416034343698203090912516458147, + 21888242871839275222246405745257275088548364400416034343698203661454559814543, + 21888242871839275222246405745257275088548364400416034343698203710555598466937, + 21888242871839275222246405745257275088548364400416034343698204116604047952926, 1728855422388289, - 2560418383054070, + 21888242871839275222246405745257275088548364400416034343698202243394563785974, 1083605698318355, 1302250039221557, 2149722974135801, 1564861785222633, 60104670991390, - 2675628655371847, - 4397355695931454, - 2899267146821518, - 3320706142416526, - 3281915021369491, + 21888242871839275222246405745257275088548364400416034343698202358604836103751, + 21888242871839275222246405745257275088548364400416034343698204080331876663358, + 21888242871839275222246405745257275088548364400416034343698202582243327553422, + 21888242871839275222246405745257275088548364400416034343698203003682323148430, + 21888242871839275222246405745257275088548364400416034343698202964891202101395, 1032258589685966, - 2859599591881156, + 21888242871839275222246405745257275088548364400416034343698202542575772613060, 862032273889793, - 3416826397358772, + 21888242871839275222246405745257275088548364400416034343698203099802578090676, 20383308193893, - 3953565004155539, + 21888242871839275222246405745257275088548364400416034343698203636541184887443, 1598175186872012, - 3391604431378333, + 21888242871839275222246405745257275088548364400416034343698203074580612110237, 1857208710477246, - 4223117381196055, + 21888242871839275222246405745257275088548364400416034343698203906093561927959, 2010298827362433, - 2691789062344585, - 2551919492513635, + 21888242871839275222246405745257275088548364400416034343698202374765243076489, + 21888242871839275222246405745257275088548364400416034343698202234895673245539, 49843751735166, - 4236615031566017, + 21888242871839275222246405745257275088548364400416034343698203919591212297921, 2062799121307568, 1706498676192598, 2028079824142363, - 3053518048145185, - 3675747522577932, + 21888242871839275222246405745257275088548364400416034343698202736494228877089, + 21888242871839275222246405745257275088548364400416034343698203358723703309836, 1927622119235055, 1922913648367809, - 2443754061957614, - 3469347533086809, + 21888242871839275222246405745257275088548364400416034343698202126730242689518, + 21888242871839275222246405745257275088548364400416034343698203152323713818713, 958785592673555, - 4441318035216335, - 3698546637514555, - 2713016498352156, - 4267703345893275, + 21888242871839275222246405745257275088548364400416034343698204124294215948239, + 21888242871839275222246405745257275088548364400416034343698203381522818246459, + 21888242871839275222246405745257275088548364400416034343698202395992679084060, + 21888242871839275222246405745257275088548364400416034343698203950679526625179, 623714535627198, - 2993146593078341, + 21888242871839275222246405745257275088548364400416034343698202676122773810245, 923164478110871, 446051841260886, 1851680450496710, - 2949464102121696, + 21888242871839275222246405745257275088548364400416034343698202632440282853600, 553296658711920, 1493115257126642, - 3146503273629723, - 3365984237573944, + 21888242871839275222246405745257275088548364400416034343698202829479454361627, + 21888242871839275222246405745257275088548364400416034343698203048960418305848, 469487726325555, 473181087870603, 274935267543619, 1652846617591217, - 2263781954085040, - 3370556068981867, + 21888242871839275222246405745257275088548364400416034343698201946758134816944, + 21888242871839275222246405745257275088548364400416034343698203053532249713771, 1131962279042278, 2143845248365432, 76166921839705, - 3595531822353076, + 21888242871839275222246405745257275088548364400416034343698203278508003084980, 562809382454947, - 2863409588620454, - 3330355418433792, + 21888242871839275222246405745257275088548364400416034343698202546385769352358, + 21888242871839275222246405745257275088548364400416034343698203013331599165696, 198567811913472, - 2334031029351150, + 21888242871839275222246405745257275088548364400416034343698202017007210083054, 775460769035321, - 2736935350267400, + 21888242871839275222246405745257275088548364400416034343698202419911530999304, 1204293673591941, 1463917475712399, 239089031708833, 4644366926400, 744163110559595, - 3695462603674505, + 21888242871839275222246405745257275088548364400416034343698203378438784406409, 2188386594933735, - 2932266457332733, + 21888242871839275222246405745257275088548364400416034343698202615242638064637, 1309114204860736, 1786407308237132, 2071568231768759, 2067251446485532, 1667161490056827, 2130206466611015, - 3830123607424446, + 21888242871839275222246405745257275088548364400416034343698203513099788156350, 1643513996373810, 339650416174005, 322818947761589, - 4017851793824613, + 21888242871839275222246405745257275088548364400416034343698203700827974556517, 2196152628636105, - 4448558091681806, - 3298737137446259, - 3755975681342290, + 21888242871839275222246405745257275088548364400416034343698204131534272413710, + 21888242871839275222246405745257275088548364400416034343698202981713318178163, + 21888242871839275222246405745257275088548364400416034343698203438951862074194, 278299668725278, - 2474660505114669, + 21888242871839275222246405745257275088548364400416034343698202157636685846573, 1122400482615889, 1049504313980498, 208516429677989, - 4178958270780889, - 3845831130170724, + 21888242871839275222246405745257275088548364400416034343698203861934451512793, + 21888242871839275222246405745257275088548364400416034343698203528807310902628, 1836225707473956, 1209919564298574, 630249626632810, 580963487506352, - 3106899760672398, + 21888242871839275222246405745257275088548364400416034343698202789875941404302, 2218090601061073, 480732684666306, - 2809466406112635, + 21888242871839275222246405745257275088548364400416034343698202492442586844539, 1960089951981008, - 4003702129542454, - 3198157424099237, + 21888242871839275222246405745257275088548364400416034343698203686678310274358, + 21888242871839275222246405745257275088548364400416034343698202881133604831141, 1547143346229736, 624265971919306, - 4029331647202760, - 3949077325588640, + 21888242871839275222246405745257275088548364400416034343698203712307827934664, + 21888242871839275222246405745257275088548364400416034343698203632053506320544, 1325721998890029, 498081115826730, 964091578049826, 643275614698450, - 3319747865729244, + 21888242871839275222246405745257275088548364400416034343698203002724046461148, 694082759477294, - 2685770054354076, - 2443722901480967, + 21888242871839275222246405745257275088548364400416034343698202368746235085980, + 21888242871839275222246405745257275088548364400416034343698202126699082212871, 2198122094398149, 2175879838626520, 1816894129081586, 1208121998049505, - 4422863196861458, - 2889110611947852, - 2471054942723815, + 21888242871839275222246405745257275088548364400416034343698204105839377593362, + 21888242871839275222246405745257275088548364400416034343698202572086792679756, + 21888242871839275222246405745257275088548364400416034343698202154031123455719, 1556342011290962, 1317866241437399, 1158529810133863, - 2497179475452436, + 21888242871839275222246405745257275088548364400416034343698202180155656184340, 386402025366186, - 2399050906490320, + 21888242871839275222246405745257275088548364400416034343698202082027087222224, 1395821041054981, - 4173022488878379, + 21888242871839275222246405745257275088548364400416034343698203855998669610283, 1873771554518775, 1230327584095312, - 2714900711412198, + 21888242871839275222246405745257275088548364400416034343698202397876892144102, 975405597361692, 1695205407313078, - 3938746779608283, - 3975230956954132, - 2272628769959047, + 21888242871839275222246405745257275088548364400416034343698203621722960340187, + 21888242871839275222246405745257275088548364400416034343698203658207137686036, + 21888242871839275222246405745257275088548364400416034343698201955604950690951, 148757373446977, 1237291971553717, - 3201297795962551, - 4469511724371431, + 21888242871839275222246405745257275088548364400416034343698202884273976694455, + 21888242871839275222246405745257275088548364400416034343698204152487905103335, 38988306973157, - 2540832919461905, + 21888242871839275222246405745257275088548364400416034343698202223809100193809, 343976530110533, 1371065366528053, 558328316260868, 1815651515654535, 467032636737579, 1335509010846418, - 2921355409462300, + 21888242871839275222246405745257275088548364400416034343698202604331590194204, 357337288735838, 1342622451141319, 906137323552348, 1925748097341601, - 3534363807333892, - 3251426729321981, - 2688943152293342, + 21888242871839275222246405745257275088548364400416034343698203217339988065796, + 21888242871839275222246405745257275088548364400416034343698202934402910053885, + 21888242871839275222246405745257275088548364400416034343698202371919333025246, 1828778408302871, 1597122636583043, - 4190132934026641, - 2638809491485351, - 3807850299919594, - 4054335525566812, - 2596168904905260, - 3440452207045801, - 3814795434636583, + 21888242871839275222246405745257275088548364400416034343698203873109114758545, + 21888242871839275222246405745257275088548364400416034343698202321785672217255, + 21888242871839275222246405745257275088548364400416034343698203490826480651498, + 21888242871839275222246405745257275088548364400416034343698203737311706298716, + 21888242871839275222246405745257275088548364400416034343698202279145085637164, + 21888242871839275222246405745257275088548364400416034343698203123428387777705, + 21888242871839275222246405745257275088548364400416034343698203497771615368487, 1163514872090420, 1958249977209177, 93123020761693, 1786432488878191, 263319165432134, 934875064603223, - 2843558558186249, - 2806129811733923, - 2657540201560409, - 2630611574282470, + 21888242871839275222246405745257275088548364400416034343698202526534738918153, + 21888242871839275222246405745257275088548364400416034343698202489105992465827, + 21888242871839275222246405745257275088548364400416034343698202340516382292313, + 21888242871839275222246405745257275088548364400416034343698202313587755014374, 1870051678572259, - 4138783248917078, - 3453943057570012, - 2693394562099778, + 21888242871839275222246405745257275088548364400416034343698203821759429648982, + 21888242871839275222246405745257275088548364400416034343698203136919238301916, + 21888242871839275222246405745257275088548364400416034343698202376370742831682, 1184102267375929, - 3818246184681643, + 21888242871839275222246405745257275088548364400416034343698203501222365413547, 1136891631964923, 1539887917401886, 1996149915702663, - 2894727481395156, - 3116108479145717, - 2337070371966918, + 21888242871839275222246405745257275088548364400416034343698202577703662127060, + 21888242871839275222246405745257275088548364400416034343698202799084659877621, + 21888242871839275222246405745257275088548364400416034343698202020046552698822, 1277333373554878, - 3725179990299957, + 21888242871839275222246405745257275088548364400416034343698203408156171031861, 1877097376473581, 342109979385049, - 4124100512239691, - 2801841238204426, + 21888242871839275222246405745257275088548364400416034343698203807076692971595, + 21888242871839275222246405745257275088548364400416034343698202484817418936330, 1483029351093991, 1995819474418243, 639534653891540, 2050661153239407, 792285432173439, 2159240393365445, - 3139587458626374, - 2498355844465426, - 3616927499436425, + 21888242871839275222246405745257275088548364400416034343698202822563639358278, + 21888242871839275222246405745257275088548364400416034343698202181332025197330, + 21888242871839275222246405745257275088548364400416034343698203299903680168329, 185737018023819, - 4268852605426992, + 21888242871839275222246405745257275088548364400416034343698203951828786158896, 1395201069963317, 1972701807725427, 1781833305331709, 2227833430978267, - 4120378022341474, - 2325127852364672, - 2844303452751783, - 3699094594315313, + 21888242871839275222246405745257275088548364400416034343698203803354203073378, + 21888242871839275222246405745257275088548364400416034343698202008104033096576, + 21888242871839275222246405745257275088548364400416034343698202527279633483687, + 21888242871839275222246405745257275088548364400416034343698203382070775047217, 627221280345986, - 3001163741098335, - 3295732567005814, - 2763795026912642, + 21888242871839275222246405745257275088548364400416034343698202684139921830239, + 21888242871839275222246405745257275088548364400416034343698202978708747737718, + 21888242871839275222246405745257275088548364400416034343698202446771207644546, 1767173541887422, 206034526635169, 1568917123051710, - 3055334644844942, + 21888242871839275222246405745257275088548364400416034343698202738310825576846, 654610480723093, - 3772291445747099, - 3275306222104236, - 3389368164074716, + 21888242871839275222246405745257275088548364400416034343698203455267626479003, + 21888242871839275222246405745257275088548364400416034343698202958282402836140, + 21888242871839275222246405745257275088548364400416034343698203072344344806620, 604696335488804, - 3229276664465365, + 21888242871839275222246405745257275088548364400416034343698202912252845197269, 1886695446980883, - 4433107439645329, - 3191956018786260, - 2690869092727988, - 3417774715639102, - 3657017503578478, + 21888242871839275222246405745257275088548364400416034343698204116083620377233, + 21888242871839275222246405745257275088548364400416034343698202874932199518164, + 21888242871839275222246405745257275088548364400416034343698202373845273459892, + 21888242871839275222246405745257275088548364400416034343698203100750896371006, + 21888242871839275222246405745257275088548364400416034343698203339993684310382, 654644753436196, 1698395890355242, 1277408727850288, 1411809897337544, - 3502123069892268, + 21888242871839275222246405745257275088548364400416034343698203185099250624172, 1683177162283363, 807908397482407, - 3962188346366101, + 21888242871839275222246405745257275088548364400416034343698203645164527098005, 845411317710332, - 3183912890518706, - 3357642552921209, - 3110323574683558, - 4405259862622334, - 4344683336526651, + 21888242871839275222246405745257275088548364400416034343698202866889071250610, + 21888242871839275222246405745257275088548364400416034343698203040618733653113, + 21888242871839275222246405745257275088548364400416034343698202793299755415462, + 21888242871839275222246405745257275088548364400416034343698204088236043354238, + 21888242871839275222246405745257275088548364400416034343698204027659517258555, 957126655613921, - 3203151431351851, - 2505123386853663, + 21888242871839275222246405745257275088548364400416034343698202886127612083755, + 21888242871839275222246405745257275088548364400416034343698202188099567585567, 786404414842002, - 3550610966149916, + 21888242871839275222246405745257275088548364400416034343698203233587146881820, 1383798883994572, 478836810732811, - 3298219997065836, - 2599027658666276, + 21888242871839275222246405745257275088548364400416034343698202981196177797740, + 21888242871839275222246405745257275088548364400416034343698202282003839398180, 1760202263358051, 448890972864410, - 3729434859698014, + 21888242871839275222246405745257275088548364400416034343698203412411040429918, 1497892390347233, - 2375306673194748, + 21888242871839275222246405745257275088548364400416034343698202058282853926652, 468009100248994, - 3409353863010205, + 21888242871839275222246405745257275088548364400416034343698203092330043742109, 1823574557819885, 118505136692308, - 3315325488541372, - 2746857978218899, - 3468827501853520, + 21888242871839275222246405745257275088548364400416034343698202998301669273276, + 21888242871839275222246405745257275088548364400416034343698202429834158950803, + 21888242871839275222246405745257275088548364400416034343698203151803682585424, 1237139685064271, - 2321714606154753, - 2315424371079981, + 21888242871839275222246405745257275088548364400416034343698202004690786886657, + 21888242871839275222246405745257275088548364400416034343698201998400551811885, 1498393664481729, - 2949737375345288, - 4459799583453876, - 3544185513251862, - 3740178336512368, + 21888242871839275222246405745257275088548364400416034343698202632713556077192, + 21888242871839275222246405745257275088548364400416034343698204142775764185780, + 21888242871839275222246405745257275088548364400416034343698203227161693983766, + 21888242871839275222246405745257275088548364400416034343698203423154517244272, 1193578095988476, - 2877260521291884, + 21888242871839275222246405745257275088548364400416034343698202560236702023788, 2063402321082408, - 3592211736788830, - 2982922990840814, - 3502779068237782, - 4038066121577346, + 21888242871839275222246405745257275088548364400416034343698203275187917520734, + 21888242871839275222246405745257275088548364400416034343698202665899171572718, + 21888242871839275222246405745257275088548364400416034343698203185755248969686, + 21888242871839275222246405745257275088548364400416034343698203721042302309250, 1871357607741718, 1119793332354475, - 4164516334747782, - 2410334872388830, + 21888242871839275222246405745257275088548364400416034343698203847492515479686, + 21888242871839275222246405745257275088548364400416034343698202093311053120734, 849951537137992, - 3224050507699226, - 4454809319987641, + 21888242871839275222246405745257275088548364400416034343698202907026688431130, + 21888242871839275222246405745257275088548364400416034343698204137785500719545, 2186875030450215, - 3984168658494431, - 3145318057338390, - 2632545423267018, + 21888242871839275222246405745257275088548364400416034343698203667144839226335, + 21888242871839275222246405745257275088548364400416034343698202828294238070294, + 21888242871839275222246405745257275088548364400416034343698202315521603998922, 1977306330095000, - 2837811148566783, - 2566666939466235, + 21888242871839275222246405745257275088548364400416034343698202520787329298687, + 21888242871839275222246405745257275088548364400416034343698202249643120198139, 1312015403727311, 1280596170686163, - 4061980186230060, + 21888242871839275222246405745257275088548364400416034343698203744956366961964, 1190814414566468, - 4330141345309601, - 3360945914078699, + 21888242871839275222246405745257275088548364400416034343698204013117526041505, + 21888242871839275222246405745257275088548364400416034343698203043922094810603, 1388783181967523, - 4331198111103686, + 21888242871839275222246405745257275088548364400416034343698204014174291835590, 1482302785847668, - 3485542180504467, - 3261717429402767, + 21888242871839275222246405745257275088548364400416034343698203168518361236371, + 21888242871839275222246405745257275088548364400416034343698202944693610134671, 1958917558561587, 412511109417166, 1633205427911295, 1239636554197893, - 4451458154241385, + 21888242871839275222246405745257275088548364400416034343698204134434334973289, 151979325996431, - 3597965022330706, - 3768057800298690, - 3340242174039776, - 2903320281464376, + 21888242871839275222246405745257275088548364400416034343698203280941203062610, + 21888242871839275222246405745257275088548364400416034343698203451033981030594, + 21888242871839275222246405745257275088548364400416034343698203023218354771680, + 21888242871839275222246405745257275088548364400416034343698202586296462196280, 1725946146882669, - 3574576673611079, + 21888242871839275222246405745257275088548364400416034343698203257552854342983, 2194097546938102, - 4073588663344360, + 21888242871839275222246405745257275088548364400416034343698203756564844076264, 343573142595369, - 4123868425378684, + 21888242871839275222246405745257275088548364400416034343698203806844606110588, 578558584795698, - 3653746133179919, + 21888242871839275222246405745257275088548364400416034343698203336722313911823, 1077548988776312, 1569541397805774, 174619175782056, - 3268491253001894, - 2314563348461995, - 3953031995810196, - 3163217871155963, + 21888242871839275222246405745257275088548364400416034343698202951467433733798, + 21888242871839275222246405745257275088548364400416034343698201997539529193899, + 21888242871839275222246405745257275088548364400416034343698203636008176542100, + 21888242871839275222246405745257275088548364400416034343698202846194051887867, 778469378371249, 487302396544479, - 3755356508960851, + 21888242871839275222246405745257275088548364400416034343698203438332689692755, 1812316544933858, 1486869872818455, 1505194696055874, - 3662482850499811, - 2548308506755862, + 21888242871839275222246405745257275088548364400416034343698203345459031231715, + 21888242871839275222246405745257275088548364400416034343698202231284687487766, 1144390275248386, 779429388806280, 151272806246497, - 3554241263583610, - 4440248922512737, + 21888242871839275222246405745257275088548364400416034343698203237217444315514, + 21888242871839275222246405745257275088548364400416034343698204123225103244641, 411342092419115, 430325114146722, - 3002482844623032, - 3690235900792032, + 21888242871839275222246405745257275088548364400416034343698202685459025354936, + 21888242871839275222246405745257275088548364400416034343698203373212081523936, 1055655335943503, - 3300701233149463, + 21888242871839275222246405745257275088548364400416034343698202983677413881367, 647279151996800, 2072436913455788, 1728270371090437, 638823862421289, 1326771014114491, 950491580142343, - 3769443659040696, - 4047858628087362, + 21888242871839275222246405745257275088548364400416034343698203452419839772600, + 21888242871839275222246405745257275088548364400416034343698203730834808819266, 958894189263385, 2010164426970532, 1056306802081389, - 4207815876055089, + 21888242871839275222246405745257275088548364400416034343698203890792056786993, 1694885802278115, - 3075279224334853, - 3561519724649807, + 21888242871839275222246405745257275088548364400416034343698202758255405066757, + 21888242871839275222246405745257275088548364400416034343698203244495905381711, 485705112184008, 2127140566313721, - 3933948447607879, - 4159809699316074, + 21888242871839275222246405745257275088548364400416034343698203616924628339783, + 21888242871839275222246405745257275088548364400416034343698203842785880047978, 976534254729255, 1281856529357169, 183726257326873, 702906081129133, - 3253748569709827, + 21888242871839275222246405745257275088548364400416034343698202936724750441731, 1606617098167261, - 4435145537242084, - 4450752291266865, - 3167264021816273, - 3718626213809212, + 21888242871839275222246405745257275088548364400416034343698204118121717973988, + 21888242871839275222246405745257275088548364400416034343698204133728471998769, + 21888242871839275222246405745257275088548364400416034343698202850240202548177, + 21888242871839275222246405745257275088548364400416034343698203401602394541116, 1799004305840801, - 2947651921731136, - 3621909569434671, + 21888242871839275222246405745257275088548364400416034343698202630628102463040, + 21888242871839275222246405745257275088548364400416034343698203304885750166575, 1951137768831388, 176089692374125, - 3889493529631346, - 2717269421771609, - 3302655567039395, - 4440877220369297, - 3295886922064958, - 3821687695424675, - 2501979588177185, + 21888242871839275222246405745257275088548364400416034343698203572469710363250, + 21888242871839275222246405745257275088548364400416034343698202400245602503513, + 21888242871839275222246405745257275088548364400416034343698202985631747771299, + 21888242871839275222246405745257275088548364400416034343698204123853401101201, + 21888242871839275222246405745257275088548364400416034343698202978863102796862, + 21888242871839275222246405745257275088548364400416034343698203504663876156579, + 21888242871839275222246405745257275088548364400416034343698202184955768909089, 574127708982751, - 4364485130895861, + 21888242871839275222246405745257275088548364400416034343698204047461311627765, 1047727999866985, 1273656208486300, 2028272891555509, - 2524833420550291, - 4042801432959012, + 21888242871839275222246405745257275088548364400416034343698202207809601282195, + 21888242871839275222246405745257275088548364400416034343698203725777613690916, 1167134654587594, - 2832471376047071, + 21888242871839275222246405745257275088548364400416034343698202515447556778975, 519610248231764, 762686976676026, - 3581325155673962, - 4285599999960326, - 2839980574366497, - 3591329582975519, + 21888242871839275222246405745257275088548364400416034343698203264301336405866, + 21888242871839275222246405745257275088548364400416034343698203968576180692230, + 21888242871839275222246405745257275088548364400416034343698202522956755098401, + 21888242871839275222246405745257275088548364400416034343698203274305763707423, 1229518395139416, - 4423101968883024, - 2527249446115787, - 3649724454947968, + 21888242871839275222246405745257275088548364400416034343698204106078149614928, + 21888242871839275222246405745257275088548364400416034343698202210225626847691, + 21888242871839275222246405745257275088548364400416034343698203332700635679872, 1445118165994903, - 2601289467158987, - 4275496109110676, + 21888242871839275222246405745257275088548364400416034343698202284265647890891, + 21888242871839275222246405745257275088548364400416034343698203958472289842580, 64151543353384, - 2258578120556897, - 3629234416453694, + 21888242871839275222246405745257275088548364400416034343698201941554301288801, + 21888242871839275222246405745257275088548364400416034343698203312210597185598, 1507383071268670, 118430722853116, 1654788880415732, 137436071570064, - 3093761464719756, + 21888242871839275222246405745257275088548364400416034343698202776737645451660, 2077639430507728, - 3776420737976276, + 21888242871839275222246405745257275088548364400416034343698203459396918708180, 262555839196096, 1304972872766068, 1082504199185592, - 3695416431305950, - 3721590272311679, - 4133838643508920, - 4057908276544397, + 21888242871839275222246405745257275088548364400416034343698203378392612037854, + 21888242871839275222246405745257275088548364400416034343698203404566453043583, + 21888242871839275222246405745257275088548364400416034343698203816814824240824, + 21888242871839275222246405745257275088548364400416034343698203740884457276301, 1639905042596447, - 3754336969329965, + 21888242871839275222246405745257275088548364400416034343698203437313150061869, 47586408449476, - 4452074141193213, + 21888242871839275222246405745257275088548364400416034343698204135050321925117, 1992475990757299, 2214006188704085, - 3172879965867161, + 21888242871839275222246405745257275088548364400416034343698202855856146599065, 1718776517701971, - 3090719442217385, + 21888242871839275222246405745257275088548364400416034343698202773695622949289, 1472693347907434, 617385483644785, 547524377505544, - 2498564926496677, - 3507012861452391, + 21888242871839275222246405745257275088548364400416034343698202181541107228581, + 21888242871839275222246405745257275088548364400416034343698203189989042184295, 1429664999076980, - 3186450853626072, - 4007697350313622, - 3401651378501367, - 4407559413868371, + 21888242871839275222246405745257275088548364400416034343698202869427034357976, + 21888242871839275222246405745257275088548364400416034343698203690673531045526, + 21888242871839275222246405745257275088548364400416034343698203084627559233271, + 21888242871839275222246405745257275088548364400416034343698204090535594600275, 2093442255668839, 995540957554340, - 3954530498141116, + 21888242871839275222246405745257275088548364400416034343698203637506678873020, 795951229606249, - 4268877850782369, + 21888242871839275222246405745257275088548364400416034343698203951854031514273, 1904916143476237, - 2373020389549496, + 21888242871839275222246405745257275088548364400416034343698202055996570281400, 79697203417572, - 3001910169018825, - 3385748876383251, - 4070958714510426, - 4294478860564181, + 21888242871839275222246405745257275088548364400416034343698202684886349750729, + 21888242871839275222246405745257275088548364400416034343698203068725057115155, + 21888242871839275222246405745257275088548364400416034343698203753934895242330, + 21888242871839275222246405745257275088548364400416034343698203977455041296085, 1836494548533298, - 2576375809085657, + 21888242871839275222246405745257275088548364400416034343698202259351989817561, 168816356897929, - 3246814194378367, + 21888242871839275222246405745257275088548364400416034343698202929790375110271, 2136490534118335, 2213809324156288, - 2526754782336930, - 2376496281442772, - 3833623451919393, + 21888242871839275222246405745257275088548364400416034343698202209730963068834, + 21888242871839275222246405745257275088548364400416034343698202059472462174676, + 21888242871839275222246405745257275088548364400416034343698203516599632651297, 94309483618343, - 4328377769643843, + 21888242871839275222246405745257275088548364400416034343698204011353950375747, 1326887805816682, 1933527300276073, 620159957239074, - 4188193468381672, - 4149658254227053, + 21888242871839275222246405745257275088548364400416034343698203871169649113576, + 21888242871839275222246405745257275088548364400416034343698203832634434958957, 1248473568445059, 2126797375902890, - 2893772080000890, - 3842922075278288, - 4061650860636650, - 3593520543502201, - 2878817651979729, - 2824934399923781, - 3730740484430944, - 3531008033814845, - 3791568346289476, + 21888242871839275222246405745257275088548364400416034343698202576748260732794, + 21888242871839275222246405745257275088548364400416034343698203525898256010192, + 21888242871839275222246405745257275088548364400416034343698203744627041368554, + 21888242871839275222246405745257275088548364400416034343698203276496724234105, + 21888242871839275222246405745257275088548364400416034343698202561793832711633, + 21888242871839275222246405745257275088548364400416034343698202507910580655685, + 21888242871839275222246405745257275088548364400416034343698203413716665162848, + 21888242871839275222246405745257275088548364400416034343698203213984214546749, + 21888242871839275222246405745257275088548364400416034343698203474544527021380, 1008379175383478, - 2388543321315813, + 21888242871839275222246405745257275088548364400416034343698202071519502047717, 2146358608954591, - 3074292764429579, + 21888242871839275222246405745257275088548364400416034343698202757268945161483, 1657313107827379, - 2262896350173772, - 3918390783068063, + 21888242871839275222246405745257275088548364400416034343698201945872530905676, + 21888242871839275222246405745257275088548364400416034343698203601366963799967, 997770127874716, 493516997056562, - 4240741392034716, - 3583699361452518, - 3586821361632122, + 21888242871839275222246405745257275088548364400416034343698203923717572766620, + 21888242871839275222246405745257275088548364400416034343698203266675542184422, + 21888242871839275222246405745257275088548364400416034343698203269797542364026, 1015076302045108, - 3659595036492721, - 3834825009893496, - 3485879132480380, - 2686841628534916, - 3344607864191250, + 21888242871839275222246405745257275088548364400416034343698203342571217224625, + 21888242871839275222246405745257275088548364400416034343698203517801190625400, + 21888242871839275222246405745257275088548364400416034343698203168855313212284, + 21888242871839275222246405745257275088548364400416034343698202369817809266820, + 21888242871839275222246405745257275088548364400416034343698203027584044923154, 2157016882168876, 976013716214426, - 3116283444425641, + 21888242871839275222246405745257275088548364400416034343698202799259625157545, 572602915385600, 1049509546275963, 1788241308922528, 1687155627024480, - 2876748856682465, - 3475536963732277, + 21888242871839275222246405745257275088548364400416034343698202559725037414369, + 21888242871839275222246405745257275088548364400416034343698203158513144464181, 2172544950802351, - 2620352080379092, - 2941315140545344, - 2917105071659318, + 21888242871839275222246405745257275088548364400416034343698202303328261110996, + 21888242871839275222246405745257275088548364400416034343698202624291321277248, + 21888242871839275222246405745257275088548364400416034343698202600081252391222, 333088339509781, - 4371443296097134, - 3310454783035596, + 21888242871839275222246405745257275088548364400416034343698204054419476829038, + 21888242871839275222246405745257275088548364400416034343698202993430963767500, 543506509230683, - 3145215154544752, + 21888242871839275222246405745257275088548364400416034343698202828191335276656, 1794659593946012, 294771623954007, 1753028172549119, - 2483734965796958, - 2896650232083953, - 4204672882409689, - 2392279071462671, - 3189771629360761, - 4468560157257699, + 21888242871839275222246405745257275088548364400416034343698202166711146528862, + 21888242871839275222246405745257275088548364400416034343698202579626412815857, + 21888242871839275222246405745257275088548364400416034343698203887649063141593, + 21888242871839275222246405745257275088548364400416034343698202075255252194575, + 21888242871839275222246405745257275088548364400416034343698202872747810092665, + 21888242871839275222246405745257275088548364400416034343698204151536337989603, 1109958523921409, - 4382805584910352, - 3230882051154109, - 3411225331097955, + 21888242871839275222246405745257275088548364400416034343698204065781765642256, + 21888242871839275222246405745257275088548364400416034343698202913858231886013, + 21888242871839275222246405745257275088548364400416034343698203094201511829859, 1515537543122489, 1946612264312027, 1313634666923323, 1940876849858611, - 2663215951211261, - 2847051038508256, + 21888242871839275222246405745257275088548364400416034343698202346192131943165, + 21888242871839275222246405745257275088548364400416034343698202530027219240160, 2105692810950933, 389771178277883, 1585413961820499, - 3103635096339124, - 2429476713509050, + 21888242871839275222246405745257275088548364400416034343698202786611277071028, + 21888242871839275222246405745257275088548364400416034343698202112452894240954, 303647279145152, - 3836955643134233, + 21888242871839275222246405745257275088548364400416034343698203519931823866137, 2212761003277426, - 3254306915529969, - 3294433261187485, - 2433931852527408, + 21888242871839275222246405745257275088548364400416034343698202937283096261873, + 21888242871839275222246405745257275088548364400416034343698202977409441919389, + 21888242871839275222246405745257275088548364400416034343698202116908033259312, 847726915116486, 317757699045829, 1836818189620810, 30716730569267, 748174842584743, - 3795759813226407, + 21888242871839275222246405745257275088548364400416034343698203478735993958311, 843846112343149, 381202651701083, 1851590588061535, 2067733337779144, - 3184572897388386, + 21888242871839275222246405745257275088548364400416034343698202867549078120290, 2041627760704097, 1871129868784576, - 4018516339868048, + 21888242871839275222246405745257275088548364400416034343698203701492520599952, 1475699785788805, - 2478621361092040, - 4256599945288168, - 4444257458358464, + 21888242871839275222246405745257275088548364400416034343698202161597541823944, + 21888242871839275222246405745257275088548364400416034343698203939576126020072, + 21888242871839275222246405745257275088548364400416034343698204127233639090368, 1999475413563604, - 2523654136807197, + 21888242871839275222246405745257275088548364400416034343698202206630317539101, 149722323442065, 1138565573902861, - 3544963199019547, + 21888242871839275222246405745257275088548364400416034343698203227939379751451, 446747766760534, 2032481012862094, 1117622508437623, - 4319051540908957, + 21888242871839275222246405745257275088548364400416034343698204002027721640861, 1411361261224137, 416437257912189, 752646796613383, - 3275219169940714, + 21888242871839275222246405745257275088548364400416034343698202958195350672618, 1716197877071894, 1593975841723774, - 2809573173513781, - 3256716634908796, + 21888242871839275222246405745257275088548364400416034343698202492549354245685, + 21888242871839275222246405745257275088548364400416034343698202939692815640700, 1426366083123874, - 2252208579377649, - 4198308903951577, - 2615474074034641, - 4068023746706221, + 21888242871839275222246405745257275088548364400416034343698201935184760109553, + 21888242871839275222246405745257275088548364400416034343698203881285084683481, + 21888242871839275222246405745257275088548364400416034343698202298450254766545, + 21888242871839275222246405745257275088548364400416034343698203750999927438125, 1907679540068573, 133758430238770, 873035476697374, - 3670655486869321, - 3954522982647182, + 21888242871839275222246405745257275088548364400416034343698203353631667601225, + 21888242871839275222246405745257275088548364400416034343698203637499163379086, 1474582447086487, 1195669908952324, - 3351882550748298, + 21888242871839275222246405745257275088548364400416034343698203034858731480202, 2210516432577185, - 2311533543917719, + 21888242871839275222246405745257275088548364400416034343698201994509724649623, 368659555826797, 1088414059020555, 1979696447699882, 2054773960674265, - 3538485642638024, - 2733155243624895, + 21888242871839275222246405745257275088548364400416034343698203221461823369928, + 21888242871839275222246405745257275088548364400416034343698202416131424356799, 348631875000849, 1658176436537559, - 3495003074800061, + 21888242871839275222246405745257275088548364400416034343698203177979255531965, 1247289240742826, - 3473304446178911, - 2588437894225459, - 2409385215681641, + 21888242871839275222246405745257275088548364400416034343698203156280626910815, + 21888242871839275222246405745257275088548364400416034343698202271414074957363, + 21888242871839275222246405745257275088548364400416034343698202092361396413545, 382189167950198, - 2647962006952051, + 21888242871839275222246405745257275088548364400416034343698202330938187683955, 738344547190261, 669662367312209, - 2508589832112158, - 3061243754821686, + 21888242871839275222246405745257275088548364400416034343698202191566012844062, + 21888242871839275222246405745257275088548364400416034343698202744219935553590, 2112995365205623, 741481240178747, - 4176266168224988, + 21888242871839275222246405745257275088548364400416034343698203859242348956892, 552424594384297, 1977593497770244, - 2950615544059949, - 3899771006731259, - 3025939709854076, + 21888242871839275222246405745257275088548364400416034343698202633591724791853, + 21888242871839275222246405745257275088548364400416034343698203582747187463163, + 21888242871839275222246405745257275088548364400416034343698202708915890585980, 1232730487678470, 1786787546194727, - 4267436660843564, - 2499147683528288, + 21888242871839275222246405745257275088548364400416034343698203950412841575468, + 21888242871839275222246405745257275088548364400416034343698202182123864260192, 1349655844667195, 105191202932039, - 2364862613598514, + 21888242871839275222246405745257275088548364400416034343698202047838794330418, 1586107063829052, - 3637791096214504, + 21888242871839275222246405745257275088548364400416034343698203320767276946408, 1034578427498865, 1286619615337066, - 2340989394616406, - 2607774084666500, + 21888242871839275222246405745257275088548364400416034343698202023965575348310, + 21888242871839275222246405745257275088548364400416034343698202290750265398404, 1050460932467538, - 3345459999546362, + 21888242871839275222246405745257275088548364400416034343698203028436180278266, 284028432884992, - 3251374789177059, - 2884408060859960, - 2759904421635826, - 2989286645619957, + 21888242871839275222246405745257275088548364400416034343698202934350969908963, + 21888242871839275222246405745257275088548364400416034343698202567384241591864, + 21888242871839275222246405745257275088548364400416034343698202442880602367730, + 21888242871839275222246405745257275088548364400416034343698202672262826351861, 2247387766259720, 1431366105517330, 2136454441973359, - 2703390226581481, - 3233654010669677, - 3181632571062017, - 3426780225984303, + 21888242871839275222246405745257275088548364400416034343698202386366407313385, + 21888242871839275222246405745257275088548364400416034343698202916630191401581, + 21888242871839275222246405745257275088548364400416034343698202864608751793921, + 21888242871839275222246405745257275088548364400416034343698203109756406716207, 1352707592532410, 1369141974658159, 808500714654426, - 3152242444363530, - 3230578075767345, + 21888242871839275222246405745257275088548364400416034343698202835218625095434, + 21888242871839275222246405745257275088548364400416034343698202913554256499249, 1798546692048309, - 3587921281252650, - 3926555758107341, + 21888242871839275222246405745257275088548364400416034343698203270897461984554, + 21888242871839275222246405745257275088548364400416034343698203609531938839245, 1556966781278594, 1702284718575404, 31480426682277, 768571516681775, 43375104314638, - 2873389394875696, + 21888242871839275222246405745257275088548364400416034343698202556365575607600, 2079381461369071, 1135436004723642, - 4438254206887111, + 21888242871839275222246405745257275088548364400416034343698204121230387619015, 71598802826351, - 3236653323147636, - 4097783751687995, - 2529063344525879, + 21888242871839275222246405745257275088548364400416034343698202919629503879540, + 21888242871839275222246405745257275088548364400416034343698203780759932419899, + 21888242871839275222246405745257275088548364400416034343698202212039525257783, 148377689752423, 1890283825930481, 226276366586564, - 2429685247323716, + 21888242871839275222246405745257275088548364400416034343698202112661428055620, 221081402590661, 359418684380580, 577160116765397, - 3590037523795615, - 4464187813812415, + 21888242871839275222246405745257275088548364400416034343698203273013704527519, + 21888242871839275222246405745257275088548364400416034343698204147163994544319, 981585420154296, 300416155175862, 1326019114428362, - 3388172932608679, - 3155729148304075, - 4465496332326952, + 21888242871839275222246405745257275088548364400416034343698203071149113340583, + 21888242871839275222246405745257275088548364400416034343698202838705329035979, + 21888242871839275222246405745257275088548364400416034343698204148472513058856, 676959152063724, 267361864807355, 160308723106705, 686224916613180, - 3211031188913095, - 2507784012238323, - 3901260957455400, - 4480591722456405, - 4284953753647239, + 21888242871839275222246405745257275088548364400416034343698202894007369644999, + 21888242871839275222246405745257275088548364400416034343698202190760192970227, + 21888242871839275222246405745257275088548364400416034343698203584237138187304, + 21888242871839275222246405745257275088548364400416034343698204163567903188309, + 21888242871839275222246405745257275088548364400416034343698203967929934379143, 364772079324455, 1409970137907585, 2129956235929459, - 2686073215410038, - 2330975940491602, + 21888242871839275222246405745257275088548364400416034343698202369049396141942, + 21888242871839275222246405745257275088548364400416034343698202013952121223506, 1529669699174422, 2050131359065739, 457708092782349, 777320566002372, - 2599968165753369, - 4500683651952702, + 21888242871839275222246405745257275088548364400416034343698202282944346485273, + 21888242871839275222246405745257275088548364400416034343698204183659832684606, 1489303356828407, - 4426176215485728, - 4250817728113396, + 21888242871839275222246405745257275088548364400416034343698204109152396217632, + 21888242871839275222246405745257275088548364400416034343698203933793908845300, 1960460137053481, - 4309817278079601, - 3210808568448680, + 21888242871839275222246405745257275088548364400416034343698203992793458811505, + 21888242871839275222246405745257275088548364400416034343698202893784749180584, 968127281215704, - 2996985876296505, - 3094368638784463, - 4265924063770608, - 2568595119009496, - 3135156895756419, + 21888242871839275222246405745257275088548364400416034343698202679962057028409, + 21888242871839275222246405745257275088548364400416034343698202777344819516367, + 21888242871839275222246405745257275088548364400416034343698203948900244502512, + 21888242871839275222246405745257275088548364400416034343698202251571299741400, + 21888242871839275222246405745257275088548364400416034343698202818133076488323, 2210988348288972, 2217076958061339, 1417888910973672, 172249043450031, - 4082652486221447, + 21888242871839275222246405745257275088548364400416034343698203765628666953351, 1381476312696242, - 3937493701604965, + 21888242871839275222246405745257275088548364400416034343698203620469882336869, 1225462155285994, 266381204225078, 1596244745445169, - 3172356902370369, + 21888242871839275222246405745257275088548364400416034343698202855333083102273, 1979673458560503, 1843656321531734, 1745926166985284, - 2337432856779980, + 21888242871839275222246405745257275088548364400416034343698202020409037511884, 1099750130381244, - 3046601275323031, + 21888242871839275222246405745257275088548364400416034343698202729577456054935, 726629490596987, 1472580715309729, 906572560477016, 1880627141617638, 1837446966003820, - 3086084886808935, + 21888242871839275222246405745257275088548364400416034343698202769061067540839, 1902456989836146, - 4326533654228241, + 21888242871839275222246405745257275088548364400416034343698204009509834960145, 789571415649540, 484618849858351, - 3348821305161584, + 21888242871839275222246405745257275088548364400416034343698203031797485893488, 856889433026531, - 2647472432594882, + 21888242871839275222246405745257275088548364400416034343698202330448613326786, 1998832169348002, 849560750181887, - 2417242448870385, + 21888242871839275222246405745257275088548364400416034343698202100218629602289, 1777079092010227, - 2544464618230687, - 3462567256956219, + 21888242871839275222246405745257275088548364400416034343698202227440798962591, + 21888242871839275222246405745257275088548364400416034343698203145543437688123, 1842931807278912, - 3203229558928906, - 3914854458556388, + 21888242871839275222246405745257275088548364400416034343698202886205739660810, + 21888242871839275222246405745257275088548364400416034343698203597830639288292, 744149049504538, 784517985042791, - 2693433912697693, + 21888242871839275222246405745257275088548364400416034343698202376410093429597, 1033291467591929, - 4109993395182099, - 4043563089565384, + 21888242871839275222246405745257275088548364400416034343698203792969575914003, + 21888242871839275222246405745257275088548364400416034343698203726539270297288, 370092361623281, 231702098980020, 1917083680380779, 229541578460991, 1733607404058966, - 3144078056663885, - 4374817195761282, - 2497516616454693, - 2821123140413029, - 3185566731164336, + 21888242871839275222246405745257275088548364400416034343698202827054237395789, + 21888242871839275222246405745257275088548364400416034343698204057793376493186, + 21888242871839275222246405745257275088548364400416034343698202180492797186597, + 21888242871839275222246405745257275088548364400416034343698202504099321144933, + 21888242871839275222246405745257275088548364400416034343698202868542911896240, 805001381697165, - 3021364582888304, - 2953662289257106, + 21888242871839275222246405745257275088548364400416034343698202704340763620208, + 21888242871839275222246405745257275088548364400416034343698202636638469989010, 1282170447833663, 59880980904302, - 2806157844140126, + 21888242871839275222246405745257275088548364400416034343698202489134024872030, 95899453393654, 1664066124017068, - 3194622567718836, + 21888242871839275222246405745257275088548364400416034343698202877598748450740, 1249678642730327, - 4459895965611167, + 21888242871839275222246405745257275088548364400416034343698204142872146343071, 832139748664847, 969787424973583, 420233865879614, 20043582471965, 1842105998754090, 521596295393720, - 4462263211851676, - 4375996367253952, - 2792838006699991, - 3321538047422515, + 21888242871839275222246405745257275088548364400416034343698204145239392583580, + 21888242871839275222246405745257275088548364400416034343698204058972547985856, + 21888242871839275222246405745257275088548364400416034343698202475814187431895, + 21888242871839275222246405745257275088548364400416034343698203004514228154419, 155331246500938, - 3617831119970654, + 21888242871839275222246405745257275088548364400416034343698203300807300702558, 1827393529474349, 2043024309798390, 1130024466780234, - 2738328149773119, + 21888242871839275222246405745257275088548364400416034343698202421304330505023, 1386456118067422, 920776513989528, 709063416985560, - 3426843855695499, - 4045849350162407, - 3119906060035367, + 21888242871839275222246405745257275088548364400416034343698203109820036427403, + 21888242871839275222246405745257275088548364400416034343698203728825530894311, + 21888242871839275222246405745257275088548364400416034343698202802882240767271, 1844320799280231, 1695988392074925, 297568129429301, - 2954765021355237, + 21888242871839275222246405745257275088548364400416034343698202637741202087141, 209285747361431, - 2390516822354605, + 21888242871839275222246405745257275088548364400416034343698202073493003086509, 922786467229736, 159816557405487, - 3894286719954830, - 4032669305462525, - 4069814994859403, + 21888242871839275222246405745257275088548364400416034343698203577262900686734, + 21888242871839275222246405745257275088548364400416034343698203715645486194429, + 21888242871839275222246405745257275088548364400416034343698203752791175591307, 1942685257534142, - 2647245087992089, - 3875577692083612, + 21888242871839275222246405745257275088548364400416034343698202330221268723993, + 21888242871839275222246405745257275088548364400416034343698203558553872815516, 1329305541609611, - 3019777268425417, + 21888242871839275222246405745257275088548364400416034343698202702753449157321, 1632061917176392, - 3804339472419758, - 4035239775970404, + 21888242871839275222246405745257275088548364400416034343698203487315653151662, + 21888242871839275222246405745257275088548364400416034343698203718215956702308, 1268690292857253, - 3858967751410504, + 21888242871839275222246405745257275088548364400416034343698203541943932142408, 1788811308664699, 802348220225794, - 3959766149858767, - 2974944938370642, + 21888242871839275222246405745257275088548364400416034343698203642742330590671, + 21888242871839275222246405745257275088548364400416034343698202657921119102546, 589375791825538, 970334836330088, - 2890580767254412, + 21888242871839275222246405745257275088548364400416034343698202573556947986316, 1576046882187840, 1351344226668133, - 2782314140063403, - 4127736066721561, - 4447338462390800, - 3416948548733194, - 3328449823662664, + 21888242871839275222246405745257275088548364400416034343698202465290320795307, + 21888242871839275222246405745257275088548364400416034343698203810712247453465, + 21888242871839275222246405745257275088548364400416034343698204130314643122704, + 21888242871839275222246405745257275088548364400416034343698203099924729465098, + 21888242871839275222246405745257275088548364400416034343698203011426004394568, 62032733874459, - 2726903266326068, - 3993017548644740, + 21888242871839275222246405745257275088548364400416034343698202409879447057972, + 21888242871839275222246405745257275088548364400416034343698203675993729376644, 1414341031392396, 1689309272110730, 1618291609389321, @@ -11260,46 +11260,46 @@ pub global CRP: [Polynomial; L] = [ 55716160353758, 1359445717352099, 887636659439712, - 3513849878820992, - 4053694617825277, + 21888242871839275222246405745257275088548364400416034343698203196826059552896, + 21888242871839275222246405745257275088548364400416034343698203736670798557181, 712455516446900, 801682615789978, 1372357180898205, 1865678199919388, - 3631980768408739, - 2625037152948516, + 21888242871839275222246405745257275088548364400416034343698203314956949140643, + 21888242871839275222246405745257275088548364400416034343698202308013333680420, 354891021280992, 128059249686067, - 3664644354557490, + 21888242871839275222246405745257275088548364400416034343698203347620535289394, 914760332473932, 1638009071087027, 1060088721475996, 190806972172954, - 2556952561458860, + 21888242871839275222246405745257275088548364400416034343698202239928742190764, 1681590725236767, - 4472538320840218, - 4024085981514826, + 21888242871839275222246405745257275088548364400416034343698204155514501572122, + 21888242871839275222246405745257275088548364400416034343698203707062162246730, 106400026529155, 1976386587637003, - 3293352029733329, + 21888242871839275222246405745257275088548364400416034343698202976328210465233, 238341633778941, - 3397951101571523, + 21888242871839275222246405745257275088548364400416034343698203080927282303427, 1375751503458176, - 2649926529563544, + 21888242871839275222246405745257275088548364400416034343698202332902710295448, 1327547999278565, - 2621837286238713, - 2624605432273964, + 21888242871839275222246405745257275088548364400416034343698202304813466970617, + 21888242871839275222246405745257275088548364400416034343698202307581613005868, 787789368429555, - 4438160992642406, - 3671344588811078, - 2641242140768145, + 21888242871839275222246405745257275088548364400416034343698204121137173374310, + 21888242871839275222246405745257275088548364400416034343698203354320769542982, + 21888242871839275222246405745257275088548364400416034343698202324218321500049, 1128266970238863, - 4002137050828170, + 21888242871839275222246405745257275088548364400416034343698203685113231560074, 1917451257280263, - 3671364778323794, - 4484427048793188, - 2452705375125287, - 2611427368259942, + 21888242871839275222246405745257275088548364400416034343698203354340959055698, + 21888242871839275222246405745257275088548364400416034343698204167403229525092, + 21888242871839275222246405745257275088548364400416034343698202135681555857191, + 21888242871839275222246405745257275088548364400416034343698202294403548991846, 1340641316933584, 1101095833055421, 322625737628176, @@ -11308,248 +11308,248 @@ pub global CRP: [Polynomial; L] = [ 1629248638193613, 744501752172228, 479850235585272, - 3628572686887899, + 21888242871839275222246405745257275088548364400416034343698203311548867619803, 1299982676485267, - 2350701135373598, + 21888242871839275222246405745257275088548364400416034343698202033677316105502, 928719391954495, 383583323682137, 1295206212143444, 615771124375220, 1366407624003321, 957212282573236, - 3796276690955108, + 21888242871839275222246405745257275088548364400416034343698203479252871687012, 397343262743408, 2082473990480731, 187776641633476, - 3790087563219900, - 3475307840020348, - 3598050927358672, + 21888242871839275222246405745257275088548364400416034343698203473063743951804, + 21888242871839275222246405745257275088548364400416034343698203158284020752252, + 21888242871839275222246405745257275088548364400416034343698203281027108090576, 1273984181812664, - 3908302018912623, - 3974019787167834, + 21888242871839275222246405745257275088548364400416034343698203591278199644527, + 21888242871839275222246405745257275088548364400416034343698203656995967899738, 1324213951820845, 1272965450162060, 1513036904668130, 2061137044033697, 760935240028907, - 4110655307302084, - 3023780516113490, - 3517403771684812, - 4034016162059415, + 21888242871839275222246405745257275088548364400416034343698203793631488033988, + 21888242871839275222246405745257275088548364400416034343698202706756696845394, + 21888242871839275222246405745257275088548364400416034343698203200379952416716, + 21888242871839275222246405745257275088548364400416034343698203716992342791319, 1743463280535976, 1861624589080397, 1540384008017634, 199132514627631, - 2365225621985714, - 2970949781721713, - 3120820744791087, + 21888242871839275222246405745257275088548364400416034343698202048201802717618, + 21888242871839275222246405745257275088548364400416034343698202653925962453617, + 21888242871839275222246405745257275088548364400416034343698202803796925522991, 745134557819016, 486868843867956, - 3163982944672239, - 3030241177817901, - 2826794402231020, - 2939989748692398, + 21888242871839275222246405745257275088548364400416034343698202846959125404143, + 21888242871839275222246405745257275088548364400416034343698202713217358549805, + 21888242871839275222246405745257275088548364400416034343698202509770582962924, + 21888242871839275222246405745257275088548364400416034343698202622965929424302, 1397182601678949, 731147289811776, 1793487069963432, - 2356636486258353, - 3136944684231817, + 21888242871839275222246405745257275088548364400416034343698202039612666990257, + 21888242871839275222246405745257275088548364400416034343698202819920864963721, 690009773220882, 884972804064650, - 3652484156515699, - 3563169845340194, - 2537853862571429, + 21888242871839275222246405745257275088548364400416034343698203335460337247603, + 21888242871839275222246405745257275088548364400416034343698203246146026072098, + 21888242871839275222246405745257275088548364400416034343698202220830043303333, 418688911466686, 2246522294822755, 4690785347425, 921528145693064, - 2409300528885940, + 21888242871839275222246405745257275088548364400416034343698202092276709617844, 2068117066226655, - 3316988957483222, - 4471419274504725, - 2709449155335021, - 2603247132558865, + 21888242871839275222246405745257275088548364400416034343698202999965138215126, + 21888242871839275222246405745257275088548364400416034343698204154395455236629, + 21888242871839275222246405745257275088548364400416034343698202392425336066925, + 21888242871839275222246405745257275088548364400416034343698202286223313290769, 613336365917642, - 3426904727495936, + 21888242871839275222246405745257275088548364400416034343698203109880908227840, 54094807864935, 69127885581766, - 4231547170139191, + 21888242871839275222246405745257275088548364400416034343698203914523350871095, 464105857110647, - 2552849463087937, - 3703804778290640, + 21888242871839275222246405745257275088548364400416034343698202235825643819841, + 21888242871839275222246405745257275088548364400416034343698203386780959022544, 187495302549386, - 3979777431533602, + 21888242871839275222246405745257275088548364400416034343698203662753612265506, 427337997807371, - 3538672250011715, - 2488991134197136, + 21888242871839275222246405745257275088548364400416034343698203221648430743619, + 21888242871839275222246405745257275088548364400416034343698202171967314929040, 1996552883968696, 190636664604229, 1236920768320072, - 2961116647347320, + 21888242871839275222246405745257275088548364400416034343698202644092828079224, 265493355557801, 2081248670345817, 1149669284737009, - 4220051056304249, - 4073055855405164, - 2873921126184957, - 4102221672729996, - 2950842389727502, + 21888242871839275222246405745257275088548364400416034343698203903027237036153, + 21888242871839275222246405745257275088548364400416034343698203756032036137068, + 21888242871839275222246405745257275088548364400416034343698202556897306916861, + 21888242871839275222246405745257275088548364400416034343698203785197853461900, + 21888242871839275222246405745257275088548364400416034343698202633818570459406, 1783374411284275, 1504991511190089, 563533522411625, - 2259637566054148, - 3944563502135757, + 21888242871839275222246405745257275088548364400416034343698201942613746786052, + 21888242871839275222246405745257275088548364400416034343698203627539682867661, 1263533283282806, 1074855263060138, - 4060569617055082, - 2328558076062920, + 21888242871839275222246405745257275088548364400416034343698203743545797786986, + 21888242871839275222246405745257275088548364400416034343698202011534256794824, 22132049278243, - 2456083641328907, - 4062987610676339, + 21888242871839275222246405745257275088548364400416034343698202139059822060811, + 21888242871839275222246405745257275088548364400416034343698203745963791408243, 2232715881272996, 1438954450802448, 760249769696854, 1960219216562901, 392728535621841, - 3295509383696835, - 3357386983989945, - 3660976281558944, - 3489619329902976, - 3871116815783962, + 21888242871839275222246405745257275088548364400416034343698202978485564428739, + 21888242871839275222246405745257275088548364400416034343698203040363164721849, + 21888242871839275222246405745257275088548364400416034343698203343952462290848, + 21888242871839275222246405745257275088548364400416034343698203172595510634880, + 21888242871839275222246405745257275088548364400416034343698203554092996515866, 1799678538572967, - 4344152479076159, + 21888242871839275222246405745257275088548364400416034343698204027128659808063, 445976260101494, 381549488186185, - 3173349091295105, - 3409169814827307, - 2253315712850076, + 21888242871839275222246405745257275088548364400416034343698202856325272027009, + 21888242871839275222246405745257275088548364400416034343698203092145995559211, + 21888242871839275222246405745257275088548364400416034343698201936291893581980, 1987060761168950, - 3565338781923715, + 21888242871839275222246405745257275088548364400416034343698203248314962655619, 176122187706176, - 4156012104538595, - 4021451751188004, - 3958047853889805, + 21888242871839275222246405745257275088548364400416034343698203838988285270499, + 21888242871839275222246405745257275088548364400416034343698203704427931919908, + 21888242871839275222246405745257275088548364400416034343698203641024034621709, 2230522851325044, - 3723088506701590, - 3002281467170379, - 3663495769302399, + 21888242871839275222246405745257275088548364400416034343698203406064687433494, + 21888242871839275222246405745257275088548364400416034343698202685257647902283, + 21888242871839275222246405745257275088548364400416034343698203346471950034303, 1619267339459288, - 2556736231049951, - 3939064794363305, + 21888242871839275222246405745257275088548364400416034343698202239712411781855, + 21888242871839275222246405745257275088548364400416034343698203622040975095209, 1836807005804056, - 3941146196412951, + 21888242871839275222246405745257275088548364400416034343698203624122377144855, 1397279335370925, 2008278390829158, - 4012248521264209, + 21888242871839275222246405745257275088548364400416034343698203695224701996113, 1570906971139382, - 4192870305447605, + 21888242871839275222246405745257275088548364400416034343698203875846486179509, 807126814408885, - 3098212271816679, + 21888242871839275222246405745257275088548364400416034343698202781188452548583, 274385786742883, - 2721066609395651, - 4007525319075887, - 3335829339644464, - 3028471039437212, - 2632324111492445, + 21888242871839275222246405745257275088548364400416034343698202404042790127555, + 21888242871839275222246405745257275088548364400416034343698203690501499807791, + 21888242871839275222246405745257275088548364400416034343698203018805520376368, + 21888242871839275222246405745257275088548364400416034343698202711447220169116, + 21888242871839275222246405745257275088548364400416034343698202315300292224349, 356764951907662, - 4455844198392862, - 3902228380057805, + 21888242871839275222246405745257275088548364400416034343698204138820379124766, + 21888242871839275222246405745257275088548364400416034343698203585204560789709, 636394696757605, - 4266342935745532, + 21888242871839275222246405745257275088548364400416034343698203949319116477436, 1511511993632127, 548760289449913, 1931788874758655, - 2271255285792977, - 3529168456408997, + 21888242871839275222246405745257275088548364400416034343698201954231466524881, + 21888242871839275222246405745257275088548364400416034343698203212144637140901, 1263682635832709, - 3024746516901908, - 4484345849253170, + 21888242871839275222246405745257275088548364400416034343698202707722697633812, + 21888242871839275222246405745257275088548364400416034343698204167322029985074, 293401565582385, 1842743447693104, 500251855189585, - 2764855238329048, - 2292775999887810, - 2807180121166931, - 4258988351997282, + 21888242871839275222246405745257275088548364400416034343698202447831419060952, + 21888242871839275222246405745257275088548364400416034343698201975752180619714, + 21888242871839275222246405745257275088548364400416034343698202490156301898835, + 21888242871839275222246405745257275088548364400416034343698203941964532729186, 505559037019473, 2247169364067263, 577555423704346, - 2781646708241827, + 21888242871839275222246405745257275088548364400416034343698202464622888973731, 103734558716638, - 3859381335309766, + 21888242871839275222246405745257275088548364400416034343698203542357516041670, 2121461165695385, - 3468017885546234, - 3893637744408825, + 21888242871839275222246405745257275088548364400416034343698203150994066278138, + 21888242871839275222246405745257275088548364400416034343698203576613925140729, 225131421359419, 1711374677715147, - 2590999586217164, - 2275535373586226, + 21888242871839275222246405745257275088548364400416034343698202273975766949068, + 21888242871839275222246405745257275088548364400416034343698201958511554318130, 1626290866164048, - 3484481294205975, - 3934024703562388, - 3642419708126047, + 21888242871839275222246405745257275088548364400416034343698203167457474937879, + 21888242871839275222246405745257275088548364400416034343698203617000884294292, + 21888242871839275222246405745257275088548364400416034343698203325395888857951, 1233559903351759, - 2817740322473778, - 2287283329740731, + 21888242871839275222246405745257275088548364400416034343698202500716503205682, + 21888242871839275222246405745257275088548364400416034343698201970259510472635, 457036282172206, - 2876255689982645, + 21888242871839275222246405745257275088548364400416034343698202559231870714549, 1279481216550025, - 4172104668317235, - 3678820116289732, - 3822380975245389, + 21888242871839275222246405745257275088548364400416034343698203855080849049139, + 21888242871839275222246405745257275088548364400416034343698203361796297021636, + 21888242871839275222246405745257275088548364400416034343698203505357155977293, 2100443180062593, - 3807426284433230, + 21888242871839275222246405745257275088548364400416034343698203490402465165134, 656029417637224, 2163137383950252, 436842197032306, - 3088298988497520, + 21888242871839275222246405745257275088548364400416034343698202771275169229424, 672824168356515, - 2933175021167591, - 2994135178212904, + 21888242871839275222246405745257275088548364400416034343698202616151201899495, + 21888242871839275222246405745257275088548364400416034343698202677111358944808, 568120015144382, 526218694530270, 876762874547613, - 4278372247297722, - 2739998621642120, - 3955244283720662, + 21888242871839275222246405745257275088548364400416034343698203961348428029626, + 21888242871839275222246405745257275088548364400416034343698202422974802374024, + 21888242871839275222246405745257275088548364400416034343698203638220464452566, 256796810831977, 851116187632245, - 4005410662597627, + 21888242871839275222246405745257275088548364400416034343698203688386843329531, 1616869951564432, - 4404464366783950, - 3333838668268728, - 2621229404627186, - 4443251520230859, + 21888242871839275222246405745257275088548364400416034343698204087440547515854, + 21888242871839275222246405745257275088548364400416034343698203016814849000632, + 21888242871839275222246405745257275088548364400416034343698202304205585359090, + 21888242871839275222246405745257275088548364400416034343698204126227700962763, 948631702550733, 1930383071033603, - 2691074273260174, - 3723558567945055, - 4091855476793901, - 3667299600087686, + 21888242871839275222246405745257275088548364400416034343698202374050453992078, + 21888242871839275222246405745257275088548364400416034343698203406534748676959, + 21888242871839275222246405745257275088548364400416034343698203774831657525805, + 21888242871839275222246405745257275088548364400416034343698203350275780819590, 1570083656136194, 1481574837578885, - 3862755889521743, + 21888242871839275222246405745257275088548364400416034343698203545732070253647, 866897580648722, 178242622643578, 1395025948049513, 2150789846864733, - 4248973641010703, + 21888242871839275222246405745257275088548364400416034343698203931949821742607, 1348368433839758, - 3830559837208227, - 2465556979894911, - 3026143604764422, + 21888242871839275222246405745257275088548364400416034343698203513536017940131, + 21888242871839275222246405745257275088548364400416034343698202148533160626815, + 21888242871839275222246405745257275088548364400416034343698202709119785496326, 1072624557567768, 320538337619996, 1253888618877376, - 3370769140087768, + 21888242871839275222246405745257275088548364400416034343698203053745320819672, 933769324909332, 1394436656863008, 1000332902252882, - 3516644244793172, - 2559997090514611, - 4296353656769022, - 2464473966033451, - 3282914029895361, + 21888242871839275222246405745257275088548364400416034343698203199620425525076, + 21888242871839275222246405745257275088548364400416034343698202242973271246515, + 21888242871839275222246405745257275088548364400416034343698203979329837500926, + 21888242871839275222246405745257275088548364400416034343698202147450146765355, + 21888242871839275222246405745257275088548364400416034343698202965890210627265, 76838719250773, 1904898812963934, 1571492035645616, @@ -11558,128 +11558,128 @@ pub global CRP: [Polynomial; L] = [ 1373464439063110, 2040620188693648, 1024946896415869, - 4095833607470276, - 2320055707874915, - 3685537743812721, - 3836125852181713, + 21888242871839275222246405745257275088548364400416034343698203778809788202180, + 21888242871839275222246405745257275088548364400416034343698202003031888606819, + 21888242871839275222246405745257275088548364400416034343698203368513924544625, + 21888242871839275222246405745257275088548364400416034343698203519102032913617, 560897704094595, - 4181493833175997, - 2648161404538903, + 21888242871839275222246405745257275088548364400416034343698203864470013907901, + 21888242871839275222246405745257275088548364400416034343698202331137585270807, 1057159861613904, - 2968798328460752, + 21888242871839275222246405745257275088548364400416034343698202651774509192656, 15411560356159, 943968741897884, 1196026567586527, 1214526219563882, 831045708019262, - 2739136875028195, + 21888242871839275222246405745257275088548364400416034343698202422113055760099, 1180826196366205, 2013367121946830, - 3775443252057709, - 2612438146600297, - 3230080724213518, + 21888242871839275222246405745257275088548364400416034343698203458419432789613, + 21888242871839275222246405745257275088548364400416034343698202295414327332201, + 21888242871839275222246405745257275088548364400416034343698202913056904945422, 912278988179830, - 3654724680217841, + 21888242871839275222246405745257275088548364400416034343698203337700860949745, 1823710790516169, - 2303288795422592, - 3283223830025154, + 21888242871839275222246405745257275088548364400416034343698201986264976154496, + 21888242871839275222246405745257275088548364400416034343698202966200010757058, 1246754113064987, - 2458143869545914, + 21888242871839275222246405745257275088548364400416034343698202141120050277818, 2218596126448952, 2176647345519364, 1944704619039432, 2088746459452934, - 4203033501381707, - 3537085787414494, + 21888242871839275222246405745257275088548364400416034343698203886009682113611, + 21888242871839275222246405745257275088548364400416034343698203220061968146398, 1719046890876782, - 3622474191511086, + 21888242871839275222246405745257275088548364400416034343698203305450372242990, 301901821530924, - 3302349895449699, + 21888242871839275222246405745257275088548364400416034343698202985326076181603, 542402003882708, - 3680671268126381, + 21888242871839275222246405745257275088548364400416034343698203363647448858285, 1807271966658089, 431761616477169, 514872000605378, 445816482358035, 1342020040589750, 1052960372944802, - 2374064464762726, + 21888242871839275222246405745257275088548364400416034343698202057040645494630, 385461861652926, - 2468644189338901, - 3719329393885259, + 21888242871839275222246405745257275088548364400416034343698202151620370070805, + 21888242871839275222246405745257275088548364400416034343698203402305574617163, 1667457766053047, 2240946942393981, 1050473616666974, - 4022673987725729, - 2896828516565458, - 2423920869642450, - 2331978813580675, - 3553962648072574, + 21888242871839275222246405745257275088548364400416034343698203705650168457633, + 21888242871839275222246405745257275088548364400416034343698202579804697297362, + 21888242871839275222246405745257275088548364400416034343698202106897050374354, + 21888242871839275222246405745257275088548364400416034343698202014954994312579, + 21888242871839275222246405745257275088548364400416034343698203236938828804478, 2137357059140851, - 4452971618835104, - 3892617334036477, + 21888242871839275222246405745257275088548364400416034343698204135947799567008, + 21888242871839275222246405745257275088548364400416034343698203575593514768381, 1928040700819151, - 2901097907019684, + 21888242871839275222246405745257275088548364400416034343698202584074087751588, 1997330948121800, - 3291518141860504, - 3318530743408921, - 3387026123375915, - 3972502279204158, - 4377705076489277, - 3255007435675650, - 2488091264261117, + 21888242871839275222246405745257275088548364400416034343698202974494322592408, + 21888242871839275222246405745257275088548364400416034343698203001506924140825, + 21888242871839275222246405745257275088548364400416034343698203070002304107819, + 21888242871839275222246405745257275088548364400416034343698203655478459936062, + 21888242871839275222246405745257275088548364400416034343698204060681257221181, + 21888242871839275222246405745257275088548364400416034343698202937983616407554, + 21888242871839275222246405745257275088548364400416034343698202171067444993021, 660991754475976, - 3963263843425753, - 3895762750328450, - 2477990510266685, + 21888242871839275222246405745257275088548364400416034343698203646240024157657, + 21888242871839275222246405745257275088548364400416034343698203578738931060354, + 21888242871839275222246405745257275088548364400416034343698202160966690998589, 1173521299947626, - 3876526380666094, - 4367770461694625, - 3080918167607328, + 21888242871839275222246405745257275088548364400416034343698203559502561397998, + 21888242871839275222246405745257275088548364400416034343698204050746642426529, + 21888242871839275222246405745257275088548364400416034343698202763894348339232, 322760148333455, - 4393344982989967, + 21888242871839275222246405745257275088548364400416034343698204076321163721871, 1953796393720430, 1920259095860570, 1311722789389115, 411113166791799, 1816838402787216, - 2956920029245898, - 3419094699704632, + 21888242871839275222246405745257275088548364400416034343698202639896209977802, + 21888242871839275222246405745257275088548364400416034343698203102070880436536, 364180755082900, 2248253409634916, 193061056807023, - 4455421916998351, + 21888242871839275222246405745257275088548364400416034343698204138398097730255, 290809984557600, 207969951729813, 1657960115803247, - 3334490913950271, + 21888242871839275222246405745257275088548364400416034343698203017467094682175, 449952954542502, - 4240202099726320, - 3378270389690090, - 2283496901276389, + 21888242871839275222246405745257275088548364400416034343698203923178280458224, + 21888242871839275222246405745257275088548364400416034343698203061246570421994, + 21888242871839275222246405745257275088548364400416034343698201966473082008293, 958000212534433, 2092772342281692, - 3628488017106218, + 21888242871839275222246405745257275088548364400416034343698203311464197838122, 1333316556055094, 1334355143049350, - 2892502010741241, + 21888242871839275222246405745257275088548364400416034343698202575478191473145, 731725509081293, 1085222383466175, - 4138100349386959, - 3475671658682740, + 21888242871839275222246405745257275088548364400416034343698203821076530118863, + 21888242871839275222246405745257275088548364400416034343698203158647839414644, 735729994214124, 370098218491804, 2085646804588013, 555123198160834, - 4218892234958101, + 21888242871839275222246405745257275088548364400416034343698203901868415690005, 806591780234503, 976812854330116, - 2688983089240475, - 2761943941651374, + 21888242871839275222246405745257275088548364400416034343698202371959269972379, + 21888242871839275222246405745257275088548364400416034343698202444920122383278, 475070684342107, - 3394146804540761, + 21888242871839275222246405745257275088548364400416034343698203077122985272665, 697243041481273, - 4295572091000953, + 21888242871839275222246405745257275088548364400416034343698203978548271732857, 245505962895788, 1307368138861046, 1819753009243717, @@ -11688,362 +11688,362 @@ pub global CRP: [Polynomial; L] = [ 572449671655327, 2179643228965278, 830805886588324, - 3583027053349205, + 21888242871839275222246405745257275088548364400416034343698203266003234081109, 1211346547484241, - 3690763377171161, - 3325494197545086, - 3142552582400353, + 21888242871839275222246405745257275088548364400416034343698203373739557903065, + 21888242871839275222246405745257275088548364400416034343698203008470378276990, + 21888242871839275222246405745257275088548364400416034343698202825528763132257, 1804916795868544, 2119799853537461, - 2996830152690375, + 21888242871839275222246405745257275088548364400416034343698202679806333422279, 2239643827002616, - 3706140298639187, - 2464252428084907, - 2443261661273472, + 21888242871839275222246405745257275088548364400416034343698203389116479371091, + 21888242871839275222246405745257275088548364400416034343698202147228608816811, + 21888242871839275222246405745257275088548364400416034343698202126237842005376, 515522592705588, 121607984346950, 1705700278339445, 322899632474954, - 3581481474194868, - 4017529433625275, + 21888242871839275222246405745257275088548364400416034343698203264457654926772, + 21888242871839275222246405745257275088548364400416034343698203700505614357179, 1568682263963880, - 3267237497254312, + 21888242871839275222246405745257275088548364400416034343698202950213677986216, 216705652232351, - 3338279186962995, - 3446892921457643, + 21888242871839275222246405745257275088548364400416034343698203021255367694899, + 21888242871839275222246405745257275088548364400416034343698203129869102189547, 1107184762561031, - 4485645819411184, + 21888242871839275222246405745257275088548364400416034343698204168622000143088, 1236955810939701, 1090838610496187, - 4247019412531723, + 21888242871839275222246405745257275088548364400416034343698203929995593263627, 2027880851615299, 1859776918832227, 235331009286527, - 2691616135760209, + 21888242871839275222246405745257275088548364400416034343698202374592316492113, 1388620611988387, - 3592257320402991, + 21888242871839275222246405745257275088548364400416034343698203275233501134895, 864023425105910, - 2876726967411827, - 3745358741766878, + 21888242871839275222246405745257275088548364400416034343698202559703148143731, + 21888242871839275222246405745257275088548364400416034343698203428334922498782, 945063042199860, 695943605505888, 1434541255490003, 315676288488869, - 3653908096494669, + 21888242871839275222246405745257275088548364400416034343698203336884277226573, 1260154162727004, - 4284265060453560, - 2398906992305917, + 21888242871839275222246405745257275088548364400416034343698203967241241185464, + 21888242871839275222246405745257275088548364400416034343698202081883173037821, 675615141672997, - 4406107436193163, + 21888242871839275222246405745257275088548364400416034343698204089083616925067, 1803592963684806, 1962527980603167, 1514094360195847, 1117535272000248, - 4356661174813750, - 2373021139885644, - 3808250357010566, - 3147166336086676, + 21888242871839275222246405745257275088548364400416034343698204039637355545654, + 21888242871839275222246405745257275088548364400416034343698202055997320617548, + 21888242871839275222246405745257275088548364400416034343698203491226537742470, + 21888242871839275222246405745257275088548364400416034343698202830142516818580, 2135740769290342, 1154460333373342, 953384429306638, - 2289958551447844, - 3560089056497641, - 2566160801802725, - 3853654430557187, + 21888242871839275222246405745257275088548364400416034343698201972934732179748, + 21888242871839275222246405745257275088548364400416034343698203243065237229545, + 21888242871839275222246405745257275088548364400416034343698202249136982534629, + 21888242871839275222246405745257275088548364400416034343698203536630611289091, 1299139323590396, - 3813115101659662, - 4292144837048311, - 3241377033657655, + 21888242871839275222246405745257275088548364400416034343698203496091282391566, + 21888242871839275222246405745257275088548364400416034343698203975121017780215, + 21888242871839275222246405745257275088548364400416034343698202924353214389559, 1834469730158016, - 3668271227148148, + 21888242871839275222246405745257275088548364400416034343698203351247407880052, 655079331969008, 77895322069524, 609452447146649, - 3764255433790383, - 3556250466070445, + 21888242871839275222246405745257275088548364400416034343698203447231614522287, + 21888242871839275222246405745257275088548364400416034343698203239226646802349, 1694188775594145, - 4312504342277782, + 21888242871839275222246405745257275088548364400416034343698203995480523009686, 1797936626985411, - 3710844059997082, + 21888242871839275222246405745257275088548364400416034343698203393820240728986, 1340598712011365, 1486698217460772, 1619263276098949, 663803738079834, 236022119101983, - 3865061491593665, + 21888242871839275222246405745257275088548364400416034343698203548037672325569, 920772254733094, - 2962850266534024, + 21888242871839275222246405745257275088548364400416034343698202645826447265928, 753147448867431, 362638799089393, 1356380542666836, 1748541494236152, 826718026871844, 1552696219808575, - 2685113370440855, - 4146230837298854, - 2725507016878353, - 3132468975836529, + 21888242871839275222246405745257275088548364400416034343698202368089551172759, + 21888242871839275222246405745257275088548364400416034343698203829207018030758, + 21888242871839275222246405745257275088548364400416034343698202408483197610257, + 21888242871839275222246405745257275088548364400416034343698202815445156568433, 1588267313797040, - 3019271158382954, - 3171473727329771, - 3231063264936747, + 21888242871839275222246405745257275088548364400416034343698202702247339114858, + 21888242871839275222246405745257275088548364400416034343698202854449908061675, + 21888242871839275222246405745257275088548364400416034343698202914039445668651, 1185054929326739, 956854406729608, 301574069155807, - 3604900983867912, + 21888242871839275222246405745257275088548364400416034343698203287877164599816, 1407138411785281, 608378799465785, 1638385091611886, - 3475446716108479, + 21888242871839275222246405745257275088548364400416034343698203158422896840383, 2043092957626536, 1726211123399416, - 3633485105796568, + 21888242871839275222246405745257275088548364400416034343698203316461286528472, 2065060864993232, - 3758318918776688, + 21888242871839275222246405745257275088548364400416034343698203441295099508592, 907930848247215, - 3436127001096281, - 2609326445721457, - 2596555304273557, + 21888242871839275222246405745257275088548364400416034343698203119103181828185, + 21888242871839275222246405745257275088548364400416034343698202292302626453361, + 21888242871839275222246405745257275088548364400416034343698202279531485005461, 1033147565407768, 305240036150044, 1999020212924241, - 3538369134225880, - 3806426763689990, - 2405830248618182, - 4058288943642342, - 3192817434729890, + 21888242871839275222246405745257275088548364400416034343698203221345314957784, + 21888242871839275222246405745257275088548364400416034343698203489402944421894, + 21888242871839275222246405745257275088548364400416034343698202088806429350086, + 21888242871839275222246405745257275088548364400416034343698203741265124374246, + 21888242871839275222246405745257275088548364400416034343698202875793615461794, 29043213235628, - 2886336396352448, + 21888242871839275222246405745257275088548364400416034343698202569312577084352, 398921597095561, 1367628278605540, - 4093860601285507, - 3881633189830730, + 21888242871839275222246405745257275088548364400416034343698203776836782017411, + 21888242871839275222246405745257275088548364400416034343698203564609370562634, 1049657071634300, - 2530714514917036, - 2569154734948230, - 3937889563775350, - 3022313112268745, - 2873867711730015, - 3238833725948062, - 2769314809213474, + 21888242871839275222246405745257275088548364400416034343698202213690695648940, + 21888242871839275222246405745257275088548364400416034343698202252130915680134, + 21888242871839275222246405745257275088548364400416034343698203620865744507254, + 21888242871839275222246405745257275088548364400416034343698202705289293000649, + 21888242871839275222246405745257275088548364400416034343698202556843892461919, + 21888242871839275222246405745257275088548364400416034343698202921809906679966, + 21888242871839275222246405745257275088548364400416034343698202452290989945378, 1637878405035871, - 2840839241111536, + 21888242871839275222246405745257275088548364400416034343698202523815421843440, 936146135902706, 764771522836978, - 4078347135742792, - 3834154914650873, + 21888242871839275222246405745257275088548364400416034343698203761323316474696, + 21888242871839275222246405745257275088548364400416034343698203517131095382777, 1717006220140518, 2215513996568074, 1432480784895783, 1262915754367763, - 3641637197085972, + 21888242871839275222246405745257275088548364400416034343698203324613377817876, 1221992585042300, - 2829377837006800, + 21888242871839275222246405745257275088548364400416034343698202512354017738704, 1357361260266635, 722728472079138, 1261144656947964, - 2283253548964641, + 21888242871839275222246405745257275088548364400416034343698201966229729696545, 451401024952371, 294762451325316, 1828241114891840, - 2853998271649954, - 4120616424276515, - 3650409377375256, + 21888242871839275222246405745257275088548364400416034343698202536974452381858, + 21888242871839275222246405745257275088548364400416034343698203803592605008419, + 21888242871839275222246405745257275088548364400416034343698203333385558107160, 650278579562885, - 2939906290805341, - 4301414679196313, - 3414194629804068, + 21888242871839275222246405745257275088548364400416034343698202622882471537245, + 21888242871839275222246405745257275088548364400416034343698203984390859928217, + 21888242871839275222246405745257275088548364400416034343698203097170810535972, 605196196298145, 1418159540797089, - 2658519639931251, + 21888242871839275222246405745257275088548364400416034343698202341495820663155, 689775468349412, 605389921862597, - 3448915624861166, + 21888242871839275222246405745257275088548364400416034343698203131891805593070, 797034141719707, - 4034883238701952, - 4488265928474392, + 21888242871839275222246405745257275088548364400416034343698203717859419433856, + 21888242871839275222246405745257275088548364400416034343698204171242109206296, 355609730832079, 2035367601122774, 346704658601979, 1732505062737997, 2007537297182285, - 4151205212928577, - 3611415642541792, + 21888242871839275222246405745257275088548364400416034343698203834181393660481, + 21888242871839275222246405745257275088548364400416034343698203294391823273696, 2137511075676807, 1061191886214839, 435782852981549, 2150893137850605, - 2322152450233101, + 21888242871839275222246405745257275088548364400416034343698202005128630965005, 664522251323348, 1511141064089823, - 3830429004673468, - 3837784839219048, + 21888242871839275222246405745257275088548364400416034343698203513405185405372, + 21888242871839275222246405745257275088548364400416034343698203520761019950952, 654844779592025, - 2800233416054446, - 3582220746450833, + 21888242871839275222246405745257275088548364400416034343698202483209596786350, + 21888242871839275222246405745257275088548364400416034343698203265196927182737, 1432662230969931, - 2732689369008285, - 2421984164284362, - 2379450879401727, - 2445549929774314, - 2802668868395124, + 21888242871839275222246405745257275088548364400416034343698202415665549740189, + 21888242871839275222246405745257275088548364400416034343698202104960345016266, + 21888242871839275222246405745257275088548364400416034343698202062427060133631, + 21888242871839275222246405745257275088548364400416034343698202128526110506218, + 21888242871839275222246405745257275088548364400416034343698202485645049127028, 1432056175972509, - 3940520287571694, - 4452513171182327, - 2366303366875261, + 21888242871839275222246405745257275088548364400416034343698203623496468303598, + 21888242871839275222246405745257275088548364400416034343698204135489351914231, + 21888242871839275222246405745257275088548364400416034343698202049279547607165, 128472822327237, 119333524267205, - 2959454012846092, - 3094271369019360, - 3620636228726734, + 21888242871839275222246405745257275088548364400416034343698202642430193577996, + 21888242871839275222246405745257275088548364400416034343698202777247549751264, + 21888242871839275222246405745257275088548364400416034343698203303612409458638, 49079440500630, - 2788508251973578, + 21888242871839275222246405745257275088548364400416034343698202471484432705482, 2218910528036236, - 4478813882133237, + 21888242871839275222246405745257275088548364400416034343698204161790062865141, 1914890607490427, - 3514412147769795, + 21888242871839275222246405745257275088548364400416034343698203197388328501699, 1961686068868993, - 4225047748238458, - 3257889061321993, - 2604726469975885, - 2492721142309988, + 21888242871839275222246405745257275088548364400416034343698203908023928970362, + 21888242871839275222246405745257275088548364400416034343698202940865242053897, + 21888242871839275222246405745257275088548364400416034343698202287702650707789, + 21888242871839275222246405745257275088548364400416034343698202175697323041892, 1149409590787061, 757529805836027, - 3213378261638426, + 21888242871839275222246405745257275088548364400416034343698202896354442370330, 1466691589159850, - 3235141047265544, + 21888242871839275222246405745257275088548364400416034343698202918117227997448, 1977169617740017, 486013072340399, - 2525013246706208, + 21888242871839275222246405745257275088548364400416034343698202207989427438112, 857877145918110, - 2275189355656661, - 3077741552955774, + 21888242871839275222246405745257275088548364400416034343698201958165536388565, + 21888242871839275222246405745257275088548364400416034343698202760717733687678, 2070470285889298, 336420586135990, - 3958838198017069, - 4015573418441969, + 21888242871839275222246405745257275088548364400416034343698203641814378748973, + 21888242871839275222246405745257275088548364400416034343698203698549599173873, 1381675207813163, 1411515330496473, - 3124093515812309, - 2536900587873821, + 21888242871839275222246405745257275088548364400416034343698202807069696544213, + 21888242871839275222246405745257275088548364400416034343698202219876768605725, 2023450797398057, - 2697959027890994, - 2744674106372598, + 21888242871839275222246405745257275088548364400416034343698202380935208622898, + 21888242871839275222246405745257275088548364400416034343698202427650287104502, 1377222638594920, - 2304669353683219, + 21888242871839275222246405745257275088548364400416034343698201987645534415123, 168701923467185, - 2924342140322745, - 3554281554345779, - 4498418611361128, - 3806593389974495, - 2780897670319997, + 21888242871839275222246405745257275088548364400416034343698202607318321054649, + 21888242871839275222246405745257275088548364400416034343698203237257735077683, + 21888242871839275222246405745257275088548364400416034343698204181394792093032, + 21888242871839275222246405745257275088548364400416034343698203489569570706399, + 21888242871839275222246405745257275088548364400416034343698202463873851051901, 576973530925780, 619179450010119, - 2655429490850129, + 21888242871839275222246405745257275088548364400416034343698202338405671582033, 196931187292677, - 4364607665233483, - 3215248925203467, + 21888242871839275222246405745257275088548364400416034343698204047583845965387, + 21888242871839275222246405745257275088548364400416034343698202898225105935371, 471506498884918, - 4401658302847154, + 21888242871839275222246405745257275088548364400416034343698204084634483579058, 1688677603907594, 1665771245641623, 1189298888020298, - 3999936806931639, - 3716718672461265, - 2969831302116843, - 4120263589729738, + 21888242871839275222246405745257275088548364400416034343698203682912987663543, + 21888242871839275222246405745257275088548364400416034343698203399694853193169, + 21888242871839275222246405745257275088548364400416034343698202652807482848747, + 21888242871839275222246405745257275088548364400416034343698203803239770461642, 584501321875758, 1630518417840499, 1735550923155411, - 4220753273310963, - 3525599519469348, - 3786103134699489, - 4032001319104358, - 2954393880852611, + 21888242871839275222246405745257275088548364400416034343698203903729454042867, + 21888242871839275222246405745257275088548364400416034343698203208575700201252, + 21888242871839275222246405745257275088548364400416034343698203469079315431393, + 21888242871839275222246405745257275088548364400416034343698203714977499836262, + 21888242871839275222246405745257275088548364400416034343698202637370061584515, 67603699033950, - 4448610703054281, + 21888242871839275222246405745257275088548364400416034343698204131586883786185, 1376880508942757, 120790476659579, - 2888876786659829, - 3649284031377865, + 21888242871839275222246405745257275088548364400416034343698202571852967391733, + 21888242871839275222246405745257275088548364400416034343698203332260212109769, 2179267998750678, 1551913921864833, - 4347322289786208, + 21888242871839275222246405745257275088548364400416034343698204030298470518112, 1039881836479332, - 4424990306385917, + 21888242871839275222246405745257275088548364400416034343698204107966487117821, 1486244894869641, - 3780925792939837, + 21888242871839275222246405745257275088548364400416034343698203463901973671741, 297188372626608, 1060670530492436, - 2872239049106889, + 21888242871839275222246405745257275088548364400416034343698202555215229838793, 1556856669206527, - 2846184937569641, - 2722156994798173, - 3654974514312401, - 3444802294937971, + 21888242871839275222246405745257275088548364400416034343698202529161118301545, + 21888242871839275222246405745257275088548364400416034343698202405133175530077, + 21888242871839275222246405745257275088548364400416034343698203337950695044305, + 21888242871839275222246405745257275088548364400416034343698203127778475669875, 207503946010543, 830212710899748, - 2846416687845582, + 21888242871839275222246405745257275088548364400416034343698202529392868577486, 991804807544097, 1331211051298555, 1561016207711, 1723132208002922, - 2592213301205444, + 21888242871839275222246405745257275088548364400416034343698202275189481937348, 2180716571788737, 8895961061816, - 3246692976513983, - 3956183637573596, + 21888242871839275222246405745257275088548364400416034343698202929669157245887, + 21888242871839275222246405745257275088548364400416034343698203639159818305500, 1321536812993355, 358593180800956, 461774096142465, - 3436861703593677, - 2328632857219279, + 21888242871839275222246405745257275088548364400416034343698203119837884325581, + 21888242871839275222246405745257275088548364400416034343698202011609037951183, 490295052173591, - 2275511956714745, - 2303613298953761, + 21888242871839275222246405745257275088548364400416034343698201958488137446649, + 21888242871839275222246405745257275088548364400416034343698201986589479685665, 91627297035963, - 3891740038579363, - 2346911437091285, - 4456846865630900, - 3370068962728276, + 21888242871839275222246405745257275088548364400416034343698203574716219311267, + 21888242871839275222246405745257275088548364400416034343698202029887617823189, + 21888242871839275222246405745257275088548364400416034343698204139823046362804, + 21888242871839275222246405745257275088548364400416034343698203053045143460180, 1213265777111685, 2197021895223085, - 4207365840324934, - 4148591714059442, - 3851053863290668, - 2736698006815516, + 21888242871839275222246405745257275088548364400416034343698203890342021056838, + 21888242871839275222246405745257275088548364400416034343698203831567894791346, + 21888242871839275222246405745257275088548364400416034343698203534030044022572, + 21888242871839275222246405745257275088548364400416034343698202419674187547420, 437611971635245, - 2633549657642496, + 21888242871839275222246405745257275088548364400416034343698202316525838374400, 898662711725053, - 3204509352790365, + 21888242871839275222246405745257275088548364400416034343698202887485533522269, 1600353216924329, 846498780976248, - 4383920584705560, + 21888242871839275222246405745257275088548364400416034343698204066896765437464, 2056225373371449, - 3403325096565795, - 2650955984878654, - 2573193404766646, + 21888242871839275222246405745257275088548364400416034343698203086301277297699, + 21888242871839275222246405745257275088548364400416034343698202333932165610558, + 21888242871839275222246405745257275088548364400416034343698202256169585498550, 1923959561184838, - 3305141756451191, - 2554193009608388, + 21888242871839275222246405745257275088548364400416034343698202988117937183095, + 21888242871839275222246405745257275088548364400416034343698202237169190340292, 421287236766891, - 3842265614791457, + 21888242871839275222246405745257275088548364400416034343698203525241795523361, 1264648483486593, 1573052582319357, 168132828163158, 1900923706501240, 850380246737717, 377508436056794, - 2896968609768349, - 4175734134029211, - 4468908493650763, + 21888242871839275222246405745257275088548364400416034343698202579944790500253, + 21888242871839275222246405745257275088548364400416034343698203858710314761115, + 21888242871839275222246405745257275088548364400416034343698204151884674382667, 7148058066244, 2108371036108448, 906216485482891, 649983085273164, 551182624515459, - 3244952632240998, - 2258790426582330, + 21888242871839275222246405745257275088548364400416034343698202927928812972902, + 21888242871839275222246405745257275088548364400416034343698201941766607314234, 1142655041068401, 587609109857442, 1321545114248108, @@ -12053,235 +12053,235 @@ pub global CRP: [Polynomial; L] = [ 500974781379410, 1721388142519540, 1974793706238064, - 3577868397494295, - 2858532236844084, - 3503669923765685, + 21888242871839275222246405745257275088548364400416034343698203260844578226199, + 21888242871839275222246405745257275088548364400416034343698202541508417575988, + 21888242871839275222246405745257275088548364400416034343698203186646104497589, 1873131813157515, - 2483960198897924, + 21888242871839275222246405745257275088548364400416034343698202166936379629828, 892752059287913, 548902953326857, 1035021729037825, 110746367245452, - 2968665124926666, - 2655062604253142, + 21888242871839275222246405745257275088548364400416034343698202651641305658570, + 21888242871839275222246405745257275088548364400416034343698202338038784985046, 1561280468558543, - 2688786547649985, - 4316884868951370, - 3067929541983624, - 2765755518782091, - 3725898468061777, + 21888242871839275222246405745257275088548364400416034343698202371762728381889, + 21888242871839275222246405745257275088548364400416034343698203999861049683274, + 21888242871839275222246405745257275088548364400416034343698202750905722715528, + 21888242871839275222246405745257275088548364400416034343698202448731699513995, + 21888242871839275222246405745257275088548364400416034343698203408874648793681, 233804769401472, - 2620812948991758, + 21888242871839275222246405745257275088548364400416034343698202303789129723662, 2083825335638306, - 2589323358822306, - 3576727623260997, - 3042415679750795, + 21888242871839275222246405745257275088548364400416034343698202272299539554210, + 21888242871839275222246405745257275088548364400416034343698203259703803992901, + 21888242871839275222246405745257275088548364400416034343698202725391860482699, 370843280080720, - 3148895267311950, + 21888242871839275222246405745257275088548364400416034343698202831871448043854, 680694392018303, - 3040706544180770, - 3829338904171915, - 3480209210645828, + 21888242871839275222246405745257275088548364400416034343698202723682724912674, + 21888242871839275222246405745257275088548364400416034343698203512315084903819, + 21888242871839275222246405745257275088548364400416034343698203163185391377732, 1568022856888910, - 4356576742005121, - 2528802877954135, + 21888242871839275222246405745257275088548364400416034343698204039552922737025, + 21888242871839275222246405745257275088548364400416034343698202211779058686039, 1031315687133302, - 4239482586925286, + 21888242871839275222246405745257275088548364400416034343698203922458767657190, 2187740616969964, 1432313444545384, - 2312476941892490, + 21888242871839275222246405745257275088548364400416034343698201995453122624394, 278249923763425, - 3749154659820440, + 21888242871839275222246405745257275088548364400416034343698203432130840552344, 462808221844745, - 4097310781210134, - 2965551487185427, - 3335221142110177, - 2960836512712967, + 21888242871839275222246405745257275088548364400416034343698203780286961942038, + 21888242871839275222246405745257275088548364400416034343698202648527667917331, + 21888242871839275222246405745257275088548364400416034343698203018197322842081, + 21888242871839275222246405745257275088548364400416034343698202643812693444871, 2221834753184163, 1026621083249490, - 4406091897517720, + 21888242871839275222246405745257275088548364400416034343698204089068078249624, 1668908468372507, 8607047115553, 868975124342157, - 3061605501910752, + 21888242871839275222246405745257275088548364400416034343698202744581682642656, 348914001532477, - 2767698863686519, + 21888242871839275222246405745257275088548364400416034343698202450675044418423, 357454750056716, - 2627729581739569, + 21888242871839275222246405745257275088548364400416034343698202310705762471473, 2002796150951846, - 2811737861751990, + 21888242871839275222246405745257275088548364400416034343698202494714042483894, 1972554767282335, 391438805049174, - 3043484582665547, - 2746985926004222, + 21888242871839275222246405745257275088548364400416034343698202726460763397451, + 21888242871839275222246405745257275088548364400416034343698202429962106736126, 119595563913178, - 4117392811624528, + 21888242871839275222246405745257275088548364400416034343698203800368992356432, 421943883472300, - 4219610133487713, - 2664198931391887, + 21888242871839275222246405745257275088548364400416034343698203902586314219617, + 21888242871839275222246405745257275088548364400416034343698202347175112123791, 2184208421399631, - 3531493748954926, + 21888242871839275222246405745257275088548364400416034343698203214469929686830, 659553183196036, 872564142123788, - 3694356865454966, + 21888242871839275222246405745257275088548364400416034343698203377333046186870, 1425069180062681, - 3501556686081844, - 2749478912223489, + 21888242871839275222246405745257275088548364400416034343698203184532866813748, + 21888242871839275222246405745257275088548364400416034343698202432455092955393, 566253485408598, 1767771213218070, 235864307924895, 2121049983070308, 1282480641882216, - 2497469603310744, - 3617861564664889, - 4161449966916043, + 21888242871839275222246405745257275088548364400416034343698202180445784042648, + 21888242871839275222246405745257275088548364400416034343698203300837745396793, + 21888242871839275222246405745257275088548364400416034343698203844426147647947, 490299110860878, - 2838124364549814, + 21888242871839275222246405745257275088548364400416034343698202521100545281718, 2008599667790304, 2229508067287625, 1663150075682857, 596780274497605, - 3512469517456671, - 2399970998734747, - 4054251990035603, + 21888242871839275222246405745257275088548364400416034343698203195445698188575, + 21888242871839275222246405745257275088548364400416034343698202082947179466651, + 21888242871839275222246405745257275088548364400416034343698203737228170767507, 434808844669919, 1580716191864060, 1519132402640144, - 3801602929967070, - 3543776201838056, + 21888242871839275222246405745257275088548364400416034343698203484579110698974, + 21888242871839275222246405745257275088548364400416034343698203226752382569960, 1331741047332803, 1502837866248824, 1719364274700501, 1604436356471664, 906061230359554, - 4147702952779059, - 2544544417043955, + 21888242871839275222246405745257275088548364400416034343698203830679133510963, + 21888242871839275222246405745257275088548364400416034343698202227520597775859, 846288363049498, 1020141670529207, 238507618876571, 12489173957271, - 3611792390049613, + 21888242871839275222246405745257275088548364400416034343698203294768570781517, 2039216830596736, 1722118184492438, 1034106151715818, 2038797193043735, 1424008750926576, 1460306681065192, - 2694766808077733, + 21888242871839275222246405745257275088548364400416034343698202377742988809637, 1603201982365555, 996748920675725, - 2946591454964974, - 3724773130290656, + 21888242871839275222246405745257275088548364400416034343698202629567635696878, + 21888242871839275222246405745257275088548364400416034343698203407749311022560, 1205902576696624, 1888342951321258, - 3764225913307225, - 2958431787619382, + 21888242871839275222246405745257275088548364400416034343698203447202094039129, + 21888242871839275222246405745257275088548364400416034343698202641407968351286, 1180770594954544, - 3025150439365561, - 2523283624713988, - 3296358873488501, - 2878069254965922, - 3912222364933585, - 2355552521971834, - 2346171505469842, + 21888242871839275222246405745257275088548364400416034343698202708126620097465, + 21888242871839275222246405745257275088548364400416034343698202206259805445892, + 21888242871839275222246405745257275088548364400416034343698202979335054220405, + 21888242871839275222246405745257275088548364400416034343698202561045435697826, + 21888242871839275222246405745257275088548364400416034343698203595198545665489, + 21888242871839275222246405745257275088548364400416034343698202038528702703738, + 21888242871839275222246405745257275088548364400416034343698202029147686201746, 580713616355048, 964732408191104, - 3606048199514284, + 21888242871839275222246405745257275088548364400416034343698203289024380246188, 2040707409214080, 1520952415536893, 406869077781410, 606883569002310, - 2795480891945733, - 3234882057109864, - 2936464312386308, + 21888242871839275222246405745257275088548364400416034343698202478457072677637, + 21888242871839275222246405745257275088548364400416034343698202917858237841768, + 21888242871839275222246405745257275088548364400416034343698202619440493118212, 477924062485886, 1761202968225346, 1706236335068784, - 3138989381109670, - 2882504771401797, + 21888242871839275222246405745257275088548364400416034343698202821965561841574, + 21888242871839275222246405745257275088548364400416034343698202565480952133701, 2150598421158153, - 3743799401625504, + 21888242871839275222246405745257275088548364400416034343698203426775582357408, 413723538847439, - 2909537248814237, + 21888242871839275222246405745257275088548364400416034343698202592513429546141, 239337622087374, 1835043127154592, 1635925243381768, - 2557769236867893, - 3187995159956774, + 21888242871839275222246405745257275088548364400416034343698202240745417599797, + 21888242871839275222246405745257275088548364400416034343698202870971340688678, 1702151034185419, - 2742995165652355, + 21888242871839275222246405745257275088548364400416034343698202425971346384259, 1475205832893178, - 2780236741328497, - 4011697483338770, - 2481601432485715, + 21888242871839275222246405745257275088548364400416034343698202463212922060401, + 21888242871839275222246405745257275088548364400416034343698203694673664070674, + 21888242871839275222246405745257275088548364400416034343698202164577613217619, 1439545212972307, 1291326524437877, 1735755078899249, 1183135494467394, 1763790818726863, 1804407326846683, - 3524951308839450, - 3773150600136209, - 3998665363237903, + 21888242871839275222246405745257275088548364400416034343698203207927489571354, + 21888242871839275222246405745257275088548364400416034343698203456126780868113, + 21888242871839275222246405745257275088548364400416034343698203681641543969807, 891158207085362, 1828223651041592, - 2884045889204043, - 2965781403158371, + 21888242871839275222246405745257275088548364400416034343698202567022069935947, + 21888242871839275222246405745257275088548364400416034343698202648757583890275, 661960131502280, 1391652770000083, - 4271916721884489, + 21888242871839275222246405745257275088548364400416034343698203954892902616393, 1177424007939210, 571677916472965, 1199737314114124, - 2556188198119085, - 3106983390073475, - 3668683597397368, - 2256691972152572, + 21888242871839275222246405745257275088548364400416034343698202239164378850989, + 21888242871839275222246405745257275088548364400416034343698202789959570805379, + 21888242871839275222246405745257275088548364400416034343698203351659778129272, + 21888242871839275222246405745257275088548364400416034343698201939668152884476, 1745213441769230, - 2695727724634490, + 21888242871839275222246405745257275088548364400416034343698202378703905366394, 1129689983716016, - 2553099336312505, - 3694300039147906, + 21888242871839275222246405745257275088548364400416034343698202236075517044409, + 21888242871839275222246405745257275088548364400416034343698203377276219879810, 2083649324625322, 215644288965639, - 4097456667128619, - 3489844031884178, - 3339636180682862, - 3311386773888732, - 2529935361448154, - 2520316168909767, - 4405886536038185, + 21888242871839275222246405745257275088548364400416034343698203780432847860523, + 21888242871839275222246405745257275088548364400416034343698203172820212616082, + 21888242871839275222246405745257275088548364400416034343698203022612361414766, + 21888242871839275222246405745257275088548364400416034343698202994362954620636, + 21888242871839275222246405745257275088548364400416034343698202212911542180058, + 21888242871839275222246405745257275088548364400416034343698202203292349641671, + 21888242871839275222246405745257275088548364400416034343698204088862716770089, 1665056245810967, - 3391353600717469, + 21888242871839275222246405745257275088548364400416034343698203074329781449373, 793094097350517, - 2392413520195058, - 3544686385258091, + 21888242871839275222246405745257275088548364400416034343698202075389700926962, + 21888242871839275222246405745257275088548364400416034343698203227662565989995, 1834750432698581, - 4132027723288056, - 3913230093596960, - 4116435642201596, - 4220541285209542, + 21888242871839275222246405745257275088548364400416034343698203815003904019960, + 21888242871839275222246405745257275088548364400416034343698203596206274328864, + 21888242871839275222246405745257275088548364400416034343698203799411822933500, + 21888242871839275222246405745257275088548364400416034343698203903517465941446, 242658838596902, - 3083166146543141, - 2317052243400769, - 3668955218371607, + 21888242871839275222246405745257275088548364400416034343698202766142327275045, + 21888242871839275222246405745257275088548364400416034343698202000028424132673, + 21888242871839275222246405745257275088548364400416034343698203351931399103511, 246296711459260, 559226005660158, 1072149970284601, 1141249359323101, - 2253251071493966, + 21888242871839275222246405745257275088548364400416034343698201936227252225870, 1099467424143326, - 3405008353410241, + 21888242871839275222246405745257275088548364400416034343698203087984534142145, 158150079645093, - 3555630359944546, + 21888242871839275222246405745257275088548364400416034343698203238606540676450, 890486276099195, 1210111407671419, - 2711748315989082, + 21888242871839275222246405745257275088548364400416034343698202394724496720986, 660453419012512, 2244532879675403, 227890000607987, 1652367909352058, - 2445788696230233, + 21888242871839275222246405745257275088548364400416034343698202128764876962137, 655090784720655, 1957887433367550, 968210240510711, @@ -12292,25 +12292,25 @@ pub global CRP: [Polynomial; L] = [ 1208925008184788, 1648879548098515, 1388460997821792, - 2712822353150420, - 3748458985631638, + 21888242871839275222246405745257275088548364400416034343698202395798533882324, + 21888242871839275222246405745257275088548364400416034343698203431435166363542, 1238552629456949, - 3566933386641076, + 21888242871839275222246405745257275088548364400416034343698203249909567372980, 607219514019123, - 3197298303771119, + 21888242871839275222246405745257275088548364400416034343698202880274484503023, 969382087738080, 1267457808164078, - 3563889218121828, + 21888242871839275222246405745257275088548364400416034343698203246865398853732, 2234859930251202, 357235426267531, 375350154099473, 1537994287504071, 199579825327790, - 4414715984670606, + 21888242871839275222246405745257275088548364400416034343698204097692165402510, 805612077357749, - 2855964794181779, - 4261217369642687, - 4376381081271645, + 21888242871839275222246405745257275088548364400416034343698202538940974913683, + 21888242871839275222246405745257275088548364400416034343698203944193550374591, + 21888242871839275222246405745257275088548364400416034343698204059357262003549, 260282080715170, 989920013390184, 413743398252093, @@ -12323,89 +12323,89 @@ pub global CRP: [Polynomial; L] = [ 1160874469263511, 1340898993944939, 588945582631714, - 3558432005154658, + 21888242871839275222246405745257275088548364400416034343698203241408185886562, 529054964926587, 948765856849833, - 3649638201053515, + 21888242871839275222246405745257275088548364400416034343698203332614381785419, 1114383234682603, 18362885297357, - 2707939905431937, + 21888242871839275222246405745257275088548364400416034343698202390916086163841, 1816792220575110, 1613356490535873, 168441717544553, 1363476782819500, - 3118456313272022, - 4269207454742631, + 21888242871839275222246405745257275088548364400416034343698202801432494003926, + 21888242871839275222246405745257275088548364400416034343698203952183635474535, 1168886184835162, - 4464015189828393, - 3423143257362228, + 21888242871839275222246405745257275088548364400416034343698204146991370560297, + 21888242871839275222246405745257275088548364400416034343698203106119438094132, 1275012389295235, 154532055292694, 2141605519685246, 438085167083421, 1554478413053432, - 3245124208686587, + 21888242871839275222246405745257275088548364400416034343698202928100389418491, 101715771950756, 197789656910395, 878237244444244, 910142270683417, - 2529566206355705, - 2821966793906409, - 4188886914057701, - 2283085659763604, - 2398111800664351, + 21888242871839275222246405745257275088548364400416034343698202212542387087609, + 21888242871839275222246405745257275088548364400416034343698202504942974638313, + 21888242871839275222246405745257275088548364400416034343698203871863094789605, + 21888242871839275222246405745257275088548364400416034343698201966061840495508, + 21888242871839275222246405745257275088548364400416034343698202081087981396255, 895201164253676, - 3130355326130535, - 2257045847996728, + 21888242871839275222246405745257275088548364400416034343698202813331506862439, + 21888242871839275222246405745257275088548364400416034343698201940022028728632, 1793348793612253, 220246104842985, 1427049124412291, 725250186941083, 1038474631031599, - 3964809785162600, - 3375460355294704, + 21888242871839275222246405745257275088548364400416034343698203647785965894504, + 21888242871839275222246405745257275088548364400416034343698203058436536026608, 2194121035666762, 2103029192117183, 508155540869185, 2201499287385765, 1189659108955516, - 3475104268301785, - 2828275522475840, + 21888242871839275222246405745257275088548364400416034343698203158080449033689, + 21888242871839275222246405745257275088548364400416034343698202511251703207744, 1554644810525204, 1197553737230723, - 4479990416366339, + 21888242871839275222246405745257275088548364400416034343698204162966597098243, 999477533367334, 1355743794962973, - 2617515128934105, + 21888242871839275222246405745257275088548364400416034343698202300491309666009, 33337830226296, - 3930914666672268, - 4176178034572257, - 3371910341739240, - 3755093732689349, + 21888242871839275222246405745257275088548364400416034343698203613890847404172, + 21888242871839275222246405745257275088548364400416034343698203859154215304161, + 21888242871839275222246405745257275088548364400416034343698203054886522471144, + 21888242871839275222246405745257275088548364400416034343698203438069913421253, 2123669996593404, - 4388754114087476, + 21888242871839275222246405745257275088548364400416034343698204071730294819380, 1001632756351823, 129964765413069, - 2342608574750018, + 21888242871839275222246405745257275088548364400416034343698202025584755481922, 890621861575346, 1563290324083255, - 3853850101840767, - 3790969927381417, + 21888242871839275222246405745257275088548364400416034343698203536826282572671, + 21888242871839275222246405745257275088548364400416034343698203473946108113321, 1653823348449454, - 3462382937437451, + 21888242871839275222246405745257275088548364400416034343698203145359118169355, 2028040298660974, - 3994801689721669, + 21888242871839275222246405745257275088548364400416034343698203677777870453573, 7969116724931, - 3389928826624241, - 2771290003779949, - 2849335783806545, + 21888242871839275222246405745257275088548364400416034343698203072905007356145, + 21888242871839275222246405745257275088548364400416034343698202454266184511853, + 21888242871839275222246405745257275088548364400416034343698202532311964538449, 464972670217369, 801531485468937, - 2262962638874569, - 3780336625306479, + 21888242871839275222246405745257275088548364400416034343698201945938819606473, + 21888242871839275222246405745257275088548364400416034343698203463312806038383, 1994244183801680, 51478306865580, - 3448754906362245, + 21888242871839275222246405745257275088548364400416034343698203131731087094149, 1002348239997396, 1225327106093315, 2110210424414836, @@ -12413,77 +12413,77 @@ pub global CRP: [Polynomial; L] = [ 1628996050123206, 11545788335719, 2091721751381649, - 2824366812291261, - 3847707355237938, - 3521335804356577, - 2809106560305208, - 4441985669619871, + 21888242871839275222246405745257275088548364400416034343698202507342993023165, + 21888242871839275222246405745257275088548364400416034343698203530683535969842, + 21888242871839275222246405745257275088548364400416034343698203204311985088481, + 21888242871839275222246405745257275088548364400416034343698202492082741037112, + 21888242871839275222246405745257275088548364400416034343698204124961850351775, 1529544149505101, - 3909104429341827, - 3657017147142744, + 21888242871839275222246405745257275088548364400416034343698203592080610073731, + 21888242871839275222246405745257275088548364400416034343698203339993327874648, 1024761300416646, - 2600139286753380, - 3966998122146270, + 21888242871839275222246405745257275088548364400416034343698202283115467485284, + 21888242871839275222246405745257275088548364400416034343698203649974302878174, 1858817410659453, 264120050150359, - 2390120327931817, + 21888242871839275222246405745257275088548364400416034343698202073096508663721, 171634481365279, - 3956619216627763, - 3123218738534352, + 21888242871839275222246405745257275088548364400416034343698203639595397359667, + 21888242871839275222246405745257275088548364400416034343698202806194919266256, 178426133754468, - 3434359746043359, - 3683587806636910, + 21888242871839275222246405745257275088548364400416034343698203117335926775263, + 21888242871839275222246405745257275088548364400416034343698203366563987368814, 1365594745154720, - 2783310052052180, + 21888242871839275222246405745257275088548364400416034343698202466286232784084, 1089237438019929, 659900288310616, 136150642621181, - 4127047761470806, - 2517998602367655, + 21888242871839275222246405745257275088548364400416034343698203810023942202710, + 21888242871839275222246405745257275088548364400416034343698202200974783099559, 1312837973950240, 361853997529241, - 3176282972376499, + 21888242871839275222246405745257275088548364400416034343698202859259153108403, 1302935669911738, - 3033404816342584, - 3646849397241291, + 21888242871839275222246405745257275088548364400416034343698202716380997074488, + 21888242871839275222246405745257275088548364400416034343698203329825577973195, 737942217323596, - 2687318418136648, - 3027604866074276, - 4271878259137794, + 21888242871839275222246405745257275088548364400416034343698202370294598868552, + 21888242871839275222246405745257275088548364400416034343698202710581046806180, + 21888242871839275222246405745257275088548364400416034343698203954854439869698, 1045961153662219, - 2559601846702842, + 21888242871839275222246405745257275088548364400416034343698202242578027434746, 2112845439726180, - 3162384507672702, - 3638915920822081, + 21888242871839275222246405745257275088548364400416034343698202845360688404606, + 21888242871839275222246405745257275088548364400416034343698203321892101553985, 2226520859301742, 1967813633761796, 1691839474288270, - 3437846360693925, + 21888242871839275222246405745257275088548364400416034343698203120822541425829, 689410263596440, 193934176463890, 1997576354132723, - 2987010843950962, - 2538836386453968, - 3568458049565597, - 3580478185691452, + 21888242871839275222246405745257275088548364400416034343698202669987024682866, + 21888242871839275222246405745257275088548364400416034343698202221812567185872, + 21888242871839275222246405745257275088548364400416034343698203251434230297501, + 21888242871839275222246405745257275088548364400416034343698203263454366423356, 728433799449793, - 3985782907081045, - 3699684664224353, - 3106496013909290, - 2357448228197011, - 2849539731055102, - 3101445408786489, + 21888242871839275222246405745257275088548364400416034343698203668759087812949, + 21888242871839275222246405745257275088548364400416034343698203382660844956257, + 21888242871839275222246405745257275088548364400416034343698202789472194641194, + 21888242871839275222246405745257275088548364400416034343698202040424408928915, + 21888242871839275222246405745257275088548364400416034343698202532515911787006, + 21888242871839275222246405745257275088548364400416034343698202784421589518393, 1051024402779159, 1226609091267431, 2028655914222727, 1158390567736728, - 4364406674528799, + 21888242871839275222246405745257275088548364400416034343698204047382855260703, 1189357200212825, - 3844993389119551, + 21888242871839275222246405745257275088548364400416034343698203527969569851455, 396657887016266, - 4329879555818158, - 3084747348235364, - 3467005621419422, + 21888242871839275222246405745257275088548364400416034343698204012855736550062, + 21888242871839275222246405745257275088548364400416034343698202767723528967268, + 21888242871839275222246405745257275088548364400416034343698203149981802151326, 182283728245761, 636863901173518, 1765935844906604, @@ -12491,55 +12491,55 @@ pub global CRP: [Polynomial; L] = [ 763391435955410, 1267060312978507, 1658880995512626, - 2593698385657042, + 21888242871839275222246405745257275088548364400416034343698202276674566388946, 2007151300305270, - 3077501677362976, + 21888242871839275222246405745257275088548364400416034343698202760477858094880, 1231670053467168, - 4088742818053689, + 21888242871839275222246405745257275088548364400416034343698203771718998785593, 2142910367204727, - 4160559221533498, - 4211724833960079, + 21888242871839275222246405745257275088548364400416034343698203843535402265402, + 21888242871839275222246405745257275088548364400416034343698203894701014691983, 1449125783041377, 1035600617252746, 2098324064592890, - 3830406494231743, + 21888242871839275222246405745257275088548364400416034343698203513382674963647, 66635472178406, - 3588871239618375, - 2826091864441701, - 4490756672172968, - 2271244795145432, - 2324529835433458, - 3155661188266141, - 2997971938659910, - 3763969084351747, - 4195957115467144, + 21888242871839275222246405745257275088548364400416034343698203271847420350279, + 21888242871839275222246405745257275088548364400416034343698202509068045173605, + 21888242871839275222246405745257275088548364400416034343698204173732852904872, + 21888242871839275222246405745257275088548364400416034343698201954220975877336, + 21888242871839275222246405745257275088548364400416034343698202007506016165362, + 21888242871839275222246405745257275088548364400416034343698202838637368998045, + 21888242871839275222246405745257275088548364400416034343698202680948119391814, + 21888242871839275222246405745257275088548364400416034343698203446945265083651, + 21888242871839275222246405745257275088548364400416034343698203878933296199048, 4373146838777, - 4069635960169782, + 21888242871839275222246405745257275088548364400416034343698203752612140901686, 620270113187943, 457600252647067, - 4331231751247265, + 21888242871839275222246405745257275088548364400416034343698204014207931979169, 1349984936266464, - 3983925964346335, - 2351142709379003, - 3115966129037358, + 21888242871839275222246405745257275088548364400416034343698203666902145078239, + 21888242871839275222246405745257275088548364400416034343698202034118890110907, + 21888242871839275222246405745257275088548364400416034343698202798942309769262, 56320177253106, - 3503643165581608, + 21888242871839275222246405745257275088548364400416034343698203186619346313512, 1129430661638994, - 3433879030367765, - 3525568506718066, - 3291427719290500, + 21888242871839275222246405745257275088548364400416034343698203116855211099669, + 21888242871839275222246405745257275088548364400416034343698203208544687449970, + 21888242871839275222246405745257275088548364400416034343698202974403900022404, 1273440958602703, - 2912119936292370, + 21888242871839275222246405745257275088548364400416034343698202595096117024274, 982718086625278, - 4417270764688784, - 4380554690666755, - 3216000704044552, + 21888242871839275222246405745257275088548364400416034343698204100246945420688, + 21888242871839275222246405745257275088548364400416034343698204063530871398659, + 21888242871839275222246405745257275088548364400416034343698202898976884776456, 1053466360581053, 1228731469717111, - 2807711813692519, + 21888242871839275222246405745257275088548364400416034343698202490687994424423, 1619856811092938, 1840191593598630, - 4151301200419116, + 21888242871839275222246405745257275088548364400416034343698203834277381151020, 2095124993931234, 370530513815903, 594627214057428, @@ -12550,50 +12550,50 @@ pub global CRP: [Polynomial; L] = [ 1447496304993582, 1324960405130524, 1458053834646286, - 3874683859127421, - 2648130102492977, - 3268174024594984, - 2282550351335253, - 3076077248168062, + 21888242871839275222246405745257275088548364400416034343698203557660039859325, + 21888242871839275222246405745257275088548364400416034343698202331106283224881, + 21888242871839275222246405745257275088548364400416034343698202951150205326888, + 21888242871839275222246405745257275088548364400416034343698201965526532067157, + 21888242871839275222246405745257275088548364400416034343698202759053428899966, 1900556086724869, - 3632710293668010, - 3622538994017963, - 4331338728264331, + 21888242871839275222246405745257275088548364400416034343698203315686474399914, + 21888242871839275222246405745257275088548364400416034343698203305515174749867, + 21888242871839275222246405745257275088548364400416034343698204014314908996235, 1290325104258232, - 4271899939449678, + 21888242871839275222246405745257275088548364400416034343698203954876120181582, 115860618622347, 947367895722709, - 2847606381508572, + 21888242871839275222246405745257275088548364400416034343698202530582562240476, 1364311618461388, 584475396277929, 809057777823187, - 2377101992468693, + 21888242871839275222246405745257275088548364400416034343698202060078173200597, 1983448274645113, 535513636184074, - 2673541354746934, + 21888242871839275222246405745257275088548364400416034343698202356517535478838, 1482338016633897, - 4468731885768087, + 21888242871839275222246405745257275088548364400416034343698204151708066499991, 1047611761771828, - 2307348725218514, + 21888242871839275222246405745257275088548364400416034343698201990324905950418, 900742097381211, - 4124886317400862, + 21888242871839275222246405745257275088548364400416034343698203807862498132766, 2220455550089196, 786065882000019, 298265805766644, - 3285670718191646, + 21888242871839275222246405745257275088548364400416034343698202968646898923550, 264039383780961, - 3397630976386936, - 4346025644195723, - 4408985459764297, - 3589334668900727, - 3532299404647648, + 21888242871839275222246405745257275088548364400416034343698203080607157118840, + 21888242871839275222246405745257275088548364400416034343698204029001824927627, + 21888242871839275222246405745257275088548364400416034343698204091961640496201, + 21888242871839275222246405745257275088548364400416034343698203272310849632631, + 21888242871839275222246405745257275088548364400416034343698203215275585379552, 1455570749701517, - 4331520248674843, + 21888242871839275222246405745257275088548364400416034343698204014496429406747, 1001058918940270, - 3481133364819081, - 4428203299903701, - 3116104527792411, - 3607360129776778, + 21888242871839275222246405745257275088548364400416034343698203164109545550985, + 21888242871839275222246405745257275088548364400416034343698204111179480635605, + 21888242871839275222246405745257275088548364400416034343698202799080708524315, + 21888242871839275222246405745257275088548364400416034343698203290336310508682, 1126004631142632, 821672043504663, 154954400608372, @@ -12601,143 +12601,143 @@ pub global CRP: [Polynomial; L] = [ 1803271211627984, 1953925246497039, 1125301070480442, - 3439551703758747, - 3161664938171484, - 2942447774966131, + 21888242871839275222246405745257275088548364400416034343698203122527884490651, + 21888242871839275222246405745257275088548364400416034343698202844641118903388, + 21888242871839275222246405745257275088548364400416034343698202625423955698035, 1193574777709670, 167808936067160, 373913447613044, - 4040678419842408, - 3270128816667501, - 2366135322277983, - 3617934731783022, - 3172959529564522, - 4381070968866829, + 21888242871839275222246405745257275088548364400416034343698203723654600574312, + 21888242871839275222246405745257275088548364400416034343698202953104997399405, + 21888242871839275222246405745257275088548364400416034343698202049111503009887, + 21888242871839275222246405745257275088548364400416034343698203300910912514926, + 21888242871839275222246405745257275088548364400416034343698202855935710296426, + 21888242871839275222246405745257275088548364400416034343698204064047149598733, 1044375177036033, - 3869395676551655, + 21888242871839275222246405745257275088548364400416034343698203552371857283559, 310331332797913, 854121670371870, - 2939193790805386, - 3275879620631477, + 21888242871839275222246405745257275088548364400416034343698202622169971537290, + 21888242871839275222246405745257275088548364400416034343698202958855801363381, 1713542960288258, 1850507022692119, 761456399346996, - 2761668035831349, + 21888242871839275222246405745257275088548364400416034343698202444644216563253, 1182379888420059, - 4122218873786253, + 21888242871839275222246405745257275088548364400416034343698203805195054518157, 1889412191054202, - 4177800267038972, + 21888242871839275222246405745257275088548364400416034343698203860776447770876, 852147084119570, - 2698862075082690, + 21888242871839275222246405745257275088548364400416034343698202381838255814594, 502162362115843, - 4360973952964962, - 4300761152647134, + 21888242871839275222246405745257275088548364400416034343698204043950133696866, + 21888242871839275222246405745257275088548364400416034343698203983737333379038, 1918116331579755, 1544066365711575, - 3705367481129958, + 21888242871839275222246405745257275088548364400416034343698203388343661861862, 1858350612603420, 2096186669595745, 2082244706151411, - 2750688963637677, + 21888242871839275222246405745257275088548364400416034343698202433665144369581, 2115442034485599, - 4029185543485075, - 3275831686495614, + 21888242871839275222246405745257275088548364400416034343698203712161724216979, + 21888242871839275222246405745257275088548364400416034343698202958807867227518, 517268578431915, - 4242359398745345, + 21888242871839275222246405745257275088548364400416034343698203925335579477249, 101834048830589, - 3064455227999149, - 4322162464214809, + 21888242871839275222246405745257275088548364400416034343698202747431408731053, + 21888242871839275222246405745257275088548364400416034343698204005138644946713, 954317818863136, 85772727522689, 540457730761378, 2074592331052982, 1697354863812141, - 3992769740466565, + 21888242871839275222246405745257275088548364400416034343698203675745921198469, 5398144113414, 1376469177891852, - 3982636456917258, - 3936275497440056, + 21888242871839275222246405745257275088548364400416034343698203665612637649162, + 21888242871839275222246405745257275088548364400416034343698203619251678171960, 1696889301109812, 1135361390625671, - 3404062449517041, - 2895254472472829, - 3960341432232524, + 21888242871839275222246405745257275088548364400416034343698203087038630248945, + 21888242871839275222246405745257275088548364400416034343698202578230653204733, + 21888242871839275222246405745257275088548364400416034343698203643317612964428, 1792436688222059, 31172144756993, 697124083183682, 163154279165662, - 3774884200539485, - 4450040714655754, + 21888242871839275222246405745257275088548364400416034343698203457860381271389, + 21888242871839275222246405745257275088548364400416034343698204133016895387658, 13651702142531, 1669443935367980, 878033218285559, 2086900697618270, - 2453459714255873, - 3644930627558332, + 21888242871839275222246405745257275088548364400416034343698202136435894987777, + 21888242871839275222246405745257275088548364400416034343698203327906808290236, 62441725631781, - 4478572462110517, - 3152513639265736, - 3121168114601260, - 2820595694460092, + 21888242871839275222246405745257275088548364400416034343698204161548642842421, + 21888242871839275222246405745257275088548364400416034343698202835489819997640, + 21888242871839275222246405745257275088548364400416034343698202804144295333164, + 21888242871839275222246405745257275088548364400416034343698202503571875191996, 1217125866801548, - 3908296724015572, - 2497154655914369, - 2264587810326870, + 21888242871839275222246405745257275088548364400416034343698203591272904747476, + 21888242871839275222246405745257275088548364400416034343698202180130836646273, + 21888242871839275222246405745257275088548364400416034343698201947563991058774, 369409792742274, 167148532636938, - 3413816042651095, - 4211811067205426, + 21888242871839275222246405745257275088548364400416034343698203096792223382999, + 21888242871839275222246405745257275088548364400416034343698203894787247937330, 617443640296758, 847932862356070, - 4333660097971177, - 4197037695002348, - 4467585523476241, - 3005803493829985, + 21888242871839275222246405745257275088548364400416034343698204016636278703081, + 21888242871839275222246405745257275088548364400416034343698203880013875734252, + 21888242871839275222246405745257275088548364400416034343698204150561704208145, + 21888242871839275222246405745257275088548364400416034343698202688779674561889, 640019978623383, 762623777017039, - 4451506080624640, - 4238282454279517, + 21888242871839275222246405745257275088548364400416034343698204134482261356544, + 21888242871839275222246405745257275088548364400416034343698203921258635011421, 1613157497203000, - 3265699881016239, - 3921239193334856, + 21888242871839275222246405745257275088548364400416034343698202948676061748143, + 21888242871839275222246405745257275088548364400416034343698203604215374066760, 242264700443156, 493648755128696, 2028022603011854, 618765929949553, - 4329126206376413, + 21888242871839275222246405745257275088548364400416034343698204012102387108317, 1252074263575726, - 2853176302249477, - 2617451333630334, + 21888242871839275222246405745257275088548364400416034343698202536152482981381, + 21888242871839275222246405745257275088548364400416034343698202300427514362238, 783908932937515, - 4134421222229125, + 21888242871839275222246405745257275088548364400416034343698203817397402961029, 566309416341647, - 3194856313200900, + 21888242871839275222246405745257275088548364400416034343698202877832493932804, 1343114371298716, - 4437455127018165, + 21888242871839275222246405745257275088548364400416034343698204120431307750069, 590143402746786, - 3563472727118010, - 2445557233010770, - 3264231646229115, - 4009463897975697, - 2392859230923724, - 4414551547472514, + 21888242871839275222246405745257275088548364400416034343698203246448907849914, + 21888242871839275222246405745257275088548364400416034343698202128533413742674, + 21888242871839275222246405745257275088548364400416034343698202947207826961019, + 21888242871839275222246405745257275088548364400416034343698203692440078707601, + 21888242871839275222246405745257275088548364400416034343698202075835411655628, + 21888242871839275222246405745257275088548364400416034343698204097527728204418, 188042305246914, 1124121853073270, 1255010266759525, 82220126088055, - 2415872375775363, - 4187290128707177, + 21888242871839275222246405745257275088548364400416034343698202098848556507267, + 21888242871839275222246405745257275088548364400416034343698203870266309439081, 1811543406636325, - 3908614819756781, - 3112829986083069, - 3156695003328775, + 21888242871839275222246405745257275088548364400416034343698203591591000488685, + 21888242871839275222246405745257275088548364400416034343698202795806166814973, + 21888242871839275222246405745257275088548364400416034343698202839671184060679, 807183896362021, 857963173931499, - 3695058006778575, - 2961319209548106, + 21888242871839275222246405745257275088548364400416034343698203378034187510479, + 21888242871839275222246405745257275088548364400416034343698202644295390280010, 1766670560098351, 1886367757320073, - 2433049011287178, + 21888242871839275222246405745257275088548364400416034343698202116025192019082, 1501691050250624, 569779532532471, 25404902825476, @@ -12748,57 +12748,57 @@ pub global CRP: [Polynomial; L] = [ 2150755003234835, 324318645160472, 745875829518683, - 4335786499144720, + 21888242871839275222246405745257275088548364400416034343698204018762679876624, 1956461600204443, 1256790925642383, - 3768192755531929, + 21888242871839275222246405745257275088548364400416034343698203451168936263833, 1102146739512303, - 3205981316777618, + 21888242871839275222246405745257275088548364400416034343698202888957497509522, 643340000584138, - 2665375401573830, + 21888242871839275222246405745257275088548364400416034343698202348351582305734, 2208996640189707, - 3901526117936276, + 21888242871839275222246405745257275088548364400416034343698203584502298668180, 508595466030348, 1397723831436223, 248443353287076, - 3552243294679455, - 2643917765235985, + 21888242871839275222246405745257275088548364400416034343698203235219475411359, + 21888242871839275222246405745257275088548364400416034343698202326893945967889, 1240643921480282, 1656032417700519, 772755434390372, - 3765507451483530, - 3562772720095683, + 21888242871839275222246405745257275088548364400416034343698203448483632215434, + 21888242871839275222246405745257275088548364400416034343698203245748900827587, 961615144065002, - 3126559368521162, + 21888242871839275222246405745257275088548364400416034343698202809535549253066, 201906880772098, - 3570108715194567, - 4426246684451471, - 2977785754715550, - 3328193985331139, - 4047951042327639, - 3596224618007146, + 21888242871839275222246405745257275088548364400416034343698203253084895926471, + 21888242871839275222246405745257275088548364400416034343698204109222865183375, + 21888242871839275222246405745257275088548364400416034343698202660761935447454, + 21888242871839275222246405745257275088548364400416034343698203011170166063043, + 21888242871839275222246405745257275088548364400416034343698203730927223059543, + 21888242871839275222246405745257275088548364400416034343698203279200798739050, 2060311345151526, - 2666831275810304, - 3974143823555685, - 2902109297361880, - 3846219136369571, + 21888242871839275222246405745257275088548364400416034343698202349807456542208, + 21888242871839275222246405745257275088548364400416034343698203657120004287589, + 21888242871839275222246405745257275088548364400416034343698202585085478093784, + 21888242871839275222246405745257275088548364400416034343698203529195317101475, 855310939404441, - 2276565616340173, + 21888242871839275222246405745257275088548364400416034343698201959541797072077, 668725105136285, 1248116255885695, - 4430946012730713, - 3291503253957624, - 3449116831637109, - 3928212980792934, + 21888242871839275222246405745257275088548364400416034343698204113922193462617, + 21888242871839275222246405745257275088548364400416034343698202974479434689528, + 21888242871839275222246405745257275088548364400416034343698203132093012369013, + 21888242871839275222246405745257275088548364400416034343698203611189161524838, 998041852115558, 1793532838904065, 1158935080286040, - 3845238685441790, + 21888242871839275222246405745257275088548364400416034343698203528214866173694, 717822438598709, 922576468221784, 144988472879948, - 3436858213520785, - 2361755888397309, + 21888242871839275222246405745257275088548364400416034343698203119834394252689, + 21888242871839275222246405745257275088548364400416034343698202044732069129213, 1300230559370336, 592371039739291, 89415997281416, @@ -12806,13 +12806,13 @@ pub global CRP: [Polynomial; L] = [ 2114683617300923, 842620743198494, 1863596528543502, - 4490693460445069, + 21888242871839275222246405745257275088548364400416034343698204173669641176973, 468321565294030, - 2874069614543881, - 2417085732096636, + 21888242871839275222246405745257275088548364400416034343698202557045795275785, + 21888242871839275222246405745257275088548364400416034343698202100061912828540, 1109799751704139, 575534359615980, - 4126018181523050, + 21888242871839275222246405745257275088548364400416034343698203808994362254954, 1782695461034653, 2034394363519559, 2048175746243301, @@ -12825,374 +12825,374 @@ pub global CRP: [Polynomial; L] = [ 1275501313577458, 577902367991723, 1257504613927195, - 4371802909439768, + 21888242871839275222246405745257275088548364400416034343698204054779090171672, 973646956260238, - 4157559169044292, - 4109286191324353, + 21888242871839275222246405745257275088548364400416034343698203840535349776196, + 21888242871839275222246405745257275088548364400416034343698203792262372056257, 2114484588115917, 311562204826481, - 2381598871816384, - 2365142676533639, + 21888242871839275222246405745257275088548364400416034343698202064575052548288, + 21888242871839275222246405745257275088548364400416034343698202048118857265543, 1952309745537459, - 3881188356803966, + 21888242871839275222246405745257275088548364400416034343698203564164537535870, 1582387244705510, - 4393273971656941, - 4314182997006698, - 4265524279712326, + 21888242871839275222246405745257275088548364400416034343698204076250152388845, + 21888242871839275222246405745257275088548364400416034343698203997159177738602, + 21888242871839275222246405745257275088548364400416034343698203948500460444230, 740365842213554, 1788916268794249, 388535584210993, 423332336902208, 1374749015291110, - 2855950857401327, - 3692914172234128, - 4195135835890379, + 21888242871839275222246405745257275088548364400416034343698202538927038133231, + 21888242871839275222246405745257275088548364400416034343698203375890352966032, + 21888242871839275222246405745257275088548364400416034343698203878112016622283, 1728498913176754, 874235471242089, - 2675287006879328, + 21888242871839275222246405745257275088548364400416034343698202358263187611232, 361192016356646, 914393709173391, 940842938548084, - 2274837092486266, + 21888242871839275222246405745257275088548364400416034343698201957813273218170, 1942925760943665, 1086710711346984, 1467390600049694, - 2351912162128765, - 3393378978820713, + 21888242871839275222246405745257275088548364400416034343698202034888342860669, + 21888242871839275222246405745257275088548364400416034343698203076355159552617, 1812818026318849, - 3701892092446909, + 21888242871839275222246405745257275088548364400416034343698203384868273178813, 126131505299235, 686630902278988, 351082562691518, - 3312285704133895, - 2623435799426742, + 21888242871839275222246405745257275088548364400416034343698202995261884865799, + 21888242871839275222246405745257275088548364400416034343698202306411980158646, 1909422939615314, 2010370243138670, 254600066241853, - 2503539219947976, + 21888242871839275222246405745257275088548364400416034343698202186515400679880, 1786121770155411, - 4392099430654324, - 2463475473904875, + 21888242871839275222246405745257275088548364400416034343698204075075611386228, + 21888242871839275222246405745257275088548364400416034343698202146451654636779, 1258049913825636, - 4177966024358806, - 3088866018334370, - 2641533346130174, - 2932481671419932, - 4107416666279170, + 21888242871839275222246405745257275088548364400416034343698203860942205090710, + 21888242871839275222246405745257275088548364400416034343698202771842199066274, + 21888242871839275222246405745257275088548364400416034343698202324509526862078, + 21888242871839275222246405745257275088548364400416034343698202615457852151836, + 21888242871839275222246405745257275088548364400416034343698203790392847011074, 1186211525895305, - 2260384410555793, - 4082124736527397, + 21888242871839275222246405745257275088548364400416034343698201943360591287697, + 21888242871839275222246405745257275088548364400416034343698203765100917259301, 962351073262412, - 4142221734121800, + 21888242871839275222246405745257275088548364400416034343698203825197914853704, 1947327285322697, 989490657684305, 188511314448991, - 4300287056024425, + 21888242871839275222246405745257275088548364400416034343698203983263236756329, 1192387987304887, 1839075111715266, 1913369847905808, 1367921191056061, - 4369944266301334, + 21888242871839275222246405745257275088548364400416034343698204052920447033238, 1545136479924052, - 4147622119756917, + 21888242871839275222246405745257275088548364400416034343698203830598300488821, 1380504364683996, - 2811168038249428, - 4325413443074025, + 21888242871839275222246405745257275088548364400416034343698202494144218981332, + 21888242871839275222246405745257275088548364400416034343698204008389623805929, 721601625962648, - 2966359926567585, + 21888242871839275222246405745257275088548364400416034343698202649336107299489, 1362557345642925, - 4487356374166943, - 3106765186045250, + 21888242871839275222246405745257275088548364400416034343698204170332554898847, + 21888242871839275222246405745257275088548364400416034343698202789741366777154, 2156857946764284, 1634883589837680, 2233969315638472, 1835099592197013, - 4175954808022432, + 21888242871839275222246405745257275088548364400416034343698203858930988754336, 25710214183119, - 3318617857454253, + 21888242871839275222246405745257275088548364400416034343698203001594038186157, 1825216776342480, 499290160062540, - 4423722351426760, - 4378285679697169, - 4227982501402365, - 2508650979030785, - 2992972015000840, - 3057053393768370, - 3892252522892567, - 4464302145710196, + 21888242871839275222246405745257275088548364400416034343698204106698532158664, + 21888242871839275222246405745257275088548364400416034343698204061261860429073, + 21888242871839275222246405745257275088548364400416034343698203910958682134269, + 21888242871839275222246405745257275088548364400416034343698202191627159762689, + 21888242871839275222246405745257275088548364400416034343698202675948195732744, + 21888242871839275222246405745257275088548364400416034343698202740029574500274, + 21888242871839275222246405745257275088548364400416034343698203575228703624471, + 21888242871839275222246405745257275088548364400416034343698204147278326442100, 875564871312995, 1339094939464836, 2044523442475036, 1414121749553204, 1457038306584111, - 3589362789090933, + 21888242871839275222246405745257275088548364400416034343698203272338969822837, 1885192625254695, - 2389686804843799, - 2462482666741436, + 21888242871839275222246405745257275088548364400416034343698202072662985575703, + 21888242871839275222246405745257275088548364400416034343698202145458847473340, 1613675461067806, - 2719697567724499, + 21888242871839275222246405745257275088548364400416034343698202402673748456403, 1408198787078522, 35254265758446, 561754896578431, 336171395852579, 473835232071261, - 4077284626400168, - 2597029436066810, + 21888242871839275222246405745257275088548364400416034343698203760260807132072, + 21888242871839275222246405745257275088548364400416034343698202280005616798714, 974298390985115, - 3882029795272910, - 3177463132421160, + 21888242871839275222246405745257275088548364400416034343698203565005976004814, + 21888242871839275222246405745257275088548364400416034343698202860439313153064, 228258775954980, - 2985556095732963, - 3189437665036106, + 21888242871839275222246405745257275088548364400416034343698202668532276464867, + 21888242871839275222246405745257275088548364400416034343698202872413845768010, 1217125949946131, 1645641741566200, 511402841725395, 319744879951909, 267336013492237, - 2329736620880947, + 21888242871839275222246405745257275088548364400416034343698202012712801612851, 1913316380688907, 14478668353534, 221119884933291, - 4148631753338282, - 3596946344898375, + 21888242871839275222246405745257275088548364400416034343698203831607934070186, + 21888242871839275222246405745257275088548364400416034343698203279922525630279, 1620627393425315, - 2935412928103793, - 2467723416954179, - 2637083821657928, - 4035101688925936, - 3918788621045109, + 21888242871839275222246405745257275088548364400416034343698202618389108835697, + 21888242871839275222246405745257275088548364400416034343698202150699597686083, + 21888242871839275222246405745257275088548364400416034343698202320060002389832, + 21888242871839275222246405745257275088548364400416034343698203718077869657840, + 21888242871839275222246405745257275088548364400416034343698203601764801777013, 1506938503457899, 591911024351279, 537528711355539, 744849307582254, - 2892681697105967, + 21888242871839275222246405745257275088548364400416034343698202575657877837871, 1077427102937158, 2099905885477697, 1725022072499824, 1344972628711749, - 4235676439807210, + 21888242871839275222246405745257275088548364400416034343698203918652620539114, 1385127365900034, 504332527403848, 1274510472602935, 1678364104996367, 1818776189630955, - 3638357336494739, - 3789671318435346, - 3384069329682979, + 21888242871839275222246405745257275088548364400416034343698203321333517226643, + 21888242871839275222246405745257275088548364400416034343698203472647499167250, + 21888242871839275222246405745257275088548364400416034343698203067045510414883, 1688925472965646, 1950491783694162, - 4222384854313421, - 4091431722607782, - 3138567365052920, + 21888242871839275222246405745257275088548364400416034343698203905361035045325, + 21888242871839275222246405745257275088548364400416034343698203774407903339686, + 21888242871839275222246405745257275088548364400416034343698202821543545784824, 2142560197123998, 517281239722145, 389243162787612, - 2571927455010786, + 21888242871839275222246405745257275088548364400416034343698202254903635742690, 2204169238055515, 461252547767629, 368663076201555, 24744771482216, - 2324768378279199, - 2393865041449793, - 2534073426116310, + 21888242871839275222246405745257275088548364400416034343698202007744559011103, + 21888242871839275222246405745257275088548364400416034343698202076841222181697, + 21888242871839275222246405745257275088548364400416034343698202217049606848214, 1748143785364810, 1684005612783119, - 4264186973444028, - 2601747783827656, - 3449484157990094, - 3578126744982424, - 3640590837295384, - 3595209207364659, - 3818940729719582, + 21888242871839275222246405745257275088548364400416034343698203947163154175932, + 21888242871839275222246405745257275088548364400416034343698202284723964559560, + 21888242871839275222246405745257275088548364400416034343698203132460338721998, + 21888242871839275222246405745257275088548364400416034343698203261102925714328, + 21888242871839275222246405745257275088548364400416034343698203323567018027288, + 21888242871839275222246405745257275088548364400416034343698203278185388096563, + 21888242871839275222246405745257275088548364400416034343698203501916910451486, 260642595944291, 2025087634783078, - 3526109435152389, - 3788751148890202, - 3488269526611610, - 2799606024356470, - 2502496189136279, - 2751341042602157, + 21888242871839275222246405745257275088548364400416034343698203209085615884293, + 21888242871839275222246405745257275088548364400416034343698203471727329622106, + 21888242871839275222246405745257275088548364400416034343698203171245707343514, + 21888242871839275222246405745257275088548364400416034343698202482582205088374, + 21888242871839275222246405745257275088548364400416034343698202185472369868183, + 21888242871839275222246405745257275088548364400416034343698202434317223334061, 117865356164540, 586184967723460, - 3740945346634901, - 3262211846738115, - 3630705079416994, + 21888242871839275222246405745257275088548364400416034343698203423921527366805, + 21888242871839275222246405745257275088548364400416034343698202945188027470019, + 21888242871839275222246405745257275088548364400416034343698203313681260148898, 38881076092002, - 2830129285170727, + 21888242871839275222246405745257275088548364400416034343698202513105465902631, 340965127522597, - 2659958631269800, + 21888242871839275222246405745257275088548364400416034343698202342934812001704, 1090775963562149, - 4318186355881013, - 2510758948427733, + 21888242871839275222246405745257275088548364400416034343698204001162536612917, + 21888242871839275222246405745257275088548364400416034343698202193735129159637, 1047652033403632, 999137575650312, 2065428215645548, 327551796030852, 1383184891058933, - 2803733377437233, - 3188042891477536, - 2523434615840562, - 3291916274806774, - 4383010602533129, - 3965045514210604, + 21888242871839275222246405745257275088548364400416034343698202486709558169137, + 21888242871839275222246405745257275088548364400416034343698202871019072209440, + 21888242871839275222246405745257275088548364400416034343698202206410796572466, + 21888242871839275222246405745257275088548364400416034343698202974892455538678, + 21888242871839275222246405745257275088548364400416034343698204065986783265033, + 21888242871839275222246405745257275088548364400416034343698203648021694942508, 356254656383911, - 3311711909305393, + 21888242871839275222246405745257275088548364400416034343698202994688090037297, 2222706897314721, 901973536848630, 898178451241778, 2160137224533190, - 2872807030204391, - 3905989691698417, + 21888242871839275222246405745257275088548364400416034343698202555783210936295, + 21888242871839275222246405745257275088548364400416034343698203588965872430321, 1900936237111009, 1107813078450620, 1149266009866256, 78318379665593, - 4060167110631045, + 21888242871839275222246405745257275088548364400416034343698203743143291362949, 983534926918400, 529267710890543, - 2384238378655736, + 21888242871839275222246405745257275088548364400416034343698202067214559387640, 861816518816970, - 2365047175613025, + 21888242871839275222246405745257275088548364400416034343698202048023356344929, 1776522009482316, - 4099913299570297, + 21888242871839275222246405745257275088548364400416034343698203782889480302201, 1933381440029281, - 2557716108418869, + 21888242871839275222246405745257275088548364400416034343698202240692289150773, 2111926120677064, - 3541620129532468, - 4132356749395930, - 4467235321998228, + 21888242871839275222246405745257275088548364400416034343698203224596310264372, + 21888242871839275222246405745257275088548364400416034343698203815332930127834, + 21888242871839275222246405745257275088548364400416034343698204150211502730132, 1208017699230338, - 2646564356766826, + 21888242871839275222246405745257275088548364400416034343698202329540537498730, 1562400907890763, - 2595239359365779, - 3124283320784011, + 21888242871839275222246405745257275088548364400416034343698202278215540097683, + 21888242871839275222246405745257275088548364400416034343698202807259501515915, 548787715478477, 1248402148261947, - 3988102384381838, + 21888242871839275222246405745257275088548364400416034343698203671078565113742, 815168838706058, 439052696603534, 563519751161244, - 3222803763251415, + 21888242871839275222246405745257275088548364400416034343698202905779943983319, 687580113118368, 1876311250903315, - 2819987778284243, + 21888242871839275222246405745257275088548364400416034343698202502963959016147, 1753958689017490, - 3798665465116895, - 3719009305682178, + 21888242871839275222246405745257275088548364400416034343698203481641645848799, + 21888242871839275222246405745257275088548364400416034343698203401985486414082, 1279621975376081, 653339970735023, - 2860622060516630, - 2585068733292474, + 21888242871839275222246405745257275088548364400416034343698202543598241248534, + 21888242871839275222246405745257275088548364400416034343698202268044914024378, 1530661703980704, - 2381460186947465, + 21888242871839275222246405745257275088548364400416034343698202064436367679369, 79397558537812, - 3810829590937155, + 21888242871839275222246405745257275088548364400416034343698203493805771669059, 1332931104277076, - 4354829457047524, + 21888242871839275222246405745257275088548364400416034343698204037805637779428, 869729358833285, 1389312725901311, 1400385546720445, 1724374345585428, - 4286448805979746, - 3059289013687447, + 21888242871839275222246405745257275088548364400416034343698203969424986711650, + 21888242871839275222246405745257275088548364400416034343698202742265194419351, 1674441022152927, 680289767677992, 545477701809415, 1072215199525134, - 3115368009591255, + 21888242871839275222246405745257275088548364400416034343698202798344190323159, 1041987072702992, - 4227813329082478, - 4465873290053778, - 4035181948665576, + 21888242871839275222246405745257275088548364400416034343698203910789509814382, + 21888242871839275222246405745257275088548364400416034343698204148849470785682, + 21888242871839275222246405745257275088548364400416034343698203718158129397480, 910835625890641, - 4040322475724867, + 21888242871839275222246405745257275088548364400416034343698203723298656456771, 2020575792780264, - 3279875738755450, + 21888242871839275222246405745257275088548364400416034343698202962851919487354, 193206912890704, 1631926290649540, 2125363919912808, 1840473076834336, 1132209559406939, - 2598557814762799, - 2579573696478454, + 21888242871839275222246405745257275088548364400416034343698202281533995494703, + 21888242871839275222246405745257275088548364400416034343698202262549877210358, 1178839202705793, 1493175804189359, - 2492050291847951, - 3544942753384404, + 21888242871839275222246405745257275088548364400416034343698202175026472579855, + 21888242871839275222246405745257275088548364400416034343698203227918934116308, 819707375740860, - 3945381502910590, - 2548632052325463, - 2354593367781535, - 2786202848265389, + 21888242871839275222246405745257275088548364400416034343698203628357683642494, + 21888242871839275222246405745257275088548364400416034343698202231608233057367, + 21888242871839275222246405745257275088548364400416034343698202037569548513439, + 21888242871839275222246405745257275088548364400416034343698202469179028997293, 1261214486381042, - 4067323081949101, - 3833148259052772, - 4270346451884850, - 3610990830026087, + 21888242871839275222246405745257275088548364400416034343698203750299262681005, + 21888242871839275222246405745257275088548364400416034343698203516124439784676, + 21888242871839275222246405745257275088548364400416034343698203953322632616754, + 21888242871839275222246405745257275088548364400416034343698203293967010757991, 2069085375586135, - 3350803584622618, - 4114914720615934, + 21888242871839275222246405745257275088548364400416034343698203033779765354522, + 21888242871839275222246405745257275088548364400416034343698203797890901347838, 1582794714642124, - 3004872896359657, - 2599014069050465, + 21888242871839275222246405745257275088548364400416034343698202687849077091561, + 21888242871839275222246405745257275088548364400416034343698202281990249782369, 11703912481401, - 3328532843153242, - 4264410827912454, + 21888242871839275222246405745257275088548364400416034343698203011509023885146, + 21888242871839275222246405745257275088548364400416034343698203947387008644358, 920823464348971, - 3419062672942414, + 21888242871839275222246405745257275088548364400416034343698203102038853674318, 1520461555088256, 509341445749776, 1206158962855852, - 2724339228578869, + 21888242871839275222246405745257275088548364400416034343698202407315409310773, 1605094229277297, - 3277420960918910, + 21888242871839275222246405745257275088548364400416034343698202960397141650814, 145780900345846, 173283295317039, - 4071003104476898, - 4115426604290649, - 2545984438958327, + 21888242871839275222246405745257275088548364400416034343698203753979285208802, + 21888242871839275222246405745257275088548364400416034343698203798402785022553, + 21888242871839275222246405745257275088548364400416034343698202228960619690231, 1806366823994293, 1867387718688218, 2063994566724796, 1565462658842392, - 4460385019783182, - 2378016421155228, + 21888242871839275222246405745257275088548364400416034343698204143361200515086, + 21888242871839275222246405745257275088548364400416034343698202060992601887132, 822425720448282, 281072777278927, 631870609919827, - 3148411400823194, - 2431216718380604, + 21888242871839275222246405745257275088548364400416034343698202831387581555098, + 21888242871839275222246405745257275088548364400416034343698202114192899112508, 657108074059440, 1483558890586041, - 4185243774321898, + 21888242871839275222246405745257275088548364400416034343698203868219955053802, 2218481413147998, - 2850585681983433, + 21888242871839275222246405745257275088548364400416034343698202533561862715337, 1362077900574276, - 3549666056482594, - 2475158693074283, - 3063982972857607, + 21888242871839275222246405745257275088548364400416034343698203232642237214498, + 21888242871839275222246405745257275088548364400416034343698202158134873806187, + 21888242871839275222246405745257275088548364400416034343698202746959153589511, 361227724094829, - 3552108273859184, - 3063955072198643, - 3725678590471634, - 4249007475456607, - 3098257751710999, + 21888242871839275222246405745257275088548364400416034343698203235084454591088, + 21888242871839275222246405745257275088548364400416034343698202746931252930547, + 21888242871839275222246405745257275088548364400416034343698203408654771203538, + 21888242871839275222246405745257275088548364400416034343698203931983656188511, + 21888242871839275222246405745257275088548364400416034343698202781233932442903, 2178529478004290, 1141534766236917, 734877076950842, - 3673821541151942, + 21888242871839275222246405745257275088548364400416034343698203356797721883846, 918091753968317, - 4097429031174262, - 2862080717167656, + 21888242871839275222246405745257275088548364400416034343698203780405211906166, + 21888242871839275222246405745257275088548364400416034343698202545056897899560, 966659195851263, 689192341277285, - 3727201660176775, - 2609394502070562, + 21888242871839275222246405745257275088548364400416034343698203410177840908679, + 21888242871839275222246405745257275088548364400416034343698202292370682802466, 874030501182316, 2086493585152128, - 3024497056540500, + 21888242871839275222246405745257275088548364400416034343698202707473237272404, 1899493189389982, - 3253010542961041, + 21888242871839275222246405745257275088548364400416034343698202935986723692945, 1204325293127630, 2131823571938454, 160943054940909, @@ -13201,188 +13201,188 @@ pub global CRP: [Polynomial; L] = [ 1849929431781613, 1345274953404619, 159450535385503, - 4371681852745818, - 2393215912588553, + 21888242871839275222246405745257275088548364400416034343698204054658033477722, + 21888242871839275222246405745257275088548364400416034343698202076192093320457, 1505026991937330, 1238824941158405, 1584337501277441, - 4482828002900808, - 3159751534018669, + 21888242871839275222246405745257275088548364400416034343698204165804183632712, + 21888242871839275222246405745257275088548364400416034343698202842727714750573, 221891573877714, 476280455824747, - 2700055462125855, + 21888242871839275222246405745257275088548364400416034343698202383031642857759, 141679765302483, - 4325431297009965, - 2731510512919984, - 2574452161477199, + 21888242871839275222246405745257275088548364400416034343698204008407477741869, + 21888242871839275222246405745257275088548364400416034343698202414486693651888, + 21888242871839275222246405745257275088548364400416034343698202257428342209103, 453742961274916, - 2840971015336214, - 2929414951576425, - 2720284613888488, - 3549784044832350, + 21888242871839275222246405745257275088548364400416034343698202523947196068118, + 21888242871839275222246405745257275088548364400416034343698202612391132308329, + 21888242871839275222246405745257275088548364400416034343698202403260794620392, + 21888242871839275222246405745257275088548364400416034343698203232760225564254, 1353328799953429, - 4202933926622829, + 21888242871839275222246405745257275088548364400416034343698203885910107354733, 1971898674670704, 979954649243235, - 2858752873671245, + 21888242871839275222246405745257275088548364400416034343698202541729054403149, 904508230672352, - 2444374233195235, - 2824577675225846, + 21888242871839275222246405745257275088548364400416034343698202127350413927139, + 21888242871839275222246405745257275088548364400416034343698202507553855957750, 1043872585934639, - 3291278622514517, - 3300408334289482, - 2841742672026879, - 4333963508057294, + 21888242871839275222246405745257275088548364400416034343698202974254803246421, + 21888242871839275222246405745257275088548364400416034343698202983384515021386, + 21888242871839275222246405745257275088548364400416034343698202524718852758783, + 21888242871839275222246405745257275088548364400416034343698204016939688789198, 1676442809403697, 2027189703045676, 1401594283989741, 1377158584808611, - 3699358695946745, + 21888242871839275222246405745257275088548364400416034343698203382334876678649, 1091386303518281, - 2742498672837039, - 2650735428729203, + 21888242871839275222246405745257275088548364400416034343698202425474853568943, + 21888242871839275222246405745257275088548364400416034343698202333711609461107, 1296199387107473, - 2558968956851064, + 21888242871839275222246405745257275088548364400416034343698202241945137582968, 19414009436185, - 4438836390066928, - 3265313663511325, + 21888242871839275222246405745257275088548364400416034343698204121812570798832, + 21888242871839275222246405745257275088548364400416034343698202948289844243229, 697206982944424, 2157804829504419, - 3947060571948372, + 21888242871839275222246405745257275088548364400416034343698203630036752680276, 2053119179283207, 1232441818534331, - 3465178049967723, - 2577520287150280, - 3769833933473119, - 3594546664564676, - 3856466920611426, - 3380405477869519, + 21888242871839275222246405745257275088548364400416034343698203148154230699627, + 21888242871839275222246405745257275088548364400416034343698202260496467882184, + 21888242871839275222246405745257275088548364400416034343698203452810114205023, + 21888242871839275222246405745257275088548364400416034343698203277522845296580, + 21888242871839275222246405745257275088548364400416034343698203539443101343330, + 21888242871839275222246405745257275088548364400416034343698203063381658601423, 1439460218845256, - 2979847145470084, - 3799338779293728, - 2497264690721936, + 21888242871839275222246405745257275088548364400416034343698202662823326201988, + 21888242871839275222246405745257275088548364400416034343698203482314960025632, + 21888242871839275222246405745257275088548364400416034343698202180240871453840, 1124551579962413, 599890006058707, 2048268694807796, - 3363174130430293, - 2781476132609242, + 21888242871839275222246405745257275088548364400416034343698203046150311162197, + 21888242871839275222246405745257275088548364400416034343698202464452313341146, 285867631598314, 971042396385348, 1022794999763985, - 4438701519798645, - 4221430178614165, + 21888242871839275222246405745257275088548364400416034343698204121677700530549, + 21888242871839275222246405745257275088548364400416034343698203904406359346069, 1882601172855219, - 2889355621049980, - 3141993051227518, + 21888242871839275222246405745257275088548364400416034343698202572331801781884, + 21888242871839275222246405745257275088548364400416034343698202824969231959422, 2202004862642957, 723739421302957, 24296048922875, - 3340093654255514, + 21888242871839275222246405745257275088548364400416034343698203023069834987418, 334925103256230, - 3249357571495788, - 2465776335902851, - 3972133072665893, + 21888242871839275222246405745257275088548364400416034343698202932333752227692, + 21888242871839275222246405745257275088548364400416034343698202148752516634755, + 21888242871839275222246405745257275088548364400416034343698203655109253397797, 1228487499361441, 38953910913278, 1050234968127160, - 3432342083628278, + 21888242871839275222246405745257275088548364400416034343698203115318264360182, 1882516932110216, 1084038633203718, - 3635553975155407, - 2686339196347908, - 2498447913641051, + 21888242871839275222246405745257275088548364400416034343698203318530155887311, + 21888242871839275222246405745257275088548364400416034343698202369315377079812, + 21888242871839275222246405745257275088548364400416034343698202181424094372955, 1950452891931459, 443225268998378, 372461206173682, - 3902973285329721, + 21888242871839275222246405745257275088548364400416034343698203585949466061625, 1063410947217362, - 2270986043509311, + 21888242871839275222246405745257275088548364400416034343698201953962224241215, 202236589618662, 2081395442979016, 343086987757348, 2162376866077028, 1732539228710233, - 3239227985466771, - 2836347572251772, - 3973570424013795, + 21888242871839275222246405745257275088548364400416034343698202922204166198675, + 21888242871839275222246405745257275088548364400416034343698202519323752983676, + 21888242871839275222246405745257275088548364400416034343698203656546604745699, 16236424064843, 1584641560995860, 683347129427172, - 3189444593085381, + 21888242871839275222246405745257275088548364400416034343698202872420773817285, 2145110785942566, - 4377682321118225, + 21888242871839275222246405745257275088548364400416034343698204060658501850129, 81145076505985, - 2774946564626719, + 21888242871839275222246405745257275088548364400416034343698202457922745358623, 1437362130617883, - 4243478372152477, + 21888242871839275222246405745257275088548364400416034343698203926454552884381, 2846060853926, 1390096903992065, - 4012857394763221, - 4447966552265210, - 2783393161370080, - 2781260198771178, - 2357370814040908, - 4328359848834722, - 2501834242675427, + 21888242871839275222246405745257275088548364400416034343698203695833575495125, + 21888242871839275222246405745257275088548364400416034343698204130942732997114, + 21888242871839275222246405745257275088548364400416034343698202466369342101984, + 21888242871839275222246405745257275088548364400416034343698202464236379503082, + 21888242871839275222246405745257275088548364400416034343698202040346994772812, + 21888242871839275222246405745257275088548364400416034343698204011336029566626, + 21888242871839275222246405745257275088548364400416034343698202184810423407331, 1189346599645063, - 3518648842910282, - 3770071625549590, - 2869207056800023, + 21888242871839275222246405745257275088548364400416034343698203201625023642186, + 21888242871839275222246405745257275088548364400416034343698203453047806281494, + 21888242871839275222246405745257275088548364400416034343698202552183237531927, 2073354803733698, - 3103988020513171, - 4027439058661414, - 4448007168253671, + 21888242871839275222246405745257275088548364400416034343698202786964201245075, + 21888242871839275222246405745257275088548364400416034343698203710415239393318, + 21888242871839275222246405745257275088548364400416034343698204130983348985575, 383629522849536, 1294019937970371, 1235216100427752, 2059762563774755, 1124220654300028, - 3042090575217621, + 21888242871839275222246405745257275088548364400416034343698202725066755949525, 1718208292043114, 1613498413750996, 2186143037490265, 579816738210132, - 3274302703995917, - 3921549877136296, + 21888242871839275222246405745257275088548364400416034343698202957278884727821, + 21888242871839275222246405745257275088548364400416034343698203604526057868200, 433074897361180, 1149560476361004, - 4108755555924985, + 21888242871839275222246405745257275088548364400416034343698203791731736656889, 1895814864961104, - 2377623372435133, + 21888242871839275222246405745257275088548364400416034343698202060599553167037, 372419334146172, - 3701825451078669, + 21888242871839275222246405745257275088548364400416034343698203384801631810573, 87950130021503, - 2443263473824772, - 2720835539465748, + 21888242871839275222246405745257275088548364400416034343698202126239654556676, + 21888242871839275222246405745257275088548364400416034343698202403811720197652, 942626686426149, 1365821388160630, 1914954024438553, - 3133829736464959, + 21888242871839275222246405745257275088548364400416034343698202816805917196863, 98805165961137, - 2268142278673092, + 21888242871839275222246405745257275088548364400416034343698201951118459404996, 1851603644031212, - 3135585332340864, + 21888242871839275222246405745257275088548364400416034343698202818561513072768, 2107527247644274, 163430742866354, 1261594183135819, - 4022395010464220, - 3271993477144366, + 21888242871839275222246405745257275088548364400416034343698203705371191196124, + 21888242871839275222246405745257275088548364400416034343698202954969657876270, 303173193775247, - 3901245007461907, - 3481731083200818, - 3833157165279866, - 2997549232560944, - 3005648866298553, - 4029118733351948, + 21888242871839275222246405745257275088548364400416034343698203584221188193811, + 21888242871839275222246405745257275088548364400416034343698203164707263932722, + 21888242871839275222246405745257275088548364400416034343698203516133346011770, + 21888242871839275222246405745257275088548364400416034343698202680525413292848, + 21888242871839275222246405745257275088548364400416034343698202688625047030457, + 21888242871839275222246405745257275088548364400416034343698203712094914083852, 971476813467242, - 2547356078782631, - 3769330916437327, + 21888242871839275222246405745257275088548364400416034343698202230332259514535, + 21888242871839275222246405745257275088548364400416034343698203452307097169231, 2089543590664457, - 2503672076080222, + 21888242871839275222246405745257275088548364400416034343698202186648256812126, 2245515008194809, 147019970301502, - 2432154757403602, - 4084564854391740, + 21888242871839275222246405745257275088548364400416034343698202115130938135506, + 21888242871839275222246405745257275088548364400416034343698203767541035123644, 1985499878856511, 1234833586334355, 1580039139671944, @@ -13390,155 +13390,155 @@ pub global CRP: [Polynomial; L] = [ 1727794994132107, 1588009579683631, 2024357618538812, - 2462612018147600, - 2870587046760647, - 4154443034174529, + 21888242871839275222246405745257275088548364400416034343698202145588198879504, + 21888242871839275222246405745257275088548364400416034343698202553563227492551, + 21888242871839275222246405745257275088548364400416034343698203837419214906433, 1023083900069650, 739944246812475, - 2266438865239580, - 3231257677450751, - 3131088572778495, - 3748491146652837, - 3849921509791410, - 3370665673108389, - 2372655716282692, - 3222856309633678, + 21888242871839275222246405745257275088548364400416034343698201949415045971484, + 21888242871839275222246405745257275088548364400416034343698202914233858182655, + 21888242871839275222246405745257275088548364400416034343698202814064753510399, + 21888242871839275222246405745257275088548364400416034343698203431467327384741, + 21888242871839275222246405745257275088548364400416034343698203532897690523314, + 21888242871839275222246405745257275088548364400416034343698203053641853840293, + 21888242871839275222246405745257275088548364400416034343698202055631897014596, + 21888242871839275222246405745257275088548364400416034343698202905832490365582, 1233984330837118, - 4125786753537936, + 21888242871839275222246405745257275088548364400416034343698203808762934269840, 325789446347459, 1047537590097744, - 3919270465429451, - 3006849474420691, - 3797282864004836, - 3053183827109850, + 21888242871839275222246405745257275088548364400416034343698203602246646161355, + 21888242871839275222246405745257275088548364400416034343698202689825655152595, + 21888242871839275222246405745257275088548364400416034343698203480259044736740, + 21888242871839275222246405745257275088548364400416034343698202736160007841754, 2210521763053912, - 3880069013896701, - 3903081607144979, + 21888242871839275222246405745257275088548364400416034343698203563045194628605, + 21888242871839275222246405745257275088548364400416034343698203586057787876883, 801776092362456, - 4416822454351378, - 3217350483395926, - 2792964992925934, + 21888242871839275222246405745257275088548364400416034343698204099798635083282, + 21888242871839275222246405745257275088548364400416034343698202900326664127830, + 21888242871839275222246405745257275088548364400416034343698202475941173657838, 205115640586715, - 2916844474408235, + 21888242871839275222246405745257275088548364400416034343698202599820655140139, 1946450100007635, - 4202327262316990, - 3416793966644802, - 4353422344370579, - 3898704503979584, + 21888242871839275222246405745257275088548364400416034343698203885303443048894, + 21888242871839275222246405745257275088548364400416034343698203099770147376706, + 21888242871839275222246405745257275088548364400416034343698204036398525102483, + 21888242871839275222246405745257275088548364400416034343698203581680684711488, 1055572207447903, 1011476142612614, 1797985206117699, 115622798270086, 1352874467699, 1981251387152228, - 2348556738949086, + 21888242871839275222246405745257275088548364400416034343698202031532919680990, 95595922409670, - 3108161155929891, + 21888242871839275222246405745257275088548364400416034343698202791137336661795, 129263206658531, 1199107334614110, - 3775553878832200, - 3197385419889524, + 21888242871839275222246405745257275088548364400416034343698203458530059564104, + 21888242871839275222246405745257275088548364400416034343698202880361600621428, 1154381908032138, 528692245796597, 934147925995574, 722384000960718, - 3221667216853702, - 2306094320519006, + 21888242871839275222246405745257275088548364400416034343698202904643397585606, + 21888242871839275222246405745257275088548364400416034343698201989070501250910, 2154501629908954, - 3531642897979455, + 21888242871839275222246405745257275088548364400416034343698203214619078711359, 1334590734184936, 457100856266153, - 3040196436734062, - 3850139352024528, + 21888242871839275222246405745257275088548364400416034343698202723172617465966, + 21888242871839275222246405745257275088548364400416034343698203533115532756432, 1127392962639646, 1090113024130949, 1039908084967588, 1332531484894475, - 4044460461259866, + 21888242871839275222246405745257275088548364400416034343698203727436641991770, 555060870618699, 1917451458137460, 1702512230967525, - 3738295027047415, - 3800126747607084, + 21888242871839275222246405745257275088548364400416034343698203421271207779319, + 21888242871839275222246405745257275088548364400416034343698203483102928338988, 1760679632202860, 1821991499967680, - 3277527315776343, - 4304175842611959, - 3843674805572483, + 21888242871839275222246405745257275088548364400416034343698202960503496508247, + 21888242871839275222246405745257275088548364400416034343698203987152023343863, + 21888242871839275222246405745257275088548364400416034343698203526650986304387, 2238479210282749, - 3682507815173502, - 2905982843271784, + 21888242871839275222246405745257275088548364400416034343698203365483995905406, + 21888242871839275222246405745257275088548364400416034343698202588959024003688, 1230248743809024, 21102429647813, - 2657329155089277, - 4258399526825268, + 21888242871839275222246405745257275088548364400416034343698202340305335821181, + 21888242871839275222246405745257275088548364400416034343698203941375707557172, 559752203842916, 480165725465450, 1731706615556542, - 3398542331017314, + 21888242871839275222246405745257275088548364400416034343698203081518511749218, 2218846590265767, 263414408097647, - 4003964468418908, + 21888242871839275222246405745257275088548364400416034343698203686940649150812, 1499698708390070, - 3212711327217254, + 21888242871839275222246405745257275088548364400416034343698202895687507949158, 2119469598109615, - 2676808578798728, + 21888242871839275222246405745257275088548364400416034343698202359784759530632, 1941590600543572, 1757082392141621, 1937680144921318, - 2615153752165170, - 4283850870614189, - 2272685284116096, - 4342575823749319, + 21888242871839275222246405745257275088548364400416034343698202298129932897074, + 21888242871839275222246405745257275088548364400416034343698203966827051346093, + 21888242871839275222246405745257275088548364400416034343698201955661464848000, + 21888242871839275222246405745257275088548364400416034343698204025552004481223, 1524016542907302, - 3641951761088756, - 3005537938271075, - 3335308663679100, + 21888242871839275222246405745257275088548364400416034343698203324927941820660, + 21888242871839275222246405745257275088548364400416034343698202688514119002979, + 21888242871839275222246405745257275088548364400416034343698203018284844411004, 2083050016308152, - 2429752106883577, + 21888242871839275222246405745257275088548364400416034343698202112728287615481, 718418134321536, - 3987507409828668, - 4243316627762288, + 21888242871839275222246405745257275088548364400416034343698203670483590560572, + 21888242871839275222246405745257275088548364400416034343698203926292808494192, 770831814956101, - 2732731310606886, + 21888242871839275222246405745257275088548364400416034343698202415707491338790, 408530388652431, 2251463785386554, 1843674918618237, - 3744585181466535, - 3535765261471067, - 2972147939646584, - 3484735287472960, + 21888242871839275222246405745257275088548364400416034343698203427561362198439, + 21888242871839275222246405745257275088548364400416034343698203218741442202971, + 21888242871839275222246405745257275088548364400416034343698202655124120378488, + 21888242871839275222246405745257275088548364400416034343698203167711468204864, 1390182315151321, 1638045824346795, 1406302716059312, - 2764672503652027, + 21888242871839275222246405745257275088548364400416034343698202447648684383931, 840624201061971, - 2439848462456622, - 2304589997399578, - 3955127141491830, + 21888242871839275222246405745257275088548364400416034343698202122824643188526, + 21888242871839275222246405745257275088548364400416034343698201987566178131482, + 21888242871839275222246405745257275088548364400416034343698203638103322223734, 1301809256681397, - 2968680022572211, + 21888242871839275222246405745257275088548364400416034343698202651656203304115, 158981833473978, 2174162343030268, - 4260843768482428, - 2919688184813713, + 21888242871839275222246405745257275088548364400416034343698203943819949214332, + 21888242871839275222246405745257275088548364400416034343698202602664365545617, 2066698262355378, - 4280932210308682, - 2734573588359636, + 21888242871839275222246405745257275088548364400416034343698203963908391040586, + 21888242871839275222246405745257275088548364400416034343698202417549769091540, 802347277123386, - 4439870980470220, + 21888242871839275222246405745257275088548364400416034343698204122847161202124, 596418427214672, 1195293398477150, - 4103062813892635, - 2376766831970327, - 4401136158818590, + 21888242871839275222246405745257275088548364400416034343698203786038994624539, + 21888242871839275222246405745257275088548364400416034343698202059743012702231, + 21888242871839275222246405745257275088548364400416034343698204084112339550494, 1441778821714946, 249682341307331, - 2860537695930707, - 3503939478547629, + 21888242871839275222246405745257275088548364400416034343698202543513876662611, + 21888242871839275222246405745257275088548364400416034343698203186915659279533, 55982972650922, 1282135180703393, - 2767447167111268, + 21888242871839275222246405745257275088548364400416034343698202450423347843172, 713251252177428, 1508993131453563, 933395372507956, @@ -13546,33 +13546,33 @@ pub global CRP: [Polynomial; L] = [ 2216518747682727, 2149001226163720, 2073980641369113, - 2302400423898545, - 3196765439661270, + 21888242871839275222246405745257275088548364400416034343698201985376604630449, + 21888242871839275222246405745257275088548364400416034343698202879741620393174, 187854009206219, - 4395865566415713, - 4185277298969605, + 21888242871839275222246405745257275088548364400416034343698204078841747147617, + 21888242871839275222246405745257275088548364400416034343698203868253479701509, 2152521808774257, - 2581964109954835, + 21888242871839275222246405745257275088548364400416034343698202264940290686739, 529776624804417, 1762007916647950, 1105338617604559, 1741762858135761, - 3380224825764055, - 3137567569622143, - 4185536273913441, + 21888242871839275222246405745257275088548364400416034343698203063201006495959, + 21888242871839275222246405745257275088548364400416034343698202820543750354047, + 21888242871839275222246405745257275088548364400416034343698203868512454645345, 1094139518397505, 392365795415769, - 2494753637918091, - 4464470618931255, - 3705483747292691, - 4433108297545636, + 21888242871839275222246405745257275088548364400416034343698202177729818649995, + 21888242871839275222246405745257275088548364400416034343698204147446799663159, + 21888242871839275222246405745257275088548364400416034343698203388459928024595, + 21888242871839275222246405745257275088548364400416034343698204116084478277540, 1945920454392807, 2047915351386661, - 3139261070697656, + 21888242871839275222246405745257275088548364400416034343698202822237251429560, 2004559107108059, - 3095878531638769, + 21888242871839275222246405745257275088548364400416034343698202778854712370673, 1005705833567598, - 2762706049875113, + 21888242871839275222246405745257275088548364400416034343698202445682230607017, 1621697964762630, 1084995409528052, 1546620855418249, @@ -13580,9 +13580,9 @@ pub global CRP: [Polynomial; L] = [ 1070089265981979, 773713194652193, 47846731460477, - 2488598840850072, + 21888242871839275222246405745257275088548364400416034343698202171575021581976, 204816881377237, - 4240254464289510, + 21888242871839275222246405745257275088548364400416034343698203923230645021414, 2159075043908096, 1477894035760757, 1897636944193813, @@ -13591,85 +13591,85 @@ pub global CRP: [Polynomial; L] = [ 1678060082905752, 2178765648779984, 312978521983365, - 3699611743127295, - 4040951370594237, + 21888242871839275222246405745257275088548364400416034343698203382587923859199, + 21888242871839275222246405745257275088548364400416034343698203723927551326141, 1145732354935184, - 3208955675783951, + 21888242871839275222246405745257275088548364400416034343698202891931856515855, 390101593345922, - 3215266145557942, - 3338961845870732, + 21888242871839275222246405745257275088548364400416034343698202898242326289846, + 21888242871839275222246405745257275088548364400416034343698203021938026602636, 1635033637760431, 866851746143237, - 4460074218934124, - 2587491276897457, + 21888242871839275222246405745257275088548364400416034343698204143050399666028, + 21888242871839275222246405745257275088548364400416034343698202270467457629361, 2178649531265011, - 2899466377149123, - 2964622001812762, + 21888242871839275222246405745257275088548364400416034343698202582442557881027, + 21888242871839275222246405745257275088548364400416034343698202647598182544666, 693239016278625, 350080526176032, - 4262950858529250, - 4021909384924081, - 2495675849610705, + 21888242871839275222246405745257275088548364400416034343698203945927039261154, + 21888242871839275222246405745257275088548364400416034343698203704885565655985, + 21888242871839275222246405745257275088548364400416034343698202178652030342609, 666988910933558, - 2750430867933111, - 3824587934685303, - 3423407344461647, + 21888242871839275222246405745257275088548364400416034343698202433407048665015, + 21888242871839275222246405745257275088548364400416034343698203507564115417207, + 21888242871839275222246405745257275088548364400416034343698203106383525193551, 320242751224807, - 2418189281526708, + 21888242871839275222246405745257275088548364400416034343698202101165462258612, 722333494220528, - 3665735588235369, - 3282437566439750, - 4241639464319827, + 21888242871839275222246405745257275088548364400416034343698203348711768967273, + 21888242871839275222246405745257275088548364400416034343698202965413747171654, + 21888242871839275222246405745257275088548364400416034343698203924615645051731, 1919852261498926, 395956626327388, 124986578844226, - 3914874941314944, - 4024731326590515, - 2562550686160242, + 21888242871839275222246405745257275088548364400416034343698203597851122046848, + 21888242871839275222246405745257275088548364400416034343698203707707507322419, + 21888242871839275222246405745257275088548364400416034343698202245526866892146, 1790583794972316, - 2502007231456166, - 2257422515627916, - 2328155938821010, - 3026970569458515, + 21888242871839275222246405745257275088548364400416034343698202184983412188070, + 21888242871839275222246405745257275088548364400416034343698201940398696359820, + 21888242871839275222246405745257275088548364400416034343698202011132119552914, + 21888242871839275222246405745257275088548364400416034343698202709946750190419, 208695684701703, - 3862523192032761, + 21888242871839275222246405745257275088548364400416034343698203545499372764665, 328279211128375, 1728196131170425, - 4341868409705939, - 2426034227683343, - 3392358901602751, + 21888242871839275222246405745257275088548364400416034343698204024844590437843, + 21888242871839275222246405745257275088548364400416034343698202109010408415247, + 21888242871839275222246405745257275088548364400416034343698203075335082334655, 2181573968140397, - 3942088848047133, - 3775888472836108, + 21888242871839275222246405745257275088548364400416034343698203625065028779037, + 21888242871839275222246405745257275088548364400416034343698203458864653568012, 2196874642580021, 712739499494028, - 3341977321023338, + 21888242871839275222246405745257275088548364400416034343698203024953501755242, 440780029263763, 1596553166827354, 2070928664001356, - 4122448327977188, + 21888242871839275222246405745257275088548364400416034343698203805424508709092, 1928465017920370, 1467364762887149, - 3757754800029224, - 4281595743897075, - 3231870077999428, - 3935728262621123, - 2568043324687806, - 2566409063105487, - 2989987864043212, - 2865809989871294, - 3880497681541074, + 21888242871839275222246405745257275088548364400416034343698203440730980761128, + 21888242871839275222246405745257275088548364400416034343698203964571924628979, + 21888242871839275222246405745257275088548364400416034343698202914846258731332, + 21888242871839275222246405745257275088548364400416034343698203618704443353027, + 21888242871839275222246405745257275088548364400416034343698202251019505419710, + 21888242871839275222246405745257275088548364400416034343698202249385243837391, + 21888242871839275222246405745257275088548364400416034343698202672964044775116, + 21888242871839275222246405745257275088548364400416034343698202548786170603198, + 21888242871839275222246405745257275088548364400416034343698203563473862272978, 523619793346884, - 2423978181383716, - 4315341952706845, - 3046748529070174, + 21888242871839275222246405745257275088548364400416034343698202106954362115620, + 21888242871839275222246405745257275088548364400416034343698203998318133438749, + 21888242871839275222246405745257275088548364400416034343698202729724709802078, 252734889574026, 1081354969121526, 830233848041493, - 3159889504954145, - 2763022769970069, + 21888242871839275222246405745257275088548364400416034343698202842865685686049, + 21888242871839275222246405745257275088548364400416034343698202445998950701973, 1032304205852651, - 3771267318759756, + 21888242871839275222246405745257275088548364400416034343698203454243499491660, 1842138164379237, 303498629967416, 240844480103652, @@ -13677,416 +13677,416 @@ pub global CRP: [Polynomial; L] = [ 1945361856319122, 1722928572836073, 38508218283025, - 2449962569276104, + 21888242871839275222246405745257275088548364400416034343698202132938750008008, 222817378258277, 1910106867609962, 1794404196133620, 588507680936113, - 2910802361198888, - 3865467851926667, - 4336036152868262, - 3246033491452910, + 21888242871839275222246405745257275088548364400416034343698202593778541930792, + 21888242871839275222246405745257275088548364400416034343698203548444032658571, + 21888242871839275222246405745257275088548364400416034343698204019012333600166, + 21888242871839275222246405745257275088548364400416034343698202929009672184814, 1402186328527149, - 4001286871370900, - 2866580344599329, + 21888242871839275222246405745257275088548364400416034343698203684263052102804, + 21888242871839275222246405745257275088548364400416034343698202549556525331233, 2101110252298465, - 3231900482555758, + 21888242871839275222246405745257275088548364400416034343698202914876663287662, 1933849791558622, 187737282723018, - 2342026024275479, - 4122461470898433, + 21888242871839275222246405745257275088548364400416034343698202025002205007383, + 21888242871839275222246405745257275088548364400416034343698203805437651630337, 879300868037023, 1574371172547561, 1181138327549533, 934646490776739, 219568531382970, - 2559843005919150, - 4320028202370271, - 2785975526530646, - 3367308559960900, + 21888242871839275222246405745257275088548364400416034343698202242819186651054, + 21888242871839275222246405745257275088548364400416034343698204003004383102175, + 21888242871839275222246405745257275088548364400416034343698202468951707262550, + 21888242871839275222246405745257275088548364400416034343698203050284740692804, 1488420745278856, - 2670984090616720, - 2578991641948636, + 21888242871839275222246405745257275088548364400416034343698202353960271348624, + 21888242871839275222246405745257275088548364400416034343698202261967822680540, 912688193029013, 2002730572527214, 1307897027859354, 1297328065085548, - 3399737581383079, - 3945845843606342, - 2947673818533202, - 3335322622095603, + 21888242871839275222246405745257275088548364400416034343698203082713762114983, + 21888242871839275222246405745257275088548364400416034343698203628822024338246, + 21888242871839275222246405745257275088548364400416034343698202630649999265106, + 21888242871839275222246405745257275088548364400416034343698203018298802827507, 745693653763837, 1490220114781042, - 4290098096105832, - 3377642513553662, - 4187739903402226, - 2713761641607493, + 21888242871839275222246405745257275088548364400416034343698203973074276837736, + 21888242871839275222246405745257275088548364400416034343698203060618694285566, + 21888242871839275222246405745257275088548364400416034343698203870716084134130, + 21888242871839275222246405745257275088548364400416034343698202396737822339397, 1922894811266616, - 3349385480506445, + 21888242871839275222246405745257275088548364400416034343698203032361661238349, 121685720785173, 618550686503722, - 4394384660634127, - 2280632156922347, + 21888242871839275222246405745257275088548364400416034343698204077360841366031, + 21888242871839275222246405745257275088548364400416034343698201963608337654251, 1095224975144942, 525383314324006, - 3875387663330724, - 4362204609982424, - 3423517600534208, + 21888242871839275222246405745257275088548364400416034343698203558363844062628, + 21888242871839275222246405745257275088548364400416034343698204045180790714328, + 21888242871839275222246405745257275088548364400416034343698203106493781266112, 848526571847418, - 4297307930405413, - 4441890750914906, + 21888242871839275222246405745257275088548364400416034343698203980284111137317, + 21888242871839275222246405745257275088548364400416034343698204124866931646810, 678887063750477, - 4478414000248328, - 3142801796806549, + 21888242871839275222246405745257275088548364400416034343698204161390180980232, + 21888242871839275222246405745257275088548364400416034343698202825777977538453, 1905220987078350, - 2390112490093905, + 21888242871839275222246405745257275088548364400416034343698202073088670825809, 1695717716299023, - 2306525163035878, + 21888242871839275222246405745257275088548364400416034343698201989501343767782, 1287193895782343, - 4220256727960637, - 3508044129893030, + 21888242871839275222246405745257275088548364400416034343698203903232908692541, + 21888242871839275222246405745257275088548364400416034343698203191020310624934, 1839835466155859, - 3482156869477495, + 21888242871839275222246405745257275088548364400416034343698203165133050209399, 281047273053041, - 3893818901360010, - 4150878018502725, - 3017301455680861, - 4169093856697316, + 21888242871839275222246405745257275088548364400416034343698203576795082091914, + 21888242871839275222246405745257275088548364400416034343698203833854199234629, + 21888242871839275222246405745257275088548364400416034343698202700277636412765, + 21888242871839275222246405745257275088548364400416034343698203852070037429220, 1425690978818686, 1981817646312860, 1823759713039073, - 3297561344449905, + 21888242871839275222246405745257275088548364400416034343698202980537525181809, 2176432921244654, 1109697332047048, - 3234174931404853, + 21888242871839275222246405745257275088548364400416034343698202917151112136757, 1433573382523162, 441859900058913, 1765510473535303, - 3394797125460159, + 21888242871839275222246405745257275088548364400416034343698203077773306192063, 3725517686938, - 4417429587654144, + 21888242871839275222246405745257275088548364400416034343698204100405768386048, 485616805511177, 1206449245781107, 894159620682254, 912443259302174, - 3319098622912936, + 21888242871839275222246405745257275088548364400416034343698203002074803644840, 1439711589337657, - 2363618569587371, - 2393738326633352, + 21888242871839275222246405745257275088548364400416034343698202046594750319275, + 21888242871839275222246405745257275088548364400416034343698202076714507365256, 1845417593901463, - 3344277370317839, + 21888242871839275222246405745257275088548364400416034343698203027253551049743, 1749205971861153, 1122243052872399, - 3078232347905638, - 4241006784948224, + 21888242871839275222246405745257275088548364400416034343698202761208528637542, + 21888242871839275222246405745257275088548364400416034343698203923982965680128, 1078267134875278, 2025835984749652, 2203041722128630, - 2410944289024085, - 2681544402672556, - 3098693553801603, + 21888242871839275222246405745257275088548364400416034343698202093920469755989, + 21888242871839275222246405745257275088548364400416034343698202364520583404460, + 21888242871839275222246405745257275088548364400416034343698202781669734533507, 774885534006525, 1687248930709877, - 2495162473484974, + 21888242871839275222246405745257275088548364400416034343698202178138654216878, 1437468199350616, 525052210161781, - 4469295252001757, + 21888242871839275222246405745257275088548364400416034343698204152271432733661, 476236733545036, - 3006144066103949, + 21888242871839275222246405745257275088548364400416034343698202689120246835853, 1734530536069250, - 2761613730279333, - 2577030757550266, - 3815319859518286, + 21888242871839275222246405745257275088548364400416034343698202444589911011237, + 21888242871839275222246405745257275088548364400416034343698202260006938282170, + 21888242871839275222246405745257275088548364400416034343698203498296040250190, 773251316188609, 294926673219286, - 4473564459274921, + 21888242871839275222246405745257275088548364400416034343698204156540640006825, 1646635595814155, - 2405341645698264, + 21888242871839275222246405745257275088548364400416034343698202088317826430168, 1481880763943734, - 4133602699912129, - 2740941632337374, - 3839915163169004, - 3635158715171460, - 2330506235302846, - 4403368368805065, - 2693864299620332, - 3490777973853799, - 3799700224772031, + 21888242871839275222246405745257275088548364400416034343698203816578880644033, + 21888242871839275222246405745257275088548364400416034343698202423917813069278, + 21888242871839275222246405745257275088548364400416034343698203522891343900908, + 21888242871839275222246405745257275088548364400416034343698203318134895903364, + 21888242871839275222246405745257275088548364400416034343698202013482416034750, + 21888242871839275222246405745257275088548364400416034343698204086344549536969, + 21888242871839275222246405745257275088548364400416034343698202376840480352236, + 21888242871839275222246405745257275088548364400416034343698203173754154585703, + 21888242871839275222246405745257275088548364400416034343698203482676405503935, 85774749020425, - 3946287832880695, + 21888242871839275222246405745257275088548364400416034343698203629264013612599, 2178340150827283, 719979274003513, 685039961366496, - 3775004183945988, + 21888242871839275222246405745257275088548364400416034343698203457980364677892, 613143365979376, 1528429817179561, 738502171093408, - 3859685552540544, + 21888242871839275222246405745257275088548364400416034343698203542661733272448, 1179458016746731, 1938648007668520, - 3719337188156571, - 2508368169604889, + 21888242871839275222246405745257275088548364400416034343698203402313368888475, + 21888242871839275222246405745257275088548364400416034343698202191344350336793, 1950538429716683, 1981950911559818, 1638960445456044, 930236362455314, - 4493832818940440, + 21888242871839275222246405745257275088548364400416034343698204176808999672344, 1709012318475410, 923632090619685, 1416580039101997, - 2353697202341268, - 4173003131210081, + 21888242871839275222246405745257275088548364400416034343698202036673383073172, + 21888242871839275222246405745257275088548364400416034343698203855979311941985, 584594093904621, 1889887134469600, - 2498804358690268, - 3510200340401495, + 21888242871839275222246405745257275088548364400416034343698202181780539422172, + 21888242871839275222246405745257275088548364400416034343698203193176521133399, 466294205673314, - 3673178792811779, + 21888242871839275222246405745257275088548364400416034343698203356154973543683, 1346371238877866, 593311381607628, - 2400419397083038, - 3447687231289121, + 21888242871839275222246405745257275088548364400416034343698202083395577814942, + 21888242871839275222246405745257275088548364400416034343698203130663412021025, 1621068935327743, - 3551872420951824, - 2601945616904550, + 21888242871839275222246405745257275088548364400416034343698203234848601683728, + 21888242871839275222246405745257275088548364400416034343698202284921797636454, 185273409827972, - 3369858779963660, - 3578808336609270, + 21888242871839275222246405745257275088548364400416034343698203052834960695564, + 21888242871839275222246405745257275088548364400416034343698203261784517341174, 264501413359001, - 2921116795542747, + 21888242871839275222246405745257275088548364400416034343698202604092976274651, 886780546468989, - 2954398321801038, + 21888242871839275222246405745257275088548364400416034343698202637374502532942, 2143807453821279, - 4172806944840222, - 3422326329180153, + 21888242871839275222246405745257275088548364400416034343698203855783125572126, + 21888242871839275222246405745257275088548364400416034343698203105302509912057, 1419757476763889, - 3926512345056832, + 21888242871839275222246405745257275088548364400416034343698203609488525788736, 787246055285569, - 3792681812119080, - 3305556433251942, + 21888242871839275222246405745257275088548364400416034343698203475657992850984, + 21888242871839275222246405745257275088548364400416034343698202988532613983846, 249746000802376, 2244346251209274, 1733679458047985, - 2919266476381910, + 21888242871839275222246405745257275088548364400416034343698202602242657113814, 316684997538669, - 3082048132218148, + 21888242871839275222246405745257275088548364400416034343698202765024312950052, 965148566030549, - 4363564740717396, - 3040469419803620, - 3821719354380342, - 3348806872333946, - 4478232678577704, + 21888242871839275222246405745257275088548364400416034343698204046540921449300, + 21888242871839275222246405745257275088548364400416034343698202723445600535524, + 21888242871839275222246405745257275088548364400416034343698203504695535112246, + 21888242871839275222246405745257275088548364400416034343698203031783053065850, + 21888242871839275222246405745257275088548364400416034343698204161208859309608, 1574415028088990, - 3312796913888535, - 3312451386336738, - 3232006250177061, - 2643984045687813, - 3260176537969775, + 21888242871839275222246405745257275088548364400416034343698202995773094620439, + 21888242871839275222246405745257275088548364400416034343698202995427567068642, + 21888242871839275222246405745257275088548364400416034343698202914982430908965, + 21888242871839275222246405745257275088548364400416034343698202326960226419717, + 21888242871839275222246405745257275088548364400416034343698202943152718701679, 340222719853840, 811412040243414, 2162915807272264, - 4479348811468884, - 2405231619651289, - 2952493536284835, + 21888242871839275222246405745257275088548364400416034343698204162324992200788, + 21888242871839275222246405745257275088548364400416034343698202088207800383193, + 21888242871839275222246405745257275088548364400416034343698202635469717016739, 536877843734544, - 3772210079566855, - 3477510324225426, + 21888242871839275222246405745257275088548364400416034343698203455186260298759, + 21888242871839275222246405745257275088548364400416034343698203160486504957330, 2018951701187877, 2223520183473591, 1963529698033716, - 4105481028713339, + 21888242871839275222246405745257275088548364400416034343698203788457209445243, 999870256401338, - 3051561661653176, - 4080600887988433, - 4462849290733298, - 3009232403448215, - 3762527208098906, + 21888242871839275222246405745257275088548364400416034343698202734537842385080, + 21888242871839275222246405745257275088548364400416034343698203763577068720337, + 21888242871839275222246405745257275088548364400416034343698204145825471465202, + 21888242871839275222246405745257275088548364400416034343698202692208584180119, + 21888242871839275222246405745257275088548364400416034343698203445503388830810, 1108291931316513, - 2918604243392423, - 3562816118792275, - 3359929474257898, - 3272202705487087, - 4364483029487592, + 21888242871839275222246405745257275088548364400416034343698202601580424124327, + 21888242871839275222246405745257275088548364400416034343698203245792299524179, + 21888242871839275222246405745257275088548364400416034343698203042905654989802, + 21888242871839275222246405745257275088548364400416034343698202955178886218991, + 21888242871839275222246405745257275088548364400416034343698204047459210219496, 1222501306591758, 1912029380862414, 686053263048079, - 4050943065122215, - 3544663151090091, - 3210692626280018, - 3441691519315851, + 21888242871839275222246405745257275088548364400416034343698203733919245854119, + 21888242871839275222246405745257275088548364400416034343698203227639331821995, + 21888242871839275222246405745257275088548364400416034343698202893668807011922, + 21888242871839275222246405745257275088548364400416034343698203124667700047755, 1457106720062604, - 3391358292180318, + 21888242871839275222246405745257275088548364400416034343698203074334472912222, 1573755398729111, - 2929264295127291, + 21888242871839275222246405745257275088548364400416034343698202612240475859195, 2110409184766248, 26698799162631, - 3983314390040755, + 21888242871839275222246405745257275088548364400416034343698203666290570772659, 133474141299563, 969077690210218, - 4129197398040888, - 3350381508171469, - 4266756069389155, + 21888242871839275222246405745257275088548364400416034343698203812173578772792, + 21888242871839275222246405745257275088548364400416034343698203033357688903373, + 21888242871839275222246405745257275088548364400416034343698203949732250121059, 1276094136778124, - 3037805782916399, - 2739031164382694, - 3896810275641877, + 21888242871839275222246405745257275088548364400416034343698202720781963648303, + 21888242871839275222246405745257275088548364400416034343698202422007345114598, + 21888242871839275222246405745257275088548364400416034343698203579786456373781, 1784742003017109, - 2702079546979498, + 21888242871839275222246405745257275088548364400416034343698202385055727711402, 269496755425023, - 4144987366366276, - 2992463731731832, + 21888242871839275222246405745257275088548364400416034343698203827963547098180, + 21888242871839275222246405745257275088548364400416034343698202675439912463736, 536444943962210, 887682598087999, - 3210421582480335, + 21888242871839275222246405745257275088548364400416034343698202893397763212239, 1665207493672561, - 4287342125912223, + 21888242871839275222246405745257275088548364400416034343698203970318306644127, 1671703707566470, - 2601457105423352, - 4354550839094046, - 3336665779427673, - 2757002436894307, - 3261035377029864, + 21888242871839275222246405745257275088548364400416034343698202284433286155256, + 21888242871839275222246405745257275088548364400416034343698204037527019825950, + 21888242871839275222246405745257275088548364400416034343698203019641960159577, + 21888242871839275222246405745257275088548364400416034343698202439978617626211, + 21888242871839275222246405745257275088548364400416034343698202944011557761768, 648323477352646, 1512933312855927, - 3824328747398590, - 3474236703535343, + 21888242871839275222246405745257275088548364400416034343698203507304928130494, + 21888242871839275222246405745257275088548364400416034343698203157212884267247, 1145012873880687, 2185319427330568, 832853210439853, 2040276604736871, - 3932351103947674, + 21888242871839275222246405745257275088548364400416034343698203615327284679578, 1641301201542589, - 2870751685069495, + 21888242871839275222246405745257275088548364400416034343698202553727865801399, 1122172237570054, 1031522960541625, 1970047623829077, - 2731114345841166, + 21888242871839275222246405745257275088548364400416034343698202414090526573070, 1668576491328135, - 3294009155220164, - 2649453413745611, - 3262016437000150, - 2749383402159276, + 21888242871839275222246405745257275088548364400416034343698202976985335952068, + 21888242871839275222246405745257275088548364400416034343698202332429594477515, + 21888242871839275222246405745257275088548364400416034343698202944992617732054, + 21888242871839275222246405745257275088548364400416034343698202432359582891180, 12762005256181, - 2834927115828625, - 2741750715096770, + 21888242871839275222246405745257275088548364400416034343698202517903296560529, + 21888242871839275222246405745257275088548364400416034343698202424726895828674, 1346387120664568, 434466345813702, 310456459332501, - 3397645462578596, - 4469524325144960, - 3320101497603028, - 4362362898782516, - 4254532679384532, + 21888242871839275222246405745257275088548364400416034343698203080621643310500, + 21888242871839275222246405745257275088548364400416034343698204152500505876864, + 21888242871839275222246405745257275088548364400416034343698203003077678334932, + 21888242871839275222246405745257275088548364400416034343698204045339079514420, + 21888242871839275222246405745257275088548364400416034343698203937508860116436, 98456087015475, - 2607621637699142, - 3987660850493131, - 3133662732041026, - 3856489345799469, - 4277467542239483, - 3374250530515206, + 21888242871839275222246405745257275088548364400416034343698202290597818431046, + 21888242871839275222246405745257275088548364400416034343698203670637031225035, + 21888242871839275222246405745257275088548364400416034343698202816638912772930, + 21888242871839275222246405745257275088548364400416034343698203539465526531373, + 21888242871839275222246405745257275088548364400416034343698203960443722971387, + 21888242871839275222246405745257275088548364400416034343698203057226711247110, 726873477398232, 73928963410843, 1060119562055043, - 2827777692444494, + 21888242871839275222246405745257275088548364400416034343698202510753873176398, 1656100036979148, - 3835390786153726, + 21888242871839275222246405745257275088548364400416034343698203518366966885630, 715225561102790, 840638960329429, - 2602133543792675, - 3302910131997649, - 3817095768038260, + 21888242871839275222246405745257275088548364400416034343698202285109724524579, + 21888242871839275222246405745257275088548364400416034343698202985886312729553, + 21888242871839275222246405745257275088548364400416034343698203500071948770164, 1660081952374060, - 2873103056719613, + 21888242871839275222246405745257275088548364400416034343698202556079237451517, 1871600476165862, - 3552012074686405, - 3262985620474031, - 2303137893959624, + 21888242871839275222246405745257275088548364400416034343698203234988255418309, + 21888242871839275222246405745257275088548364400416034343698202945961801205935, + 21888242871839275222246405745257275088548364400416034343698201986114074691528, 1539569218810867, - 4206393270077331, - 3043962423470932, - 3506796566716766, + 21888242871839275222246405745257275088548364400416034343698203889369450809235, + 21888242871839275222246405745257275088548364400416034343698202726938604202836, + 21888242871839275222246405745257275088548364400416034343698203189772747448670, 870011761446795, 514324829156997, 1539438832620923, 489991633399780, - 2960301567080382, - 2326153108750354, + 21888242871839275222246405745257275088548364400416034343698202643277747812286, + 21888242871839275222246405745257275088548364400416034343698202009129289482258, 1051664204360647, - 2702790410601976, + 21888242871839275222246405745257275088548364400416034343698202385766591333880, 1664522017117848, - 2735300851080764, - 3646547612768222, + 21888242871839275222246405745257275088548364400416034343698202418277031812668, + 21888242871839275222246405745257275088548364400416034343698203329523793500126, 774349479460540, - 4331980281381849, + 21888242871839275222246405745257275088548364400416034343698204014956462113753, 818971650024547, 967244234686110, 2030293686353742, 457266583180731, - 3668023537421906, + 21888242871839275222246405745257275088548364400416034343698203350999718153810, 453563176816299, - 3151287641972818, + 21888242871839275222246405745257275088548364400416034343698202834263822704722, 1158381024106046, - 3004165404683281, - 4327489441824096, + 21888242871839275222246405745257275088548364400416034343698202687141585415185, + 21888242871839275222246405745257275088548364400416034343698204010465622556000, 541659682761655, 1107432967757484, 1375931558726735, - 4482280477292531, - 4432809259107631, - 3233026123544698, - 3922838656568126, - 3196505526521600, - 3058698690088676, + 21888242871839275222246405745257275088548364400416034343698204165256658024435, + 21888242871839275222246405745257275088548364400416034343698204115785439839535, + 21888242871839275222246405745257275088548364400416034343698202916002304276602, + 21888242871839275222246405745257275088548364400416034343698203605814837300030, + 21888242871839275222246405745257275088548364400416034343698202879481707253504, + 21888242871839275222246405745257275088548364400416034343698202741674870820580, 19243752992128, 1682830132519490, 1469279591586520, - 3877031118356799, + 21888242871839275222246405745257275088548364400416034343698203560007299088703, 1149021057928165, 1767936343881074, - 2697484416559834, + 21888242871839275222246405745257275088548364400416034343698202380460597291738, 2110599071850897, 2215316050259536, - 3818444893118478, + 21888242871839275222246405745257275088548364400416034343698203501421073850382, 147245473090103, 555047315603054, 1680102611856507, - 2606508225587756, - 3838356049854573, + 21888242871839275222246405745257275088548364400416034343698202289484406319660, + 21888242871839275222246405745257275088548364400416034343698203521332230586477, 417354584609456, - 3298933175840253, - 2884465696073528, + 21888242871839275222246405745257275088548364400416034343698202981909356572157, + 21888242871839275222246405745257275088548364400416034343698202567441876805432, 1733753983288200, - 2524569304259049, + 21888242871839275222246405745257275088548364400416034343698202207545484990953, 206280338432856, - 3206538190693807, - 3487593075957153, - 2310296501846340, + 21888242871839275222246405745257275088548364400416034343698202889514371425711, + 21888242871839275222246405745257275088548364400416034343698203170569256689057, + 21888242871839275222246405745257275088548364400416034343698201993272682578244, 1181120617837296, - 2785997076607990, - 4260608071355446, - 2466887621243555, + 21888242871839275222246405745257275088548364400416034343698202468973257339894, + 21888242871839275222246405745257275088548364400416034343698203943584252087350, + 21888242871839275222246405745257275088548364400416034343698202149863801975459, 590320009986161, - 2465150371018413, + 21888242871839275222246405745257275088548364400416034343698202148126551750317, 676229689674376, - 3806160431830531, + 21888242871839275222246405745257275088548364400416034343698203489136612562435, 1042725732214044, 1595555185982768, 1299498094774399, 984098642783592, - 4439133066633238, + 21888242871839275222246405745257275088548364400416034343698204122109247365142, 2198138875685485, - 2547721505786121, - 2468650493555913, + 21888242871839275222246405745257275088548364400416034343698202230697686518025, + 21888242871839275222246405745257275088548364400416034343698202151626674287817, 927176467115138, - 2842858705486080, - 4493642953456620, + 21888242871839275222246405745257275088548364400416034343698202525834886217984, + 21888242871839275222246405745257275088548364400416034343698204176619134188524, 2047839092472093, - 2950943676882539, + 21888242871839275222246405745257275088548364400416034343698202633919857614443, 1606117996680662, 1942793084457365, 621560750633217, - 3193763134310407, - 3406147237461936, + 21888242871839275222246405745257275088548364400416034343698202876739315042311, + 21888242871839275222246405745257275088548364400416034343698203089123418193840, 799587465753129, 1491905216111548, 1238405460316056, @@ -14094,197 +14094,197 @@ pub global CRP: [Polynomial; L] = [ 544809933364609, 1771413469506676, 1582285505225001, - 3439189001981299, - 3768069234551602, + 21888242871839275222246405745257275088548364400416034343698203122165182713203, + 21888242871839275222246405745257275088548364400416034343698203451045415283506, 720026331865434, 747026966190746, 1190690718365080, - 2531880119193266, - 4366762242705702, - 2926169800196069, + 21888242871839275222246405745257275088548364400416034343698202214856299925170, + 21888242871839275222246405745257275088548364400416034343698204049738423437606, + 21888242871839275222246405745257275088548364400416034343698202609145980927973, 1118433512355774, 892443836629134, - 2343431665656105, - 4465913149117520, - 2844350193487342, - 3193737680358111, - 4351200088276043, + 21888242871839275222246405745257275088548364400416034343698202026407846388009, + 21888242871839275222246405745257275088548364400416034343698204148889329849424, + 21888242871839275222246405745257275088548364400416034343698202527326374219246, + 21888242871839275222246405745257275088548364400416034343698202876713861090015, + 21888242871839275222246405745257275088548364400416034343698204034176269007947, 1000166086498629, - 3331085857458008, + 21888242871839275222246405745257275088548364400416034343698203014062038189912, 302946114672837, 2094764543328627, 1820212114166119, 1724854082176965, 1166386966499124, - 3961707308145200, - 2300552490907422, + 21888242871839275222246405745257275088548364400416034343698203644683488877104, + 21888242871839275222246405745257275088548364400416034343698201983528671639326, 879608685166431, - 2706089780031679, - 2917418027584249, - 4261518262960072, + 21888242871839275222246405745257275088548364400416034343698202389065960763583, + 21888242871839275222246405745257275088548364400416034343698202600394208316153, + 21888242871839275222246405745257275088548364400416034343698203944494443691976, 2209332710770723, 1895786695591504, - 2328365642581300, - 3257997784763637, - 4182848818603142, + 21888242871839275222246405745257275088548364400416034343698202011341823313204, + 21888242871839275222246405745257275088548364400416034343698202940973965495541, + 21888242871839275222246405745257275088548364400416034343698203865824999335046, 1419878866752513, - 2977895837676439, - 2292297435869422, - 3056015751252487, - 2749975482865192, + 21888242871839275222246405745257275088548364400416034343698202660872018408343, + 21888242871839275222246405745257275088548364400416034343698201975273616601326, + 21888242871839275222246405745257275088548364400416034343698202738991931984391, + 21888242871839275222246405745257275088548364400416034343698202432951663597096, 1382959882530408, - 4090427167024486, - 3904268865850129, - 3414625422307134, - 2612794774541156, - 2988462703100146, + 21888242871839275222246405745257275088548364400416034343698203773403347756390, + 21888242871839275222246405745257275088548364400416034343698203587245046582033, + 21888242871839275222246405745257275088548364400416034343698203097601603039038, + 21888242871839275222246405745257275088548364400416034343698202295770955273060, + 21888242871839275222246405745257275088548364400416034343698202671438883832050, 1693860139076261, - 2429779880457854, + 21888242871839275222246405745257275088548364400416034343698202112756061189758, 1409860905364401, 463616165978470, - 3582014941563008, + 21888242871839275222246405745257275088548364400416034343698203264991122294912, 1383594090021196, 901241278081006, 1101793192942962, - 2438513037225510, - 2914016992115749, + 21888242871839275222246405745257275088548364400416034343698202121489217957414, + 21888242871839275222246405745257275088548364400416034343698202596993172847653, 2030887162603970, - 3908102755593810, - 3329122796777854, - 2535151596162600, - 2462754215142896, - 2420136328514899, - 3812996005974724, - 3226607262866743, - 2259889023991568, - 2389383358981141, - 4434297901665824, + 21888242871839275222246405745257275088548364400416034343698203591078936325714, + 21888242871839275222246405745257275088548364400416034343698203012098977509758, + 21888242871839275222246405745257275088548364400416034343698202218127776894504, + 21888242871839275222246405745257275088548364400416034343698202145730395874800, + 21888242871839275222246405745257275088548364400416034343698202103112509246803, + 21888242871839275222246405745257275088548364400416034343698203495972186706628, + 21888242871839275222246405745257275088548364400416034343698202909583443598647, + 21888242871839275222246405745257275088548364400416034343698201942865204723472, + 21888242871839275222246405745257275088548364400416034343698202072359539713045, + 21888242871839275222246405745257275088548364400416034343698204117274082397728, 556592300021400, - 2261320993201391, - 4453694931363534, - 3701615544761213, + 21888242871839275222246405745257275088548364400416034343698201944297173933295, + 21888242871839275222246405745257275088548364400416034343698204136671112095438, + 21888242871839275222246405745257275088548364400416034343698203384591725493117, 1518697566051085, - 2770269017839406, + 21888242871839275222246405745257275088548364400416034343698202453245198571310, 130821760404280, 1030435036739615, - 3902483613486206, - 4049430560170624, - 4141980247086160, - 2853594542329379, + 21888242871839275222246405745257275088548364400416034343698203585459794218110, + 21888242871839275222246405745257275088548364400416034343698203732406740902528, + 21888242871839275222246405745257275088548364400416034343698203824956427818064, + 21888242871839275222246405745257275088548364400416034343698202536570723061283, 603387930064668, 92068627237621, 603140560528069, - 3479879288544744, + 21888242871839275222246405745257275088548364400416034343698203162855469276648, 1127512129958462, 413289962473516, 144652058754979, - 2302271207855506, - 3493144049083527, - 2621048061641807, - 3494977379843790, + 21888242871839275222246405745257275088548364400416034343698201985247388587410, + 21888242871839275222246405745257275088548364400416034343698203176120229815431, + 21888242871839275222246405745257275088548364400416034343698202304024242373711, + 21888242871839275222246405745257275088548364400416034343698203177953560575694, 506844653416635, - 2333720997301125, + 21888242871839275222246405745257275088548364400416034343698202016697178033029, 1359318952385231, 1206664377698492, - 4085989698683377, - 4074577907641672, - 3620246788115582, + 21888242871839275222246405745257275088548364400416034343698203768965879415281, + 21888242871839275222246405745257275088548364400416034343698203757554088373576, + 21888242871839275222246405745257275088548364400416034343698203303222968847486, 347402917320416, - 3474539179075425, + 21888242871839275222246405745257275088548364400416034343698203157515359807329, 1159409208851856, 1953955588574863, 1094275413089765, - 4162170989636266, + 21888242871839275222246405745257275088548364400416034343698203845147170368170, 1979010338341955, - 3551702164112044, - 3753092896027389, + 21888242871839275222246405745257275088548364400416034343698203234678344843948, + 21888242871839275222246405745257275088548364400416034343698203436069076759293, 220352963625316, - 2709775758713883, - 3155365360000586, - 4427861218398096, + 21888242871839275222246405745257275088548364400416034343698202392751939445787, + 21888242871839275222246405745257275088548364400416034343698202838341540732490, + 21888242871839275222246405745257275088548364400416034343698204110837399130000, 781343201426632, 1962547077928485, - 4459563986586818, + 21888242871839275222246405745257275088548364400416034343698204142540167318722, 626415869760217, - 3448341174493875, - 4174679921023709, + 21888242871839275222246405745257275088548364400416034343698203131317355225779, + 21888242871839275222246405745257275088548364400416034343698203857656101755613, 269341564968786, 824614955837027, - 2676126053819521, + 21888242871839275222246405745257275088548364400416034343698202359102234551425, 972784606404481, 911305871259951, - 2527886577951186, - 2731275452977578, + 21888242871839275222246405745257275088548364400416034343698202210862758683090, + 21888242871839275222246405745257275088548364400416034343698202414251633709482, 172886167537662, - 3383191611041676, + 21888242871839275222246405745257275088548364400416034343698203066167791773580, 1624946965500017, 1516988298439807, - 4208183605239413, - 2911242059336192, - 3633358004643408, + 21888242871839275222246405745257275088548364400416034343698203891159785971317, + 21888242871839275222246405745257275088548364400416034343698202594218240068096, + 21888242871839275222246405745257275088548364400416034343698203316334185375312, 715205516022776, - 3446422353036524, + 21888242871839275222246405745257275088548364400416034343698203129398533768428, 1698700051914085, 2053639841483901, 740633490632942, 1096317900873237, 2115897807768880, 1643993709464573, - 4076783259096890, - 3398496873712189, - 3498200806433675, + 21888242871839275222246405745257275088548364400416034343698203759759439828794, + 21888242871839275222246405745257275088548364400416034343698203081473054444093, + 21888242871839275222246405745257275088548364400416034343698203181176987165579, 1841796321770175, - 2852695282806872, + 21888242871839275222246405745257275088548364400416034343698202535671463538776, 1186865294003242, 189001907070858, - 3970301014048331, - 2677051977442094, - 3093011610813455, + 21888242871839275222246405745257275088548364400416034343698203653277194780235, + 21888242871839275222246405745257275088548364400416034343698202360028158173998, + 21888242871839275222246405745257275088548364400416034343698202775987791545359, 2036359201347576, - 2397911781967303, + 21888242871839275222246405745257275088548364400416034343698202080887962699207, 2127015377364820, 622321300742093, 1163665096293358, 2149506780976717, - 3113580928990592, - 3220515893818625, - 2306271182024501, - 3500013641121893, + 21888242871839275222246405745257275088548364400416034343698202796557109722496, + 21888242871839275222246405745257275088548364400416034343698202903492074550529, + 21888242871839275222246405745257275088548364400416034343698201989247362756405, + 21888242871839275222246405745257275088548364400416034343698203182989821853797, 2214021507636225, 494206167480631, - 2449891180823319, - 3958494726325386, + 21888242871839275222246405745257275088548364400416034343698202132867361555223, + 21888242871839275222246405745257275088548364400416034343698203641470907057290, 1104343479300916, - 4298942434679495, - 3973190079273504, - 2823579951346146, - 2731772693599878, - 3027906693209190, + 21888242871839275222246405745257275088548364400416034343698203981918615411399, + 21888242871839275222246405745257275088548364400416034343698203656166260005408, + 21888242871839275222246405745257275088548364400416034343698202506556132078050, + 21888242871839275222246405745257275088548364400416034343698202414748874331782, + 21888242871839275222246405745257275088548364400416034343698202710882873941094, 1126656419931299, - 3878225632019654, + 21888242871839275222246405745257275088548364400416034343698203561201812751558, 2144302209883788, 1179359089076704, - 3133270654767318, + 21888242871839275222246405745257275088548364400416034343698202816246835499222, 254682110936612, - 3831320901986367, + 21888242871839275222246405745257275088548364400416034343698203514297082718271, 2025519874498947, - 4015064533915273, - 3262488141807536, + 21888242871839275222246405745257275088548364400416034343698203698040714647177, + 21888242871839275222246405745257275088548364400416034343698202945464322539440, 2122189159343993, 868162194520667, 624786794630433, 2224090788761516, 28645855236219, - 3249921599612557, - 2463383377536656, - 3338707046266975, + 21888242871839275222246405745257275088548364400416034343698202932897780344461, + 21888242871839275222246405745257275088548364400416034343698202146359558268560, + 21888242871839275222246405745257275088548364400416034343698203021683226998879, 215346393954070, - 3635213748629919, + 21888242871839275222246405745257275088548364400416034343698203318189929361823, 159042649533494, 1901278023290845, 42000503778136, 1929432003859616, - 3593567917306980, + 21888242871839275222246405745257275088548364400416034343698203276544098038884, 2169712548033730, 1279762889427896, 57086664809579, @@ -14292,14 +14292,14 @@ pub global CRP: [Polynomial; L] = [ 373301540255774, 1965046486145958, 213117695628594, - 2840003877436518, + 21888242871839275222246405745257275088548364400416034343698202522980058168422, 975803355311907, - 3011040561396926, + 21888242871839275222246405745257275088548364400416034343698202694016742128830, 1891576411717270, 636794592436354, 680202128462857, - 2482208741090116, - 2890361818646621, + 21888242871839275222246405745257275088548364400416034343698202165184921822020, + 21888242871839275222246405745257275088548364400416034343698202573337999378525, 311316314416161, 1765822371806770, 1762754069572857, @@ -14308,113 +14308,113 @@ pub global CRP: [Polynomial; L] = [ 1352654396979974, 123657428307829, 651823297561226, - 2961471615919138, - 3382971313237999, - 2563674711797494, - 2257619940072720, - 2753159194715680, - 3759911116574397, + 21888242871839275222246405745257275088548364400416034343698202644447796651042, + 21888242871839275222246405745257275088548364400416034343698203065947493969903, + 21888242871839275222246405745257275088548364400416034343698202246650892529398, + 21888242871839275222246405745257275088548364400416034343698201940596120804624, + 21888242871839275222246405745257275088548364400416034343698202436135375447584, + 21888242871839275222246405745257275088548364400416034343698203442887297306301, 911006560892745, - 4054448315755800, - 3605258525325657, + 21888242871839275222246405745257275088548364400416034343698203737424496487704, + 21888242871839275222246405745257275088548364400416034343698203288234706057561, 819379130272609, - 2385422408406249, + 21888242871839275222246405745257275088548364400416034343698202068398589138153, 846425002889619, 1359927858977214, 1985504970969078, - 4364115465821825, + 21888242871839275222246405745257275088548364400416034343698204047091646553729, 2071612764130146, - 2689744378742437, - 4060968708934944, + 21888242871839275222246405745257275088548364400416034343698202372720559474341, + 21888242871839275222246405745257275088548364400416034343698203743944889666848, 1211158561535614, - 3128059790441373, + 21888242871839275222246405745257275088548364400416034343698202811035971173277, 1794401056284342, - 4019773134916972, + 21888242871839275222246405745257275088548364400416034343698203702749315648876, 1400063286545500, 943984361742505, 913662606831844, - 4476509734181350, - 2835993227946515, + 21888242871839275222246405745257275088548364400416034343698204159485914913254, + 21888242871839275222246405745257275088548364400416034343698202518969408678419, 1044530450979041, - 2879762069577053, - 4190070371362749, + 21888242871839275222246405745257275088548364400416034343698202562738250308957, + 21888242871839275222246405745257275088548364400416034343698203873046552094653, 1843270160220233, - 3331427703194489, - 2960451802259561, + 21888242871839275222246405745257275088548364400416034343698203014403883926393, + 21888242871839275222246405745257275088548364400416034343698202643427982991465, 2233138188710103, - 2736892789309684, - 2332111804392223, - 3107610019167610, - 4141677017970909, - 3057812746596849, - 3084338455908978, + 21888242871839275222246405745257275088548364400416034343698202419868970041588, + 21888242871839275222246405745257275088548364400416034343698202015087985124127, + 21888242871839275222246405745257275088548364400416034343698202790586199899514, + 21888242871839275222246405745257275088548364400416034343698203824653198702813, + 21888242871839275222246405745257275088548364400416034343698202740788927328753, + 21888242871839275222246405745257275088548364400416034343698202767314636640882, 683916077905810, 143105889417865, - 3714127365913224, - 3752184775919423, - 2667601641046820, + 21888242871839275222246405745257275088548364400416034343698203397103546645128, + 21888242871839275222246405745257275088548364400416034343698203435160956651327, + 21888242871839275222246405745257275088548364400416034343698202350577821778724, 586319745189950, 903998094341282, 2202731292538509, 418905872470728, - 3374568243117617, - 2531839656763182, - 4381676101726380, + 21888242871839275222246405745257275088548364400416034343698203057544423849521, + 21888242871839275222246405745257275088548364400416034343698202214815837495086, + 21888242871839275222246405745257275088548364400416034343698204064652282458284, 1564440284772584, 2115615415878223, 1853705538555878, - 2403044298333843, + 21888242871839275222246405745257275088548364400416034343698202086020479065747, 657414906442164, - 2366818089463288, + 21888242871839275222246405745257275088548364400416034343698202049794270195192, 1177446764428060, 28185754284644, - 4069785616074827, - 3837549360105316, - 2611902313446888, - 3514136281922835, - 3163853759055320, - 3332241936178135, + 21888242871839275222246405745257275088548364400416034343698203752761796806731, + 21888242871839275222246405745257275088548364400416034343698203520525540837220, + 21888242871839275222246405745257275088548364400416034343698202294878494178792, + 21888242871839275222246405745257275088548364400416034343698203197112462654739, + 21888242871839275222246405745257275088548364400416034343698202846829939787224, + 21888242871839275222246405745257275088548364400416034343698203015218116910039, 734938909080981, - 2755061994858258, + 21888242871839275222246405745257275088548364400416034343698202438038175590162, 1025245055069429, 1657145994347520, 922078635427573, 1369133948165216, 1208724881590601, 1241445071634904, - 2732097193484924, + 21888242871839275222246405745257275088548364400416034343698202415073374216828, 741869372695455, - 3508422881495489, - 3533254066854076, - 4347318004804597, + 21888242871839275222246405745257275088548364400416034343698203191399062227393, + 21888242871839275222246405745257275088548364400416034343698203216230247585980, + 21888242871839275222246405745257275088548364400416034343698204030294185536501, 282651880336166, 1024182690719531, - 3852684332029561, + 21888242871839275222246405745257275088548364400416034343698203535660512761465, 1831518857580477, 1508749177251672, 1875710008363115, - 2790939837269358, + 21888242871839275222246405745257275088548364400416034343698202473916018001262, 1542306908643906, 40216233042585, - 2720299342349333, + 21888242871839275222246405745257275088548364400416034343698202403275523081237, 25853469433519, - 2815255849225538, - 3970469185835396, + 21888242871839275222246405745257275088548364400416034343698202498232029957442, + 21888242871839275222246405745257275088548364400416034343698203653445366567300, 1480618052787833, 1638395572772544, - 3771697305732153, - 4463496372654636, - 3208688167403312, + 21888242871839275222246405745257275088548364400416034343698203454673486464057, + 21888242871839275222246405745257275088548364400416034343698204146472553386540, + 21888242871839275222246405745257275088548364400416034343698202891664348135216, 1028657110849874, - 4148971378919891, - 3461815237621142, + 21888242871839275222246405745257275088548364400416034343698203831947559651795, + 21888242871839275222246405745257275088548364400416034343698203144791418353046, 889683568189858, - 3430950769479453, - 2598260311276432, - 3431398559309305, + 21888242871839275222246405745257275088548364400416034343698203113926950211357, + 21888242871839275222246405745257275088548364400416034343698202281236492008336, + 21888242871839275222246405745257275088548364400416034343698203114374740041209, 1929680561155256, 1113133702064722, - 4087201530550946, + 21888242871839275222246405745257275088548364400416034343698203770177711282850, 82935916382414, 534097170977661, 51732478037620, @@ -14423,64 +14423,64 @@ pub global CRP: [Polynomial; L] = [ 436562860900837, 1447256765861616, 498738634200550, - 2260014336138290, - 3519432639040274, + 21888242871839275222246405745257275088548364400416034343698201942990516870194, + 21888242871839275222246405745257275088548364400416034343698203202408819772178, 649852264164133, 1087855609394547, - 3920556175114614, - 4453572798062209, + 21888242871839275222246405745257275088548364400416034343698203603532355846518, + 21888242871839275222246405745257275088548364400416034343698204136548978794113, 130983151259249, - 2452834050718529, - 3905477691813483, + 21888242871839275222246405745257275088548364400416034343698202135810231450433, + 21888242871839275222246405745257275088548364400416034343698203588453872545387, 1666991267767869, - 3358753862820020, - 3087055202356285, - 3367070107184820, - 2999826089840632, - 3715343957478910, + 21888242871839275222246405745257275088548364400416034343698203041730043551924, + 21888242871839275222246405745257275088548364400416034343698202770031383088189, + 21888242871839275222246405745257275088548364400416034343698203050046287916724, + 21888242871839275222246405745257275088548364400416034343698202682802270572536, + 21888242871839275222246405745257275088548364400416034343698203398320138210814, 1513459938770210, 1450385691599266, 716748920524895, - 2535959231976309, + 21888242871839275222246405745257275088548364400416034343698202218935412708213, 564422967918750, 1055197642326493, 1818635322447605, 1587636482111107, - 3971021531378293, + 21888242871839275222246405745257275088548364400416034343698203653997712110197, 489545416003994, 1617333736478087, - 3706980685208582, + 21888242871839275222246405745257275088548364400416034343698203389956865940486, 326083388702131, 648246808794187, - 2760867133222196, + 21888242871839275222246405745257275088548364400416034343698202443843313954100, 447203138894713, 1627837267389597, - 3767886329006208, + 21888242871839275222246405745257275088548364400416034343698203450862509738112, 1230410009312517, 1994981242176771, - 3365343917352300, - 3978597125994571, + 21888242871839275222246405745257275088548364400416034343698203048320098084204, + 21888242871839275222246405745257275088548364400416034343698203661573306726475, 2085597909690503, 23558050644579, - 2651699117545208, - 4157228737916237, + 21888242871839275222246405745257275088548364400416034343698202334675298277112, + 21888242871839275222246405745257275088548364400416034343698203840204918648141, 65427535193713, 733471114640471, - 4469632431179454, + 21888242871839275222246405745257275088548364400416034343698204152608611911358, 550576078616276, 596161800808236, 1311455130420024, 1112884661023629, 1617910433560875, 1717114544955110, - 3656627069589344, + 21888242871839275222246405745257275088548364400416034343698203339603250321248, 2164433398331417, 1991822100625175, - 2508760843235727, + 21888242871839275222246405745257275088548364400416034343698202191737023967631, 793161643218816, - 4277215712129436, - 3391115820647594, - 4421387817041758, + 21888242871839275222246405745257275088548364400416034343698203960191892861340, + 21888242871839275222246405745257275088548364400416034343698203074092001379498, + 21888242871839275222246405745257275088548364400416034343698204104363997773662, 592041266337254, 642925845772323, 736493145283728, @@ -14489,70 +14489,70 @@ pub global CRP: [Polynomial; L] = [ 1753255146746085, 1354854770044786, 399208653101228, - 4436478537432008, + 21888242871839275222246405745257275088548364400416034343698204119454718163912, 1043733343688862, - 4044964508741911, - 3494187693031678, - 4165574209456975, + 21888242871839275222246405745257275088548364400416034343698203727940689473815, + 21888242871839275222246405745257275088548364400416034343698203177163873763582, + 21888242871839275222246405745257275088548364400416034343698203848550390188879, 1550938240015081, - 2806378123596340, + 21888242871839275222246405745257275088548364400416034343698202489354304328244, 60430105754204, - 3261075499359074, - 2663660041650347, + 21888242871839275222246405745257275088548364400416034343698202944051680090978, + 21888242871839275222246405745257275088548364400416034343698202346636222382251, 1454391597617841, 1123564451931350, 1304128435354727, - 4497687088180860, + 21888242871839275222246405745257275088548364400416034343698204180663268912764, 1609050920053719, - 3482460431215089, + 21888242871839275222246405745257275088548364400416034343698203165436611946993, 386072957544717, - 4307888296077447, + 21888242871839275222246405745257275088548364400416034343698203990864476809351, 1449023787259472, 748491699974601, - 2508340159756078, + 21888242871839275222246405745257275088548364400416034343698202191316340487982, 955234717485213, - 2377378911801534, - 4095038707547915, + 21888242871839275222246405745257275088548364400416034343698202060355092533438, + 21888242871839275222246405745257275088548364400416034343698203778014888279819, 1474007996931770, - 4176702547317961, - 2676434369368022, + 21888242871839275222246405745257275088548364400416034343698203859678728049865, + 21888242871839275222246405745257275088548364400416034343698202359410550099926, 1974743693330314, - 4352000820077584, + 21888242871839275222246405745257275088548364400416034343698204034977000809488, 8401034686703, - 2424035709265638, + 21888242871839275222246405745257275088548364400416034343698202107011889997542, 1713783891949283, - 3937412510317275, - 2765217086400240, + 21888242871839275222246405745257275088548364400416034343698203620388691049179, + 21888242871839275222246405745257275088548364400416034343698202448193267132144, 1860838902061165, 1407708494834229, 1225852417852043, 88995777354031, 1379034879690319, - 3625985034657149, + 21888242871839275222246405745257275088548364400416034343698203308961215389053, 1696706152316485, - 4458471713395936, + 21888242871839275222246405745257275088548364400416034343698204141447894127840, 1374471110534233, - 2377725712214045, + 21888242871839275222246405745257275088548364400416034343698202060701892945949, 2146261631065737, 1923987681610864, - 3854744606799792, - 4292331999871329, - 2829209601337978, + 21888242871839275222246405745257275088548364400416034343698203537720787531696, + 21888242871839275222246405745257275088548364400416034343698203975308180603233, + 21888242871839275222246405745257275088548364400416034343698202512185782069882, 1183169103115231, - 4377414763348037, + 21888242871839275222246405745257275088548364400416034343698204060390944079941, 1128175099992721, - 3250463265145455, - 2739996340251115, - 2492941810970549, - 2872229854732637, + 21888242871839275222246405745257275088548364400416034343698202933439445877359, + 21888242871839275222246405745257275088548364400416034343698202422972520983019, + 21888242871839275222246405745257275088548364400416034343698202175917991702453, + 21888242871839275222246405745257275088548364400416034343698202555206035464541, 346171437340527, - 2443539436345072, + 21888242871839275222246405745257275088548364400416034343698202126515617076976, 859303137054214, - 3179462400698363, + 21888242871839275222246405745257275088548364400416034343698202862438581430267, 1411119702382608, 1515363285221858, 1626721842674207, - 3149942772388981, + 21888242871839275222246405745257275088548364400416034343698202832918953120885, 1832353399734382, 431812078817147, 264769277520206, @@ -14561,335 +14561,335 @@ pub global CRP: [Polynomial; L] = [ 352686837775481, 864903797382091, 983876734728501, - 4297354817124606, - 3649884924535755, + 21888242871839275222246405745257275088548364400416034343698203980330997856510, + 21888242871839275222246405745257275088548364400416034343698203332861105267659, 980900579364025, - 2830403569014720, + 21888242871839275222246405745257275088548364400416034343698202513379749746624, 846418230568128, - 3381740846352421, + 21888242871839275222246405745257275088548364400416034343698203064717027084325, 1610837327548917, 2183702009783347, - 2392114732167055, + 21888242871839275222246405745257275088548364400416034343698202075090912898959, 1195269302017704, - 3153318256105315, - 2659599255297437, + 21888242871839275222246405745257275088548364400416034343698202836294436837219, + 21888242871839275222246405745257275088548364400416034343698202342575436029341, 1354880360608558, 1347552927624824, - 2319151239836180, - 3888514558406242, - 3692978550808973, - 2801849853134297, - 2334855264702566, - 2922870269298410, + 21888242871839275222246405745257275088548364400416034343698202002127420568084, + 21888242871839275222246405745257275088548364400416034343698203571490739138146, + 21888242871839275222246405745257275088548364400416034343698203375954731540877, + 21888242871839275222246405745257275088548364400416034343698202484826033866201, + 21888242871839275222246405745257275088548364400416034343698202017831445434470, + 21888242871839275222246405745257275088548364400416034343698202605846450030314, 974054113039063, 1749065762216864, - 3346890590782414, - 2343183021079114, + 21888242871839275222246405745257275088548364400416034343698203029866771514318, + 21888242871839275222246405745257275088548364400416034343698202026159201811018, 1000224583827517, 999429921380797, - 4124811410959601, + 21888242871839275222246405745257275088548364400416034343698203807787591691505, 896718461320590, 1090854709847501, 1749058523962501, - 4298920407579747, - 2259729404076113, - 3511320599219532, - 4485870750398475, - 3807169140949436, + 21888242871839275222246405745257275088548364400416034343698203981896588311651, + 21888242871839275222246405745257275088548364400416034343698201942705584808017, + 21888242871839275222246405745257275088548364400416034343698203194296779951436, + 21888242871839275222246405745257275088548364400416034343698204168846931130379, + 21888242871839275222246405745257275088548364400416034343698203490145321681340, 55474410416150, 211043387152376, - 2967081952302866, + 21888242871839275222246405745257275088548364400416034343698202650058133034770, 2048896771539408, - 3121415389405120, - 4410268502308171, + 21888242871839275222246405745257275088548364400416034343698202804391570137024, + 21888242871839275222246405745257275088548364400416034343698204093244683040075, 1158727243510699, 358416984860236, - 2945549883180576, + 21888242871839275222246405745257275088548364400416034343698202628526063912480, 166498865109311, - 2688285842121711, + 21888242871839275222246405745257275088548364400416034343698202371262022853615, 2071503945036657, 1146307225045258, 212054299936934, 1414390009180350, 1296059160128765, - 2985390689124823, - 3525403916205792, - 2860130073395505, - 2430962127897301, - 3562027487185260, + 21888242871839275222246405745257275088548364400416034343698202668366869856727, + 21888242871839275222246405745257275088548364400416034343698203208380096937696, + 21888242871839275222246405745257275088548364400416034343698202543106254127409, + 21888242871839275222246405745257275088548364400416034343698202113938308629205, + 21888242871839275222246405745257275088548364400416034343698203245003667917164, 880157053129543, 12571339520020, - 3262225371874078, - 3638296278085883, - 4100277061513937, + 21888242871839275222246405745257275088548364400416034343698202945201552605982, + 21888242871839275222246405745257275088548364400416034343698203321272458817787, + 21888242871839275222246405745257275088548364400416034343698203783253242245841, 1872168054479193, 2043549041094582, - 3991364361372932, - 3730685576895577, + 21888242871839275222246405745257275088548364400416034343698203674340542104836, + 21888242871839275222246405745257275088548364400416034343698203413661757627481, 184379386858080, 2102540155060865, - 2660455472893731, + 21888242871839275222246405745257275088548364400416034343698202343431653625635, 2188949000501344, 622063069752429, - 3207610261009572, + 21888242871839275222246405745257275088548364400416034343698202890586441741476, 1028284262252407, - 3606846793538917, + 21888242871839275222246405745257275088548364400416034343698203289822974270821, 438667555432569, - 2977001797689684, - 3691059988339317, + 21888242871839275222246405745257275088548364400416034343698202659977978421588, + 21888242871839275222246405745257275088548364400416034343698203374036169071221, 156575272807862, - 2439949861144902, - 3886054975446794, + 21888242871839275222246405745257275088548364400416034343698202122926041876806, + 21888242871839275222246405745257275088548364400416034343698203569031156178698, 2175257617994503, - 4481596687396197, + 21888242871839275222246405745257275088548364400416034343698204164572868128101, 543417613829415, - 2420162253213928, - 2290565325872059, + 21888242871839275222246405745257275088548364400416034343698202103138433945832, + 21888242871839275222246405745257275088548364400416034343698201973541506603963, 1010448820403544, - 4470332896952586, + 21888242871839275222246405745257275088548364400416034343698204153309077684490, 1022320953719167, - 2441503098061082, - 2790465615109915, + 21888242871839275222246405745257275088548364400416034343698202124479278792986, + 21888242871839275222246405745257275088548364400416034343698202473441795841819, 68296580313170, - 4142926749991276, - 3625411111746104, + 21888242871839275222246405745257275088548364400416034343698203825902930723180, + 21888242871839275222246405745257275088548364400416034343698203308387292478008, 1672250264244541, - 4240831780242936, - 4016641924585946, + 21888242871839275222246405745257275088548364400416034343698203923807960974840, + 21888242871839275222246405745257275088548364400416034343698203699618105317850, 154288432652694, - 3100185791250536, + 21888242871839275222246405745257275088548364400416034343698202783161971982440, 1695023613497398, 2158995296217400, - 2695706333179247, - 3481372714298094, + 21888242871839275222246405745257275088548364400416034343698202378682513911151, + 21888242871839275222246405745257275088548364400416034343698203164348895029998, 1699517087877668, 170927717337638, 984060430617886, 1133549629460022, 1092449225769297, 1460758141061893, - 2792232611609894, + 21888242871839275222246405745257275088548364400416034343698202475208792341798, 1573892014220619, - 3440559252503358, + 21888242871839275222246405745257275088548364400416034343698203123535433235262, 555382334808206, - 2999317076527492, - 4104028878776732, - 2550514094555534, + 21888242871839275222246405745257275088548364400416034343698202682293257259396, + 21888242871839275222246405745257275088548364400416034343698203787005059508636, + 21888242871839275222246405745257275088548364400416034343698202233490275287438, 1267788049883351, 1656804182678347, - 4349190329686660, + 21888242871839275222246405745257275088548364400416034343698204032166510418564, 911609052586962, 2099734992262571, 779684700887764, - 2468196064295709, - 2683113788556339, + 21888242871839275222246405745257275088548364400416034343698202151172245027613, + 21888242871839275222246405745257275088548364400416034343698202366089969288243, 690564260123386, 968757175192468, - 2729045092733784, - 3829318602740789, + 21888242871839275222246405745257275088548364400416034343698202412021273465688, + 21888242871839275222246405745257275088548364400416034343698203512294783472693, 1821812767589202, 2095897519629977, 167748443138167, - 2678018061183737, - 3043376219543067, - 2821275810317600, + 21888242871839275222246405745257275088548364400416034343698202360994241915641, + 21888242871839275222246405745257275088548364400416034343698202726352400274971, + 21888242871839275222246405745257275088548364400416034343698202504251991049504, 1105841207377980, 1778227431150809, 885954095230511, 721199532803347, - 2344863555920684, + 21888242871839275222246405745257275088548364400416034343698202027839736652588, 1076173780402847, 1933241059095935, - 2729016391522280, - 3652445874529886, + 21888242871839275222246405745257275088548364400416034343698202411992572254184, + 21888242871839275222246405745257275088548364400416034343698203335422055261790, 1124847615368333, - 2833857849933787, - 3298492672884296, - 3373796635792132, + 21888242871839275222246405745257275088548364400416034343698202516834030665691, + 21888242871839275222246405745257275088548364400416034343698202981468853616200, + 21888242871839275222246405745257275088548364400416034343698203056772816524036, 1527077717978293, - 3013626869757261, + 21888242871839275222246405745257275088548364400416034343698202696603050489165, 2009863958277451, - 3711693795636303, + 21888242871839275222246405745257275088548364400416034343698203394669976368207, 84288261959141, - 2657915101775864, - 2775079749621447, + 21888242871839275222246405745257275088548364400416034343698202340891282507768, + 21888242871839275222246405745257275088548364400416034343698202458055930353351, 121456275306942, - 4353791751202446, + 21888242871839275222246405745257275088548364400416034343698204036767931934350, 1955424989615430, 391236540660784, 375906445639607, - 2648564248331832, - 3551000809621483, + 21888242871839275222246405745257275088548364400416034343698202331540429063736, + 21888242871839275222246405745257275088548364400416034343698203233976990353387, 246400956402156, 149875547722241, 480203645796466, 1879927589975293, 1345971690134094, 598971559588915, - 4128132934524142, + 21888242871839275222246405745257275088548364400416034343698203811109115256046, 923809841271831, 1051672304415479, - 3264639178442012, + 21888242871839275222246405745257275088548364400416034343698202947615359173916, 1707678737394930, 150131631647982, - 3947772837236503, - 3822421978308120, - 2543871959584647, - 3527432635748780, + 21888242871839275222246405745257275088548364400416034343698203630749017968407, + 21888242871839275222246405745257275088548364400416034343698203505398159040024, + 21888242871839275222246405745257275088548364400416034343698202226848140316551, + 21888242871839275222246405745257275088548364400416034343698203210408816480684, 1671796687877817, 1155102209318128, - 2687108590865690, - 3584731146723289, - 4437769795003064, - 4390844821663225, + 21888242871839275222246405745257275088548364400416034343698202370084771597594, + 21888242871839275222246405745257275088548364400416034343698203267707327455193, + 21888242871839275222246405745257275088548364400416034343698204120745975734968, + 21888242871839275222246405745257275088548364400416034343698204073821002395129, 819772663175256, 243446487957437, 783562875918215, - 3072313920499497, + 21888242871839275222246405745257275088548364400416034343698202755290101231401, 686004153189317, 1794363517137286, - 3785955355751345, + 21888242871839275222246405745257275088548364400416034343698203468931536483249, 592480118992817, - 2962973235085522, - 3553927168332915, + 21888242871839275222246405745257275088548364400416034343698202645949415817426, + 21888242871839275222246405745257275088548364400416034343698203236903349064819, 1543943921628920, - 2936178781682525, - 3881520527967951, + 21888242871839275222246405745257275088548364400416034343698202619154962414429, + 21888242871839275222246405745257275088548364400416034343698203564496708699855, 1856070998747416, - 2433033629186659, + 21888242871839275222246405745257275088548364400416034343698202116009809918563, 1803278197707768, - 4199435946454855, - 4384859756270382, + 21888242871839275222246405745257275088548364400416034343698203882412127186759, + 21888242871839275222246405745257275088548364400416034343698204067835937002286, 715195134691347, 1079686025948317, 622654410935964, 1579852796424699, - 2716146568722960, - 2289947319329190, - 4426130013030365, - 2973360154216616, - 3400746159353912, + 21888242871839275222246405745257275088548364400416034343698202399122749454864, + 21888242871839275222246405745257275088548364400416034343698201972923500061094, + 21888242871839275222246405745257275088548364400416034343698204109106193762269, + 21888242871839275222246405745257275088548364400416034343698202656336334948520, + 21888242871839275222246405745257275088548364400416034343698203083722340085816, 1637962100618085, 26772761247619, 1137163393095642, - 2761500648689667, - 3343947158935855, - 3140817129787692, + 21888242871839275222246405745257275088548364400416034343698202444476829421571, + 21888242871839275222246405745257275088548364400416034343698203026923339667759, + 21888242871839275222246405745257275088548364400416034343698202823793310519596, 1144916897443613, - 2896175292664977, + 21888242871839275222246405745257275088548364400416034343698202579151473396881, 456056500623704, - 2630892918595368, + 21888242871839275222246405745257275088548364400416034343698202313869099327272, 2228264730657710, - 2840591360808469, + 21888242871839275222246405745257275088548364400416034343698202523567541540373, 1077934643521119, - 3452413054676477, + 21888242871839275222246405745257275088548364400416034343698203135389235408381, 53882470012626, - 3037149355419847, + 21888242871839275222246405745257275088548364400416034343698202720125536151751, 1509330870625634, - 2936743915200305, - 3652959261527466, + 21888242871839275222246405745257275088548364400416034343698202619720095932209, + 21888242871839275222246405745257275088548364400416034343698203335935442259370, 1938378950554373, 2139633444095401, - 4252786429374550, - 3621133816688276, + 21888242871839275222246405745257275088548364400416034343698203935762610106454, + 21888242871839275222246405745257275088548364400416034343698203304109997420180, 714056210280390, 1448410838026373, 2203958520080773, - 4182093954082052, + 21888242871839275222246405745257275088548364400416034343698203865070134813956, 918461862053962, 100559978216844, - 2795983001108044, - 2702833170335470, - 2389948465249947, - 4375405694764847, + 21888242871839275222246405745257275088548364400416034343698202478959181839948, + 21888242871839275222246405745257275088548364400416034343698202385809351067374, + 21888242871839275222246405745257275088548364400416034343698202072924645981851, + 21888242871839275222246405745257275088548364400416034343698204058381875496751, 573657792205422, - 4299702496666275, - 3788801237712367, - 4145581085232669, + 21888242871839275222246405745257275088548364400416034343698203982678677398179, + 21888242871839275222246405745257275088548364400416034343698203471777418444271, + 21888242871839275222246405745257275088548364400416034343698203828557265964573, 1058409777517660, 1313656513593463, - 4119172187425231, - 2727510195765409, - 2699381786832024, - 4439572017132865, + 21888242871839275222246405745257275088548364400416034343698203802148368157135, + 21888242871839275222246405745257275088548364400416034343698202410486376497313, + 21888242871839275222246405745257275088548364400416034343698202382357967563928, + 21888242871839275222246405745257275088548364400416034343698204122548197864769, 2242742333342830, - 3345749890996608, + 21888242871839275222246405745257275088548364400416034343698203028726071728512, 487398803575728, 229593348095664, - 3302358107611155, + 21888242871839275222246405745257275088548364400416034343698202985334288343059, 605194864734149, 1040124562563732, - 4119189538943633, - 3727592048516579, + 21888242871839275222246405745257275088548364400416034343698203802165719675537, + 21888242871839275222246405745257275088548364400416034343698203410568229248483, 449517063584101, 1422622041059177, 652764976657841, 961597598172369, 391811072084888, - 4280183926310491, - 2351903076931145, + 21888242871839275222246405745257275088548364400416034343698203963160107042395, + 21888242871839275222246405745257275088548364400416034343698202034879257663049, 2250049332790914, - 4378167375100256, - 2299288809705357, + 21888242871839275222246405745257275088548364400416034343698204061143555832160, + 21888242871839275222246405745257275088548364400416034343698201982264990437261, 2023584093720465, 765520785819339, - 4338729077441543, + 21888242871839275222246405745257275088548364400416034343698204021705258173447, 1794807208679170, 1874879115351366, 980320379983548, - 3484280380510833, + 21888242871839275222246405745257275088548364400416034343698203167256561242737, 482334972176882, - 4458512635846358, + 21888242871839275222246405745257275088548364400416034343698204141488816578262, 707875301628057, 709604473135454, - 3174201782055733, - 2475433929283803, + 21888242871839275222246405745257275088548364400416034343698202857177962787637, + 21888242871839275222246405745257275088548364400416034343698202158410110015707, 1792431502921030, - 4063949953448825, + 21888242871839275222246405745257275088548364400416034343698203746926134180729, 978471596548337, 1054473268081908, - 3111163891117094, + 21888242871839275222246405745257275088548364400416034343698202794140071848998, 1873423904648543, - 3693429350731651, + 21888242871839275222246405745257275088548364400416034343698203376405531463555, 1335286934785437, 1514532691888590, - 3352244250210773, - 3027789158863407, + 21888242871839275222246405745257275088548364400416034343698203035220430942677, + 21888242871839275222246405745257275088548364400416034343698202710765339595311, 331954930724819, 1436832465841194, 904065249059041, 2229016375052981, - 4397262428235473, - 2644685288277330, + 21888242871839275222246405745257275088548364400416034343698204080238608967377, + 21888242871839275222246405745257275088548364400416034343698202327661469009234, 1249487473762855, 223615030785022, - 4237436621820780, - 3409854069596268, - 3136944608552191, - 2753822587397738, + 21888242871839275222246405745257275088548364400416034343698203920412802552684, + 21888242871839275222246405745257275088548364400416034343698203092830250328172, + 21888242871839275222246405745257275088548364400416034343698202819920789284095, + 21888242871839275222246405745257275088548364400416034343698202436798768129642, 83173715811783, - 3825841730870265, - 4348128400836913, + 21888242871839275222246405745257275088548364400416034343698203508817911602169, + 21888242871839275222246405745257275088548364400416034343698204031104581568817, 590591931502404, 2136539356390366, 831490412255292, - 2857709894923971, + 21888242871839275222246405745257275088548364400416034343698202540686075655875, 322895896030945, - 3219685262562403, + 21888242871839275222246405745257275088548364400416034343698202902661443294307, 1234716499270034, 750178817449433, - 2719576905019186, - 3114321057900201, - 2638991125405855, + 21888242871839275222246405745257275088548364400416034343698202402553085751090, + 21888242871839275222246405745257275088548364400416034343698202797297238632105, + 21888242871839275222246405745257275088548364400416034343698202321967306137759, 987956148548209, - 4004709980661714, - 3872481674857928, + 21888242871839275222246405745257275088548364400416034343698203687686161393618, + 21888242871839275222246405745257275088548364400416034343698203555457855589832, 1803708427305246, - 2952333353258246, - 2412740125390984, + 21888242871839275222246405745257275088548364400416034343698202635309533990150, + 21888242871839275222246405745257275088548364400416034343698202095716306122888, 1037374930586991, 1815216949815047, - 2625840589461762, + 21888242871839275222246405745257275088548364400416034343698202308816770193666, 56795196500601, 480503785762075, 573595425196406, @@ -14898,518 +14898,518 @@ pub global CRP: [Polynomial; L] = [ 1796059944867830, 2226926327316420, 1395732722222989, - 3098423466084960, - 2830833917301080, + 21888242871839275222246405745257275088548364400416034343698202781399646816864, + 21888242871839275222246405745257275088548364400416034343698202513810098032984, 1178769933807032, - 3990381654067749, + 21888242871839275222246405745257275088548364400416034343698203673357834799653, 1041698873976372, 1046593305406611, - 2305903005543998, + 21888242871839275222246405745257275088548364400416034343698201988879186275902, 1103531211374092, 999127440024940, - 3186258885639918, - 3976328445596813, + 21888242871839275222246405745257275088548364400416034343698202869235066371822, + 21888242871839275222246405745257275088548364400416034343698203659304626328717, 1333846503510516, - 2512715426898686, - 2905960538771886, + 21888242871839275222246405745257275088548364400416034343698202195691607630590, + 21888242871839275222246405745257275088548364400416034343698202588936719503790, 1767265806421239, 1873476542259595, - 4374638243288557, + 21888242871839275222246405745257275088548364400416034343698204057614424020461, 1672746444342923, - 4501820387287788, - 3339046277932286, - 2680236985517386, - 4015229599954323, + 21888242871839275222246405745257275088548364400416034343698204184796568019692, + 21888242871839275222246405745257275088548364400416034343698203022022458664190, + 21888242871839275222246405745257275088548364400416034343698202363213166249290, + 21888242871839275222246405745257275088548364400416034343698203698205780686227, 945897635591988, - 3080842279106232, - 2309428197838156, - 2259780638897408, + 21888242871839275222246405745257275088548364400416034343698202763818459838136, + 21888242871839275222246405745257275088548364400416034343698201992404378570060, + 21888242871839275222246405745257275088548364400416034343698201942756819629312, 1817960923312447, - 2775155944015653, - 2868430358266948, + 21888242871839275222246405745257275088548364400416034343698202458132124747557, + 21888242871839275222246405745257275088548364400416034343698202551406538998852, 216326399343355, 875038248436224, 1163305897282350, 813210781468966, 603499056392175, - 3248777273144287, + 21888242871839275222246405745257275088548364400416034343698202931753453876191, 2061071734102274, - 2809166635291709, - 4205864046693818, + 21888242871839275222246405745257275088548364400416034343698202492142816023613, + 21888242871839275222246405745257275088548364400416034343698203888840227425722, 1757006457508742, - 3998873670503490, - 2978313295147533, + 21888242871839275222246405745257275088548364400416034343698203681849851235394, + 21888242871839275222246405745257275088548364400416034343698202661289475879437, 1024794865720037, - 3694095461972457, - 3683537662398316, - 3275220746501231, + 21888242871839275222246405745257275088548364400416034343698203377071642704361, + 21888242871839275222246405745257275088548364400416034343698203366513843130220, + 21888242871839275222246405745257275088548364400416034343698202958196927233135, 1093688015870844, 2178333492802070, 1834475746743782, - 4090844912141594, - 2920679460926437, - 3435083904891850, + 21888242871839275222246405745257275088548364400416034343698203773821092873498, + 21888242871839275222246405745257275088548364400416034343698202603655641658341, + 21888242871839275222246405745257275088548364400416034343698203118060085623754, 2227624242617605, 1680729666983001, 631320995494731, - 4104805072801717, + 21888242871839275222246405745257275088548364400416034343698203787781253533621, 2004357567115841, 642268509068948, 272769564059907, - 3016894792340269, + 21888242871839275222246405745257275088548364400416034343698202699870973072173, 1996994974791544, 1894044227044709, - 2318631886541144, + 21888242871839275222246405745257275088548364400416034343698202001608067273048, 1480771177739766, 1506060546318246, - 4342128969715991, - 3649449725643713, - 3887940405260356, - 3928235333774895, + 21888242871839275222246405745257275088548364400416034343698204025105150447895, + 21888242871839275222246405745257275088548364400416034343698203332425906375617, + 21888242871839275222246405745257275088548364400416034343698203570916585992260, + 21888242871839275222246405745257275088548364400416034343698203611211514506799, 1989366665208620, 432804766920986, - 3208638209877638, + 21888242871839275222246405745257275088548364400416034343698202891614390609542, 2130148410442679, - 2774696802710726, + 21888242871839275222246405745257275088548364400416034343698202457672983442630, 856655236117450, 1995261396495730, 2143693137462879, 146675924724721, 2052662387451346, - 2599463227476466, - 2914796304141605, - 4353570011496653, - 4482152971332724, + 21888242871839275222246405745257275088548364400416034343698202282439408208370, + 21888242871839275222246405745257275088548364400416034343698202597772484873509, + 21888242871839275222246405745257275088548364400416034343698204036546192228557, + 21888242871839275222246405745257275088548364400416034343698204165129152064628, 1736040548358020, 154167197927719, 1813323123495278, - 3081211196684598, + 21888242871839275222246405745257275088548364400416034343698202764187377416502, 1026798952902043, - 4360814961900146, + 21888242871839275222246405745257275088548364400416034343698204043791142632050, 501227211290848, - 2678090032449999, + 21888242871839275222246405745257275088548364400416034343698202361066213181903, 1267320435988700, - 3331870110771319, - 3370414904439720, + 21888242871839275222246405745257275088548364400416034343698203014846291503223, + 21888242871839275222246405745257275088548364400416034343698203053391085171624, 444417743118100, 737493753271530, - 4259463456619473, + 21888242871839275222246405745257275088548364400416034343698203942439637351377, 764053647680625, - 4094772842453536, + 21888242871839275222246405745257275088548364400416034343698203777749023185440, 534888578397224, 747443103091378, 576366015528530, - 2873646346770773, + 21888242871839275222246405745257275088548364400416034343698202556622527502677, 1968839131340785, 983664685896854, - 3576072153148903, + 21888242871839275222246405745257275088548364400416034343698203259048333880807, 1681579760751584, - 3622365123990856, + 21888242871839275222246405745257275088548364400416034343698203305341304722760, 1259033182224491, 1794535293174953, 577166698948921, - 3067914961287034, + 21888242871839275222246405745257275088548364400416034343698202750891142018938, 690557683371133, - 2514653219126377, - 3260204135315356, - 3263495007663035, - 2633971883910704, + 21888242871839275222246405745257275088548364400416034343698202197629399858281, + 21888242871839275222246405745257275088548364400416034343698202943180316047260, + 21888242871839275222246405745257275088548364400416034343698202946471188394939, + 21888242871839275222246405745257275088548364400416034343698202316948064642608, 392446344510039, - 4073936387611950, + 21888242871839275222246405745257275088548364400416034343698203756912568343854, 1156941491321288, 1310609902573219, 1617354884367276, 1410661181768009, - 3705368519347146, + 21888242871839275222246405745257275088548364400416034343698203388344700079050, 644587380521130, - 3198347897013063, - 3476513996054553, + 21888242871839275222246405745257275088548364400416034343698202881324077744967, + 21888242871839275222246405745257275088548364400416034343698203159490176786457, 268663258820661, 348104191282954, - 2487977356351668, + 21888242871839275222246405745257275088548364400416034343698202170953537083572, 46919229565028, - 3932503628783649, + 21888242871839275222246405745257275088548364400416034343698203615479809515553, 1076663254964682, - 2255048151802858, - 4133995658869269, - 4502616253207646, + 21888242871839275222246405745257275088548364400416034343698201938024332534762, + 21888242871839275222246405745257275088548364400416034343698203816971839601173, + 21888242871839275222246405745257275088548364400416034343698204185592433939550, 12798744428961, - 3778294256295179, + 21888242871839275222246405745257275088548364400416034343698203461270437027083, 753413853170412, 1849143776615639, - 4048765628321084, - 2674989290179044, + 21888242871839275222246405745257275088548364400416034343698203731741809052988, + 21888242871839275222246405745257275088548364400416034343698202357965470910948, 489902440518523, - 4407642919510300, + 21888242871839275222246405745257275088548364400416034343698204090619100242204, 282628343113169, - 3497301738267428, - 3754866160126928, + 21888242871839275222246405745257275088548364400416034343698203180277918999332, + 21888242871839275222246405745257275088548364400416034343698203437842340858832, 438464495778559, - 3904233341915459, - 3131263843226969, - 3900146136124002, + 21888242871839275222246405745257275088548364400416034343698203587209522647363, + 21888242871839275222246405745257275088548364400416034343698202814240023958873, + 21888242871839275222246405745257275088548364400416034343698203583122316855906, 310642295881397, 1431195907370004, - 3773678487401960, + 21888242871839275222246405745257275088548364400416034343698203456654668133864, 793176267339879, - 3782173675420288, + 21888242871839275222246405745257275088548364400416034343698203465149856152192, 800975426567839, 1286205933198178, - 4443755911549972, - 3274991057070084, - 3622720357197643, + 21888242871839275222246405745257275088548364400416034343698204126732092281876, + 21888242871839275222246405745257275088548364400416034343698202957967237801988, + 21888242871839275222246405745257275088548364400416034343698203305696537929547, 1307716264398775, - 4282912649954926, - 4221452530474495, + 21888242871839275222246405745257275088548364400416034343698203965888830686830, + 21888242871839275222246405745257275088548364400416034343698203904428711206399, 733184714241653, 396929175727929, - 3941949380249141, + 21888242871839275222246405745257275088548364400416034343698203624925560981045, 1481205071180623, - 3166039637300993, + 21888242871839275222246405745257275088548364400416034343698202849015818032897, 1003755387382804, - 4200672616703039, + 21888242871839275222246405745257275088548364400416034343698203883648797434943, 2042542996249264, - 4139056515006766, - 3820756364758068, - 4425239824349813, - 3563194627544534, - 4236101282018533, + 21888242871839275222246405745257275088548364400416034343698203822032695738670, + 21888242871839275222246405745257275088548364400416034343698203503732545489972, + 21888242871839275222246405745257275088548364400416034343698204108216005081717, + 21888242871839275222246405745257275088548364400416034343698203246170808276438, + 21888242871839275222246405745257275088548364400416034343698203919077462750437, 704610518495711, - 3447488761123792, + 21888242871839275222246405745257275088548364400416034343698203130464941855696, 122583855181218, 463523368797683, 2158999196190464, 515075798032711, - 3594523994505706, + 21888242871839275222246405745257275088548364400416034343698203277500175237610, 211887645407968, 413839541988932, 1943255775370971, - 2339077564621738, + 21888242871839275222246405745257275088548364400416034343698202022053745353642, 1572855096444458, 491982867573980, 1822134918907912, 692035671082325, - 4169108209917632, + 21888242871839275222246405745257275088548364400416034343698203852084390649536, 653203123810889, 1164153913881022, 279457007277516, 394596192024893, 1870232499386247, - 2542048705887419, + 21888242871839275222246405745257275088548364400416034343698202225024886619323, 1558562176340869, 405581269084431, 1688537163742655, - 3267010353617807, + 21888242871839275222246405745257275088548364400416034343698202949986534349711, 484293165687057, - 4478281719216663, - 3988229379250539, + 21888242871839275222246405745257275088548364400416034343698204161257899948567, + 21888242871839275222246405745257275088548364400416034343698203671205559982443, 853266009550121, - 4449026390497405, + 21888242871839275222246405745257275088548364400416034343698204132002571229309, 439135507758976, 671595762738800, - 4005397303620660, - 3937872414844858, - 2898587383580597, + 21888242871839275222246405745257275088548364400416034343698203688373484352564, + 21888242871839275222246405745257275088548364400416034343698203620848595576762, + 21888242871839275222246405745257275088548364400416034343698202581563564312501, 1678322676625104, 115199102664082, 461367385759009, 1726755126791966, 2018518944347698, - 2496147201294364, - 4377825945405996, + 21888242871839275222246405745257275088548364400416034343698202179123382026268, + 21888242871839275222246405745257275088548364400416034343698204060802126137900, 778186836882106, - 4111902973238577, - 2497223273828453, - 2717739522907981, - 3806051708667441, - 3359088965040007, - 3349065140135813, - 2603626558406635, - 2487407273800204, + 21888242871839275222246405745257275088548364400416034343698203794879153970481, + 21888242871839275222246405745257275088548364400416034343698202180199454560357, + 21888242871839275222246405745257275088548364400416034343698202400715703639885, + 21888242871839275222246405745257275088548364400416034343698203489027889399345, + 21888242871839275222246405745257275088548364400416034343698203042065145771911, + 21888242871839275222246405745257275088548364400416034343698203032041320867717, + 21888242871839275222246405745257275088548364400416034343698202286602739138539, + 21888242871839275222246405745257275088548364400416034343698202170383454532108, 1017775137381375, 786731152829376, - 2514902544231632, - 3086690372643458, + 21888242871839275222246405745257275088548364400416034343698202197878724963536, + 21888242871839275222246405745257275088548364400416034343698202769666553375362, 434767022922199, - 2312416318123442, - 4480830238764740, + 21888242871839275222246405745257275088548364400416034343698201995392498855346, + 21888242871839275222246405745257275088548364400416034343698204163806419496644, 665495024380364, 1317614931747379, - 3099368258160132, - 3367108779319419, + 21888242871839275222246405745257275088548364400416034343698202782344438892036, + 21888242871839275222246405745257275088548364400416034343698203050084960051323, 2189349976246472, 1962462053788338, 1374715497462877, - 4399463926370525, + 21888242871839275222246405745257275088548364400416034343698204082440107102429, 1613560358583741, - 3297197168896723, - 3413021476253659, + 21888242871839275222246405745257275088548364400416034343698202980173349628627, + 21888242871839275222246405745257275088548364400416034343698203095997656985563, 940721311626378, 1754321802645167, - 3882351878764965, + 21888242871839275222246405745257275088548364400416034343698203565328059496869, 1144592445107292, - 4211015758600102, + 21888242871839275222246405745257275088548364400416034343698203893991939332006, 1709834671084067, - 4152097708261625, + 21888242871839275222246405745257275088548364400416034343698203835073888993529, 232843402357985, - 3120961916257623, + 21888242871839275222246405745257275088548364400416034343698202803938096989527, 465703123213397, - 2655602071838238, + 21888242871839275222246405745257275088548364400416034343698202338578252570142, 1801307511180808, 649157648589565, - 4189514158885379, - 3056944456025674, + 21888242871839275222246405745257275088548364400416034343698203872490339617283, + 21888242871839275222246405745257275088548364400416034343698202739920636757578, 1314238559559576, - 3787706555468755, + 21888242871839275222246405745257275088548364400416034343698203470682736200659, 559413591695151, 2221402152752808, 248621421585502, - 3513226062426179, - 4227702825110981, + 21888242871839275222246405745257275088548364400416034343698203196202243158083, + 21888242871839275222246405745257275088548364400416034343698203910679005842885, 1886625709190944, - 3477607393367887, - 3095071370302874, - 4241867899740759, - 3739009270109692, + 21888242871839275222246405745257275088548364400416034343698203160583574099791, + 21888242871839275222246405745257275088548364400416034343698202778047551034778, + 21888242871839275222246405745257275088548364400416034343698203924844080472663, + 21888242871839275222246405745257275088548364400416034343698203421985450841596, 31978881756981, 1620412665574745, 1082193604648018, - 2956631008876277, - 4157105101282752, - 3675607856577727, + 21888242871839275222246405745257275088548364400416034343698202639607189608181, + 21888242871839275222246405745257275088548364400416034343698203840081282014656, + 21888242871839275222246405745257275088548364400416034343698203358584037309631, 426350701873308, 810335352328925, 169293642546720, 1953849370667073, - 2366556940771889, + 21888242871839275222246405745257275088548364400416034343698202049533121503793, 1701578231226347, - 3975255409202557, + 21888242871839275222246405745257275088548364400416034343698203658231589934461, 1243511963863921, 1877359826622503, - 4494196706465991, + 21888242871839275222246405745257275088548364400416034343698204177172887197895, 1091056426763545, - 4240398318571713, - 3095601203643267, - 3523682860259189, + 21888242871839275222246405745257275088548364400416034343698203923374499303617, + 21888242871839275222246405745257275088548364400416034343698202778577384375171, + 21888242871839275222246405745257275088548364400416034343698203206659040991093, 857179133288622, 252039544747565, 1996397692191534, - 4050925906401800, + 21888242871839275222246405745257275088548364400416034343698203733902087133704, 2149995379228530, 842351671397499, 1198256389383709, - 3722928725521352, - 4067142938540728, - 2293442744442404, - 3934001903992179, + 21888242871839275222246405745257275088548364400416034343698203405904906253256, + 21888242871839275222246405745257275088548364400416034343698203750119119272632, + 21888242871839275222246405745257275088548364400416034343698201976418925174308, + 21888242871839275222246405745257275088548364400416034343698203616978084724083, 1467792820989788, - 3434995331313168, - 3782093417420973, - 4236080131381412, - 3479500078707897, - 4194581376532863, - 4327032128774575, - 3140738751238727, + 21888242871839275222246405745257275088548364400416034343698203117971512045072, + 21888242871839275222246405745257275088548364400416034343698203465069598152877, + 21888242871839275222246405745257275088548364400416034343698203919056312113316, + 21888242871839275222246405745257275088548364400416034343698203162476259439801, + 21888242871839275222246405745257275088548364400416034343698203877557557264767, + 21888242871839275222246405745257275088548364400416034343698204010008309506479, + 21888242871839275222246405745257275088548364400416034343698202823714931970631, 852432263288377, 1756410549317057, 1796351912405067, - 2357674606863778, - 3953550515161637, - 3193586714355510, + 21888242871839275222246405745257275088548364400416034343698202040650787595682, + 21888242871839275222246405745257275088548364400416034343698203636526695893541, + 21888242871839275222246405745257275088548364400416034343698202876562895087414, 32780142224906, 1882377644326164, 1188861283215680, - 4147350215406650, - 2590393123174173, - 3698006133142945, - 3607825214686244, - 2838762130822849, + 21888242871839275222246405745257275088548364400416034343698203830326396138554, + 21888242871839275222246405745257275088548364400416034343698202273369303906077, + 21888242871839275222246405745257275088548364400416034343698203380982313874849, + 21888242871839275222246405745257275088548364400416034343698203290801395418148, + 21888242871839275222246405745257275088548364400416034343698202521738311554753, 2098816166592266, 769555947411971, - 2359218672215439, - 2846308351281115, + 21888242871839275222246405745257275088548364400416034343698202042194852947343, + 21888242871839275222246405745257275088548364400416034343698202529284532013019, 1188082853965774, - 3124259672229831, + 21888242871839275222246405745257275088548364400416034343698202807235852961735, 662077597763466, 2189579434361013, - 3926898961758822, - 4405252502622476, + 21888242871839275222246405745257275088548364400416034343698203609875142490726, + 21888242871839275222246405745257275088548364400416034343698204088228683354380, 1288140709936405, 30494667104124, 174171354933657, - 4091745718138110, - 3905322071623051, - 2646022120046777, + 21888242871839275222246405745257275088548364400416034343698203774721898870014, + 21888242871839275222246405745257275088548364400416034343698203588298252354955, + 21888242871839275222246405745257275088548364400416034343698202328998300778681, 1844287821499541, - 3946176632760164, + 21888242871839275222246405745257275088548364400416034343698203629152813492068, 1201787755363817, 1677123669457014, - 3279339993486063, - 4003860506171014, + 21888242871839275222246405745257275088548364400416034343698202962316174217967, + 21888242871839275222246405745257275088548364400416034343698203686836686902918, 1633918444309413, 1650588548878869, 960374602225697, 1388280316284954, 2009664231213940, 2105422770483439, - 4020058266119736, - 4419080673956868, - 3818550505398906, + 21888242871839275222246405745257275088548364400416034343698203703034446851640, + 21888242871839275222246405745257275088548364400416034343698204102056854688772, + 21888242871839275222246405745257275088548364400416034343698203501526686130810, 287438472526234, 289661421263458, 354714946410406, - 3122754901325896, + 21888242871839275222246405745257275088548364400416034343698202805731082057800, 1997019717833957, 1989440932283205, - 4481573478279072, + 21888242871839275222246405745257275088548364400416034343698204164549659010976, 1176301840300910, - 3569910067683271, - 2586234384223269, - 3747652784394588, - 3631326243904257, - 4185061962953160, - 4364431778365585, + 21888242871839275222246405745257275088548364400416034343698203252886248415175, + 21888242871839275222246405745257275088548364400416034343698202269210564955173, + 21888242871839275222246405745257275088548364400416034343698203430628965126492, + 21888242871839275222246405745257275088548364400416034343698203314302424636161, + 21888242871839275222246405745257275088548364400416034343698203868038143685064, + 21888242871839275222246405745257275088548364400416034343698204047407959097489, 175584279937470, 1446592213773458, 1787114583627416, - 2357011475136257, - 4336325539712849, - 4203826766463161, - 3985757798033069, - 2404573164241165, - 3101091325614462, - 4340953158209475, - 2257419887691446, + 21888242871839275222246405745257275088548364400416034343698202039987655868161, + 21888242871839275222246405745257275088548364400416034343698204019301720444753, + 21888242871839275222246405745257275088548364400416034343698203886802947195065, + 21888242871839275222246405745257275088548364400416034343698203668733978764973, + 21888242871839275222246405745257275088548364400416034343698202087549344973069, + 21888242871839275222246405745257275088548364400416034343698202784067506346366, + 21888242871839275222246405745257275088548364400416034343698204023929338941379, + 21888242871839275222246405745257275088548364400416034343698201940396068423350, 1352064756134305, - 2761479081612527, + 21888242871839275222246405745257275088548364400416034343698202444455262344431, 474124535046522, 1855628394528489, 1341520257671790, - 2480191191130798, - 3222389175493704, - 4303988815872928, + 21888242871839275222246405745257275088548364400416034343698202163167371862702, + 21888242871839275222246405745257275088548364400416034343698202905365356225608, + 21888242871839275222246405745257275088548364400416034343698203986964996604832, 1330355631667648, - 3845913890840165, + 21888242871839275222246405745257275088548364400416034343698203528890071572069, 1487684658487647, - 4110956618577442, + 21888242871839275222246405745257275088548364400416034343698203793932799309346, 610273032949471, 672354023294283, 637548525937278, 120564876031213, 56235237409807, 1155773712336472, - 3326677685099860, - 2589103011584897, - 4218001500437338, - 2757121820624963, + 21888242871839275222246405745257275088548364400416034343698203009653865831764, + 21888242871839275222246405745257275088548364400416034343698202272079192316801, + 21888242871839275222246405745257275088548364400416034343698203900977681169242, + 21888242871839275222246405745257275088548364400416034343698202440098001356867, 626837519366606, 1834460557788436, - 2383021362669530, - 3751368855503532, + 21888242871839275222246405745257275088548364400416034343698202065997543401434, + 21888242871839275222246405745257275088548364400416034343698203434345036235436, 624792058236960, - 3771993758863179, - 4023873308981281, + 21888242871839275222246405745257275088548364400416034343698203454969939595083, + 21888242871839275222246405745257275088548364400416034343698203706849489713185, 140803444671911, - 3335948479218987, + 21888242871839275222246405745257275088548364400416034343698203018924659950891, 1629520822953255, - 4463048995021701, + 21888242871839275222246405745257275088548364400416034343698204146025175753605, 1256963015040847, - 4272145014357701, - 3780732502688560, + 21888242871839275222246405745257275088548364400416034343698203955121195089605, + 21888242871839275222246405745257275088548364400416034343698203463708683420464, 706852161431219, 1460908498077223, 1425511276402374, 1247918827467178, 891691512874397, 352379170982724, - 4231664693184905, + 21888242871839275222246405745257275088548364400416034343698203914640873916809, 408103776704705, 415619812585402, 109024633479613, 2098000515740195, - 3957091356571902, + 21888242871839275222246405745257275088548364400416034343698203640067537303806, 2163426802672760, 432579101545050, 164033215273506, - 2421801459172877, - 2267817169939148, + 21888242871839275222246405745257275088548364400416034343698202104777639904781, + 21888242871839275222246405745257275088548364400416034343698201950793350671052, 1133159857721986, 1374177151179185, - 4152544028206256, + 21888242871839275222246405745257275088548364400416034343698203835520208938160, 212834549509510, 1822092214999972, 544037549756981, 560575321625577, - 2294971682485226, - 3317344393862873, + 21888242871839275222246405745257275088548364400416034343698201977947863217130, + 21888242871839275222246405745257275088548364400416034343698203000320574594777, 1412180777391781, - 3223012087109748, - 2269190684225831, - 4041984774247910, - 2897687483856097, - 2295530779959702, + 21888242871839275222246405745257275088548364400416034343698202905988267841652, + 21888242871839275222246405745257275088548364400416034343698201952166864957735, + 21888242871839275222246405745257275088548364400416034343698203724960954979814, + 21888242871839275222246405745257275088548364400416034343698202580663664588001, + 21888242871839275222246405745257275088548364400416034343698201978506960691606, 635186343788141, - 4048172993126736, + 21888242871839275222246405745257275088548364400416034343698203731149173858640, 1537955811230742, - 3463121759687133, + 21888242871839275222246405745257275088548364400416034343698203146097940419037, 2188157931542092, 1321280691444908, 349135244609502, - 2346948563426657, - 2761938412173128, + 21888242871839275222246405745257275088548364400416034343698202029924744158561, + 21888242871839275222246405745257275088548364400416034343698202444914592905032, 1615864889167146, - 3164602162306914, - 4124100662167403, - 2343248533496266, + 21888242871839275222246405745257275088548364400416034343698202847578343038818, + 21888242871839275222246405745257275088548364400416034343698203807076842899307, + 21888242871839275222246405745257275088548364400416034343698202026224714228170, 620031168839886, 1960312696808162, - 2603387636353952, + 21888242871839275222246405745257275088548364400416034343698202286363817085856, 283368736694338, - 3399651792140434, - 3983639924744883, - 3940949632923894, - 2841668126162747, - 3194982146538936, - 4114331317337083, + 21888242871839275222246405745257275088548364400416034343698203082627972872338, + 21888242871839275222246405745257275088548364400416034343698203666616105476787, + 21888242871839275222246405745257275088548364400416034343698203623925813655798, + 21888242871839275222246405745257275088548364400416034343698202524644306894651, + 21888242871839275222246405745257275088548364400416034343698202877958327270840, + 21888242871839275222246405745257275088548364400416034343698203797307498068987, 973136399074041, 1869706425364227, - 3356241560126734, + 21888242871839275222246405745257275088548364400416034343698203039217740858638, 686358088016333, - 3196471641997696, - 2457181032845413, + 21888242871839275222246405745257275088548364400416034343698202879447822729600, + 21888242871839275222246405745257275088548364400416034343698202140157213577317, 75656024103228, 2108912440267027, - 3936297523487972, - 4361730850969346, + 21888242871839275222246405745257275088548364400416034343698203619273704219876, + 21888242871839275222246405745257275088548364400416034343698204044707031701250, 2209174928982605, 696495474167399, - 3962382384560683, - 4393359096596993, - 3680625848008607, + 21888242871839275222246405745257275088548364400416034343698203645358565292587, + 21888242871839275222246405745257275088548364400416034343698204076335277328897, + 21888242871839275222246405745257275088548364400416034343698203363602028740511, 1688853534631794, - 3420454695452537, - 3147988500447942, - 2461973969410680, - 2600984253788867, + 21888242871839275222246405745257275088548364400416034343698203103430876184441, + 21888242871839275222246405745257275088548364400416034343698202830964681179846, + 21888242871839275222246405745257275088548364400416034343698202144950150142584, + 21888242871839275222246405745257275088548364400416034343698202283960434520771, 2004929250792954, - 4032318225755130, - 3174490542419256, - 2661369689350733, - 4256539945954861, - 3566679546225888, + 21888242871839275222246405745257275088548364400416034343698203715294406487034, + 21888242871839275222246405745257275088548364400416034343698202857466723151160, + 21888242871839275222246405745257275088548364400416034343698202344345870082637, + 21888242871839275222246405745257275088548364400416034343698203939516126686765, + 21888242871839275222246405745257275088548364400416034343698203249655726957792, 1085691460612204, - 3613197971242841, - 3146842163235485, - 4114479549325845, + 21888242871839275222246405745257275088548364400416034343698203296174151974745, + 21888242871839275222246405745257275088548364400416034343698202829818343967389, + 21888242871839275222246405745257275088548364400416034343698203797455730057749, 490626837000100, - 3065960222505926, + 21888242871839275222246405745257275088548364400416034343698202748936403237830, 537667369718961, - 3754232909577875, - 2504763132486230, + 21888242871839275222246405745257275088548364400416034343698203437209090309779, + 21888242871839275222246405745257275088548364400416034343698202187739313218134, 756599767247744, 1768905865757133, - 3175179129704568, - 4287045792999392, + 21888242871839275222246405745257275088548364400416034343698202858155310436472, + 21888242871839275222246405745257275088548364400416034343698203970021973731296, 1809607725013474, 923573355544142, 1449832425599826, @@ -15417,10 +15417,10 @@ pub global CRP: [Polynomial; L] = [ 2169113576279252, 352465098070440, 275785740974591, - 2922052237667099, - 3419166628454671, + 21888242871839275222246405745257275088548364400416034343698202605028418399003, + 21888242871839275222246405745257275088548364400416034343698203102142809186575, 1870766231232616, - 3331253788355472, + 21888242871839275222246405745257275088548364400416034343698203014229969087376, 1678917520980128, 2096972867950798, 874131400505255, @@ -15431,59 +15431,59 @@ pub global CRP: [Polynomial; L] = [ 1542575708968491, 1179584652356171, 433993880759162, - 2339935021547670, + 21888242871839275222246405745257275088548364400416034343698202022911202279574, 2098992876895660, 375548610290615, - 3885740959806167, + 21888242871839275222246405745257275088548364400416034343698203568717140538071, 989066217314063, 636221586782992, - 3903559295251218, + 21888242871839275222246405745257275088548364400416034343698203586535475983122, 559023928562329, - 3121005932342525, - 2336878068244205, - 2267436964492852, + 21888242871839275222246405745257275088548364400416034343698202803982113074429, + 21888242871839275222246405745257275088548364400416034343698202019854248976109, + 21888242871839275222246405745257275088548364400416034343698201950413145224756, 490636894473952, 188631364199786, - 3815531433638840, - 4015592966085486, + 21888242871839275222246405745257275088548364400416034343698203498507614370744, + 21888242871839275222246405745257275088548364400416034343698203698569146817390, 1820237187112480, 760290644105919, 493796241730953, 585176500323406, - 2736987727026257, + 21888242871839275222246405745257275088548364400416034343698202419963907758161, 167208396276637, - 4224882994695628, + 21888242871839275222246405745257275088548364400416034343698203907859175427532, 1276587586326983, - 2802309951467110, + 21888242871839275222246405745257275088548364400416034343698202485286132199014, 1843770640756528, 906825432811672, 1348139220423980, 325615672841780, - 2823923497357256, + 21888242871839275222246405745257275088548364400416034343698202506899678089160, 832838322857766, - 4301297905344385, + 21888242871839275222246405745257275088548364400416034343698203984274086076289, 823671261942292, - 4454143391455171, + 21888242871839275222246405745257275088548364400416034343698204137119572187075, 145205210824536, 846181422640944, 373102327659487, - 3227843104688133, - 2929068453523014, + 21888242871839275222246405745257275088548364400416034343698202910819285420037, + 21888242871839275222246405745257275088548364400416034343698202612044634254918, 584928743065264, - 2986297129152326, - 3069493441070356, - 3370944357937347, + 21888242871839275222246405745257275088548364400416034343698202669273309884230, + 21888242871839275222246405745257275088548364400416034343698202752469621802260, + 21888242871839275222246405745257275088548364400416034343698203053920538669251, 2223448468747942, 2165748852995177, - 2713262072928259, + 21888242871839275222246405745257275088548364400416034343698202396238253660163, 653784791478759, 1947196487823600, 2142585925542706, 1978125182378224, - 3081379857637615, - 3570564539298708, + 21888242871839275222246405745257275088548364400416034343698202764356038369519, + 21888242871839275222246405745257275088548364400416034343698203253540720030612, 178250374934421, - 3883506775437831, + 21888242871839275222246405745257275088548364400416034343698203566482956169735, 1789208779386073, 1506830877099788, 313923763756473, @@ -15492,148 +15492,148 @@ pub global CRP: [Polynomial; L] = [ 242075002563575, 2936967116205, 772754057121966, - 2388725691559057, + 21888242871839275222246405745257275088548364400416034343698202071701872290961, 1268616094240748, 417568615014893, - 2682153334625466, - 3269648296220160, + 21888242871839275222246405745257275088548364400416034343698202365129515357370, + 21888242871839275222246405745257275088548364400416034343698202952624476952064, 824361466209240, 635322153494974, - 3415094452739450, + 21888242871839275222246405745257275088548364400416034343698203098070633471354, 559282704911593, - 3597731617285628, + 21888242871839275222246405745257275088548364400416034343698203280707798017532, 938223172765983, 2203099428652156, - 2564315873916973, + 21888242871839275222246405745257275088548364400416034343698202247292054648877, 1114925567333357, 2107820982141251, - 3237227644170379, + 21888242871839275222246405745257275088548364400416034343698202920203824902283, 2144402677744012, 152017034351731, - 2562206062366584, - 2665720861755163, - 4292669120457056, - 3612134744266973, + 21888242871839275222246405745257275088548364400416034343698202245182243098488, + 21888242871839275222246405745257275088548364400416034343698202348697042487067, + 21888242871839275222246405745257275088548364400416034343698203975645301188960, + 21888242871839275222246405745257275088548364400416034343698203295110924998877, 601121137281723, 2042598647562893, - 3704133258984401, + 21888242871839275222246405745257275088548364400416034343698203387109439716305, 633350448012500, 1945097457746193, - 3253159272132000, + 21888242871839275222246405745257275088548364400416034343698202936135452863904, 345633613533381, - 4217765544227688, + 21888242871839275222246405745257275088548364400416034343698203900741724959592, 894499833230258, - 4007500985929296, - 2642105623882789, + 21888242871839275222246405745257275088548364400416034343698203690477166661200, + 21888242871839275222246405745257275088548364400416034343698202325081804614693, 1439281912903990, 674862451903249, 814457232474667, - 4151240899220773, - 4405926250153117, - 2858993601714035, + 21888242871839275222246405745257275088548364400416034343698203834217079952677, + 21888242871839275222246405745257275088548364400416034343698204088902430885021, + 21888242871839275222246405745257275088548364400416034343698202541969782445939, 1315046921579757, 224348887764732, - 3456828901360298, - 3416671456647604, + 21888242871839275222246405745257275088548364400416034343698203139805082092202, + 21888242871839275222246405745257275088548364400416034343698203099647637379508, 1092338129633680, - 2716633445542693, + 21888242871839275222246405745257275088548364400416034343698202399609626274597, 1700908577470057, 669397836537777, 335964309091946, - 4464376334777504, - 3284168545285786, - 2652358027124069, - 2826540428658365, - 3560408826898467, - 3387080125426594, - 2818433027482536, + 21888242871839275222246405745257275088548364400416034343698204147352515509408, + 21888242871839275222246405745257275088548364400416034343698202967144726017690, + 21888242871839275222246405745257275088548364400416034343698202335334207855973, + 21888242871839275222246405745257275088548364400416034343698202509516609390269, + 21888242871839275222246405745257275088548364400416034343698203243385007630371, + 21888242871839275222246405745257275088548364400416034343698203070056306158498, + 21888242871839275222246405745257275088548364400416034343698202501409208214440, 506675052394460, - 4330634266977659, - 3936276432391218, + 21888242871839275222246405745257275088548364400416034343698204013610447709563, + 21888242871839275222246405745257275088548364400416034343698203619252613123122, 1183670443817538, - 3829313711390690, + 21888242871839275222246405745257275088548364400416034343698203512289892122594, 1286575784347780, 202744222960346, - 3105048803894034, - 3316081458501566, + 21888242871839275222246405745257275088548364400416034343698202788024984625938, + 21888242871839275222246405745257275088548364400416034343698202999057639233470, 5220892268853, - 3561634561335325, + 21888242871839275222246405745257275088548364400416034343698203244610742067229, 2244815296581696, 1835251642819648, - 3716879720899755, + 21888242871839275222246405745257275088548364400416034343698203399855901631659, 1782458368301754, - 3695440193502567, - 2722872632374965, + 21888242871839275222246405745257275088548364400416034343698203378416374234471, + 21888242871839275222246405745257275088548364400416034343698202405848813106869, 1191349732608139, 1356681320864391, - 2753606321727513, + 21888242871839275222246405745257275088548364400416034343698202436582502459417, 1940394985552400, 919687130011849, - 3600148786343375, + 21888242871839275222246405745257275088548364400416034343698203283124967075279, 1542345560198892, 1408984963253802, 657873926164984, 1655304097719458, 413253041235602, - 4137140299099626, + 21888242871839275222246405745257275088548364400416034343698203820116479831530, 1053782290060086, - 2921392586354556, - 2299991844412438, - 3706136731722401, + 21888242871839275222246405745257275088548364400416034343698202604368767086460, + 21888242871839275222246405745257275088548364400416034343698201982968025144342, + 21888242871839275222246405745257275088548364400416034343698203389112912454305, 1462846972331975, 2197023138922870, - 2930014922606053, - 2353130677053250, - 3525573014110072, - 4003886672890273, + 21888242871839275222246405745257275088548364400416034343698202612991103337957, + 21888242871839275222246405745257275088548364400416034343698202036106857785154, + 21888242871839275222246405745257275088548364400416034343698203208549194841976, + 21888242871839275222246405745257275088548364400416034343698203686862853622177, 1484606069420141, 156036856893246, 266811056082206, 499161442773992, - 3079342127916456, - 3132075782098863, + 21888242871839275222246405745257275088548364400416034343698202762318308648360, + 21888242871839275222246405745257275088548364400416034343698202815051962830767, 1101341395300944, - 2505500072153313, + 21888242871839275222246405745257275088548364400416034343698202188476252885217, 333692872170644, - 2781870866252981, + 21888242871839275222246405745257275088548364400416034343698202464847046984885, 1253122979828970, 1211384045496896, 1038875894187883, 1892317252242510, - 3244200554517116, + 21888242871839275222246405745257275088548364400416034343698202927176735249020, 1087544149493368, - 4458223351496187, - 2898594196268905, + 21888242871839275222246405745257275088548364400416034343698204141199532228091, + 21888242871839275222246405745257275088548364400416034343698202581570377000809, 539639895351644, 1432455380262301, - 2876674154381550, + 21888242871839275222246405745257275088548364400416034343698202559650335113454, 650239137169827, - 3210170283383697, - 3970794546647019, - 3564172696887531, - 2327330521128779, - 3704562718059589, + 21888242871839275222246405745257275088548364400416034343698202893146464115601, + 21888242871839275222246405745257275088548364400416034343698203653770727378923, + 21888242871839275222246405745257275088548364400416034343698203247148877619435, + 21888242871839275222246405745257275088548364400416034343698202010306701860683, + 21888242871839275222246405745257275088548364400416034343698203387538898791493, 576474733254918, - 4064402511842920, - 4408254854059467, - 2379154237989020, + 21888242871839275222246405745257275088548364400416034343698203747378692574824, + 21888242871839275222246405745257275088548364400416034343698204091231034791371, + 21888242871839275222246405745257275088548364400416034343698202062130418720924, 1809874901639928, 1685681093855809, - 3243659396696161, + 21888242871839275222246405745257275088548364400416034343698202926635577428065, 922236692194285, 1314566374156051, 2202474440616231, - 3015684818832236, + 21888242871839275222246405745257275088548364400416034343698202698660999564140, 1320058857786048, - 2710550895260734, + 21888242871839275222246405745257275088548364400416034343698202393527075992638, 1977089564522144, 366676037006286, 133961452639141, - 3802512271052198, + 21888242871839275222246405745257275088548364400416034343698203485488451784102, 1578719244345007, 157692640721989, 1905119882840441, - 2716765124951864, + 21888242871839275222246405745257275088548364400416034343698202399741305683768, 1678414112333781, 1372540134221739, 839783133090575, @@ -15644,173 +15644,173 @@ pub global CRP: [Polynomial; L] = [ 1173202809744638, 1846576989132272, 1057019560192076, - 2607468459916847, + 21888242871839275222246405745257275088548364400416034343698202290444640648751, 531625777263548, - 3107627130997606, + 21888242871839275222246405745257275088548364400416034343698202790603311729510, 592326812803471, - 3957231263863104, - 2632192272644784, - 3614064684427767, - 3442315431386044, + 21888242871839275222246405745257275088548364400416034343698203640207444595008, + 21888242871839275222246405745257275088548364400416034343698202315168453376688, + 21888242871839275222246405745257275088548364400416034343698203297040865159671, + 21888242871839275222246405745257275088548364400416034343698203125291612117948, 1255277037153371, - 3122272240951132, + 21888242871839275222246405745257275088548364400416034343698202805248421683036, 1945451455830943, 903425894996321, 1348097868060302, 1829399605677130, 954051796485063, 814587152502400, - 3335831242274774, + 21888242871839275222246405745257275088548364400416034343698203018807423006678, 583735542820940, - 3273958073180336, + 21888242871839275222246405745257275088548364400416034343698202956934253912240, 2113555615115779, 1446016879020520, 2075575686412193, 1443931399160077, - 3332593103165828, + 21888242871839275222246405745257275088548364400416034343698203015569283897732, 2152826265902617, - 3681448092740192, - 3693134554139982, + 21888242871839275222246405745257275088548364400416034343698203364424273472096, + 21888242871839275222246405745257275088548364400416034343698203376110734871886, 838354028170774, - 4130945871243540, - 3538090690583011, - 2876961079997140, - 3705092426997615, - 2413994163360968, - 4295182477722691, + 21888242871839275222246405745257275088548364400416034343698203813922051975444, + 21888242871839275222246405745257275088548364400416034343698203221066871314915, + 21888242871839275222246405745257275088548364400416034343698202559937260729044, + 21888242871839275222246405745257275088548364400416034343698203388068607729519, + 21888242871839275222246405745257275088548364400416034343698202096970344092872, + 21888242871839275222246405745257275088548364400416034343698203978158658454595, 1382253157349428, 1212187203814007, 300528300092512, - 3034131672355588, + 21888242871839275222246405745257275088548364400416034343698202717107853087492, 381476820700702, - 3929924298774491, - 2714904545827421, + 21888242871839275222246405745257275088548364400416034343698203612900479506395, + 21888242871839275222246405745257275088548364400416034343698202397880726559325, 1025252311571721, - 2698324328356136, + 21888242871839275222246405745257275088548364400416034343698202381300509088040, 347644572207110, 1834547739380849, - 3761733565715879, - 3068282655489301, + 21888242871839275222246405745257275088548364400416034343698203444709746447783, + 21888242871839275222246405745257275088548364400416034343698202751258836221205, 1148424352115727, - 3188221348462335, - 3953521928175525, - 4035506037966995, + 21888242871839275222246405745257275088548364400416034343698202871197529194239, + 21888242871839275222246405745257275088548364400416034343698203636498108907429, + 21888242871839275222246405745257275088548364400416034343698203718482218698899, 1702510812273636, - 4354234238687612, - 3370188725860141, - 2467929108897803, - 2741556896271390, + 21888242871839275222246405745257275088548364400416034343698204037210419419516, + 21888242871839275222246405745257275088548364400416034343698203053164906592045, + 21888242871839275222246405745257275088548364400416034343698202150905289629707, + 21888242871839275222246405745257275088548364400416034343698202424533077003294, 1245976538938459, - 2495157777610902, + 21888242871839275222246405745257275088548364400416034343698202178133958342806, 1655942943162998, 684094546021429, - 4080853102491307, - 3124513236157791, - 3530722881520097, - 2560421442161377, - 2886173711845907, - 4255578153215834, - 4232447360836196, - 2645189013075371, + 21888242871839275222246405745257275088548364400416034343698203763829283223211, + 21888242871839275222246405745257275088548364400416034343698202807489416889695, + 21888242871839275222246405745257275088548364400416034343698203213699062252001, + 21888242871839275222246405745257275088548364400416034343698202243397622893281, + 21888242871839275222246405745257275088548364400416034343698202569149892577811, + 21888242871839275222246405745257275088548364400416034343698203938554333947738, + 21888242871839275222246405745257275088548364400416034343698203915423541568100, + 21888242871839275222246405745257275088548364400416034343698202328165193807275, 409955780991267, - 2930829678630079, + 21888242871839275222246405745257275088548364400416034343698202613805859361983, 957017294839221, 1796244128412617, 670081229099349, - 2628552203998164, + 21888242871839275222246405745257275088548364400416034343698202311528384730068, 2017177163565593, - 2387491199598563, + 21888242871839275222246405745257275088548364400416034343698202070467380330467, 1490193899368974, - 4074131129315863, + 21888242871839275222246405745257275088548364400416034343698203757107310047767, 1611252533686240, - 3141824612021737, - 4476524363762062, + 21888242871839275222246405745257275088548364400416034343698202824800792753641, + 21888242871839275222246405745257275088548364400416034343698204159500544493966, 1199243831463945, - 4150823339616225, - 3278067513980067, - 4001336700742909, - 2533136246983417, + 21888242871839275222246405745257275088548364400416034343698203833799520348129, + 21888242871839275222246405745257275088548364400416034343698202961043694711971, + 21888242871839275222246405745257275088548364400416034343698203684312881474813, + 21888242871839275222246405745257275088548364400416034343698202216112427715321, 1936465251370301, - 4179795281681719, - 4265835392572938, + 21888242871839275222246405745257275088548364400416034343698203862771462413623, + 21888242871839275222246405745257275088548364400416034343698203948811573304842, 1536474819241650, 674305507608039, - 4134465653294695, + 21888242871839275222246405745257275088548364400416034343698203817441834026599, 868002076934081, 1296645833884661, 1171182131708764, - 2886948810709325, - 4434774086115169, - 3254935965128697, + 21888242871839275222246405745257275088548364400416034343698202569924991441229, + 21888242871839275222246405745257275088548364400416034343698204117750266847073, + 21888242871839275222246405745257275088548364400416034343698202937912145860601, 311544159826356, 1562490509805442, - 2397684910732688, - 4428313301122155, - 4030814925175754, + 21888242871839275222246405745257275088548364400416034343698202080661091464592, + 21888242871839275222246405745257275088548364400416034343698204111289481854059, + 21888242871839275222246405745257275088548364400416034343698203713791105907658, 984813469959904, - 3170707865465778, + 21888242871839275222246405745257275088548364400416034343698202853684046197682, 1507641402265756, 55663951317925, - 3430761155846526, - 3976738747305339, + 21888242871839275222246405745257275088548364400416034343698203113737336578430, + 21888242871839275222246405745257275088548364400416034343698203659714928037243, 1045239071677139, - 4465572938248819, - 3007776682119650, - 4478956560906786, - 4261924517573259, + 21888242871839275222246405745257275088548364400416034343698204148549118980723, + 21888242871839275222246405745257275088548364400416034343698202690752862851554, + 21888242871839275222246405745257275088548364400416034343698204161932741638690, + 21888242871839275222246405745257275088548364400416034343698203944900698305163, 859867338796115, 670679022873738, - 3042884038555184, + 21888242871839275222246405745257275088548364400416034343698202725860219287088, 924305604848510, 323185786781514, 322278530174622, 1126942657420558, 1377241539049430, - 3365311132048969, - 2479869020552703, - 2825372071654325, + 21888242871839275222246405745257275088548364400416034343698203048287312780873, + 21888242871839275222246405745257275088548364400416034343698202162845201284607, + 21888242871839275222246405745257275088548364400416034343698202508348252386229, 1993976443067312, 824217434037455, - 3948015767598019, - 3836872030057358, + 21888242871839275222246405745257275088548364400416034343698203630991948329923, + 21888242871839275222246405745257275088548364400416034343698203519848210789262, 856025204006829, 2073426022862164, - 3213454938805464, - 4299056503587060, - 2545665612090421, + 21888242871839275222246405745257275088548364400416034343698202896431119537368, + 21888242871839275222246405745257275088548364400416034343698203982032684318964, + 21888242871839275222246405745257275088548364400416034343698202228641792822325, 1747768740138714, - 2638787167840521, - 4460004477239904, + 21888242871839275222246405745257275088548364400416034343698202321763348572425, + 21888242871839275222246405745257275088548364400416034343698204142980657971808, 1443531557016247, - 3397864791052278, - 3498751205020157, + 21888242871839275222246405745257275088548364400416034343698203080840971784182, + 21888242871839275222246405745257275088548364400416034343698203181727385752061, 1069856324618929, - 3899260953703031, - 4318780127404846, - 2361136132881304, - 2583405474923256, - 4274881453587666, + 21888242871839275222246405745257275088548364400416034343698203582237134434935, + 21888242871839275222246405745257275088548364400416034343698204001756308136750, + 21888242871839275222246405745257275088548364400416034343698202044112313613208, + 21888242871839275222246405745257275088548364400416034343698202266381655655160, + 21888242871839275222246405745257275088548364400416034343698203957857634319570, 1676440767735612, 596948421493527, 882817927339947, 1300851782166448, - 3206854620297973, + 21888242871839275222246405745257275088548364400416034343698202889830801029877, 1072435558266108, - 4060715672101073, - 4487826599395626, - 4036180768904745, - 2317208555768231, - 2475919504290662, - 3109834211054814, + 21888242871839275222246405745257275088548364400416034343698203743691852832977, + 21888242871839275222246405745257275088548364400416034343698204170802780127530, + 21888242871839275222246405745257275088548364400416034343698203719156949636649, + 21888242871839275222246405745257275088548364400416034343698202000184736500135, + 21888242871839275222246405745257275088548364400416034343698202158895685022566, + 21888242871839275222246405745257275088548364400416034343698202792810391786718, 584777968455032, - 4389580826008099, + 21888242871839275222246405745257275088548364400416034343698204072557006740003, 1351282205668992, - 3249739602343857, - 4105278929190111, + 21888242871839275222246405745257275088548364400416034343698202932715783075761, + 21888242871839275222246405745257275088548364400416034343698203788255109922015, 729446273808969, - 3437242293842666, + 21888242871839275222246405745257275088548364400416034343698203120218474574570, 1898728898110308, - 3339862695227241, + 21888242871839275222246405745257275088548364400416034343698203022838875959145, 676279962352415, 1393079639368997, 123254283131299, @@ -15819,273 +15819,273 @@ pub global CRP: [Polynomial; L] = [ 253690931393084, 1002582327987702, 1308214309316902, - 3360892316061103, - 4493675075191469, - 2541093220160141, - 2949112559101640, - 3264997213356364, + 21888242871839275222246405745257275088548364400416034343698203043868496793007, + 21888242871839275222246405745257275088548364400416034343698204176651255923373, + 21888242871839275222246405745257275088548364400416034343698202224069400892045, + 21888242871839275222246405745257275088548364400416034343698202632088739833544, + 21888242871839275222246405745257275088548364400416034343698202947973394088268, 1137672460347755, - 2906949494658646, - 3493917801855693, + 21888242871839275222246405745257275088548364400416034343698202589925675390550, + 21888242871839275222246405745257275088548364400416034343698203176893982587597, 1339130620805911, - 3032218417158555, + 21888242871839275222246405745257275088548364400416034343698202715194597890459, 162916167378937, 763351596865213, 1710281765054958, - 3046127640201339, - 3220414874292510, - 2391803001162920, - 3990920774542579, + 21888242871839275222246405745257275088548364400416034343698202729103820933243, + 21888242871839275222246405745257275088548364400416034343698202903391055024414, + 21888242871839275222246405745257275088548364400416034343698202074779181894824, + 21888242871839275222246405745257275088548364400416034343698203673896955274483, 1386686905387443, - 4262290406434139, + 21888242871839275222246405745257275088548364400416034343698203945266587166043, 691756854553942, - 2829959145686599, - 3760285366672735, + 21888242871839275222246405745257275088548364400416034343698202512935326418503, + 21888242871839275222246405745257275088548364400416034343698203443261547404639, 630219482521224, 537087880065041, - 3368707187909904, + 21888242871839275222246405745257275088548364400416034343698203051683368641808, 1052480514211001, - 2761098451315559, - 2394873711889560, - 3891251486062859, + 21888242871839275222246405745257275088548364400416034343698202444074632047463, + 21888242871839275222246405745257275088548364400416034343698202077849892621464, + 21888242871839275222246405745257275088548364400416034343698203574227666794763, 439083449550594, 1216163689890155, - 4172308464323145, + 21888242871839275222246405745257275088548364400416034343698203855284645055049, 2087041298218413, 2118005214552111, 1602309128851193, - 3865749597812026, + 21888242871839275222246405745257275088548364400416034343698203548725778543930, 596457252361681, - 3400637492380122, + 21888242871839275222246405745257275088548364400416034343698203083613673112026, 1738915301337067, 2193047555137982, - 3015056723747977, + 21888242871839275222246405745257275088548364400416034343698202698032904479881, 1889455891216182, 684680873000669, - 4322337256357786, + 21888242871839275222246405745257275088548364400416034343698204005313437089690, 2134956542529590, 1473005130224610, - 3650133601529223, - 3532057884048102, + 21888242871839275222246405745257275088548364400416034343698203333109782261127, + 21888242871839275222246405745257275088548364400416034343698203215034064780006, 1376787781827106, - 3037180792722164, - 2660024971497090, - 2514414296439129, + 21888242871839275222246405745257275088548364400416034343698202720156973454068, + 21888242871839275222246405745257275088548364400416034343698202343001152228994, + 21888242871839275222246405745257275088548364400416034343698202197390477171033, 2118651098175163, - 3153971577039024, + 21888242871839275222246405745257275088548364400416034343698202836947757770928, 729397483551679, - 4407305162607218, + 21888242871839275222246405745257275088548364400416034343698204090281343339122, 1578898729356118, - 3042703111910750, + 21888242871839275222246405745257275088548364400416034343698202725679292642654, 1761285531794673, - 3907252466726686, + 21888242871839275222246405745257275088548364400416034343698203590228647458590, 2087856849773827, 1554141561349372, 406309737346204, 212250058300273, 500215586536497, 2043761689356224, - 3579760016238111, - 2833203722092758, - 4213790590500449, - 2872190889017190, - 2760006259365979, + 21888242871839275222246405745257275088548364400416034343698203262736196970015, + 21888242871839275222246405745257275088548364400416034343698202516179902824662, + 21888242871839275222246405745257275088548364400416034343698203896766771232353, + 21888242871839275222246405745257275088548364400416034343698202555167069749094, + 21888242871839275222246405745257275088548364400416034343698202442982440097883, 1340257542230820, - 4043153070613219, + 21888242871839275222246405745257275088548364400416034343698203726129251345123, 1129055868016150, 913150658744560, - 2364334742440781, + 21888242871839275222246405745257275088548364400416034343698202047310923172685, 464621420689047, 2119916808490532, 2043821903029159, - 3578889446555246, + 21888242871839275222246405745257275088548364400416034343698203261865627287150, 1042875854391596, - 4319381204449254, + 21888242871839275222246405745257275088548364400416034343698204002357385181158, 61610369517555, - 2825199595086566, + 21888242871839275222246405745257275088548364400416034343698202508175775818470, 2249644003358471, - 4174344245203655, + 21888242871839275222246405745257275088548364400416034343698203857320425935559, 1109134949054860, - 2572834219539408, + 21888242871839275222246405745257275088548364400416034343698202255810400271312, 763974803172582, 1471768510318353, - 4458996828289545, + 21888242871839275222246405745257275088548364400416034343698204141973009021449, 617270138029619, - 3783201743326923, + 21888242871839275222246405745257275088548364400416034343698203466177924058827, 764143034130201, 1850019437602589, - 2899721364472915, - 3291161783660326, - 2737925323385947, - 4374929142087267, - 4067629234721144, - 3830541365899030, + 21888242871839275222246405745257275088548364400416034343698202582697545204819, + 21888242871839275222246405745257275088548364400416034343698202974137964392230, + 21888242871839275222246405745257275088548364400416034343698202420901504117851, + 21888242871839275222246405745257275088548364400416034343698204057905322819171, + 21888242871839275222246405745257275088548364400416034343698203750605415453048, + 21888242871839275222246405745257275088548364400416034343698203513517546630934, 1267533411150094, - 2300768152531221, - 4414888592322758, + 21888242871839275222246405745257275088548364400416034343698201983744333263125, + 21888242871839275222246405745257275088548364400416034343698204097864773054662, 363945380214940, 994532262297693, 1504807080065245, 867811620403859, 206091576244494, - 2659961591516266, - 2746415609247111, + 21888242871839275222246405745257275088548364400416034343698202342937772248170, + 21888242871839275222246405745257275088548364400416034343698202429391789979015, 1549401393758282, - 3848013150882140, + 21888242871839275222246405745257275088548364400416034343698203530989331614044, 1341567059687698, - 2680726783389806, - 2319854135639633, - 3854279324028646, - 3349013182214049, + 21888242871839275222246405745257275088548364400416034343698202363702964121710, + 21888242871839275222246405745257275088548364400416034343698202002830316371537, + 21888242871839275222246405745257275088548364400416034343698203537255504760550, + 21888242871839275222246405745257275088548364400416034343698203031989362945953, 1250132435072815, - 2720361653784679, - 2275247812519497, - 4316492476782730, - 3213476096576846, - 2808206627604173, + 21888242871839275222246405745257275088548364400416034343698202403337834516583, + 21888242871839275222246405745257275088548364400416034343698201958223993251401, + 21888242871839275222246405745257275088548364400416034343698203999468657514634, + 21888242871839275222246405745257275088548364400416034343698202896452277308750, + 21888242871839275222246405745257275088548364400416034343698202491182808336077, 2013103870854525, 484628955400208, 1922370976918800, - 2750875930496118, - 2491667013289955, + 21888242871839275222246405745257275088548364400416034343698202433852111228022, + 21888242871839275222246405745257275088548364400416034343698202174643194021859, 1821995078565837, - 4433738248930300, + 21888242871839275222246405745257275088548364400416034343698204116714429662204, 1854774109016279, 949609508296805, - 4381180024145071, + 21888242871839275222246405745257275088548364400416034343698204064156204876975, 553291851150072, 2105722433964949, - 2466888305135702, - 3228711504404936, - 3960507456034099, + 21888242871839275222246405745257275088548364400416034343698202149864485867606, + 21888242871839275222246405745257275088548364400416034343698202911687685136840, + 21888242871839275222246405745257275088548364400416034343698203643483636766003, 1385522176865607, 1593698254790024, 2003206434739031, 165528600913501, 1898436138013923, - 3766510472463288, + 21888242871839275222246405745257275088548364400416034343698203449486653195192, 1131006207303107, 1439452249620820, - 3491721487450307, + 21888242871839275222246405745257275088548364400416034343698203174697668182211, 1730542496904976, 591569837065686, 1586801940023153, 1523812175504643, 913518050066933, - 2530804706523305, + 21888242871839275222246405745257275088548364400416034343698202213780887255209, 1100336760048545, 1040090074009198, - 4327578363214174, - 2389143941634166, - 2270792115473138, - 3426050828623737, + 21888242871839275222246405745257275088548364400416034343698204010554543946078, + 21888242871839275222246405745257275088548364400416034343698202072120122366070, + 21888242871839275222246405745257275088548364400416034343698201953768296205042, + 21888242871839275222246405745257275088548364400416034343698203109027009355641, 1725339336797507, - 3930007621365489, + 21888242871839275222246405745257275088548364400416034343698203612983802097393, 2041575820047967, 2084120964728814, - 3742589714621013, - 4419143678203886, + 21888242871839275222246405745257275088548364400416034343698203425565895352917, + 21888242871839275222246405745257275088548364400416034343698204102119858935790, 1075226021716659, - 2584864854316869, - 2831866998450357, + 21888242871839275222246405745257275088548364400416034343698202267841035048773, + 21888242871839275222246405745257275088548364400416034343698202514843179182261, 1417919791822280, - 3714928786221736, - 4280804870697039, - 3437866986991201, - 3631313337690461, + 21888242871839275222246405745257275088548364400416034343698203397904966953640, + 21888242871839275222246405745257275088548364400416034343698203963781051428943, + 21888242871839275222246405745257275088548364400416034343698203120843167723105, + 21888242871839275222246405745257275088548364400416034343698203314289518422365, 1768815151879864, 1507796290167631, - 2675103133697716, - 4323298210895953, - 2268490234745230, - 3273386876985457, - 2698414627792310, - 3779097437911650, + 21888242871839275222246405745257275088548364400416034343698202358079314429620, + 21888242871839275222246405745257275088548364400416034343698204006274391627857, + 21888242871839275222246405745257275088548364400416034343698201951466415477134, + 21888242871839275222246405745257275088548364400416034343698202956363057717361, + 21888242871839275222246405745257275088548364400416034343698202381390808524214, + 21888242871839275222246405745257275088548364400416034343698203462073618643554, 2182361158187266, - 2362633363942175, + 21888242871839275222246405745257275088548364400416034343698202045609544674079, 447908389153007, - 4018280184288556, - 3517396070001465, + 21888242871839275222246405745257275088548364400416034343698203701256365020460, + 21888242871839275222246405745257275088548364400416034343698203200372250733369, 648161338194166, - 2702670335008804, + 21888242871839275222246405745257275088548364400416034343698202385646515740708, 88162942135832, 837442235297711, 2235305005422935, - 3469126033174329, - 2299859770175856, - 3519513019402725, + 21888242871839275222246405745257275088548364400416034343698203152102213906233, + 21888242871839275222246405745257275088548364400416034343698201982835950907760, + 21888242871839275222246405745257275088548364400416034343698203202489200134629, 2040344150559960, - 4018121616833744, - 2940301399249375, - 2922979631758086, - 2930572264942200, - 4172789608415454, - 2411756257098744, + 21888242871839275222246405745257275088548364400416034343698203701097797565648, + 21888242871839275222246405745257275088548364400416034343698202623277579981279, + 21888242871839275222246405745257275088548364400416034343698202605955812489990, + 21888242871839275222246405745257275088548364400416034343698202613548445674104, + 21888242871839275222246405745257275088548364400416034343698203855765789147358, + 21888242871839275222246405745257275088548364400416034343698202094732437830648, 2209756797602737, - 3611266665572837, + 21888242871839275222246405745257275088548364400416034343698203294242846304741, 2112764933241716, - 3794525473406217, + 21888242871839275222246405745257275088548364400416034343698203477501654138121, 1417172383084690, 949447002806413, - 3659503773505204, - 3934525620898080, - 2818898118345176, + 21888242871839275222246405745257275088548364400416034343698203342479954237108, + 21888242871839275222246405745257275088548364400416034343698203617501801629984, + 21888242871839275222246405745257275088548364400416034343698202501874299077080, 1444929896869876, - 4279308005183820, - 4405326190802299, + 21888242871839275222246405745257275088548364400416034343698203962284185915724, + 21888242871839275222246405745257275088548364400416034343698204088302371534203, 1677707431178072, - 3377692230908383, + 21888242871839275222246405745257275088548364400416034343698203060668411640287, 1345007587565676, - 3185524231287785, - 2418469827513783, - 3501038535396494, - 3173493194925736, + 21888242871839275222246405745257275088548364400416034343698202868500412019689, + 21888242871839275222246405745257275088548364400416034343698202101446008245687, + 21888242871839275222246405745257275088548364400416034343698203184014716128398, + 21888242871839275222246405745257275088548364400416034343698202856469375657640, 2166578817911295, - 2780754263745628, - 4273814301582785, - 3711967192020334, - 3179651040998205, + 21888242871839275222246405745257275088548364400416034343698202463730444477532, + 21888242871839275222246405745257275088548364400416034343698203956790482314689, + 21888242871839275222246405745257275088548364400416034343698203394943372752238, + 21888242871839275222246405745257275088548364400416034343698202862627221730109, 885292222224923, - 3796847483176453, + 21888242871839275222246405745257275088548364400416034343698203479823663908357, 778168624592038, - 2264462241057373, - 3543503425575930, - 3007957907212139, + 21888242871839275222246405745257275088548364400416034343698201947438421789277, + 21888242871839275222246405745257275088548364400416034343698203226479606307834, + 21888242871839275222246405745257275088548364400416034343698202690934087944043, 872004867524602, 936581135048499, 1329985788380272, 1549833225553365, - 4016474643301876, - 2755246478342067, - 3722483678438061, + 21888242871839275222246405745257275088548364400416034343698203699450824033780, + 21888242871839275222246405745257275088548364400416034343698202438222659073971, + 21888242871839275222246405745257275088548364400416034343698203405459859169965, 1515554269294107, 547025559920392, - 4443392701890829, + 21888242871839275222246405745257275088548364400416034343698204126368882622733, 976653510601972, 1285281539564881, - 2664103042122734, - 4020822390176346, - 3693908857265155, + 21888242871839275222246405745257275088548364400416034343698202347079222854638, + 21888242871839275222246405745257275088548364400416034343698203703798570908250, + 21888242871839275222246405745257275088548364400416034343698203376885037997059, 235914818535358, - 3830097262416032, - 2434928882588511, - 3777905553807258, + 21888242871839275222246405745257275088548364400416034343698203513073443147936, + 21888242871839275222246405745257275088548364400416034343698202117905063320415, + 21888242871839275222246405745257275088548364400416034343698203460881734539162, 1623606454891749, 877271794760503, 518705352003144, 998427534068523, - 2287793454997066, - 3658034809569992, - 3468959563537369, - 3141380136415566, + 21888242871839275222246405745257275088548364400416034343698201970769635728970, + 21888242871839275222246405745257275088548364400416034343698203341010990301896, + 21888242871839275222246405745257275088548364400416034343698203151935744269273, + 21888242871839275222246405745257275088548364400416034343698202824356317147470, 1394305009679886, - 3890788932381657, - 4275719310381585, - 3485712984916778, - 2527402683314180, + 21888242871839275222246405745257275088548364400416034343698203573765113113561, + 21888242871839275222246405745257275088548364400416034343698203958695491113489, + 21888242871839275222246405745257275088548364400416034343698203168689165648682, + 21888242871839275222246405745257275088548364400416034343698202210378864046084, 1522369864523353, 197147666504782, - 2970062936145404, + 21888242871839275222246405745257275088548364400416034343698202653039116877308, 2234599801127822, 763459034625352, 2159384044664255, @@ -16098,933 +16098,933 @@ pub global CRP: [Polynomial; L] = [ 2104145797631103, 119754437456205, 54782116692886, - 2498413666094100, - 2426504063292956, - 3382068674563789, - 3139217452795611, - 3128854221335829, - 3395052306710271, - 3867564606050357, - 3543153833134541, - 4012044087041150, - 4350070501302670, - 3922246073743828, - 3853071514727928, - 4292467563990792, - 4463797647721138, + 21888242871839275222246405745257275088548364400416034343698202181389846826004, + 21888242871839275222246405745257275088548364400416034343698202109480244024860, + 21888242871839275222246405745257275088548364400416034343698203065044855295693, + 21888242871839275222246405745257275088548364400416034343698202822193633527515, + 21888242871839275222246405745257275088548364400416034343698202811830402067733, + 21888242871839275222246405745257275088548364400416034343698203078028487442175, + 21888242871839275222246405745257275088548364400416034343698203550540786782261, + 21888242871839275222246405745257275088548364400416034343698203226130013866445, + 21888242871839275222246405745257275088548364400416034343698203695020267773054, + 21888242871839275222246405745257275088548364400416034343698204033046682034574, + 21888242871839275222246405745257275088548364400416034343698203605222254475732, + 21888242871839275222246405745257275088548364400416034343698203536047695459832, + 21888242871839275222246405745257275088548364400416034343698203975443744722696, + 21888242871839275222246405745257275088548364400416034343698204146773828453042, 1387670453951947, 689427364491177, 318432519123726, - 2259691180411399, + 21888242871839275222246405745257275088548364400416034343698201942667361143303, 2182039232552838, 928014786687669, 625672531199196, - 4415373670814149, - 2281260092547057, - 3778870793719616, + 21888242871839275222246405745257275088548364400416034343698204098349851546053, + 21888242871839275222246405745257275088548364400416034343698201964236273278961, + 21888242871839275222246405745257275088548364400416034343698203461846974451520, 795016407973680, 1416834789508946, - 2496677444965403, + 21888242871839275222246405745257275088548364400416034343698202179653625697307, 541091532725526, 1086242671070185, 1842406833346882, - 2848772693650743, + 21888242871839275222246405745257275088548364400416034343698202531748874382647, 778003620129462, 1136698541681455, - 4098583952902754, + 21888242871839275222246405745257275088548364400416034343698203781560133634658, 570459117982311, 1995809066297387, 676163665426679, 1351028215755113, - 2443010987907659, - 4082310761765415, - 4072982327811707, + 21888242871839275222246405745257275088548364400416034343698202125987168639563, + 21888242871839275222246405745257275088548364400416034343698203765286942497319, + 21888242871839275222246405745257275088548364400416034343698203755958508543611, 774538128265435, 1990257065271535, 1197010989491496, - 3891003926297777, - 3914106374267409, - 2891990503509567, + 21888242871839275222246405745257275088548364400416034343698203573980107029681, + 21888242871839275222246405745257275088548364400416034343698203597082554999313, + 21888242871839275222246405745257275088548364400416034343698202574966684241471, 1939458035373283, - 4050047811353670, - 4485923078988913, - 4280957681079105, + 21888242871839275222246405745257275088548364400416034343698203733023992085574, + 21888242871839275222246405745257275088548364400416034343698204168899259720817, + 21888242871839275222246405745257275088548364400416034343698203963933861811009, 895731100402916, 1740901898059270, - 3892752998116483, - 3132511790154272, + 21888242871839275222246405745257275088548364400416034343698203575729178848387, + 21888242871839275222246405745257275088548364400416034343698202815487970886176, 454153531222506, - 4372233453521544, - 2448911744168453, + 21888242871839275222246405745257275088548364400416034343698204055209634253448, + 21888242871839275222246405745257275088548364400416034343698202131887924900357, 377393812711127, 1928288635877758, 1802880960023459, 321261095173476, 531795974850334, - 3568170713223988, - 4225259778269865, - 2947067256828885, + 21888242871839275222246405745257275088548364400416034343698203251146893955892, + 21888242871839275222246405745257275088548364400416034343698203908235959001769, + 21888242871839275222246405745257275088548364400416034343698202630043437560789, 1722993664648077, 1206736585595587, 137971590488413, 698687583257530, - 3358197332313258, - 3395540731439290, - 3007355331311536, - 2460105124121084, - 2352421872470358, - 2663754791183798, + 21888242871839275222246405745257275088548364400416034343698203041173513045162, + 21888242871839275222246405745257275088548364400416034343698203078516912171194, + 21888242871839275222246405745257275088548364400416034343698202690331512043440, + 21888242871839275222246405745257275088548364400416034343698202143081304852988, + 21888242871839275222246405745257275088548364400416034343698202035398053202262, + 21888242871839275222246405745257275088548364400416034343698202346730971915702, 263389082490530, - 2804272658274337, - 2884311245089655, - 2866004677553611, - 3962303895293387, + 21888242871839275222246405745257275088548364400416034343698202487248839006241, + 21888242871839275222246405745257275088548364400416034343698202567287425821559, + 21888242871839275222246405745257275088548364400416034343698202548980858285515, + 21888242871839275222246405745257275088548364400416034343698203645280076025291, 380153768870655, - 2946629576512599, + 21888242871839275222246405745257275088548364400416034343698202629605757244503, 1498943138586665, 1734977078445725, 1666319977692954, 2118173400507817, 1824193067238471, - 2397606647675549, + 21888242871839275222246405745257275088548364400416034343698202080582828407453, 1742523714611004, 2211635590548241, 675064007128768, - 2630820559015814, - 3764591414223064, - 3836828768914544, + 21888242871839275222246405745257275088548364400416034343698202313796739747718, + 21888242871839275222246405745257275088548364400416034343698203447567594954968, + 21888242871839275222246405745257275088548364400416034343698203519804949646448, 819758970201223, - 4078042493528965, - 3771565006627118, - 4070879469011263, + 21888242871839275222246405745257275088548364400416034343698203761018674260869, + 21888242871839275222246405745257275088548364400416034343698203454541187359022, + 21888242871839275222246405745257275088548364400416034343698203753855649743167, 1342643700040538, 2044728779973118, - 3397128767866647, + 21888242871839275222246405745257275088548364400416034343698203080104948598551, 1682306087996929, - 4144850346960312, + 21888242871839275222246405745257275088548364400416034343698203827826527692216, 1033164386604681, - 4495419166267180, + 21888242871839275222246405745257275088548364400416034343698204178395346999084, 1521713491641388, - 3565971939452859, + 21888242871839275222246405745257275088548364400416034343698203248948120184763, 580697601136417, 301029865443382, - 3700918750557898, + 21888242871839275222246405745257275088548364400416034343698203383894931289802, 1436155166395599, - 2973966751568151, + 21888242871839275222246405745257275088548364400416034343698202656942932300055, 1928375750048601, 729648318611964, - 3068043573848142, + 21888242871839275222246405745257275088548364400416034343698202751019754580046, 2144380258279091, - 2621977103351568, - 3817051340688777, - 4034230326643618, - 4427873318144892, - 3137565832259778, + 21888242871839275222246405745257275088548364400416034343698202304953284083472, + 21888242871839275222246405745257275088548364400416034343698203500027521420681, + 21888242871839275222246405745257275088548364400416034343698203717206507375522, + 21888242871839275222246405745257275088548364400416034343698204110849498876796, + 21888242871839275222246405745257275088548364400416034343698202820542012991682, 962767898349930, - 3122560156555788, + 21888242871839275222246405745257275088548364400416034343698202805536337287692, 116586242556821, - 2785465443808860, + 21888242871839275222246405745257275088548364400416034343698202468441624540764, 21951452041128, - 2940359096830360, - 4239698425377039, + 21888242871839275222246405745257275088548364400416034343698202623335277562264, + 21888242871839275222246405745257275088548364400416034343698203922674606108943, 17541984883487, 1894868449997419, 993680329037137, - 4238031203765494, - 3887041229594447, - 2790297439284018, + 21888242871839275222246405745257275088548364400416034343698203921007384497398, + 21888242871839275222246405745257275088548364400416034343698203570017410326351, + 21888242871839275222246405745257275088548364400416034343698202473273620015922, 1975213983843777, 293605672330962, 1056925107366309, 2238804549934606, 1296218990710482, - 3992778000231203, + 21888242871839275222246405745257275088548364400416034343698203675754180963107, 823165501632341, 1672716157096306, 428166288387888, 1556652076803083, 1854970775898061, 538650736265928, - 4480420157467737, + 21888242871839275222246405745257275088548364400416034343698204163396338199641, 2240968333099798, 1907214063860531, 1565149723077556, - 3721805980745389, + 21888242871839275222246405745257275088548364400416034343698203404782161477293, 640972027649771, 1642952589355268, - 3074254156187149, + 21888242871839275222246405745257275088548364400416034343698202757230336919053, 1660047880264372, 1542775558764535, - 4477810599763580, + 21888242871839275222246405745257275088548364400416034343698204160786780495484, 177400934361626, 1744972106775990, - 3116937446620727, - 3394764595669503, - 3684518571644612, - 2797570578328461, + 21888242871839275222246405745257275088548364400416034343698202799913627352631, + 21888242871839275222246405745257275088548364400416034343698203077740776401407, + 21888242871839275222246405745257275088548364400416034343698203367494752376516, + 21888242871839275222246405745257275088548364400416034343698202480546759060365, 781379074893530, - 4383176388176571, - 3693383775415851, - 3969086302191415, + 21888242871839275222246405745257275088548364400416034343698204066152568908475, + 21888242871839275222246405745257275088548364400416034343698203376359956147755, + 21888242871839275222246405745257275088548364400416034343698203652062482923319, 1474594746125395, 461876659294935, 767117398713313, - 3659156108515579, - 3057486897065481, + 21888242871839275222246405745257275088548364400416034343698203342132289247483, + 21888242871839275222246405745257275088548364400416034343698202740463077797385, 1484830463377610, 843668869224353, 2025479651552983, 1025470945222134, 1081829234137310, - 3705083172714027, + 21888242871839275222246405745257275088548364400416034343698203388059353445931, 216841112869655, - 4201446063571146, + 21888242871839275222246405745257275088548364400416034343698203884422244303050, 1599782078617371, - 2536882925474425, + 21888242871839275222246405745257275088548364400416034343698202219859106206329, 1610487900064434, 409127196317433, - 3836641139628750, + 21888242871839275222246405745257275088548364400416034343698203519617320360654, 878942811201488, - 3803097227688552, - 3764220112771286, - 2730584048333869, - 4004640487823625, + 21888242871839275222246405745257275088548364400416034343698203486073408420456, + 21888242871839275222246405745257275088548364400416034343698203447196293503190, + 21888242871839275222246405745257275088548364400416034343698202413560229065773, + 21888242871839275222246405745257275088548364400416034343698203687616668555529, 1425282293830559, 1072378561413482, 939907075987381, 1313828007253519, - 2665291642174127, + 21888242871839275222246405745257275088548364400416034343698202348267822906031, 46227740666386, - 3765395870854685, + 21888242871839275222246405745257275088548364400416034343698203448372051586589, 473575980351206, 1326923816703473, 2015400770254799, 1536246408395848, 2009001445919635, 53789267588499, - 4340838296726466, - 3604804931961288, - 2487101103086496, + 21888242871839275222246405745257275088548364400416034343698204023814477458370, + 21888242871839275222246405745257275088548364400416034343698203287781112693192, + 21888242871839275222246405745257275088548364400416034343698202170077283818400, 1887046003795926, - 3269783803196273, - 3248353336910036, + 21888242871839275222246405745257275088548364400416034343698202952759983928177, + 21888242871839275222246405745257275088548364400416034343698202931329517641940, 1152447061496633, - 4373280744414120, - 2341056489452201, + 21888242871839275222246405745257275088548364400416034343698204056256925146024, + 21888242871839275222246405745257275088548364400416034343698202024032670184105, 1265543558499052, 1838130303231695, 2198225722013235, 471268171871484, 1212796152646187, - 3570608454027821, - 2410188767134053, + 21888242871839275222246405745257275088548364400416034343698203253584634759725, + 21888242871839275222246405745257275088548364400416034343698202093164947865957, 1777166659146334, - 4331064999246205, + 21888242871839275222246405745257275088548364400416034343698204014041179978109, 233539360567079, 1915737459731442, 725748054989896, - 2445216576096089, + 21888242871839275222246405745257275088548364400416034343698202128192756827993, 2152501234434688, - 2540833218119458, - 4043795427182461, + 21888242871839275222246405745257275088548364400416034343698202223809398851362, + 21888242871839275222246405745257275088548364400416034343698203726771607914365, 1241633518952291, - 3593122289536488, + 21888242871839275222246405745257275088548364400416034343698203276098470268392, 1668277095368719, 562829602923455, 1490254414112663, - 4437123904961257, - 2887046852025356, + 21888242871839275222246405745257275088548364400416034343698204120100085693161, + 21888242871839275222246405745257275088548364400416034343698202570023032757260, 2047323324763295, 807458223865080, 1181826654099367, 1099681881510460, 669499693280796, 390110212835302, - 4145032485472987, - 2675711121787519, - 3757618119618130, - 2364672147853384, - 2952680182678574, + 21888242871839275222246405745257275088548364400416034343698203828008666204891, + 21888242871839275222246405745257275088548364400416034343698202358687302519423, + 21888242871839275222246405745257275088548364400416034343698203440594300350034, + 21888242871839275222246405745257275088548364400416034343698202047648328585288, + 21888242871839275222246405745257275088548364400416034343698202635656363410478, 1508297145484197, - 3807181767148232, - 2939533361155727, + 21888242871839275222246405745257275088548364400416034343698203490157947880136, + 21888242871839275222246405745257275088548364400416034343698202622509541887631, 1904933340499296, 1612602547703019, - 3326490913718076, - 2701346397234521, + 21888242871839275222246405745257275088548364400416034343698203009467094449980, + 21888242871839275222246405745257275088548364400416034343698202384322577966425, 214429189313522, 1621997873544274, 245811762689050, - 4124384128940849, - 3877927979263194, + 21888242871839275222246405745257275088548364400416034343698203807360309672753, + 21888242871839275222246405745257275088548364400416034343698203560904159995098, 873837483899332, - 3113293299814666, + 21888242871839275222246405745257275088548364400416034343698202796269480546570, 1624380544902867, 41626311311780, 1328739338066508, 1531562685146871, 1938062018228367, 1006308082549084, - 4132354270953544, + 21888242871839275222246405745257275088548364400416034343698203815330451685448, 2024678220512818, 237533820829029, 1204142882709534, - 4001034984879569, + 21888242871839275222246405745257275088548364400416034343698203684011165611473, 2029378143550141, - 4412960236350938, - 3939845385050724, + 21888242871839275222246405745257275088548364400416034343698204095936417082842, + 21888242871839275222246405745257275088548364400416034343698203622821565782628, 1121590877284224, 2163019973650831, - 3100445343161219, - 3885053823129212, + 21888242871839275222246405745257275088548364400416034343698202783421523893123, + 21888242871839275222246405745257275088548364400416034343698203568030003861116, 1326892665672926, 2088088907420038, 2009819603172208, - 3842329350784193, + 21888242871839275222246405745257275088548364400416034343698203525305531516097, 1557244305820007, - 3877241002923093, - 2718865364887805, - 4223753311632471, - 4486554668562289, - 3700251280471252, + 21888242871839275222246405745257275088548364400416034343698203560217183654997, + 21888242871839275222246405745257275088548364400416034343698202401841545619709, + 21888242871839275222246405745257275088548364400416034343698203906729492364375, + 21888242871839275222246405745257275088548364400416034343698204169530849294193, + 21888242871839275222246405745257275088548364400416034343698203383227461203156, 2167611611564897, - 3602218124905327, + 21888242871839275222246405745257275088548364400416034343698203285194305637231, 869547957587095, 1187658195246423, 1203786232218947, - 2891546301467607, + 21888242871839275222246405745257275088548364400416034343698202574522482199511, 223542288376004, 1500235398724424, 278573580699639, 890584305855488, - 2455942222601915, + 21888242871839275222246405745257275088548364400416034343698202138918403333819, 400579691626577, - 3933924109187825, - 4067378865660998, - 3281762820144259, + 21888242871839275222246405745257275088548364400416034343698203616900289919729, + 21888242871839275222246405745257275088548364400416034343698203750355046392902, + 21888242871839275222246405745257275088548364400416034343698202964739000876163, 1117936133988704, 814495194156046, - 2317406943954553, - 4298390310625680, + 21888242871839275222246405745257275088548364400416034343698202000383124686457, + 21888242871839275222246405745257275088548364400416034343698203981366491357584, 195993524243895, - 2828871994276082, - 3117419515788214, + 21888242871839275222246405745257275088548364400416034343698202511848175007986, + 21888242871839275222246405745257275088548364400416034343698202800395696520118, 1736111207373665, 1187426472899238, - 2414327098093060, + 21888242871839275222246405745257275088548364400416034343698202097303278824964, 1820161334258200, - 2610775380742311, + 21888242871839275222246405745257275088548364400416034343698202293751561474215, 1997994596049766, - 3819495568263413, + 21888242871839275222246405745257275088548364400416034343698203502471748995317, ]), Polynomial::new([ - 2523532797293602, - 3646945143831649, + 21888242871839275222246405745257275088548364400416034343698202206508974355490, + 21888242871839275222246405745257275088548364400416034343698203329921320893537, 890596174384871, 1187287329669738, - 3649217327503021, - 4245538150704817, - 3432214562471488, + 21888242871839275222246405745257275088548364400416034343698203332193504564909, + 21888242871839275222246405745257275088548364400416034343698203928514327766705, + 21888242871839275222246405745257275088548364400416034343698203115190739533376, 340921876237033, 1048600799401796, - 2785424400395531, - 4449279032556367, - 3757880420885124, + 21888242871839275222246405745257275088548364400416034343698202468400577457419, + 21888242871839275222246405745257275088548364400416034343698204132255209618255, + 21888242871839275222246405745257275088548364400416034343698203440856597947012, 2033945546343964, 204428792621013, 1156765953441225, - 2364650957555774, - 4013032206299260, + 21888242871839275222246405745257275088548364400416034343698202047627134617662, + 21888242871839275222246405745257275088548364400416034343698203696008383361148, 1866093064776557, - 2944569304539391, - 2355437203861407, - 2286434232728693, - 2963448452173731, - 2595514561407289, - 2765987675452774, - 2616704193031261, - 2565381808822139, - 2358746916371989, - 4261233965742220, + 21888242871839275222246405745257275088548364400416034343698202627545481601279, + 21888242871839275222246405745257275088548364400416034343698202038413380923295, + 21888242871839275222246405745257275088548364400416034343698201969410409790581, + 21888242871839275222246405745257275088548364400416034343698202646424629235619, + 21888242871839275222246405745257275088548364400416034343698202278490738469177, + 21888242871839275222246405745257275088548364400416034343698202448963852514662, + 21888242871839275222246405745257275088548364400416034343698202299680370093149, + 21888242871839275222246405745257275088548364400416034343698202248357985884027, + 21888242871839275222246405745257275088548364400416034343698202041723093433877, + 21888242871839275222246405745257275088548364400416034343698203944210142804108, 1444050339710520, - 2785294309332355, - 4259062186296978, - 2310039455900656, + 21888242871839275222246405745257275088548364400416034343698202468270486394243, + 21888242871839275222246405745257275088548364400416034343698203942038363358866, + 21888242871839275222246405745257275088548364400416034343698201993015632962544, 796935499273047, 683211015170084, - 3636096541532121, + 21888242871839275222246405745257275088548364400416034343698203319072718594009, 946158737374237, 1194617763486003, - 3120669736298727, + 21888242871839275222246405745257275088548364400416034343698202803645913360615, 85700600657083, 477266469757474, 538691790037719, 1779917073110769, - 3307754290658387, + 21888242871839275222246405745257275088548364400416034343698202990730467720275, 1393956153493758, - 4200896259173507, - 4239521688906564, + 21888242871839275222246405745257275088548364400416034343698203883872436235395, + 21888242871839275222246405745257275088548364400416034343698203922497865968452, 689102142246048, - 3674389746088530, - 3938089901195008, + 21888242871839275222246405745257275088548364400416034343698203357365923150418, + 21888242871839275222246405745257275088548364400416034343698203621066078256896, 847367456657782, 933536722306719, - 2629221372659659, - 4175295655269119, + 21888242871839275222246405745257275088548364400416034343698202312197549721547, + 21888242871839275222246405745257275088548364400416034343698203858271832331007, 2058399509324314, - 3396479976062478, - 3842252813666144, + 21888242871839275222246405745257275088548364400416034343698203079456153124366, + 21888242871839275222246405745257275088548364400416034343698203525228990728032, 1103588132866801, 1865270480216412, 1482710198573308, 1769820311730475, - 2541093958161171, - 3970586814117529, + 21888242871839275222246405745257275088548364400416034343698202224070135223059, + 21888242871839275222246405745257275088548364400416034343698203653562991179417, 1485025655639140, 54676517886661, 1175323007930412, - 2254430156944456, - 2563323549901579, + 21888242871839275222246405745257275088548364400416034343698201937406334006344, + 21888242871839275222246405745257275088548364400416034343698202246299726963467, 1715592369111633, 769638416718515, - 3062161040122535, - 3312440513667538, + 21888242871839275222246405745257275088548364400416034343698202745137217184423, + 21888242871839275222246405745257275088548364400416034343698202995416690729426, 1463887269736322, 1288315463664414, - 3477437304307785, + 21888242871839275222246405745257275088548364400416034343698203160413481369673, 1135595637990170, - 3452772113512664, - 2333545663884358, - 4408957615285188, + 21888242871839275222246405745257275088548364400416034343698203135748290574552, + 21888242871839275222246405745257275088548364400416034343698202016521840946246, + 21888242871839275222246405745257275088548364400416034343698204091933792347076, 1879826156345356, 190806939083266, - 3144760118302271, - 3567649239534832, + 21888242871839275222246405745257275088548364400416034343698202827736295364159, + 21888242871839275222246405745257275088548364400416034343698203250625416596720, 1707439291250892, - 3194070599968397, + 21888242871839275222246405745257275088548364400416034343698202877046777030285, 1855494970370303, - 3843641013563977, + 21888242871839275222246405745257275088548364400416034343698203526617190625865, 2141806218768204, - 4103205184254310, - 3587254941176030, + 21888242871839275222246405745257275088548364400416034343698203786181361316198, + 21888242871839275222246405745257275088548364400416034343698203270231118237918, 858395068636200, - 3587762532486087, + 21888242871839275222246405745257275088548364400416034343698203270738709547975, 1630176293566888, 844064278661590, - 3929331655989006, - 2569718718134980, + 21888242871839275222246405745257275088548364400416034343698203612307833050894, + 21888242871839275222246405745257275088548364400416034343698202252694895196868, 713846279520155, - 2749695560098685, - 2607955317484019, + 21888242871839275222246405745257275088548364400416034343698202432671737160573, + 21888242871839275222246405745257275088548364400416034343698202290931494545907, 1680470985165588, 1830040986450880, - 3607966907983978, - 2599608317524848, + 21888242871839275222246405745257275088548364400416034343698203290943085045866, + 21888242871839275222246405745257275088548364400416034343698202282584494586736, 728483011643691, 1669039363647977, - 3667021280662239, + 21888242871839275222246405745257275088548364400416034343698203349997457724127, 1328771154363094, - 3670801112519897, - 2436637921540531, + 21888242871839275222246405745257275088548364400416034343698203353777289581785, + 21888242871839275222246405745257275088548364400416034343698202119614098602419, 688532448489397, 2215303101813356, - 4440001225765544, - 3076115785318425, + 21888242871839275222246405745257275088548364400416034343698204122977402827432, + 21888242871839275222246405745257275088548364400416034343698202759091962380313, 1444253617746874, 229598190712058, - 3874366266655652, - 3349679117826970, - 4115652081037040, + 21888242871839275222246405745257275088548364400416034343698203557342443717540, + 21888242871839275222246405745257275088548364400416034343698203032655294888858, + 21888242871839275222246405745257275088548364400416034343698203798628258098928, 1005582966409888, 422784080556921, 1382247784387310, 1336201895121941, - 3056640753400229, - 4184017963326795, + 21888242871839275222246405745257275088548364400416034343698202739616930462117, + 21888242871839275222246405745257275088548364400416034343698203866994140388683, 1502014877740678, - 2966809802311871, + 21888242871839275222246405745257275088548364400416034343698202649785979373759, 646019559974957, - 2363541417665101, - 3164614652218592, + 21888242871839275222246405745257275088548364400416034343698202046517594726989, + 21888242871839275222246405745257275088548364400416034343698202847590829280480, 1393872150533140, - 3935491985167243, + 21888242871839275222246405745257275088548364400416034343698203618468162229131, 508090315034809, - 3079784498592781, + 21888242871839275222246405745257275088548364400416034343698202762760675654669, 1574498423487480, 1046858080236652, 496873174108449, 1145613080051815, - 3236880373245992, + 21888242871839275222246405745257275088548364400416034343698202919856550307880, 1050468259659024, 841836839047011, - 2715372254489766, + 21888242871839275222246405745257275088548364400416034343698202398348431551654, 422695909761551, - 2978777022530208, + 21888242871839275222246405745257275088548364400416034343698202661753199592096, 2073223662516453, - 4102737320592974, - 3340264368286266, - 3602581590029669, + 21888242871839275222246405745257275088548364400416034343698203785713497654862, + 21888242871839275222246405745257275088548364400416034343698203023240545348154, + 21888242871839275222246405745257275088548364400416034343698203285557767091557, 2242214362775159, - 3371603693117682, + 21888242871839275222246405745257275088548364400416034343698203054579870179570, 1674597516319634, - 2492954908932167, + 21888242871839275222246405745257275088548364400416034343698202175931085994055, 236732110893479, 323947457694026, 354722852507022, 714637446792924, - 4290959956972954, - 2925280191642314, + 21888242871839275222246405745257275088548364400416034343698203973936134034842, + 21888242871839275222246405745257275088548364400416034343698202608256368704202, 1825420689343611, 383818838727226, - 3481419296333650, + 21888242871839275222246405745257275088548364400416034343698203164395473395538, 2146526432054432, 1718906604086432, 1485594914849209, - 3558448015451387, - 3787138310011560, - 3761645550403061, + 21888242871839275222246405745257275088548364400416034343698203241424192513275, + 21888242871839275222246405745257275088548364400416034343698203470114487073448, + 21888242871839275222246405745257275088548364400416034343698203444621727464949, 1828240712314064, 431052263901607, - 2851198223984084, - 4256598458733506, + 21888242871839275222246405745257275088548364400416034343698202534174401045972, + 21888242871839275222246405745257275088548364400416034343698203939574635795394, 398362648463074, 1099307692012223, 978530332886691, - 2484590410387648, + 21888242871839275222246405745257275088548364400416034343698202167566587449536, 1211431831204127, - 3781967470902601, + 21888242871839275222246405745257275088548364400416034343698203464943647964489, 1208874175209124, - 2513263415971115, + 21888242871839275222246405745257275088548364400416034343698202196239593033003, 1764345248799639, - 3953926553665143, + 21888242871839275222246405745257275088548364400416034343698203636902730727031, 1037793897686929, 2182395242202466, 79009426321007, 1189717159301403, - 2925288811078815, + 21888242871839275222246405745257275088548364400416034343698202608264988140703, 64049405605600, - 3800684967149037, + 21888242871839275222246405745257275088548364400416034343698203483661144210925, 2245723022543860, - 2664034109261204, - 2282597864288979, + 21888242871839275222246405745257275088548364400416034343698202347010286323092, + 21888242871839275222246405745257275088548364400416034343698201965574041350867, 1731259862576071, 2029703998391988, 1632763601557760, 313722732940111, - 4073899603504196, + 21888242871839275222246405745257275088548364400416034343698203756875780566084, 239488859874173, - 3885479651091099, - 3755348233031532, + 21888242871839275222246405745257275088548364400416034343698203568455828152987, + 21888242871839275222246405745257275088548364400416034343698203438324410093420, 920793372232586, - 3552130538203497, - 4353629736776874, - 3955198818092206, + 21888242871839275222246405745257275088548364400416034343698203235106715265385, + 21888242871839275222246405745257275088548364400416034343698204036605913838762, + 21888242871839275222246405745257275088548364400416034343698203638174995154094, 1078603112791812, 1025324778132717, 1086295676750850, - 3547909672256741, + 21888242871839275222246405745257275088548364400416034343698203230885849318629, 1981338758593423, 1389435024918854, - 3072007468667776, + 21888242871839275222246405745257275088548364400416034343698202754983645729664, 936160593099499, 481712407312576, - 2445809408856219, + 21888242871839275222246405745257275088548364400416034343698202128785585918107, 193569113878762, 1106187729945655, 1099281757224457, - 4188384072997242, + 21888242871839275222246405745257275088548364400416034343698203871360250059130, 1832386701693172, - 3597634229710206, + 21888242871839275222246405745257275088548364400416034343698203280610406772094, 572249664826677, - 3593823959358277, - 3855783891164015, + 21888242871839275222246405745257275088548364400416034343698203276800136420165, + 21888242871839275222246405745257275088548364400416034343698203538760068225903, 107659516725789, 1642475882646642, - 2840873175063751, + 21888242871839275222246405745257275088548364400416034343698202523849352125639, 728988448074721, 66472166461478, 2208933001503584, - 3004583606239910, + 21888242871839275222246405745257275088548364400416034343698202687559783301798, 1351371079555548, 868013364956537, - 3664670538581443, - 3919343260535803, - 2646188130355017, - 4479244852215611, + 21888242871839275222246405745257275088548364400416034343698203347646715643331, + 21888242871839275222246405745257275088548364400416034343698203602319437597691, + 21888242871839275222246405745257275088548364400416034343698202329164307416905, + 21888242871839275222246405745257275088548364400416034343698204162221029277499, 180693180155775, - 2870107871399804, - 4422982772086102, + 21888242871839275222246405745257275088548364400416034343698202553084048461692, + 21888242871839275222246405745257275088548364400416034343698204105958949147990, 360667196701601, - 3496937903545203, - 3667601047060945, + 21888242871839275222246405745257275088548364400416034343698203179914080607091, + 21888242871839275222246405745257275088548364400416034343698203350577224122833, 838645031756496, 640662873289753, 2243397138484782, 449422259167791, 822424006469054, - 3011948468598194, - 3734080506638404, - 4093718920007440, + 21888242871839275222246405745257275088548364400416034343698202694924645660082, + 21888242871839275222246405745257275088548364400416034343698203417056683700292, + 21888242871839275222246405745257275088548364400416034343698203776695097069328, 979338902302837, - 4230513849977122, + 21888242871839275222246405745257275088548364400416034343698203913490027039010, 1074700865846096, 710597397223327, - 2974966340350335, - 2812601412210578, + 21888242871839275222246405745257275088548364400416034343698202657942517412223, + 21888242871839275222246405745257275088548364400416034343698202495577589272466, 38596102428268, - 4474199589356104, - 3140356049915737, - 3348798027981559, - 2800706993687318, + 21888242871839275222246405745257275088548364400416034343698204157175766417992, + 21888242871839275222246405745257275088548364400416034343698202823332226977625, + 21888242871839275222246405745257275088548364400416034343698203031774205043447, + 21888242871839275222246405745257275088548364400416034343698202483683170749206, 1693477962754948, - 2326438990189832, + 21888242871839275222246405745257275088548364400416034343698202009415167251720, 462993740704492, 497906981042503, 690001945409282, 1510983242992326, 530473417599072, 1434855199988605, - 3538110141696558, + 21888242871839275222246405745257275088548364400416034343698203221086318758446, 920650809157525, 1765244116398992, - 3308487130099926, + 21888242871839275222246405745257275088548364400416034343698202991463307161814, 1511735418003085, - 4024926672505139, - 3198725754556241, + 21888242871839275222246405745257275088548364400416034343698203707902849567027, + 21888242871839275222246405745257275088548364400416034343698202881701931618129, 406436460788499, - 2636033359411047, - 3178262466082482, - 3678861569993974, - 3730607753036244, + 21888242871839275222246405745257275088548364400416034343698202319009536472935, + 21888242871839275222246405745257275088548364400416034343698202861238643144370, + 21888242871839275222246405745257275088548364400416034343698203361837747055862, + 21888242871839275222246405745257275088548364400416034343698203413583930098132, 1784787295934597, 1980847118536779, - 2863180003251096, - 4429287190148446, + 21888242871839275222246405745257275088548364400416034343698202546156180312984, + 21888242871839275222246405745257275088548364400416034343698204112263367210334, 1867090295440291, - 4020341094157973, - 3437907727625861, - 3125794112405502, + 21888242871839275222246405745257275088548364400416034343698203703317271219861, + 21888242871839275222246405745257275088548364400416034343698203120883904687749, + 21888242871839275222246405745257275088548364400416034343698202808770289467390, 1528982498554828, 1073953047924599, - 4394211014759454, - 3198662845472975, - 2910436217127263, + 21888242871839275222246405745257275088548364400416034343698204077187191821342, + 21888242871839275222246405745257275088548364400416034343698202881639022534863, + 21888242871839275222246405745257275088548364400416034343698202593412394189151, 176853376247081, 227800663453183, 481071805100715, 1759231210360545, - 2541871620624257, + 21888242871839275222246405745257275088548364400416034343698202224847797686145, 544599083475006, - 4483024907204966, - 3072479425664815, - 3250358937954747, - 2740167732844811, + 21888242871839275222246405745257275088548364400416034343698204166001084266854, + 21888242871839275222246405745257275088548364400416034343698202755455602726703, + 21888242871839275222246405745257275088548364400416034343698202933335115016635, + 21888242871839275222246405745257275088548364400416034343698202423143909906699, 2215200499899447, 475833858280942, 1459819437010615, - 2812484057027670, + 21888242871839275222246405745257275088548364400416034343698202495460234089558, 639956408985997, - 2949742930759644, + 21888242871839275222246405745257275088548364400416034343698202632719107821532, 1663028177193436, 429493337250506, - 3169557435097775, + 21888242871839275222246405745257275088548364400416034343698202852533612159663, 876510793159270, - 3335210974252415, - 3102635130818925, - 4082160103218303, + 21888242871839275222246405745257275088548364400416034343698203018187151314303, + 21888242871839275222246405745257275088548364400416034343698202785611307880813, + 21888242871839275222246405745257275088548364400416034343698203765136280280191, 1273959427156057, 386516825590857, - 3928770600446597, + 21888242871839275222246405745257275088548364400416034343698203611746777508485, 1632371392937447, - 4188050524788624, + 21888242871839275222246405745257275088548364400416034343698203871026701850512, 2006759264626280, - 2479105404287309, + 21888242871839275222246405745257275088548364400416034343698202162081581349197, 1331509488166824, 2074636452508633, 2021441451560249, - 4463836043597746, - 3108092387314597, + 21888242871839275222246405745257275088548364400416034343698204146812220659634, + 21888242871839275222246405745257275088548364400416034343698202791068564376485, 1618488152000194, 961284633358831, - 3377245342316524, + 21888242871839275222246405745257275088548364400416034343698203060221519378412, 1699539141807514, 264285984636654, - 3361419743599378, - 3834911591841368, - 3631092647095854, + 21888242871839275222246405745257275088548364400416034343698203044395920661266, + 21888242871839275222246405745257275088548364400416034343698203517887768903256, + 21888242871839275222246405745257275088548364400416034343698203314068824157742, 486496874956218, 223377179268321, 773803047680582, - 3790771687071520, + 21888242871839275222246405745257275088548364400416034343698203473747864133408, 990655405926040, - 3678728930383946, + 21888242871839275222246405745257275088548364400416034343698203361705107445834, 1736918758227489, 1116919732215531, - 2647364650428223, - 3393481436148437, - 2335175761935655, + 21888242871839275222246405745257275088548364400416034343698202330340827490111, + 21888242871839275222246405745257275088548364400416034343698203076457613210325, + 21888242871839275222246405745257275088548364400416034343698202018151938997543, 1258902416542908, 1021698807881648, - 3994381885017761, - 3677326923459909, - 4414165220377239, + 21888242871839275222246405745257275088548364400416034343698203677358062079649, + 21888242871839275222246405745257275088548364400416034343698203360303100521797, + 21888242871839275222246405745257275088548364400416034343698204097141397439127, 1228088596510156, - 3022752213550240, + 21888242871839275222246405745257275088548364400416034343698202705728390612128, 1870715036702317, - 3869539554660681, + 21888242871839275222246405745257275088548364400416034343698203552515731722569, 1543589525192255, - 2700795368741301, + 21888242871839275222246405745257275088548364400416034343698202383771545803189, 2189267535106976, 1886927755054352, - 2355017121080322, + 21888242871839275222246405745257275088548364400416034343698202037993298142210, 1650578283029782, 729297391868389, 492728088872421, - 2475015309714299, + 21888242871839275222246405745257275088548364400416034343698202157991486776187, 472064924411383, - 3573796647069940, - 3591999816480320, + 21888242871839275222246405745257275088548364400416034343698203256772824131828, + 21888242871839275222246405745257275088548364400416034343698203274975993542208, 678278684551071, 111034809704142, 29122639330250, - 3381595223666362, - 4206980489423152, - 2481592727483128, + 21888242871839275222246405745257275088548364400416034343698203064571400728250, + 21888242871839275222246405745257275088548364400416034343698203889956666485040, + 21888242871839275222246405745257275088548364400416034343698202164568904545016, 2085893135298267, - 2301976816892563, + 21888242871839275222246405745257275088548364400416034343698201984952993954451, 412381394881056, - 3061149996820409, - 3190113627460163, - 2583317183768742, - 2977291029787069, - 3450789912787726, + 21888242871839275222246405745257275088548364400416034343698202744126173882297, + 21888242871839275222246405745257275088548364400416034343698202873089804522051, + 21888242871839275222246405745257275088548364400416034343698202266293360830630, + 21888242871839275222246405745257275088548364400416034343698202660267206848957, + 21888242871839275222246405745257275088548364400416034343698203133766089849614, 1538890984308754, 797974136789420, - 2331449634105901, - 3348761410028181, + 21888242871839275222246405745257275088548364400416034343698202014425811167789, + 21888242871839275222246405745257275088548364400416034343698203031737587090069, 1871941788945130, 667371702351661, - 4032193987950754, + 21888242871839275222246405745257275088548364400416034343698203715170165012642, 1142371363514270, 1328876803511712, 2134987278363058, 1255917774332465, 1221052139530294, 1189593040331400, - 3011504587449437, - 2368490919501223, + 21888242871839275222246405745257275088548364400416034343698202694480764511325, + 21888242871839275222246405745257275088548364400416034343698202051467096563111, 963654322452628, 1100652565457737, - 3170654862011290, + 21888242871839275222246405745257275088548364400416034343698202853631039073178, 2200565800647695, 124702488412487, - 4236985758064782, + 21888242871839275222246405745257275088548364400416034343698203919961935126670, 466611104740161, - 3113254653060604, + 21888242871839275222246405745257275088548364400416034343698202796230830122492, 1016533849899120, - 4118598354496356, + 21888242871839275222246405745257275088548364400416034343698203801574531558244, 1421025030295429, 1418343263606887, 2086495555281934, 2077637881805494, 936009753400043, - 2527407720384192, + 21888242871839275222246405745257275088548364400416034343698202210383897446080, 265093767875492, 1233587305352180, 1815971108651656, - 2713267967563891, + 21888242871839275222246405745257275088548364400416034343698202396244144625779, 1590409170747838, 1530035161601557, 2113335015207446, 692787536245749, - 3602458956658804, - 4163297140344650, - 2751439744789271, + 21888242871839275222246405745257275088548364400416034343698203285435133720692, + 21888242871839275222246405745257275088548364400416034343698203846273317406538, + 21888242871839275222246405745257275088548364400416034343698202434415921851159, 1756551047598166, 396252887710106, - 3052787000433303, + 21888242871839275222246405745257275088548364400416034343698202735763177495191, 2149278989689920, - 3660395540850911, - 3583694210219831, - 4407631759487152, - 2920441428249801, - 3037315869945301, + 21888242871839275222246405745257275088548364400416034343698203343371717912799, + 21888242871839275222246405745257275088548364400416034343698203266670387281719, + 21888242871839275222246405745257275088548364400416034343698204090607936549040, + 21888242871839275222246405745257275088548364400416034343698202603417605311689, + 21888242871839275222246405745257275088548364400416034343698202720292047007189, 512112718114652, - 3409755031725649, + 21888242871839275222246405745257275088548364400416034343698203092731208787537, 1914786707438747, 1330687718632542, - 3823922282856768, - 3642748214821654, - 2265846935416002, - 2300812127219796, - 3200313359912711, + 21888242871839275222246405745257275088548364400416034343698203506898459918656, + 21888242871839275222246405745257275088548364400416034343698203325724391883542, + 21888242871839275222246405745257275088548364400416034343698201948823112477890, + 21888242871839275222246405745257275088548364400416034343698201983788304281684, + 21888242871839275222246405745257275088548364400416034343698202883289536974599, 1134773602028102, - 4035058236238879, - 3815996697928623, - 3214353247951269, - 4292281938211297, + 21888242871839275222246405745257275088548364400416034343698203718034413300767, + 21888242871839275222246405745257275088548364400416034343698203498972874990511, + 21888242871839275222246405745257275088548364400416034343698202897329425013157, + 21888242871839275222246405745257275088548364400416034343698203975258115273185, 1942844670891722, - 3602540756018997, - 4123142173686513, + 21888242871839275222246405745257275088548364400416034343698203285516933080885, + 21888242871839275222246405745257275088548364400416034343698203806118350748401, 720499900061163, 1488461441544846, - 3164003727937340, - 4489844567775454, - 2335264900200341, - 2448064558152563, - 2839211886143567, + 21888242871839275222246405745257275088548364400416034343698202846979904999228, + 21888242871839275222246405745257275088548364400416034343698204172820744837342, + 21888242871839275222246405745257275088548364400416034343698202018241077262229, + 21888242871839275222246405745257275088548364400416034343698202131040735214451, + 21888242871839275222246405745257275088548364400416034343698202522188063205455, 1775983801617309, 301671480880127, 2194770017210331, - 4490295430346239, - 3261368586982367, - 2815914787987632, - 2392482017255938, - 2473335315400280, + 21888242871839275222246405745257275088548364400416034343698204173271607408127, + 21888242871839275222246405745257275088548364400416034343698202944344764044255, + 21888242871839275222246405745257275088548364400416034343698202498890965049520, + 21888242871839275222246405745257275088548364400416034343698202075458194317826, + 21888242871839275222246405745257275088548364400416034343698202156311492462168, 35743181269741, 1908791356349882, - 3949029626815566, - 3572723022732461, + 21888242871839275222246405745257275088548364400416034343698203632005803877454, + 21888242871839275222246405745257275088548364400416034343698203255699199794349, 1034150732430560, - 2458619397146264, + 21888242871839275222246405745257275088548364400416034343698202141595574208152, 154510484239860, 551139938979343, 2249391072180707, - 3169971158366335, - 2506329738437370, + 21888242871839275222246405745257275088548364400416034343698202852947335428223, + 21888242871839275222246405745257275088548364400416034343698202189305915499258, 1604237393620241, - 2786991853994608, + 21888242871839275222246405745257275088548364400416034343698202469968031056496, 1222235035237887, - 2930335276380905, + 21888242871839275222246405745257275088548364400416034343698202613311453442793, 1174305956216634, 711481346667274, 411045268541879, - 3316707215478234, - 3141923712072840, + 21888242871839275222246405745257275088548364400416034343698202999683392540122, + 21888242871839275222246405745257275088548364400416034343698202824899889134728, 1418083149285205, - 2326466844433571, - 4057306066917251, - 2693047402448127, - 3482903223043249, - 3795761286029160, + 21888242871839275222246405745257275088548364400416034343698202009443021495459, + 21888242871839275222246405745257275088548364400416034343698203740282243979139, + 21888242871839275222246405745257275088548364400416034343698202376023579510015, + 21888242871839275222246405745257275088548364400416034343698203165879400105137, + 21888242871839275222246405745257275088548364400416034343698203478737463091048, 5055412376693, 543859385444441, - 2749981155390338, + 21888242871839275222246405745257275088548364400416034343698202432957332452226, 1804497233223044, - 3844013796069002, - 3573303086410208, - 3091813854514273, - 4348613015200865, - 3219755410499046, - 2457482623550228, + 21888242871839275222246405745257275088548364400416034343698203526989973130890, + 21888242871839275222246405745257275088548364400416034343698203256279263472096, + 21888242871839275222246405745257275088548364400416034343698202774790031576161, + 21888242871839275222246405745257275088548364400416034343698204031589192262753, + 21888242871839275222246405745257275088548364400416034343698202902731587560934, + 21888242871839275222246405745257275088548364400416034343698202140458800612116, 888927039685454, 1287345238344918, 659686664370621, - 2523062975832380, + 21888242871839275222246405745257275088548364400416034343698202206039152894268, 491855824258594, - 3250137862038856, + 21888242871839275222246405745257275088548364400416034343698202933114039100744, 2247793344488746, 871702106896540, 273936685272123, 92136014912111, - 3316330255040900, - 2728558913648945, + 21888242871839275222246405745257275088548364400416034343698202999306432102788, + 21888242871839275222246405745257275088548364400416034343698202411535090710833, 315034280074297, - 2805500301302609, - 2649964182760187, + 21888242871839275222246405745257275088548364400416034343698202488476478364497, + 21888242871839275222246405745257275088548364400416034343698202332940359822075, 399298822861166, 374167039383972, 473967552306028, - 2736193760109696, - 2814773400195852, + 21888242871839275222246405745257275088548364400416034343698202419169937171584, + 21888242871839275222246405745257275088548364400416034343698202497749577257740, 1857513756603452, 249105302008912, 750479576077780, 280159857501029, 846111464253982, - 4461359648449602, + 21888242871839275222246405745257275088548364400416034343698204144335825511490, 368199601546929, - 3255541159825182, - 3710184766952330, - 3056631968262641, - 2806259542199623, + 21888242871839275222246405745257275088548364400416034343698202938517336887070, + 21888242871839275222246405745257275088548364400416034343698203393160944014218, + 21888242871839275222246405745257275088548364400416034343698202739608145324529, + 21888242871839275222246405745257275088548364400416034343698202489235719261511, 741952441285424, 349410898618641, 1232293673401953, 903044002888671, 1441228923211645, - 4083564321372315, + 21888242871839275222246405745257275088548364400416034343698203766540498434203, 1742799618652321, - 3484086915691751, + 21888242871839275222246405745257275088548364400416034343698203167063092753639, 299085915768111, 1344689360574771, - 3844076009010802, + 21888242871839275222246405745257275088548364400416034343698203527052186072690, 1325199956771972, - 3138427033645662, - 3133679394877629, + 21888242871839275222246405745257275088548364400416034343698202821403210707550, + 21888242871839275222246405745257275088548364400416034343698202816655571939517, 1978972322761574, - 2602330524857882, + 21888242871839275222246405745257275088548364400416034343698202285306701919770, 357731076394822, 1725069753504811, - 3948576054951980, - 2490714341772586, + 21888242871839275222246405745257275088548364400416034343698203631552232013868, + 21888242871839275222246405745257275088548364400416034343698202173690518834474, 944491091139887, - 2327222738225024, + 21888242871839275222246405745257275088548364400416034343698202010198915286912, 1547704337919505, 2173965952348847, - 2857303206114866, + 21888242871839275222246405745257275088548364400416034343698202540279383176754, 498178055392239, 2185516317511405, - 3887550490195742, + 21888242871839275222246405745257275088548364400416034343698203570526667257630, 1873403194666436, 866191022266320, - 3240750089685147, - 3672802876183091, + 21888242871839275222246405745257275088548364400416034343698202923726266747035, + 21888242871839275222246405745257275088548364400416034343698203355779053244979, 773933636347031, 1135570944283394, - 3877715350609192, - 3117915294094713, + 21888242871839275222246405745257275088548364400416034343698203560691527671080, + 21888242871839275222246405745257275088548364400416034343698202800891471156601, 2114716328748403, 570492826708459, 2218298948259701, 947159539117428, 856125311736106, 998640326208270, - 2588966786666215, - 4415411350144517, + 21888242871839275222246405745257275088548364400416034343698202271942963728103, + 21888242871839275222246405745257275088548364400416034343698204098387527206405, 1812876394923359, - 4328566794730535, - 3540790326757951, - 2761690437651526, + 21888242871839275222246405745257275088548364400416034343698204011542971792423, + 21888242871839275222246405745257275088548364400416034343698203223766503819839, + 21888242871839275222246405745257275088548364400416034343698202444666614713414, 1835763043291860, - 3330408220976861, - 3045098359587805, + 21888242871839275222246405745257275088548364400416034343698203013384398038749, + 21888242871839275222246405745257275088548364400416034343698202728074536649693, 832949547477733, 1002300112481262, 297581722686942, - 3947632423936544, + 21888242871839275222246405745257275088548364400416034343698203630608600998432, 1357593608538891, - 3589993614049354, + 21888242871839275222246405745257275088548364400416034343698203272969791111242, 1947088111855793, - 2975205470339810, - 3342281451996169, - 3065035950553948, - 2826094773647571, + 21888242871839275222246405745257275088548364400416034343698202658181647401698, + 21888242871839275222246405745257275088548364400416034343698203025257629058057, + 21888242871839275222246405745257275088548364400416034343698202748012127615836, + 21888242871839275222246405745257275088548364400416034343698202509070950709459, 970874800786661, - 2873739809798037, + 21888242871839275222246405745257275088548364400416034343698202556715986859925, 843592578729852, 2022190668476772, - 4140952999768372, + 21888242871839275222246405745257275088548364400416034343698203823929176830260, 1811692224392701, 1932388597704263, - 3270280426791464, - 4117643301099315, - 2327739495066982, - 2599721240738065, + 21888242871839275222246405745257275088548364400416034343698202953256603853352, + 21888242871839275222246405745257275088548364400416034343698203800619478161203, + 21888242871839275222246405745257275088548364400416034343698202010715672128870, + 21888242871839275222246405745257275088548364400416034343698202282697417799953, 868170402126178, - 3543203224169502, + 21888242871839275222246405745257275088548364400416034343698203226179401231390, 305373468435299, - 4345372999974607, + 21888242871839275222246405745257275088548364400416034343698204028349177036495, 58481661722435, 1508770401737453, 334718957122206, @@ -17035,419 +17035,419 @@ pub global CRP: [Polynomial; L] = [ 1827619543061489, 917825569386920, 918356391754749, - 2903127280327792, + 21888242871839275222246405745257275088548364400416034343698202586103457389680, 679614450407833, 1370226509433280, 296866008790487, 1507156291267409, 61909982449783, - 2505000710743970, - 2801507934414163, - 4003616188150705, + 21888242871839275222246405745257275088548364400416034343698202187976887805858, + 21888242871839275222246405745257275088548364400416034343698202484484111476051, + 21888242871839275222246405745257275088548364400416034343698203686592365212593, 938990198414328, - 3261524585306694, - 2554896637340043, + 21888242871839275222246405745257275088548364400416034343698202944500762368582, + 21888242871839275222246405745257275088548364400416034343698202237872814401931, 804525898631586, - 3039514241714682, + 21888242871839275222246405745257275088548364400416034343698202722490418776570, 1304592114239447, - 2741721895017876, - 4381589722432933, - 4410405565623766, + 21888242871839275222246405745257275088548364400416034343698202424698072079764, + 21888242871839275222246405745257275088548364400416034343698204064565899494821, + 21888242871839275222246405745257275088548364400416034343698204093381742685654, 746449224762381, 367210715829457, 1567553831143307, 906211599021004, 1577286606122673, - 3883692357527467, + 21888242871839275222246405745257275088548364400416034343698203566668534589355, 1844708097835750, 244838003971269, - 3714863595280314, - 3841849034733096, + 21888242871839275222246405745257275088548364400416034343698203397839772342202, + 21888242871839275222246405745257275088548364400416034343698203524825211794984, 1920530269573078, - 2960772969602892, - 3605307980411150, - 4197937219681678, + 21888242871839275222246405745257275088548364400416034343698202643749146664780, + 21888242871839275222246405745257275088548364400416034343698203288284157473038, + 21888242871839275222246405745257275088548364400416034343698203880913396743566, 1189843241163303, 1372859879070632, 1446669877263362, - 2274740386598360, - 2861295080343610, + 21888242871839275222246405745257275088548364400416034343698201957716563660248, + 21888242871839275222246405745257275088548364400416034343698202544271257405498, 1072549065080792, 2166379711842335, 1554755195664, - 4384815093073490, - 3532450088535185, + 21888242871839275222246405745257275088548364400416034343698204067791270135378, + 21888242871839275222246405745257275088548364400416034343698203215426265597073, 1176464637970662, 2096240081730696, 1150573696263128, 1448855133206200, 1916159507292021, 1082285247779717, - 4329993909889589, + 21888242871839275222246405745257275088548364400416034343698204012970086951477, 1401973656852075, - 3170318382890013, + 21888242871839275222246405745257275088548364400416034343698202853294559951901, 1658132652692839, - 3699318188664684, + 21888242871839275222246405745257275088548364400416034343698203382294365726572, 996576632022512, 64685856404175, 1136576031921417, - 4483862651102968, - 3788173139040981, + 21888242871839275222246405745257275088548364400416034343698204166838828164856, + 21888242871839275222246405745257275088548364400416034343698203471149316102869, 1189057734795961, - 3651479596338756, + 21888242871839275222246405745257275088548364400416034343698203334455773400644, 2170188495014331, - 4170861101781157, - 3378252073233413, - 4456839486715904, + 21888242871839275222246405745257275088548364400416034343698203853837278843045, + 21888242871839275222246405745257275088548364400416034343698203061228250295301, + 21888242871839275222246405745257275088548364400416034343698204139815663777792, 1020716000489916, - 2603784186456385, + 21888242871839275222246405745257275088548364400416034343698202286760363518273, 1830946264273582, 850194857979549, 169052607602540, 1243964516164687, 15483696705578, - 2930906020214985, + 21888242871839275222246405745257275088548364400416034343698202613882197276873, 2054088380079186, - 4018017801587392, + 21888242871839275222246405745257275088548364400416034343698203700993978649280, 646547762257010, 1467612911411900, 2047616967546944, - 2557918289389800, + 21888242871839275222246405745257275088548364400416034343698202240894466451688, 1525842849502081, 614686075549956, 2132138880888514, - 2264997985020569, - 3196617195363476, - 3420957479140680, - 2888918001138127, - 3170661975878070, + 21888242871839275222246405745257275088548364400416034343698201947974162082457, + 21888242871839275222246405745257275088548364400416034343698202879593372425364, + 21888242871839275222246405745257275088548364400416034343698203103933656202568, + 21888242871839275222246405745257275088548364400416034343698202571894178200015, + 21888242871839275222246405745257275088548364400416034343698202853638152939958, 970028790640066, - 2847452950617311, - 3093453679510844, - 3038539128925539, - 3257852582360317, - 3544458571591020, - 2353441165075759, + 21888242871839275222246405745257275088548364400416034343698202530429127679199, + 21888242871839275222246405745257275088548364400416034343698202776429856572732, + 21888242871839275222246405745257275088548364400416034343698202721515305987427, + 21888242871839275222246405745257275088548364400416034343698202940828759422205, + 21888242871839275222246405745257275088548364400416034343698203227434748652908, + 21888242871839275222246405745257275088548364400416034343698202036417342137647, 740747103119066, 1095177616360346, 419892822311597, 1665721853219841, 1132762727893195, - 3926368958143245, - 3427432664833904, - 3266308677581185, + 21888242871839275222246405745257275088548364400416034343698203609345135205133, + 21888242871839275222246405745257275088548364400416034343698203110408841895792, + 21888242871839275222246405745257275088548364400416034343698202949284854643073, 1628865777014822, - 3261434415582412, + 21888242871839275222246405745257275088548364400416034343698202944410592644300, 538322507032981, 2143380690924744, 700754790837365, 2069417622465028, - 4191269303201553, - 3495005966006281, + 21888242871839275222246405745257275088548364400416034343698203874245480263441, + 21888242871839275222246405745257275088548364400416034343698203177982143068169, 451206084386786, - 4302472494292334, + 21888242871839275222246405745257275088548364400416034343698203985448671354222, 1362561334178416, 1821995473622054, - 4108761217212633, - 2925312323599046, + 21888242871839275222246405745257275088548364400416034343698203791737394274521, + 21888242871839275222246405745257275088548364400416034343698202608288500660934, 599825637288552, 334082641200229, - 2787850135643348, + 21888242871839275222246405745257275088548364400416034343698202470826312705236, 620981471502948, - 2864738823852302, - 3975603964193070, + 21888242871839275222246405745257275088548364400416034343698202547715000914190, + 21888242871839275222246405745257275088548364400416034343698203658580141254958, 1007360739362061, 523818303153087, - 2367275374824516, + 21888242871839275222246405745257275088548364400416034343698202050251551886404, 1353230558717779, 1487849472117301, - 3098052928416398, + 21888242871839275222246405745257275088548364400416034343698202781029105478286, 1561540915814755, 44863464251561, 193668352061684, - 4247357541857387, + 21888242871839275222246405745257275088548364400416034343698203930333718919275, 1210007251688936, - 3005526469691481, - 2712293047922114, - 2694025627488239, - 3427889125491152, + 21888242871839275222246405745257275088548364400416034343698202688502646753369, + 21888242871839275222246405745257275088548364400416034343698202395269224984002, + 21888242871839275222246405745257275088548364400416034343698202377001804550127, + 21888242871839275222246405745257275088548364400416034343698203110865302553040, 1690386724457759, - 4378151276847234, - 4186496804042164, + 21888242871839275222246405745257275088548364400416034343698204061127453909122, + 21888242871839275222246405745257275088548364400416034343698203869472981104052, 876921978717713, 879768069132028, 1443456136725062, - 3886639730890904, + 21888242871839275222246405745257275088548364400416034343698203569615907952792, 807797308029262, 390727581621927, - 3178286803003906, + 21888242871839275222246405745257275088548364400416034343698202861262980065794, 959936906418067, - 3913493584664113, - 2805820242010696, + 21888242871839275222246405745257275088548364400416034343698203596469761726001, + 21888242871839275222246405745257275088548364400416034343698202488796419072584, 509542657212414, - 3150631479886632, + 21888242871839275222246405745257275088548364400416034343698202833607656948520, 1060704868331701, 140137095713894, 246902671713185, 1578240401783002, - 2774936287925404, - 2622976560677104, - 4471886888796125, - 3477374161696152, - 2453837802111785, + 21888242871839275222246405745257275088548364400416034343698202457912464987292, + 21888242871839275222246405745257275088548364400416034343698202305952737738992, + 21888242871839275222246405745257275088548364400416034343698204154863065858013, + 21888242871839275222246405745257275088548364400416034343698203160350338758040, + 21888242871839275222246405745257275088548364400416034343698202136813979173673, 1445888538647264, 1198127299945747, 2067192322273604, 259101239316605, 311932469461496, - 3452951250585786, - 3814585472817188, + 21888242871839275222246405745257275088548364400416034343698203135927427647674, + 21888242871839275222246405745257275088548364400416034343698203497561649879076, 556066074110318, - 4334401378686552, + 21888242871839275222246405745257275088548364400416034343698204017377555748440, 107237888916943, - 2625798123435562, - 3308202091979197, + 21888242871839275222246405745257275088548364400416034343698202308774300497450, + 21888242871839275222246405745257275088548364400416034343698202991178269041085, 2213696308705391, 991765716960243, 1326077676259758, 1032604896360154, 914557270163409, - 3634056342332670, + 21888242871839275222246405745257275088548364400416034343698203317032519394558, 90419333592207, - 3838123947079807, - 2401661368909648, - 2740871350143626, + 21888242871839275222246405745257275088548364400416034343698203521100124141695, + 21888242871839275222246405745257275088548364400416034343698202084637545971536, + 21888242871839275222246405745257275088548364400416034343698202423847527205514, 19983450270715, - 4465957997158564, - 2876259284155654, - 2549291007023009, - 3385733331085893, - 4322470920878751, - 2500562268923359, + 21888242871839275222246405745257275088548364400416034343698204148934174220452, + 21888242871839275222246405745257275088548364400416034343698202559235461217542, + 21888242871839275222246405745257275088548364400416034343698202232267184084897, + 21888242871839275222246405745257275088548364400416034343698203068709508147781, + 21888242871839275222246405745257275088548364400416034343698204005447097940639, + 21888242871839275222246405745257275088548364400416034343698202183538445985247, 1920267390509899, - 3320857664385601, - 3112986167729718, + 21888242871839275222246405745257275088548364400416034343698203003833841447489, + 21888242871839275222246405745257275088548364400416034343698202795962344791606, 1185370262641865, - 3741237164205574, - 3954051746448325, + 21888242871839275222246405745257275088548364400416034343698203424213341267462, + 21888242871839275222246405745257275088548364400416034343698203637027923510213, 607787471662257, 1228069442759232, 763919683741530, - 4032331790281267, + 21888242871839275222246405745257275088548364400416034343698203715307967343155, 1167719040038249, 961640620720561, - 3331981323976498, - 2982903684792635, + 21888242871839275222246405745257275088548364400416034343698203014957501038386, + 21888242871839275222246405745257275088548364400416034343698202665879861854523, 1794710438191758, - 3036079296336490, + 21888242871839275222246405745257275088548364400416034343698202719055473398378, 987218076910109, - 2804991490237596, - 3995995191831077, - 3008236001513469, - 4171351446795840, + 21888242871839275222246405745257275088548364400416034343698202487967667299484, + 21888242871839275222246405745257275088548364400416034343698203678971368892965, + 21888242871839275222246405745257275088548364400416034343698202691212178575357, + 21888242871839275222246405745257275088548364400416034343698203854327623857728, 281381511108770, 1372471732146148, - 3108724402501271, + 21888242871839275222246405745257275088548364400416034343698202791700579563159, 2020475141769145, 1091146827021324, 1106219932381130, 56607296092733, - 3259029039610819, - 4129642407097205, - 4110146188206065, - 3942283029602477, + 21888242871839275222246405745257275088548364400416034343698202942005216672707, + 21888242871839275222246405745257275088548364400416034343698203812618584159093, + 21888242871839275222246405745257275088548364400416034343698203793122365267953, + 21888242871839275222246405745257275088548364400416034343698203625259206664365, 718066686056432, - 2609589382941563, - 3158087891935822, - 2989677613004621, + 21888242871839275222246405745257275088548364400416034343698202292565560003451, + 21888242871839275222246405745257275088548364400416034343698202841064068997710, + 21888242871839275222246405745257275088548364400416034343698202672653790066509, 1810618196850368, - 3952308463503947, - 3439321271006886, + 21888242871839275222246405745257275088548364400416034343698203635284640565835, + 21888242871839275222246405745257275088548364400416034343698203122297448068774, 1747923577208517, - 3240996866834487, + 21888242871839275222246405745257275088548364400416034343698202923973043896375, 815660211731232, 1185596430034804, 1406966407674745, - 4186835076312250, + 21888242871839275222246405745257275088548364400416034343698203869811253374138, 1819537135913926, 1549391697093018, 1383174166477116, - 3982388488017916, - 2636171056494320, - 3301100717372299, + 21888242871839275222246405745257275088548364400416034343698203665364665079804, + 21888242871839275222246405745257275088548364400416034343698202319147233556208, + 21888242871839275222246405745257275088548364400416034343698202984076894434187, 515278770959763, 1445207801936575, - 2878813983040292, + 21888242871839275222246405745257275088548364400416034343698202561790160102180, 336072589995539, 664786002336280, - 2841295669840470, - 4468547081225644, - 3639671960373175, - 4394132923727812, + 21888242871839275222246405745257275088548364400416034343698202524271846902358, + 21888242871839275222246405745257275088548364400416034343698204151523258287532, + 21888242871839275222246405745257275088548364400416034343698203322648137435063, + 21888242871839275222246405745257275088548364400416034343698204077109100789700, 1923050360052136, - 2457690070031722, + 21888242871839275222246405745257275088548364400416034343698202140666247093610, 120487966414391, - 3784250440350592, - 3247048893668514, + 21888242871839275222246405745257275088548364400416034343698203467226617412480, + 21888242871839275222246405745257275088548364400416034343698202930025070730402, 1059478825221729, - 3398963794948643, - 4256317498673342, + 21888242871839275222246405745257275088548364400416034343698203081939972010531, + 21888242871839275222246405745257275088548364400416034343698203939293675735230, 1540227831530079, - 4134765939573230, - 3483144120280820, - 3434060594869149, - 3284433480369150, - 4254060683039818, - 4295709297663042, + 21888242871839275222246405745257275088548364400416034343698203817742116635118, + 21888242871839275222246405745257275088548364400416034343698203166120297342708, + 21888242871839275222246405745257275088548364400416034343698203117036771931037, + 21888242871839275222246405745257275088548364400416034343698202967409657431038, + 21888242871839275222246405745257275088548364400416034343698203937036860101706, + 21888242871839275222246405745257275088548364400416034343698203978685474724930, 1585463327224836, - 2427743500866412, + 21888242871839275222246405745257275088548364400416034343698202110719677928300, 1647661571060362, - 2439062563103207, + 21888242871839275222246405745257275088548364400416034343698202122038740165095, 1633342988699353, 1869103213497284, 1844255565292068, 646466500436117, - 3991372319247161, - 2893888456117693, + 21888242871839275222246405745257275088548364400416034343698203674348496309049, + 21888242871839275222246405745257275088548364400416034343698202576864633179581, 383699324960372, - 3794257057351597, + 21888242871839275222246405745257275088548364400416034343698203477233234413485, 1538503752810922, 57110460165263, 1827569024603281, - 3162726854537234, + 21888242871839275222246405745257275088548364400416034343698202845703031599122, 933262392682469, - 3110316708680991, + 21888242871839275222246405745257275088548364400416034343698202793292885742879, 1093413900753455, - 4062032293616373, - 3899060932946549, + 21888242871839275222246405745257275088548364400416034343698203745008470678261, + 21888242871839275222246405745257275088548364400416034343698203582037110008437, 2125866709199349, - 3896330190177312, + 21888242871839275222246405745257275088548364400416034343698203579306367239200, 1016376478383894, 1923415500264940, 451646349441714, 1518356965606413, 243289262762168, - 2658918343512179, + 21888242871839275222246405745257275088548364400416034343698202341894520574067, 2051290194419443, 147986115927492, 426950767840093, 2100887815433209, - 3600658808472283, - 2946666076165124, + 21888242871839275222246405745257275088548364400416034343698203283634985534171, + 21888242871839275222246405745257275088548364400416034343698202629642253227012, 590623203603046, - 3189278184953668, + 21888242871839275222246405745257275088548364400416034343698202872254362015556, 293430971261797, - 3544071873112077, - 3370590760433178, - 3744190914650876, + 21888242871839275222246405745257275088548364400416034343698203227048050173965, + 21888242871839275222246405745257275088548364400416034343698203053566937495066, + 21888242871839275222246405745257275088548364400416034343698203427167091712764, 1859240321023034, 1209494958879906, - 2852220393139676, - 2893046183406454, + 21888242871839275222246405745257275088548364400416034343698202535196570201564, + 21888242871839275222246405745257275088548364400416034343698202576022360468342, 1508455465129095, - 3230726870238007, + 21888242871839275222246405745257275088548364400416034343698202913703047299895, 5506962743028, 1375290393816428, - 3912328952639531, + 21888242871839275222246405745257275088548364400416034343698203595305129701419, 15808119113715, 399296118411138, 1029551542146958, 889011446123824, - 2460135832268567, - 2631922443982340, - 3955825110311179, + 21888242871839275222246405745257275088548364400416034343698202143112009330455, + 21888242871839275222246405745257275088548364400416034343698202314898621044228, + 21888242871839275222246405745257275088548364400416034343698203638801287373067, 472449173058045, 1807533860951905, - 3230503757858804, + 21888242871839275222246405745257275088548364400416034343698202913479934920692, 2229998274559333, - 2493286620391745, - 3194693520616342, + 21888242871839275222246405745257275088548364400416034343698202176262797453633, + 21888242871839275222246405745257275088548364400416034343698202877669697678230, 621691526139228, 118847133575103, 1134346363653428, - 2257617062120425, - 4401469080215034, + 21888242871839275222246405745257275088548364400416034343698201940593239182313, + 21888242871839275222246405745257275088548364400416034343698204084445257276922, 181114448566469, 2014085018672575, 1022615531952822, 461455204385884, 860848242578713, 1652054109161192, - 4219760834985177, - 3370947878499372, - 2355506008056274, + 21888242871839275222246405745257275088548364400416034343698203902737012047065, + 21888242871839275222246405745257275088548364400416034343698203053924055561260, + 21888242871839275222246405745257275088548364400416034343698202038482185118162, 427214036061191, - 2766901387149485, + 21888242871839275222246405745257275088548364400416034343698202449877564211373, 770872318410640, - 4501813981191014, + 21888242871839275222246405745257275088548364400416034343698204184790158252902, 155656852204275, 1629165822039949, 200855459309718, - 4358368936621200, - 3105312354904337, + 21888242871839275222246405745257275088548364400416034343698204041345113683088, + 21888242871839275222246405745257275088548364400416034343698202788288531966225, 1764281618551557, - 3433662265755339, + 21888242871839275222246405745257275088548364400416034343698203116638442817227, 369249815150455, - 3302776521618152, - 3344448920175886, - 2779026916958585, + 21888242871839275222246405745257275088548364400416034343698202985752698680040, + 21888242871839275222246405745257275088548364400416034343698203027425097237774, + 21888242871839275222246405745257275088548364400416034343698202462003094020473, 356186313097230, 1017749878870574, - 3127744620503119, - 2997113785689625, - 3583426187904659, + 21888242871839275222246405745257275088548364400416034343698202810720797565007, + 21888242871839275222246405745257275088548364400416034343698202680089962751513, + 21888242871839275222246405745257275088548364400416034343698203266402364966547, 962947485935316, 662243383040111, 2125100309971349, - 3029773879231332, - 3643496305835986, + 21888242871839275222246405745257275088548364400416034343698202712750056293220, + 21888242871839275222246405745257275088548364400416034343698203326472482897874, 2047390449145386, 1660168150556295, - 4263617057703768, + 21888242871839275222246405745257275088548364400416034343698203946593234765656, 1648382197548182, - 3941936055559148, - 2364473445632873, + 21888242871839275222246405745257275088548364400416034343698203624912232621036, + 21888242871839275222246405745257275088548364400416034343698202047449622694761, 1645558648126038, - 2275280840393041, + 21888242871839275222246405745257275088548364400416034343698201958257017454929, 161509682421001, 584890355071832, 1631302278922963, - 2730940805236521, + 21888242871839275222246405745257275088548364400416034343698202413916982298409, 162596270562261, - 3670839054940207, + 21888242871839275222246405745257275088548364400416034343698203353815232002095, 1818353203334739, 496481400926360, - 2729619522943122, - 2643671972599702, - 3033596235717993, - 3931430711369987, - 2396280888336711, - 4202008566568312, + 21888242871839275222246405745257275088548364400416034343698202412595700005010, + 21888242871839275222246405745257275088548364400416034343698202326648149661590, + 21888242871839275222246405745257275088548364400416034343698202716572412779881, + 21888242871839275222246405745257275088548364400416034343698203614406888431875, + 21888242871839275222246405745257275088548364400416034343698202079257065398599, + 21888242871839275222246405745257275088548364400416034343698203884984743630200, 858319525173707, 1377036035432674, 1955807891037568, - 2341591635220708, + 21888242871839275222246405745257275088548364400416034343698202024567812282596, 102682936250597, 140078821167186, 971180163888631, - 2811610676498878, - 4260950559948701, + 21888242871839275222246405745257275088548364400416034343698202494586853560766, + 21888242871839275222246405745257275088548364400416034343698203943926737010589, 1355858425470842, 360932284759847, 248006277221132, 543983687731821, 710712428677548, - 3845215636884372, + 21888242871839275222246405745257275088548364400416034343698203528191813946260, 423570489539782, 893140237139264, - 2936913361852060, - 2917464653652590, - 2492426147813321, + 21888242871839275222246405745257275088548364400416034343698202619889538913948, + 21888242871839275222246405745257275088548364400416034343698202600440830714478, + 21888242871839275222246405745257275088548364400416034343698202175402324875209, 25330276996280, - 2851645686686201, - 4102944020418508, - 3134247236888924, - 4266096078412821, + 21888242871839275222246405745257275088548364400416034343698202534621863748089, + 21888242871839275222246405745257275088548364400416034343698203785920197480396, + 21888242871839275222246405745257275088548364400416034343698202817223413950812, + 21888242871839275222246405745257275088548364400416034343698203949072255474709, 2241497081769357, 749798416900530, 992705592279163, @@ -17458,348 +17458,348 @@ pub global CRP: [Polynomial; L] = [ 255804031363693, 1873259056193281, 239057418560238, - 2810706200249727, - 3616259195663934, + 21888242871839275222246405745257275088548364400416034343698202493682377311615, + 21888242871839275222246405745257275088548364400416034343698203299235372725822, 1914701615857271, 1531868743617165, - 3137927259543631, + 21888242871839275222246405745257275088548364400416034343698202820903436605519, 1748266138501326, 677688076430864, - 3295734196433657, - 2905259769566113, + 21888242871839275222246405745257275088548364400416034343698202978710373495545, + 21888242871839275222246405745257275088548364400416034343698202588235946628001, 1103514348981171, - 3479603754492759, + 21888242871839275222246405745257275088548364400416034343698203162579931554647, 1616628709427641, 798346242198042, 1096506629312563, 2203001787795222, 341919500918781, 1704056141969998, - 4400216623035263, - 3326581544037046, + 21888242871839275222246405745257275088548364400416034343698204083192800097151, + 21888242871839275222246405745257275088548364400416034343698203009557721098934, 1318973120218079, 1471151639094282, - 4350519416606571, + 21888242871839275222246405745257275088548364400416034343698204033495593668459, 1974422624074039, - 3790185089294430, + 21888242871839275222246405745257275088548364400416034343698203473161266356318, 1029759150766067, 536712330186860, 922309526586221, 902326284257779, - 4036407900989604, + 21888242871839275222246405745257275088548364400416034343698203719384078051492, 1775157638019159, - 2595501688621231, - 4093336675860839, + 21888242871839275222246405745257275088548364400416034343698202278477865683119, + 21888242871839275222246405745257275088548364400416034343698203776312852922727, 1822420035658425, 897996569706741, 1808257261523862, - 3117060752317988, + 21888242871839275222246405745257275088548364400416034343698202800036929379876, 2595525149872, 1224388959359079, - 3781694680821242, + 21888242871839275222246405745257275088548364400416034343698203464670857883130, 128101388160688, - 2521746540844866, - 2497703865016926, - 4192453757895355, + 21888242871839275222246405745257275088548364400416034343698202204722717906754, + 21888242871839275222246405745257275088548364400416034343698202180680042078814, + 21888242871839275222246405745257275088548364400416034343698203875429934957243, 126338655224233, 302366828162892, 2199106294169218, 1660092409693826, - 2771488265437928, - 3667692515548805, + 21888242871839275222246405745257275088548364400416034343698202454464442499816, + 21888242871839275222246405745257275088548364400416034343698203350668692610693, 844856256998084, - 3336329927509299, + 21888242871839275222246405745257275088548364400416034343698203019306104571187, 633528909482046, 730939592337677, 1460225690256426, - 2292436515979249, + 21888242871839275222246405745257275088548364400416034343698201975412693041137, 1797944393852232, 1735377376794414, 353772066644668, 1761051057283506, 772677245567871, 898101364967953, - 3007456138527205, + 21888242871839275222246405745257275088548364400416034343698202690432315589093, 1532750883033632, 694479606747501, 2001044916508141, 587479823468930, - 3681579458288430, - 4414776882989200, + 21888242871839275222246405745257275088548364400416034343698203364555635350318, + 21888242871839275222246405745257275088548364400416034343698204097753060051088, 1264139736412429, 1983897676225124, - 3133008040467742, + 21888242871839275222246405745257275088548364400416034343698202815984217529630, 1573650831599884, - 2786804633715200, - 4043794214006268, + 21888242871839275222246405745257275088548364400416034343698202469780810777088, + 21888242871839275222246405745257275088548364400416034343698203726770391068156, 1088657782417749, 119610391147755, 1868698621907056, 1100461407646763, - 3955265482971189, - 3233416792633175, + 21888242871839275222246405745257275088548364400416034343698203638241660033077, + 21888242871839275222246405745257275088548364400416034343698202916392969695063, 274810311584459, 1500657657883658, 780270169682072, - 4155696193610237, + 21888242871839275222246405745257275088548364400416034343698203838672370672125, 1331190056897299, 2070598889710606, - 2916936043493516, + 21888242871839275222246405745257275088548364400416034343698202599912220555404, 175086380576279, 1393688669049942, 815752392038127, - 3465375722558764, + 21888242871839275222246405745257275088548364400416034343698203148351899620652, 1902464646833403, 1889013561082827, 64905979765650, - 2588319722075939, + 21888242871839275222246405745257275088548364400416034343698202271295899137827, 1055392990904400, 1984757020691321, 1358168578372945, 963857116180300, 1351398916549423, - 4020436140373055, + 21888242871839275222246405745257275088548364400416034343698203703412317434943, 1845410654681615, 507478239204285, - 3533158354416555, + 21888242871839275222246405745257275088548364400416034343698203216134531478443, 2170880354906754, 1347257629941825, 754792497870507, 1117121296658380, - 2296662184271995, + 21888242871839275222246405745257275088548364400416034343698201979638361333883, 307477648664920, - 3821016249812482, - 3367897335931246, + 21888242871839275222246405745257275088548364400416034343698203503992426874370, + 21888242871839275222246405745257275088548364400416034343698203050873512993134, 262895341524894, 1500671401706231, - 4028405682088893, + 21888242871839275222246405745257275088548364400416034343698203711381859150781, 889646576345425, 1981647238167558, - 4473062532076385, + 21888242871839275222246405745257275088548364400416034343698204156038709138273, 800616589626998, 666425078780716, - 4338219536437578, + 21888242871839275222246405745257275088548364400416034343698204021195713499466, 548214093766607, - 3571300754578978, - 2709452781852190, + 21888242871839275222246405745257275088548364400416034343698203254276931640866, + 21888242871839275222246405745257275088548364400416034343698202392428958914078, 282408919732637, - 3114180210960673, + 21888242871839275222246405745257275088548364400416034343698202797156388022561, 1220942283891661, 1633601302262636, - 3414655005262176, + 21888242871839275222246405745257275088548364400416034343698203097631182324064, 829587952354267, 1003958785798196, 188914404407911, - 3431575571668547, - 3508246996922625, + 21888242871839275222246405745257275088548364400416034343698203114551748730435, + 21888242871839275222246405745257275088548364400416034343698203191223173984513, 1844045864323957, 1880721559054446, 1904260879471742, - 3229855694298588, - 3663620120853132, - 4234680716887698, - 3322058209962661, + 21888242871839275222246405745257275088548364400416034343698202912831871360476, + 21888242871839275222246405745257275088548364400416034343698203346596297915020, + 21888242871839275222246405745257275088548364400416034343698203917656893949586, + 21888242871839275222246405745257275088548364400416034343698203005034387024549, 2182477557345093, - 3802431412112928, - 4380446849774912, + 21888242871839275222246405745257275088548364400416034343698203485407589174816, + 21888242871839275222246405745257275088548364400416034343698204063423026836800, 2204449723163814, - 2987966577035696, + 21888242871839275222246405745257275088548364400416034343698202670942754097584, 1714219729576408, 1014771909563195, - 3334734087951262, + 21888242871839275222246405745257275088548364400416034343698203017710265013150, 1686955272288322, - 3306387762134242, - 4381533538346193, + 21888242871839275222246405745257275088548364400416034343698202989363939196130, + 21888242871839275222246405745257275088548364400416034343698204064509715408081, 988149462558278, 2228100125052415, - 2393280660264739, - 4448003945752030, + 21888242871839275222246405745257275088548364400416034343698202076256837326627, + 21888242871839275222246405745257275088548364400416034343698204130980122813918, 1365405935329343, - 3575010150684633, + 21888242871839275222246405745257275088548364400416034343698203257986327746521, 655079599997094, - 2517907754483596, + 21888242871839275222246405745257275088548364400416034343698202200883931545484, 1217316334794462, 1940390000253948, 1190512861126779, - 3015379093436957, + 21888242871839275222246405745257275088548364400416034343698202698355270498845, 1377597362607487, 546454601216356, - 4305858906442810, - 2624201415522279, + 21888242871839275222246405745257275088548364400416034343698203988835083504698, + 21888242871839275222246405745257275088548364400416034343698202307177592584167, 126481743235929, 737362991094944, 1536074786808870, - 4464987978070053, + 21888242871839275222246405745257275088548364400416034343698204147964155131941, 1008561395833428, - 3872891618462948, - 3404228765336231, + 21888242871839275222246405745257275088548364400416034343698203555867795524836, + 21888242871839275222246405745257275088548364400416034343698203087204942398119, 537118585914081, 887449199209665, - 2521269369488575, + 21888242871839275222246405745257275088548364400416034343698202204245546550463, 1408888724468848, 155014446606421, 559651394817590, - 2727025636002454, + 21888242871839275222246405745257275088548364400416034343698202410001813064342, 1256250777524272, - 2317765809223369, - 2868259899059168, + 21888242871839275222246405745257275088548364400416034343698202000741986285257, + 21888242871839275222246405745257275088548364400416034343698202551236076121056, 2161997647961763, - 3457424106684984, + 21888242871839275222246405745257275088548364400416034343698203140400283746872, 2004715685002866, 1657526037344954, - 4239535646149451, + 21888242871839275222246405745257275088548364400416034343698203922511823211339, 764187523339200, - 3457269956048763, - 3661842772126066, - 3711688753877394, - 4361300890186678, + 21888242871839275222246405745257275088548364400416034343698203140246133110651, + 21888242871839275222246405745257275088548364400416034343698203344818949187954, + 21888242871839275222246405745257275088548364400416034343698203394664930939282, + 21888242871839275222246405745257275088548364400416034343698204044277067248566, 1566559861929691, 1742777937345569, - 2275029723916961, - 4421773503848925, + 21888242871839275222246405745257275088548364400416034343698201958005900978849, + 21888242871839275222246405745257275088548364400416034343698204104749680910813, 1229742766671528, 1559312618379065, 364373671769634, 1824869031810436, 1101287589609647, 1072243686589851, - 4306262793406145, - 2667366249771054, - 3044128489604632, + 21888242871839275222246405745257275088548364400416034343698203989238970468033, + 21888242871839275222246405745257275088548364400416034343698202350342426832942, + 21888242871839275222246405745257275088548364400416034343698202727104666666520, 97163825177164, - 3055357589962308, + 21888242871839275222246405745257275088548364400416034343698202738333767024196, 1651307740844031, - 2984882119230219, + 21888242871839275222246405745257275088548364400416034343698202667858296292107, 2000079737127973, - 2416149600903381, + 21888242871839275222246405745257275088548364400416034343698202099125777965269, 1781064129514435, 1913763633200566, - 3704247112135277, + 21888242871839275222246405745257275088548364400416034343698203387223289197165, 2155547220077055, - 3666695856424727, + 21888242871839275222246405745257275088548364400416034343698203349672033486615, 294245240044486, 2137466266137915, - 3602489607036744, - 2920385009985058, + 21888242871839275222246405745257275088548364400416034343698203285465784098632, + 21888242871839275222246405745257275088548364400416034343698202603361187046946, 1962765100281867, - 2819028910630953, - 3975610490575952, + 21888242871839275222246405745257275088548364400416034343698202502005087692841, + 21888242871839275222246405745257275088548364400416034343698203658586667637840, 2052329417123917, - 4093545510849270, - 4425560023507782, - 2837014132009542, - 3929543121362580, - 2354252117629219, + 21888242871839275222246405745257275088548364400416034343698203776521687911158, + 21888242871839275222246405745257275088548364400416034343698204108536200569670, + 21888242871839275222246405745257275088548364400416034343698202519990309071430, + 21888242871839275222246405745257275088548364400416034343698203612519298424468, + 21888242871839275222246405745257275088548364400416034343698202037228294691107, 1405752370313624, 2011125631330040, - 4280354475006333, - 4275703174206322, + 21888242871839275222246405745257275088548364400416034343698203963330652068221, + 21888242871839275222246405745257275088548364400416034343698203958679351268210, 790377578887842, 1262801162260766, 926711901283794, 1525172623600320, - 4265389109707196, + 21888242871839275222246405745257275088548364400416034343698203948365286769084, 1331881781399725, - 2709938690608081, - 3840154972882641, + 21888242871839275222246405745257275088548364400416034343698202392914867669969, + 21888242871839275222246405745257275088548364400416034343698203523131149944529, 2124366902167358, - 4412101108030364, + 21888242871839275222246405745257275088548364400416034343698204095077285092252, 1438653825289896, - 3730901597900770, + 21888242871839275222246405745257275088548364400416034343698203413877774962658, 1924456538706931, - 4470499536086334, + 21888242871839275222246405745257275088548364400416034343698204153475713148222, 2088814318139373, 931827934604539, - 3055577220225936, + 21888242871839275222246405745257275088548364400416034343698202738553397287824, 351809871766627, - 3718195754384309, - 2645406472825410, + 21888242871839275222246405745257275088548364400416034343698203401171931446197, + 21888242871839275222246405745257275088548364400416034343698202328382649887298, 1419997025452681, - 3809104236949577, - 2577600687978724, + 21888242871839275222246405745257275088548364400416034343698203492080414011465, + 21888242871839275222246405745257275088548364400416034343698202260576865040612, 1923146087844757, - 2867683022426957, - 2989150974829971, + 21888242871839275222246405745257275088548364400416034343698202550659199488845, + 21888242871839275222246405745257275088548364400416034343698202672127151891859, 77946594870364, - 2894875909115716, - 3463283955872073, - 3844350402352354, + 21888242871839275222246405745257275088548364400416034343698202577852086177604, + 21888242871839275222246405745257275088548364400416034343698203146260132933961, + 21888242871839275222246405745257275088548364400416034343698203527326579414242, 856608579122867, 1687674663448393, - 4088534816876066, - 2808328216299824, - 3096859885249273, - 3727697386036716, - 4044967187549564, - 4343168607719005, + 21888242871839275222246405745257275088548364400416034343698203771510993937954, + 21888242871839275222246405745257275088548364400416034343698202491304393361712, + 21888242871839275222246405745257275088548364400416034343698202779836062311161, + 21888242871839275222246405745257275088548364400416034343698203410673563098604, + 21888242871839275222246405745257275088548364400416034343698203727943364611452, + 21888242871839275222246405745257275088548364400416034343698204026144784780893, 1101494569322387, 1435088190569268, - 3869040684051665, - 2533920972287250, + 21888242871839275222246405745257275088548364400416034343698203552016861113553, + 21888242871839275222246405745257275088548364400416034343698202216897149349138, 2044797063255653, 1983494168144801, - 3721801741894812, + 21888242871839275222246405745257275088548364400416034343698203404777918956700, 232589355391767, - 2818620490925764, + 21888242871839275222246405745257275088548364400416034343698202501596667987652, 846329220454583, - 4170482522979726, - 3227728253137698, + 21888242871839275222246405745257275088548364400416034343698203853458700041614, + 21888242871839275222246405745257275088548364400416034343698202910704430199586, 862595222556729, 1121886328982341, 358432439832984, - 2543716864582119, - 3078224975225601, - 2862243020189483, + 21888242871839275222246405745257275088548364400416034343698202226693041644007, + 21888242871839275222246405745257275088548364400416034343698202761201152287489, + 21888242871839275222246405745257275088548364400416034343698202545219197251371, 2066458511952008, - 2922319012519139, + 21888242871839275222246405745257275088548364400416034343698202605295189581027, 2230585878822688, - 4034682759561244, - 4081479635461682, - 2383978861163055, - 2328407928140580, + 21888242871839275222246405745257275088548364400416034343698203717658936623132, + 21888242871839275222246405745257275088548364400416034343698203764455812523570, + 21888242871839275222246405745257275088548364400416034343698202066955038224943, + 21888242871839275222246405745257275088548364400416034343698202011384105202468, 1585587007250391, - 2267998019041915, + 21888242871839275222246405745257275088548364400416034343698201950974196103803, 474770164666171, - 3184461942385046, + 21888242871839275222246405745257275088548364400416034343698202867438119446934, 2119412987845107, 1609648590454500, 907389734408070, 1280614336418685, - 2962964254534740, - 3743340872794059, - 3235883365154988, + 21888242871839275222246405745257275088548364400416034343698202645940431596628, + 21888242871839275222246405745257275088548364400416034343698203426317049855947, + 21888242871839275222246405745257275088548364400416034343698202918859542216876, 280261218675508, - 3113511433187112, - 2573064089379539, - 3546908243368572, + 21888242871839275222246405745257275088548364400416034343698202796487610249000, + 21888242871839275222246405745257275088548364400416034343698202256040266441427, + 21888242871839275222246405745257275088548364400416034343698203229884420430460, 1045133528305499, - 3824531735818561, + 21888242871839275222246405745257275088548364400416034343698203507507912880449, 204349279465813, 195483365338749, - 3260477642159707, - 3281871446967283, + 21888242871839275222246405745257275088548364400416034343698202943453819221595, + 21888242871839275222246405745257275088548364400416034343698202964847624029171, 1628540157492603, - 3626452836445968, + 21888242871839275222246405745257275088548364400416034343698203309429013507856, 1469302936490760, - 3354888250077914, - 3476841856657437, - 4320628873405824, + 21888242871839275222246405745257275088548364400416034343698203037864427139802, + 21888242871839275222246405745257275088548364400416034343698203159818033719325, + 21888242871839275222246405745257275088548364400416034343698204003605050467712, 224124732025763, - 3799477123792516, - 2763597879362271, - 4062659124785904, - 3051633903497905, + 21888242871839275222246405745257275088548364400416034343698203482453300854404, + 21888242871839275222246405745257275088548364400416034343698202446574056424159, + 21888242871839275222246405745257275088548364400416034343698203745635301847792, + 21888242871839275222246405745257275088548364400416034343698202734610080559793, 768177883447179, - 4115896770635277, - 2426187955832602, + 21888242871839275222246405745257275088548364400416034343698203798872947697165, + 21888242871839275222246405745257275088548364400416034343698202109164132894490, 1928770928637458, - 2312881846901819, + 21888242871839275222246405745257275088548364400416034343698201995858023963707, 1438289512769337, - 3384989141830042, + 21888242871839275222246405745257275088548364400416034343698203067965318891930, 864869322817396, 701880863261242, - 4010490205475845, - 2678006326090247, + 21888242871839275222246405745257275088548364400416034343698203693466382537733, + 21888242871839275222246405745257275088548364400416034343698202360982503152135, 388086242212082, 478606574217098, 2079948519777799, @@ -17814,7 +17814,7 @@ pub global CRP: [Polynomial; L] = [ 142616397539839, 331898601527312, 487893373637277, - 4062894020421526, + 21888242871839275222246405745257275088548364400416034343698203745870197483414, 636582161540729, 59703808976645, 1556446140497821, @@ -17825,279 +17825,279 @@ pub global CRP: [Polynomial; L] = [ 1516624319317116, 1504267207758997, 1100648312934671, - 2319548777442618, + 21888242871839275222246405745257275088548364400416034343698202002524954504506, 938534474315183, 1410814294780765, 2069901505914042, 1953809899664927, - 3228835133598146, + 21888242871839275222246405745257275088548364400416034343698202911811310660034, 1622741800558956, - 3867877663006387, + 21888242871839275222246405745257275088548364400416034343698203550853840068275, 1540878734062818, 136721384768608, - 3373335704255443, + 21888242871839275222246405745257275088548364400416034343698203056311881317331, 1549507121404452, 1429534752525673, 964035906309419, 1922439553097454, 356504652106743, - 2359468821679519, + 21888242871839275222246405745257275088548364400416034343698202042444998741407, 706445364584977, - 2500561427215853, - 3052227158355010, + 21888242871839275222246405745257275088548364400416034343698202183537604277741, + 21888242871839275222246405745257275088548364400416034343698202735203335416898, 1459360023427811, 720854682259470, 1260921980413089, 879424505183323, 1769256636732876, - 4286901550141609, + 21888242871839275222246405745257275088548364400416034343698203969877727203497, 1391716485328476, - 4134542707225033, + 21888242871839275222246405745257275088548364400416034343698203817518884286921, 2052097720823985, - 4086433514463238, - 3389485485980460, - 3152815381473665, - 3784302057662539, - 3537035435572541, - 2569445481465649, - 3330846215088133, - 3046613441891466, - 3706310989462522, + 21888242871839275222246405745257275088548364400416034343698203769409691525126, + 21888242871839275222246405745257275088548364400416034343698203072461663042348, + 21888242871839275222246405745257275088548364400416034343698202835791558535553, + 21888242871839275222246405745257275088548364400416034343698203467278234724427, + 21888242871839275222246405745257275088548364400416034343698203220011612634429, + 21888242871839275222246405745257275088548364400416034343698202252421658527537, + 21888242871839275222246405745257275088548364400416034343698203013822392150021, + 21888242871839275222246405745257275088548364400416034343698202729589618953354, + 21888242871839275222246405745257275088548364400416034343698203389287166524410, 320622996894975, 1666033733778013, 1992270064465456, 446742044348497, 1231038002726691, - 4384104269678128, - 2660449052250717, - 3591817044359235, - 3813259045711189, + 21888242871839275222246405745257275088548364400416034343698204067080446740016, + 21888242871839275222246405745257275088548364400416034343698202343425229312605, + 21888242871839275222246405745257275088548364400416034343698203274793221421123, + 21888242871839275222246405745257275088548364400416034343698203496235222773077, 896197499699799, - 2539678558844490, + 21888242871839275222246405745257275088548364400416034343698202222654735906378, 390514552305279, 404891105146433, - 4011190374505320, - 3523990047118339, - 3490281896311876, + 21888242871839275222246405745257275088548364400416034343698203694166551567208, + 21888242871839275222246405745257275088548364400416034343698203206966224180227, + 21888242871839275222246405745257275088548364400416034343698203173258073373764, 1850584928826136, - 2475404464699741, + 21888242871839275222246405745257275088548364400416034343698202158380641761629, 470229902817712, 1356371731825956, 850336952553870, - 3419288820467650, - 2364383175578428, - 3590620126327289, - 3032124442202121, + 21888242871839275222246405745257275088548364400416034343698203102264997529538, + 21888242871839275222246405745257275088548364400416034343698202047359352640316, + 21888242871839275222246405745257275088548364400416034343698203273596303389177, + 21888242871839275222246405745257275088548364400416034343698202715100619264009, 811899671443569, 1599095205786780, 1691546918750614, 471978971640659, 1591357074044914, - 2611795554995926, + 21888242871839275222246405745257275088548364400416034343698202294771732057814, 993471813422067, 1350865781873902, 2173547685571818, - 2896621392929657, + 21888242871839275222246405745257275088548364400416034343698202579597569991545, 1876139235784435, 2014094160345967, 1563303645095170, - 4070462716992413, + 21888242871839275222246405745257275088548364400416034343698203753438894054301, 2245294938682294, 216614176230387, - 3958970276492746, + 21888242871839275222246405745257275088548364400416034343698203641946453554634, 2242893162483239, - 3772577816083836, - 3623060346351586, + 21888242871839275222246405745257275088548364400416034343698203455553993145724, + 21888242871839275222246405745257275088548364400416034343698203306036523413474, 1614432443512509, - 2420237027852908, + 21888242871839275222246405745257275088548364400416034343698202103213204914796, 789969696482538, - 2927597540913271, + 21888242871839275222246405745257275088548364400416034343698202610573717975159, 94708010591607, - 2815033345174465, + 21888242871839275222246405745257275088548364400416034343698202498009522236353, 963226627912711, 797718063837428, - 3589550882955996, - 3025230936057376, - 3374116152290947, - 3257803376629230, - 3011460559326844, - 3624776666002426, + 21888242871839275222246405745257275088548364400416034343698203272527060017884, + 21888242871839275222246405745257275088548364400416034343698202708207113119264, + 21888242871839275222246405745257275088548364400416034343698203057092329352835, + 21888242871839275222246405745257275088548364400416034343698202940779553691118, + 21888242871839275222246405745257275088548364400416034343698202694436736388732, + 21888242871839275222246405745257275088548364400416034343698203307752843064314, 832015194015815, - 2829339488844258, + 21888242871839275222246405745257275088548364400416034343698202512315665906146, 807779269846299, - 3248084958399789, + 21888242871839275222246405745257275088548364400416034343698202931061135461677, 822269192758094, - 2376142135191412, + 21888242871839275222246405745257275088548364400416034343698202059118312253300, 751594488541133, 2202529042507775, 1094039068396429, 1020475380775994, - 2990356488980059, - 4230878635319638, + 21888242871839275222246405745257275088548364400416034343698202673332666041947, + 21888242871839275222246405745257275088548364400416034343698203913854812381526, 1473153986303248, - 2364174757167882, + 21888242871839275222246405745257275088548364400416034343698202047150934229770, 530811623704354, 262442786351603, - 2894059548379242, + 21888242871839275222246405745257275088548364400416034343698202577035725441130, 1459613248458943, 296144763692087, 331251433342889, - 3861954809093340, - 4397328558890921, - 3290821317531616, + 21888242871839275222246405745257275088548364400416034343698203544930986155228, + 21888242871839275222246405745257275088548364400416034343698204080304735952809, + 21888242871839275222246405745257275088548364400416034343698202973797494593504, 1958041661184410, - 3537792046807037, - 3171361746073907, - 4127830625968640, + 21888242871839275222246405745257275088548364400416034343698203220768223868925, + 21888242871839275222246405745257275088548364400416034343698202854337923135795, + 21888242871839275222246405745257275088548364400416034343698203810806803030528, 32846453337281, - 3954178946630342, - 4057825868925840, + 21888242871839275222246405745257275088548364400416034343698203637155123692230, + 21888242871839275222246405745257275088548364400416034343698203740802045987728, 793938740208073, - 4058943672542564, - 2706410299196079, - 3209235715068397, - 3880382572578334, - 3146396682389114, + 21888242871839275222246405745257275088548364400416034343698203741919849604452, + 21888242871839275222246405745257275088548364400416034343698202389386476257967, + 21888242871839275222246405745257275088548364400416034343698202892211892130285, + 21888242871839275222246405745257275088548364400416034343698203563358749640222, + 21888242871839275222246405745257275088548364400416034343698202829372859451002, 1237629909298082, - 3809790376702179, + 21888242871839275222246405745257275088548364400416034343698203492766553764067, 2082066203382402, 1254988172044867, - 4102310316844040, + 21888242871839275222246405745257275088548364400416034343698203785286493905928, 665683804081887, 1711503553821557, 384684588290361, 529449539954032, - 4016207780880971, + 21888242871839275222246405745257275088548364400416034343698203699183957942859, 1271129139219910, 1491345755419460, 1446172954030136, 814919807186393, - 2317904527502876, + 21888242871839275222246405745257275088548364400416034343698202000880704564764, 494686130190402, 776647397012024, 1932551742903415, - 4470706775363966, - 3759862352213486, + 21888242871839275222246405745257275088548364400416034343698204153682952425854, + 21888242871839275222246405745257275088548364400416034343698203442838529275374, 668519962590579, - 3166002322839377, + 21888242871839275222246405745257275088548364400416034343698202848978499901265, 2149153209317834, - 2600820688534428, - 2713790817801493, + 21888242871839275222246405745257275088548364400416034343698202283796865596316, + 21888242871839275222246405745257275088548364400416034343698202396766994863381, 907065830073479, - 2370921344583998, + 21888242871839275222246405745257275088548364400416034343698202053897521645886, 79134305963293, 1926183252907969, - 2790132891789165, + 21888242871839275222246405745257275088548364400416034343698202473109068851053, 1215773244257333, 932283027359118, - 4189025927791964, - 2534536595033475, - 3244795748445441, - 3760876888416129, - 2520579000109656, + 21888242871839275222246405745257275088548364400416034343698203872002104853852, + 21888242871839275222246405745257275088548364400416034343698202217512772095363, + 21888242871839275222246405745257275088548364400416034343698202927771925507329, + 21888242871839275222246405745257275088548364400416034343698203443853065478017, + 21888242871839275222246405745257275088548364400416034343698202203555177171544, 1297792578250349, 1367971809751788, - 2639084732650411, + 21888242871839275222246405745257275088548364400416034343698202322060909712299, 406035190025547, - 4437818609008848, + 21888242871839275222246405745257275088548364400416034343698204120794786070736, 385841934543128, - 2286011420144137, + 21888242871839275222246405745257275088548364400416034343698201968987597206025, 99310898634923, 1089083968401068, 1480967004542501, - 2739540609402774, + 21888242871839275222246405745257275088548364400416034343698202422516786464662, 928947660078083, - 3105170573517340, - 4411216749967177, + 21888242871839275222246405745257275088548364400416034343698202788146750579228, + 21888242871839275222246405745257275088548364400416034343698204094192927029065, 200341660356282, - 4484599137616995, - 3788406963893925, - 3115905193612239, - 3569401636462158, - 4440267067775726, - 4369768140920931, + 21888242871839275222246405745257275088548364400416034343698204167575314678883, + 21888242871839275222246405745257275088548364400416034343698203471383140955813, + 21888242871839275222246405745257275088548364400416034343698202798881370674127, + 21888242871839275222246405745257275088548364400416034343698203252377813524046, + 21888242871839275222246405745257275088548364400416034343698204123243244837614, + 21888242871839275222246405745257275088548364400416034343698204052744317982819, 1223736650229660, - 2911710084847093, - 2759170483896340, + 21888242871839275222246405745257275088548364400416034343698202594686261908981, + 21888242871839275222246405745257275088548364400416034343698202442146660958228, 411795136271832, - 3993759750213049, + 21888242871839275222246405745257275088548364400416034343698203676735927274937, 431232806188924, 174468167312999, 1082189946669173, - 4312248088863451, + 21888242871839275222246405745257275088548364400416034343698203995224265925339, 27714895021821, - 4089431665431919, - 3973236517339654, - 3072904645687655, + 21888242871839275222246405745257275088548364400416034343698203772407842493807, + 21888242871839275222246405745257275088548364400416034343698203656212694401542, + 21888242871839275222246405745257275088548364400416034343698202755880822749543, 1158364040174150, 1349761955635293, 1357681693028571, 1053382981534758, - 4095415175610791, + 21888242871839275222246405745257275088548364400416034343698203778391352672679, 1283923255430299, 15130781466357, 1524208393940323, 710698719164499, - 4233676782373692, - 3858470935343494, - 2268245358530827, - 3821051083014201, + 21888242871839275222246405745257275088548364400416034343698203916652959435580, + 21888242871839275222246405745257275088548364400416034343698203541447112405382, + 21888242871839275222246405745257275088548364400416034343698201951221535592715, + 21888242871839275222246405745257275088548364400416034343698203504027260076089, 116920584400524, 305016925007572, - 4436926041954314, + 21888242871839275222246405745257275088548364400416034343698204119902219016202, 207708190116209, 567132079058777, 446842054189728, - 3361885365165834, + 21888242871839275222246405745257275088548364400416034343698203044861542227722, 1475223408857898, 1264110990345519, - 4480291821744573, - 4133825175646237, - 3061829655580970, - 2285455114355324, + 21888242871839275222246405745257275088548364400416034343698204163267998806461, + 21888242871839275222246405745257275088548364400416034343698203816801352708125, + 21888242871839275222246405745257275088548364400416034343698202744805832642858, + 21888242871839275222246405745257275088548364400416034343698201968431291417212, 173716245304092, - 3676681583694053, + 21888242871839275222246405745257275088548364400416034343698203359657760755941, 1074793077219264, - 3903146262846826, - 3147485257059314, - 3127806598729156, + 21888242871839275222246405745257275088548364400416034343698203586122439908714, + 21888242871839275222246405745257275088548364400416034343698202830461434121202, + 21888242871839275222246405745257275088548364400416034343698202810782775791044, 639962899381831, - 2741250712960621, + 21888242871839275222246405745257275088548364400416034343698202424226890022509, 520641988373448, - 3904094096903041, - 3561233211834312, + 21888242871839275222246405745257275088548364400416034343698203587070273964929, + 21888242871839275222246405745257275088548364400416034343698203244209388896200, 1671594034349433, 556914038872847, - 4036064624740365, - 3303116686706542, - 3264834199492321, - 4451912867321509, - 3533442822156566, - 2431765231221915, - 3685085442567973, + 21888242871839275222246405745257275088548364400416034343698203719040801802253, + 21888242871839275222246405745257275088548364400416034343698202986092863768430, + 21888242871839275222246405745257275088548364400416034343698202947810376554209, + 21888242871839275222246405745257275088548364400416034343698204134889044383397, + 21888242871839275222246405745257275088548364400416034343698203216418999218454, + 21888242871839275222246405745257275088548364400416034343698202114741408283803, + 21888242871839275222246405745257275088548364400416034343698203368061619629861, 158779816667819, 808502621908626, 1695963020597481, - 3671639864567874, - 3025695339863206, - 4401838612293347, + 21888242871839275222246405745257275088548364400416034343698203354616041629762, + 21888242871839275222246405745257275088548364400416034343698202708671516925094, + 21888242871839275222246405745257275088548364400416034343698204084814789355235, 1456492757062454, 263094372946306, 1567870867784006, 2117752446574128, - 3706951821120873, - 3515514808416607, + 21888242871839275222246405745257275088548364400416034343698203389927998182761, + 21888242871839275222246405745257275088548364400416034343698203198490985478495, 532680209454680, - 3686879662313135, - 3946115476978983, + 21888242871839275222246405745257275088548364400416034343698203369855839375023, + 21888242871839275222246405745257275088548364400416034343698203629091654040871, 1616479306453723, - 2368750331450329, + 21888242871839275222246405745257275088548364400416034343698202051726508512217, 1947069123679191, 164787137322110, 228505587394858, 1498378408042397, 965297919509117, - 4253192375715362, + 21888242871839275222246405745257275088548364400416034343698203936168552777250, 1644123993629922, 1222950896519312, 1377009818576298, @@ -18107,70 +18107,70 @@ pub global CRP: [Polynomial; L] = [ 1729519493812738, 1440971934662400, 1342825276143518, - 2809157529815888, + 21888242871839275222246405745257275088548364400416034343698202492133706877776, 1619593522790180, 2205756955497860, 1282981323018971, 831658726359322, - 3603268210417850, + 21888242871839275222246405745257275088548364400416034343698203286244387479738, 1581174502141845, 913308795450934, - 3637804209649492, + 21888242871839275222246405745257275088548364400416034343698203320780386711380, 389091675124158, 1035965110462909, 1722815584694820, - 3317816209605525, + 21888242871839275222246405745257275088548364400416034343698203000792386667413, 1090956004077913, 19974008703097, - 3929224226024238, + 21888242871839275222246405745257275088548364400416034343698203612200403086126, 1132652777914309, - 3717766284584906, + 21888242871839275222246405745257275088548364400416034343698203400742461646794, 1987400164742517, - 3858810442545595, + 21888242871839275222246405745257275088548364400416034343698203541786619607483, 1568908861660494, 972407173732611, 470488523759210, - 2831657794929706, + 21888242871839275222246405745257275088548364400416034343698202514633971991594, 1561100439886459, - 2380583451534144, + 21888242871839275222246405745257275088548364400416034343698202063559628596032, 429989453510845, - 3515558326960237, - 2898720598761166, - 3921165870023960, + 21888242871839275222246405745257275088548364400416034343698203198534504022125, + 21888242871839275222246405745257275088548364400416034343698202581696775823054, + 21888242871839275222246405745257275088548364400416034343698203604142047085848, 1122225518017834, - 3539119508607192, - 4044309927799852, - 2874462692026268, - 3977196081078859, - 3387104388876935, - 3401263521247479, - 2548966644459888, + 21888242871839275222246405745257275088548364400416034343698203222095685669080, + 21888242871839275222246405745257275088548364400416034343698203727286104861740, + 21888242871839275222246405745257275088548364400416034343698202557438869088156, + 21888242871839275222246405745257275088548364400416034343698203660172258140747, + 21888242871839275222246405745257275088548364400416034343698203070080565938823, + 21888242871839275222246405745257275088548364400416034343698203084239698309367, + 21888242871839275222246405745257275088548364400416034343698202231942821521776, 2017900511663048, - 4416009714463946, - 4029668143356838, + 21888242871839275222246405745257275088548364400416034343698204098985891525834, + 21888242871839275222246405745257275088548364400416034343698203712644320418726, 1443339250132868, - 4379296343819288, + 21888242871839275222246405745257275088548364400416034343698204062272520881176, 1645381449879835, 1384510289716664, - 4146228013052034, - 2253538482518498, - 3978447596930615, + 21888242871839275222246405745257275088548364400416034343698203829204190113922, + 21888242871839275222246405745257275088548364400416034343698201936514659580386, + 21888242871839275222246405745257275088548364400416034343698203661423773992503, 1772884361184293, - 3477964686731076, - 3116295928839981, - 2838421351748820, + 21888242871839275222246405745257275088548364400416034343698203160940863792964, + 21888242871839275222246405745257275088548364400416034343698202799272105901869, + 21888242871839275222246405745257275088548364400416034343698202521397528810708, 577821740259400, - 2981309029831172, + 21888242871839275222246405745257275088548364400416034343698202664285206893060, 1608854035961946, 1925158005814233, - 3873784951123135, - 3022234837051488, - 3933217078076587, + 21888242871839275222246405745257275088548364400416034343698203556761128185023, + 21888242871839275222246405745257275088548364400416034343698202705211014113376, + 21888242871839275222246405745257275088548364400416034343698203616193255138475, 149801280756591, 1799009933348451, 1002151514722068, - 4204675717912859, - 4062339015594563, + 21888242871839275222246405745257275088548364400416034343698203887651894974747, + 21888242871839275222246405745257275088548364400416034343698203745315192656451, 1983061729420439, 1577353903010017, 1747901980058880, @@ -18178,43 +18178,43 @@ pub global CRP: [Polynomial; L] = [ 2109405675389263, 1295534891069916, 214524822004658, - 3429165747302697, + 21888242871839275222246405745257275088548364400416034343698203112141924364585, 307402375332328, - 3596812969996667, - 2271088793307099, + 21888242871839275222246405745257275088548364400416034343698203279789147058555, + 21888242871839275222246405745257275088548364400416034343698201954064970368987, 1964815698511438, - 2474452401214093, - 3818604899347167, + 21888242871839275222246405745257275088548364400416034343698202157428578275981, + 21888242871839275222246405745257275088548364400416034343698203501581076409055, 564678719575238, 616162535682398, - 3786658858678322, - 4388211722352924, - 4304634806922803, + 21888242871839275222246405745257275088548364400416034343698203469635035740210, + 21888242871839275222246405745257275088548364400416034343698204071187899414812, + 21888242871839275222246405745257275088548364400416034343698203987610983984691, 2157991613719631, 1730472151830952, 1192454999225394, - 2404740766802158, + 21888242871839275222246405745257275088548364400416034343698202087716943864046, 1141126483375001, - 2664800346418642, - 3507771410315841, - 3749523642416215, - 3749492647946424, + 21888242871839275222246405745257275088548364400416034343698202347776523480530, + 21888242871839275222246405745257275088548364400416034343698203190747587377729, + 21888242871839275222246405745257275088548364400416034343698203432499819478103, + 21888242871839275222246405745257275088548364400416034343698203432468825008312, 1943749133028761, - 3699872013753824, - 3042408195498265, - 2619905577512624, + 21888242871839275222246405745257275088548364400416034343698203382848190815712, + 21888242871839275222246405745257275088548364400416034343698202725384372560153, + 21888242871839275222246405745257275088548364400416034343698202302881754574512, 790318550008356, - 3798969982455062, - 3930696693286258, - 2305209145273794, - 3438263723848302, - 3630427218119072, + 21888242871839275222246405745257275088548364400416034343698203481946159516950, + 21888242871839275222246405745257275088548364400416034343698203613672870348146, + 21888242871839275222246405745257275088548364400416034343698201988185322335682, + 21888242871839275222246405745257275088548364400416034343698203121239900910190, + 21888242871839275222246405745257275088548364400416034343698203313403395180960, 1919945210232069, - 4048508759112470, - 3306459744573711, + 21888242871839275222246405745257275088548364400416034343698203731484936174358, + 21888242871839275222246405745257275088548364400416034343698202989435921635599, 1586417420482557, - 2396775916286639, - 3167399380996683, + 21888242871839275222246405745257275088548364400416034343698202079752093348527, + 21888242871839275222246405745257275088548364400416034343698202850375558058571, 1766589770954659, 140809165144641, 1761342577766593, @@ -18222,354 +18222,354 @@ pub global CRP: [Polynomial; L] = [ 1546140680157454, 115101129401267, 1187873939365294, - 3535209712453316, - 2356110054719839, + 21888242871839275222246405745257275088548364400416034343698203218185889515204, + 21888242871839275222246405745257275088548364400416034343698202039086231781727, 1996038660406594, - 4259983708090779, + 21888242871839275222246405745257275088548364400416034343698203942959885152667, 406565501934588, - 3511884609190178, - 4366946582048712, + 21888242871839275222246405745257275088548364400416034343698203194860786252066, + 21888242871839275222246405745257275088548364400416034343698204049922759110600, 1819141097548328, - 3336145396587623, + 21888242871839275222246405745257275088548364400416034343698203019121573649511, 1179729985901662, - 2676096414694034, + 21888242871839275222246405745257275088548364400416034343698202359072591755922, 886409516751538, - 3755693870856466, - 3292832806009615, + 21888242871839275222246405745257275088548364400416034343698203438670047918354, + 21888242871839275222246405745257275088548364400416034343698202975808983071503, 1756285173420451, 1744960681250386, - 2744534088764602, - 3686342317328978, - 4481905432576554, - 4004518280450648, + 21888242871839275222246405745257275088548364400416034343698202427510265826490, + 21888242871839275222246405745257275088548364400416034343698203369318494390866, + 21888242871839275222246405745257275088548364400416034343698204164881609638442, + 21888242871839275222246405745257275088548364400416034343698203687494457512536, 702686338808539, 1844446001902098, - 2258832758893139, - 2312931253761109, + 21888242871839275222246405745257275088548364400416034343698201941808935955027, + 21888242871839275222246405745257275088548364400416034343698201995907430822997, 2123865611870761, - 3013061797012259, + 21888242871839275222246405745257275088548364400416034343698202696037974074147, 1253159484349048, - 2384168654666564, - 3322359400192913, + 21888242871839275222246405745257275088548364400416034343698202067144831728452, + 21888242871839275222246405745257275088548364400416034343698203005335577254801, 899283344317461, - 4119176819221467, + 21888242871839275222246405745257275088548364400416034343698203802152996283355, 479656132097595, 1709734488108132, 1939335914067250, - 2410567797389267, - 3925247709067363, - 4448031132955243, - 3095809567614617, - 4178066250014160, - 3984229756663991, - 3877935072223597, + 21888242871839275222246405745257275088548364400416034343698202093543974451155, + 21888242871839275222246405745257275088548364400416034343698203608223886129251, + 21888242871839275222246405745257275088548364400416034343698204131007310017131, + 21888242871839275222246405745257275088548364400416034343698202778785744676505, + 21888242871839275222246405745257275088548364400416034343698203861042427076048, + 21888242871839275222246405745257275088548364400416034343698203667205933725879, + 21888242871839275222246405745257275088548364400416034343698203560911249285485, 1043034157809422, - 3135226628114249, - 2374381825475160, - 2376043631541911, - 2509621265171851, + 21888242871839275222246405745257275088548364400416034343698202818202805176137, + 21888242871839275222246405745257275088548364400416034343698202057358002537048, + 21888242871839275222246405745257275088548364400416034343698202059019808603799, + 21888242871839275222246405745257275088548364400416034343698202192597442233739, 1297976803451617, 1674981421444997, 666171874694905, 1986425626866260, - 4301148266127392, + 21888242871839275222246405745257275088548364400416034343698203984124443189280, 134026951903809, 128774291522997, - 3393729171129762, - 3677334431404846, + 21888242871839275222246405745257275088548364400416034343698203076705348191650, + 21888242871839275222246405745257275088548364400416034343698203360310608466734, 425165020141917, 1293755060777408, - 3184189804786589, - 2729142175020967, - 2822628626923512, - 4014851951749587, - 3802873934966068, + 21888242871839275222246405745257275088548364400416034343698202867165981848477, + 21888242871839275222246405745257275088548364400416034343698202412118352082855, + 21888242871839275222246405745257275088548364400416034343698202505604803985400, + 21888242871839275222246405745257275088548364400416034343698203697828128811475, + 21888242871839275222246405745257275088548364400416034343698203485850112027956, 1121372120777163, - 4199330514747707, - 2752728514514601, - 3708216197249901, + 21888242871839275222246405745257275088548364400416034343698203882306691809595, + 21888242871839275222246405745257275088548364400416034343698202435704691576489, + 21888242871839275222246405745257275088548364400416034343698203391192374311789, 86255552322522, - 2326212103524012, - 4037327901291770, - 2772524284158642, + 21888242871839275222246405745257275088548364400416034343698202009188280585900, + 21888242871839275222246405745257275088548364400416034343698203720304078353658, + 21888242871839275222246405745257275088548364400416034343698202455500461220530, 470694028890308, 338287509365170, - 3586839135310037, + 21888242871839275222246405745257275088548364400416034343698203269815312371925, 304980614496256, - 4380920243344684, + 21888242871839275222246405745257275088548364400416034343698204063896420406572, 890290081577416, 568748528107173, 1036709167479730, - 3860839708654900, - 3274280929069099, + 21888242871839275222246405745257275088548364400416034343698203543815885716788, + 21888242871839275222246405745257275088548364400416034343698202957257106130987, 1287879983076043, 160773701709798, - 4473048346002141, - 3579883779192132, + 21888242871839275222246405745257275088548364400416034343698204156024523064029, + 21888242871839275222246405745257275088548364400416034343698203262859956254020, 357086402465740, - 3866998402948219, + 21888242871839275222246405745257275088548364400416034343698203549974580010107, 937877575874774, 1584633244463060, 279691591025914, 301784775710479, - 4047133273863586, - 2609384175241813, - 2413085333230918, + 21888242871839275222246405745257275088548364400416034343698203730109450925474, + 21888242871839275222246405745257275088548364400416034343698202292360352303701, + 21888242871839275222246405745257275088548364400416034343698202096061510292806, 2172094237580800, - 3320714467782968, - 2257726727695119, - 2855038362748124, + 21888242871839275222246405745257275088548364400416034343698203003690644844856, + 21888242871839275222246405745257275088548364400416034343698201940702904757007, + 21888242871839275222246405745257275088548364400416034343698202538014539810012, 741427708527684, 486975606704627, 1107580810728038, 1547468457568768, - 3773205856946658, - 3457535030210188, + 21888242871839275222246405745257275088548364400416034343698203456182034008546, + 21888242871839275222246405745257275088548364400416034343698203140511207272076, 1871601547605379, 1906205252036779, 1452810793524574, - 4133261797414645, - 3620326249805135, + 21888242871839275222246405745257275088548364400416034343698203816237974476533, + 21888242871839275222246405745257275088548364400416034343698203303302426867023, 766909536154001, - 3941706394386894, + 21888242871839275222246405745257275088548364400416034343698203624682571448782, 709999315299852, 2013115321041959, - 4159477137721581, + 21888242871839275222246405745257275088548364400416034343698203842453314783469, 1475146449339097, - 2929869052371658, + 21888242871839275222246405745257275088548364400416034343698202612845229433546, 608436133020522, - 4340213539765720, - 2300440729395978, + 21888242871839275222246405745257275088548364400416034343698204023189716827608, + 21888242871839275222246405745257275088548364400416034343698201983416906457866, 1423228364889630, - 3922691822051352, + 21888242871839275222246405745257275088548364400416034343698203605667999113240, 429682707993676, - 2341758778070607, + 21888242871839275222246405745257275088548364400416034343698202024734955132495, 238291726443618, 1200050400634408, - 2971921498185758, + 21888242871839275222246405745257275088548364400416034343698202654897675247646, 608426961794684, - 3968410015657247, + 21888242871839275222246405745257275088548364400416034343698203651386192719135, 238742135762294, - 3689794906268557, + 21888242871839275222246405745257275088548364400416034343698203372771083330445, 1749443221490376, 439369799694805, 874063731918196, - 3814758513696415, - 2737801813751748, + 21888242871839275222246405745257275088548364400416034343698203497734690758303, + 21888242871839275222246405745257275088548364400416034343698202420777990813636, 593940516503151, 891242771462511, - 4176401191406134, + 21888242871839275222246405745257275088548364400416034343698203859377368468022, 240502287870858, 2240030237025995, 1407279612236171, - 4347826634015577, + 21888242871839275222246405745257275088548364400416034343698204030802811077465, 294203204989898, - 2531974066743905, + 21888242871839275222246405745257275088548364400416034343698202214950243805793, 1933045935469792, 822047396501941, - 4387318539019505, - 2773289836999179, + 21888242871839275222246405745257275088548364400416034343698204070294716081393, + 21888242871839275222246405745257275088548364400416034343698202456266014061067, 1619100871423805, - 3481824133527366, - 3171684467475200, + 21888242871839275222246405745257275088548364400416034343698203164800310589254, + 21888242871839275222246405745257275088548364400416034343698202854660644537088, 51958755260397, - 3535179019094553, - 3893807336810543, - 3155912310846631, - 3202631647076071, - 2581594547420613, - 3145952107716225, - 2328971221782964, - 3906567647239008, - 2638521685482154, - 2395971480605818, + 21888242871839275222246405745257275088548364400416034343698203218155196156441, + 21888242871839275222246405745257275088548364400416034343698203576783513872431, + 21888242871839275222246405745257275088548364400416034343698202838888487908519, + 21888242871839275222246405745257275088548364400416034343698202885607824137959, + 21888242871839275222246405745257275088548364400416034343698202264570724482501, + 21888242871839275222246405745257275088548364400416034343698202828928284778113, + 21888242871839275222246405745257275088548364400416034343698202011947398844852, + 21888242871839275222246405745257275088548364400416034343698203589543824300896, + 21888242871839275222246405745257275088548364400416034343698202321497862544042, + 21888242871839275222246405745257275088548364400416034343698202078947657667706, 1829472915136553, 718020989929737, - 2569786969108394, - 3185958489837046, + 21888242871839275222246405745257275088548364400416034343698202252763146170282, + 21888242871839275222246405745257275088548364400416034343698202868934666898934, 1931293374972903, 1128031789499721, 499735153565259, - 2563829893037961, - 2842965229680869, + 21888242871839275222246405745257275088548364400416034343698202246806070099849, + 21888242871839275222246405745257275088548364400416034343698202525941406742757, 2225115595520455, - 2308750838618493, + 21888242871839275222246405745257275088548364400416034343698201991727015680381, 933072067886867, - 3442738045919088, + 21888242871839275222246405745257275088548364400416034343698203125714222980976, 1717724229395832, - 2687925774973182, - 4314546954798110, + 21888242871839275222246405745257275088548364400416034343698202370901952035070, + 21888242871839275222246405745257275088548364400416034343698203997523131859998, 2046697079646674, - 3677060851894540, + 21888242871839275222246405745257275088548364400416034343698203360037028956428, 2101452971289167, - 3672786954931088, - 2989475356706711, - 3970266290021010, - 2842205159805315, - 2818688092305111, - 4488992342324127, - 4071023728682981, + 21888242871839275222246405745257275088548364400416034343698203355763131992976, + 21888242871839275222246405745257275088548364400416034343698202672451533768599, + 21888242871839275222246405745257275088548364400416034343698203653242467082898, + 21888242871839275222246405745257275088548364400416034343698202525181336867203, + 21888242871839275222246405745257275088548364400416034343698202501664269366999, + 21888242871839275222246405745257275088548364400416034343698204171968519386015, + 21888242871839275222246405745257275088548364400416034343698203753999905744869, 346522265998285, - 3585781706567541, + 21888242871839275222246405745257275088548364400416034343698203268757883629429, 1254006674884795, - 3364133288920598, - 2678323021032490, - 4162721264986075, - 3902367059681053, + 21888242871839275222246405745257275088548364400416034343698203047109465982486, + 21888242871839275222246405745257275088548364400416034343698202361299198094378, + 21888242871839275222246405745257275088548364400416034343698203845697442047963, + 21888242871839275222246405745257275088548364400416034343698203585343236742941, 1699955520791395, - 3667340240259181, - 2277794123606033, + 21888242871839275222246405745257275088548364400416034343698203350316417321069, + 21888242871839275222246405745257275088548364400416034343698201960770300667921, 221197250422168, 725073256506412, 297227479782812, - 2737339678798013, - 4099272359085846, - 3771894975267643, - 2444693720377489, + 21888242871839275222246405745257275088548364400416034343698202420315855859901, + 21888242871839275222246405745257275088548364400416034343698203782248536147734, + 21888242871839275222246405745257275088548364400416034343698203454871152329531, + 21888242871839275222246405745257275088548364400416034343698202127669897439377, 1110851840904798, - 2991821927344000, + 21888242871839275222246405745257275088548364400416034343698202674798104405888, 1912625915544628, 71803652058542, - 3864490280766849, + 21888242871839275222246405745257275088548364400416034343698203547466457828737, 1155544166032667, 39804664266458, - 4095954471466609, + 21888242871839275222246405745257275088548364400416034343698203778930648528497, 2247306792008601, - 2599146342918547, + 21888242871839275222246405745257275088548364400416034343698202282122519980435, 14252145138272, - 4400818716351115, + 21888242871839275222246405745257275088548364400416034343698204083794893413003, 767892495535343, 184971846657203, - 3750150609747384, + 21888242871839275222246405745257275088548364400416034343698203433126786809272, 1060108400973750, 1107386118421037, 629280532890728, - 4088234704636928, - 4132460515545727, - 2706909930494762, - 3226937553922347, + 21888242871839275222246405745257275088548364400416034343698203771210881698816, + 21888242871839275222246405745257275088548364400416034343698203815436692607615, + 21888242871839275222246405745257275088548364400416034343698202389886107556650, + 21888242871839275222246405745257275088548364400416034343698202909913730984235, 1089823215110505, 1725452393506331, 792223085356473, - 3907797932788362, + 21888242871839275222246405745257275088548364400416034343698203590774109850250, 158247731642717, 1431992288480196, 2081806242844110, - 4442090378211735, - 3071314435530792, - 4257938914010605, + 21888242871839275222246405745257275088548364400416034343698204125066555273623, + 21888242871839275222246405745257275088548364400416034343698202754290612592680, + 21888242871839275222246405745257275088548364400416034343698203940915091072493, 1510015570703676, - 4268690430946594, - 4411236883778716, - 3871666661384370, - 3685239087134172, - 3239295854522645, - 3326761575405087, + 21888242871839275222246405745257275088548364400416034343698203951666608008482, + 21888242871839275222246405745257275088548364400416034343698204094213060840604, + 21888242871839275222246405745257275088548364400416034343698203554642838446258, + 21888242871839275222246405745257275088548364400416034343698203368215264196060, + 21888242871839275222246405745257275088548364400416034343698202922272031584533, + 21888242871839275222246405745257275088548364400416034343698203009737752466975, 835394262963145, 1733595830339593, 525363674418171, 308483776582911, - 2865543722388470, + 21888242871839275222246405745257275088548364400416034343698202548519899450358, 694373115375271, 1473973107108660, 1988522481185199, 1676266137181869, - 4366685060553315, - 4198084598215843, + 21888242871839275222246405745257275088548364400416034343698204049661237615203, + 21888242871839275222246405745257275088548364400416034343698203881060775277731, 1923103294839110, - 2388151135891943, - 2325490282250723, + 21888242871839275222246405745257275088548364400416034343698202071127312953831, + 21888242871839275222246405745257275088548364400416034343698202008466459312611, 1838399318022276, 1014832383194350, 104246145235988, - 3695732213320256, - 4424832374847903, - 4424523616155365, - 3253381324731396, - 2403473860144024, - 3257213391855196, + 21888242871839275222246405745257275088548364400416034343698203378708390382144, + 21888242871839275222246405745257275088548364400416034343698204107808551909791, + 21888242871839275222246405745257275088548364400416034343698204107499793217253, + 21888242871839275222246405745257275088548364400416034343698202936357501793284, + 21888242871839275222246405745257275088548364400416034343698202086450037205912, + 21888242871839275222246405745257275088548364400416034343698202940189568917084, 1492295993702732, 1192027590889021, - 2675199567852740, + 21888242871839275222246405745257275088548364400416034343698202358175744914628, 1589616037524272, - 4359306643024280, + 21888242871839275222246405745257275088548364400416034343698204042282820086168, 194966075628990, 330918991175005, 769352180364694, 1400521375017959, 1242621343874264, - 2705337091903216, + 21888242871839275222246405745257275088548364400416034343698202388313268965104, 282144298131106, - 3395532950809930, - 4487690022545487, - 3548837930518264, + 21888242871839275222246405745257275088548364400416034343698203078509127871818, + 21888242871839275222246405745257275088548364400416034343698204170666199607375, + 21888242871839275222246405745257275088548364400416034343698203231814107580152, 914790790695515, - 4225973100763342, - 3591220097357741, + 21888242871839275222246405745257275088548364400416034343698203908949277825230, + 21888242871839275222246405745257275088548364400416034343698203274196274419629, 2029021001068764, 1401530866105525, 934228234042203, - 3643376150055946, + 21888242871839275222246405745257275088548364400416034343698203326352327117834, 2200506847509166, - 4201265691554605, + 21888242871839275222246405745257275088548364400416034343698203884241868616493, 2170409205917674, - 2484078326634336, + 21888242871839275222246405745257275088548364400416034343698202167054503696224, 802232621555063, 2107114008065261, - 4310016779971425, + 21888242871839275222246405745257275088548364400416034343698203992992957033313, 1979609513826484, 2751075805757, 413822779135031, 1123482238512857, - 2569753449340867, - 3289052418527657, - 4073559109839939, - 2939465256328668, + 21888242871839275222246405745257275088548364400416034343698202252729626402755, + 21888242871839275222246405745257275088548364400416034343698202972028595589545, + 21888242871839275222246405745257275088548364400416034343698203756535286901827, + 21888242871839275222246405745257275088548364400416034343698202622441433390556, 1226670246318324, - 3332739647184568, - 3382717539306222, - 2733803795964088, - 4197658452176026, - 2439290142070294, + 21888242871839275222246405745257275088548364400416034343698203015715824246456, + 21888242871839275222246405745257275088548364400416034343698203065693716368110, + 21888242871839275222246405745257275088548364400416034343698202416779973025976, + 21888242871839275222246405745257275088548364400416034343698203880634629237914, + 21888242871839275222246405745257275088548364400416034343698202122266319132182, 1275877574140414, 2107788979807440, - 3322169162237449, + 21888242871839275222246405745257275088548364400416034343698203005145339299337, 45849191967713, 1824362597907256, 1251745449211428, - 3152655515547355, - 2726825429079899, - 2558947382820583, - 4141907651728325, + 21888242871839275222246405745257275088548364400416034343698202835631692609243, + 21888242871839275222246405745257275088548364400416034343698202409801606141787, + 21888242871839275222246405745257275088548364400416034343698202241923559882471, + 21888242871839275222246405745257275088548364400416034343698203824883828790213, 839413837331315, - 3590819604024611, - 3997387318968621, - 3742508539949602, - 4127481863580402, + 21888242871839275222246405745257275088548364400416034343698203273795781086499, + 21888242871839275222246405745257275088548364400416034343698203680363496030509, + 21888242871839275222246405745257275088548364400416034343698203425484717011490, + 21888242871839275222246405745257275088548364400416034343698203810458040642290, 69250180753456, - 4202969927257485, - 2992594922548699, + 21888242871839275222246405745257275088548364400416034343698203885946104319373, + 21888242871839275222246405745257275088548364400416034343698202675571099610587, 412544256429266, - 4288440637748584, + 21888242871839275222246405745257275088548364400416034343698203971416814810472, 2231499425235960, - 2727034722650984, - 3213893627493915, - 3004740426833426, - 4459099958265950, - 3670361925456378, + 21888242871839275222246405745257275088548364400416034343698202410010899712872, + 21888242871839275222246405745257275088548364400416034343698202896869804555803, + 21888242871839275222246405745257275088548364400416034343698202687716603895314, + 21888242871839275222246405745257275088548364400416034343698204142076135327838, + 21888242871839275222246405745257275088548364400416034343698203353338102518266, 2064596134445735, 1286857203890653, 338666779916267, - 3688641581201724, + 21888242871839275222246405745257275088548364400416034343698203371617758263612, 245383264994449, - 3942818177631190, - 2287049198062762, + 21888242871839275222246405745257275088548364400416034343698203625794354693078, + 21888242871839275222246405745257275088548364400416034343698201970025375124650, 410904120816288, 1116346070912974, - 3835904131149965, - 2974664843058391, + 21888242871839275222246405745257275088548364400416034343698203518880308211853, + 21888242871839275222246405745257275088548364400416034343698202657641020120279, 1671657195748870, - 3363155918712423, + 21888242871839275222246405745257275088548364400416034343698203046132095774311, 1997847860716404, 1071179650928193, 2083932730406312, @@ -18577,239 +18577,239 @@ pub global CRP: [Polynomial; L] = [ 2222139625776580, 1336531505659018, 1245901366894436, - 3333983080026085, + 21888242871839275222246405745257275088548364400416034343698203016959257087973, 1373738896855286, - 3739688275368124, - 2984428633479969, - 3644535537613117, - 4405229648469051, + 21888242871839275222246405745257275088548364400416034343698203422664452430012, + 21888242871839275222246405745257275088548364400416034343698202667404810541857, + 21888242871839275222246405745257275088548364400416034343698203327511714675005, + 21888242871839275222246405745257275088548364400416034343698204088205825530939, 1582256770998851, - 3535701833805230, + 21888242871839275222246405745257275088548364400416034343698203218678010867118, 519123904152813, 1690179613147804, - 2836995739041096, + 21888242871839275222246405745257275088548364400416034343698202519971916102984, 1190708942539266, - 4006842048757433, - 3890397302062891, - 2438335369383419, - 4153683134422266, - 4076386561610721, - 2559641736615480, - 3742219800134999, - 3843000822912337, - 3496062458461529, + 21888242871839275222246405745257275088548364400416034343698203689818225819321, + 21888242871839275222246405745257275088548364400416034343698203573373479124779, + 21888242871839275222246405745257275088548364400416034343698202121311546445307, + 21888242871839275222246405745257275088548364400416034343698203836659311484154, + 21888242871839275222246405745257275088548364400416034343698203759362738672609, + 21888242871839275222246405745257275088548364400416034343698202242617913677368, + 21888242871839275222246405745257275088548364400416034343698203425195977196887, + 21888242871839275222246405745257275088548364400416034343698203525976999974225, + 21888242871839275222246405745257275088548364400416034343698203179038635523417, 831878586373792, 1667322311235090, 691341314682173, - 3521129265798486, - 3141566870859755, + 21888242871839275222246405745257275088548364400416034343698203204105442860374, + 21888242871839275222246405745257275088548364400416034343698202824543047921643, 1214695700599925, - 2312160637774708, + 21888242871839275222246405745257275088548364400416034343698201995136814836596, 1547542447454171, - 3048498815079612, + 21888242871839275222246405745257275088548364400416034343698202731474992141500, 541181497032934, - 4210237749305484, + 21888242871839275222246405745257275088548364400416034343698203893213926367372, 801520039423899, - 4076069674037769, + 21888242871839275222246405745257275088548364400416034343698203759045851099657, 66284422029598, - 3734721918608857, + 21888242871839275222246405745257275088548364400416034343698203417698095670745, 1595915793351099, - 4029731296489000, + 21888242871839275222246405745257275088548364400416034343698203712707473550888, 1372601954534383, 895338875559801, 1550076643942551, - 2715181220852321, - 3674436776896535, - 4072350277881670, - 3588483971457551, - 3852851150266249, - 3666985337524929, + 21888242871839275222246405745257275088548364400416034343698202398157397914209, + 21888242871839275222246405745257275088548364400416034343698203357412953958423, + 21888242871839275222246405745257275088548364400416034343698203755326454943558, + 21888242871839275222246405745257275088548364400416034343698203271460148519439, + 21888242871839275222246405745257275088548364400416034343698203535827327328137, + 21888242871839275222246405745257275088548364400416034343698203349961514586817, 1668044506236770, 2176968819420847, 580750541092655, - 4432729038843644, - 3784777350379434, + 21888242871839275222246405745257275088548364400416034343698204115705215905532, + 21888242871839275222246405745257275088548364400416034343698203467753527441322, 631367896256625, - 2938634861743890, - 4039449265171208, + 21888242871839275222246405745257275088548364400416034343698202621611038805778, + 21888242871839275222246405745257275088548364400416034343698203722425442233096, 861953147361459, 748191648318493, - 4028708463403122, + 21888242871839275222246405745257275088548364400416034343698203711684640465010, 1983306977312257, - 4307843195733558, - 2758812271001721, - 3503748178892379, + 21888242871839275222246405745257275088548364400416034343698203990819372795446, + 21888242871839275222246405745257275088548364400416034343698202441788448063609, + 21888242871839275222246405745257275088548364400416034343698203186724355954267, 1416072020683334, - 3513716751959355, + 21888242871839275222246405745257275088548364400416034343698203196692929021243, 570888110105325, 1141780965895221, 1615111545987896, - 4370853533066044, - 4340126994787241, + 21888242871839275222246405745257275088548364400416034343698204053829710127932, + 21888242871839275222246405745257275088548364400416034343698204023103171849129, 2107237299780431, - 2661534002001160, - 2614899655540487, - 3544599316644559, + 21888242871839275222246405745257275088548364400416034343698202344510179063048, + 21888242871839275222246405745257275088548364400416034343698202297875832602375, + 21888242871839275222246405745257275088548364400416034343698203227575493706447, 1585022016534624, 223963598161274, 1968908111058977, - 2652562610190923, + 21888242871839275222246405745257275088548364400416034343698202335538787252811, 21538908017792, - 3510436119012432, - 2452170878941113, - 4024150839184393, - 3435781404734245, - 3204864093327928, + 21888242871839275222246405745257275088548364400416034343698203193412296074320, + 21888242871839275222246405745257275088548364400416034343698202135147056003001, + 21888242871839275222246405745257275088548364400416034343698203707127016246281, + 21888242871839275222246405745257275088548364400416034343698203118757581796133, + 21888242871839275222246405745257275088548364400416034343698202887840270389816, 808663671801894, - 2436328830479094, - 2540708242044403, - 3007671816631745, - 4041100168364753, + 21888242871839275222246405745257275088548364400416034343698202119305007540982, + 21888242871839275222246405745257275088548364400416034343698202223684419106291, + 21888242871839275222246405745257275088548364400416034343698202690647993693633, + 21888242871839275222246405745257275088548364400416034343698203724076345426641, 1985927863861335, - 4104537271313960, + 21888242871839275222246405745257275088548364400416034343698203787513448375848, 1916766383251200, - 3095359239717244, + 21888242871839275222246405745257275088548364400416034343698202778335416779132, 508398597941289, 578410429345029, - 2808684177998127, - 2665835178261860, - 3163640618229426, - 3991623625527644, - 2929314998173950, - 3512415394001376, + 21888242871839275222246405745257275088548364400416034343698202491660355060015, + 21888242871839275222246405745257275088548364400416034343698202348811355323748, + 21888242871839275222246405745257275088548364400416034343698202846616795291314, + 21888242871839275222246405745257275088548364400416034343698203674599802589532, + 21888242871839275222246405745257275088548364400416034343698202612291175235838, + 21888242871839275222246405745257275088548364400416034343698203195391571063264, 193162095940555, 1041445820047667, 1543726930398842, 1800963350485511, - 3772030518492721, + 21888242871839275222246405745257275088548364400416034343698203455006695554609, 2137579962886331, - 2902607851398407, + 21888242871839275222246405745257275088548364400416034343698202585584028460295, 1750313506899628, - 3743569918909263, + 21888242871839275222246405745257275088548364400416034343698203426546095971151, 1816068502881571, 1503988981975536, 134599285613436, 626608161294988, - 3188960674210110, + 21888242871839275222246405745257275088548364400416034343698202871936851271998, 2250762200664177, 1499917379095341, - 2937129615110546, - 2784586431255127, - 3038891306311203, + 21888242871839275222246405745257275088548364400416034343698202620105792172434, + 21888242871839275222246405745257275088548364400416034343698202467562608317015, + 21888242871839275222246405745257275088548364400416034343698202721867483373091, 2050735797978588, 770364849543302, 1603572428079354, 1579258109791308, - 4301133110079546, - 3212019736150526, + 21888242871839275222246405745257275088548364400416034343698203984109287141434, + 21888242871839275222246405745257275088548364400416034343698202894995913212414, 1555081106739159, - 2288423491695904, - 4356246270134619, + 21888242871839275222246405745257275088548364400416034343698201971399668757792, + 21888242871839275222246405745257275088548364400416034343698204039222447196507, 980752192789096, - 2720658910530641, + 21888242871839275222246405745257275088548364400416034343698202403635087592529, 2081270935304115, 428972051583089, - 3683148222484443, + 21888242871839275222246405745257275088548364400416034343698203366124399546331, 1088531193559993, 1830626801836339, 1034675737243518, - 2835871786079686, - 3865514250822980, + 21888242871839275222246405745257275088548364400416034343698202518847963141574, + 21888242871839275222246405745257275088548364400416034343698203548490427884868, 1286909233534205, - 4136685610292179, + 21888242871839275222246405745257275088548364400416034343698203819661787354067, 711314761896403, - 3154904116614898, + 21888242871839275222246405745257275088548364400416034343698202837880293676786, 1745967680418604, 1365400654762507, - 2421733313664297, - 3820491528133203, - 3045301849696853, - 4331215274663842, - 4172719560212644, - 3089453049835464, - 3177306420689696, - 4436027538757312, + 21888242871839275222246405745257275088548364400416034343698202104709490726185, + 21888242871839275222246405745257275088548364400416034343698203503467705195091, + 21888242871839275222246405745257275088548364400416034343698202728278026758741, + 21888242871839275222246405745257275088548364400416034343698204014191451725730, + 21888242871839275222246405745257275088548364400416034343698203855695737274532, + 21888242871839275222246405745257275088548364400416034343698202772429226897352, + 21888242871839275222246405745257275088548364400416034343698202860282597751584, + 21888242871839275222246405745257275088548364400416034343698204119003715819200, 401530660383671, - 2332925153229268, - 3685060798637660, + 21888242871839275222246405745257275088548364400416034343698202015901330291156, + 21888242871839275222246405745257275088548364400416034343698203368036975699548, 736410973021904, - 2350846666986072, + 21888242871839275222246405745257275088548364400416034343698202033822844047960, 1643179216430766, - 4026410778597374, - 3459992602470395, - 3381286060792513, + 21888242871839275222246405745257275088548364400416034343698203709386955659262, + 21888242871839275222246405745257275088548364400416034343698203142968779532283, + 21888242871839275222246405745257275088548364400416034343698203064262237854401, 76331579353392, - 3191252091087819, - 3311702684373967, - 3159160223478121, - 4200836429667553, + 21888242871839275222246405745257275088548364400416034343698202874228268149707, + 21888242871839275222246405745257275088548364400416034343698202994678861435855, + 21888242871839275222246405745257275088548364400416034343698202842136400540009, + 21888242871839275222246405745257275088548364400416034343698203883812606729441, 1053814471835230, - 2602773745009250, - 3447363085163342, + 21888242871839275222246405745257275088548364400416034343698202285749922071138, + 21888242871839275222246405745257275088548364400416034343698203130339262225230, 1348666175701622, - 2950202063691932, + 21888242871839275222246405745257275088548364400416034343698202633178240753820, 1795098694996986, - 3916105975939767, + 21888242871839275222246405745257275088548364400416034343698203599082153001655, 906648731646237, - 2563130370294201, - 2847856130535589, + 21888242871839275222246405745257275088548364400416034343698202246106547356089, + 21888242871839275222246405745257275088548364400416034343698202530832307597477, 1731546005932393, 1346638544055786, - 3008999312405165, + 21888242871839275222246405745257275088548364400416034343698202691975489467053, 1642493054082006, 1384232406591830, 493272880851561, 1296491607426176, - 4118695457175405, - 4132831288742233, + 21888242871839275222246405745257275088548364400416034343698203801671634237293, + 21888242871839275222246405745257275088548364400416034343698203815807465804121, 1608751385675502, - 4171530469584149, - 3130323585911010, - 4114693100344374, - 3105938634448050, + 21888242871839275222246405745257275088548364400416034343698203854506646646037, + 21888242871839275222246405745257275088548364400416034343698202813299762972898, + 21888242871839275222246405745257275088548364400416034343698203797669277406262, + 21888242871839275222246405745257275088548364400416034343698202788914811509938, 2223934583705501, - 4455605660124800, + 21888242871839275222246405745257275088548364400416034343698204138581837186688, 645226724568976, - 3541477441462167, - 2417427732110621, - 4389071284808444, - 4109758620218139, + 21888242871839275222246405745257275088548364400416034343698203224453618524055, + 21888242871839275222246405745257275088548364400416034343698202100403909172509, + 21888242871839275222246405745257275088548364400416034343698204072047461870332, + 21888242871839275222246405745257275088548364400416034343698203792734797280027, 419915640428423, 393015745730316, - 3830176873579155, + 21888242871839275222246405745257275088548364400416034343698203513153050641043, 2239000015519889, - 3056451545633883, - 2790626241066658, + 21888242871839275222246405745257275088548364400416034343698202739427722695771, + 21888242871839275222246405745257275088548364400416034343698202473602418128546, 803092690147893, 1128978717019415, - 2614276083580355, + 21888242871839275222246405745257275088548364400416034343698202297252260642243, 1913523885366111, - 3605583858565150, + 21888242871839275222246405745257275088548364400416034343698203288560035627038, 1865516934402143, - 3681593299507609, + 21888242871839275222246405745257275088548364400416034343698203364569476569497, 357871505323640, 645466753245704, 1117561876112877, - 4299467290271495, - 2730579787519234, - 4061002411595620, + 21888242871839275222246405745257275088548364400416034343698203982443467333383, + 21888242871839275222246405745257275088548364400416034343698202413555964581122, + 21888242871839275222246405745257275088548364400416034343698203743978588657508, 713308415500473, - 3078641969311876, - 2253864063731295, - 4112853904466884, + 21888242871839275222246405745257275088548364400416034343698202761618146373764, + 21888242871839275222246405745257275088548364400416034343698201936840240793183, + 21888242871839275222246405745257275088548364400416034343698203795830081528772, 1513970152653717, 759686033161814, 1408316713966416, - 2522801783331384, - 4013486287389800, - 4332115627118241, + 21888242871839275222246405745257275088548364400416034343698202205777960393272, + 21888242871839275222246405745257275088548364400416034343698203696462464451688, + 21888242871839275222246405745257275088548364400416034343698204015091804180129, 1439679733425886, - 2928721318002315, + 21888242871839275222246405745257275088548364400416034343698202611697495064203, 1818668138277570, - 3027114577365368, - 3058122599794934, - 2687601795118109, - 3852558646025873, + 21888242871839275222246405745257275088548364400416034343698202710090754427256, + 21888242871839275222246405745257275088548364400416034343698202741098776856822, + 21888242871839275222246405745257275088548364400416034343698202370577972179997, + 21888242871839275222246405745257275088548364400416034343698203535534823087761, 274310963523720, 2123422721656281, 18656451796028, @@ -18820,618 +18820,618 @@ pub global CRP: [Polynomial; L] = [ 1454787996784520, 1643122972248624, 1835839121944501, - 3662445467438069, + 21888242871839275222246405745257275088548364400416034343698203345421644499957, 567050796789980, - 3961238186674736, + 21888242871839275222246405745257275088548364400416034343698203644214363736624, 1879174296698754, - 4278794421167112, + 21888242871839275222246405745257275088548364400416034343698203961770598229000, 2025594602583576, 1838628529950333, - 2288665012275024, + 21888242871839275222246405745257275088548364400416034343698201971641189336912, 809989459775507, - 4000091302757300, - 3453718534449837, - 3081888671063653, + 21888242871839275222246405745257275088548364400416034343698203683067479819188, + 21888242871839275222246405745257275088548364400416034343698203136694711511725, + 21888242871839275222246405745257275088548364400416034343698202764864848125541, 1156685340847654, - 2554511101966371, - 4434886141145236, + 21888242871839275222246405745257275088548364400416034343698202237487279028259, + 21888242871839275222246405745257275088548364400416034343698204117862318207124, 63819965834180, 1566108144646801, 1645098339375911, 232828361319418, - 2442953514937738, - 2602769867886036, - 3208198497673916, - 2804977873655180, - 3240067844997451, - 4307011595870285, - 4439220101572329, + 21888242871839275222246405745257275088548364400416034343698202125929691999626, + 21888242871839275222246405745257275088548364400416034343698202285746044947924, + 21888242871839275222246405745257275088548364400416034343698202891174674735804, + 21888242871839275222246405745257275088548364400416034343698202487954050717068, + 21888242871839275222246405745257275088548364400416034343698202923044022059339, + 21888242871839275222246405745257275088548364400416034343698203989987772932173, + 21888242871839275222246405745257275088548364400416034343698204122196278634217, 206901406568736, 1557495498496675, - 3214358627952355, - 3311962181028103, - 3324901072388567, - 3136170518732395, + 21888242871839275222246405745257275088548364400416034343698202897334805014243, + 21888242871839275222246405745257275088548364400416034343698202994938358089991, + 21888242871839275222246405745257275088548364400416034343698203007877249450455, + 21888242871839275222246405745257275088548364400416034343698202819146695794283, 1294164430069728, - 2352935288564089, - 3891774430871058, - 3937722360135108, + 21888242871839275222246405745257275088548364400416034343698202035911465625977, + 21888242871839275222246405745257275088548364400416034343698203574750607932946, + 21888242871839275222246405745257275088548364400416034343698203620698537196996, 2171136264307230, - 3035589066437583, - 3299214451612111, + 21888242871839275222246405745257275088548364400416034343698202718565243499471, + 21888242871839275222246405745257275088548364400416034343698202982190628673999, 1091774674341790, 1683804567504397, 1063594941159799, - 3258854443947949, - 3228173234496494, + 21888242871839275222246405745257275088548364400416034343698202941830621009837, + 21888242871839275222246405745257275088548364400416034343698202911149411558382, 1723513088029180, - 3272069914418499, - 3425554364863804, - 3991075086652151, + 21888242871839275222246405745257275088548364400416034343698202955046091480387, + 21888242871839275222246405745257275088548364400416034343698203108530541925692, + 21888242871839275222246405745257275088548364400416034343698203674051263714039, 1993857933920336, - 2665437667148523, + 21888242871839275222246405745257275088548364400416034343698202348413844210411, 565684875764683, 835341537272686, - 2332095557099151, + 21888242871839275222246405745257275088548364400416034343698202015071734161039, 512793804599204, 2159638120541491, 1516340256546720, 1831084181162830, - 3644731282176883, + 21888242871839275222246405745257275088548364400416034343698203327707459238771, 1394632774563119, - 3036583907823894, + 21888242871839275222246405745257275088548364400416034343698202719560084885782, 1243110249102587, 1058477036482043, 120279311986795, - 2834810492056714, - 2836390464880697, - 2807553554194412, + 21888242871839275222246405745257275088548364400416034343698202517786669118602, + 21888242871839275222246405745257275088548364400416034343698202519366641942585, + 21888242871839275222246405745257275088548364400416034343698202490529731256300, 1811361577545933, 505288460277328, 1616832607911639, 1975421531288183, - 4344288811326759, + 21888242871839275222246405745257275088548364400416034343698204027264988388647, 1808797777417529, - 3360507491422368, - 3766740849938183, + 21888242871839275222246405745257275088548364400416034343698203043483668484256, + 21888242871839275222246405745257275088548364400416034343698203449717027000071, 1580681465578750, 85944058939851, 784352307779193, - 2651087103227768, + 21888242871839275222246405745257275088548364400416034343698202334063280289656, 993475716879936, - 3895015726659055, + 21888242871839275222246405745257275088548364400416034343698203577991903720943, 1765675689783456, - 3929599696672032, - 3929076804802799, + 21888242871839275222246405745257275088548364400416034343698203612575873733920, + 21888242871839275222246405745257275088548364400416034343698203612052981864687, 1933791511164324, 796316489936026, 81270505944257, - 2789791532062627, - 2931219831173880, - 3988617225271849, + 21888242871839275222246405745257275088548364400416034343698202472767709124515, + 21888242871839275222246405745257275088548364400416034343698202614196008235768, + 21888242871839275222246405745257275088548364400416034343698203671593402333737, 916643856925923, - 4449503949919710, - 3149617458153191, - 3407409351524097, + 21888242871839275222246405745257275088548364400416034343698204132480126981598, + 21888242871839275222246405745257275088548364400416034343698202832593635215079, + 21888242871839275222246405745257275088548364400416034343698203090385528585985, 2170534067137955, - 3207247710033326, - 4331097310544355, - 4474146471073350, + 21888242871839275222246405745257275088548364400416034343698202890223887095214, + 21888242871839275222246405745257275088548364400416034343698204014073487606243, + 21888242871839275222246405745257275088548364400416034343698204157122648135238, 1819637026644948, - 3235248375172389, + 21888242871839275222246405745257275088548364400416034343698202918224552234277, 668063521856748, - 3933938056860130, - 4064838034560597, + 21888242871839275222246405745257275088548364400416034343698203616914233922018, + 21888242871839275222246405745257275088548364400416034343698203747814211622485, 1153863820949875, 620340630939016, 1279574217272855, - 3417985026378489, + 21888242871839275222246405745257275088548364400416034343698203100961203440377, 1470267910430650, 1582020672353192, 1317520664936951, - 4309467534306719, - 2402138854341535, - 2927512134644232, - 3713875505573324, - 2352128153266695, - 3917553505798424, - 4267849906216956, - 2544973590168274, + 21888242871839275222246405745257275088548364400416034343698203992443711368607, + 21888242871839275222246405745257275088548364400416034343698202085115031403423, + 21888242871839275222246405745257275088548364400416034343698202610488311706120, + 21888242871839275222246405745257275088548364400416034343698203396851682635212, + 21888242871839275222246405745257275088548364400416034343698202035104330328583, + 21888242871839275222246405745257275088548364400416034343698203600529682860312, + 21888242871839275222246405745257275088548364400416034343698203950826083278844, + 21888242871839275222246405745257275088548364400416034343698202227949767230162, 407356406061184, 1178565033228825, - 2340918325880903, - 4080510027972253, - 3794521049011746, - 3226192623009453, - 4058004756976362, + 21888242871839275222246405745257275088548364400416034343698202023894502942791, + 21888242871839275222246405745257275088548364400416034343698203763486205034141, + 21888242871839275222246405745257275088548364400416034343698203477497226073634, + 21888242871839275222246405745257275088548364400416034343698202909168800071341, + 21888242871839275222246405745257275088548364400416034343698203740980934038250, 2037978629108324, 589314413265651, 1917863910898084, 1402909507028797, - 3506319805519773, - 3050681250107704, - 2949497224544767, + 21888242871839275222246405745257275088548364400416034343698203189295982581661, + 21888242871839275222246405745257275088548364400416034343698202733657427169592, + 21888242871839275222246405745257275088548364400416034343698202632473401606655, 644820466125348, 672347013823531, 305266868231522, - 2428140883094559, + 21888242871839275222246405745257275088548364400416034343698202111117060156447, 1039285979408133, 532899695194987, - 2481073602928733, - 3507664279173177, + 21888242871839275222246405745257275088548364400416034343698202164049779990621, + 21888242871839275222246405745257275088548364400416034343698203190640456235065, 1474617046091323, 1204520158956935, - 3147232690710627, + 21888242871839275222246405745257275088548364400416034343698202830208867772515, 647230955452099, 1132107197139293, 752278135652279, - 2904953377871750, + 21888242871839275222246405745257275088548364400416034343698202587929554933638, 1839686800748325, - 3694063562342351, + 21888242871839275222246405745257275088548364400416034343698203377039739404239, 1219138764696837, - 2927075892694914, + 21888242871839275222246405745257275088548364400416034343698202610052069756802, 2123721284112440, - 3080058698096185, + 21888242871839275222246405745257275088548364400416034343698202763034875158073, 1083562641708608, 1951429616133750, - 3986548495410068, - 3379569104751795, - 3177510765949392, + 21888242871839275222246405745257275088548364400416034343698203669524672471956, + 21888242871839275222246405745257275088548364400416034343698203062545281813683, + 21888242871839275222246405745257275088548364400416034343698202860486943011280, 376526454763774, - 4048818207030662, - 4244768183282359, + 21888242871839275222246405745257275088548364400416034343698203731794384092550, + 21888242871839275222246405745257275088548364400416034343698203927744360344247, 978317084275696, - 2941388456763662, + 21888242871839275222246405745257275088548364400416034343698202624364633825550, 2011805725485248, - 3615916996007936, - 3645827147832783, + 21888242871839275222246405745257275088548364400416034343698203298893173069824, + 21888242871839275222246405745257275088548364400416034343698203328803324894671, 325115440545208, 758436833439706, - 3339045013540984, + 21888242871839275222246405745257275088548364400416034343698203022021190602872, 1096950324395854, 1226489231576782, - 3297396603010072, + 21888242871839275222246405745257275088548364400416034343698202980372780071960, 2177492902144911, 1424096649269475, 1734174121878510, 130000928431440, - 4101862961138730, + 21888242871839275222246405745257275088548364400416034343698203784839138200618, 1040410896288865, - 3220201298440780, - 2528181697594228, - 3133383902721192, - 2657477495718547, + 21888242871839275222246405745257275088548364400416034343698202903177475502668, + 21888242871839275222246405745257275088548364400416034343698202211157874656116, + 21888242871839275222246405745257275088548364400416034343698202816360079783080, + 21888242871839275222246405745257275088548364400416034343698202340453672780435, 2112128898053811, 1527535931755684, 1470348538689465, 546663563407442, - 2697085569381737, + 21888242871839275222246405745257275088548364400416034343698202380061746443625, 1643628667782651, - 4036786160215821, - 4252465160882708, + 21888242871839275222246405745257275088548364400416034343698203719762337277709, + 21888242871839275222246405745257275088548364400416034343698203935441337944596, 1762414412721535, 1163162685077149, - 3688046924114191, - 3667660478469087, - 4178925201210826, - 3135346032230464, - 3622983934640717, + 21888242871839275222246405745257275088548364400416034343698203371023101176079, + 21888242871839275222246405745257275088548364400416034343698203350636655530975, + 21888242871839275222246405745257275088548364400416034343698203861901378272714, + 21888242871839275222246405745257275088548364400416034343698202818322209292352, + 21888242871839275222246405745257275088548364400416034343698203305960111702605, 1286111237918078, 607701192082599, - 3334514792772920, - 4056608820398655, - 3571540188133397, + 21888242871839275222246405745257275088548364400416034343698203017490969834808, + 21888242871839275222246405745257275088548364400416034343698203739584997460543, + 21888242871839275222246405745257275088548364400416034343698203254516365195285, 1211975692188543, - 2791491857304658, - 4149079987622850, - 3980167653604205, + 21888242871839275222246405745257275088548364400416034343698202474468034366546, + 21888242871839275222246405745257275088548364400416034343698203832056164684738, + 21888242871839275222246405745257275088548364400416034343698203663143830666093, 2160778194029934, - 2674591830739727, - 3827616715595955, - 4405370146170433, + 21888242871839275222246405745257275088548364400416034343698202357568007801615, + 21888242871839275222246405745257275088548364400416034343698203510592892657843, + 21888242871839275222246405745257275088548364400416034343698204088346323232321, 1103610622918726, 194703864718677, - 2723308911827720, - 3629008693714632, + 21888242871839275222246405745257275088548364400416034343698202406285088889608, + 21888242871839275222246405745257275088548364400416034343698203311984870776520, 78439531967758, 1044701768576779, 1441297395756417, - 2907692554603446, - 2633765869724697, + 21888242871839275222246405745257275088548364400416034343698202590668731665334, + 21888242871839275222246405745257275088548364400416034343698202316742046786585, 2027645918497575, - 3698464146143638, + 21888242871839275222246405745257275088548364400416034343698203381440323205526, 1507634125555447, - 2520293706747584, + 21888242871839275222246405745257275088548364400416034343698202203269883809472, 1701704749624157, 2085036359223683, - 4202390358627750, + 21888242871839275222246405745257275088548364400416034343698203885366535689638, 1035047530122273, 597820995606561, - 2865956702009942, - 4099185335982839, + 21888242871839275222246405745257275088548364400416034343698202548932879071830, + 21888242871839275222246405745257275088548364400416034343698203782161513044727, 1988543811052310, - 4487146807755359, + 21888242871839275222246405745257275088548364400416034343698204170122984817247, 315299765566329, - 4212535361353529, + 21888242871839275222246405745257275088548364400416034343698203895511538415417, 843999828078436, - 2613522100601028, - 3525844771918388, + 21888242871839275222246405745257275088548364400416034343698202296498277662916, + 21888242871839275222246405745257275088548364400416034343698203208820948980276, 190650701351198, 297680663974768, - 4100903710821018, + 21888242871839275222246405745257275088548364400416034343698203783879887882906, 134001471291592, - 4019444804736796, - 2476105014245870, - 3156609812707277, - 2298027702742652, + 21888242871839275222246405745257275088548364400416034343698203702420981798684, + 21888242871839275222246405745257275088548364400416034343698202159081191307758, + 21888242871839275222246405745257275088548364400416034343698202839585989769165, + 21888242871839275222246405745257275088548364400416034343698201981003879804540, 442584760160928, - 3030861057698477, - 4231386004775844, + 21888242871839275222246405745257275088548364400416034343698202713837234760365, + 21888242871839275222246405745257275088548364400416034343698203914362181837732, 1882621625257965, - 4352613993103070, - 2704591243625104, - 2314171298359757, - 4166758648000118, + 21888242871839275222246405745257275088548364400416034343698204035590170164958, + 21888242871839275222246405745257275088548364400416034343698202387567420686992, + 21888242871839275222246405745257275088548364400416034343698201997147475421645, + 21888242871839275222246405745257275088548364400416034343698203849734825062006, 2126950314223617, 2191123256788934, - 3141125976239260, + 21888242871839275222246405745257275088548364400416034343698202824102153301148, 538574236972590, 1381670029605730, 1061878524594633, - 3432787813840818, + 21888242871839275222246405745257275088548364400416034343698203115763990902706, 1193220456138781, - 3673815311323328, - 4167910857827149, - 3373385126227602, + 21888242871839275222246405745257275088548364400416034343698203356791488385216, + 21888242871839275222246405745257275088548364400416034343698203850887034889037, + 21888242871839275222246405745257275088548364400416034343698203056361303289490, 1053339083868972, - 2995096189205800, + 21888242871839275222246405745257275088548364400416034343698202678072366267688, 793250247972966, 1405572619260627, 1073221834829770, - 3969661715870347, + 21888242871839275222246405745257275088548364400416034343698203652637892932235, 1814709026813013, 2148071912005303, - 4342460246726648, - 4416374299186595, - 3804461286503791, - 4475011775743675, - 4351979225584050, - 2297805958680182, + 21888242871839275222246405745257275088548364400416034343698204025436423788536, + 21888242871839275222246405745257275088548364400416034343698204099350476248483, + 21888242871839275222246405745257275088548364400416034343698203487437463565679, + 21888242871839275222246405745257275088548364400416034343698204157987952805563, + 21888242871839275222246405745257275088548364400416034343698204034955402645938, + 21888242871839275222246405745257275088548364400416034343698201980782135742070, 2078766617718293, 1362569392565319, 1028849157840187, 872974288725090, - 3106972257276531, - 2902888106307860, - 3182204866341424, + 21888242871839275222246405745257275088548364400416034343698202789948434338419, + 21888242871839275222246405745257275088548364400416034343698202585864283369748, + 21888242871839275222246405745257275088548364400416034343698202865181043403312, 380183892736347, - 3051327354210027, + 21888242871839275222246405745257275088548364400416034343698202734303531271915, 174430685682590, - 2876391819898676, - 3462278566201119, - 3253253717492583, + 21888242871839275222246405745257275088548364400416034343698202559367996960564, + 21888242871839275222246405745257275088548364400416034343698203145254743263007, + 21888242871839275222246405745257275088548364400416034343698202936229894554471, 1087731057532649, - 3248921036275716, - 3796144229383697, - 2857359720712358, + 21888242871839275222246405745257275088548364400416034343698202931897213337604, + 21888242871839275222246405745257275088548364400416034343698203479120406445585, + 21888242871839275222246405745257275088548364400416034343698202540335897774246, 1783056836286925, - 4096743384414231, + 21888242871839275222246405745257275088548364400416034343698203779719561476119, 378003439081230, - 4239880694269639, + 21888242871839275222246405745257275088548364400416034343698203922856871331527, 568103048131492, 1895908871466521, 2163418948138264, 1935338768866715, - 2757654146857124, + 21888242871839275222246405745257275088548364400416034343698202440630323919012, 1966598371721587, - 2498978723866910, + 21888242871839275222246405745257275088548364400416034343698202181954900928798, 576781650052844, 155151015086885, - 2353671849127650, - 2531149660916838, + 21888242871839275222246405745257275088548364400416034343698202036648026189538, + 21888242871839275222246405745257275088548364400416034343698202214125837978726, 1030253275360889, - 3856383689683730, + 21888242871839275222246405745257275088548364400416034343698203539359866745618, 2241303429272726, - 3416725255366995, - 2583538053362180, + 21888242871839275222246405745257275088548364400416034343698203099701432428883, + 21888242871839275222246405745257275088548364400416034343698202266514230424068, 1900296036445591, - 2594312415016136, + 21888242871839275222246405745257275088548364400416034343698202277288592078024, 932587499179945, - 3192645362073698, - 3364919667646556, - 3966020326256073, - 4270066269105382, - 2303400572948461, - 3730136076219543, - 3412866851253454, - 3590147015516112, + 21888242871839275222246405745257275088548364400416034343698202875621539135586, + 21888242871839275222246405745257275088548364400416034343698203047895844708444, + 21888242871839275222246405745257275088548364400416034343698203648996503317961, + 21888242871839275222246405745257275088548364400416034343698203953042446167270, + 21888242871839275222246405745257275088548364400416034343698201986376750010349, + 21888242871839275222246405745257275088548364400416034343698203413112253281431, + 21888242871839275222246405745257275088548364400416034343698203095843028315342, + 21888242871839275222246405745257275088548364400416034343698203273123192578000, 1467822984065970, - 3717248615258592, - 2903193825701327, + 21888242871839275222246405745257275088548364400416034343698203400224792320480, + 21888242871839275222246405745257275088548364400416034343698202586170002763215, 492261031118286, - 3502883717065725, - 2575297684417522, + 21888242871839275222246405745257275088548364400416034343698203185859894127613, + 21888242871839275222246405745257275088548364400416034343698202258273861479410, 1961112741273428, 1660385282882509, - 3770152208003335, - 3514431997223866, + 21888242871839275222246405745257275088548364400416034343698203453128385065223, + 21888242871839275222246405745257275088548364400416034343698203197408174285754, 1329998916477305, - 3536771259374809, + 21888242871839275222246405745257275088548364400416034343698203219747436436697, 841819466651881, - 2547030674991701, + 21888242871839275222246405745257275088548364400416034343698202230006852053589, 1824276603743906, - 3798388859841477, + 21888242871839275222246405745257275088548364400416034343698203481365036903365, 1592746240313007, 1808598734393876, - 3669739478057369, - 3080155939480289, + 21888242871839275222246405745257275088548364400416034343698203352715655119257, + 21888242871839275222246405745257275088548364400416034343698202763132116542177, 290547014799766, - 3178548935343046, - 2421941671596432, - 2994605702110330, - 4145778365583136, - 2715865057689803, + 21888242871839275222246405745257275088548364400416034343698202861525112404934, + 21888242871839275222246405745257275088548364400416034343698202104917848658320, + 21888242871839275222246405745257275088548364400416034343698202677581879172218, + 21888242871839275222246405745257275088548364400416034343698203828754542645024, + 21888242871839275222246405745257275088548364400416034343698202398841234751691, 314284459929295, - 2710251865045167, - 4129800150742660, - 2868782094866124, + 21888242871839275222246405745257275088548364400416034343698202393228042107055, + 21888242871839275222246405745257275088548364400416034343698203812776327804548, + 21888242871839275222246405745257275088548364400416034343698202551758271928012, 8230764696338, 1525392143930527, 56521519387758, 404201147520390, - 3248257691495369, - 2662415717249590, + 21888242871839275222246405745257275088548364400416034343698202931233868557257, + 21888242871839275222246405745257275088548364400416034343698202345391894311478, 1234149825654479, - 2811305713424790, + 21888242871839275222246405745257275088548364400416034343698202494281890486678, 1567504193938259, - 3258608959507531, - 2276303177018072, + 21888242871839275222246405745257275088548364400416034343698202941585136569419, + 21888242871839275222246405745257275088548364400416034343698201959279354079960, 2039939153526796, 554292523533045, - 3643429665368416, - 4358421980202856, + 21888242871839275222246405745257275088548364400416034343698203326405842430304, + 21888242871839275222246405745257275088548364400416034343698204041398157264744, 2068923501016276, 1739167169458282, 763337966621783, - 3624381998270130, - 3905550813625664, - 3738898555140298, + 21888242871839275222246405745257275088548364400416034343698203307358175332018, + 21888242871839275222246405745257275088548364400416034343698203588526990687552, + 21888242871839275222246405745257275088548364400416034343698203421874732202186, 1249822204487584, 1239035320227507, - 3383255662127417, + 21888242871839275222246405745257275088548364400416034343698203066231839189305, 986185532551269, 1181270652540932, 684906755652501, 1225753554293789, - 2603485934954444, + 21888242871839275222246405745257275088548364400416034343698202286462112016332, 715448683425617, 778030028646155, 1698734307439161, 262017782682922, 1899783072478001, - 4320172701116924, - 3553714524299174, - 4253552932386882, - 4251182725535189, - 3078849383830617, - 4136186009095652, + 21888242871839275222246405745257275088548364400416034343698204003148878178812, + 21888242871839275222246405745257275088548364400416034343698203236690701361062, + 21888242871839275222246405745257275088548364400416034343698203936529109448770, + 21888242871839275222246405745257275088548364400416034343698203934158902597077, + 21888242871839275222246405745257275088548364400416034343698202761825560892505, + 21888242871839275222246405745257275088548364400416034343698203819162186157540, 456646952836096, 2098199459843938, - 2750961478777118, - 4209732824348229, + 21888242871839275222246405745257275088548364400416034343698202433937655839006, + 21888242871839275222246405745257275088548364400416034343698203892709001410117, 985040025683301, - 2547547105764984, + 21888242871839275222246405745257275088548364400416034343698202230523282826872, 1003706429879633, 2120884076793782, 757073408431061, 2041213664758301, 1091702225798232, 159092606383580, - 2383378772646723, + 21888242871839275222246405745257275088548364400416034343698202066354949708611, 1161449179565420, 1559838128984549, - 3048543363189444, - 3750577433806058, + 21888242871839275222246405745257275088548364400416034343698202731519540251332, + 21888242871839275222246405745257275088548364400416034343698203433553610867946, 730617121283147, 1044013089261540, 735221194565697, 1795737176915129, 1162533146380863, - 3708882064971949, - 2416697120801830, - 3011350835159872, - 2710586246840947, - 3038759060768087, - 2420951590451716, + 21888242871839275222246405745257275088548364400416034343698203391858242033837, + 21888242871839275222246405745257275088548364400416034343698202099673297863718, + 21888242871839275222246405745257275088548364400416034343698202694327012221760, + 21888242871839275222246405745257275088548364400416034343698202393562423902835, + 21888242871839275222246405745257275088548364400416034343698202721735237829975, + 21888242871839275222246405745257275088548364400416034343698202103927767513604, 577991291039920, 1030332211250198, 188818530001872, 911523308410675, - 2828459786491477, - 2455338054112502, - 3371755494092500, + 21888242871839275222246405745257275088548364400416034343698202511435963553365, + 21888242871839275222246405745257275088548364400416034343698202138314231174390, + 21888242871839275222246405745257275088548364400416034343698203054731671154388, 998508025267932, 2236578472586352, 876625339359835, 571500609370373, - 2932872946000685, - 3660556757068475, + 21888242871839275222246405745257275088548364400416034343698202615849123062573, + 21888242871839275222246405745257275088548364400416034343698203343532934130363, 1131427342561421, 296924314628569, - 3941882273454796, - 3783570485126801, + 21888242871839275222246405745257275088548364400416034343698203624858450516684, + 21888242871839275222246405745257275088548364400416034343698203466546662188689, 446934536167170, - 2700491612639070, - 3810170573580750, + 21888242871839275222246405745257275088548364400416034343698202383467789700958, + 21888242871839275222246405745257275088548364400416034343698203493146750642638, 1966911304833034, - 3371100169996325, + 21888242871839275222246405745257275088548364400416034343698203054076347058213, 1661323551119636, 1480998169963277, - 2660842646376660, - 4072163422822269, - 2272335557122299, - 3021313885289846, + 21888242871839275222246405745257275088548364400416034343698202343818823438548, + 21888242871839275222246405745257275088548364400416034343698203755139599884157, + 21888242871839275222246405745257275088548364400416034343698201955311734184187, + 21888242871839275222246405745257275088548364400416034343698202704290062351734, 1708702502266501, - 3139490906139668, + 21888242871839275222246405745257275088548364400416034343698202822467083201556, 1691513293466183, - 2728124395070054, + 21888242871839275222246405745257275088548364400416034343698202411100572131942, 2224247333755366, - 2486845955181284, - 2253746080535246, + 21888242871839275222246405745257275088548364400416034343698202169822132243172, + 21888242871839275222246405745257275088548364400416034343698201936722257597134, 1665693929649513, 796225262699521, - 3927581425103827, - 2805348833233165, + 21888242871839275222246405745257275088548364400416034343698203610557602165715, + 21888242871839275222246405745257275088548364400416034343698202488325010295053, 1990774819326843, 47811753658675, 468301173967300, 131956377353816, - 4465102955056883, - 3661095144719493, + 21888242871839275222246405745257275088548364400416034343698204148079132118771, + 21888242871839275222246405745257275088548364400416034343698203344071321781381, 1685523604208135, 761830137987761, 2213842210097793, - 3622028006163909, + 21888242871839275222246405745257275088548364400416034343698203305004183225797, 2003229451926631, - 3105057403519617, + 21888242871839275222246405745257275088548364400416034343698202788033580581505, 399996013455300, - 2928634766307586, + 21888242871839275222246405745257275088548364400416034343698202611610943369474, 1429849970107656, - 2483061910555211, + 21888242871839275222246405745257275088548364400416034343698202166038087617099, 1542685741011265, 336563227649230, - 3399656639095466, - 3155411557699940, - 4303603350537094, + 21888242871839275222246405745257275088548364400416034343698203082632816157354, + 21888242871839275222246405745257275088548364400416034343698202838387734761828, + 21888242871839275222246405745257275088548364400416034343698203986579527598982, 686794388266832, 2192435756474273, - 3810708773868685, + 21888242871839275222246405745257275088548364400416034343698203493684950930573, 15689405641573, 946837479536508, 266172618417914, - 4107681563594332, - 3963760729755673, + 21888242871839275222246405745257275088548364400416034343698203790657740656220, + 21888242871839275222246405745257275088548364400416034343698203646736906817561, 1479869786217729, 1000447691171958, 865877963828320, - 4147101329258204, - 4313128219815725, + 21888242871839275222246405745257275088548364400416034343698203830077506320092, + 21888242871839275222246405745257275088548364400416034343698203996104396877613, 784939986106639, 27022717574384, - 3923164246470925, + 21888242871839275222246405745257275088548364400416034343698203606140423532813, 390779911918967, 885128439819061, 750055176438737, 576182848411339, 690309660854338, 2184922716089209, - 3643406090245728, + 21888242871839275222246405745257275088548364400416034343698203326382267307616, 1903356573474580, 311715382542990, 1581528831388891, 572336474395046, 843484793650010, - 3109429493559956, + 21888242871839275222246405745257275088548364400416034343698202792405670621844, 1798068421475220, 296714137654542, 1501248989041337, 2039772409569850, - 2287631941608192, - 3372647608746644, + 21888242871839275222246405745257275088548364400416034343698201970608118670080, + 21888242871839275222246405745257275088548364400416034343698203055623785808532, 967284346889436, - 3174600807969836, - 3623238490056066, + 21888242871839275222246405745257275088548364400416034343698202857576985031724, + 21888242871839275222246405745257275088548364400416034343698203306214667117954, 998363362858951, - 2950401450470151, + 21888242871839275222246405745257275088548364400416034343698202633377627532039, 563328249606146, 1571575427999553, - 3944928848516175, + 21888242871839275222246405745257275088548364400416034343698203627905025578063, 2100849361026018, 1075387251610455, 878058655603630, - 4149836400885263, - 2798448711495836, + 21888242871839275222246405745257275088548364400416034343698203832812577947151, + 21888242871839275222246405745257275088548364400416034343698202481424888557724, 1514383160162566, - 2530878247417269, + 21888242871839275222246405745257275088548364400416034343698202213854424479157, 1410977084394820, - 3487057393797080, + 21888242871839275222246405745257275088548364400416034343698203170033570858968, 775216465442364, 1102375549471238, 1667232087429790, 748295287771929, - 3341204399804499, + 21888242871839275222246405745257275088548364400416034343698203024180576866387, 2236587035892177, - 3646001386156579, - 2354029560732482, - 4165321142918695, + 21888242871839275222246405745257275088548364400416034343698203328977563218467, + 21888242871839275222246405745257275088548364400416034343698202037005737794370, + 21888242871839275222246405745257275088548364400416034343698203848297319980583, 375605781735096, 41127121313353, - 3506469638110618, - 3277932464823197, - 3005395977317654, - 2990158969735052, - 2994117998553780, + 21888242871839275222246405745257275088548364400416034343698203189445815172506, + 21888242871839275222246405745257275088548364400416034343698202960908641885085, + 21888242871839275222246405745257275088548364400416034343698202688372154379542, + 21888242871839275222246405745257275088548364400416034343698202673135146796940, + 21888242871839275222246405745257275088548364400416034343698202677094175615668, 281047104477645, 1432511494718094, 1589495381482844, 1030265179733102, - 3867642413222656, - 2727642509514593, + 21888242871839275222246405745257275088548364400416034343698203550618590284544, + 21888242871839275222246405745257275088548364400416034343698202410618686576481, 340161590842583, - 4166213874808567, + 21888242871839275222246405745257275088548364400416034343698203849190051870455, 1760466261223043, - 2924343535934667, - 3452766516126535, - 3004917366503494, - 2828017479589027, + 21888242871839275222246405745257275088548364400416034343698202607319712996555, + 21888242871839275222246405745257275088548364400416034343698203135742693188423, + 21888242871839275222246405745257275088548364400416034343698202687893543565382, + 21888242871839275222246405745257275088548364400416034343698202510993656650915, 1023522664603373, - 3030142618660892, - 4263381674603348, + 21888242871839275222246405745257275088548364400416034343698202713118795722780, + 21888242871839275222246405745257275088548364400416034343698203946357851665236, 474372679089685, 1538526396425100, - 2599789029022973, + 21888242871839275222246405745257275088548364400416034343698202282765206084861, 65374728414182, 207978725436738, 2039942249879401, - 2991685462670374, + 21888242871839275222246405745257275088548364400416034343698202674661639732262, 39486606808238, 2019688014352609, 2104676250095253, 1264732307790498, - 2895394891000559, + 21888242871839275222246405745257275088548364400416034343698202578371068062447, 1486332425354597, - 3146814329103526, + 21888242871839275222246405745257275088548364400416034343698202829790506165414, 148008243244960, 774651853354344, - 2876137641810652, - 2691013248071307, - 3751855707677732, + 21888242871839275222246405745257275088548364400416034343698202559113818872540, + 21888242871839275222246405745257275088548364400416034343698202373989425133195, + 21888242871839275222246405745257275088548364400416034343698203434831884739620, 866019525130277, 1118852543143713, 1604714718539536, 60366603874349, 214467741319759, - 3058608206372266, - 3549136768691444, + 21888242871839275222246405745257275088548364400416034343698202741584383434154, + 21888242871839275222246405745257275088548364400416034343698203232112945753332, 990645539305486, 854296764142265, - 3862062032971514, + 21888242871839275222246405745257275088548364400416034343698203545038210033402, 1291057774818205, 2020419140415628, - 2736156398610448, - 4070650394741271, - 4407644039234481, + 21888242871839275222246405745257275088548364400416034343698202419132575672336, + 21888242871839275222246405745257275088548364400416034343698203753626571803159, + 21888242871839275222246405745257275088548364400416034343698204090620216296369, 969961176311553, 1874410402203982, 287356042142667, - 2295080728578858, - 4210418766424964, + 21888242871839275222246405745257275088548364400416034343698201978056905640746, + 21888242871839275222246405745257275088548364400416034343698203893394943486852, 528287674528292, 52312394741412, 294921409833173, - 4011978614405436, - 3662255509689093, - 4100852680394461, + 21888242871839275222246405745257275088548364400416034343698203694954791467324, + 21888242871839275222246405745257275088548364400416034343698203345231686750981, + 21888242871839275222246405745257275088548364400416034343698203783828857456349, 882905101705276, 1065973751666192, 1848039640745444, @@ -19440,172 +19440,172 @@ pub global CRP: [Polynomial; L] = [ 1351614559851297, 1012040660615643, 1543485657397858, - 4267160236412266, + 21888242871839275222246405745257275088548364400416034343698203950136413474154, 2214843899292913, 1238814314894742, - 2381489417839507, + 21888242871839275222246405745257275088548364400416034343698202064465594901395, 1860493541049856, 1649485734642041, - 4022670230847369, + 21888242871839275222246405745257275088548364400416034343698203705646407909257, 1854594097463943, 1057348059932421, 78286327320376, 99044311266018, - 4019369785750849, - 3761158855191290, - 3704026382352447, + 21888242871839275222246405745257275088548364400416034343698203702345962812737, + 21888242871839275222246405745257275088548364400416034343698203444135032253178, + 21888242871839275222246405745257275088548364400416034343698203387002559414335, 1141414940899833, 548096675128402, 1489606438633777, - 3143401099737548, - 4195751950294511, + 21888242871839275222246405745257275088548364400416034343698202826377276799436, + 21888242871839275222246405745257275088548364400416034343698203878728127356399, 1584269414510164, - 3400586677072187, + 21888242871839275222246405745257275088548364400416034343698203083562854134075, 2124819435241990, 1517237745207911, - 2948710439776202, + 21888242871839275222246405745257275088548364400416034343698202631686616838090, 986927035615247, 347600316325484, - 2763108722848788, + 21888242871839275222246405745257275088548364400416034343698202446084899910676, 1952271926745638, - 2683168429249799, - 3154686123442333, + 21888242871839275222246405745257275088548364400416034343698202366144606311687, + 21888242871839275222246405745257275088548364400416034343698202837662300504221, 206644469656959, - 3645351750649454, + 21888242871839275222246405745257275088548364400416034343698203328327927711342, 934607655435723, - 3064635363665188, + 21888242871839275222246405745257275088548364400416034343698202747611540727076, 1482407962746939, - 3048407440102562, - 2575920914950407, + 21888242871839275222246405745257275088548364400416034343698202731383617164450, + 21888242871839275222246405745257275088548364400416034343698202258897092012295, 1639591818392839, - 3734111993556376, + 21888242871839275222246405745257275088548364400416034343698203417088170618264, 1684047272948366, 2185411269843216, - 2867998689168203, - 3503361133732391, - 4082939466280181, - 2569918183846554, + 21888242871839275222246405745257275088548364400416034343698202550974866230091, + 21888242871839275222246405745257275088548364400416034343698203186337310794279, + 21888242871839275222246405745257275088548364400416034343698203765915643342069, + 21888242871839275222246405745257275088548364400416034343698202252894360908442, 1251997551298097, - 3411206631119664, - 3373592490394522, + 21888242871839275222246405745257275088548364400416034343698203094182808181552, + 21888242871839275222246405745257275088548364400416034343698203056568667456410, 1921415724640032, - 4169629984405896, - 2821663558192242, - 2779370865175118, + 21888242871839275222246405745257275088548364400416034343698203852606161467784, + 21888242871839275222246405745257275088548364400416034343698202504639735254130, + 21888242871839275222246405745257275088548364400416034343698202462347042237006, 808342973625898, - 3016358635429476, + 21888242871839275222246405745257275088548364400416034343698202699334812491364, 316680276507146, - 3389438949630215, - 2450243213843408, + 21888242871839275222246405745257275088548364400416034343698203072415126692103, + 21888242871839275222246405745257275088548364400416034343698202133219390905296, 355740904001804, - 2671808357838355, - 3017609412352609, + 21888242871839275222246405745257275088548364400416034343698202354784534900243, + 21888242871839275222246405745257275088548364400416034343698202700585589414497, 353075355404946, - 4361574695641578, - 4129394641812105, + 21888242871839275222246405745257275088548364400416034343698204044550872703466, + 21888242871839275222246405745257275088548364400416034343698203812370818873993, 1777375024168152, 1300184334230046, 1629636491660591, - 3020666871263128, - 4192346786692382, + 21888242871839275222246405745257275088548364400416034343698202703643048325016, + 21888242871839275222246405745257275088548364400416034343698203875322963754270, 280735296942627, - 3807566577340177, + 21888242871839275222246405745257275088548364400416034343698203490542754402065, 2075410900355583, 1077986948726697, - 4284907314566767, + 21888242871839275222246405745257275088548364400416034343698203967883491628655, 33446682150958, - 2768770127464609, + 21888242871839275222246405745257275088548364400416034343698202451746304526497, 478221521333831, 2197517193648081, 503656551640150, 1235674744642846, 530032739771510, 720513527579961, - 3573905548733355, + 21888242871839275222246405745257275088548364400416034343698203256881725795243, 1262868310650142, 1566235835851280, 735825501380721, 1305088464023720, 1341880080047916, 1172588005317889, - 3909571820374190, + 21888242871839275222246405745257275088548364400416034343698203592547997436078, 1112691127236482, 577688773246960, - 3154150151099820, + 21888242871839275222246405745257275088548364400416034343698202837126328161708, 1451299648661431, 2042865459280337, - 3880033383448181, - 3875145641432305, - 4038837185675668, + 21888242871839275222246405745257275088548364400416034343698203563009560510069, + 21888242871839275222246405745257275088548364400416034343698203558121818494193, + 21888242871839275222246405745257275088548364400416034343698203721813362737556, 1187474070907655, - 2806262753757586, + 21888242871839275222246405745257275088548364400416034343698202489238930819474, 1144315020162017, 535105713862587, - 2390168736196997, - 2819164284709497, + 21888242871839275222246405745257275088548364400416034343698202073144913258885, + 21888242871839275222246405745257275088548364400416034343698202502140461771385, 1485842554705091, 1539605496688619, - 2264199263990772, + 21888242871839275222246405745257275088548364400416034343698201947175441052660, 781996661068950, - 4381202224834662, + 21888242871839275222246405745257275088548364400416034343698204064178401896550, 598111391073445, - 3000772787733360, + 21888242871839275222246405745257275088548364400416034343698202683748964795248, 1941265191904823, - 2871145699744811, + 21888242871839275222246405745257275088548364400416034343698202554121876806699, 354016399158034, 216927146216232, 2103844298572644, - 3159489931546154, - 3684650249037825, + 21888242871839275222246405745257275088548364400416034343698202842466108608042, + 21888242871839275222246405745257275088548364400416034343698203367626426099713, 332273310365196, - 4386121396037588, - 4241782880987789, + 21888242871839275222246405745257275088548364400416034343698204069097573099476, + 21888242871839275222246405745257275088548364400416034343698203924759058049677, 630290792267970, 27578750065375, 2087899664921562, 865592830319171, 329129562633721, - 4057367867415574, - 3079856947309697, - 3725478705552594, - 4090991439420266, - 4070661114524316, + 21888242871839275222246405745257275088548364400416034343698203740344044477462, + 21888242871839275222246405745257275088548364400416034343698202762833124371585, + 21888242871839275222246405745257275088548364400416034343698203408454882614482, + 21888242871839275222246405745257275088548364400416034343698203773967616482154, + 21888242871839275222246405745257275088548364400416034343698203753637291586204, 2019303963164157, - 2976028343777059, + 21888242871839275222246405745257275088548364400416034343698202659004520838947, 1224568125231793, - 2525987429712127, + 21888242871839275222246405745257275088548364400416034343698202208963606774015, 1257644046456340, 34884976952249, 1624070312179284, 314513687024615, 1218142963310318, - 3434189695404388, - 2510369230828031, + 21888242871839275222246405745257275088548364400416034343698203117165872466276, + 21888242871839275222246405745257275088548364400416034343698202193345407889919, 1779128915284491, 1852362888155757, - 4393053489445647, - 2266408476602398, - 2499590420060973, - 2301548329170050, + 21888242871839275222246405745257275088548364400416034343698204076029666507535, + 21888242871839275222246405745257275088548364400416034343698201949384653664286, + 21888242871839275222246405745257275088548364400416034343698202182566597122861, + 21888242871839275222246405745257275088548364400416034343698201984524506231938, 1802905497905369, - 3509542215481789, + 21888242871839275222246405745257275088548364400416034343698203192518392543677, 1840580687393321, - 3535391934653725, + 21888242871839275222246405745257275088548364400416034343698203218368111715613, 848502568117846, - 2264538358453602, + 21888242871839275222246405745257275088548364400416034343698201947514535515490, 2032700384152191, 863955045104057, 959139549345746, 1670911294345116, - 3933458654071959, - 3662961906715587, - 3116773564869131, + 21888242871839275222246405745257275088548364400416034343698203616434831133847, + 21888242871839275222246405745257275088548364400416034343698203345938083777475, + 21888242871839275222246405745257275088548364400416034343698202799749741931019, 177065822539544, 1529277026297316, 532901720912082, 524707352212448, - 2628917597093375, - 2922682418024569, + 21888242871839275222246405745257275088548364400416034343698202311893774155263, + 21888242871839275222246405745257275088548364400416034343698202605658595086457, 2081931119602559, 978693471566294, 989149526760025, @@ -19614,69 +19614,69 @@ pub global CRP: [Polynomial; L] = [ 185971189825425, 749412936188962, 38000345898360, - 3543290124751445, + 21888242871839275222246405745257275088548364400416034343698203226266301813333, 1673309626903172, - 2475623639122409, + 21888242871839275222246405745257275088548364400416034343698202158599816184297, 2046874078562040, - 4264088009132916, - 2714063306380357, + 21888242871839275222246405745257275088548364400416034343698203947064186194804, + 21888242871839275222246405745257275088548364400416034343698202397039483442245, 610183494228160, - 4256602873603796, - 2854393476271880, + 21888242871839275222246405745257275088548364400416034343698203939579050665684, + 21888242871839275222246405745257275088548364400416034343698202537369653333768, 1512529495469134, - 2576092804172391, - 3525859565932160, + 21888242871839275222246405745257275088548364400416034343698202259068981234279, + 21888242871839275222246405745257275088548364400416034343698203208835742994048, 610161536035179, 1657972390722368, 1835796525422130, - 3410459466445210, - 2322240564304122, + 21888242871839275222246405745257275088548364400416034343698203093435643507098, + 21888242871839275222246405745257275088548364400416034343698202005216741366010, 1020727736829697, - 2339318267929655, + 21888242871839275222246405745257275088548364400416034343698202022294444991543, 404964179637104, 989517446665469, - 3345171446743574, - 3616030172764532, + 21888242871839275222246405745257275088548364400416034343698203028147623805462, + 21888242871839275222246405745257275088548364400416034343698203299006349826420, 869443443522286, - 3317664670751187, + 21888242871839275222246405745257275088548364400416034343698203000640847813075, 352678039616784, - 4426118138116791, + 21888242871839275222246405745257275088548364400416034343698204109094315178679, 967509063244946, - 2255215442757274, + 21888242871839275222246405745257275088548364400416034343698201938191619819162, 2201839577854379, 1099405450389678, - 3177683317044265, + 21888242871839275222246405745257275088548364400416034343698202860659494106153, 703921746919319, 268973172989594, - 2435892732433989, + 21888242871839275222246405745257275088548364400416034343698202118868909495877, 1940035979829112, 2049611604122876, - 4083633374373329, - 4024576972948652, + 21888242871839275222246405745257275088548364400416034343698203766609551435217, + 21888242871839275222246405745257275088548364400416034343698203707553150010540, 171072535061388, - 3120161342731621, - 4307386333195655, + 21888242871839275222246405745257275088548364400416034343698202803137519793509, + 21888242871839275222246405745257275088548364400416034343698203990362510257543, 2146045613791406, - 4391352844402715, - 3487661921030303, + 21888242871839275222246405745257275088548364400416034343698204074329021464603, + 21888242871839275222246405745257275088548364400416034343698203170638098092191, 1455941555213843, - 2603665311311066, - 2572519927081048, - 3165794326671120, + 21888242871839275222246405745257275088548364400416034343698202286641488372954, + 21888242871839275222246405745257275088548364400416034343698202255496104142936, + 21888242871839275222246405745257275088548364400416034343698202848770503733008, 205006377176520, - 2422398166541757, + 21888242871839275222246405745257275088548364400416034343698202105374343603645, 90805114219159, - 4473343462764886, + 21888242871839275222246405745257275088548364400416034343698204156319639826774, 613817332920707, - 4136240489385387, + 21888242871839275222246405745257275088548364400416034343698203819216666447275, 1386061012364724, 1169567765885931, 2054568984630068, 1094985743555426, 2181472607656637, - 4158970698623601, - 4494735433041313, - 3538327308948181, + 21888242871839275222246405745257275088548364400416034343698203841946875685489, + 21888242871839275222246405745257275088548364400416034343698204177711610103201, + 21888242871839275222246405745257275088548364400416034343698203221303486010069, 320519505433889, 1481058313767597, 1894745580895552, @@ -19685,384 +19685,384 @@ pub global CRP: [Polynomial; L] = [ 1395055849739328, 216443212777419, 2180413735341551, - 3713205102484332, - 4261834464757974, - 3262333929311666, + 21888242871839275222246405745257275088548364400416034343698203396181279546220, + 21888242871839275222246405745257275088548364400416034343698203944810641819862, + 21888242871839275222246405745257275088548364400416034343698202945310106373554, 1240579066497089, 1374886998150625, - 4360589684034185, - 2795770284265575, - 3018935231951700, + 21888242871839275222246405745257275088548364400416034343698204043565861096073, + 21888242871839275222246405745257275088548364400416034343698202478746461327463, + 21888242871839275222246405745257275088548364400416034343698202701911409013588, 598917203026612, 637821369738001, 2026262786618378, 2066195165513387, 1229324566690213, - 2374146785376419, + 21888242871839275222246405745257275088548364400416034343698202057122962438307, 1051764091698397, 1788022209130301, - 4191464536892820, + 21888242871839275222246405745257275088548364400416034343698203874440713954708, 838398368720249, - 2932375965782164, - 3370708065414666, + 21888242871839275222246405745257275088548364400416034343698202615352142844052, + 21888242871839275222246405745257275088548364400416034343698203053684242476554, 334831503936060, - 4291861901673909, + 21888242871839275222246405745257275088548364400416034343698203974838078735797, 1190711725890772, - 2402999874135115, - 2255864148788791, - 3896616771052491, - 4493346210535881, + 21888242871839275222246405745257275088548364400416034343698202085976051197003, + 21888242871839275222246405745257275088548364400416034343698201938840325850679, + 21888242871839275222246405745257275088548364400416034343698203579592948114379, + 21888242871839275222246405745257275088548364400416034343698204176322387597769, 147814057470667, 1338596341839659, 1736631030125169, 1269200492067748, 1265399223473724, - 3525894693166928, - 3374295925256428, - 3947485588241573, - 3862294208830340, - 3930374065938514, + 21888242871839275222246405745257275088548364400416034343698203208870870228816, + 21888242871839275222246405745257275088548364400416034343698203057272102318316, + 21888242871839275222246405745257275088548364400416034343698203630461765303461, + 21888242871839275222246405745257275088548364400416034343698203545270385892228, + 21888242871839275222246405745257275088548364400416034343698203613350243000402, 705789543672556, 39771704027442, 487077177511302, 744670074251886, - 4321084475009590, + 21888242871839275222246405745257275088548364400416034343698204004060652071478, 78681666776661, 1267934511553248, - 4042137873139309, - 4100923488496600, - 2584161570750580, + 21888242871839275222246405745257275088548364400416034343698203725114050201197, + 21888242871839275222246405745257275088548364400416034343698203783899665558488, + 21888242871839275222246405745257275088548364400416034343698202267137747812468, 1695466187089185, 353759289692437, - 4406226483586668, + 21888242871839275222246405745257275088548364400416034343698204089202660648556, 1461258925123458, 2152353321508290, 1609113952035245, - 4392296107875789, + 21888242871839275222246405745257275088548364400416034343698204075272284937677, 109690530224861, 1681324155011766, 333748479929195, - 3581823391053820, + 21888242871839275222246405745257275088548364400416034343698203264799568115708, 2242305153501009, - 4103926050107392, + 21888242871839275222246405745257275088548364400416034343698203786902227169280, 942843898862604, 1938985260222614, - 4428832932294506, + 21888242871839275222246405745257275088548364400416034343698204111809109356394, 1147048353886984, - 3341391771960919, - 4490528809249273, - 2469331965196111, - 2737142966445105, - 3820048866959834, - 2508188264135773, - 4331542164289167, + 21888242871839275222246405745257275088548364400416034343698203024367949022807, + 21888242871839275222246405745257275088548364400416034343698204173504986311161, + 21888242871839275222246405745257275088548364400416034343698202152308142257999, + 21888242871839275222246405745257275088548364400416034343698202420119143506993, + 21888242871839275222246405745257275088548364400416034343698203503025044021722, + 21888242871839275222246405745257275088548364400416034343698202191164441197661, + 21888242871839275222246405745257275088548364400416034343698204014518341351055, 1962754349944838, 1258686721788724, 1712750206378705, 409360387682985, 623653673469582, 1886831506122793, - 3155264267353354, + 21888242871839275222246405745257275088548364400416034343698202838240444415242, 1825012948455867, - 3857074370889690, + 21888242871839275222246405745257275088548364400416034343698203540050547951578, 158075793832886, - 3621649273074800, - 2934245434060562, + 21888242871839275222246405745257275088548364400416034343698203304625450136688, + 21888242871839275222246405745257275088548364400416034343698202617221611122450, 1038927215741386, - 2992020598162885, + 21888242871839275222246405745257275088548364400416034343698202674996775224773, 2079989038060061, 2016417018866943, - 3909464257455816, + 21888242871839275222246405745257275088548364400416034343698203592440434517704, 123594903872406, 2207724223600134, - 3367087554007959, - 3089386885166282, - 4350648940178874, + 21888242871839275222246405745257275088548364400416034343698203050063731069847, + 21888242871839275222246405745257275088548364400416034343698202772363062228170, + 21888242871839275222246405745257275088548364400416034343698204033625117240762, 2168363777772854, 708742850244215, 1565523742709541, - 3721156584348400, + 21888242871839275222246405745257275088548364400416034343698203404132761410288, 203720473204936, 1528104761740287, - 4265738488537977, - 3681421528018457, + 21888242871839275222246405745257275088548364400416034343698203948714665599865, + 21888242871839275222246405745257275088548364400416034343698203364397705080345, 2213667147248929, 1973146285494266, - 3169315630761647, - 2441817602911383, + 21888242871839275222246405745257275088548364400416034343698202852291807823535, + 21888242871839275222246405745257275088548364400416034343698202124793779973271, 322081151343366, - 3155277405658624, + 21888242871839275222246405745257275088548364400416034343698202838253582720512, 920169691584348, 1659076524923592, - 3426962037924476, + 21888242871839275222246405745257275088548364400416034343698203109938214986364, 735590526474857, - 3237601490477125, - 4114291201824404, - 3799271270205766, - 4470969791037434, - 3243313357964321, + 21888242871839275222246405745257275088548364400416034343698202920577667539013, + 21888242871839275222246405745257275088548364400416034343698203797267378886292, + 21888242871839275222246405745257275088548364400416034343698203482247447267654, + 21888242871839275222246405745257275088548364400416034343698204153945968099322, + 21888242871839275222246405745257275088548364400416034343698202926289535026209, 857770744185942, 1343041294522178, 2074194526581289, - 4316533921618312, + 21888242871839275222246405745257275088548364400416034343698203999510098680200, 1469112945423892, 2105051252859236, 556606176971960, - 3830058880078077, - 2510557040189466, - 2670986555363275, + 21888242871839275222246405745257275088548364400416034343698203513035057139965, + 21888242871839275222246405745257275088548364400416034343698202193533217251354, + 21888242871839275222246405745257275088548364400416034343698202353962732425163, 1267996294150940, 36463786406480, - 4376693849096192, + 21888242871839275222246405745257275088548364400416034343698204059670026158080, 711613194681024, 29223378948845, 897861780934676, - 2350014693221385, - 2880051318234414, - 4473650163198152, + 21888242871839275222246405745257275088548364400416034343698202032990870283273, + 21888242871839275222246405745257275088548364400416034343698202563027495296302, + 21888242871839275222246405745257275088548364400416034343698204156626340260040, 109085257730823, - 2361601910632816, - 2263850940808797, - 2597782879568895, + 21888242871839275222246405745257275088548364400416034343698202044578087694704, + 21888242871839275222246405745257275088548364400416034343698201946827117870685, + 21888242871839275222246405745257275088548364400416034343698202280759056630783, 303398225740914, 1583275811208766, - 3657561784591174, + 21888242871839275222246405745257275088548364400416034343698203340537961653062, 646149254480283, 1869196595546189, 1929161034603021, 186999270737976, - 2819623246292962, - 2601000689427482, + 21888242871839275222246405745257275088548364400416034343698202502599423354850, + 21888242871839275222246405745257275088548364400416034343698202283976866489370, 1085919914798985, 838841469197976, 572368624113874, 2021835818038844, 1836592300772039, - 4287446189921937, - 3867138331835377, + 21888242871839275222246405745257275088548364400416034343698203970422366983825, + 21888242871839275222246405745257275088548364400416034343698203550114508897265, 1103289511417494, 902771760518016, 799181888381262, 262449879514633, 2168877538330199, - 2399567663680572, - 3555178054382619, + 21888242871839275222246405745257275088548364400416034343698202082543840742460, + 21888242871839275222246405745257275088548364400416034343698203238154231444507, 251495034276039, 5130911849868, 1265468506146742, 675548166583986, - 2332827889963008, + 21888242871839275222246405745257275088548364400416034343698202015804067024896, 225902449698000, - 2858740658223883, + 21888242871839275222246405745257275088548364400416034343698202541716835285771, 1206703258767569, - 3405924908574833, + 21888242871839275222246405745257275088548364400416034343698203088901085636721, 148054434375438, 1462206305990092, - 3778027306708183, - 2771229014634536, + 21888242871839275222246405745257275088548364400416034343698203461003483770071, + 21888242871839275222246405745257275088548364400416034343698202454205191696424, 255909358018010, 255394658654125, 811080256499888, - 2797426649018935, - 3148792533422061, - 2845822080609052, + 21888242871839275222246405745257275088548364400416034343698202480402826080823, + 21888242871839275222246405745257275088548364400416034343698202831768710483949, + 21888242871839275222246405745257275088548364400416034343698202528798257670940, 102028894782519, 704943474112333, - 2867694773110896, - 3826847740325997, - 3208191010142002, - 4124797235443785, + 21888242871839275222246405745257275088548364400416034343698202550670950172784, + 21888242871839275222246405745257275088548364400416034343698203509823917387885, + 21888242871839275222246405745257275088548364400416034343698202891167187203890, + 21888242871839275222246405745257275088548364400416034343698203807773412505673, 990593764715016, - 2426098770936282, + 21888242871839275222246405745257275088548364400416034343698202109074947998170, 957643840161241, - 3666071730743678, - 3411214032609289, + 21888242871839275222246405745257275088548364400416034343698203349047907805566, + 21888242871839275222246405745257275088548364400416034343698203094190209671177, 1532016606251279, - 4171352658029401, + 21888242871839275222246405745257275088548364400416034343698203854328835091289, 2195064946884680, 2048098516491890, - 3746218314768503, - 2948468813233405, + 21888242871839275222246405745257275088548364400416034343698203429194491830391, + 21888242871839275222246405745257275088548364400416034343698202631444990295293, 2168786200139920, - 3864997726145382, - 2633120245887411, - 3061127471634761, - 2699995509393523, + 21888242871839275222246405745257275088548364400416034343698203547973903207270, + 21888242871839275222246405745257275088548364400416034343698202316096422949299, + 21888242871839275222246405745257275088548364400416034343698202744103648696649, + 21888242871839275222246405745257275088548364400416034343698202382971686455411, 336217425152780, - 3011819536795218, - 4239809616039494, + 21888242871839275222246405745257275088548364400416034343698202694795713857106, + 21888242871839275222246405745257275088548364400416034343698203922785793101382, 1999215034963563, - 4452083781371166, - 2838759215496769, + 21888242871839275222246405745257275088548364400416034343698204135059958433054, + 21888242871839275222246405745257275088548364400416034343698202521735392558657, 1905377662817756, - 3490479934770225, + 21888242871839275222246405745257275088548364400416034343698203173456111832113, 274480308844847, 139590887524848, 1829195088653488, - 3619092786712281, - 3969657254009307, + 21888242871839275222246405745257275088548364400416034343698203302068963774169, + 21888242871839275222246405745257275088548364400416034343698203652633431071195, 1624036411023016, - 2717787044841798, + 21888242871839275222246405745257275088548364400416034343698202400763221903686, 674940723684610, - 3489182462230529, + 21888242871839275222246405745257275088548364400416034343698203172158639292417, 467383913732368, - 3641488963220428, + 21888242871839275222246405745257275088548364400416034343698203324465140282316, 1189989004869219, 721473935481209, 532831486594232, 1559469542534475, - 4093549189990804, + 21888242871839275222246405745257275088548364400416034343698203776525367052692, 832165508997310, - 3723499303401658, - 2427420157124780, - 4361659752873284, + 21888242871839275222246405745257275088548364400416034343698203406475480463546, + 21888242871839275222246405745257275088548364400416034343698202110396334186668, + 21888242871839275222246405745257275088548364400416034343698204044635929935172, 1369184645412358, - 4258358569768382, + 21888242871839275222246405745257275088548364400416034343698203941334746830270, 571108452037300, 444481521230728, - 2396872953274308, + 21888242871839275222246405745257275088548364400416034343698202079849130336196, 463516023547557, 2155615786660242, 191666317891543, - 2326354644477916, + 21888242871839275222246405745257275088548364400416034343698202009330821539804, 2097571567451264, 2003884850958200, - 4455863836251333, - 2611837572595064, - 4136514854579611, - 4405551575562953, + 21888242871839275222246405745257275088548364400416034343698204138840013313221, + 21888242871839275222246405745257275088548364400416034343698202294813749656952, + 21888242871839275222246405745257275088548364400416034343698203819491031641499, + 21888242871839275222246405745257275088548364400416034343698204088527752624841, 1308727555171010, - 3916717984457354, - 2346119043383701, - 2385001167403352, - 2887032454803572, + 21888242871839275222246405745257275088548364400416034343698203599694161519242, + 21888242871839275222246405745257275088548364400416034343698202029095220445589, + 21888242871839275222246405745257275088548364400416034343698202067977344465240, + 21888242871839275222246405745257275088548364400416034343698202570008631865460, 380760718782591, - 3135111749809685, - 3055291183104135, - 2324689427694957, - 2944464677713810, - 2945342915536687, - 2784986680514307, - 4001977979081164, + 21888242871839275222246405745257275088548364400416034343698202818087926871573, + 21888242871839275222246405745257275088548364400416034343698202738267360166023, + 21888242871839275222246405745257275088548364400416034343698202007665604756845, + 21888242871839275222246405745257275088548364400416034343698202627440854775698, + 21888242871839275222246405745257275088548364400416034343698202628319092598575, + 21888242871839275222246405745257275088548364400416034343698202467962857576195, + 21888242871839275222246405745257275088548364400416034343698203684954156143052, 361112173790015, - 2899867979219890, - 2553331757462477, - 2783535015499123, + 21888242871839275222246405745257275088548364400416034343698202582844156281778, + 21888242871839275222246405745257275088548364400416034343698202236307934524365, + 21888242871839275222246405745257275088548364400416034343698202466511192561011, 941080788736333, - 3073838113542800, - 2730717327678052, - 4172696314775485, + 21888242871839275222246405745257275088548364400416034343698202756814290604688, + 21888242871839275222246405745257275088548364400416034343698202413693504739940, + 21888242871839275222246405745257275088548364400416034343698203855672491837373, 601943153844029, - 3839904079274953, + 21888242871839275222246405745257275088548364400416034343698203522880256336841, 1016113535255440, - 3980047437111236, + 21888242871839275222246405745257275088548364400416034343698203663023614173124, 906538528105888, - 3220330167902396, + 21888242871839275222246405745257275088548364400416034343698202903306344964284, 262077927986089, - 3537798683351341, + 21888242871839275222246405745257275088548364400416034343698203220774860413229, 958872386262258, - 3578911427205582, + 21888242871839275222246405745257275088548364400416034343698203261887604267470, 1456618169691242, - 2397141157363085, + 21888242871839275222246405745257275088548364400416034343698202080117334424973, 1252118203595499, - 2395841282992139, + 21888242871839275222246405745257275088548364400416034343698202078817460054027, 1256926635107588, 2225981523975363, 479331765182327, 1282346335057894, 392603582110445, - 2266145116697005, + 21888242871839275222246405745257275088548364400416034343698201949121293758893, 1390956399635579, - 3719335644657966, - 3221597937799011, + 21888242871839275222246405745257275088548364400416034343698203402311821719854, + 21888242871839275222246405745257275088548364400416034343698202904574114860899, 808052232317761, - 4201612908359100, + 21888242871839275222246405745257275088548364400416034343698203884589085420988, 1028303340879942, 27503004146122, - 4099436210668830, - 4035196333850217, + 21888242871839275222246405745257275088548364400416034343698203782412387730718, + 21888242871839275222246405745257275088548364400416034343698203718172510912105, 324452105295974, 1493149910409881, 1936518018172856, - 4389479880868200, + 21888242871839275222246405745257275088548364400416034343698204072456057930088, 1582768488670727, - 4244912251812925, + 21888242871839275222246405745257275088548364400416034343698203927888428874813, 1019570940905529, 413426582597225, 1281413845507887, 1142638408361664, - 3475286638024907, + 21888242871839275222246405745257275088548364400416034343698203158262815086795, 538411360924279, 1536695777047430, 1177217072765854, - 2416579127104664, - 3483055677557642, - 2605699351485726, + 21888242871839275222246405745257275088548364400416034343698202099555304166552, + 21888242871839275222246405745257275088548364400416034343698203166031854619530, + 21888242871839275222246405745257275088548364400416034343698202288675528547614, 318933527465731, 1250206705980948, - 3524193187894943, - 4254093376952686, + 21888242871839275222246405745257275088548364400416034343698203207169364956831, + 21888242871839275222246405745257275088548364400416034343698203937069554014574, 265697594193871, - 2583843605660971, + 21888242871839275222246405745257275088548364400416034343698202266819782722859, 2199130912702112, - 4315003113747130, + 21888242871839275222246405745257275088548364400416034343698203997979290809018, 313942815219113, - 4343898771294513, + 21888242871839275222246405745257275088548364400416034343698204026874948356401, 1306716927146798, - 2346527024300561, + 21888242871839275222246405745257275088548364400416034343698202029503201362449, 760003223668080, 802318129574488, 1791375574959052, - 4242388863122292, - 2466092091213904, + 21888242871839275222246405745257275088548364400416034343698203925365040184180, + 21888242871839275222246405745257275088548364400416034343698202149068268275792, 1885272156917932, - 4124792154265237, - 3126660637484453, + 21888242871839275222246405745257275088548364400416034343698203807768331327125, + 21888242871839275222246405745257275088548364400416034343698202809636814546341, 447872991403869, 713895436479171, 1232873393341539, - 3176351331602110, - 3801113217719862, - 2421298096083693, - 3470069665977886, - 2675808960452205, + 21888242871839275222246405745257275088548364400416034343698202859327508663998, + 21888242871839275222246405745257275088548364400416034343698203484089394781750, + 21888242871839275222246405745257275088548364400416034343698202104274273145581, + 21888242871839275222246405745257275088548364400416034343698203153045843039774, + 21888242871839275222246405745257275088548364400416034343698202358785137514093, 1186393533789325, - 3273827851822504, - 3678971543705504, + 21888242871839275222246405745257275088548364400416034343698202956804028884392, + 21888242871839275222246405745257275088548364400416034343698203361947720767392, 1270205959711214, 1442363841815403, - 4499750591703349, - 4457154968712498, + 21888242871839275222246405745257275088548364400416034343698204182726768765237, + 21888242871839275222246405745257275088548364400416034343698204140131145774386, 2131235348357902, - 4227481000621290, - 3921295671171863, - 2375851302329072, + 21888242871839275222246405745257275088548364400416034343698203910457177683178, + 21888242871839275222246405745257275088548364400416034343698203604271848233751, + 21888242871839275222246405745257275088548364400416034343698202058827479390960, 393180483828501, - 4303700767340878, - 3297605261601930, - 2470252370131156, - 3425014980403658, + 21888242871839275222246405745257275088548364400416034343698203986676944402766, + 21888242871839275222246405745257275088548364400416034343698202980581438663818, + 21888242871839275222246405745257275088548364400416034343698202153228547193044, + 21888242871839275222246405745257275088548364400416034343698203107991157465546, 1651567769210510, - 3898408809962202, + 21888242871839275222246405745257275088548364400416034343698203581384987024090, 753190535037931, 643107143818520, 260344062445006, - 3950932434359891, + 21888242871839275222246405745257275088548364400416034343698203633908611421779, 1260175081234905, 1226366207539325, - 3314628222372147, - 4225147107711038, - 2545372101084353, - 3674415264750251, + 21888242871839275222246405745257275088548364400416034343698202997604399434035, + 21888242871839275222246405745257275088548364400416034343698203908123284772926, + 21888242871839275222246405745257275088548364400416034343698202228348278146241, + 21888242871839275222246405745257275088548364400416034343698203357391441812139, 628698418366873, - 2800622740119967, - 3090789270424848, + 21888242871839275222246405745257275088548364400416034343698202483598917181855, + 21888242871839275222246405745257275088548364400416034343698202773765447486736, 2099582612068693, - 3428551704425511, - 2591889334558098, - 2617337567565114, - 3578900913005900, - 2799100164008375, + 21888242871839275222246405745257275088548364400416034343698203111527881487399, + 21888242871839275222246405745257275088548364400416034343698202274865511619986, + 21888242871839275222246405745257275088548364400416034343698202300313744627002, + 21888242871839275222246405745257275088548364400416034343698203261877090067788, + 21888242871839275222246405745257275088548364400416034343698202482076341070263, 26142534818441, 194211834723759, 1637905244091430, @@ -20070,109 +20070,109 @@ pub global CRP: [Polynomial; L] = [ 1811477094876355, 1942054586785109, 1650689984270352, - 4310581284071729, + 21888242871839275222246405745257275088548364400416034343698203993557461133617, 264810973185306, - 4025561174903797, - 3233721835314868, + 21888242871839275222246405745257275088548364400416034343698203708537351965685, + 21888242871839275222246405745257275088548364400416034343698202916698012376756, 99969289234518, - 2924111353690307, - 3893816431970899, + 21888242871839275222246405745257275088548364400416034343698202607087530752195, + 21888242871839275222246405745257275088548364400416034343698203576792609032787, 909451342617021, 2239587158324934, - 2666950814179298, - 2398157354439082, - 3268751534543952, - 3085842112171070, - 2543057682413291, + 21888242871839275222246405745257275088548364400416034343698202349926991241186, + 21888242871839275222246405745257275088548364400416034343698202081133531500970, + 21888242871839275222246405745257275088548364400416034343698202951727711605840, + 21888242871839275222246405745257275088548364400416034343698202768818289232958, + 21888242871839275222246405745257275088548364400416034343698202226033859475179, 1245113950463665, - 2339553833394450, - 3259731911929571, - 3891562020490141, + 21888242871839275222246405745257275088548364400416034343698202022530010456338, + 21888242871839275222246405745257275088548364400416034343698202942708088991459, + 21888242871839275222246405745257275088548364400416034343698203574538197552029, 1838863803854982, 450522880319227, 1213455443337056, - 2664909597484822, + 21888242871839275222246405745257275088548364400416034343698202347885774546710, 2093053577616598, 1560875620758331, 1500346153861892, - 2852832581944182, + 21888242871839275222246405745257275088548364400416034343698202535808759006070, 2099942592829973, - 3351289805816015, - 3942539610941293, - 3643827499319257, - 4460309901495880, + 21888242871839275222246405745257275088548364400416034343698203034265982877903, + 21888242871839275222246405745257275088548364400416034343698203625515788003181, + 21888242871839275222246405745257275088548364400416034343698203326803676381145, + 21888242871839275222246405745257275088548364400416034343698204143286078557768, 1406419200802831, - 3938461844354313, - 3337778650347464, - 3620586930309475, + 21888242871839275222246405745257275088548364400416034343698203621438021416201, + 21888242871839275222246405745257275088548364400416034343698203020754827409352, + 21888242871839275222246405745257275088548364400416034343698203303563107371363, 2068225786702739, - 2354675079833012, - 3755966278223770, + 21888242871839275222246405745257275088548364400416034343698202037651256894900, + 21888242871839275222246405745257275088548364400416034343698203438942455285658, 1227140772740763, 1787095113151345, - 3550649539336379, - 4456385273058745, - 4314926934549205, - 4123975350418943, - 3915445557449807, + 21888242871839275222246405745257275088548364400416034343698203233625716398267, + 21888242871839275222246405745257275088548364400416034343698204139361450120633, + 21888242871839275222246405745257275088548364400416034343698203997903111611093, + 21888242871839275222246405745257275088548364400416034343698203806951527480831, + 21888242871839275222246405745257275088548364400416034343698203598421734511695, 788472833112144, - 3353858515814725, + 21888242871839275222246405745257275088548364400416034343698203036834692876613, 1382761619653453, 1400602005114417, - 4191952629111004, + 21888242871839275222246405745257275088548364400416034343698203874928806172892, 2202985025049923, - 3316955453165113, - 3223484284738313, + 21888242871839275222246405745257275088548364400416034343698202999931630227001, + 21888242871839275222246405745257275088548364400416034343698202906460461800201, 1434594353255932, - 4055496901490003, - 2305326644930436, - 2994800107441694, - 2256493389255503, - 2722499003458925, + 21888242871839275222246405745257275088548364400416034343698203738473078551891, + 21888242871839275222246405745257275088548364400416034343698201988302821992324, + 21888242871839275222246405745257275088548364400416034343698202677776284503582, + 21888242871839275222246405745257275088548364400416034343698201939469566317391, + 21888242871839275222246405745257275088548364400416034343698202405475180520813, 208948557088763, 871456410975338, 1435867765952746, 1470923032332090, - 3931037774868547, + 21888242871839275222246405745257275088548364400416034343698203614013951930435, 1249336962355495, - 2521976555513814, - 2506317655213455, + 21888242871839275222246405745257275088548364400416034343698202204952732575702, + 21888242871839275222246405745257275088548364400416034343698202189293832275343, 700138130277751, 510782646651012, - 3109670454469769, + 21888242871839275222246405745257275088548364400416034343698202792646631531657, 1834893438742660, 989669345115029, 1562477437033985, - 2284009931538323, - 2467759787208009, + 21888242871839275222246405745257275088548364400416034343698201966986108600211, + 21888242871839275222246405745257275088548364400416034343698202150735964269897, 218317906957304, - 3759571795212802, - 2405600933771814, + 21888242871839275222246405745257275088548364400416034343698203442547972274690, + 21888242871839275222246405745257275088548364400416034343698202088577110833702, 977872606536236, 738513179201231, - 3372429276845938, - 4354300491134676, - 3937261159401246, - 3860147710125525, - 4311845373543843, - 3613714801483923, + 21888242871839275222246405745257275088548364400416034343698203055405453907826, + 21888242871839275222246405745257275088548364400416034343698204037276668196564, + 21888242871839275222246405745257275088548364400416034343698203620237336463134, + 21888242871839275222246405745257275088548364400416034343698203543123887187413, + 21888242871839275222246405745257275088548364400416034343698203994821550605731, + 21888242871839275222246405745257275088548364400416034343698203296690978545811, 1755030149343515, 1924479379936351, 1351242015677585, - 4012115390776220, - 3771736612178737, - 2473746112217975, + 21888242871839275222246405745257275088548364400416034343698203695091567838108, + 21888242871839275222246405745257275088548364400416034343698203454712789240625, + 21888242871839275222246405745257275088548364400416034343698202156722289279863, 15597785107929, - 2575823550812521, - 4268646770106589, + 21888242871839275222246405745257275088548364400416034343698202258799727874409, + 21888242871839275222246405745257275088548364400416034343698203951622947168477, 982865248817241, 1706944860350098, - 3292584138226046, - 4333239412560353, - 2351840393556027, + 21888242871839275222246405745257275088548364400416034343698202975560315287934, + 21888242871839275222246405745257275088548364400416034343698204016215589622241, + 21888242871839275222246405745257275088548364400416034343698202034816570617915, 1185840488012567, - 2722033223687722, - 2328983260828605, + 21888242871839275222246405745257275088548364400416034343698202405009400749610, + 21888242871839275222246405745257275088548364400416034343698202011959437890493, 116181243478490, 1905555298139195, 1267316057197537, @@ -20180,53 +20180,53 @@ pub global CRP: [Polynomial; L] = [ 1683480756973686, 416825901951428, 1858383945452265, - 4258058087293336, - 3361844273302744, + 21888242871839275222246405745257275088548364400416034343698203941034264355224, + 21888242871839275222246405745257275088548364400416034343698203044820450364632, 986497654225728, - 3493306869691138, - 3915980952945898, - 3746602698004539, - 3406307282642245, + 21888242871839275222246405745257275088548364400416034343698203176283046753026, + 21888242871839275222246405745257275088548364400416034343698203598957130007786, + 21888242871839275222246405745257275088548364400416034343698203429578875066427, + 21888242871839275222246405745257275088548364400416034343698203089283459704133, 189986470234558, - 4301128345723364, - 3160782210603799, + 21888242871839275222246405745257275088548364400416034343698203984104522785252, + 21888242871839275222246405745257275088548364400416034343698202843758387665687, 1751574462255615, - 4354647096524526, - 3933938693122225, + 21888242871839275222246405745257275088548364400416034343698204037623273586414, + 21888242871839275222246405745257275088548364400416034343698203616914870184113, 2199792574464514, 1850465278393464, 2067430212633022, - 2821787285627147, - 3608293748183637, - 2747867258212678, + 21888242871839275222246405745257275088548364400416034343698202504763462689035, + 21888242871839275222246405745257275088548364400416034343698203291269925245525, + 21888242871839275222246405745257275088548364400416034343698202430843435274566, 1339991920321587, - 3902452038526161, + 21888242871839275222246405745257275088548364400416034343698203585428215588049, 1173569233676589, 596688679233625, - 3495316029215101, - 3612739000099307, + 21888242871839275222246405745257275088548364400416034343698203178292206276989, + 21888242871839275222246405745257275088548364400416034343698203295715177161195, 428030839511441, - 2747064974372866, - 3709817730061540, - 2921739921772243, - 2895974734955874, + 21888242871839275222246405745257275088548364400416034343698202430041151434754, + 21888242871839275222246405745257275088548364400416034343698203392793907123428, + 21888242871839275222246405745257275088548364400416034343698202604716098834131, + 21888242871839275222246405745257275088548364400416034343698202578950912017762, 2092836729744247, 968593705784469, 1388680773473264, 360030269405619, 744995246900441, 570604908454853, - 3187616399973886, - 3778073857824246, + 21888242871839275222246405745257275088548364400416034343698202870592577035774, + 21888242871839275222246405745257275088548364400416034343698203461050034886134, 72262914432521, 672785461818174, 1149014083258797, 807627805529123, - 2395036251958548, - 3819546107191715, + 21888242871839275222246405745257275088548364400416034343698202078012429020436, + 21888242871839275222246405745257275088548364400416034343698203502522284253603, 320819732344829, 2176003579409020, - 4236442641274808, + 21888242871839275222246405745257275088548364400416034343698203919418818336696, 588167637274468, 120304519336506, 343988488606700, @@ -20236,170 +20236,170 @@ pub global CRP: [Polynomial; L] = [ 2215881862315045, 2050256970193321, 239058975487008, - 2770690667374827, - 3712232678350461, + 21888242871839275222246405745257275088548364400416034343698202453666844436715, + 21888242871839275222246405745257275088548364400416034343698203395208855412349, 1363857702413252, 1790040599657918, 1417410234095220, - 4056436688707297, + 21888242871839275222246405745257275088548364400416034343698203739412865769185, 1917737679867760, - 4083589877449678, + 21888242871839275222246405745257275088548364400416034343698203766566054511566, 894765314129446, - 3203340001759396, - 3753818312707311, + 21888242871839275222246405745257275088548364400416034343698202886316178821284, + 21888242871839275222246405745257275088548364400416034343698203436794489769199, 79268034377773, 193295413079993, 508415446038806, - 4152002781309028, + 21888242871839275222246405745257275088548364400416034343698203834978958370916, 659517435986094, - 2351463286097182, - 4399038812532997, - 3671560367729152, + 21888242871839275222246405745257275088548364400416034343698202034439463159070, + 21888242871839275222246405745257275088548364400416034343698204082014989594885, + 21888242871839275222246405745257275088548364400416034343698203354536544791040, 2066861072158136, 825778653604900, - 3652977251824281, - 2604962025261872, - 4325542045493403, - 4394450699733621, - 4298551645363079, - 3153379150411831, + 21888242871839275222246405745257275088548364400416034343698203335953428886169, + 21888242871839275222246405745257275088548364400416034343698202287938202323760, + 21888242871839275222246405745257275088548364400416034343698204008518222555291, + 21888242871839275222246405745257275088548364400416034343698204077426876795509, + 21888242871839275222246405745257275088548364400416034343698203981527822424967, + 21888242871839275222246405745257275088548364400416034343698202836355327473719, 1535873460090821, 771464274867233, - 2490895855666327, - 2966472215543592, - 2904528608936944, - 3616169107254977, - 2882144613626603, + 21888242871839275222246405745257275088548364400416034343698202173872032728215, + 21888242871839275222246405745257275088548364400416034343698202649448392605480, + 21888242871839275222246405745257275088548364400416034343698202587504785998832, + 21888242871839275222246405745257275088548364400416034343698203299145284316865, + 21888242871839275222246405745257275088548364400416034343698202565120790688491, 1519414876101047, 1083204229629015, 1670619185722724, - 3907521549163473, - 3790213829161768, - 3581298420882958, + 21888242871839275222246405745257275088548364400416034343698203590497726225361, + 21888242871839275222246405745257275088548364400416034343698203473190006223656, + 21888242871839275222246405745257275088548364400416034343698203264274597944846, 1197135019719364, - 4137094862469952, - 2527661620109149, - 2553650502033669, - 4197206401986231, - 4244993250745189, + 21888242871839275222246405745257275088548364400416034343698203820071039531840, + 21888242871839275222246405745257275088548364400416034343698202210637797171037, + 21888242871839275222246405745257275088548364400416034343698202236626679095557, + 21888242871839275222246405745257275088548364400416034343698203880182579048119, + 21888242871839275222246405745257275088548364400416034343698203927969427807077, 1230115056990645, - 4223741090300835, - 3838664458264279, + 21888242871839275222246405745257275088548364400416034343698203906717267362723, + 21888242871839275222246405745257275088548364400416034343698203521640635326167, 2009592198590358, - 3734571427552828, - 3143796019270986, + 21888242871839275222246405745257275088548364400416034343698203417547604614716, + 21888242871839275222246405745257275088548364400416034343698202826772196332874, 1101196938738985, - 3067557477975902, - 4498188459915197, - 2803742807828519, + 21888242871839275222246405745257275088548364400416034343698202750533655037790, + 21888242871839275222246405745257275088548364400416034343698204181164636977085, + 21888242871839275222246405745257275088548364400416034343698202486718984890407, 976157095635378, - 4451799938423927, + 21888242871839275222246405745257275088548364400416034343698204134776115485815, 1919233859110783, 127320133341625, 1530532972108457, - 4321405938595374, - 3747562290156403, + 21888242871839275222246405745257275088548364400416034343698204004382115657262, + 21888242871839275222246405745257275088548364400416034343698203430538467218291, 853514314423370, 1349749393256384, - 3401382367300503, + 21888242871839275222246405745257275088548364400416034343698203084358544362391, 1739509200320742, 2004700107649651, - 3919997898189103, + 21888242871839275222246405745257275088548364400416034343698203602974075250991, 680999147052936, 1504514640070630, - 3210636068310549, + 21888242871839275222246405745257275088548364400416034343698202893612245372437, 1060118676559095, 1245273501419623, - 2818107408942955, + 21888242871839275222246405745257275088548364400416034343698202501083586004843, 828326156797844, 1783852506772487, - 4320785151623820, + 21888242871839275222246405745257275088548364400416034343698204003761328685708, 7927651658426, - 2693595721483070, - 3284874953551329, + 21888242871839275222246405745257275088548364400416034343698202376571898544958, + 21888242871839275222246405745257275088548364400416034343698202967851130613217, 801461558220767, 396190475545318, 2076906833444956, 1886712619703399, - 2622267214511920, - 2703562485212312, + 21888242871839275222246405745257275088548364400416034343698202305243391573808, + 21888242871839275222246405745257275088548364400416034343698202386538662274200, 966453964352581, 895445973765065, - 3386897845470563, + 21888242871839275222246405745257275088548364400416034343698203069874022532451, 1727439413088034, 651064162279539, - 3707308805566156, - 3502884809004960, + 21888242871839275222246405745257275088548364400416034343698203390284982628044, + 21888242871839275222246405745257275088548364400416034343698203185860986066848, 313054591602877, 798362014705092, 1729558201552005, 714267755633904, 1706299915045301, - 2545237785327315, - 3294546590752107, - 4152879504942581, - 4037513629974663, + 21888242871839275222246405745257275088548364400416034343698202228213962389203, + 21888242871839275222246405745257275088548364400416034343698202977522767813995, + 21888242871839275222246405745257275088548364400416034343698203835855682004469, + 21888242871839275222246405745257275088548364400416034343698203720489807036551, 800813297977853, - 4443536343138563, - 3612677265570767, - 3970877632805216, + 21888242871839275222246405745257275088548364400416034343698204126512520200451, + 21888242871839275222246405745257275088548364400416034343698203295653442632655, + 21888242871839275222246405745257275088548364400416034343698203653853809867104, 1571865469938586, - 4227564301688510, + 21888242871839275222246405745257275088548364400416034343698203910540478750398, 1936997039036832, 1256540113001639, - 2797324245700089, + 21888242871839275222246405745257275088548364400416034343698202480300422761977, 894072979953880, 155199972889909, - 2699030100382366, + 21888242871839275222246405745257275088548364400416034343698202382006277444254, 1860750323713544, 36639286364320, 1684525338088490, 2136331388586388, 1441474628433960, - 3639124718417329, - 3295686284974953, - 3760111582274766, + 21888242871839275222246405745257275088548364400416034343698203322100895479217, + 21888242871839275222246405745257275088548364400416034343698202978662462036841, + 21888242871839275222246405745257275088548364400416034343698203443087759336654, 1788022404676256, - 3744707944430087, + 21888242871839275222246405745257275088548364400416034343698203427684121491975, 2116809785514049, - 2649943394360510, - 2404144894492268, - 2688753539493229, - 3011701873695543, + 21888242871839275222246405745257275088548364400416034343698202332919571422398, + 21888242871839275222246405745257275088548364400416034343698202087121071554156, + 21888242871839275222246405745257275088548364400416034343698202371729716555117, + 21888242871839275222246405745257275088548364400416034343698202694678050757431, 1670858687308856, - 4266774975864483, + 21888242871839275222246405745257275088548364400416034343698203949751152926371, 2012587484051906, - 2393676777059280, + 21888242871839275222246405745257275088548364400416034343698202076652954121168, 298467539186029, 651359356371250, - 3626851750869904, + 21888242871839275222246405745257275088548364400416034343698203309827927931792, 2038915455908372, - 4233034544918977, - 4497345021526070, + 21888242871839275222246405745257275088548364400416034343698203916010721980865, + 21888242871839275222246405745257275088548364400416034343698204180321198587958, 2082896581755539, - 2546579249320021, - 3010384570083597, + 21888242871839275222246405745257275088548364400416034343698202229555426381909, + 21888242871839275222246405745257275088548364400416034343698202693360747145485, 527023802877612, - 2731077047938103, - 3507596039585200, + 21888242871839275222246405745257275088548364400416034343698202414053224999991, + 21888242871839275222246405745257275088548364400416034343698203190572216647088, 692196584475928, 716030582399786, - 3209436849924071, - 2698521311686690, + 21888242871839275222246405745257275088548364400416034343698202892413026985959, + 21888242871839275222246405745257275088548364400416034343698202381497488748578, 549847117269442, 971322676176155, - 4336400671484308, - 4424157042852175, - 4340888486208008, + 21888242871839275222246405745257275088548364400416034343698204019376848546196, + 21888242871839275222246405745257275088548364400416034343698204107133219914063, + 21888242871839275222246405745257275088548364400416034343698204023864663269896, 785704936749042, - 3966338764026685, + 21888242871839275222246405745257275088548364400416034343698203649314941088573, 1229191866093018, - 4147419858236355, + 21888242871839275222246405745257275088548364400416034343698203830396035298243, 176237021608891, 2043860793115685, - 2976626125474411, + 21888242871839275222246405745257275088548364400416034343698202659602302536299, 398340943560113, - 3808414555397889, + 21888242871839275222246405745257275088548364400416034343698203491390732459777, 1458031350086051, 396208592075000, 1560521590126014, @@ -20407,291 +20407,291 @@ pub global CRP: [Polynomial; L] = [ 1844916572528167, 2221883567329393, 68374410224602, - 3649199241085964, + 21888242871839275222246405745257275088548364400416034343698203332175418147852, 1563166420629529, 1113985068934138, 1034366107355022, - 3223020771697814, + 21888242871839275222246405745257275088548364400416034343698202905996948759702, 639484910313774, 662642429766093, - 3646133075287888, - 2548777958648117, - 4015495807446464, - 2518193582109377, - 4039310093769169, + 21888242871839275222246405745257275088548364400416034343698203329109252349776, + 21888242871839275222246405745257275088548364400416034343698202231754135710005, + 21888242871839275222246405745257275088548364400416034343698203698471984508352, + 21888242871839275222246405745257275088548364400416034343698202201169759171265, + 21888242871839275222246405745257275088548364400416034343698203722286270831057, 415611696125016, 23017724185939, 1971036098174984, - 2534546944032296, - 4202595222403080, - 3532209445213976, + 21888242871839275222246405745257275088548364400416034343698202217523121094184, + 21888242871839275222246405745257275088548364400416034343698203885571399464968, + 21888242871839275222246405745257275088548364400416034343698203215185622275864, 1575719729334791, - 3674057480525522, - 2551054575189067, + 21888242871839275222246405745257275088548364400416034343698203357033657587410, + 21888242871839275222246405745257275088548364400416034343698202234030752250955, 1666377407484058, 535465662748330, - 3960010200786209, - 3913969890334748, + 21888242871839275222246405745257275088548364400416034343698203642986377848097, + 21888242871839275222246405745257275088548364400416034343698203596946067396636, 794590316044422, 108062764245327, - 3241841366492564, - 4163355829793311, - 3773621834336792, + 21888242871839275222246405745257275088548364400416034343698202924817543554452, + 21888242871839275222246405745257275088548364400416034343698203846332006855199, + 21888242871839275222246405745257275088548364400416034343698203456598011398680, 1801636045923438, - 3282730145306004, + 21888242871839275222246405745257275088548364400416034343698202965706322367892, 555433312341438, - 2806606369820691, + 21888242871839275222246405745257275088548364400416034343698202489582546882579, 1830978879445064, 337624912044662, 365614081700313, - 4130589316151305, - 4465865164574599, + 21888242871839275222246405745257275088548364400416034343698203813565493213193, + 21888242871839275222246405745257275088548364400416034343698204148841341636487, 411855767901300, 1152981525329764, 119864030587313, - 3892242796235637, + 21888242871839275222246405745257275088548364400416034343698203575218973297525, 314471086088965, - 2408621495228760, - 2713307552193243, - 3057507568002648, + 21888242871839275222246405745257275088548364400416034343698202091597672290648, + 21888242871839275222246405745257275088548364400416034343698202396283729255131, + 21888242871839275222246405745257275088548364400416034343698202740483745064536, 765094339431605, - 3510815029203222, - 4286579915590511, - 2905990384800008, - 3297881053298091, - 3435483447982582, - 3057729696109408, + 21888242871839275222246405745257275088548364400416034343698203193791206265110, + 21888242871839275222246405745257275088548364400416034343698203969556092652399, + 21888242871839275222246405745257275088548364400416034343698202588966561861896, + 21888242871839275222246405745257275088548364400416034343698202980857230359979, + 21888242871839275222246405745257275088548364400416034343698203118459625044470, + 21888242871839275222246405745257275088548364400416034343698202740705873171296, 1060111848599793, 357427151618779, 24083390839764, 1885441034349545, 1751776117412652, - 3758453541756118, + 21888242871839275222246405745257275088548364400416034343698203441429718818006, 650587220366642, 1237910402358887, - 3326759197131801, - 2391209462784705, - 4074971101537919, + 21888242871839275222246405745257275088548364400416034343698203009735374193689, + 21888242871839275222246405745257275088548364400416034343698202074185639846593, + 21888242871839275222246405745257275088548364400416034343698203757947278599807, 1446053319074954, - 3329496475375939, + 21888242871839275222246405745257275088548364400416034343698203012472652437827, 1867500416649521, 562738237800344, - 4452345399843683, + 21888242871839275222246405745257275088548364400416034343698204135321576905571, 1344723688094646, 1746047741442745, 903968426574340, 23208781651773, - 4169311383135150, + 21888242871839275222246405745257275088548364400416034343698203852287560197038, 1205094779891180, - 2822416026112416, + 21888242871839275222246405745257275088548364400416034343698202505392203174304, 1374776645693559, - 4487922109250819, - 2485276599226909, - 3625507815119329, - 3405191960322669, + 21888242871839275222246405745257275088548364400416034343698204170898286312707, + 21888242871839275222246405745257275088548364400416034343698202168252776288797, + 21888242871839275222246405745257275088548364400416034343698203308483992181217, + 21888242871839275222246405745257275088548364400416034343698203088168137384557, 1197906552835547, 1580730645036540, - 3640312554381916, + 21888242871839275222246405745257275088548364400416034343698203323288731443804, 1251266735624835, 904079491992513, 1697678402869077, 1005377795606654, - 3112449608610993, + 21888242871839275222246405745257275088548364400416034343698202795425785672881, 176048319742690, 2219880879323965, - 3102401084103576, - 4384246664709143, + 21888242871839275222246405745257275088548364400416034343698202785377261165464, + 21888242871839275222246405745257275088548364400416034343698204067222841771031, 1534975198692775, 2235048126381681, 853917664338041, 602822985485333, - 3203338450438608, - 3467107857464033, + 21888242871839275222246405745257275088548364400416034343698202886314627500496, + 21888242871839275222246405745257275088548364400416034343698203150084034525921, 130243210875468, 1081015620456296, 1510377913440406, - 4384165253539319, - 3790003413771349, + 21888242871839275222246405745257275088548364400416034343698204067141430601207, + 21888242871839275222246405745257275088548364400416034343698203472979590833237, 64461793142602, 770594148599741, 863219214167419, 1817373648675154, 100380380212489, - 2428398897675446, + 21888242871839275222246405745257275088548364400416034343698202111375074737334, 1872227443422000, - 3796170004717323, - 4204201140698137, + 21888242871839275222246405745257275088548364400416034343698203479146181779211, + 21888242871839275222246405745257275088548364400416034343698203887177317760025, 1614354964079403, - 3146392943568429, - 2438874418452751, - 3510726259513120, + 21888242871839275222246405745257275088548364400416034343698202829369120630317, + 21888242871839275222246405745257275088548364400416034343698202121850595514639, + 21888242871839275222246405745257275088548364400416034343698203193702436575008, 1396419867431638, - 3323376837831129, + 21888242871839275222246405745257275088548364400416034343698203006353014893017, 679624951238575, 2172129046390118, 279083814581272, - 3040779122041361, + 21888242871839275222246405745257275088548364400416034343698202723755299103249, 28793256587445, 1005783550724182, 40558692541730, - 3088158918490941, - 3381778299594098, + 21888242871839275222246405745257275088548364400416034343698202771135095552829, + 21888242871839275222246405745257275088548364400416034343698203064754476655986, 1876195138740828, 2027926456081716, 82926482563827, 1934619163246083, - 4441804000607864, + 21888242871839275222246405745257275088548364400416034343698204124780177669752, 1234908822241930, - 3353539490118805, - 3409655148781099, - 4106635826525368, + 21888242871839275222246405745257275088548364400416034343698203036515667180693, + 21888242871839275222246405745257275088548364400416034343698203092631325842987, + 21888242871839275222246405745257275088548364400416034343698203789612003587256, 868562671239589, 958459536529219, 2226339446540048, 2078402911580085, 967831396542505, - 3081536167696073, + 21888242871839275222246405745257275088548364400416034343698202764512344757961, 1406433836135811, - 4380589603200463, - 3686954516671168, - 3010466506974068, - 3158388155110219, - 2998581726833207, + 21888242871839275222246405745257275088548364400416034343698204063565780262351, + 21888242871839275222246405745257275088548364400416034343698203369930693733056, + 21888242871839275222246405745257275088548364400416034343698202693442684035956, + 21888242871839275222246405745257275088548364400416034343698202841364332172107, + 21888242871839275222246405745257275088548364400416034343698202681557903895095, 590548729821558, - 3242730209914263, - 3019378224783317, - 2504137420388503, - 2690569305080607, - 4033311155879117, + 21888242871839275222246405745257275088548364400416034343698202925706386976151, + 21888242871839275222246405745257275088548364400416034343698202702354401845205, + 21888242871839275222246405745257275088548364400416034343698202187113597450391, + 21888242871839275222246405745257275088548364400416034343698202373545482142495, + 21888242871839275222246405745257275088548364400416034343698203716287332941005, 962167673464398, 138409089555089, - 4409956188687020, + 21888242871839275222246405745257275088548364400416034343698204092932365748908, 1455199511188180, 1946284197953438, - 2716586731123669, + 21888242871839275222246405745257275088548364400416034343698202399562908185557, 1531797695116105, 1226665517016474, 758797829560555, - 3963529314964786, + 21888242871839275222246405745257275088548364400416034343698203646505492026674, 544089680090898, - 2789274504366409, - 4252822236621864, - 3690507600379380, - 2962738007234242, - 3419686525894499, + 21888242871839275222246405745257275088548364400416034343698202472250681428297, + 21888242871839275222246405745257275088548364400416034343698203935798413683752, + 21888242871839275222246405745257275088548364400416034343698203373483777441268, + 21888242871839275222246405745257275088548364400416034343698202645714184296130, + 21888242871839275222246405745257275088548364400416034343698203102662702956387, 2039937143807556, 869150592433537, 1584848647157969, 539143852558265, 211420847855641, - 2314456238594590, + 21888242871839275222246405745257275088548364400416034343698201997432415656478, 381500968409527, - 3814997709618980, - 3978966805343810, - 2447547525202112, + 21888242871839275222246405745257275088548364400416034343698203497973886680868, + 21888242871839275222246405745257275088548364400416034343698203661942982405698, + 21888242871839275222246405745257275088548364400416034343698202130523702264000, 280389454826695, - 3702445851743221, + 21888242871839275222246405745257275088548364400416034343698203385422028805109, 1406760806731669, - 3840177218267827, - 3176119132257330, + 21888242871839275222246405745257275088548364400416034343698203523153395329715, + 21888242871839275222246405745257275088548364400416034343698202859095309319218, 2077711431328679, 1705997306457595, 2025277306224881, 1983634722257882, - 2952515057643143, - 3991150242773307, - 3320643555307941, - 2569003960092021, - 3374601204333967, + 21888242871839275222246405745257275088548364400416034343698202635491234705031, + 21888242871839275222246405745257275088548364400416034343698203674126419835195, + 21888242871839275222246405745257275088548364400416034343698203003619732369829, + 21888242871839275222246405745257275088548364400416034343698202251980137153909, + 21888242871839275222246405745257275088548364400416034343698203057577381395855, 1967854826005060, - 4158823640026992, - 2802306370900723, + 21888242871839275222246405745257275088548364400416034343698203841799817088880, + 21888242871839275222246405745257275088548364400416034343698202485282547962611, 1089185287966041, 1237523052749012, 1775480283290901, - 2474867283107196, + 21888242871839275222246405745257275088548364400416034343698202157843460169084, 323782935751011, - 2902922899375424, - 3043377361221889, - 2900331310355006, - 3568314733843058, + 21888242871839275222246405745257275088548364400416034343698202585899076437312, + 21888242871839275222246405745257275088548364400416034343698202726353538283777, + 21888242871839275222246405745257275088548364400416034343698202583307487416894, + 21888242871839275222246405745257275088548364400416034343698203251290910904946, 1238015947546775, - 3518972127412515, + 21888242871839275222246405745257275088548364400416034343698203201948304474403, 1090331947960903, - 3633494145107919, - 4449252934759965, + 21888242871839275222246405745257275088548364400416034343698203316470322169807, + 21888242871839275222246405745257275088548364400416034343698204132229111821853, 1574677885847630, - 4404961241393556, + 21888242871839275222246405745257275088548364400416034343698204087937418455444, 1255589031964144, - 4068967454703586, + 21888242871839275222246405745257275088548364400416034343698203751943631765474, 941944865025627, 1960996700958757, - 4381773140795599, - 3203011995810711, + 21888242871839275222246405745257275088548364400416034343698204064749317857487, + 21888242871839275222246405745257275088548364400416034343698202885988172872599, 2072483972063891, 1986266069602762, 883883808249130, 516494752384943, 1630299636403672, - 4422071796841412, - 2570423956346775, - 2543616563069108, + 21888242871839275222246405745257275088548364400416034343698204105047973903300, + 21888242871839275222246405745257275088548364400416034343698202253400133408663, + 21888242871839275222246405745257275088548364400416034343698202226592740130996, 418446126187707, 1159230747310488, 1627830644421154, 694268265131590, - 2407563881726078, + 21888242871839275222246405745257275088548364400416034343698202090540058787966, 507426696353724, 1722151662738236, - 3660989738683818, + 21888242871839275222246405745257275088548364400416034343698203343965915745706, 1498610586946822, - 4189594876706038, + 21888242871839275222246405745257275088548364400416034343698203872571053767926, 2082891815360716, 1783119238099807, 1040844883074369, 2101662137849154, 175318506707750, - 3072364184999662, - 3628156514783336, + 21888242871839275222246405745257275088548364400416034343698202755340362061550, + 21888242871839275222246405745257275088548364400416034343698203311132691845224, 1799674162209771, - 2924998519066472, + 21888242871839275222246405745257275088548364400416034343698202607974696128360, 1606743117755935, 2247670445058805, - 3261885001120095, + 21888242871839275222246405745257275088548364400416034343698202944861178181983, 1295272169746149, - 2351205661065593, - 2273920490774112, - 3554285364869893, + 21888242871839275222246405745257275088548364400416034343698202034181838127481, + 21888242871839275222246405745257275088548364400416034343698201956896667836000, + 21888242871839275222246405745257275088548364400416034343698203237261541931781, 2075952341406577, 107177063966834, 1738772549481308, - 3713838270377426, - 4251896127630579, - 4327210573051529, + 21888242871839275222246405745257275088548364400416034343698203396814447439314, + 21888242871839275222246405745257275088548364400416034343698203934872304692467, + 21888242871839275222246405745257275088548364400416034343698204010186750113417, 1847265342220846, 633590464549354, - 3558407234755431, + 21888242871839275222246405745257275088548364400416034343698203241383411817319, 297200097604493, - 3826201869026222, - 2469300287119200, + 21888242871839275222246405745257275088548364400416034343698203509178046088110, + 21888242871839275222246405745257275088548364400416034343698202152276464181088, 512821797045474, - 4175407569763972, + 21888242871839275222246405745257275088548364400416034343698203858383746825860, 12662333948334, 1692207505556499, 2040153505536775, 986851554939032, - 4391378314963051, + 21888242871839275222246405745257275088548364400416034343698204074354492024939, 576947595448326, - 3300321460053345, + 21888242871839275222246405745257275088548364400416034343698202983297637115233, 66705003186967, - 4158812572688994, - 2252367142933754, + 21888242871839275222246405745257275088548364400416034343698203841788749750882, + 21888242871839275222246405745257275088548364400416034343698201935343319995642, 57942227300215, 1443175018172792, - 3624771032582524, + 21888242871839275222246405745257275088548364400416034343698203307747209644412, 1109601029297256, - 4430449398726316, - 3106980085379123, + 21888242871839275222246405745257275088548364400416034343698204113425575788204, + 21888242871839275222246405745257275088548364400416034343698202789956262441011, 1372656714655546, 1258322338797892, 1941747279239133, @@ -20699,271 +20699,271 @@ pub global CRP: [Polynomial; L] = [ 1801001091063083, 1111491700302118, 1114022558632497, - 3397458029049417, + 21888242871839275222246405745257275088548364400416034343698203080434206111305, 988597873034587, - 4295635805426340, + 21888242871839275222246405745257275088548364400416034343698203978611982488228, 2154915110286747, - 4226552370078407, + 21888242871839275222246405745257275088548364400416034343698203909528547140295, 1921897083351582, 193128923573395, - 4179834508310662, + 21888242871839275222246405745257275088548364400416034343698203862810685372550, 1655281020141549, - 4486673335272572, - 3985406631034459, - 3352745906025364, - 3767127538734868, - 2569614196341619, - 3767618348952134, - 4189395769919810, + 21888242871839275222246405745257275088548364400416034343698204169649512334460, + 21888242871839275222246405745257275088548364400416034343698203668382808096347, + 21888242871839275222246405745257275088548364400416034343698203035722083087252, + 21888242871839275222246405745257275088548364400416034343698203450103715796756, + 21888242871839275222246405745257275088548364400416034343698202252590373403507, + 21888242871839275222246405745257275088548364400416034343698203450594526014022, + 21888242871839275222246405745257275088548364400416034343698203872371946981698, 1760194513176502, - 4353238229004297, - 3571978503799503, - 4373207645790555, - 3885331545779265, - 3651960619571776, - 4064192660596167, - 4313042944375474, + 21888242871839275222246405745257275088548364400416034343698204036214406066185, + 21888242871839275222246405745257275088548364400416034343698203254954680861391, + 21888242871839275222246405745257275088548364400416034343698204056183822852443, + 21888242871839275222246405745257275088548364400416034343698203568307722841153, + 21888242871839275222246405745257275088548364400416034343698203334936796633664, + 21888242871839275222246405745257275088548364400416034343698203747168837658055, + 21888242871839275222246405745257275088548364400416034343698203996019121437362, 1762262030272611, - 2840880137054294, + 21888242871839275222246405745257275088548364400416034343698202523856314116182, 1527928147274699, - 3078135509352898, + 21888242871839275222246405745257275088548364400416034343698202761111686414786, 312715233196721, 1348217088946547, 783738295803956, 2100130467782537, - 2951324088360028, - 2415609873601878, + 21888242871839275222246405745257275088548364400416034343698202634300265421916, + 21888242871839275222246405745257275088548364400416034343698202098586050663766, 2196933933918194, - 3387798659734909, - 2342932996817844, - 2691989153399800, + 21888242871839275222246405745257275088548364400416034343698203070774836796797, + 21888242871839275222246405745257275088548364400416034343698202025909173879732, + 21888242871839275222246405745257275088548364400416034343698202374965330461688, 2059429058337592, - 2755702166882004, - 3247832711640357, + 21888242871839275222246405745257275088548364400416034343698202438678343943892, + 21888242871839275222246405745257275088548364400416034343698202930808888702245, 2219332325044647, 736057926340124, - 3120304528285062, + 21888242871839275222246405745257275088548364400416034343698202803280705346950, 1797051085593698, - 4183721581462344, + 21888242871839275222246405745257275088548364400416034343698203866697758524232, 1564041004483775, - 4176367251313021, - 4020238121491304, - 4106562948896805, - 2890752490137188, - 2256495203185236, - 4361377602984907, + 21888242871839275222246405745257275088548364400416034343698203859343428374909, + 21888242871839275222246405745257275088548364400416034343698203703214298553192, + 21888242871839275222246405745257275088548364400416034343698203789539125958693, + 21888242871839275222246405745257275088548364400416034343698202573728667199076, + 21888242871839275222246405745257275088548364400416034343698201939471380247124, + 21888242871839275222246405745257275088548364400416034343698204044353780046795, 1314269672478488, - 3910354000983165, - 4483653281426284, + 21888242871839275222246405745257275088548364400416034343698203593330178045053, + 21888242871839275222246405745257275088548364400416034343698204166629458488172, 1067608952461743, 772740015455098, - 2646987046386422, + 21888242871839275222246405745257275088548364400416034343698202329963223448310, 747912358992688, - 3614331556192483, - 3636291980784265, - 2550731661305119, - 3643516427034573, + 21888242871839275222246405745257275088548364400416034343698203297307733254371, + 21888242871839275222246405745257275088548364400416034343698203319268157846153, + 21888242871839275222246405745257275088548364400416034343698202233707838367007, + 21888242871839275222246405745257275088548364400416034343698203326492604096461, 2081800192023600, - 3241973251497616, - 3446910333076293, + 21888242871839275222246405745257275088548364400416034343698202924949428559504, + 21888242871839275222246405745257275088548364400416034343698203129886510138181, 2110137283173737, - 2877890773863431, - 2548139540906335, + 21888242871839275222246405745257275088548364400416034343698202560866950925319, + 21888242871839275222246405745257275088548364400416034343698202231115717968223, 1492008376363777, - 2855611842059421, + 21888242871839275222246405745257275088548364400416034343698202538588019121309, 939505026591238, 194876775441522, - 4271082477671766, + 21888242871839275222246405745257275088548364400416034343698203954058654733654, 1501964439390197, - 2788910175630833, - 4278523915414197, - 2656672482982854, - 3170065939637487, - 3203810369403661, - 3001530435683584, - 3864437925767873, + 21888242871839275222246405745257275088548364400416034343698202471886352692721, + 21888242871839275222246405745257275088548364400416034343698203961500092476085, + 21888242871839275222246405745257275088548364400416034343698202339648660044742, + 21888242871839275222246405745257275088548364400416034343698202853042116699375, + 21888242871839275222246405745257275088548364400416034343698202886786546465549, + 21888242871839275222246405745257275088548364400416034343698202684506612745472, + 21888242871839275222246405745257275088548364400416034343698203547414102829761, 1690508915005888, - 2470288234777959, - 3302021602728186, - 3810640410931961, - 4347185031181415, + 21888242871839275222246405745257275088548364400416034343698202153264411839847, + 21888242871839275222246405745257275088548364400416034343698202984997779790074, + 21888242871839275222246405745257275088548364400416034343698203493616587993849, + 21888242871839275222246405745257275088548364400416034343698204030161208243303, 510300394530761, 1057231544329662, - 3533254921577398, - 4333454156973632, - 3931193740969423, - 2488292053725699, + 21888242871839275222246405745257275088548364400416034343698203216231098639286, + 21888242871839275222246405745257275088548364400416034343698204016430334035520, + 21888242871839275222246405745257275088548364400416034343698203614169918031311, + 21888242871839275222246405745257275088548364400416034343698202171268230787587, 267175985488254, 1774667237565599, - 3807987131250491, + 21888242871839275222246405745257275088548364400416034343698203490963308312379, 1240056261159324, 37502814385737, - 2767192069262714, + 21888242871839275222246405745257275088548364400416034343698202450168246324602, 1605814662957041, - 2788887913961224, + 21888242871839275222246405745257275088548364400416034343698202471864091023112, 1823935551192633, - 2670591602744070, - 4417847118565074, + 21888242871839275222246405745257275088548364400416034343698202353567779805958, + 21888242871839275222246405745257275088548364400416034343698204100823295626962, 2121162939105849, - 3626133243917257, - 3698599747857668, + 21888242871839275222246405745257275088548364400416034343698203309109420979145, + 21888242871839275222246405745257275088548364400416034343698203381575924919556, 1237542493841998, 681230028574390, - 3527069882341940, + 21888242871839275222246405745257275088548364400416034343698203210046059403828, 288346404009204, 1327659071279127, - 4468957164339750, + 21888242871839275222246405745257275088548364400416034343698204151933341401638, 185805132677315, - 3905803213900911, - 4253763574919454, - 3476258997970109, + 21888242871839275222246405745257275088548364400416034343698203588779390962799, + 21888242871839275222246405745257275088548364400416034343698203936739751981342, + 21888242871839275222246405745257275088548364400416034343698203159235175031997, 1349327728808071, 529260277509456, - 3012434681075769, - 3452720681688978, + 21888242871839275222246405745257275088548364400416034343698202695410858137657, + 21888242871839275222246405745257275088548364400416034343698203135696858750866, 763062012736393, - 4208554046990763, + 21888242871839275222246405745257275088548364400416034343698203891530224052651, 1793986617452397, 1530734735143215, 80124622119974, - 2895961699052079, + 21888242871839275222246405745257275088548364400416034343698202578937876113967, 531311493408550, 695312600720459, - 2592282286545281, + 21888242871839275222246405745257275088548364400416034343698202275258463607169, 813458246311518, 1510580328494556, 755312782911053, 1811006920646703, - 2553592865098631, + 21888242871839275222246405745257275088548364400416034343698202236569042160519, 1037462651622529, - 3287037935600899, + 21888242871839275222246405745257275088548364400416034343698202970014112662787, 1385594230486572, 2042832017176113, 1052527442205008, 618677917800678, - 3786532505571835, + 21888242871839275222246405745257275088548364400416034343698203469508682633723, 67455319090494, 1866605713827515, 1084616268290886, - 3898719151592701, - 3568482616082410, + 21888242871839275222246405745257275088548364400416034343698203581695328654589, + 21888242871839275222246405745257275088548364400416034343698203251458793144298, 1028650335277404, - 2748550718980472, - 2901644851430742, + 21888242871839275222246405745257275088548364400416034343698202431526896042360, + 21888242871839275222246405745257275088548364400416034343698202584621028492630, 173892136497476, - 2328251400829314, - 2730866479509090, + 21888242871839275222246405745257275088548364400416034343698202011227577891202, + 21888242871839275222246405745257275088548364400416034343698202413842656570978, 1871761141159884, 1195570541354558, 1394342785564698, 1701306172469186, 2064375548257623, 1492989535905402, - 3556003481899914, - 4408766282600089, + 21888242871839275222246405745257275088548364400416034343698203238979658961802, + 21888242871839275222246405745257275088548364400416034343698204091742459661977, 270206366996166, - 2568889349169734, + 21888242871839275222246405745257275088548364400416034343698202251865526231622, 1559402517418815, - 3398415726640788, - 4344827634236625, + 21888242871839275222246405745257275088548364400416034343698203081391903702676, + 21888242871839275222246405745257275088548364400416034343698204027803811298513, 1287376619814029, 997714944013291, - 4342146625486426, + 21888242871839275222246405745257275088548364400416034343698204025122802548314, 553469538327205, - 3964052439973685, - 3521325917624800, - 3570889067483947, - 3078515802507943, - 3831175798989098, + 21888242871839275222246405745257275088548364400416034343698203647028617035573, + 21888242871839275222246405745257275088548364400416034343698203204302094686688, + 21888242871839275222246405745257275088548364400416034343698203253865244545835, + 21888242871839275222246405745257275088548364400416034343698202761491979569831, + 21888242871839275222246405745257275088548364400416034343698203514151976050986, 644496442456381, 673781042507671, - 2482223686650184, - 2539326320275131, - 2997869712465595, + 21888242871839275222246405745257275088548364400416034343698202165199863712072, + 21888242871839275222246405745257275088548364400416034343698202222302497337019, + 21888242871839275222246405745257275088548364400416034343698202680845889527483, 922097464324192, 832689054116095, - 4434100502501327, - 2870357796636392, + 21888242871839275222246405745257275088548364400416034343698204117076679563215, + 21888242871839275222246405745257275088548364400416034343698202553333973698280, 1539837225290329, - 2981089930753676, + 21888242871839275222246405745257275088548364400416034343698202664066107815564, 1752496520581179, 1437568233520639, 356825341332232, - 4035218514368541, - 3187969993275838, + 21888242871839275222246405745257275088548364400416034343698203718194691430429, + 21888242871839275222246405745257275088548364400416034343698202870946170337726, 2184947480769180, - 2927924745704210, + 21888242871839275222246405745257275088548364400416034343698202610900922766098, 919805206248160, 44876786428672, - 3588296651879650, - 3901448314163991, + 21888242871839275222246405745257275088548364400416034343698203271272828941538, + 21888242871839275222246405745257275088548364400416034343698203584424491225879, 1656492188500526, 1357021458905511, - 3188675532201559, - 3801576171855763, - 2656616470236976, + 21888242871839275222246405745257275088548364400416034343698202871651709263447, + 21888242871839275222246405745257275088548364400416034343698203484552348917651, + 21888242871839275222246405745257275088548364400416034343698202339592647298864, 1109823736531098, - 4176301087663502, + 21888242871839275222246405745257275088548364400416034343698203859277264725390, 711554848034783, 2183957179123034, - 3800074298946452, - 4330816664381011, + 21888242871839275222246405745257275088548364400416034343698203483050476008340, + 21888242871839275222246405745257275088548364400416034343698204013792841442899, 2151135180713682, - 2979248116144634, + 21888242871839275222246405745257275088548364400416034343698202662224293206522, 1274516911720088, - 4473948792449984, - 3292711361865011, - 3553911436644107, + 21888242871839275222246405745257275088548364400416034343698204156924969511872, + 21888242871839275222246405745257275088548364400416034343698202975687538926899, + 21888242871839275222246405745257275088548364400416034343698203236887613705995, 2250737405381189, - 2765807103106089, + 21888242871839275222246405745257275088548364400416034343698202448783280167977, 1077935938368004, 78069198342581, 1117440024428463, - 2537446468592697, + 21888242871839275222246405745257275088548364400416034343698202220422645654585, 390608908649208, 1018700971985336, 2162296535003798, - 4389951431895190, - 3173881545849382, - 4166788096234371, + 21888242871839275222246405745257275088548364400416034343698204072927608957078, + 21888242871839275222246405745257275088548364400416034343698202856857722911270, + 21888242871839275222246405745257275088548364400416034343698203849764273296259, 1513856687331184, - 4274979373612612, - 2786049112866714, - 2811091146715501, - 4145073453056329, + 21888242871839275222246405745257275088548364400416034343698203957955550674500, + 21888242871839275222246405745257275088548364400416034343698202469025289928602, + 21888242871839275222246405745257275088548364400416034343698202494067323777389, + 21888242871839275222246405745257275088548364400416034343698203828049630118217, 445042458008324, - 4099231621572072, + 21888242871839275222246405745257275088548364400416034343698203782207798633960, 1073561605109230, 458824440757173, - 3564173210122051, + 21888242871839275222246405745257275088548364400416034343698203247149387183939, 368087576476201, - 3093505656409661, - 3922755937829701, - 2736603644570121, + 21888242871839275222246405745257275088548364400416034343698202776481833471549, + 21888242871839275222246405745257275088548364400416034343698203605732114891589, + 21888242871839275222246405745257275088548364400416034343698202419579821632009, 832538841911444, - 3683796113299481, + 21888242871839275222246405745257275088548364400416034343698203366772290361369, 928290476747638, 967346383064559, - 3133905868822981, - 4443647761383637, - 2338878235620255, - 2530950995095940, + 21888242871839275222246405745257275088548364400416034343698202816882045884869, + 21888242871839275222246405745257275088548364400416034343698204126623938445525, + 21888242871839275222246405745257275088548364400416034343698202021854412682143, + 21888242871839275222246405745257275088548364400416034343698202213927172157828, 1233876513749090, 944200730289422, - 4210766899987466, + 21888242871839275222246405745257275088548364400416034343698203893743077049354, 99013143491962, 303333809897079, 345048998920357, - 4129570133334574, - 3306593531544417, + 21888242871839275222246405745257275088548364400416034343698203812546310396462, + 21888242871839275222246405745257275088548364400416034343698202989569708606305, 230161279203669, - 3919680024967646, + 21888242871839275222246405745257275088548364400416034343698203602656202029534, 1197295382073824, - 3305448989560965, + 21888242871839275222246405745257275088548364400416034343698202988425166622853, 1292559390354668, - 2671536342104240, - 4166763720340802, - 3411405561974670, + 21888242871839275222246405745257275088548364400416034343698202354512519166128, + 21888242871839275222246405745257275088548364400416034343698203849739897402690, + 21888242871839275222246405745257275088548364400416034343698203094381739036558, 802228659718203, 2205659535380251, 948049767350206, @@ -20975,702 +20975,702 @@ pub global CRP: [Polynomial; L] = [ 1333738500781179, 298379713757603, 239199284220333, - 3355604827807709, - 4380998237690624, + 21888242871839275222246405745257275088548364400416034343698203038581004869597, + 21888242871839275222246405745257275088548364400416034343698204063974414752512, 510976962655000, - 4280476571449544, - 3576230139686571, - 2901990268508012, - 4246425139653667, - 4145656247299714, + 21888242871839275222246405745257275088548364400416034343698203963452748511432, + 21888242871839275222246405745257275088548364400416034343698203259206316748459, + 21888242871839275222246405745257275088548364400416034343698202584966445569900, + 21888242871839275222246405745257275088548364400416034343698203929401316715555, + 21888242871839275222246405745257275088548364400416034343698203828632424361602, 2001069623503221, 1702568262866317, 2142356475433375, - 2976788854699066, - 3320312078910348, - 2332127415732212, - 2929859927615995, - 4014838218617866, - 2901153698576009, - 3893971179112485, - 3885750515409829, + 21888242871839275222246405745257275088548364400416034343698202659765031760954, + 21888242871839275222246405745257275088548364400416034343698203003288255972236, + 21888242871839275222246405745257275088548364400416034343698202015103592794100, + 21888242871839275222246405745257275088548364400416034343698202612836104677883, + 21888242871839275222246405745257275088548364400416034343698203697814395679754, + 21888242871839275222246405745257275088548364400416034343698202584129875637897, + 21888242871839275222246405745257275088548364400416034343698203576947356174373, + 21888242871839275222246405745257275088548364400416034343698203568726692471717, 310392243547686, 1293769139725361, - 4145454043405135, + 21888242871839275222246405745257275088548364400416034343698203828430220467023, 1332242894928788, - 4383487700324010, + 21888242871839275222246405745257275088548364400416034343698204066463877385898, 1733014345565157, - 2845759645584976, - 4250917560498285, + 21888242871839275222246405745257275088548364400416034343698202528735822646864, + 21888242871839275222246405745257275088548364400416034343698203933893737560173, 40031070508628, 1358211463991512, 1626432039626226, 880605325830944, - 3729337904898312, - 2596056267921259, + 21888242871839275222246405745257275088548364400416034343698203412314081960200, + 21888242871839275222246405745257275088548364400416034343698202279032444983147, 978449111228961, - 2487850593425731, - 3385226010515537, + 21888242871839275222246405745257275088548364400416034343698202170826770487619, + 21888242871839275222246405745257275088548364400416034343698203068202187577425, 926275581838396, 511515952887497, - 4302289920560084, - 3513874138909110, - 4026380624510082, + 21888242871839275222246405745257275088548364400416034343698203985266097621972, + 21888242871839275222246405745257275088548364400416034343698203196850315970998, + 21888242871839275222246405745257275088548364400416034343698203709356801571970, 1826040084446296, 1447531159834030, - 4213750637435243, - 2321092355318251, + 21888242871839275222246405745257275088548364400416034343698203896726814497131, + 21888242871839275222246405745257275088548364400416034343698202004068532380139, 590805597449759, - 3383675989262696, - 3548149224255599, + 21888242871839275222246405745257275088548364400416034343698203066652166324584, + 21888242871839275222246405745257275088548364400416034343698203231125401317487, 1756789886488507, 1511294122864354, - 2743111385912626, - 3889035045666535, + 21888242871839275222246405745257275088548364400416034343698202426087562974514, + 21888242871839275222246405745257275088548364400416034343698203572011222728423, 1867025134919325, - 2742594770660927, + 21888242871839275222246405745257275088548364400416034343698202425570947722815, 892864703847685, - 2781162273099574, + 21888242871839275222246405745257275088548364400416034343698202464138450161462, 1508252216347796, 729851117805489, 260639372163676, - 3335435147599643, + 21888242871839275222246405745257275088548364400416034343698203018411324661531, 246832347054572, - 4449053379970164, - 2729165952817589, - 2925911869495958, + 21888242871839275222246405745257275088548364400416034343698204132029557032052, + 21888242871839275222246405745257275088548364400416034343698202412142129879477, + 21888242871839275222246405745257275088548364400416034343698202608888046557846, 1334115831164032, - 3000473257879522, - 3125749928485902, + 21888242871839275222246405745257275088548364400416034343698202683449434941410, + 21888242871839275222246405745257275088548364400416034343698202808726105547790, 212082356729080, 1032229004349188, 1703371206185185, - 4248733815656557, + 21888242871839275222246405745257275088548364400416034343698203931709992718445, 809438624667742, - 3319905983221355, + 21888242871839275222246405745257275088548364400416034343698203002882160283243, 2002555637549471, - 3482297162213670, + 21888242871839275222246405745257275088548364400416034343698203165273339275558, 1467492655166023, - 4439705701493703, - 3274484658469970, + 21888242871839275222246405745257275088548364400416034343698204122681878555591, + 21888242871839275222246405745257275088548364400416034343698202957460835531858, 877171024250159, - 3939870545110448, - 3821162759747640, - 4306868900456021, - 2373324911705953, - 2930102632809116, + 21888242871839275222246405745257275088548364400416034343698203622846722172336, + 21888242871839275222246405745257275088548364400416034343698203504138936809528, + 21888242871839275222246405745257275088548364400416034343698203989845077517909, + 21888242871839275222246405745257275088548364400416034343698202056301088767841, + 21888242871839275222246405745257275088548364400416034343698202613078809871004, 638049618834247, 622169457781524, - 3771828998897892, - 2315222192947447, + 21888242871839275222246405745257275088548364400416034343698203454805175959780, + 21888242871839275222246405745257275088548364400416034343698201998198370009335, 539894465461373, 1598105653465644, - 2829390642655753, - 2542640395751588, - 3783570371978156, + 21888242871839275222246405745257275088548364400416034343698202512366819717641, + 21888242871839275222246405745257275088548364400416034343698202225616572813476, + 21888242871839275222246405745257275088548364400416034343698203466546549040044, 576551192481623, 204224134065647, - 3490946375819420, + 21888242871839275222246405745257275088548364400416034343698203173922552881308, 1802830478903750, 2017080112703802, 206156571822211, - 2322560789556694, - 4193823353424683, - 3569679392276215, + 21888242871839275222246405745257275088548364400416034343698202005536966618582, + 21888242871839275222246405745257275088548364400416034343698203876799530486571, + 21888242871839275222246405745257275088548364400416034343698203252655569338103, 305946848348987, - 4069614004286479, + 21888242871839275222246405745257275088548364400416034343698203752590181348367, 2215548210090501, - 3546842360697245, - 2784432051698961, + 21888242871839275222246405745257275088548364400416034343698203229818537759133, + 21888242871839275222246405745257275088548364400416034343698202467408228760849, 255463708467935, 890308240876383, 229508136334997, 1007854741755392, - 3869769262634490, + 21888242871839275222246405745257275088548364400416034343698203552745439696378, 2209264586388153, - 3364275097404596, + 21888242871839275222246405745257275088548364400416034343698203047251274466484, 2115268708352571, 1348332559368333, - 3599688017150671, + 21888242871839275222246405745257275088548364400416034343698203282664194212559, 1729032493246487, - 3559842657382147, - 3535566656798994, - 2908757997123836, - 3191400795333708, - 3091948721032740, + 21888242871839275222246405745257275088548364400416034343698203242818834444035, + 21888242871839275222246405745257275088548364400416034343698203218542833860882, + 21888242871839275222246405745257275088548364400416034343698202591734174185724, + 21888242871839275222246405745257275088548364400416034343698202874376972395596, + 21888242871839275222246405745257275088548364400416034343698202774924898094628, 687926957718355, 1847775152456583, - 2263333403880921, - 3288951255841594, + 21888242871839275222246405745257275088548364400416034343698201946309580942809, + 21888242871839275222246405745257275088548364400416034343698202971927432903482, 576867666246192, 1293084061340797, - 4440488017557869, + 21888242871839275222246405745257275088548364400416034343698204123464194619757, 916883276864658, - 3422335832514836, + 21888242871839275222246405745257275088548364400416034343698203105312009576724, 531409883723485, - 3717957810628107, - 3945389455403028, + 21888242871839275222246405745257275088548364400416034343698203400933987689995, + 21888242871839275222246405745257275088548364400416034343698203628365632464916, 740170588751523, 731586825671861, - 4054655985394835, - 2598217105334643, + 21888242871839275222246405745257275088548364400416034343698203737632162456723, + 21888242871839275222246405745257275088548364400416034343698202281193282396531, 445797918839965, 1865148987894216, 1380444391998576, - 2908657686503474, + 21888242871839275222246405745257275088548364400416034343698202591633863565362, 1853968183099309, - 4359016055742506, + 21888242871839275222246405745257275088548364400416034343698204041992232804394, 1343508708073192, 789726268745147, - 3239995444941113, + 21888242871839275222246405745257275088548364400416034343698202922971622003001, 645897009234454, 1988099925794547, - 3641202702516519, + 21888242871839275222246405745257275088548364400416034343698203324178879578407, 1873711966386452, - 3649099047652156, + 21888242871839275222246405745257275088548364400416034343698203332075224714044, 1680356380668483, - 3386701204781340, + 21888242871839275222246405745257275088548364400416034343698203069677381843228, 495921223145588, - 3316747764042477, - 3573044662568193, - 2575508773118010, - 3383155785932159, - 3212383206019632, + 21888242871839275222246405745257275088548364400416034343698202999723941104365, + 21888242871839275222246405745257275088548364400416034343698203256020839630081, + 21888242871839275222246405745257275088548364400416034343698202258484950179898, + 21888242871839275222246405745257275088548364400416034343698203066131962994047, + 21888242871839275222246405745257275088548364400416034343698202895359383081520, 2143739832644830, 1812056927351643, - 3910426218938125, + 21888242871839275222246405745257275088548364400416034343698203593402396000013, 69960533019253, 353795229711605, 1341693608301737, - 2635676877992522, + 21888242871839275222246405745257275088548364400416034343698202318653055054410, 36385500938267, 544738658044209, 141768339586839, 1309771206272194, - 3876949821641655, - 4424967196641220, + 21888242871839275222246405745257275088548364400416034343698203559925998703543, + 21888242871839275222246405745257275088548364400416034343698204107943373703108, 1501552045754234, - 4480719094018552, + 21888242871839275222246405745257275088548364400416034343698204163695271080440, 1590958422935495, 683155331249175, - 2701656353168109, - 4010842531303760, - 3825930632654434, - 3676811529195273, + 21888242871839275222246405745257275088548364400416034343698202384632530229997, + 21888242871839275222246405745257275088548364400416034343698203693818708365648, + 21888242871839275222246405745257275088548364400416034343698203508906809716322, + 21888242871839275222246405745257275088548364400416034343698203359787706257161, 1606605675753870, - 2880379590382877, + 21888242871839275222246405745257275088548364400416034343698202563355767444765, 1679131387663437, - 2484542529358997, - 3914901589278557, + 21888242871839275222246405745257275088548364400416034343698202167518706420885, + 21888242871839275222246405745257275088548364400416034343698203597877766340445, 333844379617008, - 3414853783088852, + 21888242871839275222246405745257275088548364400416034343698203097829960150740, 601095926563698, 1302837088631627, 3460871831644, - 4405626254101461, - 4442925356100441, + 21888242871839275222246405745257275088548364400416034343698204088602431163349, + 21888242871839275222246405745257275088548364400416034343698204125901533162329, 1205527497350891, - 3828450400143998, - 3451761479575550, - 2317798490339449, - 4138443524990942, - 2294417183480148, - 2938005293919453, + 21888242871839275222246405745257275088548364400416034343698203511426577205886, + 21888242871839275222246405745257275088548364400416034343698203134737656637438, + 21888242871839275222246405745257275088548364400416034343698202000774667401337, + 21888242871839275222246405745257275088548364400416034343698203821419702052830, + 21888242871839275222246405745257275088548364400416034343698201977393360542036, + 21888242871839275222246405745257275088548364400416034343698202620981470981341, 159051891353685, 815085690251838, - 3562412042237914, + 21888242871839275222246405745257275088548364400416034343698203245388219299802, 2092358922352346, 2217419941919667, - 2344912876809042, - 3044696756405296, + 21888242871839275222246405745257275088548364400416034343698202027889053870930, + 21888242871839275222246405745257275088548364400416034343698202727672933467184, 856377702959748, - 3728243862460582, - 3134281112017084, - 3744493989146718, - 2318769989337373, - 3843370080028366, + 21888242871839275222246405745257275088548364400416034343698203411220039522470, + 21888242871839275222246405745257275088548364400416034343698202817257289078972, + 21888242871839275222246405745257275088548364400416034343698203427470166208606, + 21888242871839275222246405745257275088548364400416034343698202001746166399261, + 21888242871839275222246405745257275088548364400416034343698203526346257090254, 948200508094375, - 3940015221653150, + 21888242871839275222246405745257275088548364400416034343698203622991398715038, 998737702065557, 1233976046093109, - 3650239101722340, + 21888242871839275222246405745257275088548364400416034343698203333215278784228, 444472251148221, - 2444151218117389, + 21888242871839275222246405745257275088548364400416034343698202127127395179277, 1876011789347479, 202762561869142, 29410299819027, 1817926058134234, - 3532267456078576, - 3061058517206490, - 3632053725079403, + 21888242871839275222246405745257275088548364400416034343698203215243633140464, + 21888242871839275222246405745257275088548364400416034343698202744034694268378, + 21888242871839275222246405745257275088548364400416034343698203315029902141291, 1147561490929447, - 2555516052629660, + 21888242871839275222246405745257275088548364400416034343698202238492229691548, 1003251452642247, 2089272292578337, - 2560150149258045, - 2540095662712233, + 21888242871839275222246405745257275088548364400416034343698202243126326319933, + 21888242871839275222246405745257275088548364400416034343698202223071839774121, 377944596474096, 1365850768200380, 373730273035443, - 2840279462165328, - 3560340213917723, - 2308269971659502, + 21888242871839275222246405745257275088548364400416034343698202523255639227216, + 21888242871839275222246405745257275088548364400416034343698203243316390979611, + 21888242871839275222246405745257275088548364400416034343698201991246148721390, 464925255565242, 668575865363975, - 2306213701672755, + 21888242871839275222246405745257275088548364400416034343698201989189878734643, 822958953518620, 2237602668513990, - 3634683020062441, + 21888242871839275222246405745257275088548364400416034343698203317659197124329, 1726018910049595, - 2638129730246948, - 3059239788379933, - 3851532410935835, + 21888242871839275222246405745257275088548364400416034343698202321105907308836, + 21888242871839275222246405745257275088548364400416034343698202742215965441821, + 21888242871839275222246405745257275088548364400416034343698203534508587997723, 1477072558535310, 1768612072981433, 795852859465538, - 3928767192389670, + 21888242871839275222246405745257275088548364400416034343698203611743369451558, 539864063384690, - 3766292887991247, - 4318569200454096, - 3738337045349904, - 2329716252129168, + 21888242871839275222246405745257275088548364400416034343698203449269065053135, + 21888242871839275222246405745257275088548364400416034343698204001545377515984, + 21888242871839275222246405745257275088548364400416034343698203421313222411792, + 21888242871839275222246405745257275088548364400416034343698202012692429191056, 1295910343162955, 475776934781502, 1275115103454341, 1348021820670293, 822854876035830, 164251309328345, - 2913273176531819, - 2902469047133472, + 21888242871839275222246405745257275088548364400416034343698202596249353593707, + 21888242871839275222246405745257275088548364400416034343698202585445224195360, 2012418481813887, 139786095064539, 666845275906398, 865330296297598, - 4292851599526345, + 21888242871839275222246405745257275088548364400416034343698203975827776588233, 1015951897664739, - 2595839322987804, - 2404493581498253, - 2933425851663815, + 21888242871839275222246405745257275088548364400416034343698202278815500049692, + 21888242871839275222246405745257275088548364400416034343698202087469758560141, + 21888242871839275222246405745257275088548364400416034343698202616402028725703, 881532670011286, - 3789323692371236, + 21888242871839275222246405745257275088548364400416034343698203472299869433124, 180320733428813, - 3491543760512561, + 21888242871839275222246405745257275088548364400416034343698203174519937574449, 1228896014321739, - 3423684164663967, - 2896448361574746, + 21888242871839275222246405745257275088548364400416034343698203106660341725855, + 21888242871839275222246405745257275088548364400416034343698202579424538636634, 1670994814309086, 1083760594161724, - 3760428732273670, + 21888242871839275222246405745257275088548364400416034343698203443404909335558, 1734066300091225, 22826573016956, - 2717603235020685, - 3375195489144352, + 21888242871839275222246405745257275088548364400416034343698202400579412082573, + 21888242871839275222246405745257275088548364400416034343698203058171666206240, 1499916568949265, - 2622134164624547, + 21888242871839275222246405745257275088548364400416034343698202305110341686435, 753558491680233, 407769712812216, 1859059666434800, 1938883823295956, - 2825412887857012, - 3369763827576230, + 21888242871839275222246405745257275088548364400416034343698202508389064918900, + 21888242871839275222246405745257275088548364400416034343698203052740004638118, 1187365601742241, 1333286983731703, - 3642122955675198, - 3205069079281625, - 2915507998176702, + 21888242871839275222246405745257275088548364400416034343698203325099132737086, + 21888242871839275222246405745257275088548364400416034343698202888045256343513, + 21888242871839275222246405745257275088548364400416034343698202598484175238590, 950020605799477, 94444527328001, - 3368993325002760, + 21888242871839275222246405745257275088548364400416034343698203051969502064648, 853735224105271, 1464216350689596, 1269204052937459, - 2472782564085964, - 2694933510148627, - 3245923284897879, + 21888242871839275222246405745257275088548364400416034343698202155758741147852, + 21888242871839275222246405745257275088548364400416034343698202377909687210515, + 21888242871839275222246405745257275088548364400416034343698202928899461959767, 1525986379205369, - 2522210279264017, + 21888242871839275222246405745257275088548364400416034343698202205186456325905, 1889725439873713, - 3836805827015666, - 4195738199626246, - 2703268453049898, - 2936577450320409, - 4398976675246663, + 21888242871839275222246405745257275088548364400416034343698203519782004077554, + 21888242871839275222246405745257275088548364400416034343698203878714376688134, + 21888242871839275222246405745257275088548364400416034343698202386244630111786, + 21888242871839275222246405745257275088548364400416034343698202619553627382297, + 21888242871839275222246405745257275088548364400416034343698204081952852308551, 921437979072973, - 3300534954104517, + 21888242871839275222246405745257275088548364400416034343698202983511131166405, 423550392369604, - 3875084498444884, + 21888242871839275222246405745257275088548364400416034343698203558060675506772, 1218134135273007, - 2600032723670328, - 3180612697569696, + 21888242871839275222246405745257275088548364400416034343698202283008900732216, + 21888242871839275222246405745257275088548364400416034343698202863588874631584, 1236628172329721, 231837906158397, - 4259791008102256, - 2657311223956117, + 21888242871839275222246405745257275088548364400416034343698203942767185164144, + 21888242871839275222246405745257275088548364400416034343698202340287401018005, 1979637739982788, 2079526843375660, - 3185507401759037, - 2334872707826309, + 21888242871839275222246405745257275088548364400416034343698202868483578820925, + 21888242871839275222246405745257275088548364400416034343698202017848884888197, 2043457173321826, - 3715801004153193, - 3965364397815984, - 4284383081146130, + 21888242871839275222246405745257275088548364400416034343698203398777181215081, + 21888242871839275222246405745257275088548364400416034343698203648340574877872, + 21888242871839275222246405745257275088548364400416034343698203967359258208018, 1533770489164122, - 2434489387202873, - 2929789349963970, - 3837527771617802, - 2336373891491893, + 21888242871839275222246405745257275088548364400416034343698202117465564264761, + 21888242871839275222246405745257275088548364400416034343698202612765527025858, + 21888242871839275222246405745257275088548364400416034343698203520503948679690, + 21888242871839275222246405745257275088548364400416034343698202019350068553781, 2003696471234777, - 3844088170798319, + 21888242871839275222246405745257275088548364400416034343698203527064347860207, 2138869773234389, 1766737996020036, - 3503442491556488, - 3187072296801855, + 21888242871839275222246405745257275088548364400416034343698203186418668618376, + 21888242871839275222246405745257275088548364400416034343698202870048473863743, 267320613077948, - 4408248803087933, - 2687951160191321, - 3921169295738131, + 21888242871839275222246405745257275088548364400416034343698204091224980149821, + 21888242871839275222246405745257275088548364400416034343698202370927337253209, + 21888242871839275222246405745257275088548364400416034343698203604145472800019, 1243860060918940, - 3169075958271306, + 21888242871839275222246405745257275088548364400416034343698202852052135333194, 422149525980475, 1947754224798663, 2057143827649265, 1841299994448008, 2242546515812594, - 2950918497253638, - 3448747311885028, + 21888242871839275222246405745257275088548364400416034343698202633894674315526, + 21888242871839275222246405745257275088548364400416034343698203131723488946916, 1513925491165354, - 4382872011684785, + 21888242871839275222246405745257275088548364400416034343698204065848188746673, 1264430879647683, - 3519165910246680, + 21888242871839275222246405745257275088548364400416034343698203202142087308568, 637361925809750, - 2285082669920936, - 2412276091216411, + 21888242871839275222246405745257275088548364400416034343698201968058846982824, + 21888242871839275222246405745257275088548364400416034343698202095252268278299, 1675426748567404, - 2913373215730649, + 21888242871839275222246405745257275088548364400416034343698202596349392792537, 1194869961928106, - 3553258573902238, - 3900409248641795, - 3053035144289961, + 21888242871839275222246405745257275088548364400416034343698203236234750964126, + 21888242871839275222246405745257275088548364400416034343698203583385425703683, + 21888242871839275222246405745257275088548364400416034343698202736011321351849, 2219939104874220, - 3940361992639237, + 21888242871839275222246405745257275088548364400416034343698203623338169701125, 1195030610628224, - 3515582533668489, + 21888242871839275222246405745257275088548364400416034343698203198558710730377, 642615270124162, - 2560955580516099, - 3701040210704633, + 21888242871839275222246405745257275088548364400416034343698202243931757577987, + 21888242871839275222246405745257275088548364400416034343698203384016387766521, 1120210834355576, 932581960185031, 1612102822127228, 1861720425747885, - 4106037882201511, + 21888242871839275222246405745257275088548364400416034343698203789014059263399, 418383061351320, 1356922356476347, - 2612535756154018, + 21888242871839275222246405745257275088548364400416034343698202295511933215906, 342518324141113, 1409708878970379, - 4191544041743601, - 4150084664669260, + 21888242871839275222246405745257275088548364400416034343698203874520218805489, + 21888242871839275222246405745257275088548364400416034343698203833060841731148, 900413335035769, - 3567416547290554, - 4313780987770762, - 2384944775521597, - 3847334712732075, + 21888242871839275222246405745257275088548364400416034343698203250392724352442, + 21888242871839275222246405745257275088548364400416034343698203996757164832650, + 21888242871839275222246405745257275088548364400416034343698202067920952583485, + 21888242871839275222246405745257275088548364400416034343698203530310889793963, 1177635093269997, 1621235872802312, - 3118344555337897, - 3961136163461179, + 21888242871839275222246405745257275088548364400416034343698202801320732399785, + 21888242871839275222246405745257275088548364400416034343698203644112340523067, 504479414113295, 1095127501438878, - 2461994367049664, + 21888242871839275222246405745257275088548364400416034343698202144970544111552, 1613904364525371, 1364828582114593, - 2805672652546304, + 21888242871839275222246405745257275088548364400416034343698202488648829608192, 536370164280837, - 3471714013449978, - 2586791149691072, - 3547002125264222, + 21888242871839275222246405745257275088548364400416034343698203154690190511866, + 21888242871839275222246405745257275088548364400416034343698202269767326752960, + 21888242871839275222246405745257275088548364400416034343698203229978302326110, 599631803341619, 1455083179101460, 1381487909102312, - 4175467175398832, + 21888242871839275222246405745257275088548364400416034343698203858443352460720, 1478442206292920, - 4487222723953136, - 3703178182650331, + 21888242871839275222246405745257275088548364400416034343698204170198901015024, + 21888242871839275222246405745257275088548364400416034343698203386154359712219, 1605311608331432, - 4141627854001264, + 21888242871839275222246405745257275088548364400416034343698203824604031063152, 1090218112293802, 1203478581787722, 806159136113443, - 3650558145207619, + 21888242871839275222246405745257275088548364400416034343698203333534322269507, 540610319799388, 1761654131624852, 648859356784198, - 3505633889266239, - 3469124479879180, + 21888242871839275222246405745257275088548364400416034343698203188610066328127, + 21888242871839275222246405745257275088548364400416034343698203152100656941068, 1678005368342233, - 2926948357882566, + 21888242871839275222246405745257275088548364400416034343698202609924534944454, 1177419756550564, 741830023296226, 321290743512725, 364068706380024, 450705438299021, 816918925845726, - 4043310584417109, + 21888242871839275222246405745257275088548364400416034343698203726286761478997, 1771680549759626, 810732627326971, 397928540582747, 1941527124065212, - 2332101547359708, - 2863192364696118, + 21888242871839275222246405745257275088548364400416034343698202015077724421596, + 21888242871839275222246405745257275088548364400416034343698202546168541758006, 103748188004295, - 3921407034916055, + 21888242871839275222246405745257275088548364400416034343698203604383211977943, 519536994297349, - 2889699308774854, - 3549149602281281, + 21888242871839275222246405745257275088548364400416034343698202572675485836742, + 21888242871839275222246405745257275088548364400416034343698203232125779343169, 235769434956596, - 2641554512090214, + 21888242871839275222246405745257275088548364400416034343698202324530689152102, 209712560193290, 1785470009501429, - 2882686018723008, + 21888242871839275222246405745257275088548364400416034343698202565662195784896, 2105766720054299, 1826422509236696, 1261776222199923, - 4284601100114377, + 21888242871839275222246405745257275088548364400416034343698203967577277176265, 84520091356123, 550736758574636, - 4031139144503391, - 2883363081963508, - 4350171586788539, - 2979779969642555, - 3462207946445815, - 3331088084923415, + 21888242871839275222246405745257275088548364400416034343698203714115321565279, + 21888242871839275222246405745257275088548364400416034343698202566339259025396, + 21888242871839275222246405745257275088548364400416034343698204033147763850427, + 21888242871839275222246405745257275088548364400416034343698202662756146704443, + 21888242871839275222246405745257275088548364400416034343698203145184123507703, + 21888242871839275222246405745257275088548364400416034343698203014064261985303, 1133646664826108, 2069827074027224, 559356068888933, - 3597386391004198, - 3735941870665311, + 21888242871839275222246405745257275088548364400416034343698203280362568066086, + 21888242871839275222246405745257275088548364400416034343698203418918047727199, 957376902122862, 1714807225819842, - 3867930257143392, + 21888242871839275222246405745257275088548364400416034343698203550906434205280, 598325320872266, 358440159512491, - 4481753934833440, - 4448642440594468, + 21888242871839275222246405745257275088548364400416034343698204164730111895328, + 21888242871839275222246405745257275088548364400416034343698204131618617656356, 1142258777569786, 423465128246274, 1949245545564376, 1130025740071418, 910850691378238, - 3115092783238703, + 21888242871839275222246405745257275088548364400416034343698202798068960300591, 515266245498199, 1793625374160618, 153176468685601, - 3548874368433171, - 4212862000098212, + 21888242871839275222246405745257275088548364400416034343698203231850545495059, + 21888242871839275222246405745257275088548364400416034343698203895838177160100, 1917938816396270, - 4371695152264374, + 21888242871839275222246405745257275088548364400416034343698204054671329326262, 919488532877080, 1379976720821112, - 3924335946933332, - 3421613036719844, + 21888242871839275222246405745257275088548364400416034343698203607312123995220, + 21888242871839275222246405745257275088548364400416034343698203104589213781732, 1174199043257585, 796447159949925, 2251355306703698, - 2285426494559781, + 21888242871839275222246405745257275088548364400416034343698201968402671621669, 756159869818888, 380458539815689, 1224251100541967, 25911225301575, - 3962493858856760, - 2791390170240897, + 21888242871839275222246405745257275088548364400416034343698203645470035918648, + 21888242871839275222246405745257275088548364400416034343698202474366347302785, 1235720083702413, - 4310715313794640, - 4260709957126459, + 21888242871839275222246405745257275088548364400416034343698203993691490856528, + 21888242871839275222246405745257275088548364400416034343698203943686134188347, 1877089037638043, 1807966933996348, 1174503010723338, - 4166517540119665, + 21888242871839275222246405745257275088548364400416034343698203849493717181553, 1428088695940450, - 3633378993626782, + 21888242871839275222246405745257275088548364400416034343698203316355170688670, 1478493840232054, 477953765298429, - 3144960059158803, + 21888242871839275222246405745257275088548364400416034343698202827936236220691, 493971528487059, 2181971859435567, - 2848632550414078, + 21888242871839275222246405745257275088548364400416034343698202531608727475966, 2218436454956872, - 2275217997682077, + 21888242871839275222246405745257275088548364400416034343698201958194174743965, 576452331469474, 1938103541529718, 776864007863908, - 2277323508170218, + 21888242871839275222246405745257275088548364400416034343698201960299685232106, 1321660312643445, - 2793704231159985, + 21888242871839275222246405745257275088548364400416034343698202476680408221873, 466239643939469, 1474849957070722, - 4397644493258036, - 2304910598572490, + 21888242871839275222246405745257275088548364400416034343698204080620670319924, + 21888242871839275222246405745257275088548364400416034343698201987886775634378, 339933245851471, - 2312765335844751, - 2270142367995512, + 21888242871839275222246405745257275088548364400416034343698201995741512906639, + 21888242871839275222246405745257275088548364400416034343698201953118545057400, 1207268275711430, - 3245586455206795, + 21888242871839275222246405745257275088548364400416034343698202928562632268683, 1317879076423017, 935957604016719, 1775393791412451, - 4319813266328057, - 4250132236131487, + 21888242871839275222246405745257275088548364400416034343698204002789443389945, + 21888242871839275222246405745257275088548364400416034343698203933108413193375, 2116278704923096, 653797506020403, - 3558274040405062, + 21888242871839275222246405745257275088548364400416034343698203241250217466950, 1402358905272551, - 3662530818945543, - 3586940459703350, - 2629199910749446, + 21888242871839275222246405745257275088548364400416034343698203345506996007431, + 21888242871839275222246405745257275088548364400416034343698203269916636765238, + 21888242871839275222246405745257275088548364400416034343698202312176087811334, 566450485056208, 113883503118231, - 4331668880909358, - 4388415613613640, - 3403001000860843, + 21888242871839275222246405745257275088548364400416034343698204014645057971246, + 21888242871839275222246405745257275088548364400416034343698204071391790675528, + 21888242871839275222246405745257275088548364400416034343698203085977177922731, 736793083385816, - 4451490411282735, - 3551501707804737, + 21888242871839275222246405745257275088548364400416034343698204134466588344623, + 21888242871839275222246405745257275088548364400416034343698203234477884866625, 2018007168568564, 595506875142872, - 3266102729960239, + 21888242871839275222246405745257275088548364400416034343698202949078907022127, 1868703971126725, - 3989855784812280, - 3869758562894172, + 21888242871839275222246405745257275088548364400416034343698203672831961874168, + 21888242871839275222246405745257275088548364400416034343698203552734739956060, 640712139194954, - 3306313808815393, + 21888242871839275222246405745257275088548364400416034343698202989289985877281, 1114803790810667, - 3228513488987126, + 21888242871839275222246405745257275088548364400416034343698202911489666049014, 818576395121811, 477125974646451, 1765273448328770, 294597230558231, 1163705329167756, - 4268684516239980, - 2940290325713611, - 3979238054653101, - 2526020757342129, + 21888242871839275222246405745257275088548364400416034343698203951660693301868, + 21888242871839275222246405745257275088548364400416034343698202623266502775499, + 21888242871839275222246405745257275088548364400416034343698203662214231714989, + 21888242871839275222246405745257275088548364400416034343698202208996934404017, 554854847288450, 705551105677385, - 4208525735119846, + 21888242871839275222246405745257275088548364400416034343698203891501912181734, 289663481392453, 1518718120309856, - 4028939682630100, - 3282560324107440, - 2516317134291677, - 3947684627586500, + 21888242871839275222246405745257275088548364400416034343698203711915859691988, + 21888242871839275222246405745257275088548364400416034343698202965536501169328, + 21888242871839275222246405745257275088548364400416034343698202199293311353565, + 21888242871839275222246405745257275088548364400416034343698203630660804648388, 36405954249920, 751638374382630, - 3949207239021255, + 21888242871839275222246405745257275088548364400416034343698203632183416083143, 644282881005252, 2064053231391808, - 3153672167017829, + 21888242871839275222246405745257275088548364400416034343698202836648344079717, 1649164539546871, - 4045160176934080, - 4375867418608601, - 4154657896444588, - 4181725118594178, + 21888242871839275222246405745257275088548364400416034343698203728136353995968, + 21888242871839275222246405745257275088548364400416034343698204058843595670489, + 21888242871839275222246405745257275088548364400416034343698203837634073506476, + 21888242871839275222246405745257275088548364400416034343698203864701295656066, 156115815572554, 1333097064127680, - 3972021058702356, + 21888242871839275222246405745257275088548364400416034343698203654997235764244, 758311200591271, - 2966321283563461, - 2838379688521142, - 3178607834666902, + 21888242871839275222246405745257275088548364400416034343698202649297460625349, + 21888242871839275222246405745257275088548364400416034343698202521355865583030, + 21888242871839275222246405745257275088548364400416034343698202861584011728790, 1048383780222818, - 2952212615728507, + 21888242871839275222246405745257275088548364400416034343698202635188792790395, 876932953028305, 169754453222815, - 4265132459064764, - 3533472352176955, + 21888242871839275222246405745257275088548364400416034343698203948108636126652, + 21888242871839275222246405745257275088548364400416034343698203216448529238843, 1350508820443212, 549901026285800, 1200998622263333, - 3333669654772867, + 21888242871839275222246405745257275088548364400416034343698203016645831834755, 2210777822236998, 603805824693060, - 3588775466465807, + 21888242871839275222246405745257275088548364400416034343698203271751643527695, 2076025682780856, 1566750462711647, 1601528596987746, - 3108042506808770, - 3138652967173390, - 2659692030418585, - 3750425276596631, + 21888242871839275222246405745257275088548364400416034343698202791018683870658, + 21888242871839275222246405745257275088548364400416034343698202821629144235278, + 21888242871839275222246405745257275088548364400416034343698202342668207480473, + 21888242871839275222246405745257275088548364400416034343698203433401453658519, 1195563255291917, - 2460565949942093, - 3202219571353795, + 21888242871839275222246405745257275088548364400416034343698202143542127003981, + 21888242871839275222246405745257275088548364400416034343698202885195748415683, 1062168050953303, - 3835864458430009, - 2373676748825456, - 4040720827683513, + 21888242871839275222246405745257275088548364400416034343698203518840635491897, + 21888242871839275222246405745257275088548364400416034343698202056652925887344, + 21888242871839275222246405745257275088548364400416034343698203723697004745401, 410573390671137, - 3664553146303137, + 21888242871839275222246405745257275088548364400416034343698203347529323365025, 1752743543822555, - 3533751612658748, + 21888242871839275222246405745257275088548364400416034343698203216727789720636, 2104898473753896, 87291235561818, - 3218357869165683, + 21888242871839275222246405745257275088548364400416034343698202901334046227571, 478555197370215, - 4432696381705590, - 4082392174899033, + 21888242871839275222246405745257275088548364400416034343698204115672558767478, + 21888242871839275222246405745257275088548364400416034343698203765368351960921, 486961123075593, - 3315314946611668, - 3487144127860944, + 21888242871839275222246405745257275088548364400416034343698202998291123673556, + 21888242871839275222246405745257275088548364400416034343698203170120304922832, 1381381918315738, - 2613147222699927, + 21888242871839275222246405745257275088548364400416034343698202296123399761815, 599333003852474, - 3364394559170710, - 2801452031620536, - 2309633071843564, + 21888242871839275222246405745257275088548364400416034343698203047370736232598, + 21888242871839275222246405745257275088548364400416034343698202484428208682424, + 21888242871839275222246405745257275088548364400416034343698201992609248905452, 2204871527801255, - 3208081356257707, + 21888242871839275222246405745257275088548364400416034343698202891057533319595, 1612212683897764, 263969411684087, 1687080441722622, 139466627281454, 1338724811595588, - 4043534821861884, + 21888242871839275222246405745257275088548364400416034343698203726510998923772, 30199857521175, - 2994962987613695, + 21888242871839275222246405745257275088548364400416034343698202677939164675583, 1184474096773606, - 4291251899991061, - 4238712729913963, + 21888242871839275222246405745257275088548364400416034343698203974228077052949, + 21888242871839275222246405745257275088548364400416034343698203921688906975851, 1009286001381536, - 4039179015889256, + 21888242871839275222246405745257275088548364400416034343698203722155192951144, 892871668353724, 1634647802465995, 2016190448139575, - 3073037749795312, + 21888242871839275222246405745257275088548364400416034343698202756013926857200, 1396728453897550, 1172743530157804, - 3151995039083217, + 21888242871839275222246405745257275088548364400416034343698202834971216145105, 397071918516104, 826644294513452, 1335829309927597, 71101341969725, 128235864721792, 1679250949213196, - 3140846867131409, + 21888242871839275222246405745257275088548364400416034343698202823823044193297, 945325234357216, - 4145081570094025, + 21888242871839275222246405745257275088548364400416034343698203828057747155913, 793299362679717, 135119205666426, 135318046684342, 1337451403686387, - 4190493913775404, + 21888242871839275222246405745257275088548364400416034343698203873470090837292, 2179516539779710, - 3090563796968334, - 2915465404599003, - 3923159122072434, - 2558821026834062, + 21888242871839275222246405745257275088548364400416034343698202773539974030222, + 21888242871839275222246405745257275088548364400416034343698202598441581660891, + 21888242871839275222246405745257275088548364400416034343698203606135299134322, + 21888242871839275222246405745257275088548364400416034343698202241797203895950, 188666400641040, - 3889454568666889, - 2563462808400466, + 21888242871839275222246405745257275088548364400416034343698203572430745728777, + 21888242871839275222246405745257275088548364400416034343698202246438985462354, 209439836846872, 248344789279467, 517436201471119, @@ -21679,58 +21679,58 @@ pub global CRP: [Polynomial; L] = [ 1363107327448957, 1392756502140836, 985154815113812, - 3585710076703766, + 21888242871839275222246405745257275088548364400416034343698203268686253765654, 573384710966769, 449944367102179, - 2314992290501516, - 2312502526152155, + 21888242871839275222246405745257275088548364400416034343698201997968467563404, + 21888242871839275222246405745257275088548364400416034343698201995478703214043, 119385415429048, - 3876835488614735, + 21888242871839275222246405745257275088548364400416034343698203559811665676623, 2226963019544006, - 2597483549177891, + 21888242871839275222246405745257275088548364400416034343698202280459726239779, 1887015112240432, - 3947002199707407, + 21888242871839275222246405745257275088548364400416034343698203629978376769295, 1079086240497453, - 2510650622684432, - 4293786063091976, - 2487259605335265, + 21888242871839275222246405745257275088548364400416034343698202193626799746320, + 21888242871839275222246405745257275088548364400416034343698203976762240153864, + 21888242871839275222246405745257275088548364400416034343698202170235782397153, 800641129033339, - 2390447984074667, - 2368779885192520, + 21888242871839275222246405745257275088548364400416034343698202073424161136555, + 21888242871839275222246405745257275088548364400416034343698202051756062254408, 34951193454269, - 2379044808767941, - 2426784256879929, + 21888242871839275222246405745257275088548364400416034343698202062020985829829, + 21888242871839275222246405745257275088548364400416034343698202109760433941817, 2235961121534602, - 2617513184452984, - 3537593240132861, + 21888242871839275222246405745257275088548364400416034343698202300489361514872, + 21888242871839275222246405745257275088548364400416034343698203220569417194749, 1416404134050509, 1125500540230570, - 3801790179102259, + 21888242871839275222246405745257275088548364400416034343698203484766356164147, 963335225313351, - 4470136061622906, + 21888242871839275222246405745257275088548364400416034343698204153112238684794, 945947915685634, 41415365365563, - 4219876312931454, - 2403820720949407, - 3790157068993941, + 21888242871839275222246405745257275088548364400416034343698203902852489993342, + 21888242871839275222246405745257275088548364400416034343698202086796898011295, + 21888242871839275222246405745257275088548364400416034343698203473133246055829, 1228140441593640, - 2304270554614904, + 21888242871839275222246405745257275088548364400416034343698201987246731676792, 584030141624508, 245801154911813, 1640446080791610, - 4321206172963687, - 2981222501289942, - 3575782539051221, - 3371961277833372, + 21888242871839275222246405745257275088548364400416034343698204004182350025575, + 21888242871839275222246405745257275088548364400416034343698202664198678351830, + 21888242871839275222246405745257275088548364400416034343698203258758716113109, + 21888242871839275222246405745257275088548364400416034343698203054937454895260, 546706953445871, - 3259835019507453, + 21888242871839275222246405745257275088548364400416034343698202942811196569341, 620177834439618, 1428084098814264, - 4467869423608668, + 21888242871839275222246405745257275088548364400416034343698204150845600670556, 656468103720591, 990910142641427, - 2393362135853978, - 3210964519009057, + 21888242871839275222246405745257275088548364400416034343698202076338312915866, + 21888242871839275222246405745257275088548364400416034343698202893940696070945, 2104552845530988, 2152927333928173, 622424146599999, @@ -21740,133 +21740,133 @@ pub global CRP: [Polynomial; L] = [ 1057328468503958, 1881606419815972, 1126378956396353, - 2586153887024523, - 2786388136790866, + 21888242871839275222246405745257275088548364400416034343698202269130064086411, + 21888242871839275222246405745257275088548364400416034343698202469364313852754, 150944498034702, 877206344685704, 1692481845216308, 1838859462434020, - 2473218569511136, - 3403445518738068, - 4221543784038680, + 21888242871839275222246405745257275088548364400416034343698202156194746573024, + 21888242871839275222246405745257275088548364400416034343698203086421695799956, + 21888242871839275222246405745257275088548364400416034343698203904519961100568, 818027149042898, - 2661423843774539, - 3136508356966620, + 21888242871839275222246405745257275088548364400416034343698202344400020836427, + 21888242871839275222246405745257275088548364400416034343698202819484534028508, 577734588186421, - 2270292293719662, - 4018541132357913, - 3727019427815571, - 2455325560134680, - 4327593982550045, - 3294797607928362, + 21888242871839275222246405745257275088548364400416034343698201953268470781550, + 21888242871839275222246405745257275088548364400416034343698203701517309419801, + 21888242871839275222246405745257275088548364400416034343698203409995604877459, + 21888242871839275222246405745257275088548364400416034343698202138301737196568, + 21888242871839275222246405745257275088548364400416034343698204010570159611933, + 21888242871839275222246405745257275088548364400416034343698202977773784990250, 508849163994517, - 2423946787532675, - 3946993222040870, - 2830491969990228, - 2458144197761150, + 21888242871839275222246405745257275088548364400416034343698202106922964594563, + 21888242871839275222246405745257275088548364400416034343698203629969399102758, + 21888242871839275222246405745257275088548364400416034343698202513468147052116, + 21888242871839275222246405745257275088548364400416034343698202141120374823038, 1250098042446494, - 4082086990754433, - 2406645515550529, - 4436371540921370, - 3384959158135680, + 21888242871839275222246405745257275088548364400416034343698203765063167816321, + 21888242871839275222246405745257275088548364400416034343698202089621692612417, + 21888242871839275222246405745257275088548364400416034343698204119347717983258, + 21888242871839275222246405745257275088548364400416034343698203067935335197568, 768325638738506, - 3656115120857742, + 21888242871839275222246405745257275088548364400416034343698203339091297919630, 486754843885653, - 2301945675160703, - 3416126479136112, + 21888242871839275222246405745257275088548364400416034343698201984921852222591, + 21888242871839275222246405745257275088548364400416034343698203099102656198000, 1989368016942777, - 3692135658810966, + 21888242871839275222246405745257275088548364400416034343698203375111835872854, 765910448342867, - 4266719195821694, - 3655045378499282, + 21888242871839275222246405745257275088548364400416034343698203949695372883582, + 21888242871839275222246405745257275088548364400416034343698203338021555561170, 197719766027042, - 3945824644044081, - 3199583461222169, + 21888242871839275222246405745257275088548364400416034343698203628800821105969, + 21888242871839275222246405745257275088548364400416034343698202882559638284057, 407807534932613, 337992990148467, - 3321556021124906, - 3721518397071575, - 4397962461663696, + 21888242871839275222246405745257275088548364400416034343698203004532198186794, + 21888242871839275222246405745257275088548364400416034343698203404494574133463, + 21888242871839275222246405745257275088548364400416034343698204080938638725584, 1268453522295281, - 3558639873649326, - 4412811188826447, - 4378138886608976, - 3229876371124878, - 3677962946276509, + 21888242871839275222246405745257275088548364400416034343698203241616050711214, + 21888242871839275222246405745257275088548364400416034343698204095787365888335, + 21888242871839275222246405745257275088548364400416034343698204061115063670864, + 21888242871839275222246405745257275088548364400416034343698202912852548186766, + 21888242871839275222246405745257275088548364400416034343698203360939123338397, 1730721250878641, 1857209709779425, - 4153628748889490, - 4138362980279469, + 21888242871839275222246405745257275088548364400416034343698203836604925951378, + 21888242871839275222246405745257275088548364400416034343698203821339157341357, 586163414537469, - 3082575393482252, - 2527810547493728, - 2671255463608437, + 21888242871839275222246405745257275088548364400416034343698202765551570544140, + 21888242871839275222246405745257275088548364400416034343698202210786724555616, + 21888242871839275222246405745257275088548364400416034343698202354231640670325, 2018024830867777, 1335436190835223, - 4076373066770992, - 2763191179990110, - 4316007885659003, - 3922223324478549, + 21888242871839275222246405745257275088548364400416034343698203759349243832880, + 21888242871839275222246405745257275088548364400416034343698202446167357051998, + 21888242871839275222246405745257275088548364400416034343698203998984062720891, + 21888242871839275222246405745257275088548364400416034343698203605199501540437, 884963950772710, 1724361691660205, 1742044537463516, - 3337708125188065, + 21888242871839275222246405745257275088548364400416034343698203020684302249953, 1394166045651921, - 2870290811231220, - 2536262165610338, + 21888242871839275222246405745257275088548364400416034343698202553266988293108, + 21888242871839275222246405745257275088548364400416034343698202219238342672226, 497448062150007, - 4259645672490027, - 2564649430924784, - 3214609567495255, + 21888242871839275222246405745257275088548364400416034343698203942621849551915, + 21888242871839275222246405745257275088548364400416034343698202247625607986672, + 21888242871839275222246405745257275088548364400416034343698202897585744557143, 2146659805080059, - 3371936186762931, - 4444103870682789, + 21888242871839275222246405745257275088548364400416034343698203054912363824819, + 21888242871839275222246405745257275088548364400416034343698204127080047744677, 1112397397195307, 851414598689282, - 3810718947491027, + 21888242871839275222246405745257275088548364400416034343698203493695124552915, 1740921885058585, - 3072271517417043, - 4039354683668163, - 3972869312873660, - 2707485390528412, + 21888242871839275222246405745257275088548364400416034343698202755247694478931, + 21888242871839275222246405745257275088548364400416034343698203722330860730051, + 21888242871839275222246405745257275088548364400416034343698203655845489935548, + 21888242871839275222246405745257275088548364400416034343698202390461567590300, 1722844004682215, 1338548570418494, 1964358439025036, 779652845727362, 1039923014322727, 2167743887751740, - 2967054724394914, + 21888242871839275222246405745257275088548364400416034343698202650030901456802, 403638790336362, 1518880688032005, 856440939517023, - 4403716754242938, + 21888242871839275222246405745257275088548364400416034343698204086692931304826, 1503984911495200, - 2611749870678852, + 21888242871839275222246405745257275088548364400416034343698202294726047740740, 1974239931669560, - 3275797967833817, + 21888242871839275222246405745257275088548364400416034343698202958774144895705, 1810291369727518, - 3521137093648145, - 2624476876217563, + 21888242871839275222246405745257275088548364400416034343698203204113270710033, + 21888242871839275222246405745257275088548364400416034343698202307453053279451, 38658845388594, - 2583816020173036, + 21888242871839275222246405745257275088548364400416034343698202266792197234924, 1441468493196705, - 2670733774672574, - 3152248252785085, + 21888242871839275222246405745257275088548364400416034343698202353709951734462, + 21888242871839275222246405745257275088548364400416034343698202835224429846973, 625433662145319, - 3480627915328588, + 21888242871839275222246405745257275088548364400416034343698203163604092390476, 7974756145562, - 2658255747844850, + 21888242871839275222246405745257275088548364400416034343698202341231924906738, 1687344848512234, - 4324437197097514, + 21888242871839275222246405745257275088548364400416034343698204007413374159402, 669191868993992, 144698348858934, 451010751929411, 2014855053468562, - 4276006549306835, + 21888242871839275222246405745257275088548364400416034343698203958982726368723, 1901737525908196, 1344221793663231, - 3808419737280550, - 2540596497835946, + 21888242871839275222246405745257275088548364400416034343698203491395914342438, + 21888242871839275222246405745257275088548364400416034343698202223572674897834, 1035144128886415, 1691655684515003, 201727880467225, @@ -21877,141 +21877,141 @@ pub global CRP: [Polynomial; L] = [ 62851682166052, 78309198311590, 2007829024388892, - 2889840251233843, - 3764035325717412, - 4453406622588421, + 21888242871839275222246405745257275088548364400416034343698202572816428295731, + 21888242871839275222246405745257275088548364400416034343698203447011502779300, + 21888242871839275222246405745257275088548364400416034343698204136382799650309, 108152663847930, 2012890053405540, - 4173418199112680, - 2261314545430919, + 21888242871839275222246405745257275088548364400416034343698203856394376174568, + 21888242871839275222246405745257275088548364400416034343698201944290722492807, 1243930288682270, - 3046839979496574, - 4217754121565577, + 21888242871839275222246405745257275088548364400416034343698202729816156558462, + 21888242871839275222246405745257275088548364400416034343698203900730298627465, 1366135162302916, 275713058037132, - 2497767848308927, - 3128775895701898, + 21888242871839275222246405745257275088548364400416034343698202180744025370815, + 21888242871839275222246405745257275088548364400416034343698202811752072763786, 1893666142368550, - 3555641106747964, + 21888242871839275222246405745257275088548364400416034343698203238617283809852, 1164806115943430, 2068283630115642, 16203602188673, 1444095701431515, 753923140923698, 1792824791631481, - 4453785286077470, + 21888242871839275222246405745257275088548364400416034343698204136761463139358, 65872671760046, - 2728766572019512, - 2913958094714039, - 4168158065250573, + 21888242871839275222246405745257275088548364400416034343698202411742749081400, + 21888242871839275222246405745257275088548364400416034343698202596934271775927, + 21888242871839275222246405745257275088548364400416034343698203851134242312461, 1786357491804085, 921121665293439, - 2309591694680412, - 3082822192183747, - 4169794665757157, + 21888242871839275222246405745257275088548364400416034343698201992567871742300, + 21888242871839275222246405745257275088548364400416034343698202765798369245635, + 21888242871839275222246405745257275088548364400416034343698203852770842819045, 425263185432790, - 3796238408263593, + 21888242871839275222246405745257275088548364400416034343698203479214585325481, 1274423330068531, 2171849234206271, 600403243706820, - 3763839503063550, - 3170635432887370, + 21888242871839275222246405745257275088548364400416034343698203446815680125438, + 21888242871839275222246405745257275088548364400416034343698202853611609949258, 646575278561626, - 2598483042000556, + 21888242871839275222246405745257275088548364400416034343698202281459219062444, 2222412916176596, 655613570961435, - 4056078035322117, + 21888242871839275222246405745257275088548364400416034343698203739054212384005, 2131853329013226, 1744535385297198, - 3094794895403881, - 3780664897320923, + 21888242871839275222246405745257275088548364400416034343698202777771072465769, + 21888242871839275222246405745257275088548364400416034343698203463641074382811, 2159032591048687, - 3058552681269196, - 2428666542243272, + 21888242871839275222246405745257275088548364400416034343698202741528858331084, + 21888242871839275222246405745257275088548364400416034343698202111642719305160, 1161444382578170, - 3911605385240322, + 21888242871839275222246405745257275088548364400416034343698203594581562302210, 1300023490307007, - 3023524464674938, - 3211831488989815, - 2974729993342899, - 3416331987616572, - 3597811831550197, + 21888242871839275222246405745257275088548364400416034343698202706500641736826, + 21888242871839275222246405745257275088548364400416034343698202894807666051703, + 21888242871839275222246405745257275088548364400416034343698202657706170404787, + 21888242871839275222246405745257275088548364400416034343698203099308164678460, + 21888242871839275222246405745257275088548364400416034343698203280788008612085, 15302908968964, - 3985563951481492, - 4412863975158543, + 21888242871839275222246405745257275088548364400416034343698203668540128543380, + 21888242871839275222246405745257275088548364400416034343698204095840152220431, 1203779499950747, 1830673919270425, 1397952654475935, 873033674364588, 2068860179416050, 262957844817156, - 2295260951923701, - 3389913372080050, + 21888242871839275222246405745257275088548364400416034343698201978237128985589, + 21888242871839275222246405745257275088548364400416034343698203072889549141938, 1869713033101705, 274365545623713, - 2696401889223799, - 4160937437037351, - 4032412114826848, + 21888242871839275222246405745257275088548364400416034343698202379378066285687, + 21888242871839275222246405745257275088548364400416034343698203843913614099239, + 21888242871839275222246405745257275088548364400416034343698203715388291888736, 944705134555978, - 2723266104320658, + 21888242871839275222246405745257275088548364400416034343698202406242281382546, 1166243156020441, - 2369545436599629, + 21888242871839275222246405745257275088548364400416034343698202052521613661517, 807655579711738, 1241170546264361, 1086547017584071, - 2895828749044288, - 3261244616242135, + 21888242871839275222246405745257275088548364400416034343698202578804926106176, + 21888242871839275222246405745257275088548364400416034343698202944220793304023, 1530230288519015, - 2752341395790292, + 21888242871839275222246405745257275088548364400416034343698202435317572852180, 1190593108212478, 237057983766198, - 3073320331877464, - 3655925789631731, + 21888242871839275222246405745257275088548364400416034343698202756296508939352, + 21888242871839275222246405745257275088548364400416034343698203338901966693619, 1211438692330320, 1543408214262123, 1196269266043755, 1926873529642363, - 2872560382572325, + 21888242871839275222246405745257275088548364400416034343698202555536559634213, 562885718397950, - 2650866963352644, + 21888242871839275222246405745257275088548364400416034343698202333843140414532, 1468026684970497, - 4366780060781489, + 21888242871839275222246405745257275088548364400416034343698204049756237843377, 1818140259611477, - 2690308049308927, - 2544357307349583, - 2686750141865997, - 3636560028343105, - 4396402506093000, + 21888242871839275222246405745257275088548364400416034343698202373284226370815, + 21888242871839275222246405745257275088548364400416034343698202227333484411471, + 21888242871839275222246405745257275088548364400416034343698202369726318927885, + 21888242871839275222246405745257275088548364400416034343698203319536205404993, + 21888242871839275222246405745257275088548364400416034343698204079378683154888, 232750466706608, - 3177955099770522, + 21888242871839275222246405745257275088548364400416034343698202860931276832410, 1722194605083839, 1476990733216733, 818333434397196, - 3185730112381560, + 21888242871839275222246405745257275088548364400416034343698202868706289443448, 1312736803706101, - 2539471867710418, - 4287919807084782, - 4085035018548328, - 3159702351670722, - 3200663959305588, - 4231214112569794, - 3381991131873306, - 2405634889620994, - 3143444615992275, - 3818120060630713, - 3204251748625481, - 3298206512438458, - 3407327247832980, - 3237331768181883, - 4129546603583700, - 4033056772974308, + 21888242871839275222246405745257275088548364400416034343698202222448044772306, + 21888242871839275222246405745257275088548364400416034343698203970895984146670, + 21888242871839275222246405745257275088548364400416034343698203768011195610216, + 21888242871839275222246405745257275088548364400416034343698202842678528732610, + 21888242871839275222246405745257275088548364400416034343698202883640136367476, + 21888242871839275222246405745257275088548364400416034343698203914190289631682, + 21888242871839275222246405745257275088548364400416034343698203064967308935194, + 21888242871839275222246405745257275088548364400416034343698202088611066682882, + 21888242871839275222246405745257275088548364400416034343698202826420793054163, + 21888242871839275222246405745257275088548364400416034343698203501096237692601, + 21888242871839275222246405745257275088548364400416034343698202887227925687369, + 21888242871839275222246405745257275088548364400416034343698202981182689500346, + 21888242871839275222246405745257275088548364400416034343698203090303424894868, + 21888242871839275222246405745257275088548364400416034343698202920307945243771, + 21888242871839275222246405745257275088548364400416034343698203812522780645588, + 21888242871839275222246405745257275088548364400416034343698203716032950036196, 1230694065086274, 96242725598593, 1213853813848071, 1547240859800855, 647316582503826, 1629504689769029, - 2491147600230310, + 21888242871839275222246405745257275088548364400416034343698202174123777292198, 1050732676878053, 2198666711606020, 1426584858510870, @@ -22019,20 +22019,20 @@ pub global CRP: [Polynomial; L] = [ 1014339723371663, 58616262779462, 1518632012974562, - 4106171215733314, - 2493093896278814, - 2763245398829958, + 21888242871839275222246405745257275088548364400416034343698203789147392795202, + 21888242871839275222246405745257275088548364400416034343698202176070073340702, + 21888242871839275222246405745257275088548364400416034343698202446221575891846, 287097829225173, - 2285915421917970, + 21888242871839275222246405745257275088548364400416034343698201968891598979858, 1618511736817318, - 2768127808544480, + 21888242871839275222246405745257275088548364400416034343698202451103985606368, 425711623784460, - 3647097733690713, - 4430198917654645, + 21888242871839275222246405745257275088548364400416034343698203330073910752601, + 21888242871839275222246405745257275088548364400416034343698204113175094716533, 1126682579466677, 2030585403277763, 1437355774585343, - 4106409535510484, + 21888242871839275222246405745257275088548364400416034343698203789385712572372, 83129388617563, 20986693436846, 1507864441263056, @@ -22040,184 +22040,184 @@ pub global CRP: [Polynomial; L] = [ 466059829251166, 605009714176511, 157961176803606, - 3474209744383609, - 3488149748968443, - 4477700316097022, + 21888242871839275222246405745257275088548364400416034343698203157185921445497, + 21888242871839275222246405745257275088548364400416034343698203171125926030331, + 21888242871839275222246405745257275088548364400416034343698204160676493158910, 437548460033020, - 4309707910346365, - 3687074330245635, - 3165092892923026, - 3881130138203634, - 2839826018517115, - 3677007568993382, + 21888242871839275222246405745257275088548364400416034343698203992684087408253, + 21888242871839275222246405745257275088548364400416034343698203370050507307523, + 21888242871839275222246405745257275088548364400416034343698202848069069984914, + 21888242871839275222246405745257275088548364400416034343698203564106315265522, + 21888242871839275222246405745257275088548364400416034343698202522802195579003, + 21888242871839275222246405745257275088548364400416034343698203359983746055270, 54054239235324, - 2980700764439371, - 3345643392902618, + 21888242871839275222246405745257275088548364400416034343698202663676941501259, + 21888242871839275222246405745257275088548364400416034343698203028619569964506, 1475262597684452, - 3852838720384081, + 21888242871839275222246405745257275088548364400416034343698203535814897445969, 988015277315103, 1668042406691893, - 2745582244806378, - 3922012574776341, - 2468522425798141, + 21888242871839275222246405745257275088548364400416034343698202428558421868266, + 21888242871839275222246405745257275088548364400416034343698203604988751838229, + 21888242871839275222246405745257275088548364400416034343698202151498602860029, 1028503797022575, - 4379206740316220, + 21888242871839275222246405745257275088548364400416034343698204062182917378108, 627648572559098, - 2349351191794999, - 3193838728406352, - 4202041837170689, + 21888242871839275222246405745257275088548364400416034343698202032327368856887, + 21888242871839275222246405745257275088548364400416034343698202876814905468240, + 21888242871839275222246405745257275088548364400416034343698203885018014232577, 1995412916531646, 127171108157554, 708089996903262, 1231875725877279, - 2591706089806981, + 21888242871839275222246405745257275088548364400416034343698202274682266868869, 198840356694539, 2011808019505705, 1288430346974972, 118806066356826, - 3248130710176174, - 3416942349930686, + 21888242871839275222246405745257275088548364400416034343698202931106887238062, + 21888242871839275222246405745257275088548364400416034343698203099918526992574, 620287385641899, 1137312903479899, 2065904687390906, 1971907568510727, 1462372989155963, - 2772700931057136, + 21888242871839275222246405745257275088548364400416034343698202455677108119024, 1739113817790287, - 3582492359505809, - 3318604030682354, - 2695405550056514, - 3236138720411331, - 4240244852625670, + 21888242871839275222246405745257275088548364400416034343698203265468536567697, + 21888242871839275222246405745257275088548364400416034343698203001580207744242, + 21888242871839275222246405745257275088548364400416034343698202378381727118402, + 21888242871839275222246405745257275088548364400416034343698202919114897473219, + 21888242871839275222246405745257275088548364400416034343698203923221029687558, 949400296820225, - 2707759158217649, + 21888242871839275222246405745257275088548364400416034343698202390735335279537, 1036462650179678, 1653890253688908, 359167600755533, 2197708695520697, 2044664213267974, 1679576488878934, - 2831516552865357, - 2321793481424725, + 21888242871839275222246405745257275088548364400416034343698202514492729927245, + 21888242871839275222246405745257275088548364400416034343698202004769658486613, 1836164752928338, - 3862976351413454, + 21888242871839275222246405745257275088548364400416034343698203545952528475342, 150846306331895, 2164094093268358, - 4355594912122535, + 21888242871839275222246405745257275088548364400416034343698204038571089184423, 2123419260028849, 1439066306747799, - 3343021050528832, + 21888242871839275222246405745257275088548364400416034343698203025997227590720, 1529789077845082, - 2467371978225201, - 3855442623693792, - 4320468661617878, + 21888242871839275222246405745257275088548364400416034343698202150348155287089, + 21888242871839275222246405745257275088548364400416034343698203538418800755680, + 21888242871839275222246405745257275088548364400416034343698204003444838679766, 245295966436338, - 4267805343221079, + 21888242871839275222246405745257275088548364400416034343698203950781520282967, 412291536385112, 780639389470681, 2129280717241779, - 3011470869012795, - 3659871377449392, - 3450437044008751, - 2869473943578976, - 3000041957692781, + 21888242871839275222246405745257275088548364400416034343698202694447046074683, + 21888242871839275222246405745257275088548364400416034343698203342847554511280, + 21888242871839275222246405745257275088548364400416034343698203133413221070639, + 21888242871839275222246405745257275088548364400416034343698202552450120640864, + 21888242871839275222246405745257275088548364400416034343698202683018134754669, 795850933386110, - 4032705939794766, - 2486511811936199, - 3412330090914855, + 21888242871839275222246405745257275088548364400416034343698203715682116856654, + 21888242871839275222246405745257275088548364400416034343698202169487988998087, + 21888242871839275222246405745257275088548364400416034343698203095306267976743, 211028371225950, - 4250291748975831, - 3930727039705983, - 4276969007449138, - 3005060614280987, - 4138406638059758, + 21888242871839275222246405745257275088548364400416034343698203933267926037719, + 21888242871839275222246405745257275088548364400416034343698203613703216767871, + 21888242871839275222246405745257275088548364400416034343698203959945184511026, + 21888242871839275222246405745257275088548364400416034343698202688036791342875, + 21888242871839275222246405745257275088548364400416034343698203821382815121646, 132201998040383, 337304327234829, - 2533238911948394, + 21888242871839275222246405745257275088548364400416034343698202216215089010282, 1673634401060001, - 4091320005040931, + 21888242871839275222246405745257275088548364400416034343698203774296182102819, 446310538056008, - 3518618416370532, + 21888242871839275222246405745257275088548364400416034343698203201594593432420, 1974380926373591, 2217107765972643, - 4381965170544680, + 21888242871839275222246405745257275088548364400416034343698204064941347606568, 489472975159507, - 2825644715251491, + 21888242871839275222246405745257275088548364400416034343698202508620892313379, 1400179251006759, 392437834080898, - 4106797117715901, + 21888242871839275222246405745257275088548364400416034343698203789773294777789, 691998550399587, 338685968240879, - 2578541094858336, - 3248665037730705, - 2659662267275920, - 2927077055987660, + 21888242871839275222246405745257275088548364400416034343698202261517271920224, + 21888242871839275222246405745257275088548364400416034343698202931641214792593, + 21888242871839275222246405745257275088548364400416034343698202342638444337808, + 21888242871839275222246405745257275088548364400416034343698202610053233049548, 2111564428673280, 1268661294107542, - 2937263503124106, + 21888242871839275222246405745257275088548364400416034343698202620239680185994, 1450080462055384, - 3819252849217142, - 4159106696399987, - 3226769853891788, + 21888242871839275222246405745257275088548364400416034343698203502229026279030, + 21888242871839275222246405745257275088548364400416034343698203842082873461875, + 21888242871839275222246405745257275088548364400416034343698202909746030953676, 1327462054979482, - 3150479038704457, - 3636469300335382, - 3617489313588884, + 21888242871839275222246405745257275088548364400416034343698202833455215766345, + 21888242871839275222246405745257275088548364400416034343698203319445477397270, + 21888242871839275222246405745257275088548364400416034343698203300465490650772, 1468677010096900, - 3694844971525329, + 21888242871839275222246405745257275088548364400416034343698203377821148587217, 748511655939988, 1902491682806844, 868813009034297, - 3217654882350249, + 21888242871839275222246405745257275088548364400416034343698202900631059412137, 1975979401720510, 829361612387443, 983967323210646, - 2822412164566137, + 21888242871839275222246405745257275088548364400416034343698202505388341628025, 1697972540333787, - 3631749057777108, - 2917049889155157, + 21888242871839275222246405745257275088548364400416034343698203314725234838996, + 21888242871839275222246405745257275088548364400416034343698202600026066217045, 1852420816078410, 510843605585073, 1517836549225988, 165398274650734, 803178032917234, - 2864778764381017, - 3732969275434776, - 2814159198988911, - 3577319008856102, - 2392630211635244, + 21888242871839275222246405745257275088548364400416034343698202547754941442905, + 21888242871839275222246405745257275088548364400416034343698203415945452496664, + 21888242871839275222246405745257275088548364400416034343698202497135376050799, + 21888242871839275222246405745257275088548364400416034343698203260295185917990, + 21888242871839275222246405745257275088548364400416034343698202075606388697132, 40862769686771, 1371701357204938, 1015571124107188, - 4209652346059290, + 21888242871839275222246405745257275088548364400416034343698203892628523121178, 1138796450469043, - 3028055815234234, + 21888242871839275222246405745257275088548364400416034343698202711031992296122, 207317414941537, - 3519979779516333, + 21888242871839275222246405745257275088548364400416034343698203202955956578221, 989541059667553, 1272851323228188, 45117050069974, 113525624983099, - 2268291879015988, - 3859910782055698, - 2794176720315674, + 21888242871839275222246405745257275088548364400416034343698201951268056077876, + 21888242871839275222246405745257275088548364400416034343698203542886959117586, + 21888242871839275222246405745257275088548364400416034343698202477152897377562, 1304414820396520, - 3486105977536440, - 3319796933573610, - 3884505641083440, - 3471773177334097, + 21888242871839275222246405745257275088548364400416034343698203169082154598328, + 21888242871839275222246405745257275088548364400416034343698203002773110635498, + 21888242871839275222246405745257275088548364400416034343698203567481818145328, + 21888242871839275222246405745257275088548364400416034343698203154749354395985, 1333430110010179, - 3505146627456823, - 3894493637049367, + 21888242871839275222246405745257275088548364400416034343698203188122804518711, + 21888242871839275222246405745257275088548364400416034343698203577469814111255, 1475930899102206, - 3027083895353346, - 3025076694270895, - 2705376168449522, + 21888242871839275222246405745257275088548364400416034343698202710060072415234, + 21888242871839275222246405745257275088548364400416034343698202708052871332783, + 21888242871839275222246405745257275088548364400416034343698202388352345511410, 1307914830623331, 1928848837401285, 40967364483766, - 3042393351754586, - 3388997094321537, + 21888242871839275222246405745257275088548364400416034343698202725369528816474, + 21888242871839275222246405745257275088548364400416034343698203071973271383425, 982794810156145, 100197894833630, 1646451057734197, @@ -22225,222 +22225,222 @@ pub global CRP: [Polynomial; L] = [ 1037261368466099, 382567409614461, 2219176819383053, - 3152850958873436, - 3442191849273395, - 2687765701071005, + 21888242871839275222246405745257275088548364400416034343698202835827135935324, + 21888242871839275222246405745257275088548364400416034343698203125168026335283, + 21888242871839275222246405745257275088548364400416034343698202370741878132893, 491159153570577, 579730208083189, 1933550061126929, - 3078635413301863, - 3575243918273716, + 21888242871839275222246405745257275088548364400416034343698202761611590363751, + 21888242871839275222246405745257275088548364400416034343698203258220095335604, 1060365302382646, 1560070373640668, - 4237507295090402, - 3619229905617777, - 3275272717135360, - 4050455156306081, - 2858742974350672, + 21888242871839275222246405745257275088548364400416034343698203920483472152290, + 21888242871839275222246405745257275088548364400416034343698203302206082679665, + 21888242871839275222246405745257275088548364400416034343698202958248894197248, + 21888242871839275222246405745257275088548364400416034343698203733431333367969, + 21888242871839275222246405745257275088548364400416034343698202541719151412560, 943011486856088, - 2337281200343443, - 3282212196805604, - 2956970087194752, - 2356727970609735, - 2407887440149596, + 21888242871839275222246405745257275088548364400416034343698202020257377405331, + 21888242871839275222246405745257275088548364400416034343698202965188373867492, + 21888242871839275222246405745257275088548364400416034343698202639946264256640, + 21888242871839275222246405745257275088548364400416034343698202039704147671623, + 21888242871839275222246405745257275088548364400416034343698202090863617211484, 340975071694177, - 2565659995754658, - 2710536944296180, - 3795446357365289, - 3380954671723145, - 4054484783531201, - 2741622260233230, + 21888242871839275222246405745257275088548364400416034343698202248636172816546, + 21888242871839275222246405745257275088548364400416034343698202393513121358068, + 21888242871839275222246405745257275088548364400416034343698203478422534427177, + 21888242871839275222246405745257275088548364400416034343698203063930848785033, + 21888242871839275222246405745257275088548364400416034343698203737460960593089, + 21888242871839275222246405745257275088548364400416034343698202424598437295118, 829249189617902, 1369152730953296, 1040660282332035, - 2533420725439032, - 3441649154897763, + 21888242871839275222246405745257275088548364400416034343698202216396902500920, + 21888242871839275222246405745257275088548364400416034343698203124625331959651, 546187538004833, 1167708743611967, 237446618163500, 896874745887944, 1151628815685363, - 4078718179708427, - 2872347286874515, + 21888242871839275222246405745257275088548364400416034343698203761694356770315, + 21888242871839275222246405745257275088548364400416034343698202555323463936403, 731498103301780, 203470495993033, 2013133391223366, - 3162796851115400, + 21888242871839275222246405745257275088548364400416034343698202845773028177288, 1594600231519713, 51888336311750, - 3644218290861840, + 21888242871839275222246405745257275088548364400416034343698203327194467923728, 1311818794350191, 57411568142951, - 4123137301818862, + 21888242871839275222246405745257275088548364400416034343698203806113478880750, 501385152615306, - 2407138182813397, - 3331370390193378, - 2809525832663807, - 3504020105436922, - 2569408987510119, - 2899927851699455, - 3620201293144376, - 2995327243418204, - 2754241131965165, - 3869991899709263, - 4078419445146160, + 21888242871839275222246405745257275088548364400416034343698202090114359875285, + 21888242871839275222246405745257275088548364400416034343698203014346567255266, + 21888242871839275222246405745257275088548364400416034343698202492502009725695, + 21888242871839275222246405745257275088548364400416034343698203186996282498810, + 21888242871839275222246405745257275088548364400416034343698202252385164572007, + 21888242871839275222246405745257275088548364400416034343698202582904028761343, + 21888242871839275222246405745257275088548364400416034343698203303177470206264, + 21888242871839275222246405745257275088548364400416034343698202678303420480092, + 21888242871839275222246405745257275088548364400416034343698202437217309027053, + 21888242871839275222246405745257275088548364400416034343698203552968076771151, + 21888242871839275222246405745257275088548364400416034343698203761395622208048, 857058500504466, - 4254312359524723, + 21888242871839275222246405745257275088548364400416034343698203937288536586611, 222173205287474, 348167315196766, 1667975277023964, - 4294312542358119, + 21888242871839275222246405745257275088548364400416034343698203977288719420007, 829912314450107, 149840398101856, 1797678556256158, - 3739527411986609, - 3430692235711507, + 21888242871839275222246405745257275088548364400416034343698203422503589048497, + 21888242871839275222246405745257275088548364400416034343698203113668412773395, 2134313962087708, - 4051807807049097, + 21888242871839275222246405745257275088548364400416034343698203734783984110985, 37596744579040, 1473117521200639, 97916319430624, - 4004155968791692, + 21888242871839275222246405745257275088548364400416034343698203687132145853580, 1137932028056708, - 3468221637519022, - 3635243047016909, + 21888242871839275222246405745257275088548364400416034343698203151197814580910, + 21888242871839275222246405745257275088548364400416034343698203318219224078797, 1966075931116451, 1913519082555499, 184995141339919, 2204994527398937, - 4040373732603846, - 2296576518771122, - 2629487509712957, + 21888242871839275222246405745257275088548364400416034343698203723349909665734, + 21888242871839275222246405745257275088548364400416034343698201979552695833010, + 21888242871839275222246405745257275088548364400416034343698202312463686774845, 1614951811812375, - 4193840849694230, - 3602828094203035, - 3805388742338369, + 21888242871839275222246405745257275088548364400416034343698203876817026756118, + 21888242871839275222246405745257275088548364400416034343698203285804271264923, + 21888242871839275222246405745257275088548364400416034343698203488364919400257, 938751289928057, 1792850222349928, - 3153001002558805, + 21888242871839275222246405745257275088548364400416034343698202835977179620693, 591405451339311, - 4219574100651833, + 21888242871839275222246405745257275088548364400416034343698203902550277713721, 1210918447864173, 1647880707584826, 942959420683129, - 3851362671543855, + 21888242871839275222246405745257275088548364400416034343698203534338848605743, 682016683904108, 512455914500965, - 2762962730845784, + 21888242871839275222246405745257275088548364400416034343698202445938907907672, 2192887208421321, - 2402970605698794, + 21888242871839275222246405745257275088548364400416034343698202085946782760682, 1138542258745422, - 4032797111974632, + 21888242871839275222246405745257275088548364400416034343698203715773289036520, 1092404540203718, - 4210851311715354, + 21888242871839275222246405745257275088548364400416034343698203893827488777242, 1539335115586038, 1294124716789419, 1651667708747445, - 4364632935162048, + 21888242871839275222246405745257275088548364400416034343698204047609112223936, 1987286011836395, 1239844583624823, - 2369653603050979, + 21888242871839275222246405745257275088548364400416034343698202052629780112867, 2124615633427500, 1969064265081161, 1243996957157228, - 4174624749761552, - 3861716497495263, + 21888242871839275222246405745257275088548364400416034343698203857600926823440, + 21888242871839275222246405745257275088548364400416034343698203544692674557151, 745031829848170, - 3043665527502662, + 21888242871839275222246405745257275088548364400416034343698202726641704564550, 2023048447819974, - 2315538506217676, - 4496074732359569, - 3079348055109875, + 21888242871839275222246405745257275088548364400416034343698201998514683279564, + 21888242871839275222246405745257275088548364400416034343698204179050909421457, + 21888242871839275222246405745257275088548364400416034343698202762324232171763, 1791343122131183, - 4287303565280818, - 4397035430697868, + 21888242871839275222246405745257275088548364400416034343698203970279742342706, + 21888242871839275222246405745257275088548364400416034343698204080011607759756, 752408957789092, - 2410907631288735, + 21888242871839275222246405745257275088548364400416034343698202093883808350623, 1135520964852330, - 4207971159093752, - 3143314682534930, + 21888242871839275222246405745257275088548364400416034343698203890947336155640, + 21888242871839275222246405745257275088548364400416034343698202826290859596818, 763604143931186, - 3738884601027500, - 3159206273226503, + 21888242871839275222246405745257275088548364400416034343698203421860778089388, + 21888242871839275222246405745257275088548364400416034343698202842182450288391, 389499354259953, - 2886557546128010, - 2300494583222442, + 21888242871839275222246405745257275088548364400416034343698202569533723189898, + 21888242871839275222246405745257275088548364400416034343698201983470760284330, 667730978414338, 1926958576916141, - 2402151656579904, + 21888242871839275222246405745257275088548364400416034343698202085127833641792, 64719262735497, 1378715081015785, 302992572421845, - 4015253461868760, + 21888242871839275222246405745257275088548364400416034343698203698229638930648, 186367786407562, 1913220338391757, - 2451726611038136, - 3446928519399312, - 3067419066524390, - 2733174966802467, + 21888242871839275222246405745257275088548364400416034343698202134702788100024, + 21888242871839275222246405745257275088548364400416034343698203129904696461200, + 21888242871839275222246405745257275088548364400416034343698202750395243586278, + 21888242871839275222246405745257275088548364400416034343698202416151143864355, 612225013256455, - 2828180910757574, + 21888242871839275222246405745257275088548364400416034343698202511157087819462, 1215226028960571, - 2804144362011047, - 4164318752321927, - 2969708795960193, + 21888242871839275222246405745257275088548364400416034343698202487120539072935, + 21888242871839275222246405745257275088548364400416034343698203847294929383815, + 21888242871839275222246405745257275088548364400416034343698202652684973022081, 2058965250590301, - 2338132024354398, + 21888242871839275222246405745257275088548364400416034343698202021108201416286, 1550617913220389, 752946783011984, 1883662664630807, - 4233071455882271, - 3863449694132582, + 21888242871839275222246405745257275088548364400416034343698203916047632944159, + 21888242871839275222246405745257275088548364400416034343698203546425871194470, 871910275125107, - 3748363464815098, + 21888242871839275222246405745257275088548364400416034343698203431339641876986, 263116621464070, 673601910497403, - 2538598902045213, - 4500666455673887, - 3451445429204299, - 3424353188798660, - 4246190543369286, + 21888242871839275222246405745257275088548364400416034343698202221575079107101, + 21888242871839275222246405745257275088548364400416034343698204183642632735775, + 21888242871839275222246405745257275088548364400416034343698203134421606266187, + 21888242871839275222246405745257275088548364400416034343698203107329365860548, + 21888242871839275222246405745257275088548364400416034343698203929166720431174, 1117115374595664, - 2472260492839178, + 21888242871839275222246405745257275088548364400416034343698202155236669901066, 1744901525947157, - 4199633689995763, + 21888242871839275222246405745257275088548364400416034343698203882609867057651, 1798182247224758, - 3752075303670699, + 21888242871839275222246405745257275088548364400416034343698203435051480732587, 1854190271743469, - 4019531369640567, + 21888242871839275222246405745257275088548364400416034343698203702507546702455, 1737848784690380, - 2906928894349315, - 2595766804874838, - 3281653181000063, + 21888242871839275222246405745257275088548364400416034343698202589905071411203, + 21888242871839275222246405745257275088548364400416034343698202278742981936726, + 21888242871839275222246405745257275088548364400416034343698202964629358061951, 968327197915995, 1701616367754279, 2077530115493074, 1436850057680579, - 2670332750437900, + 21888242871839275222246405745257275088548364400416034343698202353308927499788, 7754783813569, 1607847982955319, 302768502077760, - 2385217279875332, - 2561777016061949, - 3258951520343028, + 21888242871839275222246405745257275088548364400416034343698202068193456937220, + 21888242871839275222246405745257275088548364400416034343698202244753193123837, + 21888242871839275222246405745257275088548364400416034343698202941927697404916, 89492807856636, 24272840370060, 1908031405268128, - 4354938385836442, - 3551237086579436, - 2373929632094993, + 21888242871839275222246405745257275088548364400416034343698204037914562898330, + 21888242871839275222246405745257275088548364400416034343698203234213263641324, + 21888242871839275222246405745257275088548364400416034343698202056905809156881, 796657881546171, - 3378905173045971, + 21888242871839275222246405745257275088548364400416034343698203061881350107859, 435955724112247, - 4202688528926554, + 21888242871839275222246405745257275088548364400416034343698203885664705988442, 184344318401443, - 2273672696877130, - 4224485750499717, + 21888242871839275222246405745257275088548364400416034343698201956648873939018, + 21888242871839275222246405745257275088548364400416034343698203907461927561605, 1890604494205838, - 3395612616846995, + 21888242871839275222246405745257275088548364400416034343698203078588793908883, 187653308230371, 362663359691742, 2148935346793654, @@ -22451,303 +22451,303 @@ pub global CRP: [Polynomial; L] = [ 1015674471374211, 1396660278686643, 1503366731463084, - 3693274192967156, - 4342967313823946, + 21888242871839275222246405745257275088548364400416034343698203376250370029044, + 21888242871839275222246405745257275088548364400416034343698204025943490885834, 1090615959992329, 1002754740291430, 1643093755220242, 901733611523021, - 2790697295228353, - 2305287605841206, + 21888242871839275222246405745257275088548364400416034343698202473673472290241, + 21888242871839275222246405745257275088548364400416034343698201988263782903094, 159627105513018, - 2690430129749339, + 21888242871839275222246405745257275088548364400416034343698202373406306811227, 1588458840771265, - 3858126697024305, - 2354386161151229, + 21888242871839275222246405745257275088548364400416034343698203541102874086193, + 21888242871839275222246405745257275088548364400416034343698202037362338213117, 611883682889756, - 3440755662645019, - 2614002616302681, + 21888242871839275222246405745257275088548364400416034343698203123731839706907, + 21888242871839275222246405745257275088548364400416034343698202296978793364569, 1006164367823954, - 3293032799223627, - 4051970683956281, + 21888242871839275222246405745257275088548364400416034343698202976008976285515, + 21888242871839275222246405745257275088548364400416034343698203734946861018169, 1687167452478315, - 3924341375398089, + 21888242871839275222246405745257275088548364400416034343698203607317552459977, 1425481462099695, 1652161488171982, - 3475397031672909, - 2886269205572744, + 21888242871839275222246405745257275088548364400416034343698203158373208734797, + 21888242871839275222246405745257275088548364400416034343698202569245382634632, 120689880058406, 1521724790748724, - 2929201263584062, + 21888242871839275222246405745257275088548364400416034343698202612177440645950, 536765959625582, 65756306192684, 1838783407711035, 2007392169646562, - 3390217282871063, + 21888242871839275222246405745257275088548364400416034343698203073193459932951, 245140501002874, - 4302279835772319, + 21888242871839275222246405745257275088548364400416034343698203985256012834207, 633815950603351, 70533868543200, - 2605678521432053, + 21888242871839275222246405745257275088548364400416034343698202288654698493941, 438566634659667, - 3800799551820116, - 4164539538480622, + 21888242871839275222246405745257275088548364400416034343698203483775728882004, + 21888242871839275222246405745257275088548364400416034343698203847515715542510, 1349287303677923, 1948713113234770, - 4312573984478132, - 2442584575263795, + 21888242871839275222246405745257275088548364400416034343698203995550161540020, + 21888242871839275222246405745257275088548364400416034343698202125560752325683, 1762981591319951, 460761909091245, 1564318549550199, - 3186628169042525, - 4210604070613227, - 3221185523618880, - 3983739191975086, - 3445078110512493, + 21888242871839275222246405745257275088548364400416034343698202869604346104413, + 21888242871839275222246405745257275088548364400416034343698203893580247675115, + 21888242871839275222246405745257275088548364400416034343698202904161700680768, + 21888242871839275222246405745257275088548364400416034343698203666715369036974, + 21888242871839275222246405745257275088548364400416034343698203128054287574381, 870764023037911, 113290577663715, - 3559179855562694, + 21888242871839275222246405745257275088548364400416034343698203242156032624582, 2013633708919059, - 3122490886441562, + 21888242871839275222246405745257275088548364400416034343698202805467063503450, 1619066296743829, 930909140615426, 845008623321713, 1496856671281244, - 2893163993050870, - 2603328512383564, - 4443910499536448, + 21888242871839275222246405745257275088548364400416034343698202576140170112758, + 21888242871839275222246405745257275088548364400416034343698202286304689445452, + 21888242871839275222246405745257275088548364400416034343698204126886676598336, 269223828524503, - 3599304877516611, + 21888242871839275222246405745257275088548364400416034343698203282281054578499, 563571110524261, 993929662141743, 243649739266825, 788484586677463, - 2595758067324806, - 3668845922837709, - 4395774112061307, + 21888242871839275222246405745257275088548364400416034343698202278734244386694, + 21888242871839275222246405745257275088548364400416034343698203351822099899597, + 21888242871839275222246405745257275088548364400416034343698204078750289123195, 2116260446598341, 1576826079815642, - 2857070715866407, + 21888242871839275222246405745257275088548364400416034343698202540046892928295, 221127536789743, - 3963876760811803, + 21888242871839275222246405745257275088548364400416034343698203646852937873691, 242550452547703, - 2680946535021700, - 2485366106261460, + 21888242871839275222246405745257275088548364400416034343698202363922712083588, + 21888242871839275222246405745257275088548364400416034343698202168342283323348, 1420679772517649, 135234641901934, - 2360141621195858, + 21888242871839275222246405745257275088548364400416034343698202043117798257746, 970961775911438, - 3542212756816095, + 21888242871839275222246405745257275088548364400416034343698203225188933877983, 421832140873432, 1620227933729328, 1267309466359040, 1462961575967938, 479894493179811, 1762749495080463, - 3757385116185251, + 21888242871839275222246405745257275088548364400416034343698203440361293247139, 508131970711543, - 4088819834332844, + 21888242871839275222246405745257275088548364400416034343698203771796011394732, 80355323330838, - 3299770006698034, + 21888242871839275222246405745257275088548364400416034343698202982746183759922, 2134911007047111, 1788885702123472, - 4381428271037599, - 3906687542049618, - 4459171957618155, + 21888242871839275222246405745257275088548364400416034343698204064404448099487, + 21888242871839275222246405745257275088548364400416034343698203589663719111506, + 21888242871839275222246405745257275088548364400416034343698204142148134680043, 1040481877182947, - 3446804437872990, - 3839209457907046, - 3767967870423928, + 21888242871839275222246405745257275088548364400416034343698203129780614934878, + 21888242871839275222246405745257275088548364400416034343698203522185634968934, + 21888242871839275222246405745257275088548364400416034343698203450944047485816, 181553426647101, 1198952162325777, - 3416205742273673, - 4457704765452698, + 21888242871839275222246405745257275088548364400416034343698203099181919335561, + 21888242871839275222246405745257275088548364400416034343698204140680942514586, 2212203203657847, - 2458821164224800, - 3661080402356129, - 2659758785256646, + 21888242871839275222246405745257275088548364400416034343698202141797341286688, + 21888242871839275222246405745257275088548364400416034343698203344056579418017, + 21888242871839275222246405745257275088548364400416034343698202342734962318534, 320406215006686, - 4314457879786512, + 21888242871839275222246405745257275088548364400416034343698203997434056848400, 854147950140311, 865851552928357, - 2484399851401252, + 21888242871839275222246405745257275088548364400416034343698202167376028463140, 2172117306128089, 1285820793228211, - 2692683704562727, - 2404204949508637, + 21888242871839275222246405745257275088548364400416034343698202375659881624615, + 21888242871839275222246405745257275088548364400416034343698202087181126570525, 1967555565283320, 1980783707492627, - 3399023261578239, + 21888242871839275222246405745257275088548364400416034343698203081999438640127, 1289950939251781, - 3556639736186263, + 21888242871839275222246405745257275088548364400416034343698203239615913248151, 375113719096693, 2191878003588968, 1082571016291366, - 2855535578515678, - 2320786266519437, + 21888242871839275222246405745257275088548364400416034343698202538511755577566, + 21888242871839275222246405745257275088548364400416034343698202003762443581325, 1627246901266061, 1828085466243504, 441612376485571, - 4251456111098812, - 3825490370970763, - 3695310920237899, + 21888242871839275222246405745257275088548364400416034343698203934432288160700, + 21888242871839275222246405745257275088548364400416034343698203508466548032651, + 21888242871839275222246405745257275088548364400416034343698203378287097299787, 1505423872648187, - 2701299802231823, - 2762478356319913, + 21888242871839275222246405745257275088548364400416034343698202384275979293711, + 21888242871839275222246405745257275088548364400416034343698202445454533381801, 1215902277224396, - 2550268123549136, - 2288587074420628, + 21888242871839275222246405745257275088548364400416034343698202233244300611024, + 21888242871839275222246405745257275088548364400416034343698201971563251482516, 682193197453047, 257940553490735, 16302146020293, - 3497864460782393, - 3263923285181932, - 4423329827807394, + 21888242871839275222246405745257275088548364400416034343698203180840637844281, + 21888242871839275222246405745257275088548364400416034343698202946899462243820, + 21888242871839275222246405745257275088548364400416034343698204106306004869282, 1004627047404742, - 2714374893985735, - 2734545488856976, - 3839919711335289, - 3884217079470284, + 21888242871839275222246405745257275088548364400416034343698202397351071047623, + 21888242871839275222246405745257275088548364400416034343698202417521665918864, + 21888242871839275222246405745257275088548364400416034343698203522895888397177, + 21888242871839275222246405745257275088548364400416034343698203567193256532172, 1154997812093780, 1681366155563047, - 3582822168816298, - 3329762628402682, - 4056613686966044, - 2372345954583224, - 2906907956840178, - 3378947922804286, - 3960831437026160, + 21888242871839275222246405745257275088548364400416034343698203265798345878186, + 21888242871839275222246405745257275088548364400416034343698203012738805464570, + 21888242871839275222246405745257275088548364400416034343698203739589864027932, + 21888242871839275222246405745257275088548364400416034343698202055322131645112, + 21888242871839275222246405745257275088548364400416034343698202589884133902066, + 21888242871839275222246405745257275088548364400416034343698203061924099866174, + 21888242871839275222246405745257275088548364400416034343698203643807614088048, 276777607537908, - 2816515289020632, - 3208079916704007, - 4415755284761596, + 21888242871839275222246405745257275088548364400416034343698202499491466082520, + 21888242871839275222246405745257275088548364400416034343698202891056093765895, + 21888242871839275222246405745257275088548364400416034343698204098731461823484, 1295166591140463, 1954723538239814, 946944371848080, - 3699099417983293, - 4484712580472282, - 4448647694910091, - 3114377026499829, - 2573680597938319, + 21888242871839275222246405745257275088548364400416034343698203382075595045181, + 21888242871839275222246405745257275088548364400416034343698204167688757534170, + 21888242871839275222246405745257275088548364400416034343698204131623871971979, + 21888242871839275222246405745257275088548364400416034343698202797353203561717, + 21888242871839275222246405745257275088548364400416034343698202256656775000207, 1711674238428277, 500719855128474, - 4403587542308660, - 2884600699780262, - 3112252365548019, - 3834765393733377, - 3697822742368430, + 21888242871839275222246405745257275088548364400416034343698204086563719370548, + 21888242871839275222246405745257275088548364400416034343698202567576876842150, + 21888242871839275222246405745257275088548364400416034343698202795228542609907, + 21888242871839275222246405745257275088548364400416034343698203517741570795265, + 21888242871839275222246405745257275088548364400416034343698203380798919430318, 225183078852801, - 3272506531388355, - 3091175229184686, - 3821458261052170, + 21888242871839275222246405745257275088548364400416034343698202955482708450243, + 21888242871839275222246405745257275088548364400416034343698202774151406246574, + 21888242871839275222246405745257275088548364400416034343698203504434438114058, 498521515499699, - 2671562177611678, - 3029856030232566, + 21888242871839275222246405745257275088548364400416034343698202354538354673566, + 21888242871839275222246405745257275088548364400416034343698202712832207294454, 1728959074287763, - 2555716745802978, - 4002815453394760, - 3710112680967621, + 21888242871839275222246405745257275088548364400416034343698202238692922864866, + 21888242871839275222246405745257275088548364400416034343698203685791630456648, + 21888242871839275222246405745257275088548364400416034343698203393088858029509, 1825022068691809, - 3403878689396385, - 3067697496709689, - 4295193616411000, - 2909280050300993, - 4457537628065371, + 21888242871839275222246405745257275088548364400416034343698203086854866458273, + 21888242871839275222246405745257275088548364400416034343698202750673673771577, + 21888242871839275222246405745257275088548364400416034343698203978169793472888, + 21888242871839275222246405745257275088548364400416034343698202592256227362881, + 21888242871839275222246405745257275088548364400416034343698204140513805127259, 134966624688646, 873464471496914, 171451322186924, - 4074385126282430, + 21888242871839275222246405745257275088548364400416034343698203757361303344318, 2198706325855349, 1928216300968937, 241774826552999, - 3379121110833174, + 21888242871839275222246405745257275088548364400416034343698203062097287895062, 974044274782874, 1308073605435021, 1874071637243922, 1867527173414097, 2104504319664991, - 3221138965881926, - 3619690693075991, - 3835949658241190, - 3731330729965634, + 21888242871839275222246405745257275088548364400416034343698202904115142943814, + 21888242871839275222246405745257275088548364400416034343698203302666870137879, + 21888242871839275222246405745257275088548364400416034343698203518925835303078, + 21888242871839275222246405745257275088548364400416034343698203414306907027522, 1250344449099060, - 4401642455224138, + 21888242871839275222246405745257275088548364400416034343698204084618632286026, 1469720940185969, 2137199104359251, - 3932359646214070, - 3789543856260742, + 21888242871839275222246405745257275088548364400416034343698203615335823275958, + 21888242871839275222246405745257275088548364400416034343698203472520033322630, 1138651571009529, 1075207649052849, 263601113532156, 529383379636332, 2159547969409307, 1362311194385004, - 3633360933038927, + 21888242871839275222246405745257275088548364400416034343698203316337110100815, 151362537353756, 897774831595928, - 3463476140118103, - 3421717027000500, + 21888242871839275222246405745257275088548364400416034343698203146452317179991, + 21888242871839275222246405745257275088548364400416034343698203104693204062388, 1976877888460522, 1836775819872795, - 3043231718353387, - 2499059620511834, - 3962526833234280, + 21888242871839275222246405745257275088548364400416034343698202726207895415275, + 21888242871839275222246405745257275088548364400416034343698202182035797573722, + 21888242871839275222246405745257275088548364400416034343698203645503010296168, 776100992244075, 2112960575792085, 1518129949986200, - 2578771898646765, + 21888242871839275222246405745257275088548364400416034343698202261748075708653, 673063457282880, - 4195176596985952, - 3134924583005582, - 2837812679121787, + 21888242871839275222246405745257275088548364400416034343698203878152774047840, + 21888242871839275222246405745257275088548364400416034343698202817900760067470, + 21888242871839275222246405745257275088548364400416034343698202520788856183675, 754867559314447, - 3309732290552286, + 21888242871839275222246405745257275088548364400416034343698202992708467614174, 1082261853952230, 852094985855557, - 2641871506658862, - 4093206408454265, + 21888242871839275222246405745257275088548364400416034343698202324847683720750, + 21888242871839275222246405745257275088548364400416034343698203776182585516153, 2132047196022324, 2236370126305153, - 3119617593309119, + 21888242871839275222246405745257275088548364400416034343698202802593770371007, 485410635562266, 1769586989495574, 791370124286867, 749273726009437, 285422014357482, - 2578627386920033, + 21888242871839275222246405745257275088548364400416034343698202261603563981921, 951991423086109, 1450683123709941, - 2601185341092423, - 3325700773993586, + 21888242871839275222246405745257275088548364400416034343698202284161518154311, + 21888242871839275222246405745257275088548364400416034343698203008676951055474, 4913317475434, - 4146512834453713, + 21888242871839275222246405745257275088548364400416034343698203829489011515601, 1865866829192004, 1839700842015377, 2104404920213147, 926621503198203, 108183275992174, 52363447283551, - 4190452223627042, - 4248122836479297, - 4280983032963439, - 3942521655854789, + 21888242871839275222246405745257275088548364400416034343698203873428400688930, + 21888242871839275222246405745257275088548364400416034343698203931099013541185, + 21888242871839275222246405745257275088548364400416034343698203963959210025327, + 21888242871839275222246405745257275088548364400416034343698203625497832916677, 627352116605331, 1042100108157269, 473075717154097, - 2717085835083786, - 3181068261318627, + 21888242871839275222246405745257275088548364400416034343698202400062012145674, + 21888242871839275222246405745257275088548364400416034343698202864044438380515, 1060536869822302, 60032392206910, - 2408065296303080, - 3911950281612482, + 21888242871839275222246405745257275088548364400416034343698202091041473364968, + 21888242871839275222246405745257275088548364400416034343698203594926458674370, 1693965971575446, - 3904241787977967, + 21888242871839275222246405745257275088548364400416034343698203587217965039855, 831571512927616, 723580689728430, 239854899148180, - 4053087733399592, + 21888242871839275222246405745257275088548364400416034343698203736063910461480, 790232248921966, - 4343356040869437, + 21888242871839275222246405745257275088548364400416034343698204026332217931325, 1187715844119299, 1462055016390961, 1396169105370930, @@ -22755,180 +22755,180 @@ pub global CRP: [Polynomial; L] = [ 2039141166815472, 2016172555331076, 1075490882566469, - 4272638532407757, - 2354855861346985, - 3463995529841149, - 2524377436861367, + 21888242871839275222246405745257275088548364400416034343698203955614709469645, + 21888242871839275222246405745257275088548364400416034343698202037832038408873, + 21888242871839275222246405745257275088548364400416034343698203146971706903037, + 21888242871839275222246405745257275088548364400416034343698202207353613923255, 355756361177663, - 4391187813705374, + 21888242871839275222246405745257275088548364400416034343698204074163990767262, 581096070771712, 2052439625452306, 1264434050478915, - 2832391692928000, + 21888242871839275222246405745257275088548364400416034343698202515367869989888, 31791204633322, - 2595597645674355, - 3773881161900131, + 21888242871839275222246405745257275088548364400416034343698202278573822736243, + 21888242871839275222246405745257275088548364400416034343698203456857338962019, 1201322799231255, 1595899991898899, - 2477228889869770, - 2567462538473827, + 21888242871839275222246405745257275088548364400416034343698202160205066931658, + 21888242871839275222246405745257275088548364400416034343698202250438715535715, 2251500920280196, - 3697661349083621, + 21888242871839275222246405745257275088548364400416034343698203380637526145509, 158643556341616, - 3525166121194689, + 21888242871839275222246405745257275088548364400416034343698203208142298256577, 630202367362774, 540970534084845, - 2650260536473610, + 21888242871839275222246405745257275088548364400416034343698202333236713535498, 300255040996839, - 3729720245753711, + 21888242871839275222246405745257275088548364400416034343698203412696422815599, 1791770713225600, 1227920367601915, - 4458222043865530, + 21888242871839275222246405745257275088548364400416034343698204141198220927418, 1032005420097305, - 2262525380936880, + 21888242871839275222246405745257275088548364400416034343698201945501557998768, 1378750197723398, - 4006235800766958, - 4282407365257460, + 21888242871839275222246405745257275088548364400416034343698203689211977828846, + 21888242871839275222246405745257275088548364400416034343698203965383542319348, 384168810699249, 897549226307545, - 2964385325009538, + 21888242871839275222246405745257275088548364400416034343698202647361502071426, 1396559082824235, - 3287990593077943, + 21888242871839275222246405745257275088548364400416034343698202970966770139831, 1661786825870680, 2136630961515433, 1930925876788629, - 3509649577053229, + 21888242871839275222246405745257275088548364400416034343698203192625754115117, 1248495255363806, - 3510240134477735, + 21888242871839275222246405745257275088548364400416034343698203193216311539623, 1338872261821337, 1166122336656663, - 3889532293465511, + 21888242871839275222246405745257275088548364400416034343698203572508470527399, 746698123964615, - 2600319818744016, - 3225490430020749, - 3171195714663889, + 21888242871839275222246405745257275088548364400416034343698202283295995805904, + 21888242871839275222246405745257275088548364400416034343698202908466607082637, + 21888242871839275222246405745257275088548364400416034343698202854171891725777, 842211678943073, 652015663585552, - 4036297053605911, + 21888242871839275222246405745257275088548364400416034343698203719273230667799, 1631013603028057, - 2509113075886930, - 4148442832203000, - 4250739585833945, - 3305559875346195, - 3947903198559829, - 3138139564007104, - 3807921158734652, - 4045213992551695, - 4443433420025176, + 21888242871839275222246405745257275088548364400416034343698202192089252948818, + 21888242871839275222246405745257275088548364400416034343698203831419009264888, + 21888242871839275222246405745257275088548364400416034343698203933715762895833, + 21888242871839275222246405745257275088548364400416034343698202988536052408083, + 21888242871839275222246405745257275088548364400416034343698203630879375621717, + 21888242871839275222246405745257275088548364400416034343698202821115741068992, + 21888242871839275222246405745257275088548364400416034343698203490897335796540, + 21888242871839275222246405745257275088548364400416034343698203728190169613583, + 21888242871839275222246405745257275088548364400416034343698204126409597087064, 181659343140030, - 3838290295121576, + 21888242871839275222246405745257275088548364400416034343698203521266472183464, 5153175892213, - 3684782852549553, + 21888242871839275222246405745257275088548364400416034343698203367759029611441, 1548790520353297, - 4379699907465547, - 3998171367249272, - 3177303161513559, + 21888242871839275222246405745257275088548364400416034343698204062676084527435, + 21888242871839275222246405745257275088548364400416034343698203681147544311160, + 21888242871839275222246405745257275088548364400416034343698202860279338575447, 1426116698260007, - 4359796095198995, + 21888242871839275222246405745257275088548364400416034343698204042772272260883, 253269332571461, - 2569872063789195, - 4410491552924180, + 21888242871839275222246405745257275088548364400416034343698202252848240851083, + 21888242871839275222246405745257275088548364400416034343698204093467729986068, 2167698432451116, 702033920458012, 1291638123104533, - 3858409238937497, + 21888242871839275222246405745257275088548364400416034343698203541385415999385, 976037057152298, 700602038824232, 535476933591052, 1093761740237606, 1547072844066004, - 2588072724952255, - 2734397864199563, - 3163027882115474, - 3021117732976311, - 2841813199043560, + 21888242871839275222246405745257275088548364400416034343698202271048902014143, + 21888242871839275222246405745257275088548364400416034343698202417374041261451, + 21888242871839275222246405745257275088548364400416034343698202846004059177362, + 21888242871839275222246405745257275088548364400416034343698202704093910038199, + 21888242871839275222246405745257275088548364400416034343698202524789376105448, 1714725748469845, 2181482355800400, 1227966607127835, 1594312778812370, - 4305230230473978, - 2499420870464946, + 21888242871839275222246405745257275088548364400416034343698203988206407535866, + 21888242871839275222246405745257275088548364400416034343698202182397047526834, 1789428696592522, 1315419917706777, - 2765393065952471, + 21888242871839275222246405745257275088548364400416034343698202448369243014359, 728248650067458, 193284265769661, 1837283923783431, - 2646909695541634, - 4025518145006350, - 3204681369501375, + 21888242871839275222246405745257275088548364400416034343698202329885872603522, + 21888242871839275222246405745257275088548364400416034343698203708494322068238, + 21888242871839275222246405745257275088548364400416034343698202887657546563263, 1877736355015989, 1251665593446435, 1447022811005685, - 3324297988633694, + 21888242871839275222246405745257275088548364400416034343698203007274165695582, 491991631912788, 916290770213980, 1164022012580617, 2072587266903228, 368436471443013, - 2904062672845626, - 4430568026497091, - 2397924561435101, + 21888242871839275222246405745257275088548364400416034343698202587038849907514, + 21888242871839275222246405745257275088548364400416034343698204113544203558979, + 21888242871839275222246405745257275088548364400416034343698202080900738496989, 69894115394711, - 4375412800314127, - 4273293355877501, - 2656291060808118, + 21888242871839275222246405745257275088548364400416034343698204058388977376015, + 21888242871839275222246405745257275088548364400416034343698203956269532939389, + 21888242871839275222246405745257275088548364400416034343698202339267237870006, 384744944956475, 861988910199518, - 4140552161505801, - 4023144779716893, - 2747437716273990, + 21888242871839275222246405745257275088548364400416034343698203823528338567689, + 21888242871839275222246405745257275088548364400416034343698203706120956778781, + 21888242871839275222246405745257275088548364400416034343698202430413893335878, 1765432004702011, 2144891313079205, 20348761986212, 1008778591168150, - 2836718670605164, - 3657003656788832, + 21888242871839275222246405745257275088548364400416034343698202519694847667052, + 21888242871839275222246405745257275088548364400416034343698203339979833850720, 1254023849310903, - 3479066430062857, + 21888242871839275222246405745257275088548364400416034343698203162042607124745, 1826424086712935, - 2760734210063700, - 2885704812775218, - 2555981892999117, - 3156728773710626, - 4219580052703278, + 21888242871839275222246405745257275088548364400416034343698202443710387125588, + 21888242871839275222246405745257275088548364400416034343698202568680989837106, + 21888242871839275222246405745257275088548364400416034343698202238958070061005, + 21888242871839275222246405745257275088548364400416034343698202839704950772514, + 21888242871839275222246405745257275088548364400416034343698203902556229765166, 231981982700964, 1410965157202569, - 4452510979677018, + 21888242871839275222246405745257275088548364400416034343698204135487156738906, 673158912822462, 734344715628564, 944928241641866, 664577905759514, - 4369134033473093, - 3309697282684117, - 2705462946015821, - 2314470342241084, - 4363856120217945, + 21888242871839275222246405745257275088548364400416034343698204052110210534981, + 21888242871839275222246405745257275088548364400416034343698202992673459746005, + 21888242871839275222246405745257275088548364400416034343698202388439123077709, + 21888242871839275222246405745257275088548364400416034343698201997446519302972, + 21888242871839275222246405745257275088548364400416034343698204046832297279833, 1953871103046047, 478053161012197, 1834566655431150, - 3829382848783150, - 4145120662087189, + 21888242871839275222246405745257275088548364400416034343698203512359025845038, + 21888242871839275222246405745257275088548364400416034343698203828096839149077, 1029970116757346, - 3698513340994864, - 4158540906021169, - 2845619140322743, - 3377605898802118, - 3278794240258429, + 21888242871839275222246405745257275088548364400416034343698203381489518056752, + 21888242871839275222246405745257275088548364400416034343698203841517083083057, + 21888242871839275222246405745257275088548364400416034343698202528595317384631, + 21888242871839275222246405745257275088548364400416034343698203060582075864006, + 21888242871839275222246405745257275088548364400416034343698202961770417320317, 921375043556656, 1879109638253035, - 4385630118310033, + 21888242871839275222246405745257275088548364400416034343698204068606295371921, 2014774572673878, 1090707290042204, 1796045827483125, 498630137284485, - 3146277612751734, - 3620517456607980, + 21888242871839275222246405745257275088548364400416034343698202829253789813622, + 21888242871839275222246405745257275088548364400416034343698203303493633669868, 1891277811698773, 202246328607973, 988338881249926, @@ -22936,64 +22936,64 @@ pub global CRP: [Polynomial; L] = [ 515842036350996, 1006489926756701, 500197294319400, - 2599526682214282, + 21888242871839275222246405745257275088548364400416034343698202282502859276170, 900461725508332, - 4494721997192736, + 21888242871839275222246405745257275088548364400416034343698204177698174254624, 74673761905785, 1321245801944061, 254871424004981, - 3988591462265451, + 21888242871839275222246405745257275088548364400416034343698203671567639327339, 1237284336517004, 844997007026833, - 2672420384759784, - 3256788866713322, + 21888242871839275222246405745257275088548364400416034343698202355396561821672, + 21888242871839275222246405745257275088548364400416034343698202939765043775210, 1596708748417383, 698235821787122, - 2656068422938068, - 4501437174869826, + 21888242871839275222246405745257275088548364400416034343698202339044599999956, + 21888242871839275222246405745257275088548364400416034343698204184413351931714, 710676869108354, 220608913130104, - 4035409330619639, + 21888242871839275222246405745257275088548364400416034343698203718385507681527, 823107546245105, 813351128447956, 542965048598444, - 2256681540326677, - 4479066512140027, + 21888242871839275222246405745257275088548364400416034343698201939657717388565, + 21888242871839275222246405745257275088548364400416034343698204162042689201915, 1488885585884949, - 3491811058747668, + 21888242871839275222246405745257275088548364400416034343698203174787235809556, 2012152523218104, - 2301980915677508, - 3939184110405624, - 2284773486371554, + 21888242871839275222246405745257275088548364400416034343698201984957092739396, + 21888242871839275222246405745257275088548364400416034343698203622160287467512, + 21888242871839275222246405745257275088548364400416034343698201967749663433442, 205519033666713, 730943091075701, 1499064736291924, 35788310786018, - 2486526533836796, + 21888242871839275222246405745257275088548364400416034343698202169502710898684, 1441732355651720, 1178597027266804, 1772154630723208, 108983156879924, 1844289431859315, 1885094005420639, - 3721358596046602, + 21888242871839275222246405745257275088548364400416034343698203404334773108490, 2187391403210609, - 2278640680218295, + 21888242871839275222246405745257275088548364400416034343698201961616857280183, 2172410372153066, 1827846923152765, - 4354829570846830, + 21888242871839275222246405745257275088548364400416034343698204037805747908718, 268089985608371, 537386614948851, 232504595932018, - 2988526915787025, + 21888242871839275222246405745257275088548364400416034343698202671503092848913, 716452692458823, 721571001790665, 1418730527997858, - 3603507878190509, - 2518015680682418, - 4494844875400467, - 2708626472201503, - 2903652522401510, + 21888242871839275222246405745257275088548364400416034343698203286484055252397, + 21888242871839275222246405745257275088548364400416034343698202200991857744306, + 21888242871839275222246405745257275088548364400416034343698204177821052462355, + 21888242871839275222246405745257275088548364400416034343698202391602649263391, + 21888242871839275222246405745257275088548364400416034343698202586628699463398, 846803451048166, 2159859746072181, 988543098168073, @@ -23002,50 +23002,50 @@ pub global CRP: [Polynomial; L] = [ 581139667974659, 237312596519765, 1920045703294371, - 4391132716943284, - 3469942315623241, - 4163077631041344, - 2551026946255000, - 3324311955352838, + 21888242871839275222246405745257275088548364400416034343698204074108894005172, + 21888242871839275222246405745257275088548364400416034343698203152918492685129, + 21888242871839275222246405745257275088548364400416034343698203846053808103232, + 21888242871839275222246405745257275088548364400416034343698202234003123316888, + 21888242871839275222246405745257275088548364400416034343698203007288132414726, 519519259139994, 2157209778080280, 179785990374100, 192317019365348, 937011374333484, 755823760524409, - 4236721838164580, - 3144252817584455, + 21888242871839275222246405745257275088548364400416034343698203919698015226468, + 21888242871839275222246405745257275088548364400416034343698202827228994646343, 1092264457104387, 1885337310202038, - 3863348989384210, + 21888242871839275222246405745257275088548364400416034343698203546325166446098, 892072845473655, 877747923407953, - 3581361906819878, + 21888242871839275222246405745257275088548364400416034343698203264338083881766, 1722306479354291, 959305921357749, - 3115467038886048, - 3868043601127964, + 21888242871839275222246405745257275088548364400416034343698202798443215947936, + 21888242871839275222246405745257275088548364400416034343698203551019778189852, 740706930695389, - 3579647728474645, - 3010781685214212, + 21888242871839275222246405745257275088548364400416034343698203262623905536533, + 21888242871839275222246405745257275088548364400416034343698202693757862276100, 1952650599027923, - 4380381774844676, - 3622689716216415, + 21888242871839275222246405745257275088548364400416034343698204063357951906564, + 21888242871839275222246405745257275088548364400416034343698203305665893278303, 1208824757382569, 99387274964983, 464292148172763, - 2671944060868146, - 2647786885790107, + 21888242871839275222246405745257275088548364400416034343698202354920237930034, + 21888242871839275222246405745257275088548364400416034343698202330763062851995, 885746237289738, 1531039389586780, - 3109352618686708, + 21888242871839275222246405745257275088548364400416034343698202792328795748596, 1380843849962121, 2022201218467432, - 2668958112189568, - 3483508470315333, - 2616621253835199, - 4088249117167820, - 2444689238400764, + 21888242871839275222246405745257275088548364400416034343698202351934289251456, + 21888242871839275222246405745257275088548364400416034343698203166484647377221, + 21888242871839275222246405745257275088548364400416034343698202299597430897087, + 21888242871839275222246405745257275088548364400416034343698203771225294229708, + 21888242871839275222246405745257275088548364400416034343698202127665415462652, 339560682876735, 1243953618735403, 748957229444048, @@ -23053,23 +23053,23 @@ pub global CRP: [Polynomial; L] = [ 890683642371964, 2123934264029173, 1699278006868288, - 2969522314806096, - 3552891381571953, + 21888242871839275222246405745257275088548364400416034343698202652498491867984, + 21888242871839275222246405745257275088548364400416034343698203235867558633841, 143099368611402, 1537328981631582, - 3410975093959016, + 21888242871839275222246405745257275088548364400416034343698203093951271020904, 271463743675027, 2207456999747035, 1810726810553822, - 2549106753241550, - 2503326171160713, - 4433171383728512, + 21888242871839275222246405745257275088548364400416034343698202232082930303438, + 21888242871839275222246405745257275088548364400416034343698202186302348222601, + 21888242871839275222246405745257275088548364400416034343698204116147560790400, 285844218610281, 1028784451587060, - 3426958012910890, + 21888242871839275222246405745257275088548364400416034343698203109934189972778, 15938083590326, - 2918789252292674, - 2407757575505283, + 21888242871839275222246405745257275088548364400416034343698202601765429354562, + 21888242871839275222246405745257275088548364400416034343698202090733752567171, 1499308920724278, 325827570931386, 2039237023463718, @@ -23078,544 +23078,544 @@ pub global CRP: [Polynomial; L] = [ 1628160497962087, 672238812313422, 1064645312341136, - 2617106672346567, - 4343297893585912, - 3594311711739586, + 21888242871839275222246405745257275088548364400416034343698202300082849408455, + 21888242871839275222246405745257275088548364400416034343698204026274070647800, + 21888242871839275222246405745257275088548364400416034343698203277287888801474, 2030843054580133, - 2473911380401487, + 21888242871839275222246405745257275088548364400416034343698202156887557463375, 1226487165562487, - 3775522491457997, - 4271896189580046, - 3144433238958936, - 3630294448766330, + 21888242871839275222246405745257275088548364400416034343698203458498668519885, + 21888242871839275222246405745257275088548364400416034343698203954872366641934, + 21888242871839275222246405745257275088548364400416034343698202827409416020824, + 21888242871839275222246405745257275088548364400416034343698203313270625828218, 972300623794432, 1010035674028984, 1729080795298526, - 4351403234818823, - 2292503810666366, - 3391820157555155, + 21888242871839275222246405745257275088548364400416034343698204034379411880711, + 21888242871839275222246405745257275088548364400416034343698201975479987728254, + 21888242871839275222246405745257275088548364400416034343698203074796334617043, 697320560038555, - 3934402412880726, - 2864950922508991, + 21888242871839275222246405745257275088548364400416034343698203617378589942614, + 21888242871839275222246405745257275088548364400416034343698202547927099570879, 40256176711883, 1286679321551069, 628354970920231, 436431751057012, - 2347137813472027, - 4149439134456094, + 21888242871839275222246405745257275088548364400416034343698202030113990533915, + 21888242871839275222246405745257275088548364400416034343698203832415311517982, 1109191105774078, 1387478282165119, 30883514563484, 803436361160899, - 2373013871500448, - 3547737768661417, + 21888242871839275222246405745257275088548364400416034343698202055990048562336, + 21888242871839275222246405745257275088548364400416034343698203230713945723305, 1181788843781056, - 2654856901192822, + 21888242871839275222246405745257275088548364400416034343698202337833078254710, 1159754571534318, 66407986317362, 1962619877060827, 643209398959522, - 2390136997586758, - 3987425557976073, - 4411563108914737, + 21888242871839275222246405745257275088548364400416034343698202073113174648646, + 21888242871839275222246405745257275088548364400416034343698203670401735037961, + 21888242871839275222246405745257275088548364400416034343698204094539285976625, 1842397872256361, - 4341854658467250, - 3988800757996488, - 3906918527511899, + 21888242871839275222246405745257275088548364400416034343698204024830835529138, + 21888242871839275222246405745257275088548364400416034343698203671776935058376, + 21888242871839275222246405745257275088548364400416034343698203589894704573787, 901373200627198, 1688552377463139, 1048063450999228, 1533541803484287, 1082257504200337, - 4158234905290292, - 4459837721603097, - 2329493177340980, - 3443832052486069, + 21888242871839275222246405745257275088548364400416034343698203841211082352180, + 21888242871839275222246405745257275088548364400416034343698204142813898664985, + 21888242871839275222246405745257275088548364400416034343698202012469354402868, + 21888242871839275222246405745257275088548364400416034343698203126808229547957, 2232637736812981, 247419437474131, 760018064880790, - 3530040364996792, - 2912680872133407, + 21888242871839275222246405745257275088548364400416034343698203213016542058680, + 21888242871839275222246405745257275088548364400416034343698202595657049195295, 434242201453324, 1813565343513976, - 2389855566783407, + 21888242871839275222246405745257275088548364400416034343698202072831743845295, 881697265249479, - 3997498643751596, - 3476975440403378, - 3464234476707884, + 21888242871839275222246405745257275088548364400416034343698203680474820813484, + 21888242871839275222246405745257275088548364400416034343698203159951617465266, + 21888242871839275222246405745257275088548364400416034343698203147210653769772, 1801528864455535, - 3577585195869260, + 21888242871839275222246405745257275088548364400416034343698203260561372931148, 561342756717919, 962125163652359, 169941421391963, - 4372730025809927, + 21888242871839275222246405745257275088548364400416034343698204055706202871815, 1026802134267918, - 2583029476273456, - 2465690236911880, - 2347530633212138, - 3246991011168381, - 2275283782935376, + 21888242871839275222246405745257275088548364400416034343698202266005653335344, + 21888242871839275222246405745257275088548364400416034343698202148666413973768, + 21888242871839275222246405745257275088548364400416034343698202030506810274026, + 21888242871839275222246405745257275088548364400416034343698202929967188230269, + 21888242871839275222246405745257275088548364400416034343698201958259959997264, 1935408082891266, - 2382105907753941, - 3038620284815517, - 2892333130232060, - 2955774234872394, - 4220947432043323, + 21888242871839275222246405745257275088548364400416034343698202065082084815829, + 21888242871839275222246405745257275088548364400416034343698202721596461877405, + 21888242871839275222246405745257275088548364400416034343698202575309307293948, + 21888242871839275222246405745257275088548364400416034343698202638750411934282, + 21888242871839275222246405745257275088548364400416034343698203903923609105211, 1046860746580177, 1831206774151809, - 4206661596772208, + 21888242871839275222246405745257275088548364400416034343698203889637773834096, 758959273985598, 225080421669642, 1477735476551399, 694996034088403, 489007627491790, - 2797099006509865, - 3189811520787631, - 2684830459977453, - 3946299379687614, - 3902540164546801, - 4467983782894142, - 2341329903613824, - 4291714478851238, - 4061705736948576, - 2908407398708063, + 21888242871839275222246405745257275088548364400416034343698202480075183571753, + 21888242871839275222246405745257275088548364400416034343698202872787697849519, + 21888242871839275222246405745257275088548364400416034343698202367806637039341, + 21888242871839275222246405745257275088548364400416034343698203629275556749502, + 21888242871839275222246405745257275088548364400416034343698203585516341608689, + 21888242871839275222246405745257275088548364400416034343698204150959959956030, + 21888242871839275222246405745257275088548364400416034343698202024306080675712, + 21888242871839275222246405745257275088548364400416034343698203974690655913126, + 21888242871839275222246405745257275088548364400416034343698203744681914010464, + 21888242871839275222246405745257275088548364400416034343698202591383575769951, 510327838233799, 629249124306381, - 4052622924112781, - 4437217323753675, + 21888242871839275222246405745257275088548364400416034343698203735599101174669, + 21888242871839275222246405745257275088548364400416034343698204120193500815563, 854216252259653, 1907314151043134, - 3707256561690057, + 21888242871839275222246405745257275088548364400416034343698203390232738751945, 819306010631739, - 4291950506627953, - 3911250373295558, - 4438138944913061, - 2910155916514297, + 21888242871839275222246405745257275088548364400416034343698203974926683689841, + 21888242871839275222246405745257275088548364400416034343698203594226550357446, + 21888242871839275222246405745257275088548364400416034343698204121115121974949, + 21888242871839275222246405745257275088548364400416034343698202593132093576185, 1381202694358717, 1848519055151291, 1115075497320865, - 4316066213036599, - 3711035077867055, - 2974015865651566, + 21888242871839275222246405745257275088548364400416034343698203999042390098487, + 21888242871839275222246405745257275088548364400416034343698203394011254928943, + 21888242871839275222246405745257275088548364400416034343698202656992042713454, 73389773800014, 1226273896629066, - 4192862511438568, - 2441497883940314, + 21888242871839275222246405745257275088548364400416034343698203875838688500456, + 21888242871839275222246405745257275088548364400416034343698202124474061002202, 1939714059125065, 1136381495525798, - 4282472536782070, - 3622711300309587, + 21888242871839275222246405745257275088548364400416034343698203965448713843958, + 21888242871839275222246405745257275088548364400416034343698203305687477371475, 1271436604674765, 1921909654941878, - 4452215802610993, - 2464659102095065, + 21888242871839275222246405745257275088548364400416034343698204135191979672881, + 21888242871839275222246405745257275088548364400416034343698202147635279156953, 578689738184263, 1734036873695976, - 3966359358371541, + 21888242871839275222246405745257275088548364400416034343698203649335535433429, 851769471167696, - 4377028835811026, + 21888242871839275222246405745257275088548364400416034343698204060005012872914, 868872258248654, 283129148125101, - 4481666112541741, + 21888242871839275222246405745257275088548364400416034343698204164642289603629, 1203930798693319, - 2289815486972646, + 21888242871839275222246405745257275088548364400416034343698201972791664034534, 207299223457869, - 4496257178370393, - 3360455497018680, + 21888242871839275222246405745257275088548364400416034343698204179233355432281, + 21888242871839275222246405745257275088548364400416034343698203043431674080568, 1187166110944990, - 2682824805545125, + 21888242871839275222246405745257275088548364400416034343698202365800982607013, 564459499315435, - 3561842632578676, + 21888242871839275222246405745257275088548364400416034343698203244818809640564, 1118872114617502, - 3285299169986076, - 3393945590804379, + 21888242871839275222246405745257275088548364400416034343698202968275347047964, + 21888242871839275222246405745257275088548364400416034343698203076921767866267, 878764627807834, - 2975728776972178, + 21888242871839275222246405745257275088548364400416034343698202658704954034066, 70261361332881, - 2468108676674108, + 21888242871839275222246405745257275088548364400416034343698202151084853735996, 420872477306478, 1024796185195979, 1112968598898949, - 3122775211002926, + 21888242871839275222246405745257275088548364400416034343698202805751388064814, 2080916869335384, - 3744298523008784, - 3407440211259036, - 2316191602693869, + 21888242871839275222246405745257275088548364400416034343698203427274700070672, + 21888242871839275222246405745257275088548364400416034343698203090416388320924, + 21888242871839275222246405745257275088548364400416034343698201999167779755757, 1887369620112546, - 2446934502819040, - 4163832390133841, + 21888242871839275222246405745257275088548364400416034343698202129910679880928, + 21888242871839275222246405745257275088548364400416034343698203846808567195729, 1719553442488113, - 4038631711191925, + 21888242871839275222246405745257275088548364400416034343698203721607888253813, 1513034364723061, 705879250619821, 1369415466180547, 1585335861735923, 1354761125195357, - 2383426353100466, + 21888242871839275222246405745257275088548364400416034343698202066402530162354, 1861342075205136, 757275425218711, 373344001977925, 1433199810126729, - 4198756045515642, - 2648937272834555, - 3166057501556369, - 3417206092937628, - 4141483324423890, + 21888242871839275222246405745257275088548364400416034343698203881732222577530, + 21888242871839275222246405745257275088548364400416034343698202331913449896443, + 21888242871839275222246405745257275088548364400416034343698202849033678618257, + 21888242871839275222246405745257275088548364400416034343698203100182269999516, + 21888242871839275222246405745257275088548364400416034343698203824459501485778, 868337630426575, - 3220269114713080, - 3242181813586058, + 21888242871839275222246405745257275088548364400416034343698202903245291774968, + 21888242871839275222246405745257275088548364400416034343698202925157990647946, 1662845139907622, - 3439017702005489, + 21888242871839275222246405745257275088548364400416034343698203121993879067377, 1001692138524712, - 4404174224930270, + 21888242871839275222246405745257275088548364400416034343698204087150401992158, 2184908790822355, 1185429996786530, 1939337582870111, 472706003354053, - 3467871760288002, - 2679004685992183, + 21888242871839275222246405745257275088548364400416034343698203150847937349890, + 21888242871839275222246405745257275088548364400416034343698202361980863054071, 324516207356613, - 4290041508999597, + 21888242871839275222246405745257275088548364400416034343698203973017686061485, 1616726745234631, 1464673549679929, - 3387028962988243, + 21888242871839275222246405745257275088548364400416034343698203070005140050131, 986904077656467, - 3231760638734530, + 21888242871839275222246405745257275088548364400416034343698202914736815796418, 1120755995934050, 591487460016053, - 3778411720375562, - 3377274435414646, + 21888242871839275222246405745257275088548364400416034343698203461387897437450, + 21888242871839275222246405745257275088548364400416034343698203060250612476534, 1000366005027784, 470488105540089, 2245961250882316, - 3032696812445156, - 3563647770243798, - 3657773644883559, - 3590574205826689, - 2592060780734635, + 21888242871839275222246405745257275088548364400416034343698202715672989507044, + 21888242871839275222246405745257275088548364400416034343698203246623947305686, + 21888242871839275222246405745257275088548364400416034343698203340749821945447, + 21888242871839275222246405745257275088548364400416034343698203273550382888577, + 21888242871839275222246405745257275088548364400416034343698202275036957796523, 1508575480842031, 899279451708800, - 3532347126767176, - 4099475628023647, + 21888242871839275222246405745257275088548364400416034343698203215323303829064, + 21888242871839275222246405745257275088548364400416034343698203782451805085535, 235073108113031, 1736693103331107, - 3141341612563719, + 21888242871839275222246405745257275088548364400416034343698202824317789625607, 549233401358127, 432332565165596, 514898055942271, 677376819590651, - 4336381230797930, + 21888242871839275222246405745257275088548364400416034343698204019357407859818, 1720377809860829, - 3710044174946657, + 21888242871839275222246405745257275088548364400416034343698203393020352008545, 822088491908997, 1764635549834107, 75981879353960, 2030506684538155, 192531749593756, 436807819782877, - 3360498467977500, + 21888242871839275222246405745257275088548364400416034343698203043474645039388, 2215039111534852, - 3114658765594043, + 21888242871839275222246405745257275088548364400416034343698202797634942655931, 115829676271821, 1716125243970245, 1712441151512034, 1540681754679016, - 2446089930652234, + 21888242871839275222246405745257275088548364400416034343698202129066107714122, 1470819911251096, - 4131237848149473, + 21888242871839275222246405745257275088548364400416034343698203814214025211361, 2127955974549204, - 4327159830367113, - 2835255898231238, + 21888242871839275222246405745257275088548364400416034343698204010136007429001, + 21888242871839275222246405745257275088548364400416034343698202518232075293126, 2090521140617680, - 4268808037420962, - 4212684675796670, - 3835580746010465, - 2284038818023716, + 21888242871839275222246405745257275088548364400416034343698203951784214482850, + 21888242871839275222246405745257275088548364400416034343698203895660852858558, + 21888242871839275222246405745257275088548364400416034343698203518556923072353, + 21888242871839275222246405745257275088548364400416034343698201967014995085604, 1935718054577677, 658831426980456, 1743787585568820, - 3830321861643684, - 3288078122937886, + 21888242871839275222246405745257275088548364400416034343698203513298038705572, + 21888242871839275222246405745257275088548364400416034343698202971054299999774, 1536650194262752, 1400510736671356, 53674691776341, 2085832632835870, - 3683365119249375, - 4319616800853679, + 21888242871839275222246405745257275088548364400416034343698203366341296311263, + 21888242871839275222246405745257275088548364400416034343698204002592977915567, 325838161899103, 2081193210457273, - 2615413396464428, + 21888242871839275222246405745257275088548364400416034343698202298389573526316, 1167280958612257, - 3559142152924802, + 21888242871839275222246405745257275088548364400416034343698203242118329986690, 489725719630317, 325498106276105, 1207700949559975, 111398334200969, - 2342714518463278, + 21888242871839275222246405745257275088548364400416034343698202025690695525166, 1731876874268205, 1704855242485425, 2199702769859972, 211822862797868, - 4176170876540131, - 2508387967787961, - 3659892728651467, - 4235513475097808, - 4406515346997426, + 21888242871839275222246405745257275088548364400416034343698203859147053602019, + 21888242871839275222246405745257275088548364400416034343698202191364144849849, + 21888242871839275222246405745257275088548364400416034343698203342868905713355, + 21888242871839275222246405745257275088548364400416034343698203918489652159696, + 21888242871839275222246405745257275088548364400416034343698204089491524059314, 1567222423037075, - 2629702671194965, - 2922769598301071, - 3328273377081895, + 21888242871839275222246405745257275088548364400416034343698202312678848256853, + 21888242871839275222246405745257275088548364400416034343698202605745775362959, + 21888242871839275222246405745257275088548364400416034343698203011249554143783, 285553450837386, - 2557631555007839, - 2517410221964191, - 4068068349926413, + 21888242871839275222246405745257275088548364400416034343698202240607732069727, + 21888242871839275222246405745257275088548364400416034343698202200386399026079, + 21888242871839275222246405745257275088548364400416034343698203751044526988301, 1335250428732568, - 2678591639093673, - 3831497496058076, + 21888242871839275222246405745257275088548364400416034343698202361567816155561, + 21888242871839275222246405745257275088548364400416034343698203514473673119964, 1277146721493183, 1647605665453769, - 4235557862929116, - 3022677588103581, + 21888242871839275222246405745257275088548364400416034343698203918534039991004, + 21888242871839275222246405745257275088548364400416034343698202705653765165469, 1085969767573696, - 3548041571341669, - 3857634757177957, - 4314035573541484, + 21888242871839275222246405745257275088548364400416034343698203231017748403557, + 21888242871839275222246405745257275088548364400416034343698203540610934239845, + 21888242871839275222246405745257275088548364400416034343698203997011750603372, 1973056934804837, 1632498318679766, - 2638684226737652, - 3016299679380249, + 21888242871839275222246405745257275088548364400416034343698202321660403799540, + 21888242871839275222246405745257275088548364400416034343698202699275856442137, 2206596474454654, 632295525094423, 1335280439453417, - 3533432140941638, + 21888242871839275222246405745257275088548364400416034343698203216408318003526, 1365210361917758, - 4262495799389241, - 3085361680304121, - 3508334744066452, - 4084963336729647, + 21888242871839275222246405745257275088548364400416034343698203945471976451129, + 21888242871839275222246405745257275088548364400416034343698202768337857366009, + 21888242871839275222246405745257275088548364400416034343698203191310921128340, + 21888242871839275222246405745257275088548364400416034343698203767939513791535, 679172432035397, 753338298426501, 1709189845173887, 2145146686065773, 1932705217066893, 155517449199363, - 3198972197605314, + 21888242871839275222246405745257275088548364400416034343698202881948374667202, 967970537309685, 603729368586173, 1457471720782833, 1277134182089219, - 3286769673389322, + 21888242871839275222246405745257275088548364400416034343698202969745850451210, 2055187930159325, - 2475072343148241, - 4197047069289130, + 21888242871839275222246405745257275088548364400416034343698202158048520210129, + 21888242871839275222246405745257275088548364400416034343698203880023246351018, 149972985148652, - 3234001263135139, + 21888242871839275222246405745257275088548364400416034343698202916977440197027, 840625976342611, 385922305970683, - 4009874424355133, + 21888242871839275222246405745257275088548364400416034343698203692850601417021, 1779690660298435, - 2428627594309338, + 21888242871839275222246405745257275088548364400416034343698202111603771371226, 1964550809249112, 1955025789076264, 2047254404521651, 1636228033140598, 1276466859445373, 1676359039341935, - 3865699654396886, + 21888242871839275222246405745257275088548364400416034343698203548675831458774, 1833280461620919, 104351193952767, 1255600854312754, 1733656171626963, - 4233422870598209, + 21888242871839275222246405745257275088548364400416034343698203916399047660097, 1785659779089029, 107229143576701, - 3332123133115302, - 3298827579124192, - 3921654115573649, - 3173652449692348, + 21888242871839275222246405745257275088548364400416034343698203015099310177190, + 21888242871839275222246405745257275088548364400416034343698202981803756186080, + 21888242871839275222246405745257275088548364400416034343698203604630292635537, + 21888242871839275222246405745257275088548364400416034343698202856628626754236, 551299940045923, - 3923184999329381, + 21888242871839275222246405745257275088548364400416034343698203606161176391269, 1903365026948254, - 3046873835758512, + 21888242871839275222246405745257275088548364400416034343698202729850012820400, 126478043972538, - 3333536566344102, + 21888242871839275222246405745257275088548364400416034343698203016512743405990, 1020866332230228, - 3312083962044797, + 21888242871839275222246405745257275088548364400416034343698202995060139106685, 122270370091419, 1021842297367312, - 4107467619655968, + 21888242871839275222246405745257275088548364400416034343698203790443796717856, 1720078035982878, 1682480384659570, - 3523311808965744, - 4269528080161675, - 3121815936875327, - 3495058101122051, + 21888242871839275222246405745257275088548364400416034343698203206287986027632, + 21888242871839275222246405745257275088548364400416034343698203952504257223563, + 21888242871839275222246405745257275088548364400416034343698202804792113937215, + 21888242871839275222246405745257275088548364400416034343698203178034278183939, 1323645322340681, 2126716447829796, - 3085805050938422, - 3469464250381555, - 4453613389567556, + 21888242871839275222246405745257275088548364400416034343698202768781228000310, + 21888242871839275222246405745257275088548364400416034343698203152440427443443, + 21888242871839275222246405745257275088548364400416034343698204136589566629444, 1282994197226501, - 2632850887439836, + 21888242871839275222246405745257275088548364400416034343698202315827064501724, 2120859861808052, - 3229590711364830, + 21888242871839275222246405745257275088548364400416034343698202912566888426718, 1448449668367952, 685387201506710, 470886170620773, - 3523536561659430, + 21888242871839275222246405745257275088548364400416034343698203206512738721318, 2198563100430922, - 3404804161875814, - 2697341330500270, + 21888242871839275222246405745257275088548364400416034343698203087780338937702, + 21888242871839275222246405745257275088548364400416034343698202380317507562158, 1482957221754967, 1357566249436883, - 3466147099436127, - 2427593315374514, + 21888242871839275222246405745257275088548364400416034343698203149123276498015, + 21888242871839275222246405745257275088548364400416034343698202110569492436402, 2080732145767095, 1951807403478175, 2961161258815, - 3623985135284534, + 21888242871839275222246405745257275088548364400416034343698203306961312346422, 926148742719842, 278365300590587, - 2633599769485122, + 21888242871839275222246405745257275088548364400416034343698202316575946547010, 855485319777568, - 3433165004600948, - 3642534345569743, + 21888242871839275222246405745257275088548364400416034343698203116141181662836, + 21888242871839275222246405745257275088548364400416034343698203325510522631631, 1758439869714871, - 3660298958735351, + 21888242871839275222246405745257275088548364400416034343698203343275135797239, 1298423040966609, - 4481394314755999, - 3811703657596951, - 4046589507411300, + 21888242871839275222246405745257275088548364400416034343698204164370491817887, + 21888242871839275222246405745257275088548364400416034343698203494679834658839, + 21888242871839275222246405745257275088548364400416034343698203729565684473188, 1620345326939618, - 3869139258071653, + 21888242871839275222246405745257275088548364400416034343698203552115435133541, 1445505304629048, 1616782191084685, 477550793987067, - 3997859494924590, - 2336331953377162, - 3073170951760357, + 21888242871839275222246405745257275088548364400416034343698203680835671986478, + 21888242871839275222246405745257275088548364400416034343698202019308130439050, + 21888242871839275222246405745257275088548364400416034343698202756147128822245, 202097077224546, - 3509259544010840, - 2645089075183644, + 21888242871839275222246405745257275088548364400416034343698203192235721072728, + 21888242871839275222246405745257275088548364400416034343698202328065252245532, 631910384311653, 807817178762666, - 3197132807577682, + 21888242871839275222246405745257275088548364400416034343698202880108984639570, 933541727004396, 247045905451441, - 3868881626842145, + 21888242871839275222246405745257275088548364400416034343698203551857803904033, 543194027995863, - 2514247844716071, - 3868882084069232, + 21888242871839275222246405745257275088548364400416034343698202197224021777959, + 21888242871839275222246405745257275088548364400416034343698203551858261131120, 1083752937710818, - 4431594790550245, + 21888242871839275222246405745257275088548364400416034343698204114570967612133, 1840777701659147, 1511917081328166, 2040745338382037, 1839220253103265, - 4275938066072589, - 4207533451372717, - 2903127207197945, + 21888242871839275222246405745257275088548364400416034343698203958914243134477, + 21888242871839275222246405745257275088548364400416034343698203890509628434605, + 21888242871839275222246405745257275088548364400416034343698202586103384259833, 1523057242552348, 1527075527143024, 1024153545344996, - 2594886396117314, - 3787565675766481, - 3001316321000225, + 21888242871839275222246405745257275088548364400416034343698202277862573179202, + 21888242871839275222246405745257275088548364400416034343698203470541852828369, + 21888242871839275222246405745257275088548364400416034343698202684292498062113, 2060983053872002, 83670592046657, - 2977191164040091, - 4072140917056723, + 21888242871839275222246405745257275088548364400416034343698202660167341101979, + 21888242871839275222246405745257275088548364400416034343698203755117094118611, 718875932600140, 183397832954730, - 4347672402666558, - 2837955923961752, - 3814263823465408, + 21888242871839275222246405745257275088548364400416034343698204030648579728446, + 21888242871839275222246405745257275088548364400416034343698202520932101023640, + 21888242871839275222246405745257275088548364400416034343698203497240000527296, 191299680896024, 2210205166400847, - 3929303295771965, + 21888242871839275222246405745257275088548364400416034343698203612279472833853, 1243564321752173, 1989795963470756, 658688818204793, 533324493448157, - 3214011385926722, - 3655459004865455, - 2529250443990330, - 4437884859116092, + 21888242871839275222246405745257275088548364400416034343698202896987562988610, + 21888242871839275222246405745257275088548364400416034343698203338435181927343, + 21888242871839275222246405745257275088548364400416034343698202212226621052218, + 21888242871839275222246405745257275088548364400416034343698204120861036177980, 1418768162456874, - 2471430280825783, + 21888242871839275222246405745257275088548364400416034343698202154406457887671, 2153540930346866, 1657526669204714, - 3633319971779771, + 21888242871839275222246405745257275088548364400416034343698203316296148841659, 1952909576847970, - 3067671382961710, + 21888242871839275222246405745257275088548364400416034343698202750647560023598, 930534465416597, 2164650268713889, 1878982714704101, 68684709413373, 729127468019200, - 4141489038062884, + 21888242871839275222246405745257275088548364400416034343698203824465215124772, 1951692092249421, - 3068919106698379, + 21888242871839275222246405745257275088548364400416034343698202751895283760267, 199703943118274, - 3408791464125004, + 21888242871839275222246405745257275088548364400416034343698203091767641186892, 1676340090761841, 1878935056659848, 1254733274833083, - 3016835933495112, + 21888242871839275222246405745257275088548364400416034343698202699812110557000, 2053162501765280, 1271128143980253, 1834477541676579, - 4284013096802412, - 3741057488040464, + 21888242871839275222246405745257275088548364400416034343698203966989273864300, + 21888242871839275222246405745257275088548364400416034343698203424033665102352, 1909194885061353, 2178515745384165, - 2678992391851014, - 2556823884016363, + 21888242871839275222246405745257275088548364400416034343698202361968568912902, + 21888242871839275222246405745257275088548364400416034343698202239800061078251, 1134505806220423, - 3216832116475737, + 21888242871839275222246405745257275088548364400416034343698202899808293537625, 922768861112548, - 3055864459738483, + 21888242871839275222246405745257275088548364400416034343698202738840636800371, 510181965643326, 71799556682717, 1140536249343028, 1460365999790019, 2115514113722266, - 2939052253967585, - 2618556234696738, + 21888242871839275222246405745257275088548364400416034343698202622028431029473, + 21888242871839275222246405745257275088548364400416034343698202301532411758626, 919331094289832, - 2362663776622974, + 21888242871839275222246405745257275088548364400416034343698202045639953684862, 696155287318371, 1990512628922355, - 2881497146927919, + 21888242871839275222246405745257275088548364400416034343698202564473323989807, 2172113195130344, 961283568346904, 867718927949657, 272090540666834, - 2272324787891511, + 21888242871839275222246405745257275088548364400416034343698201955300964953399, 61766157830135, 1509488257108179, 676425435578040, 843374185469862, - 3899599123948396, + 21888242871839275222246405745257275088548364400416034343698203582575301010284, 902166915410189, 437040088153778, - 3777515951634208, - 3170335390102166, + 21888242871839275222246405745257275088548364400416034343698203460492128696096, + 21888242871839275222246405745257275088548364400416034343698202853311567164054, 998256561101764, - 2362226691273193, - 2756947048128342, - 2798035874884531, + 21888242871839275222246405745257275088548364400416034343698202045202868335081, + 21888242871839275222246405745257275088548364400416034343698202439923225190230, + 21888242871839275222246405745257275088548364400416034343698202481012051946419, 94912069861144, 477937478087233, - 4213468182251272, + 21888242871839275222246405745257275088548364400416034343698203896444359313160, 792862583433727, 1050809107707819, 1025686634511375, 2095360120124742, - 2767652742525523, - 2816985050095628, - 4208310587720562, - 3068908974404832, + 21888242871839275222246405745257275088548364400416034343698202450628919587411, + 21888242871839275222246405745257275088548364400416034343698202499961227157516, + 21888242871839275222246405745257275088548364400416034343698203891286764782450, + 21888242871839275222246405745257275088548364400416034343698202751885151466720, 1931757401123608, 1710454243619411, 1150153797082440, @@ -23624,407 +23624,407 @@ pub global CRP: [Polynomial; L] = [ 1078708530858011, 981099916864211, 763538615980685, - 3250586829310839, - 3974036371579281, + 21888242871839275222246405745257275088548364400416034343698202933563006372727, + 21888242871839275222246405745257275088548364400416034343698203657012548641169, 289395997405626, 1115306424546030, 415235025281855, 468566276948861, 1324182940053228, - 3122619608444380, - 4343393793495938, + 21888242871839275222246405745257275088548364400416034343698202805595785506268, + 21888242871839275222246405745257275088548364400416034343698204026369970557826, 759432980716914, - 3303220432633827, - 4309156388195393, + 21888242871839275222246405745257275088548364400416034343698202986196609695715, + 21888242871839275222246405745257275088548364400416034343698203992132565257281, 2232920588281819, 1791693616356798, 764338456875263, - 3875165640565747, - 3039561110272720, + 21888242871839275222246405745257275088548364400416034343698203558141817627635, + 21888242871839275222246405745257275088548364400416034343698202722537287334608, 1636735364150706, 1640020187840141, - 2889104965774018, + 21888242871839275222246405745257275088548364400416034343698202572081142835906, 1624982859842615, - 3517864980044800, + 21888242871839275222246405745257275088548364400416034343698203200841157106688, 1750911031998965, 432039918798011, - 2844409648470747, - 2989879831832154, - 3239472258380337, - 4258716512020792, - 4476137410048681, - 2999233517787496, - 2585980668730757, + 21888242871839275222246405745257275088548364400416034343698202527385825532635, + 21888242871839275222246405745257275088548364400416034343698202672856008894042, + 21888242871839275222246405745257275088548364400416034343698202922448435442225, + 21888242871839275222246405745257275088548364400416034343698203941692689082680, + 21888242871839275222246405745257275088548364400416034343698204159113587110569, + 21888242871839275222246405745257275088548364400416034343698202682209694849384, + 21888242871839275222246405745257275088548364400416034343698202268956845792645, 2235268623766081, 468196931188093, 120527543740693, - 2847837483664693, - 3218508595458173, + 21888242871839275222246405745257275088548364400416034343698202530813660726581, + 21888242871839275222246405745257275088548364400416034343698202901484772520061, 1467780151842392, 43589875044955, 1719783515006217, 2141708827622190, - 4117238146941036, + 21888242871839275222246405745257275088548364400416034343698203800214324002924, 681374839652496, 89597624551065, 465387299345915, - 2547170240030796, - 3193671765592576, - 3324039724012795, - 3272349328951632, - 2587653860215522, - 2310104020480547, - 3135836110764200, - 3330944652112013, + 21888242871839275222246405745257275088548364400416034343698202230146417092684, + 21888242871839275222246405745257275088548364400416034343698202876647942654464, + 21888242871839275222246405745257275088548364400416034343698203007015901074683, + 21888242871839275222246405745257275088548364400416034343698202955325506013520, + 21888242871839275222246405745257275088548364400416034343698202270630037277410, + 21888242871839275222246405745257275088548364400416034343698201993080197542435, + 21888242871839275222246405745257275088548364400416034343698202818812287826088, + 21888242871839275222246405745257275088548364400416034343698203013920829173901, 105283648214050, 1881467145274830, - 3518699581131689, - 3872033835800288, - 2613266570237323, - 4362096753472150, - 2605839139771872, + 21888242871839275222246405745257275088548364400416034343698203201675758193577, + 21888242871839275222246405745257275088548364400416034343698203555010012862176, + 21888242871839275222246405745257275088548364400416034343698202296242747299211, + 21888242871839275222246405745257275088548364400416034343698204045072930534038, + 21888242871839275222246405745257275088548364400416034343698202288815316833760, 1073570133425960, - 3757785328952663, + 21888242871839275222246405745257275088548364400416034343698203440761506014551, 1285661716267273, - 3974767701414705, + 21888242871839275222246405745257275088548364400416034343698203657743878476593, 2228103225876033, 699791981020132, - 2668223331839433, - 3256885714826003, + 21888242871839275222246405745257275088548364400416034343698202351199508901321, + 21888242871839275222246405745257275088548364400416034343698202939861891887891, 229011980234536, - 2362722238123296, + 21888242871839275222246405745257275088548364400416034343698202045698415185184, 582911819977274, - 3571685808144273, + 21888242871839275222246405745257275088548364400416034343698203254661985206161, 2071933904566951, 1981372067826483, 1998174381331093, 1982147619958238, 1054651383598765, - 2679171251143464, + 21888242871839275222246405745257275088548364400416034343698202362147428205352, 1025328327348530, - 3388272264462935, + 21888242871839275222246405745257275088548364400416034343698203071248441524823, 167422469592769, 1516138761478064, - 3462204231486812, - 2860068620702138, + 21888242871839275222246405745257275088548364400416034343698203145180408548700, + 21888242871839275222246405745257275088548364400416034343698202543044797764026, 838996805035380, 653664139543493, 712887982397973, - 2347314183690074, - 4405660663132624, - 4491347532508613, + 21888242871839275222246405745257275088548364400416034343698202030290360751962, + 21888242871839275222246405745257275088548364400416034343698204088636840194512, + 21888242871839275222246405745257275088548364400416034343698204174323709570501, 762407002685154, 871275247241374, - 4478549914865122, + 21888242871839275222246405745257275088548364400416034343698204161526091927010, 1069617797886212, 1279636593745381, - 3508522949186884, - 3867070714303749, - 2559699014718105, - 2996507952841799, + 21888242871839275222246405745257275088548364400416034343698203191499126248772, + 21888242871839275222246405745257275088548364400416034343698203550046891365637, + 21888242871839275222246405745257275088548364400416034343698202242675191779993, + 21888242871839275222246405745257275088548364400416034343698202679484129903687, 2170404213038471, - 4196026827803391, + 21888242871839275222246405745257275088548364400416034343698203879003004865279, 1834609841615819, - 3597413908058738, + 21888242871839275222246405745257275088548364400416034343698203280390085120626, 1277571579691063, - 3239692740091121, + 21888242871839275222246405745257275088548364400416034343698202922668917153009, 590764941871504, 2041293651280552, - 2539316926327047, - 2515823054992457, - 3482063184021455, + 21888242871839275222246405745257275088548364400416034343698202222293103388935, + 21888242871839275222246405745257275088548364400416034343698202198799232054345, + 21888242871839275222246405745257275088548364400416034343698203165039361083343, 2034636043244784, - 4384359895651209, + 21888242871839275222246405745257275088548364400416034343698204067336072713097, 1198220580451717, - 3422989598232299, + 21888242871839275222246405745257275088548364400416034343698203105965775294187, 72545652948508, - 3027763431878790, - 2452726742359765, - 3850598985353374, + 21888242871839275222246405745257275088548364400416034343698202710739608940678, + 21888242871839275222246405745257275088548364400416034343698202135702919421653, + 21888242871839275222246405745257275088548364400416034343698203533575162415262, 300181132330693, - 3696050577018990, - 4330505880826056, + 21888242871839275222246405745257275088548364400416034343698203379026754080878, + 21888242871839275222246405745257275088548364400416034343698204013482057887944, 1388124754183807, - 2325527744712822, - 3785280802550380, + 21888242871839275222246405745257275088548364400416034343698202008503921774710, + 21888242871839275222246405745257275088548364400416034343698203468256979612268, 700767976428418, 1061322511081600, 309941617946620, 1038469955116287, 1819569409474353, - 3549594031054383, - 4497500903210744, - 3863835368705074, + 21888242871839275222246405745257275088548364400416034343698203232570208116271, + 21888242871839275222246405745257275088548364400416034343698204180477080272632, + 21888242871839275222246405745257275088548364400416034343698203546811545766962, 385528005860092, - 2927604409480782, + 21888242871839275222246405745257275088548364400416034343698202610580586542670, 1040711580526856, 1549601039769138, - 4028261559799674, - 3497477102736572, - 4317888760354322, + 21888242871839275222246405745257275088548364400416034343698203711237736861562, + 21888242871839275222246405745257275088548364400416034343698203180453279798460, + 21888242871839275222246405745257275088548364400416034343698204000864937416210, 630779820203220, 204633002244210, 1919932553029353, 364692464239543, 629965202895412, - 2328173272189402, - 3797979504920891, - 4371816208471586, - 3215859094916965, - 3042370411997657, - 3602427539753705, + 21888242871839275222246405745257275088548364400416034343698202011149449251290, + 21888242871839275222246405745257275088548364400416034343698203480955681982779, + 21888242871839275222246405745257275088548364400416034343698204054792385533474, + 21888242871839275222246405745257275088548364400416034343698202898835271978853, + 21888242871839275222246405745257275088548364400416034343698202725346589059545, + 21888242871839275222246405745257275088548364400416034343698203285403716815593, 1766631992791082, - 3426152043288108, - 3133447697407262, + 21888242871839275222246405745257275088548364400416034343698203109128220349996, + 21888242871839275222246405745257275088548364400416034343698202816423874469150, 846646033316157, 1364019483138889, 1621891167738518, - 3998897798929007, - 2973172171412291, + 21888242871839275222246405745257275088548364400416034343698203681873975990895, + 21888242871839275222246405745257275088548364400416034343698202656148348474179, 298777958243117, 1135830670660638, - 2571166044468768, + 21888242871839275222246405745257275088548364400416034343698202254142221530656, 1500066538213270, 368963883986728, - 4364267536165406, - 2459123973431074, + 21888242871839275222246405745257275088548364400416034343698204047243713227294, + 21888242871839275222246405745257275088548364400416034343698202142100150492962, 1555634133989108, - 3540164183748660, - 2461664394963967, + 21888242871839275222246405745257275088548364400416034343698203223140360810548, + 21888242871839275222246405745257275088548364400416034343698202144640572025855, 2222370636118678, - 3422887393949642, + 21888242871839275222246405745257275088548364400416034343698203105863571011530, 1618940721225518, 1450552876145337, 1625959283550206, 1951562274029430, - 3047212833987081, - 3751633841725561, - 2609518951657852, + 21888242871839275222246405745257275088548364400416034343698202730189011048969, + 21888242871839275222246405745257275088548364400416034343698203434610018787449, + 21888242871839275222246405745257275088548364400416034343698202292495128719740, 2083979963721018, - 2399842128978840, + 21888242871839275222246405745257275088548364400416034343698202082818306040728, 1660309368152900, 1791252327825045, 1785894246841445, - 4319732266241651, - 4454012166105101, - 3860431822160528, + 21888242871839275222246405745257275088548364400416034343698204002708443303539, + 21888242871839275222246405745257275088548364400416034343698204136988343166989, + 21888242871839275222246405745257275088548364400416034343698203543407999222416, 1434697542038982, 644520552850933, 813100312698981, - 3788838553875491, + 21888242871839275222246405745257275088548364400416034343698203471814730937379, 1182685724036405, 1860654672810399, - 2878794865056949, + 21888242871839275222246405745257275088548364400416034343698202561771042118837, 831359734292832, - 3113892897439886, + 21888242871839275222246405745257275088548364400416034343698202796869074501774, 1005447869525278, 645037897723716, 1925551171232609, 2216814245456751, - 2888225894626700, + 21888242871839275222246405745257275088548364400416034343698202571202071688588, 1460331921054624, 1170687655301767, 256540476889503, - 2602750125567427, + 21888242871839275222246405745257275088548364400416034343698202285726302629315, 1232887936408891, - 4493462266574317, - 4260689271706427, + 21888242871839275222246405745257275088548364400416034343698204176438443636205, + 21888242871839275222246405745257275088548364400416034343698203943665448768315, 1137341341017796, 2187169848171828, - 4220145764400724, - 2611092436215459, - 4489105611271897, + 21888242871839275222246405745257275088548364400416034343698203903121941462612, + 21888242871839275222246405745257275088548364400416034343698202294068613277347, + 21888242871839275222246405745257275088548364400416034343698204172081788333785, 1687785637568450, 1892600865827340, 926795206162783, 2133074871870972, - 4013149822732407, + 21888242871839275222246405745257275088548364400416034343698203696125999794295, 717013728813605, - 3270100037408052, - 4482904193853653, - 4188429475932016, + 21888242871839275222246405745257275088548364400416034343698202953076214469940, + 21888242871839275222246405745257275088548364400416034343698204165880370915541, + 21888242871839275222246405745257275088548364400416034343698203871405652993904, 1157851953593457, 287922497658974, 1366638814103089, 2021651957148234, 701179611220983, - 2446132095487203, - 4220435949414866, + 21888242871839275222246405745257275088548364400416034343698202129108272549091, + 21888242871839275222246405745257275088548364400416034343698203903412126476754, 501705431374069, - 2686624403535245, - 3924252493165890, - 2742505355636348, - 2386356718249500, - 2820709402065876, + 21888242871839275222246405745257275088548364400416034343698202369600580597133, + 21888242871839275222246405745257275088548364400416034343698203607228670227778, + 21888242871839275222246405745257275088548364400416034343698202425481532698236, + 21888242871839275222246405745257275088548364400416034343698202069332895311388, + 21888242871839275222246405745257275088548364400416034343698202503685579127764, 497829326429630, 932135132689782, 569047718589000, - 3520588277437518, - 2862446764794450, - 3782547220546299, + 21888242871839275222246405745257275088548364400416034343698203203564454499406, + 21888242871839275222246405745257275088548364400416034343698202545422941856338, + 21888242871839275222246405745257275088548364400416034343698203465523397608187, 1413916967935921, - 4300838328474265, + 21888242871839275222246405745257275088548364400416034343698203983814505536153, 1892946175318965, - 2895323993821619, + 21888242871839275222246405745257275088548364400416034343698202578300170883507, 170722726886711, - 3443092396699594, + 21888242871839275222246405745257275088548364400416034343698203126068573761482, 1637623366089029, - 3144963062087940, - 3639477804356762, - 4069553772626578, - 3728721325698585, - 3103466260026484, + 21888242871839275222246405745257275088548364400416034343698202827939239149828, + 21888242871839275222246405745257275088548364400416034343698203322453981418650, + 21888242871839275222246405745257275088548364400416034343698203752529949688466, + 21888242871839275222246405745257275088548364400416034343698203411697502760473, + 21888242871839275222246405745257275088548364400416034343698202786442437088372, 328310562407831, 1731641031083326, 1726809256165467, 85337461582675, 789888483722289, 438598819714988, - 2415305687586276, + 21888242871839275222246405745257275088548364400416034343698202098281864648164, 448370093144368, 2201313164082667, - 3866646520324359, + 21888242871839275222246405745257275088548364400416034343698203549622697386247, 183723034884310, 2186540309321898, - 2266080520606077, + 21888242871839275222246405745257275088548364400416034343698201949056697667965, 644367290751649, - 2526685827947572, - 4158355880245646, + 21888242871839275222246405745257275088548364400416034343698202209662005009460, + 21888242871839275222246405745257275088548364400416034343698203841332057307534, 1800237797446758, 63785277945797, 966471528452860, - 2476523807771878, + 21888242871839275222246405745257275088548364400416034343698202159499984833766, 1025985810624487, 1493939202748837, 375200385054039, 1947395474225785, - 2662400812964078, + 21888242871839275222246405745257275088548364400416034343698202345376990025966, 289816994812770, 567354858490495, - 2604864585938713, + 21888242871839275222246405745257275088548364400416034343698202287840763000601, 576542926093487, - 2367245847113240, + 21888242871839275222246405745257275088548364400416034343698202050222024175128, 1226177991135573, - 3017715824145186, + 21888242871839275222246405745257275088548364400416034343698202700692001207074, 1428419443657203, - 4141829332200195, - 2639181139753422, - 2712658234977775, + 21888242871839275222246405745257275088548364400416034343698203824805509262083, + 21888242871839275222246405745257275088548364400416034343698202322157316815310, + 21888242871839275222246405745257275088548364400416034343698202395634412039663, 1967536109774882, - 4416737242616132, - 3041863539233009, - 3728210344446626, + 21888242871839275222246405745257275088548364400416034343698204099713419678020, + 21888242871839275222246405745257275088548364400416034343698202724839716294897, + 21888242871839275222246405745257275088548364400416034343698203411186521508514, 483264609128756, - 2515921014165932, - 3562152366770662, - 3765384257699408, - 4344059441505375, - 3002197984882446, - 2443185869245122, - 3745864547917815, - 2342354118920923, - 4087049980255618, + 21888242871839275222246405745257275088548364400416034343698202198897191227820, + 21888242871839275222246405745257275088548364400416034343698203245128543832550, + 21888242871839275222246405745257275088548364400416034343698203448360434761296, + 21888242871839275222246405745257275088548364400416034343698204027035618567263, + 21888242871839275222246405745257275088548364400416034343698202685174161944334, + 21888242871839275222246405745257275088548364400416034343698202126162046307010, + 21888242871839275222246405745257275088548364400416034343698203428840724979703, + 21888242871839275222246405745257275088548364400416034343698202025330295982811, + 21888242871839275222246405745257275088548364400416034343698203770026157317506, 1944182902481397, - 4366200252948195, + 21888242871839275222246405745257275088548364400416034343698204049176430010083, 522193071048551, 40257760938918, - 2452327813626449, - 3381469739772163, + 21888242871839275222246405745257275088548364400416034343698202135303990688337, + 21888242871839275222246405745257275088548364400416034343698203064445916834051, 2188424701675863, - 4494981733154281, + 21888242871839275222246405745257275088548364400416034343698204177957910216169, 1395772419226157, 1269717928960815, 161756693719538, 1758390299768564, - 4299820322456010, - 2764864317356532, + 21888242871839275222246405745257275088548364400416034343698203982796499517898, + 21888242871839275222246405745257275088548364400416034343698202447840494418420, 1858966359780083, 963153019227086, - 2605781668612707, - 3554894689837775, + 21888242871839275222246405745257275088548364400416034343698202288757845674595, + 21888242871839275222246405745257275088548364400416034343698203237870866899663, 1886173375812091, 1716125753088026, 1172078611042063, 1929558710569448, - 4300055632394527, - 3294619418258194, + 21888242871839275222246405745257275088548364400416034343698203983031809456415, + 21888242871839275222246405745257275088548364400416034343698202977595595320082, 1145287845079535, - 3669633420074973, + 21888242871839275222246405745257275088548364400416034343698203352609597136861, 1017835838313941, - 3923974437360312, - 2932580166584107, + 21888242871839275222246405745257275088548364400416034343698203606950614422200, + 21888242871839275222246405745257275088548364400416034343698202615556343645995, 116504440301700, - 4152205449735978, + 21888242871839275222246405745257275088548364400416034343698203835181626797866, 473651116831405, 1803860826619258, 1379331785091798, - 2730043002607185, - 2910450493990586, + 21888242871839275222246405745257275088548364400416034343698202413019179669073, + 21888242871839275222246405745257275088548364400416034343698202593426671052474, 1526511388543724, 2191121458957187, 123276595376696, 698451562390320, 1902146118362158, - 2421275938279399, + 21888242871839275222246405745257275088548364400416034343698202104252115341287, 1807722288933361, - 2525674680772563, + 21888242871839275222246405745257275088548364400416034343698202208650857834451, 1229320356703807, - 3515763726878684, + 21888242871839275222246405745257275088548364400416034343698203198739903940572, 125569040238545, - 4148600964397409, + 21888242871839275222246405745257275088548364400416034343698203831577141459297, 1401536975592507, 1159441210049420, 1237480176807485, 704035981331863, 1292713285398474, 1828611651565083, - 4029042553306104, - 2348361717457388, - 2714809747268948, - 3392502163780924, + 21888242871839275222246405745257275088548364400416034343698203712018730367992, + 21888242871839275222246405745257275088548364400416034343698202031337894519276, + 21888242871839275222246405745257275088548364400416034343698202397785924330836, + 21888242871839275222246405745257275088548364400416034343698203075478340842812, 2180139998683362, - 2799622361576615, - 3572924523771147, - 2264703066456942, + 21888242871839275222246405745257275088548364400416034343698202482598538638503, + 21888242871839275222246405745257275088548364400416034343698203255900700833035, + 21888242871839275222246405745257275088548364400416034343698201947679243518830, 1292881909106693, 1585177143107028, - 3441102929281954, - 3448017103072126, - 2595415361525311, + 21888242871839275222246405745257275088548364400416034343698203124079106343842, + 21888242871839275222246405745257275088548364400416034343698203130993280134014, + 21888242871839275222246405745257275088548364400416034343698202278391538587199, 1808386174720689, - 4385479362075262, - 4304604640096478, + 21888242871839275222246405745257275088548364400416034343698204068455539137150, + 21888242871839275222246405745257275088548364400416034343698203987580817158366, 561255608922561, 1673973840053000, - 3949606609960844, - 3256450200743635, + 21888242871839275222246405745257275088548364400416034343698203632582787022732, + 21888242871839275222246405745257275088548364400416034343698202939426377805523, 1751792706180878, - 2717829845054703, - 4138740035926882, - 4007915459653782, - 2572452574199727, + 21888242871839275222246405745257275088548364400416034343698202400806022116591, + 21888242871839275222246405745257275088548364400416034343698203821716212988770, + 21888242871839275222246405745257275088548364400416034343698203690891636715670, + 21888242871839275222246405745257275088548364400416034343698202255428751261615, 1412777833508350, 449257915063253, - 3071717620559506, + 21888242871839275222246405745257275088548364400416034343698202754693797621394, 515703626812667, 862641074411912, - 4333205324696196, + 21888242871839275222246405745257275088548364400416034343698204016181501758084, 1200486884418576, - 4108810932855714, + 21888242871839275222246405745257275088548364400416034343698203791787109917602, 775469317234017, 1810627649070304, - 3216220905461659, - 4497557881350955, + 21888242871839275222246405745257275088548364400416034343698202899197082523547, + 21888242871839275222246405745257275088548364400416034343698204180534058412843, 2116463884304308, - 2605502995208944, + 21888242871839275222246405745257275088548364400416034343698202288479172270832, 2141154090827225, - 2884911408161304, - 3371781736384342, + 21888242871839275222246405745257275088548364400416034343698202567887585223192, + 21888242871839275222246405745257275088548364400416034343698203054757913446230, 1192008510226183, 168268721231196, - 3253476096567062, + 21888242871839275222246405745257275088548364400416034343698202936452273628950, 21000924060675, - 2728112097260197, + 21888242871839275222246405745257275088548364400416034343698202411088274322085, 288501682067320, 2014778885793311, 778640174199504, @@ -24032,59 +24032,59 @@ pub global CRP: [Polynomial; L] = [ 987365272804395, 333212715411559, 1920886138986868, - 4222924115061940, - 3786774938515658, - 2701752435903674, + 21888242871839275222246405745257275088548364400416034343698203905900292123828, + 21888242871839275222246405745257275088548364400416034343698203469751115577546, + 21888242871839275222246405745257275088548364400416034343698202384728612965562, 644484713200698, 2073551577426973, - 4465415446193895, + 21888242871839275222246405745257275088548364400416034343698204148391623255783, 1377358354983072, 445508390630394, 164797560799626, - 3927039972539168, + 21888242871839275222246405745257275088548364400416034343698203610016149601056, 742937231966831, 280594013595106, - 2942234006677133, + 21888242871839275222246405745257275088548364400416034343698202625210183739021, 1698722955594404, 763976195233163, 92976052341561, 980348954489218, 1660803567945416, - 2751405395008823, + 21888242871839275222246405745257275088548364400416034343698202434381572070711, 1667317993034393, - 3857063158298298, + 21888242871839275222246405745257275088548364400416034343698203540039335360186, 199843348523208, - 2410967854193828, - 2439551627917992, - 4053108451191428, - 4316479272761179, - 2353716535466902, - 2332423652931555, - 3648209094694983, + 21888242871839275222246405745257275088548364400416034343698202093944031255716, + 21888242871839275222246405745257275088548364400416034343698202122527804979880, + 21888242871839275222246405745257275088548364400416034343698203736084628253316, + 21888242871839275222246405745257275088548364400416034343698203999455449823067, + 21888242871839275222246405745257275088548364400416034343698202036692712528790, + 21888242871839275222246405745257275088548364400416034343698202015399829993443, + 21888242871839275222246405745257275088548364400416034343698203331185271756871, 294664493839310, 1621454126789935, - 2344165246536387, + 21888242871839275222246405745257275088548364400416034343698202027141423598275, 270085346001786, 477197352387040, - 2363560539851227, - 3773678990765820, - 2759003651892120, - 4408533513569168, - 4228728178450738, - 3152166915690168, + 21888242871839275222246405745257275088548364400416034343698202046536716913115, + 21888242871839275222246405745257275088548364400416034343698203456655167827708, + 21888242871839275222246405745257275088548364400416034343698202441979828954008, + 21888242871839275222246405745257275088548364400416034343698204091509690631056, + 21888242871839275222246405745257275088548364400416034343698203911704355512626, + 21888242871839275222246405745257275088548364400416034343698202835143092752056, 948031537744712, - 3277359489742014, + 21888242871839275222246405745257275088548364400416034343698202960335666803902, 1591766979865142, 91956332039518, 125246530441220, - 2543180678406674, + 21888242871839275222246405745257275088548364400416034343698202226156855468562, 1885932968532916, - 2545760302311812, + 21888242871839275222246405745257275088548364400416034343698202228736479373700, 522331190196659, 847486716133294, 1672365147170188, 1322108007419842, - 3423785939578839, + 21888242871839275222246405745257275088548364400416034343698203106762116640727, 1405776314724243, 1681189482867263, 787008225984193, @@ -24095,328 +24095,328 @@ pub global CRP: [Polynomial; L] = [ 1440258109379677, 1452303128449509, 1482995025231293, - 3181414519211371, + 21888242871839275222246405745257275088548364400416034343698202864390696273259, 1523718280050795, 1079473098653426, - 3969679928271065, - 2378236376509978, - 3168688319585765, - 3749226507426035, - 3852736289818184, - 4346663789645648, + 21888242871839275222246405745257275088548364400416034343698203652656105332953, + 21888242871839275222246405745257275088548364400416034343698202061212553571866, + 21888242871839275222246405745257275088548364400416034343698202851664496647653, + 21888242871839275222246405745257275088548364400416034343698203432202684487923, + 21888242871839275222246405745257275088548364400416034343698203535712466880072, + 21888242871839275222246405745257275088548364400416034343698204029639966707536, 1672279784370728, - 3633652019895634, + 21888242871839275222246405745257275088548364400416034343698203316628196957522, 1650236060440234, 824939516800964, - 4336880089822802, - 2793762757797739, - 4204770643256715, + 21888242871839275222246405745257275088548364400416034343698204019856266884690, + 21888242871839275222246405745257275088548364400416034343698202476738934859627, + 21888242871839275222246405745257275088548364400416034343698203887746820318603, 1167320626780714, 1861132260453834, - 3486505362395410, + 21888242871839275222246405745257275088548364400416034343698203169481539457298, 1609280943192065, - 2882617727107947, - 2270908818200918, - 2270777174676267, + 21888242871839275222246405745257275088548364400416034343698202565593904169835, + 21888242871839275222246405745257275088548364400416034343698201953884995262806, + 21888242871839275222246405745257275088548364400416034343698201953753351738155, 2009728409442812, 735695729137186, 229074045277470, 43672599058789, 1252864661828889, - 3731890494101439, + 21888242871839275222246405745257275088548364400416034343698203414866671163327, 911410306955193, 176434408741884, - 3913077902302732, + 21888242871839275222246405745257275088548364400416034343698203596054079364620, 352146968556736, - 4059547785245608, - 3927119073267467, - 3282356395500437, + 21888242871839275222246405745257275088548364400416034343698203742523962307496, + 21888242871839275222246405745257275088548364400416034343698203610095250329355, + 21888242871839275222246405745257275088548364400416034343698202965332572562325, 1485652279868962, - 2681501945970569, + 21888242871839275222246405745257275088548364400416034343698202364478123032457, 211502171378347, - 3583254899767662, - 2817526734626756, + 21888242871839275222246405745257275088548364400416034343698203266231076829550, + 21888242871839275222246405745257275088548364400416034343698202500502911688644, 1850640312602720, - 4031336011203793, + 21888242871839275222246405745257275088548364400416034343698203714312188265681, 2007908250210161, 107079965723945, - 3882973049642990, + 21888242871839275222246405745257275088548364400416034343698203565949226704878, 766199748006361, 1257881347864191, - 3355534098725965, + 21888242871839275222246405745257275088548364400416034343698203038510275787853, 82303347209349, 1283930982024271, - 2887804169324888, - 3213579858605372, - 3975337151371125, - 2368867314651081, - 3893537876539765, + 21888242871839275222246405745257275088548364400416034343698202570780346386776, + 21888242871839275222246405745257275088548364400416034343698202896556035667260, + 21888242871839275222246405745257275088548364400416034343698203658313328433013, + 21888242871839275222246405745257275088548364400416034343698202051843491712969, + 21888242871839275222246405745257275088548364400416034343698203576514053601653, 1008576675515174, 1116347073341919, 1069236485670849, 740158978662524, 2056975025177267, - 3165006263846386, + 21888242871839275222246405745257275088548364400416034343698202847982440908274, 845025557540351, 1179940085203499, 1628993461199272, - 3258449265866199, - 2869465022413330, - 2639825710150167, - 3694162215014789, - 2757703527558852, + 21888242871839275222246405745257275088548364400416034343698202941425442928087, + 21888242871839275222246405745257275088548364400416034343698202552441199475218, + 21888242871839275222246405745257275088548364400416034343698202322801887212055, + 21888242871839275222246405745257275088548364400416034343698203377138392076677, + 21888242871839275222246405745257275088548364400416034343698202440679704620740, 814095946616817, 1519849194693047, 2212325240816549, 893222683303513, - 2826544065649629, + 21888242871839275222246405745257275088548364400416034343698202509520242711517, 157151428752250, - 2707663198006612, - 2717123490657333, - 3217344376128322, + 21888242871839275222246405745257275088548364400416034343698202390639375068500, + 21888242871839275222246405745257275088548364400416034343698202400099667719221, + 21888242871839275222246405745257275088548364400416034343698202900320553190210, 1926622632457777, - 3668464771775852, - 4406016068725870, - 3633658823145712, + 21888242871839275222246405745257275088548364400416034343698203351440948837740, + 21888242871839275222246405745257275088548364400416034343698204088992245787758, + 21888242871839275222246405745257275088548364400416034343698203316635000207600, 1040313238489172, - 3124283380393449, + 21888242871839275222246405745257275088548364400416034343698202807259557455337, 571782481581650, 117396242456166, 202872941908751, 4127154028664, 980431305691289, - 3649450864130435, + 21888242871839275222246405745257275088548364400416034343698203332427041192323, 182838698577187, - 3076308172630444, + 21888242871839275222246405745257275088548364400416034343698202759284349692332, 27154056556467, - 2892810411180233, - 2718493414198722, - 3390004304784480, + 21888242871839275222246405745257275088548364400416034343698202575786588242121, + 21888242871839275222246405745257275088548364400416034343698202401469591260610, + 21888242871839275222246405745257275088548364400416034343698203072980481846368, 1352994215233854, 1387086323860651, - 4335269519232997, + 21888242871839275222246405745257275088548364400416034343698204018245696294885, 364064261902635, 625966178684308, - 3181785949012454, + 21888242871839275222246405745257275088548364400416034343698202864762126074342, 25388166001841, - 3136761681113475, + 21888242871839275222246405745257275088548364400416034343698202819737858175363, 489524620712868, 1771986053144416, 1891258279701012, - 3680864215264944, + 21888242871839275222246405745257275088548364400416034343698203363840392326832, 2115166409305956, 1893800103069459, - 2743740367727652, - 3376686818803714, - 3548706362467903, + 21888242871839275222246405745257275088548364400416034343698202426716544789540, + 21888242871839275222246405745257275088548364400416034343698203059662995865602, + 21888242871839275222246405745257275088548364400416034343698203231682539529791, 2177193464500104, 2074245850366680, - 2442410823107824, - 3116959298537886, + 21888242871839275222246405745257275088548364400416034343698202125387000169712, + 21888242871839275222246405745257275088548364400416034343698202799935475599774, 2159153505714484, - 3112469902604747, - 2752671404305618, - 2730796473628487, + 21888242871839275222246405745257275088548364400416034343698202795446079666635, + 21888242871839275222246405745257275088548364400416034343698202435647581367506, + 21888242871839275222246405745257275088548364400416034343698202413772650690375, 1052146161024652, - 4044645856063430, - 3309836584447394, + 21888242871839275222246405745257275088548364400416034343698203727622033125318, + 21888242871839275222246405745257275088548364400416034343698202992812761509282, 1342258322772149, - 3163322496760524, + 21888242871839275222246405745257275088548364400416034343698202846298673822412, 521256479380750, - 4313225179029200, - 3493972592548844, - 2530619417467234, - 4026007505195513, + 21888242871839275222246405745257275088548364400416034343698203996201356091088, + 21888242871839275222246405745257275088548364400416034343698203176948769610732, + 21888242871839275222246405745257275088548364400416034343698202213595594529122, + 21888242871839275222246405745257275088548364400416034343698203708983682257401, 1321725651336101, - 2938177934078747, - 2322933647825094, - 3476835521909886, - 3310077656774225, + 21888242871839275222246405745257275088548364400416034343698202621154111140635, + 21888242871839275222246405745257275088548364400416034343698202005909824886982, + 21888242871839275222246405745257275088548364400416034343698203159811698971774, + 21888242871839275222246405745257275088548364400416034343698202993053833836113, 1762783974604900, - 4455723359727132, + 21888242871839275222246405745257275088548364400416034343698204138699536789020, 470689044927273, 16270971248908, - 4281832184215790, + 21888242871839275222246405745257275088548364400416034343698203964808361277678, 703777932791187, - 2680784284240979, + 21888242871839275222246405745257275088548364400416034343698202363760461302867, 1247027636238156, - 4102174382392044, + 21888242871839275222246405745257275088548364400416034343698203785150559453932, 1026705980152291, - 4011490575728861, + 21888242871839275222246405745257275088548364400416034343698203694466752790749, 712734655985512, 1309079366307269, 1100042352483544, 642989133772598, - 2254826761653702, - 3951996360461279, - 3080563388736065, - 3773553305194325, - 2820134413483405, - 4026014763959684, - 2254958359455901, - 3776652923316718, + 21888242871839275222246405745257275088548364400416034343698201937802938715590, + 21888242871839275222246405745257275088548364400416034343698203634972537523167, + 21888242871839275222246405745257275088548364400416034343698202763539565797953, + 21888242871839275222246405745257275088548364400416034343698203456529482256213, + 21888242871839275222246405745257275088548364400416034343698202503110590545293, + 21888242871839275222246405745257275088548364400416034343698203708990941021572, + 21888242871839275222246405745257275088548364400416034343698201937934536517789, + 21888242871839275222246405745257275088548364400416034343698203459629100378606, 1246139611562216, 1530568060050426, - 3409617770597370, + 21888242871839275222246405745257275088548364400416034343698203092593947659258, 1120751392261482, 277519026130007, 788723547662750, - 2345816531417671, + 21888242871839275222246405745257275088548364400416034343698202028792708479559, 1742375955009290, - 4385513553913980, - 3580790276802895, + 21888242871839275222246405745257275088548364400416034343698204068489730975868, + 21888242871839275222246405745257275088548364400416034343698203263766453864783, 7947166850553, 228919656786969, 601906438752703, 1061294816479649, - 2984020613498268, - 4130440234993380, - 4061008307348059, - 2285634497394359, - 2599028503052118, - 4502787960608390, + 21888242871839275222246405745257275088548364400416034343698202666996790560156, + 21888242871839275222246405745257275088548364400416034343698203813416412055268, + 21888242871839275222246405745257275088548364400416034343698203743984484409947, + 21888242871839275222246405745257275088548364400416034343698201968610674456247, + 21888242871839275222246405745257275088548364400416034343698202282004680114006, + 21888242871839275222246405745257275088548364400416034343698204185764137670278, 790443854476047, 1129196768100014, 1331888470206147, - 4180609286903958, + 21888242871839275222246405745257275088548364400416034343698203863585463965846, 2236510011445557, 899563270417340, 1964384730575662, 1547263217326199, - 2501520618893226, - 3535426565531944, - 2967399293799346, - 2961501203763787, - 2382355547876788, + 21888242871839275222246405745257275088548364400416034343698202184496795955114, + 21888242871839275222246405745257275088548364400416034343698203218402742593832, + 21888242871839275222246405745257275088548364400416034343698202650375470861234, + 21888242871839275222246405745257275088548364400416034343698202644477380825675, + 21888242871839275222246405745257275088548364400416034343698202065331724938676, 1924611671773672, - 3416407741067689, + 21888242871839275222246405745257275088548364400416034343698203099383918129577, 1536038735445259, - 3958723712858687, - 4282097804249220, + 21888242871839275222246405745257275088548364400416034343698203641699889920575, + 21888242871839275222246405745257275088548364400416034343698203965073981311108, 2172840164983463, 1130667975724406, - 2591232099806854, + 21888242871839275222246405745257275088548364400416034343698202274208276868742, 610194751358434, - 3777189058524178, + 21888242871839275222246405745257275088548364400416034343698203460165235586066, 110841572812649, - 2883901101112593, - 4245265664895134, - 4154875476306552, + 21888242871839275222246405745257275088548364400416034343698202566877278174481, + 21888242871839275222246405745257275088548364400416034343698203928241841957022, + 21888242871839275222246405745257275088548364400416034343698203837851653368440, 1292823792059881, 1017735669136219, 1102106266624098, - 3865513803414122, - 3940225400937842, + 21888242871839275222246405745257275088548364400416034343698203548489980476010, + 21888242871839275222246405745257275088548364400416034343698203623201577999730, 322080406301861, - 2618974882860526, + 21888242871839275222246405745257275088548364400416034343698202301951059922414, 338629316411775, - 4351173459647030, + 21888242871839275222246405745257275088548364400416034343698204034149636708918, 1784569463094789, 802665569122969, - 2775359410171857, + 21888242871839275222246405745257275088548364400416034343698202458335587233745, 1810111731547502, 1319216124725792, - 2656618977500477, - 3770153819265304, + 21888242871839275222246405745257275088548364400416034343698202339595154562365, + 21888242871839275222246405745257275088548364400416034343698203453129996327192, 1947073169683859, - 2363494342974532, - 4088106828730879, - 3426057937631753, + 21888242871839275222246405745257275088548364400416034343698202046470520036420, + 21888242871839275222246405745257275088548364400416034343698203771083005792767, + 21888242871839275222246405745257275088548364400416034343698203109034114693641, 2069351415514702, 1624799139009537, - 2258219037448284, + 21888242871839275222246405745257275088548364400416034343698201941195214510172, 246914702840463, - 3719003476809417, - 3271015496661079, - 3952652507915121, + 21888242871839275222246405745257275088548364400416034343698203401979653871305, + 21888242871839275222246405745257275088548364400416034343698202953991673722967, + 21888242871839275222246405745257275088548364400416034343698203635628684977009, 994606174879809, - 2620021656612109, + 21888242871839275222246405745257275088548364400416034343698202302997833673997, 1178538030334534, - 3768149955251078, - 3495812270173481, + 21888242871839275222246405745257275088548364400416034343698203451126132312966, + 21888242871839275222246405745257275088548364400416034343698203178788447235369, 944866141388928, 321700680196287, 1015644215721684, - 4452327684794478, - 4280488203473113, - 3749863903596070, - 2705453280638109, + 21888242871839275222246405745257275088548364400416034343698204135303861856366, + 21888242871839275222246405745257275088548364400416034343698203963464380535001, + 21888242871839275222246405745257275088548364400416034343698203432840080657958, + 21888242871839275222246405745257275088548364400416034343698202388429457699997, 2171208631535115, 909587343112378, - 4383771985575736, - 3189170211262812, - 2314797796172423, - 3883645707548009, + 21888242871839275222246405745257275088548364400416034343698204066748162637624, + 21888242871839275222246405745257275088548364400416034343698202872146388324700, + 21888242871839275222246405745257275088548364400416034343698201997773973234311, + 21888242871839275222246405745257275088548364400416034343698203566621884609897, 1071077959943943, 1496738191896533, 454407000225011, 406393953578976, 1803765929061292, 1809670090641645, - 3908222946016018, - 3762519415607220, - 3563800303009031, - 3777558205171077, - 3846626917597088, - 2329119278142334, - 3426634292968640, + 21888242871839275222246405745257275088548364400416034343698203591199123077906, + 21888242871839275222246405745257275088548364400416034343698203445495592669108, + 21888242871839275222246405745257275088548364400416034343698203246776480070919, + 21888242871839275222246405745257275088548364400416034343698203460534382232965, + 21888242871839275222246405745257275088548364400416034343698203529603094658976, + 21888242871839275222246405745257275088548364400416034343698202012095455204222, + 21888242871839275222246405745257275088548364400416034343698203109610470030528, 56618938560136, 622545973848144, 876458865289964, 2114109501829654, 510481060720911, - 4451668061355776, + 21888242871839275222246405745257275088548364400416034343698204134644238417664, 1502370655271617, 1521055867202924, - 4039796649456669, + 21888242871839275222246405745257275088548364400416034343698203722772826518557, 587640445548571, - 2925843516416161, - 2683245804333548, - 2689088386354895, - 2868294879879283, + 21888242871839275222246405745257275088548364400416034343698202608819693478049, + 21888242871839275222246405745257275088548364400416034343698202366221981395436, + 21888242871839275222246405745257275088548364400416034343698202372064563416783, + 21888242871839275222246405745257275088548364400416034343698202551271056941171, 1285955960404645, - 2975944117141004, - 4078851912503477, + 21888242871839275222246405745257275088548364400416034343698202658920294202892, + 21888242871839275222246405745257275088548364400416034343698203761828089565365, 1718173520830656, 441220697745653, 67523618542056, - 4161641428288829, + 21888242871839275222246405745257275088548364400416034343698203844617605350717, 2174078567167771, 697898631357313, 2177038399298238, 1650284934726513, 1202350660585353, - 2648787321645239, + 21888242871839275222246405745257275088548364400416034343698202331763498707127, 2200724945398986, 184380838691046, - 3342985023808228, + 21888242871839275222246405745257275088548364400416034343698203025961200870116, 487858155600926, 63146478374109, - 4498401823887386, + 21888242871839275222246405745257275088548364400416034343698204181378000949274, 1756825552499889, - 4250333291753839, - 3468200613157298, - 2967968354852520, + 21888242871839275222246405745257275088548364400416034343698203933309468815727, + 21888242871839275222246405745257275088548364400416034343698203151176790219186, + 21888242871839275222246405745257275088548364400416034343698202650944531914408, 1052940686987981, 844953993657533, 1300787196144462, 15191044350900, 1524828893176070, - 3529081795852792, + 21888242871839275222246405745257275088548364400416034343698203212057972914680, 2218406587459568, - 3777350083953960, - 4154032352729565, + 21888242871839275222246405745257275088548364400416034343698203460326261015848, + 21888242871839275222246405745257275088548364400416034343698203837008529791453, 2117719957820083, - 2690895876222593, + 21888242871839275222246405745257275088548364400416034343698202373872053284481, 778561536171379, - 3790764824907471, + 21888242871839275222246405745257275088548364400416034343698203473741001969359, 57243855114814, - 3864179743436518, - 4323487647251819, - 2399551920775521, - 3466698750655860, + 21888242871839275222246405745257275088548364400416034343698203547155920498406, + 21888242871839275222246405745257275088548364400416034343698204006463824313707, + 21888242871839275222246405745257275088548364400416034343698202082528097837409, + 21888242871839275222246405745257275088548364400416034343698203149674927717748, 1679657015191360, - 4070374782185976, + 21888242871839275222246405745257275088548364400416034343698203753350959247864, 1446206104684263, 1271854961341420, 1327591728664766, @@ -24426,93 +24426,93 @@ pub global CRP: [Polynomial; L] = [ 922415823807928, 614273993614133, 1864184911741372, - 2999192330255702, - 3958098168210993, - 3516736799038736, - 2702857528313419, - 3247568566356933, + 21888242871839275222246405745257275088548364400416034343698202682168507317590, + 21888242871839275222246405745257275088548364400416034343698203641074345272881, + 21888242871839275222246405745257275088548364400416034343698203199712976100624, + 21888242871839275222246405745257275088548364400416034343698202385833705375307, + 21888242871839275222246405745257275088548364400416034343698202930544743418821, 1947193058314635, 173792525033125, - 3538437069264947, + 21888242871839275222246405745257275088548364400416034343698203221413246326835, 1732026417429551, - 3228401830101200, - 2929295682123674, + 21888242871839275222246405745257275088548364400416034343698202911378007163088, + 21888242871839275222246405745257275088548364400416034343698202612271859185562, 764972654203625, - 2725841431908468, - 2262155021676290, - 3171210896317150, - 3927983816722645, - 3609610919935655, + 21888242871839275222246405745257275088548364400416034343698202408817608970356, + 21888242871839275222246405745257275088548364400416034343698201945131198738178, + 21888242871839275222246405745257275088548364400416034343698202854187073379038, + 21888242871839275222246405745257275088548364400416034343698203610959993784533, + 21888242871839275222246405745257275088548364400416034343698203292587096997543, 1904345571605802, - 4384805992771128, + 21888242871839275222246405745257275088548364400416034343698204067782169833016, 320053938598857, 28004351109988, 1034982710385688, 2001339424058947, - 4379577184002224, - 2933962461233672, + 21888242871839275222246405745257275088548364400416034343698204062553361064112, + 21888242871839275222246405745257275088548364400416034343698202616938638295560, 831233287827165, - 3716481129452299, + 21888242871839275222246405745257275088548364400416034343698203399457306514187, 1119649202134375, 1351346579991540, - 2435989042313524, - 2622534537483271, + 21888242871839275222246405745257275088548364400416034343698202118965219375412, + 21888242871839275222246405745257275088548364400416034343698202305510714545159, 68900852518963, - 2638058297193816, - 3503856294980525, - 2447396418392343, - 3231949071894900, + 21888242871839275222246405745257275088548364400416034343698202321034474255704, + 21888242871839275222246405745257275088548364400416034343698203186832472042413, + 21888242871839275222246405745257275088548364400416034343698202130372595454231, + 21888242871839275222246405745257275088548364400416034343698202914925248956788, 1541791943095117, 1185373505706209, 240350833312227, 1599034782411326, 510901037696312, 1837415233573442, - 2740027915043329, + 21888242871839275222246405745257275088548364400416034343698202423004092105217, 766247025712399, - 2487147092197473, + 21888242871839275222246405745257275088548364400416034343698202170123269259361, 2134414474528196, 1216236795207392, - 2317494952746181, + 21888242871839275222246405745257275088548364400416034343698202000471129808069, 2250433791988144, - 3386996628767859, - 4045926628519745, + 21888242871839275222246405745257275088548364400416034343698203069972805829747, + 21888242871839275222246405745257275088548364400416034343698203728902805581633, 1374150755770097, 556721722639311, 744769212350486, 1936278110267298, - 3849180789234338, - 2515279384574558, - 4312828608670917, + 21888242871839275222246405745257275088548364400416034343698203532156966296226, + 21888242871839275222246405745257275088548364400416034343698202198255561636446, + 21888242871839275222246405745257275088548364400416034343698203995804785732805, 1531734061449029, - 3249924590360734, - 4123515241463223, - 3284017254389337, - 3031160536528132, - 4438322383524125, - 3333614158946004, + 21888242871839275222246405745257275088548364400416034343698202932900767422622, + 21888242871839275222246405745257275088548364400416034343698203806491418525111, + 21888242871839275222246405745257275088548364400416034343698202966993431451225, + 21888242871839275222246405745257275088548364400416034343698202714136713590020, + 21888242871839275222246405745257275088548364400416034343698204121298560586013, + 21888242871839275222246405745257275088548364400416034343698203016590336007892, 110666507828935, 2229702587645271, 1469996807380196, - 3019987124932892, + 21888242871839275222246405745257275088548364400416034343698202702963301994780, 1935171735010731, - 2284669596516016, - 2735356082594814, - 2268519175276284, - 2612334297789212, + 21888242871839275222246405745257275088548364400416034343698201967645773577904, + 21888242871839275222246405745257275088548364400416034343698202418332259656702, + 21888242871839275222246405745257275088548364400416034343698201951495352338172, + 21888242871839275222246405745257275088548364400416034343698202295310474851100, 1670751392029297, 1429856934076114, - 2971418437567984, - 2851551499811199, - 2340712786268738, + 21888242871839275222246405745257275088548364400416034343698202654394614629872, + 21888242871839275222246405745257275088548364400416034343698202534527676873087, + 21888242871839275222246405745257275088548364400416034343698202023688963330626, 255019084639781, - 3841108700318548, - 3670631558207926, - 2316508168511284, + 21888242871839275222246405745257275088548364400416034343698203524084877380436, + 21888242871839275222246405745257275088548364400416034343698203353607735269814, + 21888242871839275222246405745257275088548364400416034343698201999484345573172, 360742767383976, - 4295226195334403, + 21888242871839275222246405745257275088548364400416034343698203978202372396291, 2020994316504798, - 4298685824064234, + 21888242871839275222246405745257275088548364400416034343698203981662001126122, 924194637521289, 947440232786773, 1560802117600098, @@ -24521,90 +24521,90 @@ pub global CRP: [Polynomial; L] = [ 505642448212703, 1520273360464044, 519900396536499, - 2842234167631062, - 3557178892944717, + 21888242871839275222246405745257275088548364400416034343698202525210344692950, + 21888242871839275222246405745257275088548364400416034343698203240155070006605, 1892354021908084, 649125502192269, - 3801939525290156, - 2473166988248724, + 21888242871839275222246405745257275088548364400416034343698203484915702352044, + 21888242871839275222246405745257275088548364400416034343698202156143165310612, 980535513026773, - 2959453456084501, + 21888242871839275222246405745257275088548364400416034343698202642429633146389, 24152414514145, - 2531137776329354, + 21888242871839275222246405745257275088548364400416034343698202214113953391242, 230414314233730, 1955607126705663, 1694140801109143, 1598293977609630, - 2833461411008661, - 3840345798560349, - 3853351353994140, + 21888242871839275222246405745257275088548364400416034343698202516437588070549, + 21888242871839275222246405745257275088548364400416034343698203523321975622237, + 21888242871839275222246405745257275088548364400416034343698203536327531056028, 120411089492021, 34428904056090, 1956067622574201, - 2471710776234072, - 3586347986287142, - 3592230954332591, - 4379063611363301, - 2988998069877178, + 21888242871839275222246405745257275088548364400416034343698202154686953295960, + 21888242871839275222246405745257275088548364400416034343698203269324163349030, + 21888242871839275222246405745257275088548364400416034343698203275207131394479, + 21888242871839275222246405745257275088548364400416034343698204062039788425189, + 21888242871839275222246405745257275088548364400416034343698202671974246939066, 204209986468942, - 3008016533724418, - 3405545488923476, - 3650061994977793, + 21888242871839275222246405745257275088548364400416034343698202690992710786306, + 21888242871839275222246405745257275088548364400416034343698203088521665985364, + 21888242871839275222246405745257275088548364400416034343698203333038172039681, 2045829924641863, - 4183180898008243, + 21888242871839275222246405745257275088548364400416034343698203866157075070131, 73084002619811, 980419662267282, 1041992338182047, - 2804403952598764, - 2601595629734230, - 3279095084082558, + 21888242871839275222246405745257275088548364400416034343698202487380129660652, + 21888242871839275222246405745257275088548364400416034343698202284571806796118, + 21888242871839275222246405745257275088548364400416034343698202962071261144446, 160839311846719, - 2448483139898871, - 3859079417385570, + 21888242871839275222246405745257275088548364400416034343698202131459316960759, + 21888242871839275222246405745257275088548364400416034343698203542055594447458, 1522371723914474, - 4452957961941744, - 3867158075542252, - 3505478292325635, - 2977238005950918, + 21888242871839275222246405745257275088548364400416034343698204135934139003632, + 21888242871839275222246405745257275088548364400416034343698203550134252604140, + 21888242871839275222246405745257275088548364400416034343698203188454469387523, + 21888242871839275222246405745257275088548364400416034343698202660214183012806, 1589903782686446, 1591422432480188, 187203446040133, 22610280862356, - 2626345261448867, + 21888242871839275222246405745257275088548364400416034343698202309321438510755, 1438580552385678, 1841043545914591, 253546154968261, - 3839695100465628, - 4276010438003236, + 21888242871839275222246405745257275088548364400416034343698203522671277527516, + 21888242871839275222246405745257275088548364400416034343698203958986615065124, 400240222184003, 2192762998823058, 496237543149658, 30395525430418, - 2793917197284075, + 21888242871839275222246405745257275088548364400416034343698202476893374345963, 1298565006324181, - 3106709610668432, + 21888242871839275222246405745257275088548364400416034343698202789685787730320, 2193218233417894, - 4328452465731142, - 2771154494157402, - 4350069802232589, + 21888242871839275222246405745257275088548364400416034343698204011428642793030, + 21888242871839275222246405745257275088548364400416034343698202454130671219290, + 21888242871839275222246405745257275088548364400416034343698204033045979294477, 1064405372699352, - 2325526639791971, + 21888242871839275222246405745257275088548364400416034343698202008502816853859, 1500725863612028, 455103451972236, - 3165454624759473, - 3650620651300413, + 21888242871839275222246405745257275088548364400416034343698202848430801821361, + 21888242871839275222246405745257275088548364400416034343698203333596828362301, 1387966049612868, - 3772295776456902, + 21888242871839275222246405745257275088548364400416034343698203455271953518790, 921579174000818, - 3764652799420086, + 21888242871839275222246405745257275088548364400416034343698203447628976481974, 726208559285304, - 4001618661424258, + 21888242871839275222246405745257275088548364400416034343698203684594838486146, 1308933185128663, 2175352658849425, - 4301159635079096, - 3930787558349001, + 21888242871839275222246405745257275088548364400416034343698203984135812140984, + 21888242871839275222246405745257275088548364400416034343698203613763735410889, 41698665002310, - 4207799035630992, + 21888242871839275222246405745257275088548364400416034343698203890775212692880, 1272913091828037, 1612716904921543, 142833602123322, @@ -24614,103 +24614,103 @@ pub global CRP: [Polynomial; L] = [ Polynomial::new([ 671958250042108, 1312627666544762, - 4332606660920129, + 21888242871839275222246405745257275088548364400416034343698204015582834836289, 1821003197252415, - 2285922025398637, + 21888242871839275222246405745257275088548364400416034343698201968898199314797, 1438275849490496, - 4356507793746795, + 21888242871839275222246405745257275088548364400416034343698204039483967662955, 2245812200775190, - 4346242097082517, - 2771106065502229, + 21888242871839275222246405745257275088548364400416034343698204029218270998677, + 21888242871839275222246405745257275088548364400416034343698202454082239418389, 201457597350273, 1710456223897454, 1300985520846155, - 3063657298882193, - 3339768085465611, + 21888242871839275222246405745257275088548364400416034343698202746633472798353, + 21888242871839275222246405745257275088548364400416034343698203022744259381771, 1687831868624388, - 2900368970909642, - 3043394074503474, - 2557045976610340, + 21888242871839275222246405745257275088548364400416034343698202583345144825802, + 21888242871839275222246405745257275088548364400416034343698202726370248419634, + 21888242871839275222246405745257275088548364400416034343698202240022150526500, 357452928356635, 1224678141674590, 1802958966792793, - 3718525661899373, + 21888242871839275222246405745257275088548364400416034343698203401501835815533, 1727955775594832, 527225893784360, - 4325929753524902, + 21888242871839275222246405745257275088548364400416034343698204008905927441062, 1899505698815062, - 3675786007784133, - 2609233614967551, - 2436660868179168, + 21888242871839275222246405745257275088548364400416034343698203358762181700293, + 21888242871839275222246405745257275088548364400416034343698202292209788883711, + 21888242871839275222246405745257275088548364400416034343698202119637042095328, 771169422019084, 56527004809039, 297337474766351, 1527362267459771, - 3017152398308783, - 3309629186265363, - 4303200523450231, + 21888242871839275222246405745257275088548364400416034343698202700128572224943, + 21888242871839275222246405745257275088548364400416034343698202992605360181523, + 21888242871839275222246405745257275088548364400416034343698203986176697366391, 1311451474492215, - 3958822817894175, - 4169448515104789, + 21888242871839275222246405745257275088548364400416034343698203641798991810335, + 21888242871839275222246405745257275088548364400416034343698203852424689020949, 740747556336718, 428539694613975, 1461940550344357, 145247257976176, - 4034063785675095, - 3242612584225712, - 4090193613246093, - 3647450747363017, + 21888242871839275222246405745257275088548364400416034343698203717039959591255, + 21888242871839275222246405745257275088548364400416034343698202925588758141872, + 21888242871839275222246405745257275088548364400416034343698203773169787162253, + 21888242871839275222246405745257275088548364400416034343698203330426921279177, 1759614102999067, 639686942156191, 1999660079869003, - 3136545938553974, + 21888242871839275222246405745257275088548364400416034343698202819522112470134, 1436297751565018, - 4082494382595954, + 21888242871839275222246405745257275088548364400416034343698203765470556512114, 864592459196749, 199320398734624, 1723384329522278, - 2711565706772514, + 21888242871839275222246405745257275088548364400416034343698202394541880688674, 1764047661005982, 932172586622775, 1292035417822570, - 4246988170297543, - 4101391333988031, + 21888242871839275222246405745257275088548364400416034343698203929964344213703, + 21888242871839275222246405745257275088548364400416034343698203784367507904191, 643961914221557, - 2747190388674902, - 2774436800382535, - 3459317744774138, - 3461443385275996, + 21888242871839275222246405745257275088548364400416034343698202430166562591062, + 21888242871839275222246405745257275088548364400416034343698202457412974298695, + 21888242871839275222246405745257275088548364400416034343698203142293918690298, + 21888242871839275222246405745257275088548364400416034343698203144419559192156, 1988988549570227, 2103822932190367, 72296353227273, 624930955187650, - 3019208727810812, + 21888242871839275222246405745257275088548364400416034343698202702184901726972, 730878235130950, 68484824693307, - 3533762749837090, - 4153822346953592, + 21888242871839275222246405745257275088548364400416034343698203216738923753250, + 21888242871839275222246405745257275088548364400416034343698203836798520869752, 1768681182359011, - 2823381420502145, + 21888242871839275222246405745257275088548364400416034343698202506357594418305, 1767515740923099, 792586744252537, - 3063005313991924, + 21888242871839275222246405745257275088548364400416034343698202745981487908084, 1306784930382631, - 3687509261709383, - 2675404560581985, + 21888242871839275222246405745257275088548364400416034343698203370485435625543, + 21888242871839275222246405745257275088548364400416034343698202358380734498145, 169863397195435, 253943794138981, 162139063975795, 1106051760076028, - 3977539691173916, - 4338576725396565, + 21888242871839275222246405745257275088548364400416034343698203660515865090076, + 21888242871839275222246405745257275088548364400416034343698204021552899312725, 2144106056134287, 78938153870643, - 2334185003022557, + 21888242871839275222246405745257275088548364400416034343698202017161176938717, 2113941736447277, - 3764519768208444, + 21888242871839275222246405745257275088548364400416034343698203447495942124604, 1200830973121221, - 2921974793852661, - 2396895399290787, + 21888242871839275222246405745257275088548364400416034343698202604950967768821, + 21888242871839275222246405745257275088548364400416034343698202079871573206947, 2002264490157406, 322393677233420, 858446718477869, @@ -24719,146 +24719,146 @@ pub global CRP: [Polynomial; L] = [ 413328466993474, 1107709915566959, 1327122951565330, - 3360961225761675, + 21888242871839275222246405745257275088548364400416034343698203043937399677835, 1573454662238817, 1818885640773838, 856368343168286, - 2790136290136267, - 3784911169226509, - 2774202235249871, + 21888242871839275222246405745257275088548364400416034343698202473112464052427, + 21888242871839275222246405745257275088548364400416034343698203467887343142669, + 21888242871839275222246405745257275088548364400416034343698202457178409166031, 1666196217027528, - 3008046950020782, + 21888242871839275222246405745257275088548364400416034343698202691023123936942, 2054553514570440, 2124351499704092, - 2369689835296798, - 4342393000197735, - 2401353841219799, + 21888242871839275222246405745257275088548364400416034343698202052666009212958, + 21888242871839275222246405745257275088548364400416034343698204025369174113895, + 21888242871839275222246405745257275088548364400416034343698202084330015135959, 807464936601583, 2184632264359424, - 2725609801319218, - 3810091557632557, + 21888242871839275222246405745257275088548364400416034343698202408585975235378, + 21888242871839275222246405745257275088548364400416034343698203493067731548717, 550361031908347, 1226569580013607, - 3115202623950709, - 3296336801527821, + 21888242871839275222246405745257275088548364400416034343698202798178797866869, + 21888242871839275222246405745257275088548364400416034343698202979312975443981, 1382278936495303, - 3744531880284007, - 2693219449754206, + 21888242871839275222246405745257275088548364400416034343698203427508054200167, + 21888242871839275222246405745257275088548364400416034343698202376195623670366, 250205703714518, 510657176158399, - 2302512048791373, + 21888242871839275222246405745257275088548364400416034343698201985488222707533, 78332433077788, 881441014463773, - 2867353682057650, + 21888242871839275222246405745257275088548364400416034343698202550329855973810, 305157627805016, 1346435327476011, 834993933271298, - 4154943877272115, - 3449963479758726, + 21888242871839275222246405745257275088548364400416034343698203837920051188275, + 21888242871839275222246405745257275088548364400416034343698203132939653674886, 1582906900614225, - 2660902430497346, - 3225419612052241, - 2590102867163653, + 21888242871839275222246405745257275088548364400416034343698202343878604413506, + 21888242871839275222246405745257275088548364400416034343698202908395785968401, + 21888242871839275222246405745257275088548364400416034343698202273079041079813, 1642993692559410, - 3216430294402463, + 21888242871839275222246405745257275088548364400416034343698202899406468318623, 1895946695255018, 819225581533887, 267842909417836, 2204322004612750, 447031680933442, - 2880966664806975, + 21888242871839275222246405745257275088548364400416034343698202563942838723135, 404609379732798, 719936217089580, - 2997155119465201, - 2512639162325635, - 2355038639287644, - 3402721104608536, - 4452822287478712, + 21888242871839275222246405745257275088548364400416034343698202680131293381361, + 21888242871839275222246405745257275088548364400416034343698202195615336241795, + 21888242871839275222246405745257275088548364400416034343698202038014813203804, + 21888242871839275222246405745257275088548364400416034343698203085697278524696, + 21888242871839275222246405745257275088548364400416034343698204135798461394872, 1867243759861136, - 3847444324617357, + 21888242871839275222246405745257275088548364400416034343698203530420498533517, 817219615046923, 1201770202435820, 59293339176046, - 2448448365482363, + 21888242871839275222246405745257275088548364400416034343698202131424539398523, 81686840798148, 1510220222771729, - 2790697819924807, - 4069597060010950, - 3484193888852882, + 21888242871839275222246405745257275088548364400416034343698202473673993840967, + 21888242871839275222246405745257275088548364400416034343698203752573233927110, + 21888242871839275222246405745257275088548364400416034343698203167170062769042, 91252525821579, 111327512603384, 340890192516994, - 3844373928434336, - 4292137033294561, - 2651900002747543, - 4028667144960121, - 3429817796780142, + 21888242871839275222246405745257275088548364400416034343698203527350102350496, + 21888242871839275222246405745257275088548364400416034343698203975113207210721, + 21888242871839275222246405745257275088548364400416034343698202334876176663703, + 21888242871839275222246405745257275088548364400416034343698203711643318876281, + 21888242871839275222246405745257275088548364400416034343698203112793970696302, 394333610214393, 310798837126183, - 4109225517328405, - 2523084436798224, - 3293677545451915, + 21888242871839275222246405745257275088548364400416034343698203792201691244565, + 21888242871839275222246405745257275088548364400416034343698202206060610714384, + 21888242871839275222246405745257275088548364400416034343698202976653719368075, 2086832940050712, 805839576119383, - 2329230368848287, - 2470941005871867, - 3989456399489743, + 21888242871839275222246405745257275088548364400416034343698202012206542764447, + 21888242871839275222246405745257275088548364400416034343698202153917179788027, + 21888242871839275222246405745257275088548364400416034343698203672432573405903, 432147103215261, 1092359582402719, - 2373318507644647, - 4092740572153440, - 3216981827684777, + 21888242871839275222246405745257275088548364400416034343698202056294681560807, + 21888242871839275222246405745257275088548364400416034343698203775716746069600, + 21888242871839275222246405745257275088548364400416034343698202899958001600937, 612020231466234, - 3941312448695136, + 21888242871839275222246405745257275088548364400416034343698203624288622611296, 1852064098831366, - 2608399931126808, + 21888242871839275222246405745257275088548364400416034343698202291376105042968, 2185101231820253, - 3249399494708496, - 4383331746777475, + 21888242871839275222246405745257275088548364400416034343698202932375668624656, + 21888242871839275222246405745257275088548364400416034343698204066307920693635, 1180974178593343, 385640465912454, - 2588641754415466, - 3065852619243481, + 21888242871839275222246405745257275088548364400416034343698202271617928331626, + 21888242871839275222246405745257275088548364400416034343698202748828793159641, 52790211632195, 1729471699993099, - 2627826011831392, - 2482711284883174, - 2982525254004164, - 2779253424571045, + 21888242871839275222246405745257275088548364400416034343698202310802185747552, + 21888242871839275222246405745257275088548364400416034343698202165687458799334, + 21888242871839275222246405745257275088548364400416034343698202665501427920324, + 21888242871839275222246405745257275088548364400416034343698202462229598487205, 113126624161133, 1297051596023919, 1898710772975711, 1312537402950275, - 4360342833584608, + 21888242871839275222246405745257275088548364400416034343698204043319007500768, 1344503779312384, - 3201542579929540, - 4234849498831224, + 21888242871839275222246405745257275088548364400416034343698202884518753845700, + 21888242871839275222246405745257275088548364400416034343698203917825672747384, 1522207630313142, 143273072934486, 295721837352681, 2130300742904410, - 4375446595004009, - 3912885976294815, + 21888242871839275222246405745257275088548364400416034343698204058422768920169, + 21888242871839275222246405745257275088548364400416034343698203595862150210975, 1251340761964882, - 2715421916464369, + 21888242871839275222246405745257275088548364400416034343698202398398090380529, 578615454317614, - 2566145537302407, + 21888242871839275222246405745257275088548364400416034343698202249121711218567, 1905006541362720, 1431503781646799, 1322990521021595, - 3504835916687607, - 4397298121316791, - 3524588236622103, - 3374497927078657, - 3097042600723130, - 2974351168108327, - 3836674237865868, + 21888242871839275222246405745257275088548364400416034343698203187812090603767, + 21888242871839275222246405745257275088548364400416034343698204080274295232951, + 21888242871839275222246405745257275088548364400416034343698203207564410538263, + 21888242871839275222246405745257275088548364400416034343698203057474100994817, + 21888242871839275222246405745257275088548364400416034343698202780018774639290, + 21888242871839275222246405745257275088548364400416034343698202657327342024487, + 21888242871839275222246405745257275088548364400416034343698203519650411782028, 1037635699791048, 212226651681395, 533782676586389, 1042525832986048, 439845798916932, - 4273431235414756, + 21888242871839275222246405745257275088548364400416034343698203956407409330916, 18464084687243, 313445752535960, 1719829624756538, @@ -24867,286 +24867,286 @@ pub global CRP: [Polynomial; L] = [ 1792844031621392, 1739610599088921, 576390129746213, - 3448384438048754, + 21888242871839275222246405745257275088548364400416034343698203131360611964914, 1667848293953172, 749264737259264, 1457585445111712, - 2500523675863579, - 3229557645567312, - 3768444111246850, + 21888242871839275222246405745257275088548364400416034343698202183499849779739, + 21888242871839275222246405745257275088548364400416034343698202912533819483472, + 21888242871839275222246405745257275088548364400416034343698203451420285163010, 883017226638185, 851107424809890, - 2639685335693627, + 21888242871839275222246405745257275088548364400416034343698202322661509609787, 1939052722693134, - 4323471840229240, + 21888242871839275222246405745257275088548364400416034343698204006448014145400, 601511224775260, 1984199457605843, - 2874298355521601, + 21888242871839275222246405745257275088548364400416034343698202557274529437761, 204798883286322, - 4447569606400529, + 21888242871839275222246405745257275088548364400416034343698204130545780316689, 1568707669088198, 1417346151115459, - 3047894065449023, + 21888242871839275222246405745257275088548364400416034343698202730870239365183, 1426815297774681, - 4469420595045035, + 21888242871839275222246405745257275088548364400416034343698204152396768961195, 476416673979252, 1911948292195963, 1558757179364281, 398038088908974, 1522862257002908, - 3928800618151506, + 21888242871839275222246405745257275088548364400416034343698203611776792067666, 1714231959391455, 291638245076357, 519105997864856, 1865200515458477, - 2998941962488854, - 3365548037698871, + 21888242871839275222246405745257275088548364400416034343698202681918136405014, + 21888242871839275222246405745257275088548364400416034343698203048524211615031, 2228720461749802, - 2718957854556358, + 21888242871839275222246405745257275088548364400416034343698202401934028472518, 1454429721061814, 69164889629125, 1212440149044064, - 3474929794906368, - 3340716297135408, - 2867610396559296, + 21888242871839275222246405745257275088548364400416034343698203157905968822528, + 21888242871839275222246405745257275088548364400416034343698203023692471051568, + 21888242871839275222246405745257275088548364400416034343698202550586570475456, 376924718946412, - 3879783375298452, - 4263215121658267, - 2658267653960541, - 4485094383967665, + 21888242871839275222246405745257275088548364400416034343698203562759549214612, + 21888242871839275222246405745257275088548364400416034343698203946191295574427, + 21888242871839275222246405745257275088548364400416034343698202341243827876701, + 21888242871839275222246405745257275088548364400416034343698204168070557883825, 431825723905828, - 3334490997785070, + 21888242871839275222246405745257275088548364400416034343698203017467171701230, 932998048540402, - 4140274781431178, + 21888242871839275222246405745257275088548364400416034343698203823250955347338, 1568630852809059, 846785331807691, 725747755860298, 1345317688774594, 1716650367842085, - 3883476587351724, + 21888242871839275222246405745257275088548364400416034343698203566452761267884, 2002440981729429, 1322540565281978, 1555233188712100, - 2993574835047563, + 21888242871839275222246405745257275088548364400416034343698202676551008963723, 1187695991250410, 689461341136058, - 4309028888882859, + 21888242871839275222246405745257275088548364400416034343698203992005062799019, 1561468757557032, - 4174524928654632, - 4066180682515720, - 4324199445077279, - 3461888824334272, - 2447903886028580, - 3403943728561738, - 2269596685387404, + 21888242871839275222246405745257275088548364400416034343698203857501102570792, + 21888242871839275222246405745257275088548364400416034343698203749156856431880, + 21888242871839275222246405745257275088548364400416034343698204007175618993439, + 21888242871839275222246405745257275088548364400416034343698203144864998250432, + 21888242871839275222246405745257275088548364400416034343698202130880059944740, + 21888242871839275222246405745257275088548364400416034343698203086919902477898, + 21888242871839275222246405745257275088548364400416034343698201952572859303564, 1193306682495853, 2176180434651286, 2112131220679136, 1233665044066227, - 3045945888832506, + 21888242871839275222246405745257275088548364400416034343698202728922062748666, 1066688036182613, 149375087796090, - 3366943651674843, + 21888242871839275222246405745257275088548364400416034343698203049919825591003, 1933586790223581, 1105891096454868, - 2293256371606338, - 3477264336101587, - 2681061217995886, + 21888242871839275222246405745257275088548364400416034343698201976232545522498, + 21888242871839275222246405745257275088548364400416034343698203160240510017747, + 21888242871839275222246405745257275088548364400416034343698202364037391912046, 1427843061018047, 515814325116945, 1520572516508588, - 3324304174988923, + 21888242871839275222246405745257275088548364400416034343698203007280348905083, 744112049512735, - 3531801585465501, + 21888242871839275222246405745257275088548364400416034343698203214777759381661, 1630858823191544, 316000976449689, 1068879791991661, 1082770623356632, - 3532971492386966, - 2637627102271604, + 21888242871839275222246405745257275088548364400416034343698203215947666303126, + 21888242871839275222246405745257275088548364400416034343698202320603276187764, 1647532645827846, - 4429744681409295, - 4258003194622988, - 2518898740733950, + 21888242871839275222246405745257275088548364400416034343698204112720855325455, + 21888242871839275222246405745257275088548364400416034343698203940979368539148, + 21888242871839275222246405745257275088548364400416034343698202201874914650110, 1499280122144481, 1141639310475708, - 3962979104703059, + 21888242871839275222246405745257275088548364400416034343698203645955278619219, 1202663970186519, 937976333431826, 709420419574568, - 3679628895370187, + 21888242871839275222246405745257275088548364400416034343698203362605069286347, 1024541986279326, 201701035322738, - 3257450717851917, + 21888242871839275222246405745257275088548364400416034343698202940426891768077, 64291240916207, - 2269626536410028, + 21888242871839275222246405745257275088548364400416034343698201952602710326188, 1992429087838245, - 2717383829547505, - 3445088976881095, - 2437775976048364, + 21888242871839275222246405745257275088548364400416034343698202400360003463665, + 21888242871839275222246405745257275088548364400416034343698203128065150797255, + 21888242871839275222246405745257275088548364400416034343698202120752149964524, 750790164209488, - 4134293584484353, - 3420334100978923, + 21888242871839275222246405745257275088548364400416034343698203817269758400513, + 21888242871839275222246405745257275088548364400416034343698203103310274895083, 73653487038582, - 3709470030819221, + 21888242871839275222246405745257275088548364400416034343698203392446204735381, 1589772758129429, 985638190762165, 70536340230075, 1683783290281191, 1720777583652192, - 2738664372135109, - 3097670024292670, + 21888242871839275222246405745257275088548364400416034343698202421640546051269, + 21888242871839275222246405745257275088548364400416034343698202780646198208830, 1851926373608281, 734249336262855, 1620462153164431, 1318799865359147, 1475028243443558, 805074188142301, - 3495078514973990, + 21888242871839275222246405745257275088548364400416034343698203178054688890150, 1938180276298471, - 4067510619346709, + 21888242871839275222246405745257275088548364400416034343698203750486793262869, 1486263008888893, - 3658503387393263, + 21888242871839275222246405745257275088548364400416034343698203341479561309423, 1954276924525647, - 3254283346263438, + 21888242871839275222246405745257275088548364400416034343698202937259520179598, 1023719450069508, 1746924888439911, 1491803126715153, 1516203281512319, - 2858383417033857, - 3144029926566894, + 21888242871839275222246405745257275088548364400416034343698202541359590950017, + 21888242871839275222246405745257275088548364400416034343698202827006100483054, 470277242881764, - 3095139085185942, + 21888242871839275222246405745257275088548364400416034343698202778115259102102, 171817995789565, - 2550661794985297, + 21888242871839275222246405745257275088548364400416034343698202233637968901457, 196246315451722, - 2630238468353140, - 4388943903679407, + 21888242871839275222246405745257275088548364400416034343698202313214642269300, + 21888242871839275222246405745257275088548364400416034343698204071920077595567, 717338390378827, - 2331950870242935, + 21888242871839275222246405745257275088548364400416034343698202014927044159095, 2013749545551888, - 2286639329468456, - 2757913307617644, - 2664010062943003, + 21888242871839275222246405745257275088548364400416034343698201969615503384616, + 21888242871839275222246405745257275088548364400416034343698202440889481533804, + 21888242871839275222246405745257275088548364400416034343698202346986236859163, 2031317850600292, - 2746819277869310, - 3600689032236993, + 21888242871839275222246405745257275088548364400416034343698202429795451785470, + 21888242871839275222246405745257275088548364400416034343698203283665206153153, 2129753151944476, - 2865794064401652, + 21888242871839275222246405745257275088548364400416034343698202548770238317812, 1097582720037629, 1831864172596478, 41047992704325, - 2924660647058295, - 3751621339974121, + 21888242871839275222246405745257275088548364400416034343698202607636820974455, + 21888242871839275222246405745257275088548364400416034343698203434597513890281, 542321556503950, 819613255342347, - 3102075540640415, - 2739318312948716, - 2635698318690212, + 21888242871839275222246405745257275088548364400416034343698202785051714556575, + 21888242871839275222246405745257275088548364400416034343698202422294486864876, + 21888242871839275222246405745257275088548364400416034343698202318674492606372, 833837627179701, - 3503212073566371, + 21888242871839275222246405745257275088548364400416034343698203186188247482531, 859103253828134, 180125868800170, 482783483588488, 43252118835715, 1164015687709460, - 3765147478555407, + 21888242871839275222246405745257275088548364400416034343698203448123652471567, 1627561376899854, 563147905592704, - 4488778189391318, + 21888242871839275222246405745257275088548364400416034343698204171754363307478, 1113114104768952, - 2806574820563714, + 21888242871839275222246405745257275088548364400416034343698202489550994479874, 2141806174431930, 72957235878729, - 2341481286355439, - 2763497591331289, - 3950302801290405, - 4290469448534495, + 21888242871839275222246405745257275088548364400416034343698202024457460271599, + 21888242871839275222246405745257275088548364400416034343698202446473765247449, + 21888242871839275222246405745257275088548364400416034343698203633278975206565, + 21888242871839275222246405745257275088548364400416034343698203973445622450655, 514788736529296, 1221511350483580, 914442457909904, - 3930722519233613, + 21888242871839275222246405745257275088548364400416034343698203613698693149773, 1071648015571095, - 2475086036330938, - 2982581273480808, + 21888242871839275222246405745257275088548364400416034343698202158062210247098, + 21888242871839275222246405745257275088548364400416034343698202665557447396968, 1944381863320243, 1741612840168394, 1161112594574494, - 3522865680078041, - 4093505538148166, - 3599459230468859, + 21888242871839275222246405745257275088548364400416034343698203205841853994201, + 21888242871839275222246405745257275088548364400416034343698203776481712064326, + 21888242871839275222246405745257275088548364400416034343698203282435404385019, 644900910969306, 895321392860511, - 2696508247370979, + 21888242871839275222246405745257275088548364400416034343698202379484421287139, 1735714008145485, 1287319964759473, 542713844895180, 1587523032620862, - 4279399630933143, + 21888242871839275222246405745257275088548364400416034343698203962375804849303, 112226296802946, - 3078648312180671, + 21888242871839275222246405745257275088548364400416034343698202761624486096831, 1475218048542721, 1221250453064709, 515221227337802, 1502376926855578, 1967904696567534, - 2644338520855664, - 3310763624827226, - 3812614860287750, + 21888242871839275222246405745257275088548364400416034343698202327314694771824, + 21888242871839275222246405745257275088548364400416034343698202993739798743386, + 21888242871839275222246405745257275088548364400416034343698203495591034203910, 1829929199232559, 797183451701402, - 3338453521353614, - 4324593521107128, + 21888242871839275222246405745257275088548364400416034343698203021429695269774, + 21888242871839275222246405745257275088548364400416034343698204007569695023288, 1949577973902014, - 2488394231798971, - 2707585803759886, - 3313778376229445, + 21888242871839275222246405745257275088548364400416034343698202171370405715131, + 21888242871839275222246405745257275088548364400416034343698202390561977676046, + 21888242871839275222246405745257275088548364400416034343698202996754550145605, 930110904848158, 1992355854928822, 1199996477098214, - 3189148566726185, + 21888242871839275222246405745257275088548364400416034343698202872124740642345, 1746528185883259, 1191710252174703, - 2472518842760750, + 21888242871839275222246405745257275088548364400416034343698202155495016676910, 193593780540104, - 3007587076219958, + 21888242871839275222246405745257275088548364400416034343698202690563250136118, 423917526129181, 746483575910072, 746224628101652, 199839402925825, 1241600978045469, 2117880985335157, - 2535416613691422, - 2470846595659516, + 21888242871839275222246405745257275088548364400416034343698202218392787607582, + 21888242871839275222246405745257275088548364400416034343698202153822769575676, 48040668831391, - 2673590123390566, - 3140378309732545, - 4180175024782355, - 4134826084476462, - 3256338639013490, + 21888242871839275222246405745257275088548364400416034343698202356566297306726, + 21888242871839275222246405745257275088548364400416034343698202823354483648705, + 21888242871839275222246405745257275088548364400416034343698203863151198698515, + 21888242871839275222246405745257275088548364400416034343698203817802258392622, + 21888242871839275222246405745257275088548364400416034343698202939314812929650, 1799853169778127, 1525612942143189, 588658479471436, - 3067179034980185, + 21888242871839275222246405745257275088548364400416034343698202750155208896345, 980943216545157, - 4284247139868378, + 21888242871839275222246405745257275088548364400416034343698203967223313784538, 455733814593731, - 3433241371058046, - 2317985760049911, + 21888242871839275222246405745257275088548364400416034343698203116217544974206, + 21888242871839275222246405745257275088548364400416034343698202000961933966071, 1056052549268150, - 4154538824432774, + 21888242871839275222246405745257275088548364400416034343698203837514998348934, 2168258105018244, 557075050334076, - 4316616025506681, + 21888242871839275222246405745257275088548364400416034343698203999592199422841, 2001167517306443, - 2767278493574092, + 21888242871839275222246405745257275088548364400416034343698202450254667490252, 1698635540604306, 1822960319076789, 2020795414188271, - 3907090078100244, - 4025559243504106, - 2369596514469061, - 3512585991274536, + 21888242871839275222246405745257275088548364400416034343698203590066252016404, + 21888242871839275222246405745257275088548364400416034343698203708535417420266, + 21888242871839275222246405745257275088548364400416034343698202052572688385221, + 21888242871839275222246405745257275088548364400416034343698203195562165190696, 2121915367758213, 839904747031898, 1399124168795309, @@ -25155,59 +25155,59 @@ pub global CRP: [Polynomial; L] = [ 367727761805745, 95328766358072, 422110498275380, - 4308837343379369, - 2995315542798429, + 21888242871839275222246405745257275088548364400416034343698203991813517295529, + 21888242871839275222246405745257275088548364400416034343698202678291716714589, 1241904682525483, 1396926593153787, 2244987095498331, 1870272942880864, 1569844529640370, - 3619087194196912, + 21888242871839275222246405745257275088548364400416034343698203302063368113072, 718913784547006, - 2444007408800039, - 3653413224395115, + 21888242871839275222246405745257275088548364400416034343698202126983582716199, + 21888242871839275222246405745257275088548364400416034343698203336389398311275, 1108505067588571, - 2618326774811798, - 3931247793811918, - 3309732554501734, + 21888242871839275222246405745257275088548364400416034343698202301302948727958, + 21888242871839275222246405745257275088548364400416034343698203614223967728078, + 21888242871839275222246405745257275088548364400416034343698202992708728417894, 2198928018816642, 783794601780551, - 2853018672708476, + 21888242871839275222246405745257275088548364400416034343698202535994846624636, 1833596780357396, 2240951047440829, 2086735467417622, 1490854322220608, - 3868365770169326, + 21888242871839275222246405745257275088548364400416034343698203551341944085486, 568668615629729, 1479961174423398, 2064252654384184, - 4451212041772505, - 4146031716566478, - 3094422498910074, + 21888242871839275222246405745257275088548364400416034343698204134188215688665, + 21888242871839275222246405745257275088548364400416034343698203829007890482638, + 21888242871839275222246405745257275088548364400416034343698202777398672826234, 1165015535986407, - 3730739585078939, + 21888242871839275222246405745257275088548364400416034343698203413715758995099, 321822529366203, 1943489097447466, - 2597649556454164, + 21888242871839275222246405745257275088548364400416034343698202280625730370324, 916988565323721, - 3391630048868754, + 21888242871839275222246405745257275088548364400416034343698203074606222784914, 1377602656096503, 351155440072253, 390934997810720, 1638521095516131, - 3639978509684620, - 4060413674663869, - 2830853843050207, - 2253021439921345, - 2973891096482248, + 21888242871839275222246405745257275088548364400416034343698203322954683600780, + 21888242871839275222246405745257275088548364400416034343698203743389848580029, + 21888242871839275222246405745257275088548364400416034343698202513830016966367, + 21888242871839275222246405745257275088548364400416034343698201935997613837505, + 21888242871839275222246405745257275088548364400416034343698202656867270398408, 1637471372353562, 892776170385199, - 4455598706388166, - 3710234465907593, - 2626781263232135, + 21888242871839275222246405745257275088548364400416034343698204138574880304326, + 21888242871839275222246405745257275088548364400416034343698203393210639823753, + 21888242871839275222246405745257275088548364400416034343698202309757437148295, 1338348629558250, - 3188257993667252, - 4371578742562057, + 21888242871839275222246405745257275088548364400416034343698202871234167583412, + 21888242871839275222246405745257275088548364400416034343698204054554916478217, 504052348851177, 910153813832884, 208258532204242, @@ -25218,44 +25218,44 @@ pub global CRP: [Polynomial; L] = [ 672458712786925, 1373497686116644, 78976201078438, - 2521853266428435, - 2776451031613386, - 4104877010290281, + 21888242871839275222246405745257275088548364400416034343698202204829440344595, + 21888242871839275222246405745257275088548364400416034343698202459427205529546, + 21888242871839275222246405745257275088548364400416034343698203787853184206441, 2145035015415830, 173466236989569, - 3476508541161473, + 21888242871839275222246405745257275088548364400416034343698203159484715077633, 469925970308251, - 3176589355657619, - 2986326515258628, + 21888242871839275222246405745257275088548364400416034343698202859565529573779, + 21888242871839275222246405745257275088548364400416034343698202669302689174788, 1850899530288954, 1869206034433648, 353687007141418, - 2278392719755752, - 3285871309136554, - 2372197105902674, + 21888242871839275222246405745257275088548364400416034343698201961368893671912, + 21888242871839275222246405745257275088548364400416034343698202968847483052714, + 21888242871839275222246405745257275088548364400416034343698202055173279818834, 471679604168053, 2122170403516989, - 4119567825413376, - 4299937106385578, - 3366075636031722, + 21888242871839275222246405745257275088548364400416034343698203802543999329536, + 21888242871839275222246405745257275088548364400416034343698203982913280301738, + 21888242871839275222246405745257275088548364400416034343698203049051809947882, 1774271669242129, 111866166712873, 2116391372755020, - 3256925835578742, + 21888242871839275222246405745257275088548364400416034343698202939902009494902, 213846881735621, 194940070822653, - 3477843221972125, + 21888242871839275222246405745257275088548364400416034343698203160819395888285, 1691631851997681, - 4118032434817665, + 21888242871839275222246405745257275088548364400416034343698203801008608733825, 1352306617384360, 1589454099497205, - 4503392300477861, - 4263111508270477, + 21888242871839275222246405745257275088548364400416034343698204186368474394021, + 21888242871839275222246405745257275088548364400416034343698203946087682186637, 243150496765685, - 2625996443193795, + 21888242871839275222246405745257275088548364400416034343698202308972617109955, 1450891805033118, - 3648023453696423, - 3701474342988997, + 21888242871839275222246405745257275088548364400416034343698203330999627612583, + 21888242871839275222246405745257275088548364400416034343698203384450516905157, 995446756254420, 1838812983646068, 602525172678994, @@ -25263,508 +25263,508 @@ pub global CRP: [Polynomial; L] = [ 1216990279602408, 905022288568053, 1238255635761400, - 2666019397685284, + 21888242871839275222246405745257275088548364400416034343698202348995571601444, 1071076227502233, - 3472079863148391, - 2950571066743194, + 21888242871839275222246405745257275088548364400416034343698203155056037064551, + 21888242871839275222246405745257275088548364400416034343698202633547240659354, 1957466418892354, - 4398125057531521, + 21888242871839275222246405745257275088548364400416034343698204081101231447681, 150898182683862, 727222590318574, - 3321563520503060, - 4111041184042387, - 2893649238519869, + 21888242871839275222246405745257275088548364400416034343698203004539694419220, + 21888242871839275222246405745257275088548364400416034343698203794017357958547, + 21888242871839275222246405745257275088548364400416034343698202576625412436029, 898875787548313, - 3166351971707817, + 21888242871839275222246405745257275088548364400416034343698202849328145623977, 412830389126405, - 4076553167045513, + 21888242871839275222246405745257275088548364400416034343698203759529340961673, 392147891655921, - 3349819367393097, + 21888242871839275222246405745257275088548364400416034343698203032795541309257, 1355458125406603, 848929234371398, 943979133137679, - 2420747328879559, + 21888242871839275222246405745257275088548364400416034343698202103723502795719, 285823933137495, - 2900776313974508, - 2886143717551463, + 21888242871839275222246405745257275088548364400416034343698202583752487890668, + 21888242871839275222246405745257275088548364400416034343698202569119891467623, 371585954257137, 229121742183938, 888160337693110, 1477570276294775, 1509098877278179, - 3558101623493114, - 4460918413252729, - 3439290306253449, + 21888242871839275222246405745257275088548364400416034343698203241077797409274, + 21888242871839275222246405745257275088548364400416034343698204143894587168889, + 21888242871839275222246405745257275088548364400416034343698203122266480169609, 316577447853940, - 3697301229948685, + 21888242871839275222246405745257275088548364400416034343698203380277403864845, 1902933108043179, 2161889865149136, 1224783248675770, - 3741383991659952, - 3114558364267901, - 3855056203041265, - 2586757959734158, + 21888242871839275222246405745257275088548364400416034343698203424360165576112, + 21888242871839275222246405745257275088548364400416034343698202797534538184061, + 21888242871839275222246405745257275088548364400416034343698203538032376957425, + 21888242871839275222246405745257275088548364400416034343698202269734133650318, 1988401283206867, 496088737002195, - 3540378310156383, - 2389924419274547, - 2516172531587400, - 2656944036611371, - 3434501343477105, - 4412621099350295, + 21888242871839275222246405745257275088548364400416034343698203223354484072543, + 21888242871839275222246405745257275088548364400416034343698202072900593190707, + 21888242871839275222246405745257275088548364400416034343698202199148705503560, + 21888242871839275222246405745257275088548364400416034343698202339920210527531, + 21888242871839275222246405745257275088548364400416034343698203117477517393265, + 21888242871839275222246405745257275088548364400416034343698204095597273266455, 794100228392009, - 2498481297291799, + 21888242871839275222246405745257275088548364400416034343698202181457471207959, 1408291580795959, 1246656078238016, 313208828558562, - 3021638182989046, + 21888242871839275222246405745257275088548364400416034343698202704614356905206, 761627421415032, 1537163260195157, - 2517688074684974, + 21888242871839275222246405745257275088548364400416034343698202200664248601134, 1690972957320833, 902140878314104, 1112387912928468, - 3328308520637356, + 21888242871839275222246405745257275088548364400416034343698203011284694553516, 825223949955200, - 2791096648871392, + 21888242871839275222246405745257275088548364400416034343698202474072822787552, 1842874051617295, - 2944276205941345, - 4376902941857396, + 21888242871839275222246405745257275088548364400416034343698202627252379857505, + 21888242871839275222246405745257275088548364400416034343698204059879115773556, 1764360077069861, 940563414078157, - 4112118292534961, - 2605415598550199, - 4165926128867859, - 4215174586275605, - 3130757172754659, + 21888242871839275222246405745257275088548364400416034343698203795094466451121, + 21888242871839275222246405745257275088548364400416034343698202288391772466359, + 21888242871839275222246405745257275088548364400416034343698203848902302784019, + 21888242871839275222246405745257275088548364400416034343698203898150760191765, + 21888242871839275222246405745257275088548364400416034343698202813733346670819, 1168714616848481, 315315823495831, - 4105500954151316, + 21888242871839275222246405745257275088548364400416034343698203788477128067476, 299127034215231, 1164031817090054, 888097378588391, 103964167564166, - 3514118660816927, + 21888242871839275222246405745257275088548364400416034343698203197094834733087, 971040216820724, - 4285435696211234, - 3063719360267894, - 4193203348021263, - 4479603756360492, - 3776268460882851, - 4024748719831191, - 4497375663211450, - 3211214436977992, + 21888242871839275222246405745257275088548364400416034343698203968411870127394, + 21888242871839275222246405745257275088548364400416034343698202746695534184054, + 21888242871839275222246405745257275088548364400416034343698203876179521937423, + 21888242871839275222246405745257275088548364400416034343698204162579930276652, + 21888242871839275222246405745257275088548364400416034343698203459244634799011, + 21888242871839275222246405745257275088548364400416034343698203707724893747351, + 21888242871839275222246405745257275088548364400416034343698204180351837127610, + 21888242871839275222246405745257275088548364400416034343698202894190610894152, 883398792338174, - 4061815884696114, - 3397719519940796, - 2436438534859168, + 21888242871839275222246405745257275088548364400416034343698203744792058612274, + 21888242871839275222246405745257275088548364400416034343698203080695693856956, + 21888242871839275222246405745257275088548364400416034343698202119414708775328, 1905283831416401, - 2333631694912649, - 2593933602022149, + 21888242871839275222246405745257275088548364400416034343698202016607868828809, + 21888242871839275222246405745257275088548364400416034343698202276909775938309, 166314016776906, 731036274467524, 281889505697766, - 4142492395527088, - 3165553613368264, - 2407952734448436, - 3346798451031847, + 21888242871839275222246405745257275088548364400416034343698203825468569443248, + 21888242871839275222246405745257275088548364400416034343698202848529787284424, + 21888242871839275222246405745257275088548364400416034343698202090928908364596, + 21888242871839275222246405745257275088548364400416034343698203029774624948007, 2111501713130094, - 2254842655263184, + 21888242871839275222246405745257275088548364400416034343698201937818829179344, 1278998451046298, 442517303095026, 489694954004657, - 3368901932769815, + 21888242871839275222246405745257275088548364400416034343698203051878106685975, 664754942138070, 1541180324962990, 2063661087075040, - 3895916899069123, - 4047214195658603, - 4296861499754378, + 21888242871839275222246405745257275088548364400416034343698203578893072985283, + 21888242871839275222246405745257275088548364400416034343698203730190369574763, + 21888242871839275222246405745257275088548364400416034343698203979837673670538, 1889042930817596, 1312624337195855, 345038835046460, - 3682642792063793, - 2578944643301981, - 4130981914600449, + 21888242871839275222246405745257275088548364400416034343698203365618965979953, + 21888242871839275222246405745257275088548364400416034343698202261920817218141, + 21888242871839275222246405745257275088548364400416034343698203813958088516609, 1316842913735497, 1486752596950240, 848102486686309, 731790587018884, 729989447608460, 2134535597327534, - 4356417554220391, + 21888242871839275222246405745257275088548364400416034343698204039393728136551, 1071314962581793, - 4268471376575033, + 21888242871839275222246405745257275088548364400416034343698203951447550491193, 1424675779890547, - 2380055925957718, - 3563408191671142, + 21888242871839275222246405745257275088548364400416034343698202063032099873878, + 21888242871839275222246405745257275088548364400416034343698203246384365587302, 1351766827696959, - 2607353333923349, - 3089747276677396, - 3279686118647679, - 4273589915805736, - 2479392170685183, - 2717079578613904, + 21888242871839275222246405745257275088548364400416034343698202290329507839509, + 21888242871839275222246405745257275088548364400416034343698202772723450593556, + 21888242871839275222246405745257275088548364400416034343698202962662292563839, + 21888242871839275222246405745257275088548364400416034343698203956566089721896, + 21888242871839275222246405745257275088548364400416034343698202162368344601343, + 21888242871839275222246405745257275088548364400416034343698202400055752530064, 1201240950470857, 1778402839867505, - 4136369994111050, + 21888242871839275222246405745257275088548364400416034343698203819346168027210, 1886807530972394, 941555578455056, 1099885819353138, 996550786046052, - 4430103683607960, - 3127659728188594, + 21888242871839275222246405745257275088548364400416034343698204113079857524120, + 21888242871839275222246405745257275088548364400416034343698202810635902104754, 636473483892481, - 2967399803867670, + 21888242871839275222246405745257275088548364400416034343698202650375977783830, 2014630909130771, - 3316475136689288, + 21888242871839275222246405745257275088548364400416034343698202999451310605448, 1158614435768072, 1372170951499149, - 3388031773641285, - 3037489095713433, - 2317896188823467, - 2317647416491634, + 21888242871839275222246405745257275088548364400416034343698203071007947557445, + 21888242871839275222246405745257275088548364400416034343698202720465269629593, + 21888242871839275222246405745257275088548364400416034343698202000872362739627, + 21888242871839275222246405745257275088548364400416034343698202000623590407794, 1374178171861514, 244521631170398, 1767138657087896, - 2925598175680608, - 3191746148064565, - 3684571697652444, - 3165944612028254, - 3232104303671539, + 21888242871839275222246405745257275088548364400416034343698202608574349596768, + 21888242871839275222246405745257275088548364400416034343698202874722321980725, + 21888242871839275222246405745257275088548364400416034343698203367547871568604, + 21888242871839275222246405745257275088548364400416034343698202848920785944414, + 21888242871839275222246405745257275088548364400416034343698202915080477587699, 1074156353095923, - 2452359816776389, + 21888242871839275222246405745257275088548364400416034343698202135335990692549, 816958132588803, 57002979508103, 1351562769646628, - 3219176048121967, - 2478290839437598, - 3428821851363282, - 4446697052864166, + 21888242871839275222246405745257275088548364400416034343698202902152222038127, + 21888242871839275222246405745257275088548364400416034343698202161267013353758, + 21888242871839275222246405745257275088548364400416034343698203111798025279442, + 21888242871839275222246405745257275088548364400416034343698204129673226780326, 1965910314239479, 2241327245887009, - 2646515472757145, - 2327096874877140, - 2517061638149091, - 4315816665427937, + 21888242871839275222246405745257275088548364400416034343698202329491646673305, + 21888242871839275222246405745257275088548364400416034343698202010073048793300, + 21888242871839275222246405745257275088548364400416034343698202200037812065251, + 21888242871839275222246405745257275088548364400416034343698203998792839344097, 285410073371491, 1239562992194231, 843310323666527, - 4357438057486816, + 21888242871839275222246405745257275088548364400416034343698204040414231402976, 334833324804677, 494235236711977, 2122794140059303, 1099228277724481, 2001410753303996, - 4284008308251032, - 3882125595039179, + 21888242871839275222246405745257275088548364400416034343698203966984482167192, + 21888242871839275222246405745257275088548364400416034343698203565101768955339, 1667402643821101, - 3207031084202469, - 3189298897358682, + 21888242871839275222246405745257275088548364400416034343698202890007258118629, + 21888242871839275222246405745257275088548364400416034343698202872275071274842, 505167121745344, - 4485183599881571, + 21888242871839275222246405745257275088548364400416034343698204168159773797731, 979245625786286, 83497600685282, - 3090857828934633, + 21888242871839275222246405745257275088548364400416034343698202773834002850793, 1730419949549342, - 4014293947750023, - 3730509243144533, - 4301584921075367, + 21888242871839275222246405745257275088548364400416034343698203697270121666183, + 21888242871839275222246405745257275088548364400416034343698203413485417060693, + 21888242871839275222246405745257275088548364400416034343698203984561094991527, 870093150103657, 802315359227166, 1109436704115978, - 2597390402901733, - 3625167642856121, - 3607359513867469, - 2865996196349144, + 21888242871839275222246405745257275088548364400416034343698202280366576817893, + 21888242871839275222246405745257275088548364400416034343698203308143816772281, + 21888242871839275222246405745257275088548364400416034343698203290335687783629, + 21888242871839275222246405745257275088548364400416034343698202548972370265304, 695645148798346, 533558959489558, - 3904024111705445, + 21888242871839275222246405745257275088548364400416034343698203587000285621605, 1041236849647739, 205175367974105, - 4290874868863520, + 21888242871839275222246405745257275088548364400416034343698203973851042779680, 649765639839842, 146174250215609, 3153644485258, 623398955008726, 1570457049237882, - 4349268784860840, - 4046701305241695, + 21888242871839275222246405745257275088548364400416034343698204032244958777000, + 21888242871839275222246405745257275088548364400416034343698203729677479157855, 2108939563431655, 1235865124727401, - 3749868145814918, + 21888242871839275222246405745257275088548364400416034343698203432844319731078, 2093334694343497, 354670538264090, - 2869752410561693, + 21888242871839275222246405745257275088548364400416034343698202552728584477853, 252892173778364, - 2574866743301881, + 21888242871839275222246405745257275088548364400416034343698202257842917218041, 933385180425032, - 4421792171963708, + 21888242871839275222246405745257275088548364400416034343698204104768345879868, 600170844214581, - 4371968521447510, - 2768241408415648, - 2985399847565094, + 21888242871839275222246405745257275088548364400416034343698204054944695363670, + 21888242871839275222246405745257275088548364400416034343698202451217582331808, + 21888242871839275222246405745257275088548364400416034343698202668376021481254, 1320960368505552, - 2820399362014379, + 21888242871839275222246405745257275088548364400416034343698202503375535930539, 1419919788187429, 1038948054254086, - 3565921008447608, - 4230678495425299, - 2537468302019269, - 2601890576616403, - 2525083971365948, + 21888242871839275222246405745257275088548364400416034343698203248897182363768, + 21888242871839275222246405745257275088548364400416034343698203913654669341459, + 21888242871839275222246405745257275088548364400416034343698202220444475935429, + 21888242871839275222246405745257275088548364400416034343698202284866750532563, + 21888242871839275222246405745257275088548364400416034343698202208060145282108, 1864331414187286, - 3250001505479432, - 4324812205242255, - 4024765831302774, + 21888242871839275222246405745257275088548364400416034343698202932977679395592, + 21888242871839275222246405745257275088548364400416034343698204007788379158415, + 21888242871839275222246405745257275088548364400416034343698203707742005218934, 1385353970659598, - 2449751570637032, + 21888242871839275222246405745257275088548364400416034343698202132727744553192, 1627472375993743, - 3312909362378182, - 2438531488578417, - 3139560585958243, - 2855787873795366, + 21888242871839275222246405745257275088548364400416034343698202995885536294342, + 21888242871839275222246405745257275088548364400416034343698202121507662494577, + 21888242871839275222246405745257275088548364400416034343698202822536759874403, + 21888242871839275222246405745257275088548364400416034343698202538764047711526, 1946700845736596, 1188492992722742, - 4394521197124381, + 21888242871839275222246405745257275088548364400416034343698204077497371040541, 607941413613604, - 3606636638318672, - 3577553955436537, - 2329380619152298, + 21888242871839275222246405745257275088548364400416034343698203289612812234832, + 21888242871839275222246405745257275088548364400416034343698203260530129352697, + 21888242871839275222246405745257275088548364400416034343698202012356793068458, 353672972971611, - 2545559768117579, - 3924372083494646, - 3646656316265301, - 2291791836185834, - 3001558271324235, + 21888242871839275222246405745257275088548364400416034343698202228535942033739, + 21888242871839275222246405745257275088548364400416034343698203607348257410806, + 21888242871839275222246405745257275088548364400416034343698203329632490181461, + 21888242871839275222246405745257275088548364400416034343698201974768010101994, + 21888242871839275222246405745257275088548364400416034343698202684534445240395, 1892604502128632, - 2492761969429128, - 4012458484926182, - 2922208883921624, - 3948938981420422, - 3694380206906488, + 21888242871839275222246405745257275088548364400416034343698202175738143345288, + 21888242871839275222246405745257275088548364400416034343698203695434658842342, + 21888242871839275222246405745257275088548364400416034343698202605185057837784, + 21888242871839275222246405745257275088548364400416034343698203631915155336582, + 21888242871839275222246405745257275088548364400416034343698203377356380822648, 2164769175140611, - 4254285729126918, + 21888242871839275222246405745257275088548364400416034343698203937261903043078, 1206207983927636, 1702205069129478, - 2364739101283773, - 3313767011864061, - 3458670604576946, - 3468955552418342, - 4206943447888923, + 21888242871839275222246405745257275088548364400416034343698202047715275199933, + 21888242871839275222246405745257275088548364400416034343698202996743185780221, + 21888242871839275222246405745257275088548364400416034343698203141646778493106, + 21888242871839275222246405745257275088548364400416034343698203151931726334502, + 21888242871839275222246405745257275088548364400416034343698203889919621805083, 2155721351889328, 836305678708928, 673158222257693, - 2826382221420594, + 21888242871839275222246405745257275088548364400416034343698202509358395336754, 2183022208591496, - 2825573790674758, + 21888242871839275222246405745257275088548364400416034343698202508549964590918, 1301632742823890, 1007069994670427, - 2708178635357042, - 4174520547726905, - 3967528087139447, + 21888242871839275222246405745257275088548364400416034343698202391154809273202, + 21888242871839275222246405745257275088548364400416034343698203857496721643065, + 21888242871839275222246405745257275088548364400416034343698203650504261055607, 2139784989659149, 564739212160861, - 3915059967055851, - 2377378596848633, + 21888242871839275222246405745257275088548364400416034343698203598036140972011, + 21888242871839275222246405745257275088548364400416034343698202060354770764793, 885454397602195, - 2662120475068992, + 21888242871839275222246405745257275088548364400416034343698202345096648985152, 1935872085418310, 2152700467662625, - 4125209988757416, + 21888242871839275222246405745257275088548364400416034343698203808186162673576, 740689901827244, - 3932285854209413, + 21888242871839275222246405745257275088548364400416034343698203615262028125573, 1689629974263645, 369332951457806, 1024437911753993, - 4087848385483863, - 4340850409922428, - 2283448417909254, - 3373501662367191, + 21888242871839275222246405745257275088548364400416034343698203770824559400023, + 21888242871839275222246405745257275088548364400416034343698204023826583838588, + 21888242871839275222246405745257275088548364400416034343698201966424591825414, + 21888242871839275222246405745257275088548364400416034343698203056477836283351, 428617876460986, - 4027510339027157, - 4442939508044267, + 21888242871839275222246405745257275088548364400416034343698203710486512943317, + 21888242871839275222246405745257275088548364400416034343698204125915681960427, 1836282277507298, 1100918150574587, 1284807225949209, 143236681693268, - 3089948107493565, - 4103328802459842, - 2806077034667598, - 3567942178158971, + 21888242871839275222246405745257275088548364400416034343698202772924281409725, + 21888242871839275222246405745257275088548364400416034343698203786304976376002, + 21888242871839275222246405745257275088548364400416034343698202489053208583758, + 21888242871839275222246405745257275088548364400416034343698203250918352075131, 1910171977265411, 1730067784105126, 2193350146956853, - 3177178241054439, - 4247172558742020, - 2571047255690796, - 4099653347514673, + 21888242871839275222246405745257275088548364400416034343698202860154414970599, + 21888242871839275222246405745257275088548364400416034343698203930148732658180, + 21888242871839275222246405745257275088548364400416034343698202254023429606956, + 21888242871839275222246405745257275088548364400416034343698203782629521430833, 1682186709650660, 1517542617344564, - 3655417558812170, + 21888242871839275222246405745257275088548364400416034343698203338393732728330, 1177754142584719, - 3989506799954963, + 21888242871839275222246405745257275088548364400416034343698203672482973871123, 1122393057745857, 2101035667214918, 23782417991383, - 4118760775559662, + 21888242871839275222246405745257275088548364400416034343698203801736949475822, 1708574658394383, 199237915783001, - 3540856120354153, - 3500056004145931, + 21888242871839275222246405745257275088548364400416034343698203223832294270313, + 21888242871839275222246405745257275088548364400416034343698203183032178062091, 1599208659536023, 287335486451868, 2071943972779394, - 3239758495401211, - 2732849420149368, + 21888242871839275222246405745257275088548364400416034343698202922734669317371, + 21888242871839275222246405745257275088548364400416034343698202415825594065528, 43891859768569, - 2621480115345491, - 4434074895771126, + 21888242871839275222246405745257275088548364400416034343698202304456289261651, + 21888242871839275222246405745257275088548364400416034343698204117051069687286, 2025169496430906, - 3636588285994324, - 2770820574367572, - 3400457641297944, - 4188018828880603, + 21888242871839275222246405745257275088548364400416034343698203319564459910484, + 21888242871839275222246405745257275088548364400416034343698202453796748283732, + 21888242871839275222246405745257275088548364400416034343698203083433815214104, + 21888242871839275222246405745257275088548364400416034343698203870995002796763, 1400149582494723, 1350808822782991, 2016975154072005, 557429990459696, - 4234016930456745, - 2533760228147702, + 21888242871839275222246405745257275088548364400416034343698203916993104372905, + 21888242871839275222246405745257275088548364400416034343698202216736402063862, 266043401477532, 1744257706881266, 1389270051238366, - 3552184533839883, - 4416300248669845, - 4059226551748224, - 3760966120930537, - 3129486096788324, - 4079685888247648, - 3439291674306035, + 21888242871839275222246405745257275088548364400416034343698203235160707756043, + 21888242871839275222246405745257275088548364400416034343698204099276422586005, + 21888242871839275222246405745257275088548364400416034343698203742202725664384, + 21888242871839275222246405745257275088548364400416034343698203443942294846697, + 21888242871839275222246405745257275088548364400416034343698202812462270704484, + 21888242871839275222246405745257275088548364400416034343698203762662062163808, + 21888242871839275222246405745257275088548364400416034343698203122267848222195, 149869000701064, - 2260201587285177, + 21888242871839275222246405745257275088548364400416034343698201943177761201337, 1192107557839771, - 2312375967178132, - 4493133458761612, + 21888242871839275222246405745257275088548364400416034343698201995352141094292, + 21888242871839275222246405745257275088548364400416034343698204176109632677772, 1416924171776304, 1865276720985917, 1114814319171121, - 4255317656143594, - 2282808992918834, - 3636451723841812, + 21888242871839275222246405745257275088548364400416034343698203938293830059754, + 21888242871839275222246405745257275088548364400416034343698201965785166834994, + 21888242871839275222246405745257275088548364400416034343698203319427897757972, 1301561839179157, 140069532213798, - 4362885748906592, - 4155500635852364, - 3102643805484263, - 2955830089288380, - 4067702637923122, - 4357277281960428, + 21888242871839275222246405745257275088548364400416034343698204045861922822752, + 21888242871839275222246405745257275088548364400416034343698203838476809768524, + 21888242871839275222246405745257275088548364400416034343698202785619979400423, + 21888242871839275222246405745257275088548364400416034343698202638806263204540, + 21888242871839275222246405745257275088548364400416034343698203750678811839282, + 21888242871839275222246405745257275088548364400416034343698204040253455876588, 2188555899061595, - 3737482634797164, + 21888242871839275222246405745257275088548364400416034343698203420458808713324, 1130224855706766, 932795168128169, - 2388845194401565, - 3434166285954202, - 2753511405350037, + 21888242871839275222246405745257275088548364400416034343698202071821368317725, + 21888242871839275222246405745257275088548364400416034343698203117142459870362, + 21888242871839275222246405745257275088548364400416034343698202436487579266197, 23546261866831, - 3885298489619299, - 2462100566051096, - 3566994582160632, - 4075392503694192, - 2300118841933103, - 4319980956988309, + 21888242871839275222246405745257275088548364400416034343698203568274663535459, + 21888242871839275222246405745257275088548364400416034343698202145076739967256, + 21888242871839275222246405745257275088548364400416034343698203249970756076792, + 21888242871839275222246405745257275088548364400416034343698203758368677610352, + 21888242871839275222246405745257275088548364400416034343698201983095015849263, + 21888242871839275222246405745257275088548364400416034343698204002957130904469, 132025482251471, - 2424984927749646, + 21888242871839275222246405745257275088548364400416034343698202107961101665806, 2167202909514762, 92186685564733, - 4311362628583521, - 2885165218944372, + 21888242871839275222246405745257275088548364400416034343698203994338802499681, + 21888242871839275222246405745257275088548364400416034343698202568141392860532, 2041523791744966, - 2352056655852391, + 21888242871839275222246405745257275088548364400416034343698202035032829768551, 1608394511329936, 2024374125399758, - 4265056568572590, + 21888242871839275222246405745257275088548364400416034343698203948032742488750, 1638238347433827, 926742295132790, - 3163859334358274, + 21888242871839275222246405745257275088548364400416034343698202846835508274434, 95043499106106, 1561481138492578, 893920189676646, - 2744980878289096, - 2629508598279571, + 21888242871839275222246405745257275088548364400416034343698202427957052205256, + 21888242871839275222246405745257275088548364400416034343698202312484772195731, 2017311217575157, - 3639349654934555, + 21888242871839275222246405745257275088548364400416034343698203322325828850715, 2243963895327159, - 3046898573726227, - 3538483041737592, - 4211606498575209, - 2955728303100696, + 21888242871839275222246405745257275088548364400416034343698202729874747642387, + 21888242871839275222246405745257275088548364400416034343698203221459215653752, + 21888242871839275222246405745257275088548364400416034343698203894582672491369, + 21888242871839275222246405745257275088548364400416034343698202638704477016856, 2062128097886269, - 4458012124041909, + 21888242871839275222246405745257275088548364400416034343698204140988297958069, 505866648600944, - 3250883658512706, + 21888242871839275222246405745257275088548364400416034343698202933859832428866, 1492707187868534, 1377004543012477, 1600814164438981, - 3686909100082083, + 21888242871839275222246405745257275088548364400416034343698203369885273998243, 368363486963368, - 2537879430251881, + 21888242871839275222246405745257275088548364400416034343698202220855604168041, 955134073935273, 977968232647430, 1817088483365100, - 2564210039326616, - 3119935783995618, + 21888242871839275222246405745257275088548364400416034343698202247186213242776, + 21888242871839275222246405745257275088548364400416034343698202802911957911778, 227227827113343, - 4084342826378098, + 21888242871839275222246405745257275088548364400416034343698203767319000294258, 1706323808112368, - 4069575315243138, + 21888242871839275222246405745257275088548364400416034343698203752551489159298, 329605078042707, - 2915852386401861, + 21888242871839275222246405745257275088548364400416034343698202598828560318021, 1034476454150358, 264451230400494, 947753372362217, - 3502986949496337, + 21888242871839275222246405745257275088548364400416034343698203185963123412497, 1580542214481531, 663875814045436, 322921185241684, - 4168250702678110, + 21888242871839275222246405745257275088548364400416034343698203851226876594270, 917227194179735, - 4020823177705277, - 3882889764590107, - 3616443493952992, + 21888242871839275222246405745257275088548364400416034343698203703799351621437, + 21888242871839275222246405745257275088548364400416034343698203565865938506267, + 21888242871839275222246405745257275088548364400416034343698203299419667869152, 280144751961359, - 3034224200080758, + 21888242871839275222246405745257275088548364400416034343698202717200373996918, 844649562562916, 1140309515864212, - 2540391106648137, - 2493415661128439, - 2574836367085285, + 21888242871839275222246405745257275088548364400416034343698202223367280564297, + 21888242871839275222246405745257275088548364400416034343698202176391835044599, + 21888242871839275222246405745257275088548364400416034343698202257812541001445, 1025184218730285, - 2937442294973561, - 4184046324221492, - 2599383927322639, - 3166837362836681, + 21888242871839275222246405745257275088548364400416034343698202620418468889721, + 21888242871839275222246405745257275088548364400416034343698203867022498137652, + 21888242871839275222246405745257275088548364400416034343698202282360101238799, + 21888242871839275222246405745257275088548364400416034343698202849813536752841, 1574305555825303, - 3955103725970328, + 21888242871839275222246405745257275088548364400416034343698203638079899886488, 96635974897151, - 3487968383776597, - 2989481686659970, - 4482678934374566, - 4131113110365218, + 21888242871839275222246405745257275088548364400416034343698203170944557692757, + 21888242871839275222246405745257275088548364400416034343698202672457860576130, + 21888242871839275222246405745257275088548364400416034343698204165655108290726, + 21888242871839275222246405745257275088548364400416034343698203814089284281378, 1073229945719420, - 2377469679023329, + 21888242871839275222246405745257275088548364400416034343698202060445852939489, 1106048554732218, - 3264291525729338, + 21888242871839275222246405745257275088548364400416034343698202947267699645498, 267637376644504, 109014914337194, - 3061540707181451, - 3557482174589729, - 3087046959799068, - 4290195531561120, - 2543896576252731, + 21888242871839275222246405745257275088548364400416034343698202744516881097611, + 21888242871839275222246405745257275088548364400416034343698203240458348505889, + 21888242871839275222246405745257275088548364400416034343698202770023133715228, + 21888242871839275222246405745257275088548364400416034343698203973171705477280, + 21888242871839275222246405745257275088548364400416034343698202226872750168891, 1885856394811772, - 2339689791618979, + 21888242871839275222246405745257275088548364400416034343698202022665965535139, 634780793903462, 389269970257848, 1950071686242639, @@ -25772,49 +25772,49 @@ pub global CRP: [Polynomial; L] = [ 365839849980605, 1867462824058990, 1445449947508347, - 4140434482789022, - 2360236051915510, + 21888242871839275222246405745257275088548364400416034343698203823410656705182, + 21888242871839275222246405745257275088548364400416034343698202043212225831670, 1195182685360734, 1765060534868338, 757390352820799, 764771151309833, - 4025257994512671, - 3342146916371175, + 21888242871839275222246405745257275088548364400416034343698203708234168428831, + 21888242871839275222246405745257275088548364400416034343698203025123090287335, 1112713432827921, 1188455494817652, - 3204635405715821, - 4390920817788171, - 2559425984285092, + 21888242871839275222246405745257275088548364400416034343698202887611579631981, + 21888242871839275222246405745257275088548364400416034343698204073896991704331, + 21888242871839275222246405745257275088548364400416034343698202242402158201252, 39426317191067, - 3807237534016000, + 21888242871839275222246405745257275088548364400416034343698203490213707932160, 939193972560322, 1753930768135007, 1650939480034556, - 3760014524630898, + 21888242871839275222246405745257275088548364400416034343698203442990698547058, 1707635439271369, 683776190411810, - 4345593738574872, + 21888242871839275222246405745257275088548364400416034343698204028569912491032, 593677646974189, 781352025579779, - 2698478467029105, + 21888242871839275222246405745257275088548364400416034343698202381454640945265, 785071028006597, 1351938650702928, - 2324780637218947, - 3577820642191028, - 3914715983412702, + 21888242871839275222246405745257275088548364400416034343698202007756811135107, + 21888242871839275222246405745257275088548364400416034343698203260796816107188, + 21888242871839275222246405745257275088548364400416034343698203597692157328862, 2097887590122309, - 4019153109710653, - 2871878449062731, - 4102936393734322, - 3936200104774758, - 4155531470176930, + 21888242871839275222246405745257275088548364400416034343698203702129283626813, + 21888242871839275222246405745257275088548364400416034343698202554854622978891, + 21888242871839275222246405745257275088548364400416034343698203785912567650482, + 21888242871839275222246405745257275088548364400416034343698203619176278690918, + 21888242871839275222246405745257275088548364400416034343698203838507644093090, 2105017451589642, 831523624446997, - 2380695599042126, - 3901206846929745, - 2884696914901315, - 2374590402494912, - 3620218630725046, + 21888242871839275222246405745257275088548364400416034343698202063671772958286, + 21888242871839275222246405745257275088548364400416034343698203584183020845905, + 21888242871839275222246405745257275088548364400416034343698202567673088817475, + 21888242871839275222246405745257275088548364400416034343698202057566576411072, + 21888242871839275222246405745257275088548364400416034343698203303194804641206, 579695738825361, 1776181185904982, 1390613625526522, @@ -25822,208 +25822,208 @@ pub global CRP: [Polynomial; L] = [ 462040348306876, 1182823412210627, 2117153177424138, - 3540922629214853, - 2877399347884131, - 4089518425800091, - 3734769353561968, - 2431470168601464, + 21888242871839275222246405745257275088548364400416034343698203223898803131013, + 21888242871839275222246405745257275088548364400416034343698202560375521800291, + 21888242871839275222246405745257275088548364400416034343698203772494599716251, + 21888242871839275222246405745257275088548364400416034343698203417745527478128, + 21888242871839275222246405745257275088548364400416034343698202114446342517624, 428336256147168, - 4454344288668423, - 2606023028382589, - 4471822230575578, + 21888242871839275222246405745257275088548364400416034343698204137320462584583, + 21888242871839275222246405745257275088548364400416034343698202288999202298749, + 21888242871839275222246405745257275088548364400416034343698204154798404491738, 1644837600555860, - 4055860413574022, + 21888242871839275222246405745257275088548364400416034343698203738836587490182, 898003674288319, - 2596443401164872, - 4132126699976554, + 21888242871839275222246405745257275088548364400416034343698202279419575081032, + 21888242871839275222246405745257275088548364400416034343698203815102873892714, 1877580370734698, - 4296307634586715, + 21888242871839275222246405745257275088548364400416034343698203979283808502875, 1014903224563196, - 3294164133069737, - 3481924227133149, + 21888242871839275222246405745257275088548364400416034343698202977140306985897, + 21888242871839275222246405745257275088548364400416034343698203164900401049309, 1652667922588495, - 4193457048931812, - 2435745125128341, - 2808877655541363, + 21888242871839275222246405745257275088548364400416034343698203876433222847972, + 21888242871839275222246405745257275088548364400416034343698202118721299044501, + 21888242871839275222246405745257275088548364400416034343698202491853829457523, 684611851569933, 164946717336308, 1727058839096846, - 3677729320872339, - 4433100805949157, - 4106275284541683, + 21888242871839275222246405745257275088548364400416034343698203360705494788499, + 21888242871839275222246405745257275088548364400416034343698204116076979865317, + 21888242871839275222246405745257275088548364400416034343698203789251458457843, 1865959799707694, - 3058210321665326, - 3961658438605021, - 3402057054012922, - 2726227374144873, + 21888242871839275222246405745257275088548364400416034343698202741186495581486, + 21888242871839275222246405745257275088548364400416034343698203644634612521181, + 21888242871839275222246405745257275088548364400416034343698203085033227929082, + 21888242871839275222246405745257275088548364400416034343698202409203548061033, 1066458015848578, - 2665604103319583, + 21888242871839275222246405745257275088548364400416034343698202348580277235743, 436362392787832, 104845765507680, 865089513752519, - 2689006803568650, + 21888242871839275222246405745257275088548364400416034343698202371982977484810, 1353899696697880, - 3456593797840677, + 21888242871839275222246405745257275088548364400416034343698203139569971756837, 990622533465443, 1207599813768508, - 2645238405197163, + 21888242871839275222246405745257275088548364400416034343698202328214579113323, 373422986490275, - 4326983639468239, + 21888242871839275222246405745257275088548364400416034343698204009959813384399, 465786564535187, - 3135709809539849, - 2547126574080808, - 2506063030202113, - 2645116995656643, - 4164777004586853, - 4083157298397512, + 21888242871839275222246405745257275088548364400416034343698202818685983456009, + 21888242871839275222246405745257275088548364400416034343698202230102747996968, + 21888242871839275222246405745257275088548364400416034343698202189039204118273, + 21888242871839275222246405745257275088548364400416034343698202328093169572803, + 21888242871839275222246405745257275088548364400416034343698203847753178503013, + 21888242871839275222246405745257275088548364400416034343698203766133472313672, 2170277472283555, - 3170555006279927, - 3474359817137705, - 3139968065597241, - 3139924503133498, - 2564763354588739, - 3745083355460799, + 21888242871839275222246405745257275088548364400416034343698202853531180196087, + 21888242871839275222246405745257275088548364400416034343698203157335991053865, + 21888242871839275222246405745257275088548364400416034343698202822944239513401, + 21888242871839275222246405745257275088548364400416034343698202822900677049658, + 21888242871839275222246405745257275088548364400416034343698202247739528504899, + 21888242871839275222246405745257275088548364400416034343698203428059529376959, 2205178742070292, 1126761939695563, - 2291722639144875, + 21888242871839275222246405745257275088548364400416034343698201974698813061035, 1656130254724019, - 4284946466016002, - 4160711333824617, + 21888242871839275222246405745257275088548364400416034343698203967922639932162, + 21888242871839275222246405745257275088548364400416034343698203843687507740777, 2017809682382969, 1905498605070476, 990619516232933, 1076284312385773, - 3900253125718166, - 2693280945798609, + 21888242871839275222246405745257275088548364400416034343698203583229299634326, + 21888242871839275222246405745257275088548364400416034343698202376257119714769, 625733846674027, 1315772637070062, - 3905598982413650, + 21888242871839275222246405745257275088548364400416034343698203588575156329810, 1840764134968027, 925052141651765, 1764703493838985, - 4502779971068862, - 3544155826544001, + 21888242871839275222246405745257275088548364400416034343698204185756144985022, + 21888242871839275222246405745257275088548364400416034343698203227132000460161, 1928846827801529, - 3933223727300408, - 4138330602114152, + 21888242871839275222246405745257275088548364400416034343698203616199901216568, + 21888242871839275222246405745257275088548364400416034343698203821306776030312, 447069550023240, 436386214905584, 782545226427378, - 2943404285347600, + 21888242871839275222246405745257275088548364400416034343698202626380459263760, 56086527147178, 345004618976841, - 3015063524587645, - 2427849661624228, - 3853832672909187, - 3179457150908574, - 4178135659133381, - 3730774083951507, + 21888242871839275222246405745257275088548364400416034343698202698039698503805, + 21888242871839275222246405745257275088548364400416034343698202110825835540388, + 21888242871839275222246405745257275088548364400416034343698203536808846825347, + 21888242871839275222246405745257275088548364400416034343698202862433324824734, + 21888242871839275222246405745257275088548364400416034343698203861111833049541, + 21888242871839275222246405745257275088548364400416034343698203413750257867667, 1413500403960360, - 3357192331210691, + 21888242871839275222246405745257275088548364400416034343698203040168505126851, 120783330812269, 1142056375057806, - 2978932856000228, + 21888242871839275222246405745257275088548364400416034343698202661909029916388, 538864759548145, - 4006599035411512, - 4400925980853018, + 21888242871839275222246405745257275088548364400416034343698203689575209327672, + 21888242871839275222246405745257275088548364400416034343698204083902154769178, 1531791559535225, 2223953351448378, - 3300044917993038, + 21888242871839275222246405745257275088548364400416034343698202983021091909198, 306800295455080, 185123704368680, - 2488836118118470, - 4362023172918522, - 2319759602014075, - 3764389390861762, - 2308134362963727, - 4254697971066881, - 2962198097071988, + 21888242871839275222246405745257275088548364400416034343698202171812292034630, + 21888242871839275222246405745257275088548364400416034343698204044999346834682, + 21888242871839275222246405745257275088548364400416034343698202002735775930235, + 21888242871839275222246405745257275088548364400416034343698203447365564777922, + 21888242871839275222246405745257275088548364400416034343698201991110536879887, + 21888242871839275222246405745257275088548364400416034343698203937674144983041, + 21888242871839275222246405745257275088548364400416034343698202645174270988148, 1675851250989645, 944257733698919, 547557111744454, 1672950111324985, 608960746448998, - 4302156863585977, + 21888242871839275222246405745257275088548364400416034343698203985133037502137, 179564415249432, 120785517296287, - 4357268157170426, + 21888242871839275222246405745257275088548364400416034343698204040244331086586, 1083508751967037, 2004791807916064, 811112387979709, - 2336492253971447, - 2258821167547812, + 21888242871839275222246405745257275088548364400416034343698202019468427887607, + 21888242871839275222246405745257275088548364400416034343698201941797341463972, 125963453716629, 1117579803420045, - 3929197371169624, + 21888242871839275222246405745257275088548364400416034343698203612173545085784, 380683235949194, - 4053532343403649, + 21888242871839275222246405745257275088548364400416034343698203736508517319809, 1686115259562713, 1795119334799097, - 2658699698981784, + 21888242871839275222246405745257275088548364400416034343698202341675872897944, 46813021174030, 2041924096590530, - 2831998626603674, - 2396669741993037, + 21888242871839275222246405745257275088548364400416034343698202514974800519834, + 21888242871839275222246405745257275088548364400416034343698202079645915909197, 1196253956342804, - 3883766569350467, + 21888242871839275222246405745257275088548364400416034343698203566742743266627, 1162800727796157, 2007025231670171, 801914130042516, 246876764208431, - 4314366095746106, - 2353557979586723, - 2645192993222163, + 21888242871839275222246405745257275088548364400416034343698203997342269662266, + 21888242871839275222246405745257275088548364400416034343698202036534153502883, + 21888242871839275222246405745257275088548364400416034343698202328169167138323, 196583209433583, - 4352537327648449, - 2299264609194589, - 3981930613796713, - 3693322896135266, - 4001093293850794, + 21888242871839275222246405745257275088548364400416034343698204035513501564609, + 21888242871839275222246405745257275088548364400416034343698201982240783110749, + 21888242871839275222246405745257275088548364400416034343698203664906787712873, + 21888242871839275222246405745257275088548364400416034343698203376299070051426, + 21888242871839275222246405745257275088548364400416034343698203684069467766954, 1691630975712958, - 2343139286755328, + 21888242871839275222246405745257275088548364400416034343698202026115460671488, 1166047479039758, - 3479543725374260, - 3250875200324419, - 3130858739560013, + 21888242871839275222246405745257275088548364400416034343698203162519899290420, + 21888242871839275222246405745257275088548364400416034343698202933851374240579, + 21888242871839275222246405745257275088548364400416034343698202813834913476173, 1215367310607130, 903910554725405, 720066386804986, 1890051280484258, - 2257480439769403, + 21888242871839275222246405745257275088548364400416034343698201940456613685563, 47572110851352, 266555450810913, 2214554279156740, - 2655855476059939, + 21888242871839275222246405745257275088548364400416034343698202338831649976099, 1795108127059911, 1328895487895894, 1702462114197412, 2014582676230285, - 3761115173986069, - 3779417958330947, + 21888242871839275222246405745257275088548364400416034343698203444091347902229, + 21888242871839275222246405745257275088548364400416034343698203462394132247107, 1172113962189283, - 2803553980858485, - 3010299452260862, - 3595139288272986, - 2352339966582184, - 4016194804480655, - 3606427288297488, + 21888242871839275222246405745257275088548364400416034343698202486530154774645, + 21888242871839275222246405745257275088548364400416034343698202693275626177022, + 21888242871839275222246405745257275088548364400416034343698203278115462189146, + 21888242871839275222246405745257275088548364400416034343698202035316140498344, + 21888242871839275222246405745257275088548364400416034343698203699170978396815, + 21888242871839275222246405745257275088548364400416034343698203289403462213648, 1709973421533761, - 2553172545947494, + 21888242871839275222246405745257275088548364400416034343698202236148719863654, 1185783199279560, - 2616910647401962, + 21888242871839275222246405745257275088548364400416034343698202299886821318122, 1280866730848079, - 3949681476926320, - 3131806764992219, + 21888242871839275222246405745257275088548364400416034343698203632657650842480, + 21888242871839275222246405745257275088548364400416034343698202814782938908379, 1871362859784121, - 2826667414362715, - 4195872880074413, + 21888242871839275222246405745257275088548364400416034343698202509643588278875, + 21888242871839275222246405745257275088548364400416034343698203878849053990573, 1395805911043339, - 3742317758814915, - 4300306208536964, - 3111003977517814, + 21888242871839275222246405745257275088548364400416034343698203425293932731075, + 21888242871839275222246405745257275088548364400416034343698203983282382453124, + 21888242871839275222246405745257275088548364400416034343698202793980151433974, 1146995041757851, - 2298270787209132, - 3051790142383640, + 21888242871839275222246405745257275088548364400416034343698201981246961125292, + 21888242871839275222246405745257275088548364400416034343698202734766316299800, 1048400931047972, 1976178864633341, 1632916360538794, @@ -26031,273 +26031,273 @@ pub global CRP: [Polynomial; L] = [ 787920862335123, 873015609063612, 1319477402406070, - 4480712655467438, + 21888242871839275222246405745257275088548364400416034343698204163688829383598, 208176796797829, - 2815281028796680, + 21888242871839275222246405745257275088548364400416034343698202498257202712840, 1327753911900671, 536803306481657, 1437905100065798, - 4462295519818468, - 2857684472009754, - 2357066934372774, + 21888242871839275222246405745257275088548364400416034343698204145271693734628, + 21888242871839275222246405745257275088548364400416034343698202540660645925914, + 21888242871839275222246405745257275088548364400416034343698202040043108288934, 1362148298888751, 1621577345269617, - 3788460178226809, + 21888242871839275222246405745257275088548364400416034343698203471436352142969, 1351529485631880, 803570419415595, - 2859388541245463, + 21888242871839275222246405745257275088548364400416034343698202542364715161623, 2056072459397219, 1500338199733687, - 2919709798574064, + 21888242871839275222246405745257275088548364400416034343698202602685972490224, 347465470131664, 1147130792537312, - 4147854691874138, + 21888242871839275222246405745257275088548364400416034343698203830830865790298, 1311096575060194, - 2763678608306043, - 2458777921506839, - 3316331206388487, - 3040917128165671, + 21888242871839275222246405745257275088548364400416034343698202446654782222203, + 21888242871839275222246405745257275088548364400416034343698202141754095422999, + 21888242871839275222246405745257275088548364400416034343698202999307380304647, + 21888242871839275222246405745257275088548364400416034343698202723893302081831, 2033620008340181, - 2864498007730036, - 3555724249178146, + 21888242871839275222246405745257275088548364400416034343698202547474181646196, + 21888242871839275222246405745257275088548364400416034343698203238700423094306, 975482012020398, - 3818934520311070, + 21888242871839275222246405745257275088548364400416034343698203501910694227230, 1099466954592635, - 4242348204072017, - 3671355702204128, + 21888242871839275222246405745257275088548364400416034343698203925324377988177, + 21888242871839275222246405745257275088548364400416034343698203354331876120288, 1981217713285265, - 4312345755543440, - 4372094148187397, - 3557796575007022, + 21888242871839275222246405745257275088548364400416034343698203995321929459600, + 21888242871839275222246405745257275088548364400416034343698204055070322103557, + 21888242871839275222246405745257275088548364400416034343698203240772748923182, 879311729243070, - 3901109607031250, + 21888242871839275222246405745257275088548364400416034343698203584085780947410, 294538924516076, - 3243104605913077, - 2901243878846442, + 21888242871839275222246405745257275088548364400416034343698202926080779829237, + 21888242871839275222246405745257275088548364400416034343698202584220052762602, 298899249874399, 1412435566021261, - 2903731572360019, + 21888242871839275222246405745257275088548364400416034343698202586707746276179, 713121367213635, - 2790421236275204, + 21888242871839275222246405745257275088548364400416034343698202473397410191364, 2182999405117749, - 4179306696402075, - 3245677526568374, - 3585852139306258, - 4143740008419838, + 21888242871839275222246405745257275088548364400416034343698203862282870318235, + 21888242871839275222246405745257275088548364400416034343698202928653700484534, + 21888242871839275222246405745257275088548364400416034343698203268828313222418, + 21888242871839275222246405745257275088548364400416034343698203826716182335998, 1679978367918513, 925095932180800, - 2855843233603521, - 3334700230190571, + 21888242871839275222246405745257275088548364400416034343698202538819407519681, + 21888242871839275222246405745257275088548364400416034343698203017676404106731, 1147677755143434, - 4457780003951198, + 21888242871839275222246405745257275088548364400416034343698204140756177867358, 507231012065715, 284710309072476, - 2985752071646731, - 2817349525877810, - 2821765636791821, + 21888242871839275222246405745257275088548364400416034343698202668728245562891, + 21888242871839275222246405745257275088548364400416034343698202500325699793970, + 21888242871839275222246405745257275088548364400416034343698202504741810707981, 675199531686272, 1810111435060548, - 4130635754146281, + 21888242871839275222246405745257275088548364400416034343698203813611928062441, 2150755473469004, - 4239880112499775, - 3565878297057586, - 4323590860137373, + 21888242871839275222246405745257275088548364400416034343698203922856286415935, + 21888242871839275222246405745257275088548364400416034343698203248854470973746, + 21888242871839275222246405745257275088548364400416034343698204006567034053533, 1797337965911382, 989477124690970, - 2941621903180083, + 21888242871839275222246405745257275088548364400416034343698202624598077096243, 119017215995790, - 4295634927947661, - 2322004805345004, + 21888242871839275222246405745257275088548364400416034343698203978611101863821, + 21888242871839275222246405745257275088548364400416034343698202004980979261164, 2159997654065408, - 3660779138215462, - 2359141193910423, - 2901102464524247, + 21888242871839275222246405745257275088548364400416034343698203343755312131622, + 21888242871839275222246405745257275088548364400416034343698202042117367826583, + 21888242871839275222246405745257275088548364400416034343698202584078638440407, 1850546726717343, - 3365054450073318, + 21888242871839275222246405745257275088548364400416034343698203048030623989478, 1294836663780465, - 4133454759680923, - 3997129346903644, - 4234391921593620, - 3438141700265240, - 4375640639203456, - 3068387646988233, + 21888242871839275222246405745257275088548364400416034343698203816430933597083, + 21888242871839275222246405745257275088548364400416034343698203680105520819804, + 21888242871839275222246405745257275088548364400416034343698203917368095509780, + 21888242871839275222246405745257275088548364400416034343698203121117874181400, + 21888242871839275222246405745257275088548364400416034343698204058616813119616, + 21888242871839275222246405745257275088548364400416034343698202751363820904393, 2238357693535365, 1550713103379855, - 2616874663190817, - 4377962805473396, - 2806697817075758, - 4033372212098323, + 21888242871839275222246405745257275088548364400416034343698202299850837106977, + 21888242871839275222246405745257275088548364400416034343698204060938979389556, + 21888242871839275222246405745257275088548364400416034343698202489673990991918, + 21888242871839275222246405745257275088548364400416034343698203716348386014483, 584562523876696, - 2966169112155532, - 2832335465684312, - 4194349718136143, + 21888242871839275222246405745257275088548364400416034343698202649145286071692, + 21888242871839275222246405745257275088548364400416034343698202515311639600472, + 21888242871839275222246405745257275088548364400416034343698203877325892052303, 261403001213268, - 3830558002999593, - 2532517955011173, - 3558310250694977, - 4435416401627700, - 2514500261618912, + 21888242871839275222246405745257275088548364400416034343698203513534176915753, + 21888242871839275222246405745257275088548364400416034343698202215494128927333, + 21888242871839275222246405745257275088548364400416034343698203241286424611137, + 21888242871839275222246405745257275088548364400416034343698204118392575543860, + 21888242871839275222246405745257275088548364400416034343698202197476435535072, 2172032695426213, 264438634748970, - 3925831936116911, - 2797356138463216, + 21888242871839275222246405745257275088548364400416034343698203608808110033071, + 21888242871839275222246405745257275088548364400416034343698202480332312379376, 1100502070284967, 976214868486153, 181395185068822, - 3472770215736022, + 21888242871839275222246405745257275088548364400416034343698203155746389652182, 1056121944627980, 255101665178607, 1484200414972660, - 2761130693665046, + 21888242871839275222246405745257275088548364400416034343698202444106867581206, 757347412264519, - 3062110340462808, + 21888242871839275222246405745257275088548364400416034343698202745086514378968, 304619585003270, - 4452298759933920, + 21888242871839275222246405745257275088548364400416034343698204135274933850080, 2201575437057663, 589456387885909, 934943603620731, - 3427870686290801, + 21888242871839275222246405745257275088548364400416034343698203110846860206961, 705284225957398, 324597591962502, - 2291617398205527, - 2433432074949636, + 21888242871839275222246405745257275088548364400416034343698201974593572121687, + 21888242871839275222246405745257275088548364400416034343698202116408248865796, 1628522406258538, - 2618643931566800, + 21888242871839275222246405745257275088548364400416034343698202301620105482960, 133803245008189, - 2591826679047444, + 21888242871839275222246405745257275088548364400416034343698202274802852963604, 2129222807182673, - 3537737809821756, - 3927751762032432, - 4174483992517863, - 3539524878661121, - 4051154071324447, + 21888242871839275222246405745257275088548364400416034343698203220713983737916, + 21888242871839275222246405745257275088548364400416034343698203610727935948592, + 21888242871839275222246405745257275088548364400416034343698203857460166434023, + 21888242871839275222246405745257275088548364400416034343698203222501052577281, + 21888242871839275222246405745257275088548364400416034343698203734130245240607, 1605388729196143, - 3438011832583680, - 3039545091963596, - 3737487607944641, - 3037467525126250, - 4155115817693995, + 21888242871839275222246405745257275088548364400416034343698203120988006499840, + 21888242871839275222246405745257275088548364400416034343698202722521265879756, + 21888242871839275222246405745257275088548364400416034343698203420463781860801, + 21888242871839275222246405745257275088548364400416034343698202720443699042410, + 21888242871839275222246405745257275088548364400416034343698203838091991610155, 389712717948578, - 2676155787357382, + 21888242871839275222246405745257275088548364400416034343698202359131961273542, 1276221231058091, 1843300631286833, - 4308728816209248, + 21888242871839275222246405745257275088548364400416034343698203991704990125408, 1571663519185203, - 4311183276611337, + 21888242871839275222246405745257275088548364400416034343698203994159450527497, 1962986844216168, 2149967555818756, 858805270967821, 1616849154624876, - 4271847989276915, + 21888242871839275222246405745257275088548364400416034343698203954824163193075, 1307837135331625, - 4008300646497632, + 21888242871839275222246405745257275088548364400416034343698203691276820413792, 267112496087623, 913605304031614, 522261455439852, - 4253604169746785, + 21888242871839275222246405745257275088548364400416034343698203936580343662945, 1505050776354926, 165884399043148, 2139225055167386, - 3443504398606531, - 3679675704632737, - 3051806429659024, - 4259794454704434, - 3957219616032192, + 21888242871839275222246405745257275088548364400416034343698203126480572522691, + 21888242871839275222246405745257275088548364400416034343698203362651878548897, + 21888242871839275222246405745257275088548364400416034343698202734782603575184, + 21888242871839275222246405745257275088548364400416034343698203942770628620594, + 21888242871839275222246405745257275088548364400416034343698203640195789948352, 1495120835996649, 194195844108703, 307296753693813, 241665313868799, - 2702177867593112, - 3539824623353946, - 2916648236544906, + 21888242871839275222246405745257275088548364400416034343698202385154041509272, + 21888242871839275222246405745257275088548364400416034343698203222800797270106, + 21888242871839275222246405745257275088548364400416034343698202599624410461066, 1265769264389056, 890266409405256, - 4038439588666839, - 3648961029994097, - 2352466526945149, - 2412088556743456, - 4333785141569127, + 21888242871839275222246405745257275088548364400416034343698203721415762582999, + 21888242871839275222246405745257275088548364400416034343698203331937203910257, + 21888242871839275222246405745257275088548364400416034343698202035442700861309, + 21888242871839275222246405745257275088548364400416034343698202095064730659616, + 21888242871839275222246405745257275088548364400416034343698204016761315485287, 682716406784771, 835048997125140, 1535666825609566, 1695176967930846, - 4268328775377192, - 2388834244216619, - 2865528990520098, - 2694689644065347, + 21888242871839275222246405745257275088548364400416034343698203951304949293352, + 21888242871839275222246405745257275088548364400416034343698202071810418132779, + 21888242871839275222246405745257275088548364400416034343698202548505164436258, + 21888242871839275222246405745257275088548364400416034343698202377665817981507, 2191624149873985, - 3543169781691478, + 21888242871839275222246405745257275088548364400416034343698203226145955607638, 218625622050540, 27412496999616, - 3120782908569984, - 2344659128463040, + 21888242871839275222246405745257275088548364400416034343698202803759082486144, + 21888242871839275222246405745257275088548364400416034343698202027635302379200, 861092230682306, 33130743121024, - 3024851825253081, + 21888242871839275222246405745257275088548364400416034343698202707827999169241, 1423260423593084, 82886733679671, - 3608845002044913, - 3948918255588732, - 2629691707957179, - 2911045858168337, + 21888242871839275222246405745257275088548364400416034343698203291821175961073, + 21888242871839275222246405745257275088548364400416034343698203631894429504892, + 21888242871839275222246405745257275088548364400416034343698202312667881873339, + 21888242871839275222246405745257275088548364400416034343698202594022032084497, 1425872518941216, - 3991097783260872, + 21888242871839275222246405745257275088548364400416034343698203674073957177032, 358244484765525, - 2693551819211535, + 21888242871839275222246405745257275088548364400416034343698202376527993127695, 464186547041719, 1058605120516990, - 3816871132797133, + 21888242871839275222246405745257275088548364400416034343698203499847306713293, 1814076741017610, - 2975403797486726, + 21888242871839275222246405745257275088548364400416034343698202658379971402886, 2064187694569247, 1694148873094098, - 2512786194366796, + 21888242871839275222246405745257275088548364400416034343698202195762368282956, 1858717367324902, - 4223678928565195, + 21888242871839275222246405745257275088548364400416034343698203906655102481355, 839245031636577, - 3277855925694737, - 3134365579354522, + 21888242871839275222246405745257275088548364400416034343698202960832099610897, + 21888242871839275222246405745257275088548364400416034343698202817341753270682, 2199018708673373, - 3761998404916387, + 21888242871839275222246405745257275088548364400416034343698203444974578832547, 418587108010152, 1776534603831383, - 3758124389609180, + 21888242871839275222246405745257275088548364400416034343698203441100563525340, 961678225831965, - 4262375624438088, + 21888242871839275222246405745257275088548364400416034343698203945351798354248, 1415961957567332, 119690600402436, - 2728568882754145, + 21888242871839275222246405745257275088548364400416034343698202411545056670305, 340592213229526, - 3757700585814114, - 3219088930001009, - 2279401803443787, + 21888242871839275222246405745257275088548364400416034343698203440676759730274, + 21888242871839275222246405745257275088548364400416034343698202902065103917169, + 21888242871839275222246405745257275088548364400416034343698201962377977359947, 331603689259200, 923085025115916, 518367642400889, - 2815951323502659, - 4387041282870877, - 3499806959112365, - 2511366132442660, - 4192026321712036, - 2658431708672851, + 21888242871839275222246405745257275088548364400416034343698202498927497418819, + 21888242871839275222246405745257275088548364400416034343698204070017456787037, + 21888242871839275222246405745257275088548364400416034343698203182783133028525, + 21888242871839275222246405745257275088548364400416034343698202194342306358820, + 21888242871839275222246405745257275088548364400416034343698203875002495628196, + 21888242871839275222246405745257275088548364400416034343698202341407882589011, 1010676298162236, 198888768236900, - 3904294982619173, + 21888242871839275222246405745257275088548364400416034343698203587271156535333, 1223969839079636, 1712270106084668, - 3865522611625496, + 21888242871839275222246405745257275088548364400416034343698203548498785541656, 1129748719798962, 1343975300488350, 676993534685956, 219689361389412, 278716328654484, 1209794383196924, - 3635739613543430, - 2714414570422279, + 21888242871839275222246405745257275088548364400416034343698203318715787459590, + 21888242871839275222246405745257275088548364400416034343698202397390744338439, 665750155961062, 639964995102312, - 4191947292088948, - 4123652391281095, + 21888242871839275222246405745257275088548364400416034343698203874923466005108, + 21888242871839275222246405745257275088548364400416034343698203806628565197255, 551228582685192, 1526825015313001, 1082553762942368, @@ -26307,334 +26307,334 @@ pub global CRP: [Polynomial; L] = [ 427228574429520, 1442582189292096, 20505677233231, - 2841330571934512, - 3085239845782474, + 21888242871839275222246405745257275088548364400416034343698202524306745850672, + 21888242871839275222246405745257275088548364400416034343698202768216019698634, 180535875962565, - 4475726502725047, + 21888242871839275222246405745257275088548364400416034343698204158702676641207, 582768963688797, 1218955505609032, 1741857854836600, 1974658609524786, - 3117868392810637, + 21888242871839275222246405745257275088548364400416034343698202800844566726797, 914468596819179, - 3540446368390345, - 2304752668784706, - 2409064516238498, + 21888242871839275222246405745257275088548364400416034343698203223422542306505, + 21888242871839275222246405745257275088548364400416034343698201987728842700866, + 21888242871839275222246405745257275088548364400416034343698202092040690154658, 629976967202055, 1426758606762310, 1577550384345605, - 3095874688617255, - 4024588124408521, + 21888242871839275222246405745257275088548364400416034343698202778850862533415, + 21888242871839275222246405745257275088548364400416034343698203707564298324681, 406884079912344, 1413705377286859, - 2326058118290957, + 21888242871839275222246405745257275088548364400416034343698202009034292207117, 1286319346688786, - 4334697053777541, - 4070548954405037, - 4215336468410866, - 2351924454031495, - 2883613666646061, + 21888242871839275222246405745257275088548364400416034343698204017673227693701, + 21888242871839275222246405745257275088548364400416034343698203753525128321197, + 21888242871839275222246405745257275088548364400416034343698203898312642327026, + 21888242871839275222246405745257275088548364400416034343698202034900627947655, + 21888242871839275222246405745257275088548364400416034343698202566589840562221, 1901664413452571, - 3889872000467187, + 21888242871839275222246405745257275088548364400416034343698203572848174383347, 660575808497467, - 3251135302616045, - 3976972774807435, - 2347083722951746, - 3181664490352525, - 3338046853586151, + 21888242871839275222246405745257275088548364400416034343698202934111476532205, + 21888242871839275222246405745257275088548364400416034343698203659948948723595, + 21888242871839275222246405745257275088548364400416034343698202030059896867906, + 21888242871839275222246405745257275088548364400416034343698202864640664268685, + 21888242871839275222246405745257275088548364400416034343698203021023027502311, 268127447563068, 265224022450290, - 3163834885862281, + 21888242871839275222246405745257275088548364400416034343698202846811059778441, 1145079193995966, - 3857875593766036, - 4120194857306882, - 3725400472803049, - 2280140153836393, - 2811781531079043, - 3308299018735151, + 21888242871839275222246405745257275088548364400416034343698203540851767682196, + 21888242871839275222246405745257275088548364400416034343698203803171031223042, + 21888242871839275222246405745257275088548364400416034343698203408376646719209, + 21888242871839275222246405745257275088548364400416034343698201963116327752553, + 21888242871839275222246405745257275088548364400416034343698202494757704995203, + 21888242871839275222246405745257275088548364400416034343698202991275192651311, 153143123453311, - 3166599807525236, - 4288846077446659, + 21888242871839275222246405745257275088548364400416034343698202849575981441396, + 21888242871839275222246405745257275088548364400416034343698203971822251362819, 1020011972487451, - 2989191282232456, - 4501472310807662, + 21888242871839275222246405745257275088548364400416034343698202672167456148616, + 21888242871839275222246405745257275088548364400416034343698204184448484723822, 314119867807259, - 2899204517845152, - 2634439964046508, + 21888242871839275222246405745257275088548364400416034343698202582180691761312, + 21888242871839275222246405745257275088548364400416034343698202317416137962668, 168466678357424, - 3433175232100211, + 21888242871839275222246405745257275088548364400416034343698203116151406016371, 238418882581695, - 2351849890809181, + 21888242871839275222246405745257275088548364400416034343698202034826064725341, 386891412008305, 451035570879753, 1531563705665152, - 4385710277419299, - 2804433047675577, + 21888242871839275222246405745257275088548364400416034343698204068686451335459, + 21888242871839275222246405745257275088548364400416034343698202487409221591737, 180949875948529, 1272757318984985, 615554973902538, 1850356811793835, - 3028553942896159, + 21888242871839275222246405745257275088548364400416034343698202711530116812319, 366376855202635, - 2616317481267862, + 21888242871839275222246405745257275088548364400416034343698202299293655184022, 504788230427754, 1342398945346983, - 2672692552615562, - 3988643938030688, + 21888242871839275222246405745257275088548364400416034343698202355668726531722, + 21888242871839275222246405745257275088548364400416034343698203671620111946848, 238071800890829, - 3018192597454413, + 21888242871839275222246405745257275088548364400416034343698202701168771370573, 1916374121246693, - 3881248706416099, - 4275844351700501, - 3204472173341078, + 21888242871839275222246405745257275088548364400416034343698203564224880332259, + 21888242871839275222246405745257275088548364400416034343698203958820525616661, + 21888242871839275222246405745257275088548364400416034343698202887448347257238, 1694746928021980, - 2361843977070893, - 4489633571799106, - 2260330291538622, - 3612168316540276, - 3793780485781842, + 21888242871839275222246405745257275088548364400416034343698202044820150987053, + 21888242871839275222246405745257275088548364400416034343698204172609745715266, + 21888242871839275222246405745257275088548364400416034343698201943306465454782, + 21888242871839275222246405745257275088548364400416034343698203295144490456436, + 21888242871839275222246405745257275088548364400416034343698203476756659698002, 1410867263880058, 1167957342078089, 531206296345510, - 3335409138996719, - 2530510881890561, - 3787608000195970, + 21888242871839275222246405745257275088548364400416034343698203018385312912879, + 21888242871839275222246405745257275088548364400416034343698202213487055806721, + 21888242871839275222246405745257275088548364400416034343698203470584174112130, 853380425400029, 474150527194430, - 4152575581109892, + 21888242871839275222246405745257275088548364400416034343698203835551755026052, 989718694456027, 790220671051482, - 3125106715778182, + 21888242871839275222246405745257275088548364400416034343698202808082889694342, 1123898250186407, - 3065603924044601, + 21888242871839275222246405745257275088548364400416034343698202748580097960761, 1041287841382251, - 2811554521410699, + 21888242871839275222246405745257275088548364400416034343698202494530695326859, 2112041257447463, 1614105266908863, - 3534758194871465, + 21888242871839275222246405745257275088548364400416034343698203217734368787625, 965110561355130, - 2421705616626110, - 3264602854095402, + 21888242871839275222246405745257275088548364400416034343698202104681790542270, + 21888242871839275222246405745257275088548364400416034343698202947579028011562, 183497381286684, - 3472324972311224, + 21888242871839275222246405745257275088548364400416034343698203155301146227384, 1275985943465195, 147916279665590, 1456202079653503, - 3026676631721203, - 2796953351908270, + 21888242871839275222246405745257275088548364400416034343698202709652805637363, + 21888242871839275222246405745257275088548364400416034343698202479929525824430, 311634763648937, 174940982121881, - 4402499710526175, - 3382639392074940, - 3667472546830057, + 21888242871839275222246405745257275088548364400416034343698204085475884442335, + 21888242871839275222246405745257275088548364400416034343698203065615565991100, + 21888242871839275222246405745257275088548364400416034343698203350448720746217, 613299630725156, - 3872076731275483, - 2786157920618664, + 21888242871839275222246405745257275088548364400416034343698203555052905191643, + 21888242871839275222246405745257275088548364400416034343698202469134094534824, 1701433403519407, 1805379639993189, - 3900997443496863, + 21888242871839275222246405745257275088548364400416034343698203583973617413023, 513711674644483, 636902625261709, - 2751599578702778, - 3601832500701002, - 3030399664722315, + 21888242871839275222246405745257275088548364400416034343698202434575752618938, + 21888242871839275222246405745257275088548364400416034343698203284808674617162, + 21888242871839275222246405745257275088548364400416034343698202713375838638475, 343818652267772, 1457490073306561, 1255604544527776, 2070499911133411, - 3926791805038047, + 21888242871839275222246405745257275088548364400416034343698203609767978954207, 840099084282821, 945069675382407, 1664623208895308, - 4285366693163756, - 2733491230987751, + 21888242871839275222246405745257275088548364400416034343698203968342867079916, + 21888242871839275222246405745257275088548364400416034343698202416467404903911, 1984453505448373, - 3545180775502586, - 3628134961761368, + 21888242871839275222246405745257275088548364400416034343698203228156949418746, + 21888242871839275222246405745257275088548364400416034343698203311111135677528, 119509678561094, - 3244416188142319, - 3817391010326862, - 4271911114987895, + 21888242871839275222246405745257275088548364400416034343698202927392362058479, + 21888242871839275222246405745257275088548364400416034343698203500367184243022, + 21888242871839275222246405745257275088548364400416034343698203954887288904055, 1479938591164123, 550285010148179, 580884132068854, 420000401397439, - 2824169172013111, + 21888242871839275222246405745257275088548364400416034343698202507145345929271, 1977198982800903, - 3391753769308433, + 21888242871839275222246405745257275088548364400416034343698203074729943224593, 1381989018735496, - 3800955480531171, + 21888242871839275222246405745257275088548364400416034343698203483931654447331, 813585906394880, - 3625358256526502, - 3303993839627425, - 4254496875142172, + 21888242871839275222246405745257275088548364400416034343698203308334430442662, + 21888242871839275222246405745257275088548364400416034343698202986970013543585, + 21888242871839275222246405745257275088548364400416034343698203937473049058332, 1297374679806873, 429061624136764, - 4394089970566052, + 21888242871839275222246405745257275088548364400416034343698204077066144482212, 483994884900031, 342536929412883, - 3035964030841421, + 21888242871839275222246405745257275088548364400416034343698202718940204757581, 1588065069831275, - 3183833274788786, - 3253764286760680, - 4193967680874646, + 21888242871839275222246405745257275088548364400416034343698202866809448704946, + 21888242871839275222246405745257275088548364400416034343698202936740460676840, + 21888242871839275222246405745257275088548364400416034343698203876943854790806, 1818505704489857, 492651569528805, - 3095371171419310, - 3008953848586127, + 21888242871839275222246405745257275088548364400416034343698202778347345335470, + 21888242871839275222246405745257275088548364400416034343698202691930022502287, 688886983873366, 1223618150996579, - 2292593832174932, - 3703509533789789, - 3446984252133907, + 21888242871839275222246405745257275088548364400416034343698201975570006091092, + 21888242871839275222246405745257275088548364400416034343698203386485707705949, + 21888242871839275222246405745257275088548364400416034343698203129960426050067, 433835255166536, - 2549666826927155, - 3638280543241422, + 21888242871839275222246405745257275088548364400416034343698202232643000843315, + 21888242871839275222246405745257275088548364400416034343698203321256717157582, 1920413748914685, - 2838042057879742, - 4381853018235629, - 3381243954636823, - 4467732575838105, + 21888242871839275222246405745257275088548364400416034343698202521018231795902, + 21888242871839275222246405745257275088548364400416034343698204064829192151789, + 21888242871839275222246405745257275088548364400416034343698203064220128552983, + 21888242871839275222246405745257275088548364400416034343698204150708749754265, 1830450112306933, - 4397038703773514, - 4167317221785190, - 2382682578982465, + 21888242871839275222246405745257275088548364400416034343698204080014877689674, + 21888242871839275222246405745257275088548364400416034343698203850293395701350, + 21888242871839275222246405745257275088548364400416034343698202065658752898625, 341659693058207, 607288762933759, - 2263281877943437, - 3151794425438829, + 21888242871839275222246405745257275088548364400416034343698201946258051859597, + 21888242871839275222246405745257275088548364400416034343698202834770599354989, 1565870888442505, 908952330837866, 916638803919922, - 3227927112443669, - 3384840033927973, + 21888242871839275222246405745257275088548364400416034343698202910903286359829, + 21888242871839275222246405745257275088548364400416034343698203067816207844133, 1317169144594112, - 2252848830071421, + 21888242871839275222246405745257275088548364400416034343698201935825003987581, 482180076556020, 452144138694406, 2044852619002161, - 2531820659188053, + 21888242871839275222246405745257275088548364400416034343698202214796833104213, 847966941648600, - 4076293312284886, - 4303393641776232, + 21888242871839275222246405745257275088548364400416034343698203759269486201046, + 21888242871839275222246405745257275088548364400416034343698203986369815692392, 1523739301953275, - 2621389998585711, - 4027182261779428, + 21888242871839275222246405745257275088548364400416034343698202304366172501871, + 21888242871839275222246405745257275088548364400416034343698203710158435695588, 2000795545987700, 780702661760249, 1647317349629156, - 2435423731827483, + 21888242871839275222246405745257275088548364400416034343698202118399905743643, 902756481791756, - 3471083809852983, - 3512381904368800, - 4300217207884409, + 21888242871839275222246405745257275088548364400416034343698203154059983769143, + 21888242871839275222246405745257275088548364400416034343698203195358078284960, + 21888242871839275222246405745257275088548364400416034343698203983193381800569, 329663415332990, 1595530934803739, - 3366162592164266, + 21888242871839275222246405745257275088548364400416034343698203049138766080426, 141726335225668, 2008675623554986, - 3841270938137737, + 21888242871839275222246405745257275088548364400416034343698203524247112053897, 1730511232437674, 1897202077421754, - 3713141014518669, - 3503328921382543, + 21888242871839275222246405745257275088548364400416034343698203396117188434829, + 21888242871839275222246405745257275088548364400416034343698203186305095298703, 2156358840089010, 959767577628055, 2218961176969598, 680370237665974, 835932183127468, 1830890881209324, - 3031951163798628, + 21888242871839275222246405745257275088548364400416034343698202714927337714788, 1379408817203416, - 2353593671470873, + 21888242871839275222246405745257275088548364400416034343698202036569845387033, 101639311727767, - 3878067175851284, + 21888242871839275222246405745257275088548364400416034343698203561043349767444, 1504168526239176, - 3463803619328718, - 4133165489767079, - 3676575484557679, + 21888242871839275222246405745257275088548364400416034343698203146779793244878, + 21888242871839275222246405745257275088548364400416034343698203816141663683239, + 21888242871839275222246405745257275088548364400416034343698203359551658473839, 1006117622510676, - 3128255285829804, + 21888242871839275222246405745257275088548364400416034343698202811231459745964, 1386214916853810, 335444906950664, - 3895226024936655, - 2659980278012851, - 3340861212529102, + 21888242871839275222246405745257275088548364400416034343698203578202198852815, + 21888242871839275222246405745257275088548364400416034343698202342956451929011, + 21888242871839275222246405745257275088548364400416034343698203023837386445262, 652040817294744, - 3457112169366175, + 21888242871839275222246405745257275088548364400416034343698203140088343282335, 2227080788094826, 433462895922480, 1002251142373625, 1308405694775237, - 3558084209882987, + 21888242871839275222246405745257275088548364400416034343698203241060383799147, 2142138018518384, - 3000409126108865, + 21888242871839275222246405745257275088548364400416034343698202683385300025025, 880678599753635, 183536439938240, - 3495122204786186, - 4054622668870709, - 2558979753103932, - 2354468713172100, - 3568073580424953, + 21888242871839275222246405745257275088548364400416034343698203178098378702346, + 21888242871839275222246405745257275088548364400416034343698203737598842786869, + 21888242871839275222246405745257275088548364400416034343698202241955927020092, + 21888242871839275222246405745257275088548364400416034343698202037444887088260, + 21888242871839275222246405745257275088548364400416034343698203251049754341113, 999990440830921, 1874773507245455, - 3207468675055446, - 3820562123921974, - 4072306700121637, + 21888242871839275222246405745257275088548364400416034343698202890444848971606, + 21888242871839275222246405745257275088548364400416034343698203503538297838134, + 21888242871839275222246405745257275088548364400416034343698203755282874037797, 916893433000659, 788689741199582, - 4171132483492755, + 21888242871839275222246405745257275088548364400416034343698203854108657408915, 683375097363123, 1146287677673529, 1375646917734988, - 2322123094010471, + 21888242871839275222246405745257275088548364400416034343698202005099267926631, 2195996218923423, - 3522777001481017, - 3439593072276254, + 21888242871839275222246405745257275088548364400416034343698203205753175397177, + 21888242871839275222246405745257275088548364400416034343698203122569246192414, 237710147154138, 787995650436930, - 4306369662684117, - 3688864865755651, - 3525215376260843, - 3291744664740098, - 2579849936076720, + 21888242871839275222246405745257275088548364400416034343698203989345836600277, + 21888242871839275222246405745257275088548364400416034343698203371841039671811, + 21888242871839275222246405745257275088548364400416034343698203208191550177003, + 21888242871839275222246405745257275088548364400416034343698202974720838656258, + 21888242871839275222246405745257275088548364400416034343698202262826109992880, 1593586653609558, 191139736660811, - 3835267526691255, + 21888242871839275222246405745257275088548364400416034343698203518243700607415, 329246676746070, 415435647424428, - 4373853510584953, + 21888242871839275222246405745257275088548364400416034343698204056829684501113, 2158186115539593, 816104240704973, - 2407922211124603, - 4391808302832797, - 2592724135081434, + 21888242871839275222246405745257275088548364400416034343698202090898385040763, + 21888242871839275222246405745257275088548364400416034343698204074784476748957, + 21888242871839275222246405745257275088548364400416034343698202275700308997594, 969761323663013, - 4097995349835590, - 3054239467814177, - 3179070223075593, + 21888242871839275222246405745257275088548364400416034343698203780971523751750, + 21888242871839275222246405745257275088548364400416034343698202737215641730337, + 21888242871839275222246405745257275088548364400416034343698202862046396991753, 485173940216530, - 4234090552167657, + 21888242871839275222246405745257275088548364400416034343698203917066726083817, 1946585125859676, 196004542217303, - 3729213349499599, - 2522880950219929, + 21888242871839275222246405745257275088548364400416034343698203412189523415759, + 21888242871839275222246405745257275088548364400416034343698202205857124136089, 1078645053227919, - 3019657727590780, + 21888242871839275222246405745257275088548364400416034343698202702633901506940, 1093534564673149, - 4120445013005317, + 21888242871839275222246405745257275088548364400416034343698203803421186921477, 1296907012823849, 1839497868255059, 1824268713219384, - 3098167088511584, + 21888242871839275222246405745257275088548364400416034343698202781143262427744, 402653205451728, - 3976560107317478, - 3964051625562075, + 21888242871839275222246405745257275088548364400416034343698203659536281233638, + 21888242871839275222246405745257275088548364400416034343698203647027799478235, 1361108403484969, 157129886538352, - 4493639570736325, - 2452022513353348, - 2820233018005846, + 21888242871839275222246405745257275088548364400416034343698204176615744652485, + 21888242871839275222246405745257275088548364400416034343698202134998687269508, + 21888242871839275222246405745257275088548364400416034343698202503209191922006, 932352550748997, 1636728540941195, 2177231820998521, @@ -26642,221 +26642,221 @@ pub global CRP: [Polynomial; L] = [ 976839374314294, 656337909394356, 217432567981365, - 2966340020434933, - 2939796329616521, - 3285026717841785, - 2866335132011043, + 21888242871839275222246405745257275088548364400416034343698202649316194351093, + 21888242871839275222246405745257275088548364400416034343698202622772503532681, + 21888242871839275222246405745257275088548364400416034343698202968002891757945, + 21888242871839275222246405745257275088548364400416034343698202549311305927203, 2050412171081956, 1053801007699646, - 3414475776032769, + 21888242871839275222246405745257275088548364400416034343698203097451949948929, 938713923597171, - 4217376730910422, + 21888242871839275222246405745257275088548364400416034343698203900352904826582, 1351358729117492, 806345650472393, 962707164012663, - 4309470482967170, - 2649265295432980, + 21888242871839275222246405745257275088548364400416034343698203992446656883330, + 21888242871839275222246405745257275088548364400416034343698202332241469349140, 1554744832427183, 2001475423937811, 192199514331295, 112177333906722, 973666116581731, - 2921320104680199, - 2270557586393376, - 4102016724465081, - 2317268903833620, - 3704762733122041, + 21888242871839275222246405745257275088548364400416034343698202604296278596359, + 21888242871839275222246405745257275088548364400416034343698201953533760309536, + 21888242871839275222246405745257275088548364400416034343698203784992898381241, + 21888242871839275222246405745257275088548364400416034343698202000245077749780, + 21888242871839275222246405745257275088548364400416034343698203387738907038201, 2055599838068270, 1549897164941133, - 3818927233915094, - 2439517982998929, - 3415024697312796, + 21888242871839275222246405745257275088548364400416034343698203501903407831254, + 21888242871839275222246405745257275088548364400416034343698202122494156915089, + 21888242871839275222246405745257275088548364400416034343698203098000871228956, 944009098884192, - 2684841984883599, + 21888242871839275222246405745257275088548364400416034343698202367818158799759, 164539494290359, 1102944891434928, - 3451066285484265, - 3349386441021997, - 4239421424494151, + 21888242871839275222246405745257275088548364400416034343698203134042459400425, + 21888242871839275222246405745257275088548364400416034343698203032362614938157, + 21888242871839275222246405745257275088548364400416034343698203922397598410311, 670511832170881, 2205344537352573, - 3116976100824187, + 21888242871839275222246405745257275088548364400416034343698202799952274740347, 531513600153763, - 3290481236459177, + 21888242871839275222246405745257275088548364400416034343698202973457410375337, 190184060207735, 25940382667357, - 2608370172960206, + 21888242871839275222246405745257275088548364400416034343698202291346346876366, 1801629348565688, - 2690837903864852, + 21888242871839275222246405745257275088548364400416034343698202373814077781012, 888983697652703, - 3608417367337717, - 3906781127067230, - 3832884762327071, - 3744750843507001, - 4341023704942924, + 21888242871839275222246405745257275088548364400416034343698203291393541253877, + 21888242871839275222246405745257275088548364400416034343698203589757300983390, + 21888242871839275222246405745257275088548364400416034343698203515860936243231, + 21888242871839275222246405745257275088548364400416034343698203427727017423161, + 21888242871839275222246405745257275088548364400416034343698204023999878859084, 162200485759571, - 2775380951529011, + 21888242871839275222246405745257275088548364400416034343698202458357125445171, 1930329974454209, 2105826194508438, - 2336643556796315, - 3728881343736993, - 3871577057721471, - 2923908436190943, + 21888242871839275222246405745257275088548364400416034343698202019619730712475, + 21888242871839275222246405745257275088548364400416034343698203411857517653153, + 21888242871839275222246405745257275088548364400416034343698203554553231637631, + 21888242871839275222246405745257275088548364400416034343698202606884610107103, 451043951462117, - 2741003575075095, + 21888242871839275222246405745257275088548364400416034343698202423979748991255, 1505163445915168, 1321166534089993, - 2377764609197216, - 3715098546634408, - 2920508155060400, + 21888242871839275222246405745257275088548364400416034343698202060740783113376, + 21888242871839275222246405745257275088548364400416034343698203398074720550568, + 21888242871839275222246405745257275088548364400416034343698202603484328976560, 1778471742209764, - 4094586431751028, + 21888242871839275222246405745257275088548364400416034343698203777562605667188, 1063572725556242, - 2973710379897151, + 21888242871839275222246405745257275088548364400416034343698202656686553813311, 1046696749197514, 953150368632380, 513610169651257, - 3221235334542023, - 3462465929388422, + 21888242871839275222246405745257275088548364400416034343698202904211508458183, + 21888242871839275222246405745257275088548364400416034343698203145442103304582, 2157724730556648, 1638559234011736, 1749584000709331, - 3706746401685403, + 21888242871839275222246405745257275088548364400416034343698203389722575601563, 225922079130387, 1007456626964942, 341289396034141, 1937090034988480, - 3681677730245415, - 3481784635777333, - 2988281870983199, - 4185810949396091, + 21888242871839275222246405745257275088548364400416034343698203364653904161575, + 21888242871839275222246405745257275088548364400416034343698203164760809693493, + 21888242871839275222246405745257275088548364400416034343698202671258044899359, + 21888242871839275222246405745257275088548364400416034343698203868787123312251, 1072465011850018, - 3844506721227637, - 4071661745415266, + 21888242871839275222246405745257275088548364400416034343698203527482895143797, + 21888242871839275222246405745257275088548364400416034343698203754637919331426, 391643072067489, - 2573258086154175, - 4030192708114254, - 2877308048529871, - 2820297643820145, - 4195719324519116, - 4500361263506163, + 21888242871839275222246405745257275088548364400416034343698202256234260070335, + 21888242871839275222246405745257275088548364400416034343698203713168882030414, + 21888242871839275222246405745257275088548364400416034343698202560284222446031, + 21888242871839275222246405745257275088548364400416034343698202503273817736305, + 21888242871839275222246405745257275088548364400416034343698203878695498435276, + 21888242871839275222246405745257275088548364400416034343698204183337437422323, 434225960875328, - 2954088922935085, + 21888242871839275222246405745257275088548364400416034343698202637065096851245, 1508381647764526, - 3985076685497304, - 4322165694629755, + 21888242871839275222246405745257275088548364400416034343698203668052859413464, + 21888242871839275222246405745257275088548364400416034343698204005141868545915, 423076091663547, 1890028674623470, 1204549401047898, 1805985199757964, - 3020981520807628, - 3412261635651355, - 3725980102136566, - 3967468372589975, - 4278506862974597, + 21888242871839275222246405745257275088548364400416034343698202703957694723788, + 21888242871839275222246405745257275088548364400416034343698203095237809567515, + 21888242871839275222246405745257275088548364400416034343698203408956276052726, + 21888242871839275222246405745257275088548364400416034343698203650444546506135, + 21888242871839275222246405745257275088548364400416034343698203961483036890757, 397358997394399, 698591879586307, - 4452770168800514, - 2407110469918884, + 21888242871839275222246405745257275088548364400416034343698204135746342716674, + 21888242871839275222246405745257275088548364400416034343698202090086643835044, 998847577287977, - 3374938468721557, + 21888242871839275222246405745257275088548364400416034343698203057914642637717, 1183796307701415, 462737109829033, 1599068049743913, 1274852538549610, 27007765431038, - 2692897049114690, - 2573023938958183, + 21888242871839275222246405745257275088548364400416034343698202375873223030850, + 21888242871839275222246405745257275088548364400416034343698202256000112874343, 498491242762673, 325957377862986, 925762840423419, 1020005202712915, - 2805862343547518, - 3521975873144992, - 2799028653941621, + 21888242871839275222246405745257275088548364400416034343698202488838517463678, + 21888242871839275222246405745257275088548364400416034343698203204952047061152, + 21888242871839275222246405745257275088548364400416034343698202482004827857781, 735713761707706, 1924818353796184, - 3038029473954483, - 3724938193993006, - 3438412859896610, - 2842147938754240, - 3970700839996124, - 3363871972951385, - 4123004012000259, + 21888242871839275222246405745257275088548364400416034343698202721005647870643, + 21888242871839275222246405745257275088548364400416034343698203407914367909166, + 21888242871839275222246405745257275088548364400416034343698203121389033812770, + 21888242871839275222246405745257275088548364400416034343698202525124112670400, + 21888242871839275222246405745257275088548364400416034343698203653677013912284, + 21888242871839275222246405745257275088548364400416034343698203046848146867545, + 21888242871839275222246405745257275088548364400416034343698203805980185916419, 375107808857688, 388011504410827, - 2654623525650404, - 3704595582586518, + 21888242871839275222246405745257275088548364400416034343698202337599699566564, + 21888242871839275222246405745257275088548364400416034343698203387571756502678, 1047103338896295, - 2935633913462299, - 2515617474948745, + 21888242871839275222246405745257275088548364400416034343698202618610087378459, + 21888242871839275222246405745257275088548364400416034343698202198593648864905, 840261242702307, 1256492049159477, 1605103734634389, - 3817137437136457, - 2591653756051805, + 21888242871839275222246405745257275088548364400416034343698203500113611052617, + 21888242871839275222246405745257275088548364400416034343698202274629929967965, 83404534336548, - 3883900845326831, - 3074584510699692, + 21888242871839275222246405745257275088548364400416034343698203566877019242991, + 21888242871839275222246405745257275088548364400416034343698202757560684615852, 1404274169027174, 1641268213370346, 1765070286156544, - 2430636620303312, - 2378237535955739, + 21888242871839275222246405745257275088548364400416034343698202113612794219472, + 21888242871839275222246405745257275088548364400416034343698202061213709871899, 894156017838758, - 2398194847852338, + 21888242871839275222246405745257275088548364400416034343698202081171021768498, 392212826109673, - 2767582330316995, - 2339642964146755, - 2374540687012146, + 21888242871839275222246405745257275088548364400416034343698202450558504233155, + 21888242871839275222246405745257275088548364400416034343698202022619138062915, + 21888242871839275222246405745257275088548364400416034343698202057516860928306, 236599421729622, 626708611655914, 166762129584218, 1645352033419812, 522206009902430, - 3906914951559870, - 3286225838503859, - 3505842281092900, + 21888242871839275222246405745257275088548364400416034343698203589891125476030, + 21888242871839275222246405745257275088548364400416034343698202969202012420019, + 21888242871839275222246405745257275088548364400416034343698203188818455009060, 1396456966508452, - 3588209100592858, - 3302898166209228, + 21888242871839275222246405745257275088548364400416034343698203271185274509018, + 21888242871839275222246405745257275088548364400416034343698202985874340125388, 102730122523397, 792799931030685, - 3487333226947207, + 21888242871839275222246405745257275088548364400416034343698203170309400863367, 467342775794437, 1076415416655934, - 2910942233274162, + 21888242871839275222246405745257275088548364400416034343698202593918407190322, 180228275494724, 1283832302117246, 147941132711093, - 3527319360306910, + 21888242871839275222246405745257275088548364400416034343698203210295534223070, 531268731677018, 126708315172803, - 4446698307282428, - 3902110773990531, + 21888242871839275222246405745257275088548364400416034343698204129674481198588, + 21888242871839275222246405745257275088548364400416034343698203585086947906691, 955398912809435, - 3023959922227698, + 21888242871839275222246405745257275088548364400416034343698202706936096143858, 1053421883460964, - 2353468534623938, - 4376657453670019, - 2890740249457835, + 21888242871839275222246405745257275088548364400416034343698202036444708540098, + 21888242871839275222246405745257275088548364400416034343698204059633627586179, + 21888242871839275222246405745257275088548364400416034343698202573716423373995, 678023377024944, 1064757828447145, 675472852239188, 148150943840159, - 4311128822933219, - 4260693559899738, + 21888242871839275222246405745257275088548364400416034343698203994104996849379, + 21888242871839275222246405745257275088548364400416034343698203943669733815898, 1902964819969071, - 3535780564948038, + 21888242871839275222246405745257275088548364400416034343698203218756738864198, 301268921685855, 1053117271298370, - 3155977113492680, - 2368628449979231, - 4305669367896047, + 21888242871839275222246405745257275088548364400416034343698202838953287408840, + 21888242871839275222246405745257275088548364400416034343698202051604623895391, + 21888242871839275222246405745257275088548364400416034343698203988645541812207, 1510618925563265, 654810148153585, 467340052083782, - 4092920084434055, + 21888242871839275222246405745257275088548364400416034343698203775896258350215, 1973905026291474, 385411841382007, 1200074301541437, @@ -26868,215 +26868,215 @@ pub global CRP: [Polynomial; L] = [ 1808380318215149, 1640711325862176, 2035048427353617, - 3277739538863316, - 3145711993081993, + 21888242871839275222246405745257275088548364400416034343698202960715712779476, + 21888242871839275222246405745257275088548364400416034343698202828688166998153, 2161404032492990, 1167902258316343, 1232482761593540, - 3971146495772135, + 21888242871839275222246405745257275088548364400416034343698203654122669688295, 1489742516244920, 1281236156805760, - 4290775095219090, - 2394519411970540, - 4315871918745715, + 21888242871839275222246405745257275088548364400416034343698203973751269135250, + 21888242871839275222246405745257275088548364400416034343698202077495585886700, + 21888242871839275222246405745257275088548364400416034343698203998848092661875, 1560080757328863, - 4179017846933061, + 21888242871839275222246405745257275088548364400416034343698203861994020849221, 482491754438726, - 3820592220508760, - 3522200426205804, + 21888242871839275222246405745257275088548364400416034343698203503568394424920, + 21888242871839275222246405745257275088548364400416034343698203205176600121964, 511902848334549, 2175093164754600, 371996074827243, - 3177765337969454, + 21888242871839275222246405745257275088548364400416034343698202860741511885614, 1904180170462413, - 3280736492380747, + 21888242871839275222246405745257275088548364400416034343698202963712666296907, 1639955595535376, 1477928438280576, 49146267646824, 1629267493513052, - 2497860956832557, + 21888242871839275222246405745257275088548364400416034343698202180837130748717, 1728523543361230, - 3970676099655115, - 2330379153747118, - 2360327448915075, - 2756545529803653, - 4008701130271395, - 2451603679222428, + 21888242871839275222246405745257275088548364400416034343698203653652273571275, + 21888242871839275222246405745257275088548364400416034343698202013355327663278, + 21888242871839275222246405745257275088548364400416034343698202043303622831235, + 21888242871839275222246405745257275088548364400416034343698202439521703719813, + 21888242871839275222246405745257275088548364400416034343698203691677304187555, + 21888242871839275222246405745257275088548364400416034343698202134579853138588, 1690040155438084, 260078230533239, - 4421400074741067, + 21888242871839275222246405745257275088548364400416034343698204104376248657227, 244337453078712, - 3889905045410324, + 21888242871839275222246405745257275088548364400416034343698203572881219326484, 1315278202405933, - 4417121852783627, + 21888242871839275222246405745257275088548364400416034343698204100098026699787, 2010321445230700, - 3011142856053810, + 21888242871839275222246405745257275088548364400416034343698202694119029969970, 775073303275867, - 3311473945994366, - 2991028191341499, + 21888242871839275222246405745257275088548364400416034343698202994450119910526, + 21888242871839275222246405745257275088548364400416034343698202674004365257659, 1432425670313815, - 2813177686833586, - 2945652006064624, + 21888242871839275222246405745257275088548364400416034343698202496153860749746, + 21888242871839275222246405745257275088548364400416034343698202628628179980784, 1469134075032798, 273370330673560, 1667403972437632, 471887228854359, - 2491746725497695, + 21888242871839275222246405745257275088548364400416034343698202174722899413855, 1405454736273237, - 3488477537317671, - 4326429264007787, - 3510412596549116, + 21888242871839275222246405745257275088548364400416034343698203171453711233831, + 21888242871839275222246405745257275088548364400416034343698204009405437923947, + 21888242871839275222246405745257275088548364400416034343698203193388770465276, 171053488509336, 1423374801180763, 1380339006699215, - 2896332307737042, - 2393833550879872, + 21888242871839275222246405745257275088548364400416034343698202579308481653202, + 21888242871839275222246405745257275088548364400416034343698202076809724796032, 1616042429742807, - 3722198797770830, - 2479873281222918, - 2840091502556662, - 3316962433469217, + 21888242871839275222246405745257275088548364400416034343698203405174971686990, + 21888242871839275222246405745257275088548364400416034343698202162849455139078, + 21888242871839275222246405745257275088548364400416034343698202523067676472822, + 21888242871839275222246405745257275088548364400416034343698202999938607385377, 562180581017784, - 2271954226855664, - 3971281634183902, + 21888242871839275222246405745257275088548364400416034343698201954930400771824, + 21888242871839275222246405745257275088548364400416034343698203654257808100062, 1338136579820633, 1113111084140309, 1304976878840355, - 2394707717202367, - 2575333501787866, - 2252402613890935, - 2313148247993018, + 21888242871839275222246405745257275088548364400416034343698202077683891118527, + 21888242871839275222246405745257275088548364400416034343698202258309675704026, + 21888242871839275222246405745257275088548364400416034343698201935378787807095, + 21888242871839275222246405745257275088548364400416034343698201996124421909178, 1982719155046440, 1594648145176252, - 2388364818818565, + 21888242871839275222246405745257275088548364400416034343698202071340992734725, 513752431070869, - 3241524624078188, - 4091601740894261, - 4296852095197517, + 21888242871839275222246405745257275088548364400416034343698202924500797994348, + 21888242871839275222246405745257275088548364400416034343698203774577914810421, + 21888242871839275222246405745257275088548364400416034343698203979828269113677, 2048371710507528, - 2937242793784094, - 3783595162298390, + 21888242871839275222246405745257275088548364400416034343698202620218967700254, + 21888242871839275222246405745257275088548364400416034343698203466571336214550, 609606926222277, 1898573332551087, 1999241442870040, - 4143476335510628, + 21888242871839275222246405745257275088548364400416034343698203826452509426788, 1587647519116250, 1437588921577313, - 3736590755859738, - 3929978042488354, - 3681340981247183, - 2461612443099425, + 21888242871839275222246405745257275088548364400416034343698203419566929775898, + 21888242871839275222246405745257275088548364400416034343698203612954216404514, + 21888242871839275222246405745257275088548364400416034343698203364317155163343, + 21888242871839275222246405745257275088548364400416034343698202144588617015585, 1872688306858423, - 2445323380536449, - 3726405548930302, + 21888242871839275222246405745257275088548364400416034343698202128299554452609, + 21888242871839275222246405745257275088548364400416034343698203409381722846462, 1718078805020318, - 3449408546033986, - 4455977334285122, + 21888242871839275222246405745257275088548364400416034343698203132384719950146, + 21888242871839275222246405745257275088548364400416034343698204138953508201282, 2206950612955409, - 2764347258236755, - 4395901098551970, + 21888242871839275222246405745257275088548364400416034343698202447323432152915, + 21888242871839275222246405745257275088548364400416034343698204078877272468130, 131297960178414, 56952885923985, 90631481306268, - 2790756676045911, - 3064595792150684, + 21888242871839275222246405745257275088548364400416034343698202473732849962071, + 21888242871839275222246405745257275088548364400416034343698202747571966066844, 215247659864672, - 4251687151563962, - 2700721964354042, + 21888242871839275222246405745257275088548364400416034343698203934663325480122, + 21888242871839275222246405745257275088548364400416034343698202383698138270202, 652869122060996, 647770821606983, 1422078464617082, - 3344858484656143, + 21888242871839275222246405745257275088548364400416034343698203027834658572303, 891720478322224, 2011091821679270, 1164859345290593, 1751486361447689, - 2874905381086079, + 21888242871839275222246405745257275088548364400416034343698202557881555002239, 400141737271872, - 3249522181492563, - 2313560757400964, - 3116881110328187, - 4070614693509376, + 21888242871839275222246405745257275088548364400416034343698202932498355408723, + 21888242871839275222246405745257275088548364400416034343698201996536931317124, + 21888242871839275222246405745257275088548364400416034343698202799857284244347, + 21888242871839275222246405745257275088548364400416034343698203753590867425536, 321579148354302, - 2710725227531823, + 21888242871839275222246405745257275088548364400416034343698202393701401447983, 362958025601638, - 2621444967401363, + 21888242871839275222246405745257275088548364400416034343698202304421141317523, 1502517970268125, - 3760932536381848, - 3925928157883479, + 21888242871839275222246405745257275088548364400416034343698203443908710298008, + 21888242871839275222246405745257275088548364400416034343698203608904331799639, 776367979200623, 554483040308448, 1393924471872290, - 3616790096753279, - 4131416824644849, - 3098922856798654, - 2327256439185527, - 2637067550746593, - 4185389345162569, - 3300606776665830, + 21888242871839275222246405745257275088548364400416034343698203299766270669439, + 21888242871839275222246405745257275088548364400416034343698203814392998561009, + 21888242871839275222246405745257275088548364400416034343698202781899030714814, + 21888242871839275222246405745257275088548364400416034343698202010232613101687, + 21888242871839275222246405745257275088548364400416034343698202320043724662753, + 21888242871839275222246405745257275088548364400416034343698203868365519078729, + 21888242871839275222246405745257275088548364400416034343698202983582950581990, 831908784146687, 1375134749003772, - 4330026264672628, + 21888242871839275222246405745257275088548364400416034343698204013002438588788, 1198083173450831, - 3688751268895855, + 21888242871839275222246405745257275088548364400416034343698203371727442812015, 518839571638338, - 2538882749113373, - 3735130263052563, - 4387200912313562, + 21888242871839275222246405745257275088548364400416034343698202221858923029533, + 21888242871839275222246405745257275088548364400416034343698203418106436968723, + 21888242871839275222246405745257275088548364400416034343698204070177086229722, 1478558439146296, 1958326765898187, 2095733830830209, 1530193421034502, - 3846552414345160, - 2686839064011630, - 2796716366915196, - 3780006946891060, + 21888242871839275222246405745257275088548364400416034343698203529528588261320, + 21888242871839275222246405745257275088548364400416034343698202369815237927790, + 21888242871839275222246405745257275088548364400416034343698202479692540831356, + 21888242871839275222246405745257275088548364400416034343698203462983120807220, 1120910142797565, 146988081020365, 493873094590006, 895295954336264, - 3071391760978930, - 4399180149756829, + 21888242871839275222246405745257275088548364400416034343698202754367934895090, + 21888242871839275222246405745257275088548364400416034343698204082156323672989, 1163489849054197, 381690949600683, - 4362475128751183, + 21888242871839275222246405745257275088548364400416034343698204045451302667343, 2057968283338058, - 2975076191510256, - 3110154106818663, - 2469321369266323, - 3472448204938103, - 3614953916091320, + 21888242871839275222246405745257275088548364400416034343698202658052365426416, + 21888242871839275222246405745257275088548364400416034343698202793130280734823, + 21888242871839275222246405745257275088548364400416034343698202152297543182483, + 21888242871839275222246405745257275088548364400416034343698203155424378854263, + 21888242871839275222246405745257275088548364400416034343698203297930090007480, 649641044812634, - 3229299039766123, + 21888242871839275222246405745257275088548364400416034343698202912275213682283, 1493269162845275, 1064785485534465, 840839837100688, 676376681858262, 345851083452972, - 4070164011918537, - 4407849821344220, - 3362513644713512, + 21888242871839275222246405745257275088548364400416034343698203753140185834697, + 21888242871839275222246405745257275088548364400416034343698204090825995260380, + 21888242871839275222246405745257275088548364400416034343698203045489818629672, 1535943776608429, 695700895331383, - 2688828277659115, + 21888242871839275222246405745257275088548364400416034343698202371804451575275, 34095278567968, - 4449230767003418, - 2981816649550102, - 3679848092075407, + 21888242871839275222246405745257275088548364400416034343698204132206940919578, + 21888242871839275222246405745257275088548364400416034343698202664792823466262, + 21888242871839275222246405745257275088548364400416034343698203362824265991567, 555062698355175, 650474975647851, 794790809398894, - 3171849505700429, - 2732691526482344, + 21888242871839275222246405745257275088548364400416034343698202854825679616589, + 21888242871839275222246405745257275088548364400416034343698202415667700398504, 525430085332557, 2157389510489486, - 2516828329923950, - 2324563167871761, - 4478438105158041, + 21888242871839275222246405745257275088548364400416034343698202199804503840110, + 21888242871839275222246405745257275088548364400416034343698202007539341787921, + 21888242871839275222246405745257275088548364400416034343698204161414279074201, 1733871313026785, - 2521701473697054, + 21888242871839275222246405745257275088548364400416034343698202204677647613214, 614340085729110, - 4080783666451042, + 21888242871839275222246405745257275088548364400416034343698203763759840367202, 308038155374295, 717172136589050, 857611884812149, @@ -27085,232 +27085,232 @@ pub global CRP: [Polynomial; L] = [ 653536373656866, 904608270026661, 494071903622242, - 4295665078322889, - 3718409132607723, + 21888242871839275222246405745257275088548364400416034343698203978641252239049, + 21888242871839275222246405745257275088548364400416034343698203401385306523883, 1862261388105409, 1475826964044795, 1526277978828433, - 3295586069393243, + 21888242871839275222246405745257275088548364400416034343698202978562243309403, 104097935742790, 1935587393701326, 827464742418846, 432302818387061, 1111701937849007, - 2470756465483905, + 21888242871839275222246405745257275088548364400416034343698202153732639400065, 1600108666567892, 952806148589942, - 4226906485394308, - 3695194136727288, - 3545766411054344, + 21888242871839275222246405745257275088548364400416034343698203909882659310468, + 21888242871839275222246405745257275088548364400416034343698203378170310643448, + 21888242871839275222246405745257275088548364400416034343698203228742584970504, 1791377957922317, 1615008718017657, - 2547327446609277, + 21888242871839275222246405745257275088548364400416034343698202230303620525437, 2008504261274692, - 2255756234414687, - 3242077464369198, + 21888242871839275222246405745257275088548364400416034343698201938732408330847, + 21888242871839275222246405745257275088548364400416034343698202925053638285358, 835996528840961, 1781283151304632, 1494851300020337, 2028610466125491, - 2300314016352619, + 21888242871839275222246405745257275088548364400416034343698201983290190268779, 1673938107899323, - 2840069407199874, - 2358688003930755, + 21888242871839275222246405745257275088548364400416034343698202523045581116034, + 21888242871839275222246405745257275088548364400416034343698202041664177846915, 123511431868581, 689386942771470, 1063534710479898, 968025211569985, - 4113904373418146, - 3765766828408407, + 21888242871839275222246405745257275088548364400416034343698203796880547334306, + 21888242871839275222246405745257275088548364400416034343698203448743002324567, 298114913015459, 1375645918845508, 1903318822054421, 734143798696252, - 2774779549123006, + 21888242871839275222246405745257275088548364400416034343698202457755723039166, 1016654201757024, - 3994417036475081, - 4175675432214109, + 21888242871839275222246405745257275088548364400416034343698203677393210391241, + 21888242871839275222246405745257275088548364400416034343698203858651606130269, 18487428243773, 538092917190090, 1020470297048897, 1456906741900966, - 3541009100224291, + 21888242871839275222246405745257275088548364400416034343698203223985274140451, 348826035143763, - 4491394088191963, + 21888242871839275222246405745257275088548364400416034343698204174370262108123, 1148236128415443, - 4088637142821575, + 21888242871839275222246405745257275088548364400416034343698203771613316737735, 105764458424529, 1702817029931109, 554376807520166, - 2773489307770249, + 21888242871839275222246405745257275088548364400416034343698202456465481686409, 1960643400725263, - 3307782807787880, + 21888242871839275222246405745257275088548364400416034343698202990758981704040, 2060644411110702, 2157371124056361, 1231554931230459, - 2831161879006803, - 2371261979728085, - 2912113648367874, + 21888242871839275222246405745257275088548364400416034343698202514138052922963, + 21888242871839275222246405745257275088548364400416034343698202054238153644245, + 21888242871839275222246405745257275088548364400416034343698202595089822284034, 1414075476631970, 1495415181441525, 667286817406797, 331809385200852, - 3503952278969389, - 2829180183400366, + 21888242871839275222246405745257275088548364400416034343698203186928452885549, + 21888242871839275222246405745257275088548364400416034343698202512156357316526, 1153841106798599, - 3407466989119405, - 4451705400180907, - 4318394298584064, - 3084526333184482, - 3543611596186805, + 21888242871839275222246405745257275088548364400416034343698203090443163035565, + 21888242871839275222246405745257275088548364400416034343698204134681574097067, + 21888242871839275222246405745257275088548364400416034343698204001370472500224, + 21888242871839275222246405745257275088548364400416034343698202767502507100642, + 21888242871839275222246405745257275088548364400416034343698203226587770102965, 1603591505755333, - 2958520439589470, + 21888242871839275222246405745257275088548364400416034343698202641496613505630, 1826413018704152, - 3370811277659719, + 21888242871839275222246405745257275088548364400416034343698203053787451575879, 1136323638146993, - 3252887157519388, + 21888242871839275222246405745257275088548364400416034343698202935863331435548, 731415020111159, 694468668178323, 234512362068159, 962107508205904, - 3922079500144868, - 3153259111107347, - 2891588922847062, - 3183542946084292, + 21888242871839275222246405745257275088548364400416034343698203605055674061028, + 21888242871839275222246405745257275088548364400416034343698202836235285023507, + 21888242871839275222246405745257275088548364400416034343698202574565096763222, + 21888242871839275222246405745257275088548364400416034343698202866519120000452, 84209064354192, - 3095438862172748, - 3746434933804093, + 21888242871839275222246405745257275088548364400416034343698202778415036088908, + 21888242871839275222246405745257275088548364400416034343698203429411107720253, 1643256280914841, 790063241666932, 82521320976018, - 4149475214923418, - 2725742589041280, - 2583098977780133, + 21888242871839275222246405745257275088548364400416034343698203832451388839578, + 21888242871839275222246405745257275088548364400416034343698202408718762957440, + 21888242871839275222246405745257275088548364400416034343698202266075151696293, 2240920160216851, - 2546868231840485, - 3064599272608091, - 3774364558811488, + 21888242871839275222246405745257275088548364400416034343698202229844405756645, + 21888242871839275222246405745257275088548364400416034343698202747575446524251, + 21888242871839275222246405745257275088548364400416034343698203457340732727648, 1650870893113546, 385859120611499, 606408958419180, 393406371231122, 32866205850778, - 2916779181372377, - 3630173874467122, + 21888242871839275222246405745257275088548364400416034343698202599755355288537, + 21888242871839275222246405745257275088548364400416034343698203313150048383282, 668607578855377, 1061103623765039, 1850509497432817, - 2758495942175304, - 3094251665418991, - 3519075983116428, - 2531397949115340, + 21888242871839275222246405745257275088548364400416034343698202441472116091464, + 21888242871839275222246405745257275088548364400416034343698202777227839335151, + 21888242871839275222246405745257275088548364400416034343698203202052157032588, + 21888242871839275222246405745257275088548364400416034343698202214374123031500, 389995009579969, - 3041434887773234, + 21888242871839275222246405745257275088548364400416034343698202724411061689394, 50945835411475, 1163231005481355, 712000066680069, - 4248394363924794, + 21888242871839275222246405745257275088548364400416034343698203931370537840954, 1200781835439677, 752532528095078, 968708916142256, 1824270210290529, - 2971714417308867, + 21888242871839275222246405745257275088548364400416034343698202654690591225027, 839948637786803, - 4318128971608419, + 21888242871839275222246405745257275088548364400416034343698204001105145524579, 1983323606603277, - 4167486337249062, - 2417481984623226, - 4313256799124913, - 4436161618294476, - 3196308844639913, + 21888242871839275222246405745257275088548364400416034343698203850462511165222, + 21888242871839275222246405745257275088548364400416034343698202100458158539386, + 21888242871839275222246405745257275088548364400416034343698203996232973041073, + 21888242871839275222246405745257275088548364400416034343698204119137792210636, + 21888242871839275222246405745257275088548364400416034343698202879285018556073, 2063146412585781, - 2428433153449390, + 21888242871839275222246405745257275088548364400416034343698202111409327365550, 1200560497746238, - 4338848528548768, + 21888242871839275222246405745257275088548364400416034343698204021824702464928, 7727011139386, - 3617438893828398, - 2361420814367765, - 2797953636519891, - 3750636675984209, - 4249700022746014, + 21888242871839275222246405745257275088548364400416034343698203300415067744558, + 21888242871839275222246405745257275088548364400416034343698202044396988283925, + 21888242871839275222246405745257275088548364400416034343698202480929810436051, + 21888242871839275222246405745257275088548364400416034343698203433612849900369, + 21888242871839275222246405745257275088548364400416034343698203932676196662174, 1767496286830117, 1733225097681212, - 4343246751606878, - 3460197488263825, - 2821373379137875, - 2504848164707652, - 4376834032562917, - 3776221550305199, + 21888242871839275222246405745257275088548364400416034343698204026222925523038, + 21888242871839275222246405745257275088548364400416034343698203143173662179985, + 21888242871839275222246405745257275088548364400416034343698202504349553054035, + 21888242871839275222246405745257275088548364400416034343698202187824338623812, + 21888242871839275222246405745257275088548364400416034343698204059810206479077, + 21888242871839275222246405745257275088548364400416034343698203459197724221359, 1132039150226582, - 4393399969907216, - 4246636101200221, + 21888242871839275222246405745257275088548364400416034343698204076376143823376, + 21888242871839275222246405745257275088548364400416034343698203929612275116381, 2222944032508575, 698924470596794, 1767199519903587, 1667328342661587, - 3318611629646594, - 2979245259771663, - 2689043745258139, - 3448996073160925, + 21888242871839275222246405745257275088548364400416034343698203001587803562754, + 21888242871839275222246405745257275088548364400416034343698202662221433687823, + 21888242871839275222246405745257275088548364400416034343698202372019919174299, + 21888242871839275222246405745257275088548364400416034343698203131972247077085, 1893402922116541, - 2841054606119788, - 2374095971530228, + 21888242871839275222246405745257275088548364400416034343698202524030780035948, + 21888242871839275222246405745257275088548364400416034343698202057072145446388, 1727624529991885, - 2898878242465356, + 21888242871839275222246405745257275088548364400416034343698202581854416381516, 1854664141331447, - 4194071893339471, - 3856609433049284, + 21888242871839275222246405745257275088548364400416034343698203877048067255631, + 21888242871839275222246405745257275088548364400416034343698203539585606965444, 1878108557833148, - 4405757422676552, - 3881148555096500, + 21888242871839275222246405745257275088548364400416034343698204088733596592712, + 21888242871839275222246405745257275088548364400416034343698203564124729012660, 411742207284424, 1618749701585913, 1918336715408874, - 2714696607766036, - 2500582070727416, + 21888242871839275222246405745257275088548364400416034343698202397672781682196, + 21888242871839275222246405745257275088548364400416034343698202183558244643576, 457098796062637, - 2695618082539190, - 2285539944762643, - 3343979334070625, - 3176431037420101, + 21888242871839275222246405745257275088548364400416034343698202378594256455350, + 21888242871839275222246405745257275088548364400416034343698201968516118678803, + 21888242871839275222246405745257275088548364400416034343698203026955507986785, + 21888242871839275222246405745257275088548364400416034343698202859407211336261, 680434351298917, - 3386419769335387, - 4449926409837083, - 3156837031191105, - 2754574432450618, + 21888242871839275222246405745257275088548364400416034343698203069395943251547, + 21888242871839275222246405745257275088548364400416034343698204132902583753243, + 21888242871839275222246405745257275088548364400416034343698202839813205107265, + 21888242871839275222246405745257275088548364400416034343698202437550606366778, 474352642562064, 1028637641514302, 570208458731245, - 4002201525800036, + 21888242871839275222246405745257275088548364400416034343698203685177699716196, 920547537521458, 1510585284110298, - 4017292427726630, + 21888242871839275222246405745257275088548364400416034343698203700268601642790, 1839693602564685, - 4295750016764046, - 3096009801202394, + 21888242871839275222246405745257275088548364400416034343698203978726190680206, + 21888242871839275222246405745257275088548364400416034343698202778985975118554, 159659488406623, - 4238898275070420, - 3477630812139991, + 21888242871839275222246405745257275088548364400416034343698203921874448986580, + 21888242871839275222246405745257275088548364400416034343698203160606986056151, 2210599890587010, 2118920718455799, 1534698398906112, 1258565346032786, - 3245418229714466, + 21888242871839275222246405745257275088548364400416034343698202928394403630626, 2086787777633883, 1006057829431796, - 3605830115613485, + 21888242871839275222246405745257275088548364400416034343698203288806289529645, 1396219883906189, - 2537358191229033, - 4136787014528913, - 3547952552666682, + 21888242871839275222246405745257275088548364400416034343698202220334365145193, + 21888242871839275222246405745257275088548364400416034343698203819763188445073, + 21888242871839275222246405745257275088548364400416034343698203230928726582842, 15055130458328, - 4441468557716804, + 21888242871839275222246405745257275088548364400416034343698204124444731632964, 1754606357109857, 129405890513487, 2078944671260157, - 3400116967079557, - 4370463186028992, - 3125913142449296, + 21888242871839275222246405745257275088548364400416034343698203083093140995717, + 21888242871839275222246405745257275088548364400416034343698204053439359945152, + 21888242871839275222246405745257275088548364400416034343698202808889316365456, 764072578831493, 643490577007615, 745030541675510, @@ -27318,170 +27318,170 @@ pub global CRP: [Polynomial; L] = [ 1272884693095899, 922010219546437, 333918867433770, - 4429372789025641, - 3534784572865163, - 4255466300788923, - 3873462953175859, - 4096487579537794, + 21888242871839275222246405745257275088548364400416034343698204112348962941801, + 21888242871839275222246405745257275088548364400416034343698203217760746781323, + 21888242871839275222246405745257275088548364400416034343698203938442474705083, + 21888242871839275222246405745257275088548364400416034343698203556439127092019, + 21888242871839275222246405745257275088548364400416034343698203779463753453954, 903706784765039, 2169240294606136, - 2644584242151333, + 21888242871839275222246405745257275088548364400416034343698202327560416067493, 405840546473036, - 3306254497390921, - 4450505931338718, - 4491038602758549, + 21888242871839275222246405745257275088548364400416034343698202989230671307081, + 21888242871839275222246405745257275088548364400416034343698204133482105254878, + 21888242871839275222246405745257275088548364400416034343698204174014776674709, 2130264695300645, 1957978068635263, - 2690829844627713, - 3385969383704189, + 21888242871839275222246405745257275088548364400416034343698202373806018543873, + 21888242871839275222246405745257275088548364400416034343698203068945557620349, 1570132531020143, - 2392233856346985, + 21888242871839275222246405745257275088548364400416034343698202075210030263145, 1198200995547436, - 3708267539665946, - 2472429739210585, + 21888242871839275222246405745257275088548364400416034343698203391243713582106, + 21888242871839275222246405745257275088548364400416034343698202155405913126745, 1773735248185299, - 4012026398526482, + 21888242871839275222246405745257275088548364400416034343698203695002572442642, 9035164342051, - 3968154024803331, - 3817336102080956, - 3070689747621682, + 21888242871839275222246405745257275088548364400416034343698203651130198719491, + 21888242871839275222246405745257275088548364400416034343698203500312275997116, + 21888242871839275222246405745257275088548364400416034343698202753665921537842, 1021673038893622, - 3573988925756371, + 21888242871839275222246405745257275088548364400416034343698203256965099672531, 869825037861449, - 3753744077523876, + 21888242871839275222246405745257275088548364400416034343698203436720251440036, 2191865033558019, - 3160116930635064, + 21888242871839275222246405745257275088548364400416034343698202843093104551224, 422634546377295, 1162459595897055, 1678128193616501, 930636337590384, 243252277270783, - 2403152067827673, - 4456759703178042, - 3969633544134752, + 21888242871839275222246405745257275088548364400416034343698202086128241743833, + 21888242871839275222246405745257275088548364400416034343698204139735877094202, + 21888242871839275222246405745257275088548364400416034343698203652609718050912, 1352132896383213, - 2575959611960305, + 21888242871839275222246405745257275088548364400416034343698202258935785876465, 464389956111872, - 2824504941933495, + 21888242871839275222246405745257275088548364400416034343698202507481115849655, 1132692727286749, - 2613310405216485, + 21888242871839275222246405745257275088548364400416034343698202296286579132645, 1861990929600457, - 4206117173182778, + 21888242871839275222246405745257275088548364400416034343698203889093347098938, 255549859490311, - 2419464496736548, + 21888242871839275222246405745257275088548364400416034343698202102440670652708, 926561318007743, - 4159592443710661, - 4283755756074831, + 21888242871839275222246405745257275088548364400416034343698203842568617626821, + 21888242871839275222246405745257275088548364400416034343698203966731929990991, 632149041919037, - 2647833185669597, + 21888242871839275222246405745257275088548364400416034343698202330809359585757, 1902236031290918, 2227190614241070, 36277551231492, - 3740889767857808, + 21888242871839275222246405745257275088548364400416034343698203423865941773968, 600630679949200, - 4227603038137219, - 2372957686769607, + 21888242871839275222246405745257275088548364400416034343698203910579212053379, + 21888242871839275222246405745257275088548364400416034343698202055933860685767, 357793622109969, 2207822908607725, 448777911505287, - 4105361494565203, + 21888242871839275222246405745257275088548364400416034343698203788337668481363, 1898590394973909, 1373679040292505, - 3045934430941313, + 21888242871839275222246405745257275088548364400416034343698202728910604857473, 1804222288147140, - 3278866332324385, - 3192949380108473, - 3714853704762184, - 2617212016008261, + 21888242871839275222246405745257275088548364400416034343698202961842506240545, + 21888242871839275222246405745257275088548364400416034343698202875925554024633, + 21888242871839275222246405745257275088548364400416034343698203397829878678344, + 21888242871839275222246405745257275088548364400416034343698202300188189924421, 1600636403100630, - 4449410679787604, + 21888242871839275222246405745257275088548364400416034343698204132386853703764, 1760430625372367, 537086110179322, - 4489113543817974, + 21888242871839275222246405745257275088548364400416034343698204172089717734134, 60448704359185, - 3600508861381513, + 21888242871839275222246405745257275088548364400416034343698203283485035297673, 448149190802815, 898755532293320, - 2928892673590921, - 2262387003335241, - 2639484173064132, - 4456103944007866, - 4086477958276658, + 21888242871839275222246405745257275088548364400416034343698202611868847507081, + 21888242871839275222246405745257275088548364400416034343698201945363177251401, + 21888242871839275222246405745257275088548364400416034343698202322460346980292, + 21888242871839275222246405745257275088548364400416034343698204139080117924026, + 21888242871839275222246405745257275088548364400416034343698203769454132192818, 1337271800968000, - 2775197160199844, - 2403612784405440, + 21888242871839275222246405745257275088548364400416034343698202458173334116004, + 21888242871839275222246405745257275088548364400416034343698202086588958321600, 1541300049815022, 1026897097607259, - 4394725188719839, - 3692545756127573, - 3129953952669788, + 21888242871839275222246405745257275088548364400416034343698204077701362635999, + 21888242871839275222246405745257275088548364400416034343698203375521930043733, + 21888242871839275222246405745257275088548364400416034343698202812930126585948, 332990529605931, 1926057646437471, - 2437655431467496, + 21888242871839275222246405745257275088548364400416034343698202120631605383656, 2035473467121298, - 3454967210702141, + 21888242871839275222246405745257275088548364400416034343698203137943384618301, 296861945102772, 641969851106447, 1989630851754846, - 4183710697423966, + 21888242871839275222246405745257275088548364400416034343698203866686871340126, 1379527304259263, 1430242726841021, - 3475238590268362, - 2422260649459804, - 2282170522706530, - 4240498982403839, + 21888242871839275222246405745257275088548364400416034343698203158214764184522, + 21888242871839275222246405745257275088548364400416034343698202105236823375964, + 21888242871839275222246405745257275088548364400416034343698201965146696622690, + 21888242871839275222246405745257275088548364400416034343698203923475156319999, 137572971808601, - 3477498739093844, - 2389810223491904, + 21888242871839275222246405745257275088548364400416034343698203160474913010004, + 21888242871839275222246405745257275088548364400416034343698202072786397408064, 1680623873929567, - 2648985336251949, - 3175434907114875, + 21888242871839275222246405745257275088548364400416034343698202331961510168109, + 21888242871839275222246405745257275088548364400416034343698202858411081031035, 1070051572514720, - 3228710962352382, + 21888242871839275222246405745257275088548364400416034343698202911687136268542, 1097745577105018, - 3531662558692011, - 3223168879633820, + 21888242871839275222246405745257275088548364400416034343698203214638732608171, + 21888242871839275222246405745257275088548364400416034343698202906145053549980, 2136350757993200, 1315869521998510, 1349809379149289, - 3463531615939756, - 3039542292824466, - 4217024822563262, + 21888242871839275222246405745257275088548364400416034343698203146507789855916, + 21888242871839275222246405745257275088548364400416034343698202722518466740626, + 21888242871839275222246405745257275088548364400416034343698203900000996479422, 602425666337825, 826008882561824, - 4313768714386141, + 21888242871839275222246405745257275088548364400416034343698203996744888302301, 869194985537839, 1154082693740785, - 4118437408047434, + 21888242871839275222246405745257275088548364400416034343698203801413581963594, 2249985486785201, - 2407482637895898, - 3588897538145751, - 2759813010294208, - 4108797535449295, + 21888242871839275222246405745257275088548364400416034343698202090458811812058, + 21888242871839275222246405745257275088548364400416034343698203271873712061911, + 21888242871839275222246405745257275088548364400416034343698202442789184210368, + 21888242871839275222246405745257275088548364400416034343698203791773709365455, 719141229186692, - 2322861516458632, - 3905283119755073, - 3591591233100409, + 21888242871839275222246405745257275088548364400416034343698202005837690374792, + 21888242871839275222246405745257275088548364400416034343698203588259293671233, + 21888242871839275222246405745257275088548364400416034343698203274567407016569, 459255976860103, 598560621762047, - 4085560731224049, - 3027990976291477, + 21888242871839275222246405745257275088548364400416034343698203768536905140209, + 21888242871839275222246405745257275088548364400416034343698202710967150207637, 2109281067353415, - 3548574575327476, + 21888242871839275222246405745257275088548364400416034343698203231550749243636, 2208321273090114, 916936756926691, - 4245780619433547, - 2385122493539138, + 21888242871839275222246405745257275088548364400416034343698203928756793349707, + 21888242871839275222246405745257275088548364400416034343698202068098667455298, 1742822580560268, 1527835462843100, - 2710219146074916, - 2421903771406652, + 21888242871839275222246405745257275088548364400416034343698202393195319991076, + 21888242871839275222246405745257275088548364400416034343698202104879945322812, 579660742370026, - 2451864525152346, - 4389163189355101, + 21888242871839275222246405745257275088548364400416034343698202134840699068506, + 21888242871839275222246405745257275088548364400416034343698204072139363271261, 1471982967001418, - 3341051299096041, - 4031917613753818, + 21888242871839275222246405745257275088548364400416034343698203024027473012201, + 21888242871839275222246405745257275088548364400416034343698203714893787669978, 1642598102751376, 383190808060614, 687902000846432, @@ -27489,353 +27489,353 @@ pub global CRP: [Polynomial; L] = [ 257333464889143, 1579677870441703, 512313057550514, - 3728568996215166, - 3385946804353032, - 3501451104855042, + 21888242871839275222246405745257275088548364400416034343698203411545170131326, + 21888242871839275222246405745257275088548364400416034343698203068922978269192, + 21888242871839275222246405745257275088548364400416034343698203184427278771202, 1214551557547425, 1965989561145213, - 3625202912130381, - 3868904030993918, - 3832506688824848, - 4499050155593832, - 2613777028416536, + 21888242871839275222246405745257275088548364400416034343698203308179086046541, + 21888242871839275222246405745257275088548364400416034343698203551880204910078, + 21888242871839275222246405745257275088548364400416034343698203515482862741008, + 21888242871839275222246405745257275088548364400416034343698204182026329509992, + 21888242871839275222246405745257275088548364400416034343698202296753202332696, 484014297042520, 1376400238163076, - 3260951541295671, - 3321363073747879, + 21888242871839275222246405745257275088548364400416034343698202943927715211831, + 21888242871839275222246405745257275088548364400416034343698203004339247664039, 1867921783353114, 796721664636553, - 2733243175135841, + 21888242871839275222246405745257275088548364400416034343698202416219349052001, 2003710986411269, - 2934577106999596, + 21888242871839275222246405745257275088548364400416034343698202617553280915756, 1217524729027774, 1484702251452808, 1766805706117054, - 4329086450178669, - 2288303137391940, + 21888242871839275222246405745257275088548364400416034343698204012062624094829, + 21888242871839275222246405745257275088548364400416034343698201971279311308100, 243274314666012, 53169699407563, 1387465130092823, 1695600429355539, 294517702083786, - 3349569847131499, - 2884757666881247, - 2833471424801241, + 21888242871839275222246405745257275088548364400416034343698203032546021047659, + 21888242871839275222246405745257275088548364400416034343698202567733840797407, + 21888242871839275222246405745257275088548364400416034343698202516447598717401, 501142565757368, - 3338712999857455, + 21888242871839275222246405745257275088548364400416034343698203021689173773615, 1250401417957007, 1190505630716710, - 3887192903426078, - 2786291404274165, + 21888242871839275222246405745257275088548364400416034343698203570169077342238, + 21888242871839275222246405745257275088548364400416034343698202469267578190325, 821993611886346, - 4116177326010562, + 21888242871839275222246405745257275088548364400416034343698203799153499926722, 831542021711791, 121804557177459, 1750525170451251, - 3319162137681450, - 4351413146088633, - 3676463788810972, + 21888242871839275222246405745257275088548364400416034343698203002138311597610, + 21888242871839275222246405745257275088548364400416034343698204034389320004793, + 21888242871839275222246405745257275088548364400416034343698203359439962727132, 5548480041539, 1073569892357410, - 3159732648153001, - 3959115935852150, + 21888242871839275222246405745257275088548364400416034343698202842708822069161, + 21888242871839275222246405745257275088548364400416034343698203642092109768310, 1279655240491584, 1670686657458803, - 2784320262566114, - 3610209305334362, + 21888242871839275222246405745257275088548364400416034343698202467296436482274, + 21888242871839275222246405745257275088548364400416034343698203293185479250522, 670736588418485, - 4402537019695273, + 21888242871839275222246405745257275088548364400416034343698204085513193611433, 258863772622439, - 3309284061072325, + 21888242871839275222246405745257275088548364400416034343698202992260234988485, 2185243307429585, - 3151639646100620, + 21888242871839275222246405745257275088548364400416034343698202834615820016780, 65956505911382, 2000185303626643, 817698977177077, - 3142392999257407, + 21888242871839275222246405745257275088548364400416034343698202825369173173567, 527939311342313, 802322105657836, - 4454874016250924, - 3764506128396685, - 3043562041415525, - 3154079743842479, - 4400651593132573, + 21888242871839275222246405745257275088548364400416034343698204137850190167084, + 21888242871839275222246405745257275088548364400416034343698203447482302312845, + 21888242871839275222246405745257275088548364400416034343698202726538215331685, + 21888242871839275222246405745257275088548364400416034343698202837055917758639, + 21888242871839275222246405745257275088548364400416034343698204083627767048733, 617125350576175, - 2651533712804376, + 21888242871839275222246405745257275088548364400416034343698202334509886720536, 1979848775850101, 111250372668425, 245711189342911, - 3063450754537833, + 21888242871839275222246405745257275088548364400416034343698202746426928453993, 1487410758563578, 1710964701775748, 1688828233007136, - 4329518322080340, + 21888242871839275222246405745257275088548364400416034343698204012494495996500, 515288721924069, 1210057027367769, - 3085481618256945, - 4439380599024067, - 3466925583429035, - 3460767781912151, + 21888242871839275222246405745257275088548364400416034343698202768457792173105, + 21888242871839275222246405745257275088548364400416034343698204122356772940227, + 21888242871839275222246405745257275088548364400416034343698203149901757345195, + 21888242871839275222246405745257275088548364400416034343698203143743955828311, 120214496676452, 1226721039189768, - 3300403305598649, + 21888242871839275222246405745257275088548364400416034343698202983379479514809, 451973265329245, - 4191514070689410, - 3013949071978333, - 3783443669539956, + 21888242871839275222246405745257275088548364400416034343698203874490244605570, + 21888242871839275222246405745257275088548364400416034343698202696925245894493, + 21888242871839275222246405745257275088548364400416034343698203466419843456116, 395078184025053, 2214358516008022, 4053697062578, - 3956213188746525, + 21888242871839275222246405745257275088548364400416034343698203639189362662685, 2190003997518703, 547431045685550, - 3530800083256848, + 21888242871839275222246405745257275088548364400416034343698203213776257173008, 1731501639922903, - 3583782779503445, - 4148580132594246, - 2468369101862286, - 2649064934440894, - 2409547506583316, - 4415650834820910, + 21888242871839275222246405745257275088548364400416034343698203266758953419605, + 21888242871839275222246405745257275088548364400416034343698203831556306510406, + 21888242871839275222246405745257275088548364400416034343698202151345275778446, + 21888242871839275222246405745257275088548364400416034343698202332041108357054, + 21888242871839275222246405745257275088548364400416034343698202092523680499476, + 21888242871839275222246405745257275088548364400416034343698204098627008737070, 1171499880572485, 352802158469713, - 3100752145253955, - 2960619427366700, - 2292163630725996, + 21888242871839275222246405745257275088548364400416034343698202783728319170115, + 21888242871839275222246405745257275088548364400416034343698202643595601282860, + 21888242871839275222246405745257275088548364400416034343698201975139804642156, 1864369384347220, - 3191490208923991, + 21888242871839275222246405745257275088548364400416034343698202874466382840151, 1693295593689636, - 2415817866849480, + 21888242871839275222246405745257275088548364400416034343698202098794040765640, 1303538748869515, - 3538574227562583, + 21888242871839275222246405745257275088548364400416034343698203221550401478743, 1939600143324935, - 4093241297728405, + 21888242871839275222246405745257275088548364400416034343698203776217471644565, 2138908106907059, - 3559449426845378, + 21888242871839275222246405745257275088548364400416034343698203242425600761538, 926317218089762, 2017866175085303, 1099876884229012, 2151338925371664, 168829426353588, - 2324143807612097, + 21888242871839275222246405745257275088548364400416034343698202007119981528257, 191842246137041, 1518787271752472, - 3432122528846368, + 21888242871839275222246405745257275088548364400416034343698203115098702762528, 1214603155369021, - 2971256644502023, - 2290351817956951, + 21888242871839275222246405745257275088548364400416034343698202654232818418183, + 21888242871839275222246405745257275088548364400416034343698201973327991873111, 1648877630454211, 1046689250683204, 1663926219956875, 867259256656564, - 2508830528302946, + 21888242871839275222246405745257275088548364400416034343698202191806702219106, 1959235103860255, - 2665102737012905, + 21888242871839275222246405745257275088548364400416034343698202348078910929065, 909183652382046, - 2972115037932160, + 21888242871839275222246405745257275088548364400416034343698202655091211848320, 2186065024935105, - 2993307542893746, + 21888242871839275222246405745257275088548364400416034343698202676283716809906, 1041268817990223, 1745467402358154, - 4074234342542863, - 3889312827896520, + 21888242871839275222246405745257275088548364400416034343698203757210516459023, + 21888242871839275222246405745257275088548364400416034343698203572289001812680, 1069230285063030, 1331090167476035, 1667130346691935, 1379193774332816, 2000569542439545, - 2341973512234649, - 3787232530137437, + 21888242871839275222246405745257275088548364400416034343698202024949686150809, + 21888242871839275222246405745257275088548364400416034343698203470208704053597, 685822204842616, 940864106097101, - 4109644989229983, - 4207433100113832, - 3628876091520239, + 21888242871839275222246405745257275088548364400416034343698203792621163146143, + 21888242871839275222246405745257275088548364400416034343698203890409274029992, + 21888242871839275222246405745257275088548364400416034343698203311852265436399, 1915805136805644, 1923382870942389, - 3794815312289685, - 4002381978278280, + 21888242871839275222246405745257275088548364400416034343698203477791486205845, + 21888242871839275222246405745257275088548364400416034343698203685358152194440, 165944541084064, 382772580661593, - 3121913973154311, + 21888242871839275222246405745257275088548364400416034343698202804890147070471, 371168476277015, - 3153602579121758, - 3640529306958427, - 3559905861092454, + 21888242871839275222246405745257275088548364400416034343698202836578753037918, + 21888242871839275222246405745257275088548364400416034343698203323505480874587, + 21888242871839275222246405745257275088548364400416034343698203242882035008614, 571981324931951, 1889501243086801, 1632754002087536, 677649536597538, 989723698438651, - 2304166849663023, + 21888242871839275222246405745257275088548364400416034343698201987143023579183, 1365147722385668, 810335447596137, - 3514179197334422, - 2988600769763738, - 3185106243863679, + 21888242871839275222246405745257275088548364400416034343698203197155371250582, + 21888242871839275222246405745257275088548364400416034343698202671576943679898, + 21888242871839275222246405745257275088548364400416034343698202868082417779839, 513208540374279, 662443457287182, 562911630199235, 397551138054237, - 2630437414885698, - 2970253695750101, - 3004464701272650, + 21888242871839275222246405745257275088548364400416034343698202313413588801858, + 21888242871839275222246405745257275088548364400416034343698202653229869666261, + 21888242871839275222246405745257275088548364400416034343698202687440875188810, 278843425040655, - 3891009240987818, + 21888242871839275222246405745257275088548364400416034343698203573985414903978, 1498164080018510, 1582189381925302, 1308646112272772, 1517640418726920, 1031639273508003, - 3471547104379199, + 21888242871839275222246405745257275088548364400416034343698203154523278295359, 1794640229967643, 685001727432861, 699559720048834, 1159913574428616, - 3426252937110017, - 3083541559459038, + 21888242871839275222246405745257275088548364400416034343698203109229111026177, + 21888242871839275222246405745257275088548364400416034343698202766517733375198, 686257783752730, 899642703842376, - 2693265274683229, + 21888242871839275222246405745257275088548364400416034343698202376241448599389, 1324232324951616, 68051210532642, 1390767808038211, - 2822944880828843, + 21888242871839275222246405745257275088548364400416034343698202505921054745003, 138302125131416, 1645731088289050, 508557035232777, - 3763249818335251, + 21888242871839275222246405745257275088548364400416034343698203446225992251411, 202672102683363, 1367934709740675, - 3100502379826137, - 4299806890107385, - 2901213029270567, - 3924480691802113, + 21888242871839275222246405745257275088548364400416034343698202783478553742297, + 21888242871839275222246405745257275088548364400416034343698203982783064023545, + 21888242871839275222246405745257275088548364400416034343698202584189203186727, + 21888242871839275222246405745257275088548364400416034343698203607456865718273, 2039860425716987, 959443490589003, 2221782819287229, - 3757525239893382, - 4257202534321001, + 21888242871839275222246405745257275088548364400416034343698203440501413809542, + 21888242871839275222246405745257275088548364400416034343698203940178708237161, 1752563805280340, - 2365591806770792, - 3804893275952905, - 2908674033794446, + 21888242871839275222246405745257275088548364400416034343698202048567980686952, + 21888242871839275222246405745257275088548364400416034343698203487869449869065, + 21888242871839275222246405745257275088548364400416034343698202591650207710606, 1068894434168492, 1364951710789556, 1756509264491648, - 2862293430352487, + 21888242871839275222246405745257275088548364400416034343698202545269604268647, 1416780445689123, 523599240537600, 1165815042356694, - 3613895080179636, - 4159863197635613, + 21888242871839275222246405745257275088548364400416034343698203296871254095796, + 21888242871839275222246405745257275088548364400416034343698203842839371551773, 104551144871323, - 4253549305402536, - 4003453414490261, - 3966462497646915, + 21888242871839275222246405745257275088548364400416034343698203936525479318696, + 21888242871839275222246405745257275088548364400416034343698203686429588406421, + 21888242871839275222246405745257275088548364400416034343698203649438671563075, 1251157338922306, 1947448359282265, 999432328941280, 1862980791970688, 1816576364535649, - 2919444303406174, - 3746608769648147, + 21888242871839275222246405745257275088548364400416034343698202602420477322334, + 21888242871839275222246405745257275088548364400416034343698203429584943564307, 1620006728757595, 1416687940544528, - 3087940968809590, + 21888242871839275222246405745257275088548364400416034343698202770917142725750, 2181503374368068, - 2657947203163426, - 4370310083309585, - 3570032654030506, - 2405337390534677, - 2547440235139851, - 4442806046225298, + 21888242871839275222246405745257275088548364400416034343698202340923377079586, + 21888242871839275222246405745257275088548364400416034343698204053286257225745, + 21888242871839275222246405745257275088548364400416034343698203253008827946666, + 21888242871839275222246405745257275088548364400416034343698202088313564450837, + 21888242871839275222246405745257275088548364400416034343698202230416409056011, + 21888242871839275222246405745257275088548364400416034343698204125782220141458, 831594439638178, 1098231762022118, 1105134605445486, 794671676533431, 2060111765126799, - 3284095876706260, + 21888242871839275222246405745257275088548364400416034343698202967072050622420, 725250801635591, - 3750063623228638, + 21888242871839275222246405745257275088548364400416034343698203433039797144798, 1620292887262745, - 2506266721449882, - 4469927409794694, - 3452116870865912, - 3633181633367446, + 21888242871839275222246405745257275088548364400416034343698202189242895366042, + 21888242871839275222246405745257275088548364400416034343698204152903583710854, + 21888242871839275222246405745257275088548364400416034343698203135093044782072, + 21888242871839275222246405745257275088548364400416034343698203316157807283606, 1612847457842128, 751379641640102, - 3936960399154661, - 2825854394663996, - 2254494964466252, - 3755970732673573, + 21888242871839275222246405745257275088548364400416034343698203619936573070821, + 21888242871839275222246405745257275088548364400416034343698202508830568580156, + 21888242871839275222246405745257275088548364400416034343698201937471138382412, + 21888242871839275222246405745257275088548364400416034343698203438946906589733, 814804243193010, - 2663930136644216, - 3115584941390733, + 21888242871839275222246405745257275088548364400416034343698202346906310560376, + 21888242871839275222246405745257275088548364400416034343698202798561115306893, 941412337532038, 507387077566285, - 2910060384426238, + 21888242871839275222246405745257275088548364400416034343698202593036558342398, 658632462987014, - 3853785465593663, - 2559368502465271, + 21888242871839275222246405745257275088548364400416034343698203536761639509823, + 21888242871839275222246405745257275088548364400416034343698202242344676381431, 1806753595880515, - 4357972366192493, - 4140077851136067, - 3360220710160084, + 21888242871839275222246405745257275088548364400416034343698204040948540108653, + 21888242871839275222246405745257275088548364400416034343698203823054025052227, + 21888242871839275222246405745257275088548364400416034343698203043196884076244, 1858826874224448, 246145125207871, 2204502750508596, 1992739781684205, 122167492939165, - 2438197187294339, + 21888242871839275222246405745257275088548364400416034343698202121173361210499, 1855423012866002, 850336642461165, - 2520359485189818, - 2857559236483124, + 21888242871839275222246405745257275088548364400416034343698202203335659105978, + 21888242871839275222246405745257275088548364400416034343698202540535410399284, 1950848434298503, 1372976946629848, - 3039430045772290, - 2519585390098426, - 3946819695382982, - 4014112478887745, - 3172633998562618, + 21888242871839275222246405745257275088548364400416034343698202722406219688450, + 21888242871839275222246405745257275088548364400416034343698202202561564014586, + 21888242871839275222246405745257275088548364400416034343698203629795869299142, + 21888242871839275222246405745257275088548364400416034343698203697088652803905, + 21888242871839275222246405745257275088548364400416034343698202855610172478778, 1451486558282844, - 3425975557029449, - 2592698570337281, - 3817613780412683, - 3924016259194766, - 4046599139034816, + 21888242871839275222246405745257275088548364400416034343698203108951730945609, + 21888242871839275222246405745257275088548364400416034343698202275674744253441, + 21888242871839275222246405745257275088548364400416034343698203500589954328843, + 21888242871839275222246405745257275088548364400416034343698203606992433110926, + 21888242871839275222246405745257275088548364400416034343698203729575312950976, 1076733554312005, - 2683603699532058, + 21888242871839275222246405745257275088548364400416034343698202366579873448218, 388584555062762, 41026174854438, 856627232732333, - 3184342021725984, - 4339665047374790, - 4098555482672928, + 21888242871839275222246405745257275088548364400416034343698202867318195642144, + 21888242871839275222246405745257275088548364400416034343698204022641221290950, + 21888242871839275222246405745257275088548364400416034343698203781531656589088, 1588481709793168, 1109062943961360, 1691811314113580, 1007561889143788, - 3162896481218629, + 21888242871839275222246405745257275088548364400416034343698202845872655134789, 1643418604918409, - 3014493226797206, + 21888242871839275222246405745257275088548364400416034343698202697469400713366, 1136921944142435, - 3726325559168896, + 21888242871839275222246405745257275088548364400416034343698203409301733085056, 1788763904989628, 1684808204541961, - 2880962662342310, + 21888242871839275222246405745257275088548364400416034343698202563938836258470, 2102267221196376, 46967248875555, - 2321505294769016, - 3491405460477846, + 21888242871839275222246405745257275088548364400416034343698202004481468685176, + 21888242871839275222246405745257275088548364400416034343698203174381634394006, 1453710873662526, 631676818650242, 1029782447489739, - 4289071762757421, - 2458492632898843, + 21888242871839275222246405745257275088548364400416034343698203972047936673581, + 21888242871839275222246405745257275088548364400416034343698202141468806815003, 75742447321783, - 4226479146072909, + 21888242871839275222246405745257275088548364400416034343698203909455319989069, 899681001371666, 2142651574806194, 1919367706466383, @@ -27844,722 +27844,722 @@ pub global CRP: [Polynomial; L] = [ 2044790452892114, 1405902163935387, 1052978321399362, - 3758555572365629, + 21888242871839275222246405745257275088548364400416034343698203441531746281789, 1287902472236145, - 2460946774924528, - 2560264633781285, - 2699794490642715, - 3878802450164382, - 3005272315668501, + 21888242871839275222246405745257275088548364400416034343698202143922948840688, + 21888242871839275222246405745257275088548364400416034343698202243240807697445, + 21888242871839275222246405745257275088548364400416034343698202382770664558875, + 21888242871839275222246405745257275088548364400416034343698203561778624080542, + 21888242871839275222246405745257275088548364400416034343698202688248489584661, 2038380804302280, 1827046786192534, - 4492141748066112, - 2683051184507293, - 3460939884674375, - 2858800513555471, - 3834126338660024, - 2461436780399357, + 21888242871839275222246405745257275088548364400416034343698204175117921982272, + 21888242871839275222246405745257275088548364400416034343698202366027358423453, + 21888242871839275222246405745257275088548364400416034343698203143916058590535, + 21888242871839275222246405745257275088548364400416034343698202541776687471631, + 21888242871839275222246405745257275088548364400416034343698203517102512576184, + 21888242871839275222246405745257275088548364400416034343698202144412954315517, 346647292122574, - 2796975912074113, + 21888242871839275222246405745257275088548364400416034343698202479952085990273, 2239339589186611, - 2968490016320969, - 3260381167161222, - 4259532064112551, + 21888242871839275222246405745257275088548364400416034343698202651466190237129, + 21888242871839275222246405745257275088548364400416034343698202943357341077382, + 21888242871839275222246405745257275088548364400416034343698203942508238028711, 1848247708954389, 1334023822317161, - 3967654455752774, + 21888242871839275222246405745257275088548364400416034343698203650630629668934, 1180074658341482, - 4201906847552694, - 4365295552325505, - 4333827365467391, - 2421484195815243, - 3481855156445633, + 21888242871839275222246405745257275088548364400416034343698203884883021468854, + 21888242871839275222246405745257275088548364400416034343698204048271726241665, + 21888242871839275222246405745257275088548364400416034343698204016803539383551, + 21888242871839275222246405745257275088548364400416034343698202104460369731403, + 21888242871839275222246405745257275088548364400416034343698203164831330361793, 1197055286676694, - 4069831729295945, + 21888242871839275222246405745257275088548364400416034343698203752807903212105, 1120219052559333, - 3266954675621296, + 21888242871839275222246405745257275088548364400416034343698202949930849537456, 2228812726615288, - 3143603305945228, + 21888242871839275222246405745257275088548364400416034343698202826579479861388, 1337198487350151, - 4205039478660320, + 21888242871839275222246405745257275088548364400416034343698203888015652576480, 1653744661342375, 1770478444689568, - 3030438119549743, + 21888242871839275222246405745257275088548364400416034343698202713414293465903, 2147047014583373, - 2543369988688137, - 3423242496861664, - 2396363032925527, - 3658482244826926, - 2474659542668280, + 21888242871839275222246405745257275088548364400416034343698202226346162604297, + 21888242871839275222246405745257275088548364400416034343698203106218670777824, + 21888242871839275222246405745257275088548364400416034343698202079339206841687, + 21888242871839275222246405745257275088548364400416034343698203341458418743086, + 21888242871839275222246405745257275088548364400416034343698202157635716584440, 1064839848688341, - 3861263049808083, - 3969128383231542, - 4362950516545080, + 21888242871839275222246405745257275088548364400416034343698203544239223724243, + 21888242871839275222246405745257275088548364400416034343698203652104557147702, + 21888242871839275222246405745257275088548364400416034343698204045926690461240, 447550320610167, - 3143991950577833, - 2761078438334002, + 21888242871839275222246405745257275088548364400416034343698202826968124493993, + 21888242871839275222246405745257275088548364400416034343698202444054612250162, 2141740667581111, - 2359984964564886, - 3079616439604671, - 3663437299082902, + 21888242871839275222246405745257275088548364400416034343698202042961138481046, + 21888242871839275222246405745257275088548364400416034343698202762592613520831, + 21888242871839275222246405745257275088548364400416034343698203346413472999062, 1222040897860829, - 3142668618342021, + 21888242871839275222246405745257275088548364400416034343698202825644792258181, 2219667338749280, 2100162003041108, 2208116331602174, 301696930523734, 1213854244513155, - 2763101129205796, - 2735927494279615, - 3140621205896091, - 4368618548915836, - 3777751777299593, - 3121217056624074, - 4332308874358784, - 2615263204799256, - 2841882702212597, - 3687483368965492, + 21888242871839275222246405745257275088548364400416034343698202446077303121956, + 21888242871839275222246405745257275088548364400416034343698202418903668195775, + 21888242871839275222246405745257275088548364400416034343698202823597379812251, + 21888242871839275222246405745257275088548364400416034343698204051594722831996, + 21888242871839275222246405745257275088548364400416034343698203460727951215753, + 21888242871839275222246405745257275088548364400416034343698202804193230540234, + 21888242871839275222246405745257275088548364400416034343698204015285048274944, + 21888242871839275222246405745257275088548364400416034343698202298239378715416, + 21888242871839275222246405745257275088548364400416034343698202524858876128757, + 21888242871839275222246405745257275088548364400416034343698203370459542881652, 2198370975106111, 2235528739347819, - 2569209382760353, - 3717173686702631, - 4309063186658439, - 2422625293576606, + 21888242871839275222246405745257275088548364400416034343698202252185556676513, + 21888242871839275222246405745257275088548364400416034343698203400149860618791, + 21888242871839275222246405745257275088548364400416034343698203992039360574599, + 21888242871839275222246405745257275088548364400416034343698202105601467492766, 1981696761817345, 1360086698283874, 833893146716061, - 3380092178731792, + 21888242871839275222246405745257275088548364400416034343698203063068352647952, 2195879853270504, - 3273493112710081, - 2381706847020021, + 21888242871839275222246405745257275088548364400416034343698202956469286626241, + 21888242871839275222246405745257275088548364400416034343698202064683020936181, 424156262878756, 1996482469002792, 2194370116955678, - 2386783523487458, + 21888242871839275222246405745257275088548364400416034343698202069759697403618, 984189608533045, - 3350424915339568, + 21888242871839275222246405745257275088548364400416034343698203033401089255728, 1841483839347043, - 4350328564623521, + 21888242871839275222246405745257275088548364400416034343698204033304738539681, 935971675794045, 279496104440536, 620272303529311, - 4224283692468434, - 3236007982650155, + 21888242871839275222246405745257275088548364400416034343698203907259866384594, + 21888242871839275222246405745257275088548364400416034343698202918984156566315, 2130554537196214, - 3986154508580228, - 2317022186412546, + 21888242871839275222246405745257275088548364400416034343698203669130682496388, + 21888242871839275222246405745257275088548364400416034343698201999998360328706, 675037185118620, 1384516160911630, - 3330737938930006, - 3451541820816587, - 3588498976476774, - 3173875439917973, + 21888242871839275222246405745257275088548364400416034343698203013714112846166, + 21888242871839275222246405745257275088548364400416034343698203134517994732747, + 21888242871839275222246405745257275088548364400416034343698203271475150392934, + 21888242871839275222246405745257275088548364400416034343698202856851613834133, 2067839721989795, 2151196808230725, - 3241681935430631, - 2865286150625051, - 2757276594765606, + 21888242871839275222246405745257275088548364400416034343698202924658109346791, + 21888242871839275222246405745257275088548364400416034343698202548262324541211, + 21888242871839275222246405745257275088548364400416034343698202440252768681766, 2235844070711439, - 4096511606833172, + 21888242871839275222246405745257275088548364400416034343698203779487780749332, 624997109289348, - 3541525722541463, - 3772526498128986, - 2855104069765410, + 21888242871839275222246405745257275088548364400416034343698203224501896457623, + 21888242871839275222246405745257275088548364400416034343698203455502672045146, + 21888242871839275222246405745257275088548364400416034343698202538080243681570, 181606004942040, 1910816640119926, 981470113873207, - 3243277951407425, - 3693458749072706, + 21888242871839275222246405745257275088548364400416034343698202926254125323585, + 21888242871839275222246405745257275088548364400416034343698203376434922988866, 2224410980599887, - 2335674206203732, + 21888242871839275222246405745257275088548364400416034343698202018650380119892, 849147225351513, - 3719794547780578, - 3680355685422613, - 2587899173048704, + 21888242871839275222246405745257275088548364400416034343698203402770721696738, + 21888242871839275222246405745257275088548364400416034343698203363331859338773, + 21888242871839275222246405745257275088548364400416034343698202270875346964864, 1564560994937723, - 2451387061666335, - 3215953997549335, + 21888242871839275222246405745257275088548364400416034343698202134363235582495, + 21888242871839275222246405745257275088548364400416034343698202898930171465495, 923123938416068, - 3299606885935160, - 3522206010213635, - 2488616157040654, - 3544784562194779, - 2864512735151783, + 21888242871839275222246405745257275088548364400416034343698202982583059851320, + 21888242871839275222246405745257275088548364400416034343698203205182184129795, + 21888242871839275222246405745257275088548364400416034343698202171592330956814, + 21888242871839275222246405745257275088548364400416034343698203227760736110939, + 21888242871839275222246405745257275088548364400416034343698202547488909067943, 1351923329570095, - 3361283864775708, + 21888242871839275222246405745257275088548364400416034343698203044260038691868, 1450925080218373, - 4371149810993191, - 2679494355235425, - 3516700629842024, + 21888242871839275222246405745257275088548364400416034343698204054125984909351, + 21888242871839275222246405745257275088548364400416034343698202362470529151585, + 21888242871839275222246405745257275088548364400416034343698203199676803758184, 897067086988383, - 3124624335370400, + 21888242871839275222246405745257275088548364400416034343698202807600509286560, 253825258946203, - 3216302700867694, - 2636959898754979, - 4302093453183472, + 21888242871839275222246405745257275088548364400416034343698202899278874783854, + 21888242871839275222246405745257275088548364400416034343698202319936072671139, + 21888242871839275222246405745257275088548364400416034343698203985069627099632, 1482807655159386, - 2671651938679468, - 3184962125153761, - 2638115270388567, + 21888242871839275222246405745257275088548364400416034343698202354628112595628, + 21888242871839275222246405745257275088548364400416034343698202867938299069921, + 21888242871839275222246405745257275088548364400416034343698202321091444304727, 1035223587364855, 607131503398523, 1298225118936456, - 3591024894200766, + 21888242871839275222246405745257275088548364400416034343698203274001068116926, 1123719955719990, 350160372794321, 1573954528889214, 1816283588761655, - 4292435706940185, - 3695805436068969, + 21888242871839275222246405745257275088548364400416034343698203975411880856345, + 21888242871839275222246405745257275088548364400416034343698203378781609985129, 2011939798109654, - 3016942050716925, + 21888242871839275222246405745257275088548364400416034343698202699918224633085, 565369026371914, - 3404234121129385, - 3573817556636050, + 21888242871839275222246405745257275088548364400416034343698203087210295045545, + 21888242871839275222246405745257275088548364400416034343698203256793730552210, 875645495410375, - 2795068397668699, - 3662587955783857, - 3277704383293379, - 2475335554457350, + 21888242871839275222246405745257275088548364400416034343698202478044571584859, + 21888242871839275222246405745257275088548364400416034343698203345564129700017, + 21888242871839275222246405745257275088548364400416034343698202960680557209539, + 21888242871839275222246405745257275088548364400416034343698202158311728373510, 605054332198518, - 3077301086615103, + 21888242871839275222246405745257275088548364400416034343698202760277260531263, 967939295748708, - 2568987633195199, + 21888242871839275222246405745257275088548364400416034343698202251963807111359, 1163525404174759, - 3413919125811862, + 21888242871839275222246405745257275088548364400416034343698203096895299728022, 1472757053568640, 646476703571948, - 3857991762452330, - 2969805883060450, - 4232399145869118, - 3093378351579450, + 21888242871839275222246405745257275088548364400416034343698203540967936368490, + 21888242871839275222246405745257275088548364400416034343698202652782056976610, + 21888242871839275222246405745257275088548364400416034343698203915375319785278, + 21888242871839275222246405745257275088548364400416034343698202776354525495610, 1266603260864116, 309904781424693, - 2313450198397702, - 3110572546964129, - 3611139063247492, + 21888242871839275222246405745257275088548364400416034343698201996426372313862, + 21888242871839275222246405745257275088548364400416034343698202793548720880289, + 21888242871839275222246405745257275088548364400416034343698203294115237163652, 420599805952675, - 3294562278500867, + 21888242871839275222246405745257275088548364400416034343698202977538452417027, 836804917038658, 718241681258390, - 2263564015872621, - 3910851220970867, + 21888242871839275222246405745257275088548364400416034343698201946540189788781, + 21888242871839275222246405745257275088548364400416034343698203593827394887027, 606939574741891, 1704906943453020, 1296686521437925, 1135142127397048, - 3708058684130315, + 21888242871839275222246405745257275088548364400416034343698203391034858046475, 308558397848906, 502014317347307, - 3126831518343781, - 2946283253259609, - 4199119856990386, + 21888242871839275222246405745257275088548364400416034343698202809807692259941, + 21888242871839275222246405745257275088548364400416034343698202629259427175769, + 21888242871839275222246405745257275088548364400416034343698203882096030906546, 70888116676403, 2052051925212833, 1780368235292447, - 4353980955363459, - 3425997576490848, + 21888242871839275222246405745257275088548364400416034343698204036957129279619, + 21888242871839275222246405745257275088548364400416034343698203108973750407008, 277383203031276, 1976861749230635, - 3084020411189771, + 21888242871839275222246405745257275088548364400416034343698202766996585105931, 539038455103456, - 4256951984030088, - 3705733055736565, + 21888242871839275222246405745257275088548364400416034343698203939928157946248, + 21888242871839275222246405745257275088548364400416034343698203388709229652725, 1378148894275483, 1458531323811073, - 3732929605987368, + 21888242871839275222246405745257275088548364400416034343698203415905779903528, 882339246761118, - 3548160070917095, - 2901786338985949, - 3409453064515219, + 21888242871839275222246405745257275088548364400416034343698203231136244833255, + 21888242871839275222246405745257275088548364400416034343698202584762512902109, + 21888242871839275222246405745257275088548364400416034343698203092429238431379, 2184889383056848, - 2930697463844548, + 21888242871839275222246405745257275088548364400416034343698202613673637760708, 1320644230218577, 625085204373128, - 2697334042149803, + 21888242871839275222246405745257275088548364400416034343698202380310216065963, 88755857451231, - 2710575660001788, + 21888242871839275222246405745257275088548364400416034343698202393551833917948, 1569095247400465, - 2981288283495597, + 21888242871839275222246405745257275088548364400416034343698202664264457411757, 388971166455785, - 3284623260754382, + 21888242871839275222246405745257275088548364400416034343698202967599434670542, 278358247871905, - 3276806255145492, + 21888242871839275222246405745257275088548364400416034343698202959782429061652, 1366726064210534, 1278689339281283, 1532533667851738, 1072494203699704, 1466045133492699, - 3215671778518344, + 21888242871839275222246405745257275088548364400416034343698202898647952434504, 2201379250257814, - 2890757030693099, - 3794030428396209, + 21888242871839275222246405745257275088548364400416034343698202573733204609259, + 21888242871839275222246405745257275088548364400416034343698203477006602312369, 1238242035462442, - 4403290985007818, + 21888242871839275222246405745257275088548364400416034343698204086267158923978, 987691093485602, - 3525105695770874, - 3560334087001869, + 21888242871839275222246405745257275088548364400416034343698203208081869687034, + 21888242871839275222246405745257275088548364400416034343698203243310260918029, 541200675413233, - 2856220698606888, + 21888242871839275222246405745257275088548364400416034343698202539196872523048, 25215670161610, - 3599796435230131, + 21888242871839275222246405745257275088548364400416034343698203282772609146291, 1943516840263611, - 3211822873988862, - 4340802995123036, - 2828653519487481, - 3115665613517022, - 4489972207503409, - 2399753510370517, - 4057214313745163, + 21888242871839275222246405745257275088548364400416034343698202894799047905022, + 21888242871839275222246405745257275088548364400416034343698204023779169039196, + 21888242871839275222246405745257275088548364400416034343698202511629693403641, + 21888242871839275222246405745257275088548364400416034343698202798641787433182, + 21888242871839275222246405745257275088548364400416034343698204172948381419569, + 21888242871839275222246405745257275088548364400416034343698202082729684286677, + 21888242871839275222246405745257275088548364400416034343698203740190487661323, 1550165751640173, 59318796317171, - 4111549852818847, - 3764097237905167, + 21888242871839275222246405745257275088548364400416034343698203794526026735007, + 21888242871839275222246405745257275088548364400416034343698203447073411821327, 1827623347630663, - 4236097297784077, + 21888242871839275222246405745257275088548364400416034343698203919073471700237, 405739051758843, - 4346772775841622, - 3760646300305163, + 21888242871839275222246405745257275088548364400416034343698204029748949757782, + 21888242871839275222246405745257275088548364400416034343698203443622474221323, 717993335815889, 1026113248010238, - 3582157953474885, + 21888242871839275222246405745257275088548364400416034343698203265134127391045, 2084809979925969, 870959556662973, 1833377139988407, - 2604756488291541, - 2671837241730820, - 4214661402366677, + 21888242871839275222246405745257275088548364400416034343698202287732662207701, + 21888242871839275222246405745257275088548364400416034343698202354813415646980, + 21888242871839275222246405745257275088548364400416034343698203897637576282837, 913148336655045, - 2451592546386679, + 21888242871839275222246405745257275088548364400416034343698202134568720302839, 1918566606351333, 283127443261821, - 4143525764995237, - 2892967154363060, + 21888242871839275222246405745257275088548364400416034343698203826501938911397, + 21888242871839275222246405745257275088548364400416034343698202575943328279220, 130515374304380, - 4181919257319879, - 2565508648803190, - 3863995355221445, - 2805242175868109, + 21888242871839275222246405745257275088548364400416034343698203864895431236039, + 21888242871839275222246405745257275088548364400416034343698202248484822719350, + 21888242871839275222246405745257275088548364400416034343698203546971529137605, + 21888242871839275222246405745257275088548364400416034343698202488218349784269, 1312283950682413, 2185674995458663, - 3179539598869849, - 3083238683412831, - 2396090500329201, - 3341622968148647, + 21888242871839275222246405745257275088548364400416034343698202862515772786009, + 21888242871839275222246405745257275088548364400416034343698202766214857328991, + 21888242871839275222246405745257275088548364400416034343698202079066674245361, + 21888242871839275222246405745257275088548364400416034343698203024599142064807, 675265796991062, - 3739293359856109, + 21888242871839275222246405745257275088548364400416034343698203422269533772269, 600339456247988, 2184204695276404, 414920170598151, 261682691149165, - 3000836966916098, - 3679611082348340, - 3440545051768703, + 21888242871839275222246405745257275088548364400416034343698202683813140832258, + 21888242871839275222246405745257275088548364400416034343698203362587256264500, + 21888242871839275222246405745257275088548364400416034343698203123521225684863, 622520004114334, 2156651729518245, 16476631919845, - 2264329256513082, - 3582250512295202, + 21888242871839275222246405745257275088548364400416034343698201947305430429242, + 21888242871839275222246405745257275088548364400416034343698203265226686211362, 1224760360709207, - 2737798929041589, - 2807814663858898, + 21888242871839275222246405745257275088548364400416034343698202420775102957749, + 21888242871839275222246405745257275088548364400416034343698202490790837775058, 692790072003445, 1841553076617221, - 3344756514894440, + 21888242871839275222246405745257275088548364400416034343698203027732688810600, 1898166968794249, 892988960935461, 1280207019608860, - 4181105880399056, + 21888242871839275222246405745257275088548364400416034343698203864082054315216, 1329142377518607, - 2759087982973002, - 4189764213130642, - 3644908891354744, - 4229470442554403, - 4179310699459179, + 21888242871839275222246405745257275088548364400416034343698202442064156889162, + 21888242871839275222246405745257275088548364400416034343698203872740387046802, + 21888242871839275222246405745257275088548364400416034343698203327885065270904, + 21888242871839275222246405745257275088548364400416034343698203912446616470563, + 21888242871839275222246405745257275088548364400416034343698203862286873375339, 1102131061743595, 1908965965667822, 1823033747002735, 1544949226863200, - 3019146297588185, - 3344972804601770, + 21888242871839275222246405745257275088548364400416034343698202702122471504345, + 21888242871839275222246405745257275088548364400416034343698203027948978517930, 918792365875750, 1420809501478618, 2186667538108528, 477129476698208, 585433293283251, - 4412113625090637, - 2862574598565116, + 21888242871839275222246405745257275088548364400416034343698204095089799006797, + 21888242871839275222246405745257275088548364400416034343698202545550772481276, 1937404041194263, 2006256296654064, - 3654635699315969, - 4211415924768946, + 21888242871839275222246405745257275088548364400416034343698203337611873232129, + 21888242871839275222246405745257275088548364400416034343698203894392098685106, 184673254138577, 1411343843517972, 710713844216918, - 2364710073698609, - 3013259015824260, - 4470046717391084, - 3958834595917467, + 21888242871839275222246405745257275088548364400416034343698202047686247614769, + 21888242871839275222246405745257275088548364400416034343698202696235189740420, + 21888242871839275222246405745257275088548364400416034343698204153022891307244, + 21888242871839275222246405745257275088548364400416034343698203641810769833627, 1521518405512998, 2119972298871782, 152813174815057, - 3169637204366130, + 21888242871839275222246405745257275088548364400416034343698202852613378282290, 415098107872354, 928606029951790, 484829907461073, - 3023465470210367, - 2660011072551466, + 21888242871839275222246405745257275088548364400416034343698202706441644126527, + 21888242871839275222246405745257275088548364400416034343698202342987246467626, 67366042650483, 2001308218857949, - 2324386640085841, - 2681926440480552, - 4411278545206585, + 21888242871839275222246405745257275088548364400416034343698202007362814002001, + 21888242871839275222246405745257275088548364400416034343698202364902614396712, + 21888242871839275222246405745257275088548364400416034343698204094254719122745, 558395852941490, 1252193831836291, 1971261475346732, - 4304140835595962, + 21888242871839275222246405745257275088548364400416034343698203987117009512122, 2060597922206680, - 4338815425636704, + 21888242871839275222246405745257275088548364400416034343698204021791599552864, 1749625290001341, 247919725937060, - 4346576207364650, - 2424333077618359, + 21888242871839275222246405745257275088548364400416034343698204029552381280810, + 21888242871839275222246405745257275088548364400416034343698202107309251534519, 1630270900263628, - 3115490503190031, - 2324708502992126, - 2775017456083785, + 21888242871839275222246405745257275088548364400416034343698202798466677106191, + 21888242871839275222246405745257275088548364400416034343698202007684676908286, + 21888242871839275222246405745257275088548364400416034343698202457993629999945, 552915914604518, 1564400139807726, 21470400041091, 379000931872696, - 3198266689371173, + 21888242871839275222246405745257275088548364400416034343698202881242863287333, 458590047852914, 1328965821683454, - 2766159056172053, + 21888242871839275222246405745257275088548364400416034343698202449135230088213, 2210690214369443, 1856941676838290, - 2837212045888995, + 21888242871839275222246405745257275088548364400416034343698202520188219805155, 1135941759276144, - 2999696908274917, - 2799014523760453, - 4331777634955341, - 4090503689563414, + 21888242871839275222246405745257275088548364400416034343698202682673082191077, + 21888242871839275222246405745257275088548364400416034343698202481990697676613, + 21888242871839275222246405745257275088548364400416034343698204014753808871501, + 21888242871839275222246405745257275088548364400416034343698203773479863479574, 247215588752610, - 3929792355543947, + 21888242871839275222246405745257275088548364400416034343698203612768529460107, 444851811797234, 416363286113093, 2084378436280180, - 2687747941502732, + 21888242871839275222246405745257275088548364400416034343698202370724115418892, 841184587400291, 258349428743977, 1564372685452849, 519657496575667, - 2661721562732632, + 21888242871839275222246405745257275088548364400416034343698202344697736648792, 2176626090328622, 465478277021186, 269759656597164, - 2955401233821090, + 21888242871839275222246405745257275088548364400416034343698202638377407737250, 1621785982768362, 2055506432290405, 1477719138548104, 1853268016586092, 773965423894550, - 3556919407891788, - 4104420308334803, + 21888242871839275222246405745257275088548364400416034343698203239895581807948, + 21888242871839275222246405745257275088548364400416034343698203787396482250963, 1829346639746884, 1740839676081768, - 2461957326568530, + 21888242871839275222246405745257275088548364400416034343698202144933500484690, 1686076685246945, - 2332842351448871, - 4255954301508390, - 3819774303767659, + 21888242871839275222246405745257275088548364400416034343698202015818525365031, + 21888242871839275222246405745257275088548364400416034343698203938930475424550, + 21888242871839275222246405745257275088548364400416034343698203502750477683819, 1496368519331851, - 3120762448890777, + 21888242871839275222246405745257275088548364400416034343698202803738622806937, 1818080100880463, 1429688875015163, 1112821321592333, 1418911995358329, - 2865646467985451, + 21888242871839275222246405745257275088548364400416034343698202548622641901611, 953037730057326, 1117435191415358, - 3560887084412013, + 21888242871839275222246405745257275088548364400416034343698203243863258328173, 588639760255677, - 3498625815357034, - 3676354873120063, + 21888242871839275222246405745257275088548364400416034343698203181601989273194, + 21888242871839275222246405745257275088548364400416034343698203359331047036223, 1624478234473016, - 2716196991584697, + 21888242871839275222246405745257275088548364400416034343698202399173165500857, 73996856451177, - 3627012521657500, + 21888242871839275222246405745257275088548364400416034343698203309988695573660, 400115446012933, - 3092501793204782, + 21888242871839275222246405745257275088548364400416034343698202775477967120942, 1026550323105608, 883887236441005, - 4042153105654670, - 3187336861572009, - 4294299744950240, + 21888242871839275222246405745257275088548364400416034343698203725129279570830, + 21888242871839275222246405745257275088548364400416034343698202870313035488169, + 21888242871839275222246405745257275088548364400416034343698203977275918866400, 263995458767093, - 3274906531041271, - 4072215503141988, + 21888242871839275222246405745257275088548364400416034343698202957882704957431, + 21888242871839275222246405745257275088548364400416034343698203755191677058148, 1766164042932462, - 3426526875234552, + 21888242871839275222246405745257275088548364400416034343698203109503049150712, 1466000436867324, 2241220461252062, 1629726170394307, - 2869342114770644, - 3138736918745314, + 21888242871839275222246405745257275088548364400416034343698202552318288686804, + 21888242871839275222246405745257275088548364400416034343698202821713092661474, 396753275728693, - 4136656295081165, + 21888242871839275222246405745257275088548364400416034343698203819632468997325, 1580631365869822, 1319676566529956, 2160319793470124, - 2294416750478265, - 3210729491842919, + 21888242871839275222246405745257275088548364400416034343698201977392924394425, + 21888242871839275222246405745257275088548364400416034343698202893705665759079, 1597844924758832, - 3291568738103109, - 3208910223608512, - 2996986202639644, + 21888242871839275222246405745257275088548364400416034343698202974544912019269, + 21888242871839275222246405745257275088548364400416034343698202891886397524672, + 21888242871839275222246405745257275088548364400416034343698202679962376555804, 125040649212630, - 3018086680064447, + 21888242871839275222246405745257275088548364400416034343698202701062853980607, 573026629671398, 2057044572072114, - 2651770578127924, - 2719399289440372, + 21888242871839275222246405745257275088548364400416034343698202334746752044084, + 21888242871839275222246405745257275088548364400416034343698202402375463356532, 1003797260470963, 344882178926518, - 3738016888553147, + 21888242871839275222246405745257275088548364400416034343698203420993062469307, 1818669462038365, 457757375494909, - 4232318106549185, + 21888242871839275222246405745257275088548364400416034343698203915294280465345, 662837690896036, - 2542215397046980, + 21888242871839275222246405745257275088548364400416034343698202225191570963140, 1030188082918396, - 2731085135218675, - 2883440320729099, + 21888242871839275222246405745257275088548364400416034343698202414061309134835, + 21888242871839275222246405745257275088548364400416034343698202566416494645259, 1818443569356084, 1369791062397633, - 2420240419249724, - 4262213953168216, + 21888242871839275222246405745257275088548364400416034343698202103216593165884, + 21888242871839275222246405745257275088548364400416034343698203945190127084376, 28939438365431, - 2873994890212116, - 4229956604910380, - 3710998890310962, + 21888242871839275222246405745257275088548364400416034343698202556971064128276, + 21888242871839275222246405745257275088548364400416034343698203912932778826540, + 21888242871839275222246405745257275088548364400416034343698203393975064227122, 473748401826779, 1815053143210131, - 4416769405730341, - 3183332322664618, - 4284940259570818, + 21888242871839275222246405745257275088548364400416034343698204099745579646501, + 21888242871839275222246405745257275088548364400416034343698202866308496580778, + 21888242871839275222246405745257275088548364400416034343698203967916433486978, 1821217733614076, - 3388049571172155, + 21888242871839275222246405745257275088548364400416034343698203071025745088315, 2174535616835472, 2009590081597337, - 4362750251895969, + 21888242871839275222246405745257275088548364400416034343698204045726425812129, 525989010111555, - 3011964263074543, + 21888242871839275222246405745257275088548364400416034343698202694940436990703, 1476667950835483, - 2268970232582235, + 21888242871839275222246405745257275088548364400416034343698201951946406498395, 1435284051884651, 2004919254617145, - 3673529093236026, - 3581224111938729, - 3300666152032563, + 21888242871839275222246405745257275088548364400416034343698203356505267152186, + 21888242871839275222246405745257275088548364400416034343698203264200285854889, + 21888242871839275222246405745257275088548364400416034343698202983642325948723, 1849439453936234, - 3619042731894373, - 3803590023324435, - 2287081153340591, - 3839131040656039, + 21888242871839275222246405745257275088548364400416034343698203302018905810533, + 21888242871839275222246405745257275088548364400416034343698203486566197240595, + 21888242871839275222246405745257275088548364400416034343698201970057327256751, + 21888242871839275222246405745257275088548364400416034343698203522107214572199, 596342402449969, 230413322237167, 728289083779317, 969448672633113, - 2951599989553613, + 21888242871839275222246405745257275088548364400416034343698202634576163469773, 1999713391974055, 1951914609271221, - 4363809354592038, + 21888242871839275222246405745257275088548364400416034343698204046785528508198, 1168747161893156, - 3912820855187059, - 3403497332713212, - 2888447797478398, - 3035213391605077, - 3230556278767591, + 21888242871839275222246405745257275088548364400416034343698203595797029103219, + 21888242871839275222246405745257275088548364400416034343698203086473506629372, + 21888242871839275222246405745257275088548364400416034343698202571423971394558, + 21888242871839275222246405745257275088548364400416034343698202718189565521237, + 21888242871839275222246405745257275088548364400416034343698202913532452683751, 1333399462805955, - 2597242159969596, + 21888242871839275222246405745257275088548364400416034343698202280218333885756, 1281319779406909, - 3185742909478455, + 21888242871839275222246405745257275088548364400416034343698202868719083394615, 386661114699975, 1071598739359964, - 3751109610414694, - 4393485741474112, - 3488278476883985, + 21888242871839275222246405745257275088548364400416034343698203434085784330854, + 21888242871839275222246405745257275088548364400416034343698204076461915390272, + 21888242871839275222246405745257275088548364400416034343698203171254650800145, 2128910831296239, 448454441288670, 1760323777901078, - 3380461318681979, - 3152335905111525, - 3208976842513263, - 4208588112025491, - 2869193623996807, - 3815916498000302, - 2362148976983491, - 2516003611883958, - 2482789157161467, + 21888242871839275222246405745257275088548364400416034343698203063437492598139, + 21888242871839275222246405745257275088548364400416034343698202835312079027685, + 21888242871839275222246405745257275088548364400416034343698202891953016429423, + 21888242871839275222246405745257275088548364400416034343698203891564285941651, + 21888242871839275222246405745257275088548364400416034343698202552169797912967, + 21888242871839275222246405745257275088548364400416034343698203498892671916462, + 21888242871839275222246405745257275088548364400416034343698202045125150899651, + 21888242871839275222246405745257275088548364400416034343698202198979785800118, + 21888242871839275222246405745257275088548364400416034343698202165765331077627, 428578048112404, 1753509157781389, - 4302673998943500, + 21888242871839275222246405745257275088548364400416034343698203985650172859660, 1230518851826112, 1157461697552902, 604743004154688, - 2897703538537869, + 21888242871839275222246405745257275088548364400416034343698202580679712454029, 1852192068672193, - 3606860694168175, - 3863403144414392, - 2635626754540203, - 3589566710685964, + 21888242871839275222246405745257275088548364400416034343698203289836868084335, + 21888242871839275222246405745257275088548364400416034343698203546379318330552, + 21888242871839275222246405745257275088548364400416034343698202318602928456363, + 21888242871839275222246405745257275088548364400416034343698203272542884602124, 1726656171244911, - 3129778490628633, - 2606964378558057, - 3598663504375910, + 21888242871839275222246405745257275088548364400416034343698202812754664544793, + 21888242871839275222246405745257275088548364400416034343698202289940552474217, + 21888242871839275222246405745257275088548364400416034343698203281639678292070, 2007894834963202, 853215707384713, - 2656397596405790, - 2935738182202033, - 2844911913513524, + 21888242871839275222246405745257275088548364400416034343698202339373770321950, + 21888242871839275222246405745257275088548364400416034343698202618714356118193, + 21888242871839275222246405745257275088548364400416034343698202527888087429684, 2025129472174072, 1100004724045005, - 2574423867528402, + 21888242871839275222246405745257275088548364400416034343698202257400041444562, 857967111969843, 628550410350687, 2075945222632897, - 2520057066055673, + 21888242871839275222246405745257275088548364400416034343698202203033239971833, 365980103102373, - 3199741359351600, - 2773144982655894, + 21888242871839275222246405745257275088548364400416034343698202882717533267760, + 21888242871839275222246405745257275088548364400416034343698202456121156572054, 1266539734447397, - 3110816549250388, + 21888242871839275222246405745257275088548364400416034343698202793792723166548, 693045572097737, - 3805174314754478, - 3784403969257365, - 2703191144207486, - 3045764615757767, + 21888242871839275222246405745257275088548364400416034343698203488150488670638, + 21888242871839275222246405745257275088548364400416034343698203467380143173525, + 21888242871839275222246405745257275088548364400416034343698202386167318123646, + 21888242871839275222246405745257275088548364400416034343698202728740789673927, 1080928335386599, - 3721034522957923, - 4128132838985755, + 21888242871839275222246405745257275088548364400416034343698203404010696874083, + 21888242871839275222246405745257275088548364400416034343698203811109012901915, 1735177570311857, 1339444048238444, 1501507612511011, 1533812230962515, - 4388163359767374, + 21888242871839275222246405745257275088548364400416034343698204071139533683534, 211520737055534, 1829467960887165, - 3360230644572911, - 4272302504894492, - 3014988746317932, - 4287176086845738, - 4258796072011997, + 21888242871839275222246405745257275088548364400416034343698203043206818489071, + 21888242871839275222246405745257275088548364400416034343698203955278678810652, + 21888242871839275222246405745257275088548364400416034343698202697964920234092, + 21888242871839275222246405745257275088548364400416034343698203970152260761898, + 21888242871839275222246405745257275088548364400416034343698203941772245928157, 17090493462939, 339929603406005, - 4414356327661701, + 21888242871839275222246405745257275088548364400416034343698204097332501577861, 68183304899727, 806326976256395, - 3819834694866078, - 4173031436558941, + 21888242871839275222246405745257275088548364400416034343698203502810868782238, + 21888242871839275222246405745257275088548364400416034343698203856007610475101, 418354309788381, - 2596830128102829, - 2796908274203308, + 21888242871839275222246405745257275088548364400416034343698202279806302018989, + 21888242871839275222246405745257275088548364400416034343698202479884448119468, 461616066038429, 182259717171434, 1609446923895299, - 3150485237636886, - 2698144739739820, - 4151400382775427, + 21888242871839275222246405745257275088548364400416034343698202833461411553046, + 21888242871839275222246405745257275088548364400416034343698202381120913655980, + 21888242871839275222246405745257275088548364400416034343698203834376556691587, 41669888616027, 409694648212777, - 3728425179831391, + 21888242871839275222246405745257275088548364400416034343698203411401353747551, 2047438581977368, 1143185347268923, - 2783001915528839, + 21888242871839275222246405745257275088548364400416034343698202465978089444999, 1487342739658448, - 2533534616882055, + 21888242871839275222246405745257275088548364400416034343698202216510790798215, 1489868169348187, 491809914692348, - 3653884245587600, + 21888242871839275222246405745257275088548364400416034343698203336860419503760, 973125635898404, - 3789683227071398, - 3830529207731732, + 21888242871839275222246405745257275088548364400416034343698203472659400987558, + 21888242871839275222246405745257275088548364400416034343698203513505381647892, 98629936263740, 77628261804810, 244430882293417, - 3164277048491712, + 21888242871839275222246405745257275088548364400416034343698202847253222407872, 591799543877923, - 3660121656015378, + 21888242871839275222246405745257275088548364400416034343698203343097829931538, 1085461125258616, 2112037300772227, 1071026577823802, - 3180415872487135, - 4458713924896280, - 2521010788835919, - 3361259128688031, + 21888242871839275222246405745257275088548364400416034343698202863392046403295, + 21888242871839275222246405745257275088548364400416034343698204141690098812440, + 21888242871839275222246405745257275088548364400416034343698202203986962752079, + 21888242871839275222246405745257275088548364400416034343698203044235302604191, 1713043492473313, - 2267286124814263, - 4061692459583871, - 2540907418101774, - 3432595358363896, - 2708602338472497, + 21888242871839275222246405745257275088548364400416034343698201950262298730423, + 21888242871839275222246405745257275088548364400416034343698203744668633500031, + 21888242871839275222246405745257275088548364400416034343698202223883592017934, + 21888242871839275222246405745257275088548364400416034343698203115571532280056, + 21888242871839275222246405745257275088548364400416034343698202391578512388657, 2132344387803595, - 4001550628795550, + 21888242871839275222246405745257275088548364400416034343698203684526802711710, 1374717078610139, 1585853208541150, 117170012624828, - 3779546295522741, + 21888242871839275222246405745257275088548364400416034343698203462522469438901, 1797214779451056, 369598635061742, 554950612524067, - 4210098424979062, - 3214842067717311, - 4361063256542378, + 21888242871839275222246405745257275088548364400416034343698203893074598895222, + 21888242871839275222246405745257275088548364400416034343698202897818241633471, + 21888242871839275222246405745257275088548364400416034343698204044039430458538, 732223063217859, - 2295854484192187, - 3455570258602806, + 21888242871839275222246405745257275088548364400416034343698201978830658108347, + 21888242871839275222246405745257275088548364400416034343698203138546432518966, 703927623010520, - 2442994217386069, - 3187123551743626, + 21888242871839275222246405745257275088548364400416034343698202125970391302229, + 21888242871839275222246405745257275088548364400416034343698202870099725659786, 148213166217165, - 3324891312432229, - 2513766964817496, + 21888242871839275222246405745257275088548364400416034343698203007867486348389, + 21888242871839275222246405745257275088548364400416034343698202196743138733656, 856209432310084, 1018162896897972, - 3805027117568908, - 3834155588900326, - 4272466326955640, + 21888242871839275222246405745257275088548364400416034343698203488003291485068, + 21888242871839275222246405745257275088548364400416034343698203517131762816486, + 21888242871839275222246405745257275088548364400416034343698203955442500871800, 1222830619497186, 381702265462160, 769304144213900, 1219687706675694, - 4341189712599866, - 3345955860477494, - 3933274045451343, - 3725247979350534, - 3814370221344917, + 21888242871839275222246405745257275088548364400416034343698204024165886516026, + 21888242871839275222246405745257275088548364400416034343698203028932034393654, + 21888242871839275222246405745257275088548364400416034343698203616250219367503, + 21888242871839275222246405745257275088548364400416034343698203408224153266694, + 21888242871839275222246405745257275088548364400416034343698203497346395261077, 677692432881956, 810826569440153, - 3521654780715009, - 2419141463475343, + 21888242871839275222246405745257275088548364400416034343698203204630954631169, + 21888242871839275222246405745257275088548364400416034343698202102117637391503, 1556695864942285, 642490802946724, 877214846760307, - 2879070594946047, - 4097135848789604, - 4005744107470455, - 4449549187447827, + 21888242871839275222246405745257275088548364400416034343698202562046768862207, + 21888242871839275222246405745257275088548364400416034343698203780112022705764, + 21888242871839275222246405745257275088548364400416034343698203688720281386615, + 21888242871839275222246405745257275088548364400416034343698204132525361363987, 850768548185329, 1881094999665870, - 3491995147304652, - 3938730192610404, - 2425091626678578, - 4470045806036101, - 2338088272374385, - 3294183118991947, + 21888242871839275222246405745257275088548364400416034343698203174971321220812, + 21888242871839275222246405745257275088548364400416034343698203621706366526564, + 21888242871839275222246405745257275088548364400416034343698202108067800594738, + 21888242871839275222246405745257275088548364400416034343698204153021979952261, + 21888242871839275222246405745257275088548364400416034343698202021064446290545, + 21888242871839275222246405745257275088548364400416034343698202977159292908107, 2075132473661573, - 4002497851331232, + 21888242871839275222246405745257275088548364400416034343698203685474025247392, 796599872965095, 1822340760203963, 1360337691969211, @@ -28568,605 +28568,605 @@ pub global CRP: [Polynomial; L] = [ 75475275902502, 516444718346558, 1545219101539232, - 2836836136126066, + 21888242871839275222246405745257275088548364400416034343698202519812310042226, 128769354992573, 176460827323464, 1201776768117231, 825806162843574, 394322936575963, - 2912735110502979, - 3348556990267252, + 21888242871839275222246405745257275088548364400416034343698202595711284419139, + 21888242871839275222246405745257275088548364400416034343698203031533164183412, 1603234423353033, - 4031990395842105, + 21888242871839275222246405745257275088548364400416034343698203714966569758265, 1956704689471794, 433722485113207, 1828253836430671, 1328867308360159, - 2586442714195593, + 21888242871839275222246405745257275088548364400416034343698202269418888111753, 193134271784625, 1446270004268175, - 2702538706189244, + 21888242871839275222246405745257275088548364400416034343698202385514880105404, 806829671207443, 564201673744662, - 3099233139475308, - 3042745655769395, + 21888242871839275222246405745257275088548364400416034343698202782209313391468, + 21888242871839275222246405745257275088548364400416034343698202725721829685555, 1675683623883648, - 3072955112781680, + 21888242871839275222246405745257275088548364400416034343698202755931286697840, 555116211572141, - 2529939089175397, - 2775921260763700, + 21888242871839275222246405745257275088548364400416034343698202212915263091557, + 21888242871839275222246405745257275088548364400416034343698202458897434679860, 1814884386811650, 267677396543488, 471044977087528, - 3854631283830535, + 21888242871839275222246405745257275088548364400416034343698203537607457746695, 478776552867168, - 2918711692716673, + 21888242871839275222246405745257275088548364400416034343698202601687866632833, 1477443775009213, - 3595677508388397, - 2362142694827341, - 4225298560786730, + 21888242871839275222246405745257275088548364400416034343698203278653682304557, + 21888242871839275222246405745257275088548364400416034343698202045118868743501, + 21888242871839275222246405745257275088548364400416034343698203908274734702890, 284522329736865, - 3299722204814594, + 21888242871839275222246405745257275088548364400416034343698202982698378730754, 242329169552709, - 4173187028722104, - 4114834152241371, + 21888242871839275222246405745257275088548364400416034343698203856163202638264, + 21888242871839275222246405745257275088548364400416034343698203797810326157531, 627061432227594, - 4062496007694309, + 21888242871839275222246405745257275088548364400416034343698203745472181610469, 1331314685918915, - 2722486697030784, + 21888242871839275222246405745257275088548364400416034343698202405462870946944, 1326450548022357, - 2855709943932106, + 21888242871839275222246405745257275088548364400416034343698202538686117848266, 2082496848516153, - 3759100442984408, - 4234808755219686, + 21888242871839275222246405745257275088548364400416034343698203442076616900568, + 21888242871839275222246405745257275088548364400416034343698203917784929135846, 2128255758606225, 1295010052859966, - 3162336561104748, + 21888242871839275222246405745257275088548364400416034343698202845312735020908, 634910181048419, - 3456168036838399, - 4050300959546361, + 21888242871839275222246405745257275088548364400416034343698203139144210754559, + 21888242871839275222246405745257275088548364400416034343698203733277133462521, 2213774358598091, 1551346239197888, - 3226690553241850, + 21888242871839275222246405745257275088548364400416034343698202909666727158010, 1131599399166883, 564158823937951, 172038356105619, - 4083130965939122, - 3580849647415863, - 4240900715248323, + 21888242871839275222246405745257275088548364400416034343698203766107139855282, + 21888242871839275222246405745257275088548364400416034343698203263825821332023, + 21888242871839275222246405745257275088548364400416034343698203923876889164483, 1589471379394650, - 2529492655214103, + 21888242871839275222246405745257275088548364400416034343698202212468829130263, 1198734513239977, 2177358248382386, 1366372748526509, 1290597331887375, - 2772480792639768, - 2558466501228855, - 3498287893710967, - 3372250244676825, - 3572697007076180, - 3526048721274202, + 21888242871839275222246405745257275088548364400416034343698202455456966555928, + 21888242871839275222246405745257275088548364400416034343698202241442675145015, + 21888242871839275222246405745257275088548364400416034343698203181264067627127, + 21888242871839275222246405745257275088548364400416034343698203055226418592985, + 21888242871839275222246405745257275088548364400416034343698203255673180992340, + 21888242871839275222246405745257275088548364400416034343698203209024895190362, 213846680011625, - 3900890785361647, + 21888242871839275222246405745257275088548364400416034343698203583866959277807, 1526861489135084, 1722770176014483, 1465594064339347, - 4340146168813276, + 21888242871839275222246405745257275088548364400416034343698204023122342729436, 1892676170360229, 247469754432791, 1150726349271650, 1490904067157531, 1211977578517323, 405731025606487, - 3386570869357932, + 21888242871839275222246405745257275088548364400416034343698203069547043274092, 625927132100804, - 2474970909359176, + 21888242871839275222246405745257275088548364400416034343698202157947083275336, 128547005739147, - 3553726715350046, + 21888242871839275222246405745257275088548364400416034343698203236702889266206, 68567953080469, - 3449972188165950, - 4472908410713672, + 21888242871839275222246405745257275088548364400416034343698203132948362082110, + 21888242871839275222246405745257275088548364400416034343698204155884584629832, 2216003678515701, 941648189154970, - 3369814584445200, + 21888242871839275222246405745257275088548364400416034343698203052790758361360, 1211910909455073, - 3239309197941473, + 21888242871839275222246405745257275088548364400416034343698202922285371857633, 451902416334572, - 4402370852608910, + 21888242871839275222246405745257275088548364400416034343698204085347026525070, 1407433421773970, 1188130938567987, 1990800182204381, 1250244227227414, 833123534306346, - 2325954652295072, - 4435256703821705, - 3409969062413948, - 2514355271081994, - 3521413052474379, + 21888242871839275222246405745257275088548364400416034343698202008930826211232, + 21888242871839275222246405745257275088548364400416034343698204118232877737865, + 21888242871839275222246405745257275088548364400416034343698203092945236330108, + 21888242871839275222246405745257275088548364400416034343698202197331444998154, + 21888242871839275222246405745257275088548364400416034343698203204389226390539, 1840114888677578, 288987029847475, 1817349169261423, - 4207267579374685, + 21888242871839275222246405745257275088548364400416034343698203890243753290845, 1348642835220701, 622920354802297, 1135061063195106, - 3199078426864577, + 21888242871839275222246405745257275088548364400416034343698202882054600780737, 260433167082871, 1152540529764424, - 3025042379846749, + 21888242871839275222246405745257275088548364400416034343698202708018553762909, 2208260491054237, 2230089147223212, - 2488631401316666, + 21888242871839275222246405745257275088548364400416034343698202171607575232826, 1210395104432304, 1708378505516551, 1220117574055209, - 4048864026773077, - 4367126370066006, - 3793526481334342, - 3085097211787291, - 3856136132736235, + 21888242871839275222246405745257275088548364400416034343698203731840200689237, + 21888242871839275222246405745257275088548364400416034343698204050102543982166, + 21888242871839275222246405745257275088548364400416034343698203476502655250502, + 21888242871839275222246405745257275088548364400416034343698202768073385703451, + 21888242871839275222246405745257275088548364400416034343698203539112306652395, 670504946653054, - 3580106772348480, + 21888242871839275222246405745257275088548364400416034343698203263082946264640, 728784882789824, 1951410994038191, 583790713284516, 225762048471295, 541869955444692, - 3366788818055705, - 2538630156097393, + 21888242871839275222246405745257275088548364400416034343698203049764991971865, + 21888242871839275222246405745257275088548364400416034343698202221606330013553, 1534257154049706, - 2928460123069175, + 21888242871839275222246405745257275088548364400416034343698202611436296985335, 125126653533694, - 3060016176996058, - 3571539307197667, - 3479386356324498, - 3665544301228669, + 21888242871839275222246405745257275088548364400416034343698202742992350912218, + 21888242871839275222246405745257275088548364400416034343698203254515481113827, + 21888242871839275222246405745257275088548364400416034343698203162362530240658, + 21888242871839275222246405745257275088548364400416034343698203348520475144829, 1073075947419095, 51609122890066, 2198989314863654, 579167765335732, 2020572103968357, 1758811885608371, - 3160848407070769, - 3774178665989362, + 21888242871839275222246405745257275088548364400416034343698202843824580986929, + 21888242871839275222246405745257275088548364400416034343698203457154839905522, 455875090478930, 1828883819104248, 78803222009799, - 2460515753262835, + 21888242871839275222246405745257275088548364400416034343698202143491927178995, 1974538093591428, 705256003637159, 2071506848509099, 1202249710717161, - 3180396968614179, - 2889742856137260, - 2566159068304575, + 21888242871839275222246405745257275088548364400416034343698202863373142530339, + 21888242871839275222246405745257275088548364400416034343698202572719030053420, + 21888242871839275222246405745257275088548364400416034343698202249135242220735, 825125213489910, - 2950688355581342, - 4380218781972675, + 21888242871839275222246405745257275088548364400416034343698202633664529497502, + 21888242871839275222246405745257275088548364400416034343698204063194955888835, 407621993556112, 767059495687901, - 2526492877418131, + 21888242871839275222246405745257275088548364400416034343698202209469051334291, 1337796791151735, - 2633405810745718, + 21888242871839275222246405745257275088548364400416034343698202316381984661878, 1611975929168411, - 4405270050349705, + 21888242871839275222246405745257275088548364400416034343698204088246224265865, 597828663303183, 744067220811874, 306103448216951, 2173155928295364, 1720992455261387, - 2586288137167128, - 2998809212853685, - 4036948030600908, + 21888242871839275222246405745257275088548364400416034343698202269264311083288, + 21888242871839275222246405745257275088548364400416034343698202681785386769845, + 21888242871839275222246405745257275088548364400416034343698203719924204517068, 527677099775673, 1688058588814720, - 2675018784302515, - 3419237113899666, - 3297458490273874, + 21888242871839275222246405745257275088548364400416034343698202357994958218675, + 21888242871839275222246405745257275088548364400416034343698203102213287815826, + 21888242871839275222246405745257275088548364400416034343698202980434664190034, 34511558114014, - 3869727732234748, + 21888242871839275222246405745257275088548364400416034343698203552703906150908, 908663486325819, - 2519273883869851, - 2668000332830554, - 2726399426213290, + 21888242871839275222246405745257275088548364400416034343698202202250057786011, + 21888242871839275222246405745257275088548364400416034343698202350976506746714, + 21888242871839275222246405745257275088548364400416034343698202409375600129450, 1769645697653199, 460152812447079, 1083878172686617, - 4356662410550191, + 21888242871839275222246405745257275088548364400416034343698204039638584466351, 1272358576097776, 1663738334206201, - 3299885171587539, - 3235199858613136, - 2293467235585307, - 3143835510209699, + 21888242871839275222246405745257275088548364400416034343698202982861345503699, + 21888242871839275222246405745257275088548364400416034343698202918176032529296, + 21888242871839275222246405745257275088548364400416034343698201976443409501467, + 21888242871839275222246405745257275088548364400416034343698202826811684125859, 2180030779308724, 600203863730311, 2145471606149834, - 3930676926343256, - 2956068984705212, + 21888242871839275222246405745257275088548364400416034343698203613653100259416, + 21888242871839275222246405745257275088548364400416034343698202639045158621372, 1443166756052305, 585706861953900, - 2409793461039222, - 2299845396845946, - 2925560816770448, + 21888242871839275222246405745257275088548364400416034343698202092769634955382, + 21888242871839275222246405745257275088548364400416034343698201982821570762106, + 21888242871839275222246405745257275088548364400416034343698202608536990686608, 1865911433429629, - 3816184409679356, - 4496047340235835, - 4461012772853103, - 3820014226181039, + 21888242871839275222246405745257275088548364400416034343698203499160583595516, + 21888242871839275222246405745257275088548364400416034343698204179023514151995, + 21888242871839275222246405745257275088548364400416034343698204143988946769263, + 21888242871839275222246405745257275088548364400416034343698203502990400097199, 1134590998759032, 1047417103796441, - 3547095176543427, - 2775641259993074, + 21888242871839275222246405745257275088548364400416034343698203230071350459587, + 21888242871839275222246405745257275088548364400416034343698202458617433909234, 1884423152572972, 487162052298095, 1001798397675803, - 2436627872073168, + 21888242871839275222246405745257275088548364400416034343698202119604045989328, 739773312592043, - 2845323631606463, + 21888242871839275222246405745257275088548364400416034343698202528299805522623, 974594099207319, 2091947207547614, - 3661352187379565, - 3356921891253466, + 21888242871839275222246405745257275088548364400416034343698203344328361295725, + 21888242871839275222246405745257275088548364400416034343698203039898065169626, 1958032506831900, - 3361486336684793, + 21888242871839275222246405745257275088548364400416034343698203044462510600953, 822618009627571, - 2376808303545234, + 21888242871839275222246405745257275088548364400416034343698202059784477461394, 416048226516912, 2206713859553701, - 3122276570218624, - 3396169663064011, + 21888242871839275222246405745257275088548364400416034343698202805252744134784, + 21888242871839275222246405745257275088548364400416034343698203079145836980171, 1828231571720239, - 3418131288799939, + 21888242871839275222246405745257275088548364400416034343698203101107462716099, 597108480893149, - 3596109822587815, + 21888242871839275222246405745257275088548364400416034343698203279085996503975, 2142178209851446, - 3611670285929053, + 21888242871839275222246405745257275088548364400416034343698203294646459845213, 1727422166296612, - 2739023953870274, + 21888242871839275222246405745257275088548364400416034343698202422000127786434, 1291508341145734, - 3550299213836731, + 21888242871839275222246405745257275088548364400416034343698203233275387752891, 1256340839173810, - 2692968654096930, - 2416013333825648, - 4177525323628059, - 3739334603117970, - 2586312275046514, - 3300510343711553, - 3001452453459212, - 3410553857031298, - 3191828868926797, - 2299012954112704, - 2360105640847844, - 2457514091266209, + 21888242871839275222246405745257275088548364400416034343698202375944828013090, + 21888242871839275222246405745257275088548364400416034343698202098989507741808, + 21888242871839275222246405745257275088548364400416034343698203860501497544219, + 21888242871839275222246405745257275088548364400416034343698203422310777034130, + 21888242871839275222246405745257275088548364400416034343698202269288448962674, + 21888242871839275222246405745257275088548364400416034343698202983486517627713, + 21888242871839275222246405745257275088548364400416034343698202684428627375372, + 21888242871839275222246405745257275088548364400416034343698203093530030947458, + 21888242871839275222246405745257275088548364400416034343698202874805042842957, + 21888242871839275222246405745257275088548364400416034343698201981989128028864, + 21888242871839275222246405745257275088548364400416034343698202043081814764004, + 21888242871839275222246405745257275088548364400416034343698202140490265182369, 1648513920755127, - 3818193703197574, + 21888242871839275222246405745257275088548364400416034343698203501169877113734, 717110223876858, 1383098493382486, - 3789824441655298, + 21888242871839275222246405745257275088548364400416034343698203472800615571458, 2222027227242072, 973317334405000, 1552565948181926, 193230605556301, - 3992742463087313, - 3921586159745081, - 4111245055501185, + 21888242871839275222246405745257275088548364400416034343698203675718637003473, + 21888242871839275222246405745257275088548364400416034343698203604562333661241, + 21888242871839275222246405745257275088548364400416034343698203794221229417345, 2080954211760198, 959838589889056, 420791532688948, - 3457586842070511, + 21888242871839275222246405745257275088548364400416034343698203140563015986671, 1260313778562067, 1334397833737418, 348489859391614, - 3826148974642493, + 21888242871839275222246405745257275088548364400416034343698203509125148558653, 163845489500706, - 3091489667822897, + 21888242871839275222246405745257275088548364400416034343698202774465841739057, 76807078239275, - 2881166399162565, + 21888242871839275222246405745257275088548364400416034343698202564142573078725, 182306956938063, - 3416508210148438, - 3978180487541545, - 2543113278501471, + 21888242871839275222246405745257275088548364400416034343698203099484384064598, + 21888242871839275222246405745257275088548364400416034343698203661156661457705, + 21888242871839275222246405745257275088548364400416034343698202226089452417631, 1782685875335230, - 3839149471679771, - 4299781751029741, - 3537111493145079, - 2718458564031291, + 21888242871839275222246405745257275088548364400416034343698203522125645595931, + 21888242871839275222246405745257275088548364400416034343698203982757924945901, + 21888242871839275222246405745257275088548364400416034343698203220087667061239, + 21888242871839275222246405745257275088548364400416034343698202401434737947451, 2147817195280839, 311541785346147, 786678919159167, 925608119530406, 828148759592577, 144438063288462, - 3763805879682697, - 2813237549609244, + 21888242871839275222246405745257275088548364400416034343698203446782053598857, + 21888242871839275222246405745257275088548364400416034343698202496213723525404, 358318520325968, - 4347202999859049, + 21888242871839275222246405745257275088548364400416034343698204030179173775209, 352876737682500, 2149998898520423, 1751555239392064, - 4040394339527267, + 21888242871839275222246405745257275088548364400416034343698203723370513443427, 1825211493737793, - 2699547387039943, - 3976262193973013, - 3674909681957570, + 21888242871839275222246405745257275088548364400416034343698202382523560956103, + 21888242871839275222246405745257275088548364400416034343698203659238367889173, + 21888242871839275222246405745257275088548364400416034343698203357885855873730, 1684659179065556, 1513091973622166, 1611210649613134, - 4188340376084971, - 2846200672100959, + 21888242871839275222246405745257275088548364400416034343698203871316550001131, + 21888242871839275222246405745257275088548364400416034343698202529176846017119, 2084804919625216, 873983913124417, 476882657267849, 1829743926287677, - 2861756282903321, - 3449476039596096, + 21888242871839275222246405745257275088548364400416034343698202544732456819481, + 21888242871839275222246405745257275088548364400416034343698203132452213512256, 1050486454758167, 684758232700709, - 4257128446284345, - 2324335305101922, - 3979974038993980, + 21888242871839275222246405745257275088548364400416034343698203940104620200505, + 21888242871839275222246405745257275088548364400416034343698202007311479018082, + 21888242871839275222246405745257275088548364400416034343698203662950212910140, 2127669953228949, 2210454994025640, - 4332082369969331, - 2285616644453446, - 3109275777898169, - 3399704229447795, + 21888242871839275222246405745257275088548364400416034343698204015058543885491, + 21888242871839275222246405745257275088548364400416034343698201968592818369606, + 21888242871839275222246405745257275088548364400416034343698202792251951814329, + 21888242871839275222246405745257275088548364400416034343698203082680403363955, 1462896861131839, 2176401577983184, - 2350542195437229, + 21888242871839275222246405745257275088548364400416034343698202033518369353389, 1281707271475366, - 3119598971617062, + 21888242871839275222246405745257275088548364400416034343698202802575145533222, 966683272869290, 608311948386519, - 2698091026032988, - 2510885749753499, - 2693563294508338, - 2507043974784766, - 2858124265745845, - 4295854448878740, - 2865965184659955, - 3615122847275552, + 21888242871839275222246405745257275088548364400416034343698202381067199949148, + 21888242871839275222246405745257275088548364400416034343698202193861923669659, + 21888242871839275222246405745257275088548364400416034343698202376539468424498, + 21888242871839275222246405745257275088548364400416034343698202190020148700926, + 21888242871839275222246405745257275088548364400416034343698202541100439662005, + 21888242871839275222246405745257275088548364400416034343698203978830622794900, + 21888242871839275222246405745257275088548364400416034343698202548941358576115, + 21888242871839275222246405745257275088548364400416034343698203298099021191712, 1393112214091451, 194075128870285, - 2491583996892527, + 21888242871839275222246405745257275088548364400416034343698202174560170808687, 2050380149743986, 1502101976905878, - 2620495630866404, + 21888242871839275222246405745257275088548364400416034343698202303471804782564, 553261962072774, - 3947665403345521, + 21888242871839275222246405745257275088548364400416034343698203630641577261681, 103949814484537, - 2279566479636267, + 21888242871839275222246405745257275088548364400416034343698201962542653552427, 616806046421629, - 4470654530943333, - 3723241914901050, - 4307902634565077, - 2698462793453226, - 2533931344778401, - 2274360063348154, - 3644820761040092, + 21888242871839275222246405745257275088548364400416034343698204153630704859493, + 21888242871839275222246405745257275088548364400416034343698203406218088817210, + 21888242871839275222246405745257275088548364400416034343698203990878808481237, + 21888242871839275222246405745257275088548364400416034343698202381438967369386, + 21888242871839275222246405745257275088548364400416034343698202216907518694561, + 21888242871839275222246405745257275088548364400416034343698201957336237264314, + 21888242871839275222246405745257275088548364400416034343698203327796934956252, 1160532089066673, - 3192795480535063, - 2377444521803161, + 21888242871839275222246405745257275088548364400416034343698202875771654451223, + 21888242871839275222246405745257275088548364400416034343698202060420695719321, 1665898260352112, 974455967993152, - 3005544731920616, + 21888242871839275222246405745257275088548364400416034343698202688520905836776, 473901205895996, - 3843844119800573, + 21888242871839275222246405745257275088548364400416034343698203526820293716733, 1199611826688779, 358915395394728, 439289939874919, 1406032637496812, 868213507007800, - 2762705672026830, + 21888242871839275222246405745257275088548364400416034343698202445681845942990, 1961443978012029, - 3891580672746417, + 21888242871839275222246405745257275088548364400416034343698203574556846662577, 1469206084817716, - 2525512575216137, - 2873882834469787, - 2614806691925687, - 3530224649925064, + 21888242871839275222246405745257275088548364400416034343698202208488749132297, + 21888242871839275222246405745257275088548364400416034343698202556859008385947, + 21888242871839275222246405745257275088548364400416034343698202297782865841847, + 21888242871839275222246405745257275088548364400416034343698203213200823841224, 1524614687018431, - 2860263310268409, - 3275387433840540, - 3646587554236707, + 21888242871839275222246405745257275088548364400416034343698202543239484184569, + 21888242871839275222246405745257275088548364400416034343698202958363607756700, + 21888242871839275222246405745257275088548364400416034343698203329563728152867, 1719968267530693, 1731298724537287, - 3362372753394126, - 4188313518241789, - 3928768556560209, - 4230974737617372, + 21888242871839275222246405745257275088548364400416034343698203045348927310286, + 21888242871839275222246405745257275088548364400416034343698203871289692157949, + 21888242871839275222246405745257275088548364400416034343698203611744730476369, + 21888242871839275222246405745257275088548364400416034343698203913950911533532, 1472672033566220, 1666062208881187, 1028751368780303, - 2780364549191525, - 4308739233391300, - 3020137605991934, - 3265716007039596, - 2856457763869340, + 21888242871839275222246405745257275088548364400416034343698202463340723107685, + 21888242871839275222246405745257275088548364400416034343698203991715407307460, + 21888242871839275222246405745257275088548364400416034343698202703113779908094, + 21888242871839275222246405745257275088548364400416034343698202948692180955756, + 21888242871839275222246405745257275088548364400416034343698202539433937785500, 2033216601842167, 1574010372112518, 455912691774141, - 4273216516324861, + 21888242871839275222246405745257275088548364400416034343698203956192690241021, 840197261008484, - 2526227572852320, + 21888242871839275222246405745257275088548364400416034343698202209203746768480, 427514769664812, - 3324501635396366, - 4006312441596972, - 3276460852136553, + 21888242871839275222246405745257275088548364400416034343698203007477809312526, + 21888242871839275222246405745257275088548364400416034343698203689288615513132, + 21888242871839275222246405745257275088548364400416034343698202959437026052713, 1257525699934890, 1836777705007911, - 3099871248082398, + 21888242871839275222246405745257275088548364400416034343698202782847421998558, 1174972458956156, - 3396099508747677, - 3871465437489562, + 21888242871839275222246405745257275088548364400416034343698203079075682663837, + 21888242871839275222246405745257275088548364400416034343698203554441611405722, 2055544186324132, - 2264637568466655, + 21888242871839275222246405745257275088548364400416034343698201947613742382815, 1082884146119765, 857923190880090, - 2700793883980346, - 3909752331139141, - 3491672770995280, + 21888242871839275222246405745257275088548364400416034343698202383770057896506, + 21888242871839275222246405745257275088548364400416034343698203592728505055301, + 21888242871839275222246405745257275088548364400416034343698203174648944911440, 1305072686820595, - 2943719426514153, - 3099073835078441, + 21888242871839275222246405745257275088548364400416034343698202626695600430313, + 21888242871839275222246405745257275088548364400416034343698202782050008994601, 1871765105636076, - 3546307240085497, - 2542233579905141, - 2546134039083738, - 3594570584618866, - 2778499914471383, - 3288680654875485, - 2513113332324359, - 2511935633508805, - 3008643635187263, + 21888242871839275222246405745257275088548364400416034343698203229283414001657, + 21888242871839275222246405745257275088548364400416034343698202225209753821301, + 21888242871839275222246405745257275088548364400416034343698202229110212999898, + 21888242871839275222246405745257275088548364400416034343698203277546758535026, + 21888242871839275222246405745257275088548364400416034343698202461476088387543, + 21888242871839275222246405745257275088548364400416034343698202971656828791645, + 21888242871839275222246405745257275088548364400416034343698202196089506240519, + 21888242871839275222246405745257275088548364400416034343698202194911807424965, + 21888242871839275222246405745257275088548364400416034343698202691619809103423, 252421998839662, 909458507715810, - 3427472748915762, - 2774707275404093, - 3382801630346287, - 3339257510437103, + 21888242871839275222246405745257275088548364400416034343698203110448922831922, + 21888242871839275222246405745257275088548364400416034343698202457683449320253, + 21888242871839275222246405745257275088548364400416034343698203065777804262447, + 21888242871839275222246405745257275088548364400416034343698203022233684353263, 1819806160489979, - 3365957802813919, + 21888242871839275222246405745257275088548364400416034343698203048933976730079, 1848465726491128, 507086220861739, 1047758452430371, - 2470826339546629, - 3908889349851450, - 3553137789799781, - 2572475836079151, + 21888242871839275222246405745257275088548364400416034343698202153802513462789, + 21888242871839275222246405745257275088548364400416034343698203591865523767610, + 21888242871839275222246405745257275088548364400416034343698203236113963715941, + 21888242871839275222246405745257275088548364400416034343698202255452009995311, 1486995810639407, 703886527395537, - 3505307900722700, - 3999760126120307, + 21888242871839275222246405745257275088548364400416034343698203188284074638860, + 21888242871839275222246405745257275088548364400416034343698203682736300036467, 1990798634350429, 2151214949436995, - 2802149033733796, - 2690678155862436, + 21888242871839275222246405745257275088548364400416034343698202485125207649956, + 21888242871839275222246405745257275088548364400416034343698202373654329778596, 999649359270017, - 2474284273407623, - 4270853404576127, + 21888242871839275222246405745257275088548364400416034343698202157260447323783, + 21888242871839275222246405745257275088548364400416034343698203953829578492287, 809327111314079, - 2835071493308016, - 2580840877447944, + 21888242871839275222246405745257275088548364400416034343698202518047667224176, + 21888242871839275222246405745257275088548364400416034343698202263817051364104, 794831748181935, 1886814212138280, 2018197789964920, 624820542492427, 1852432005823911, 460855234251032, - 4379289685157065, + 21888242871839275222246405745257275088548364400416034343698204062265859073225, 2075675847305535, 342160958533623, 326620138063732, 729557049216385, 71363509533733, 228473120397275, - 2652331808836790, - 2505845611373109, - 3407961779077315, - 2881675497603248, - 3838237336218452, - 3919523874502517, - 4351370816590112, + 21888242871839275222246405745257275088548364400416034343698202335307982752950, + 21888242871839275222246405745257275088548364400416034343698202188821785289269, + 21888242871839275222246405745257275088548364400416034343698203090937952993475, + 21888242871839275222246405745257275088548364400416034343698202564651671519408, + 21888242871839275222246405745257275088548364400416034343698203521213510134612, + 21888242871839275222246405745257275088548364400416034343698203602500048418677, + 21888242871839275222246405745257275088548364400416034343698204034346990506272, 801849427159469, 2159087066188983, 917702860704696, - 3788961300140427, + 21888242871839275222246405745257275088548364400416034343698203471937474056587, 1860420265791642, - 4052927824570234, - 3924741408165746, - 4446853929293558, + 21888242871839275222246405745257275088548364400416034343698203735903998486394, + 21888242871839275222246405745257275088548364400416034343698203607717582081906, + 21888242871839275222246405745257275088548364400416034343698204129830103209718, 1969917691783086, - 3229190657646616, - 3206964738500127, + 21888242871839275222246405745257275088548364400416034343698202912166831562776, + 21888242871839275222246405745257275088548364400416034343698202889940912416287, 249570462293237, 68794705585007, - 2444646058937947, - 3930670155579676, - 2414265376278789, - 3335524192246312, - 3869993013618674, + 21888242871839275222246405745257275088548364400416034343698202127622232854107, + 21888242871839275222246405745257275088548364400416034343698203613646329495836, + 21888242871839275222246405745257275088548364400416034343698202097241550194949, + 21888242871839275222246405745257275088548364400416034343698203018500366162472, + 21888242871839275222246405745257275088548364400416034343698203552969187534834, 456889894086784, - 2653692995573202, + 21888242871839275222246405745257275088548364400416034343698202336669169489362, 212104695161539, 1054563875245733, 1008443284637131, 1235708883581739, 174797856737844, - 3027048620794932, - 3096578709309368, - 3642126250252356, - 4193742212827744, - 3165719898086453, - 3200565783442912, - 2888511299419933, + 21888242871839275222246405745257275088548364400416034343698202710024794711092, + 21888242871839275222246405745257275088548364400416034343698202779554883225528, + 21888242871839275222246405745257275088548364400416034343698203325102424168516, + 21888242871839275222246405745257275088548364400416034343698203876718386743904, + 21888242871839275222246405745257275088548364400416034343698202848696072002613, + 21888242871839275222246405745257275088548364400416034343698202883541957359072, + 21888242871839275222246405745257275088548364400416034343698202571487473336093, 343338879750724, 1180453145004127, 950926870015011, - 3094882262753086, + 21888242871839275222246405745257275088548364400416034343698202777858436669246, 1029989406018962, 688352489750941, - 3083486841960507, - 3284255856897050, - 4237359614600809, - 3239930803734125, + 21888242871839275222246405745257275088548364400416034343698202766463015876667, + 21888242871839275222246405745257275088548364400416034343698202967232030813210, + 21888242871839275222246405745257275088548364400416034343698203920335788516969, + 21888242871839275222246405745257275088548364400416034343698202922906977650285, 182074363450457, 188321063364071, - 4002136117301093, + 21888242871839275222246405745257275088548364400416034343698203685112291217253, 2221204689262293, 670250333965523, 2076017237942773, 641334699664355, - 2891565946006067, - 3929929172954108, - 3959312131192255, - 3548095531339747, + 21888242871839275222246405745257275088548364400416034343698202574542119922227, + 21888242871839275222246405745257275088548364400416034343698203612905346870268, + 21888242871839275222246405745257275088548364400416034343698203642288305108415, + 21888242871839275222246405745257275088548364400416034343698203231071705255907, 1550143672640899, - 2789979670635221, + 21888242871839275222246405745257275088548364400416034343698202472955844551381, 721163234014395, 1746160981069738, - 2436191795595535, + 21888242871839275222246405745257275088548364400416034343698202119167969511695, 1286238787852563, - 3487717419617130, + 21888242871839275222246405745257275088548364400416034343698203170693593533290, 2186541383898612, - 2365151500903938, + 21888242871839275222246405745257275088548364400416034343698202048127674820098, 882291562790039, - 3071574940370090, - 2848135302727586, + 21888242871839275222246405745257275088548364400416034343698202754551114286250, + 21888242871839275222246405745257275088548364400416034343698202531111476643746, 2189814335599448, 2018618356677725, - 3297392165206996, + 21888242871839275222246405745257275088548364400416034343698202980368339123156, 1122973713679486, 1933087830483372, 511603697025872, - 3728152948946351, + 21888242871839275222246405745257275088548364400416034343698203411129122862511, 2223898663662807, - 2972836633387488, - 3380844131174297, - 4494889131728632, + 21888242871839275222246405745257275088548364400416034343698202655812807303648, + 21888242871839275222246405745257275088548364400416034343698203063820305090457, + 21888242871839275222246405745257275088548364400416034343698204177865305644792, 246891440164972, 464345401832727, - 2323718410936112, + 21888242871839275222246405745257275088548364400416034343698202006694584852272, 1518487432530101, 591370797496060, 597837162077204, - 3375965794618414, - 2407422688961581, - 3686666073518829, + 21888242871839275222246405745257275088548364400416034343698203058941968534574, + 21888242871839275222246405745257275088548364400416034343698202090398862877741, + 21888242871839275222246405745257275088548364400416034343698203369642247434989, 1183451619261478, 2070337843857829, 969162204033764, 1018393056757509, 506102508238527, 1594833520420241, - 3885335857564229, - 2904974935910655, + 21888242871839275222246405745257275088548364400416034343698203568312031480389, + 21888242871839275222246405745257275088548364400416034343698202587951109826815, 1352910340124847, 1695513993200475, - 2750642029538632, + 21888242871839275222246405745257275088548364400416034343698202433618203454792, 2066030787990587, - 3508518072983645, + 21888242871839275222246405745257275088548364400416034343698203191494246899805, 406524982459065, 1856188763833160, 2146598231845477, @@ -29175,45 +29175,45 @@ pub global CRP: [Polynomial; L] = [ 2127199955895665, 1993490845021791, 425099029401213, - 4182825496441599, - 3858354951137846, + 21888242871839275222246405745257275088548364400416034343698203865801670357759, + 21888242871839275222246405745257275088548364400416034343698203541331125054006, 300231952939876, 338742535018950, - 4194091884340810, - 2484433586381551, + 21888242871839275222246405745257275088548364400416034343698203877068058256970, + 21888242871839275222246405745257275088548364400416034343698202167409760297711, 1081464457492876, 327596567484924, 1138341243882596, - 2423762455483736, - 3729332986367564, + 21888242871839275222246405745257275088548364400416034343698202106738629399896, + 21888242871839275222246405745257275088548364400416034343698203412309160283724, 592346840155184, 1249977642285949, - 3313805087314492, - 4064284267183042, - 2834669608762571, + 21888242871839275222246405745257275088548364400416034343698202996781261230652, + 21888242871839275222246405745257275088548364400416034343698203747260441099202, + 21888242871839275222246405745257275088548364400416034343698202517645782678731, 2213444605690170, - 4118921007245341, + 21888242871839275222246405745257275088548364400416034343698203801897181161501, 1199941020858204, - 4075382362715807, - 4465235816957748, - 2504025721451895, - 3475022710367284, + 21888242871839275222246405745257275088548364400416034343698203758358536631967, + 21888242871839275222246405745257275088548364400416034343698204148211990873908, + 21888242871839275222246405745257275088548364400416034343698202187001895368055, + 21888242871839275222246405745257275088548364400416034343698203157998884283444, 1742333717685343, 1864857953331903, - 2504857269542000, + 21888242871839275222246405745257275088548364400416034343698202187833443458160, 2028893666040810, 2237057454218477, - 4241104269016742, + 21888242871839275222246405745257275088548364400416034343698203924080442932902, 447749761678449, - 2405538805464583, - 3025242273642828, + 21888242871839275222246405745257275088548364400416034343698202088514979380743, + 21888242871839275222246405745257275088548364400416034343698202708218447558988, 158476377116437, - 3037917124059121, - 2663756179375714, + 21888242871839275222246405745257275088548364400416034343698202720893297975281, + 21888242871839275222246405745257275088548364400416034343698202346732353291874, 1824990514789449, - 4230241489581532, - 3469692609762558, - 2874018493069024, + 21888242871839275222246405745257275088548364400416034343698203913217663497692, + 21888242871839275222246405745257275088548364400416034343698203152668783678718, + 21888242871839275222246405745257275088548364400416034343698202556994666985184, 2167210694283999, 508106705903602, 470316688609065, @@ -29225,32 +29225,32 @@ pub global CRP: [Polynomial; L] = [ 391433378517050, 866686697015790, 609291852581999, - 3207653120629453, - 2406564766946164, - 4000075751127409, - 3579003410049807, + 21888242871839275222246405745257275088548364400416034343698202890629294545613, + 21888242871839275222246405745257275088548364400416034343698202089540940862324, + 21888242871839275222246405745257275088548364400416034343698203683051925043569, + 21888242871839275222246405745257275088548364400416034343698203261979583965967, 2247720114116753, 1505690402231485, 1861091232074719, - 2861572361582032, - 2745441039669350, + 21888242871839275222246405745257275088548364400416034343698202544548535498192, + 21888242871839275222246405745257275088548364400416034343698202428417213585510, 333723717391503, - 3181184266545063, + 21888242871839275222246405745257275088548364400416034343698202864160440461223, 813896330305211, - 2877612538317889, + 21888242871839275222246405745257275088548364400416034343698202560588712234049, 1180092568677082, 1707445065512096, - 2613499725160490, + 21888242871839275222246405745257275088548364400416034343698202296475899076650, 1762342023281161, - 2757980522390828, - 3215950542368864, - 3765106121540552, + 21888242871839275222246405745257275088548364400416034343698202440956696306988, + 21888242871839275222246405745257275088548364400416034343698202898926716285024, + 21888242871839275222246405745257275088548364400416034343698203448082295456712, 2088788248887665, - 4486194633268749, - 3102750245597484, + 21888242871839275222246405745257275088548364400416034343698204169170807184909, + 21888242871839275222246405745257275088548364400416034343698202785726419513644, 434368165612547, - 3827807652564818, - 4496913835164970, + 21888242871839275222246405745257275088548364400416034343698203510783826480978, + 21888242871839275222246405745257275088548364400416034343698204179890009081130, 1939724155862995, 341559992319716, 1464692014468676, @@ -29258,10 +29258,10 @@ pub global CRP: [Polynomial; L] = [ 648609934960285, 1346607767662090, 28071168868802, - 4237089996633069, + 21888242871839275222246405745257275088548364400416034343698203920066170549229, 980491780966790, - 3022685033671988, - 4471289919419948, + 21888242871839275222246405745257275088548364400416034343698202705661207588148, + 21888242871839275222246405745257275088548364400416034343698204154266093336108, 1801495110952515, 1649667045019552, 2112129550752377, @@ -29269,821 +29269,821 @@ pub global CRP: [Polynomial; L] = [ 515658223273835, 465174670246978, 1987487881106242, - 3669987486185875, - 4475203204867477, - 2664584105691813, - 4025971295790002, - 2318273601563190, - 4082102936548666, + 21888242871839275222246405745257275088548364400416034343698203352963660102035, + 21888242871839275222246405745257275088548364400416034343698204158179378783637, + 21888242871839275222246405745257275088548364400416034343698202347560279607973, + 21888242871839275222246405745257275088548364400416034343698203708947469706162, + 21888242871839275222246405745257275088548364400416034343698202001249775479350, + 21888242871839275222246405745257275088548364400416034343698203765079110464826, 1529906639097063, 677029702975189, 1989255602310532, - 2439837482591361, - 3551938116609123, - 3922425927924654, + 21888242871839275222246405745257275088548364400416034343698202122813656507521, + 21888242871839275222246405745257275088548364400416034343698203234914290525283, + 21888242871839275222246405745257275088548364400416034343698203605402101840814, 843569112250764, - 3398630242845432, + 21888242871839275222246405745257275088548364400416034343698203081606416761592, 1981896217631184, - 3588204894750713, - 2901367210294916, + 21888242871839275222246405745257275088548364400416034343698203271181068666873, + 21888242871839275222246405745257275088548364400416034343698202584343384211076, 987427553500106, - 2536449190081411, + 21888242871839275222246405745257275088548364400416034343698202219425363997571, 1967319004300736, 1337037764249651, 400330357973939, - 2888445177764077, - 2376653020486635, - 3185945036179422, + 21888242871839275222246405745257275088548364400416034343698202571421351680237, + 21888242871839275222246405745257275088548364400416034343698202059629194402795, + 21888242871839275222246405745257275088548364400416034343698202868921210095582, 1596438793482100, 1794838490114019, - 2373500540744736, + 21888242871839275222246405745257275088548364400416034343698202056476714660896, 2211277645665946, - 2442339140475147, - 4306546407507838, - 4410518161893447, + 21888242871839275222246405745257275088548364400416034343698202125315314391307, + 21888242871839275222246405745257275088548364400416034343698203989522581423998, + 21888242871839275222246405745257275088548364400416034343698204093494335809607, 501027807979909, - 4081122704840421, - 3068563854645122, + 21888242871839275222246405745257275088548364400416034343698203764098878756581, + 21888242871839275222246405745257275088548364400416034343698202751540028561282, 1084049921861965, - 4003360445080207, - 2451744929522017, - 2492767205950907, + 21888242871839275222246405745257275088548364400416034343698203686336618996367, + 21888242871839275222246405745257275088548364400416034343698202134721103438177, + 21888242871839275222246405745257275088548364400416034343698202175743379867067, 588763229973797, 1451171053917790, - 3839392550916196, - 2552218069821433, + 21888242871839275222246405745257275088548364400416034343698203522368724832356, + 21888242871839275222246405745257275088548364400416034343698202235194243737593, 2201930389685612, - 4186057197186889, + 21888242871839275222246405745257275088548364400416034343698203869033371103049, 1409603404082847, 59710436316475, 2174886565305646, 2192246339027846, 2138583126820676, - 2949119665419181, - 4240480870502787, - 3789832717858537, - 2620527352111273, - 4079259549807499, + 21888242871839275222246405745257275088548364400416034343698202632095839335341, + 21888242871839275222246405745257275088548364400416034343698203923457044418947, + 21888242871839275222246405745257275088548364400416034343698203472808891774697, + 21888242871839275222246405745257275088548364400416034343698202303503526027433, + 21888242871839275222246405745257275088548364400416034343698203762235723723659, 1138909715935440, 1308488764404910, 386420405886970, - 4414111088259146, - 2561206786794805, - 2786561433227029, + 21888242871839275222246405745257275088548364400416034343698204097087262175306, + 21888242871839275222246405745257275088548364400416034343698202244182960710965, + 21888242871839275222246405745257275088548364400416034343698202469537607143189, 111442547717824, 2153385392650765, 1925287441539734, - 3513430405033883, - 4439603520641643, + 21888242871839275222246405745257275088548364400416034343698203196406578950043, + 21888242871839275222246405745257275088548364400416034343698204122579694557803, 335478090194517, 1166982746052607, - 2476061437403024, + 21888242871839275222246405745257275088548364400416034343698202159037611319184, 690779505740417, - 2924431313366705, - 4175771812345557, - 3863659827498788, + 21888242871839275222246405745257275088548364400416034343698202607407487282865, + 21888242871839275222246405745257275088548364400416034343698203858747986261717, + 21888242871839275222246405745257275088548364400416034343698203546636001414948, 1454995961185496, - 3789295263878284, - 4349526223435593, + 21888242871839275222246405745257275088548364400416034343698203472271437794444, + 21888242871839275222246405745257275088548364400416034343698204032502397351753, 1562284508663035, - 3600986744290771, + 21888242871839275222246405745257275088548364400416034343698203283962918206931, 522906507679533, - 2606121811784001, + 21888242871839275222246405745257275088548364400416034343698202289097985700161, 10010156645214, - 3185837392951815, + 21888242871839275222246405745257275088548364400416034343698202868813566867975, 933887564940902, 1198813585237075, - 3312855590825328, + 21888242871839275222246405745257275088548364400416034343698202995831764741488, 481841168769905, - 2925687071730056, + 21888242871839275222246405745257275088548364400416034343698202608663245646216, 356424194022673, 1258168050217653, 371645774504152, 526023745135013, - 3934104754922968, - 3640470117229398, - 4449358151602796, + 21888242871839275222246405745257275088548364400416034343698203617080928839128, + 21888242871839275222246405745257275088548364400416034343698203323446291145558, + 21888242871839275222246405745257275088548364400416034343698204132334325518956, 266553029856741, 889924801641202, 412584415032476, 1187321057170987, 1667151087219735, - 2667159472133337, - 3517962465461524, + 21888242871839275222246405745257275088548364400416034343698202350135646049497, + 21888242871839275222246405745257275088548364400416034343698203200938639377684, 1650055464881171, - 3629577713946053, - 3295659961612318, + 21888242871839275222246405745257275088548364400416034343698203312553887862213, + 21888242871839275222246405745257275088548364400416034343698202978636135528478, 1313957355206730, - 3799150851662043, - 3932424365808448, - 3174140862344583, - 4337084999627664, - 2357156661211693, + 21888242871839275222246405745257275088548364400416034343698203482127025578203, + 21888242871839275222246405745257275088548364400416034343698203615400539724608, + 21888242871839275222246405745257275088548364400416034343698202857117036260743, + 21888242871839275222246405745257275088548364400416034343698204020061173543824, + 21888242871839275222246405745257275088548364400416034343698202040132835127853, 2071083555810854, - 2443775702056681, + 21888242871839275222246405745257275088548364400416034343698202126751875972841, 1031070078585528, 511780519164458, 2241749041778675, - 2898616588131158, + 21888242871839275222246405745257275088548364400416034343698202581592762047318, 1894218636091837, - 2942253380553116, + 21888242871839275222246405745257275088548364400416034343698202625229554469276, 627080271405274, - 2718121437439735, + 21888242871839275222246405745257275088548364400416034343698202401097611355895, 637067731175892, 681997721567780, 241101631978901, 6004316371450, 739942544581306, 2010081209301473, - 2506058012299540, - 2455062717029388, + 21888242871839275222246405745257275088548364400416034343698202189034186215700, + 21888242871839275222246405745257275088548364400416034343698202138038890945548, 1838973783548635, 1222391271819032, 2130426993165416, - 2813360829010355, - 3630111246273290, + 21888242871839275222246405745257275088548364400416034343698202496337002926515, + 21888242871839275222246405745257275088548364400416034343698203313087420189450, 1054181054270616, - 3986339998027492, - 3082413404922562, - 4455494559082469, - 4181706198705412, - 2899828243168024, + 21888242871839275222246405745257275088548364400416034343698203669316171943652, + 21888242871839275222246405745257275088548364400416034343698202765389578838722, + 21888242871839275222246405745257275088548364400416034343698204138470732998629, + 21888242871839275222246405745257275088548364400416034343698203864682372621572, + 21888242871839275222246405745257275088548364400416034343698202582804417084184, 1309491267504411, 1002437248682931, 1293837231607571, - 2427493560864370, + 21888242871839275222246405745257275088548364400416034343698202110469734780530, 743167976214747, - 4146058127060114, + 21888242871839275222246405745257275088548364400416034343698203829034300976274, 1022348571510956, 921147206350673, - 3332887088616389, - 2338379793982310, - 3323586864544976, + 21888242871839275222246405745257275088548364400416034343698203015863262532549, + 21888242871839275222246405745257275088548364400416034343698202021355967898470, + 21888242871839275222246405745257275088548364400416034343698203006563038461136, 820018386756896, - 3177134489354813, + 21888242871839275222246405745257275088548364400416034343698202860110663270973, 1406936041585025, - 4341109822076542, + 21888242871839275222246405745257275088548364400416034343698204024085995992702, 878979586131406, 2205440422399502, - 3408048596838600, + 21888242871839275222246405745257275088548364400416034343698203091024770754760, 1686871896696913, 2047714281475524, 2000331862510271, - 3295429726490236, + 21888242871839275222246405745257275088548364400416034343698202978405900406396, 244426512702894, 671669990674576, 1255428882362205, 581569098944723, - 4250260516795518, + 21888242871839275222246405745257275088548364400416034343698203933236690711678, 255012421055267, 668093064159751, - 3312964490060662, + 21888242871839275222246405745257275088548364400416034343698202995940663976822, 1570999585080301, - 4099666895681411, + 21888242871839275222246405745257275088548364400416034343698203782643069597571, 2075235084826370, - 3836114066730459, - 2370798433651605, - 3911606350928373, - 3258855764626970, - 3100161703483466, + 21888242871839275222246405745257275088548364400416034343698203519090240646619, + 21888242871839275222246405745257275088548364400416034343698202053774607567765, + 21888242871839275222246405745257275088548364400416034343698203594582524844533, + 21888242871839275222246405745257275088548364400416034343698202941831938543130, + 21888242871839275222246405745257275088548364400416034343698202783137877399626, 1869033090783217, 156173038827253, 115168212714414, - 2747491919309749, - 2323706021901859, - 3633033627487226, + 21888242871839275222246405745257275088548364400416034343698202430468093225909, + 21888242871839275222246405745257275088548364400416034343698202006682195818019, + 21888242871839275222246405745257275088548364400416034343698203316009801403386, 513978087444267, - 4103842342061266, + 21888242871839275222246405745257275088548364400416034343698203786818515977426, 2107412728502637, - 2950906136355035, + 21888242871839275222246405745257275088548364400416034343698202633882310271195, 1092936845469184, 699643006336181, - 3900762783890055, + 21888242871839275222246405745257275088548364400416034343698203583738957806215, 1838807070595375, 6859529851391, - 4164232935335666, + 21888242871839275222246405745257275088548364400416034343698203847209109251826, 1559984502251493, 2925691890871, - 4420969676289613, + 21888242871839275222246405745257275088548364400416034343698204103945850205773, 756544983877571, 737708958696863, - 2940076590543651, + 21888242871839275222246405745257275088548364400416034343698202623052764459811, 1693695215727207, - 4051965164058068, - 3694657263347115, + 21888242871839275222246405745257275088548364400416034343698203734941337974228, + 21888242871839275222246405745257275088548364400416034343698203377633437263275, 1002119062616051, - 3106478719645530, + 21888242871839275222246405745257275088548364400416034343698202789454893561690, 1623462155124609, 1949429158802569, - 2938372545943843, + 21888242871839275222246405745257275088548364400416034343698202621348719860003, 1456609670774248, - 3492919078921112, + 21888242871839275222246405745257275088548364400416034343698203175895252837272, 1957202709374358, 1211999593281625, 894416471824475, 895082083825206, 1272534093731194, 137614417387397, - 2861222706614747, + 21888242871839275222246405745257275088548364400416034343698202544198880530907, 1367247317251452, 1206014631415768, - 3105002328056975, - 2771907546790789, + 21888242871839275222246405745257275088548364400416034343698202787978501973135, + 21888242871839275222246405745257275088548364400416034343698202454883720706949, 833611979763868, 1849903624158496, 1519959244644460, 1394569466360724, 783966343001611, 260877830247059, - 3945822951334484, + 21888242871839275222246405745257275088548364400416034343698203628799125250644, 1630661859892577, 700347691442131, - 4299108546602315, - 3350267679060611, - 3008819886754648, + 21888242871839275222246405745257275088548364400416034343698203982084720518475, + 21888242871839275222246405745257275088548364400416034343698203033243852976771, + 21888242871839275222246405745257275088548364400416034343698202691796060670808, 1634582400600375, 1385148277220095, 2083899103161262, - 4412608555768157, + 21888242871839275222246405745257275088548364400416034343698204095584729684317, 627619598578544, - 3099525019426447, - 3217444196294604, - 2653584941137820, - 3891717240959004, - 2736670917906001, + 21888242871839275222246405745257275088548364400416034343698202782501193342607, + 21888242871839275222246405745257275088548364400416034343698202900420370210764, + 21888242871839275222246405745257275088548364400416034343698202336561115053980, + 21888242871839275222246405745257275088548364400416034343698203574693414875164, + 21888242871839275222246405745257275088548364400416034343698202419647091822161, 1554020552109093, 1605628538293118, - 3740685705945748, - 4179093493837283, + 21888242871839275222246405745257275088548364400416034343698203423661879861908, + 21888242871839275222246405745257275088548364400416034343698203862069667753443, 19397772007966, 1519243576543683, - 3679959201373254, - 4015019479588104, - 4295767633709348, - 4384249482392968, + 21888242871839275222246405745257275088548364400416034343698203362935375289414, + 21888242871839275222246405745257275088548364400416034343698203697995653504264, + 21888242871839275222246405745257275088548364400416034343698203978743807625508, + 21888242871839275222246405745257275088548364400416034343698204067225656309128, 37113272489660, 259790058146391, 1994222392966648, 1843853279091956, - 2691424990421611, - 4098160706436798, - 3927968982285918, - 2799737638556219, + 21888242871839275222246405745257275088548364400416034343698202374401164337771, + 21888242871839275222246405745257275088548364400416034343698203781136880352958, + 21888242871839275222246405745257275088548364400416034343698203610945156202078, + 21888242871839275222246405745257275088548364400416034343698202482713812472379, 236121569088618, 45976749145790, 1836935012753567, 1816832178645882, - 4349842135926512, - 3259895366556978, - 3751526744428519, - 3967438991089361, + 21888242871839275222246405745257275088548364400416034343698204032818309842672, + 21888242871839275222246405745257275088548364400416034343698202942871540473138, + 21888242871839275222246405745257275088548364400416034343698203434502918344679, + 21888242871839275222246405745257275088548364400416034343698203650415165005521, 1839685550739840, 1810636207072863, - 2724479924116961, - 2842130049555009, + 21888242871839275222246405745257275088548364400416034343698202407456098033121, + 21888242871839275222246405745257275088548364400416034343698202525106223471169, 1900335804687993, - 3950015933722197, - 4127691450709112, - 3119302796494152, - 3970794033013261, - 2956958147607414, + 21888242871839275222246405745257275088548364400416034343698203632992107638357, + 21888242871839275222246405745257275088548364400416034343698203810667624625272, + 21888242871839275222246405745257275088548364400416034343698202802278970410312, + 21888242871839275222246405745257275088548364400416034343698203653770206929421, + 21888242871839275222246405745257275088548364400416034343698202639934321523574, 1770389948756347, - 3263383258499001, + 21888242871839275222246405745257275088548364400416034343698202946359432415161, 2227141907950432, - 2519869178921712, - 3540385170528127, - 3864786924842165, - 3140168776506459, - 2484165176844820, - 2563333106724094, - 3430205318111481, - 3018849515874894, - 4075947683243827, - 2787538428507676, - 2328631009601163, + 21888242871839275222246405745257275088548364400416034343698202202845352837872, + 21888242871839275222246405745257275088548364400416034343698203223361344444287, + 21888242871839275222246405745257275088548364400416034343698203547763098758325, + 21888242871839275222246405745257275088548364400416034343698202823144950422619, + 21888242871839275222246405745257275088548364400416034343698202167141350760980, + 21888242871839275222246405745257275088548364400416034343698202246309280640254, + 21888242871839275222246405745257275088548364400416034343698203113181492027641, + 21888242871839275222246405745257275088548364400416034343698202701825689791054, + 21888242871839275222246405745257275088548364400416034343698203758923857159987, + 21888242871839275222246405745257275088548364400416034343698202470514602423836, + 21888242871839275222246405745257275088548364400416034343698202011607183517323, 1965457738438494, 1746647421581056, - 3577160197975628, + 21888242871839275222246405745257275088548364400416034343698203260136371891788, 928477914402777, 741604585621554, - 2994179683394087, - 2984304031863271, - 3161053374234985, - 3847024415906930, + 21888242871839275222246405745257275088548364400416034343698202677155857310247, + 21888242871839275222246405745257275088548364400416034343698202667280205779431, + 21888242871839275222246405745257275088548364400416034343698202844029548151145, + 21888242871839275222246405745257275088548364400416034343698203530000589823090, 156705211336370, - 4259505995681183, + 21888242871839275222246405745257275088548364400416034343698203942482169597343, 649374049670435, 2163264357918606, - 3402930655858700, + 21888242871839275222246405745257275088548364400416034343698203085906829774860, 1044375650747476, 1787555697027376, - 4395755612996889, + 21888242871839275222246405745257275088548364400416034343698204078731786913049, 461117201817072, - 2956629857020989, - 2432287175523682, - 3669899004424249, + 21888242871839275222246405745257275088548364400416034343698202639606030937149, + 21888242871839275222246405745257275088548364400416034343698202115263349439842, + 21888242871839275222246405745257275088548364400416034343698203352875178340409, 634690418821644, 1330205981798868, 1607572091610326, - 3417259368314959, + 21888242871839275222246405745257275088548364400416034343698203100235542231119, 123526012468957, - 2986315878972403, + 21888242871839275222246405745257275088548364400416034343698202669292052888563, 1694399620197815, 520698202660615, 1901708671993008, - 2619445863276475, - 2820075411660382, - 2822484826384934, + 21888242871839275222246405745257275088548364400416034343698202302422037192635, + 21888242871839275222246405745257275088548364400416034343698202503051585576542, + 21888242871839275222246405745257275088548364400416034343698202505461000301094, 710747653517831, 1468376664682999, - 2737374334642573, + 21888242871839275222246405745257275088548364400416034343698202420350508558733, 595788600571293, - 2699445151852906, - 3748069709483012, + 21888242871839275222246405745257275088548364400416034343698202382421325769066, + 21888242871839275222246405745257275088548364400416034343698203431045883399172, 673957756696044, - 2491482374509547, + 21888242871839275222246405745257275088548364400416034343698202174458548425707, 588256940951882, 1714402651019718, - 4421132250792154, - 2735946873564601, - 3584710047802918, + 21888242871839275222246405745257275088548364400416034343698204104108424708314, + 21888242871839275222246405745257275088548364400416034343698202418923047480761, + 21888242871839275222246405745257275088548364400416034343698203267686221719078, 1502042243446854, 1944118243404989, - 3150250141744196, - 2830446148331947, - 2799271129416308, + 21888242871839275222246405745257275088548364400416034343698202833226315660356, + 21888242871839275222246405745257275088548364400416034343698202513422322248107, + 21888242871839275222246405745257275088548364400416034343698202482247303332468, 2230252320486325, - 4058918080917140, + 21888242871839275222246405745257275088548364400416034343698203741894254833300, 484440564896120, - 3023177631621832, + 21888242871839275222246405745257275088548364400416034343698202706153805537992, 125741870326771, - 3334971906499597, - 2869251382889626, - 4345816097927799, + 21888242871839275222246405745257275088548364400416034343698203017948080415757, + 21888242871839275222246405745257275088548364400416034343698202552227556805786, + 21888242871839275222246405745257275088548364400416034343698204028792271843959, 1392995550970604, 1695890454206660, - 4469219609063474, + 21888242871839275222246405745257275088548364400416034343698204152195782979634, 295478576379436, - 4474041710210114, - 3137196960284076, + 21888242871839275222246405745257275088548364400416034343698204157017884126274, + 21888242871839275222246405745257275088548364400416034343698202820173134200236, 2099618306827237, 1880555939387898, 414003949775801, - 3207933305720326, + 21888242871839275222246405745257275088548364400416034343698202890909479636486, 1155312772982018, 458638025945803, - 2830105303173380, + 21888242871839275222246405745257275088548364400416034343698202513081477089540, 1445304097920330, 776491652322890, 362130019649655, - 3372375800557218, + 21888242871839275222246405745257275088548364400416034343698203055351974473378, 132818067684336, - 3065577535018757, - 3918753563068133, - 3704976205086577, + 21888242871839275222246405745257275088548364400416034343698202748553708934917, + 21888242871839275222246405745257275088548364400416034343698203601729736984293, + 21888242871839275222246405745257275088548364400416034343698203387952379002737, 1479141880755616, - 4192172803798166, - 2969488489799624, + 21888242871839275222246405745257275088548364400416034343698203875148977714326, + 21888242871839275222246405745257275088548364400416034343698202652464663715784, 832446832159142, 1594061183223184, 1971749374934416, 765373286736307, - 2986279449580824, - 2894950459776390, + 21888242871839275222246405745257275088548364400416034343698202669255623496984, + 21888242871839275222246405745257275088548364400416034343698202577926633692550, 811623379465305, - 4153281461279795, - 3557111604464169, + 21888242871839275222246405745257275088548364400416034343698203836257635195955, + 21888242871839275222246405745257275088548364400416034343698203240087778380329, 201647223357228, - 3125507670053200, - 4488012369095149, + 21888242871839275222246405745257275088548364400416034343698202808483843969360, + 21888242871839275222246405745257275088548364400416034343698204170988543011309, 467079295303344, - 3650532163652258, - 3856449908243004, - 3907117025892017, - 2814381537914887, + 21888242871839275222246405745257275088548364400416034343698203333508337568418, + 21888242871839275222246405745257275088548364400416034343698203539426082159164, + 21888242871839275222246405745257275088548364400416034343698203590093199808177, + 21888242871839275222246405745257275088548364400416034343698202497357711831047, 34695220358397, - 2846279153977978, - 2858896825891069, - 2904464614889395, - 3790913263210241, + 21888242871839275222246405745257275088548364400416034343698202529255327894138, + 21888242871839275222246405745257275088548364400416034343698202541872999807229, + 21888242871839275222246405745257275088548364400416034343698202587440788805555, + 21888242871839275222246405745257275088548364400416034343698203473889437126401, 901470486501377, - 3131927184782055, + 21888242871839275222246405745257275088548364400416034343698202814903358698215, 1656527560584020, - 3624758704923962, + 21888242871839275222246405745257275088548364400416034343698203307734878840122, 2097743408327451, 1588540491093624, 1167097566413269, 1051595936416019, 2084394060428561, - 4290111580378448, - 2679281875133157, + 21888242871839275222246405745257275088548364400416034343698203973087754294608, + 21888242871839275222246405745257275088548364400416034343698202362258049049317, 108627982983888, 606168825733609, - 3926007615873209, - 2371839070233670, - 2526926223820614, + 21888242871839275222246405745257275088548364400416034343698203608983789789369, + 21888242871839275222246405745257275088548364400416034343698202054815244149830, + 21888242871839275222246405745257275088548364400416034343698202209902397736774, 45908284360405, 1762435114863299, - 3537933271478060, - 4281903379629866, - 4319332694630455, + 21888242871839275222246405745257275088548364400416034343698203220909445394220, + 21888242871839275222246405745257275088548364400416034343698203964879553546026, + 21888242871839275222246405745257275088548364400416034343698204002308868546615, 368701952025028, 1618742438279825, - 3492897796042000, - 3328481459446917, - 4151688627065372, + 21888242871839275222246405745257275088548364400416034343698203175873969958160, + 21888242871839275222246405745257275088548364400416034343698203011457633363077, + 21888242871839275222246405745257275088548364400416034343698203834664800981532, 1580433046279352, 159216251714914, - 3274640097114299, - 2488606866214874, - 2870007536141043, - 2323444332475128, - 4259943883298610, + 21888242871839275222246405745257275088548364400416034343698202957616271030459, + 21888242871839275222246405745257275088548364400416034343698202171583040131034, + 21888242871839275222246405745257275088548364400416034343698202552983710057203, + 21888242871839275222246405745257275088548364400416034343698202006420506391288, + 21888242871839275222246405745257275088548364400416034343698203942920057214770, 354372746649813, - 3542426661505446, - 4363991277769008, - 3639258122532820, + 21888242871839275222246405745257275088548364400416034343698203225402835421606, + 21888242871839275222246405745257275088548364400416034343698204046967451685168, + 21888242871839275222246405745257275088548364400416034343698203322234296448980, 769000086875979, - 2417470559954029, - 2685684084955811, - 4498265787304247, - 3200274239658192, + 21888242871839275222246405745257275088548364400416034343698202100446733870189, + 21888242871839275222246405745257275088548364400416034343698202368660258871971, + 21888242871839275222246405745257275088548364400416034343698204181241961220407, + 21888242871839275222246405745257275088548364400416034343698202883250413574352, 2111141232324697, - 3271755617838347, - 3488402576598521, - 4484392404012032, - 4108059215210582, - 3294078519786211, - 3186500023974104, - 3369284203153374, + 21888242871839275222246405745257275088548364400416034343698202954731791754507, + 21888242871839275222246405745257275088548364400416034343698203171378750514681, + 21888242871839275222246405745257275088548364400416034343698204167368577928192, + 21888242871839275222246405745257275088548364400416034343698203791035389126742, + 21888242871839275222246405745257275088548364400416034343698202977054693702371, + 21888242871839275222246405745257275088548364400416034343698202869476197890264, + 21888242871839275222246405745257275088548364400416034343698203052260377069534, 266039945333751, 1099130880751979, 846271841969130, - 3637481647423180, - 2960341594716168, - 3568830433279538, - 4456336830639052, - 4222439980281751, - 4304759623159067, + 21888242871839275222246405745257275088548364400416034343698203320457821339340, + 21888242871839275222246405745257275088548364400416034343698202643317768632328, + 21888242871839275222246405745257275088548364400416034343698203251806607195698, + 21888242871839275222246405745257275088548364400416034343698204139313004555212, + 21888242871839275222246405745257275088548364400416034343698203905416154197911, + 21888242871839275222246405745257275088548364400416034343698203987735797075227, 860868476368394, 713413681923409, 2241797421150358, - 2352647446766800, + 21888242871839275222246405745257275088548364400416034343698202035623620682960, 199633666184127, - 2279251999524631, + 21888242871839275222246405745257275088548364400416034343698201962228173440791, 918165490364730, 554472065531467, - 3137495932710080, + 21888242871839275222246405745257275088548364400416034343698202820472106626240, 2049363868271192, 1651380129704732, - 4393936543496748, + 21888242871839275222246405745257275088548364400416034343698204076912717412908, 2062180169702169, - 2377335941695940, - 4153999874690634, + 21888242871839275222246405745257275088548364400416034343698202060312115612100, + 21888242871839275222246405745257275088548364400416034343698203836976048606794, 1527114352060985, 1512587741132407, 190936785101296, - 4467803567999652, - 3301825215703732, + 21888242871839275222246405745257275088548364400416034343698204150779741915812, + 21888242871839275222246405745257275088548364400416034343698202984801389619892, 244785943910745, 1335669891284981, 1381779211700329, - 3753165014086456, - 2799359044362307, - 3789614658780891, - 4087360652791058, - 2320579258544368, - 4155808988470229, - 3593726506544206, - 3529319808672061, + 21888242871839275222246405745257275088548364400416034343698203436141188002616, + 21888242871839275222246405745257275088548364400416034343698202482335218278467, + 21888242871839275222246405745257275088548364400416034343698203472590832697051, + 21888242871839275222246405745257275088548364400416034343698203770336826707218, + 21888242871839275222246405745257275088548364400416034343698202003555432460528, + 21888242871839275222246405745257275088548364400416034343698203838785162386389, + 21888242871839275222246405745257275088548364400416034343698203276702680460366, + 21888242871839275222246405745257275088548364400416034343698203212295982588221, 2060276938571388, 926671598261376, - 2781900473884667, + 21888242871839275222246405745257275088548364400416034343698202464876647800827, 1748743782127491, - 2399056656047522, + 21888242871839275222246405745257275088548364400416034343698202082032829963682, 567341734912063, - 2561189776278732, - 3203513561038875, + 21888242871839275222246405745257275088548364400416034343698202244165950194892, + 21888242871839275222246405745257275088548364400416034343698202886489734955035, 1043344317593685, 596966173878219, - 2892252715576691, - 3624234927541573, + 21888242871839275222246405745257275088548364400416034343698202575228889492851, + 21888242871839275222246405745257275088548364400416034343698203307211101457733, 1324522251465103, - 3725489615779824, - 2630579591761049, + 21888242871839275222246405745257275088548364400416034343698203408465789695984, + 21888242871839275222246405745257275088548364400416034343698202313555765677209, 1339785655333711, 1238011184933542, - 2319126455863157, - 4048762712880732, - 2674648574511047, + 21888242871839275222246405745257275088548364400416034343698202002102629779317, + 21888242871839275222246405745257275088548364400416034343698203731738886796892, + 21888242871839275222246405745257275088548364400416034343698202357624748427207, 45367124780583, - 3500733220698056, + 21888242871839275222246405745257275088548364400416034343698203183709394614216, 1101726989914519, - 4435325996616339, - 4365082885161367, + 21888242871839275222246405745257275088548364400416034343698204118302170532499, + 21888242871839275222246405745257275088548364400416034343698204048059059077527, 1357742291667993, 1838567102781966, 1393204374623139, 1537517878253157, - 2591431269336674, + 21888242871839275222246405745257275088548364400416034343698202274407443252834, 123806330584635, 1244708045870823, 598128201004464, 1208654139353272, - 4364968429234025, + 21888242871839275222246405745257275088548364400416034343698204047944603150185, 110907297476537, 1384171885065699, 1744874981279092, 193572134077927, - 2477602663002469, + 21888242871839275222246405745257275088548364400416034343698202160578836918629, 164989690385317, - 4322777883021548, + 21888242871839275222246405745257275088548364400416034343698204005754056937708, 939766324169748, - 3796622365200244, + 21888242871839275222246405745257275088548364400416034343698203479598539116404, 547527093028008, - 3320160888254581, - 3095462269973764, + 21888242871839275222246405745257275088548364400416034343698203003137062170741, + 21888242871839275222246405745257275088548364400416034343698202778438443889924, 637951643543941, 2031946766775057, 1266672643747851, 1006702147244892, - 3846291183247004, + 21888242871839275222246405745257275088548364400416034343698203529267357163164, 1814841374466834, 811178476719183, 577717906015975, - 3874143999267708, + 21888242871839275222246405745257275088548364400416034343698203557120173183868, 623247274304968, - 2718065627346921, - 3194554492316379, - 3074355543052000, - 3622527333250737, + 21888242871839275222246405745257275088548364400416034343698202401041801263081, + 21888242871839275222246405745257275088548364400416034343698202877530666232539, + 21888242871839275222246405745257275088548364400416034343698202757331716968160, + 21888242871839275222246405745257275088548364400416034343698203305503507166897, 1404230708160218, 870311723529385, - 3097630713801050, - 4091544285181567, + 21888242871839275222246405745257275088548364400416034343698202780606887717210, + 21888242871839275222246405745257275088548364400416034343698203774520459097727, 1262856964339342, 846956215960607, - 2522178526659647, + 21888242871839275222246405745257275088548364400416034343698202205154700575807, 96446288023060, 1636900634872373, 45869623615481, 1694405172969241, - 3796475270218539, + 21888242871839275222246405745257275088548364400416034343698203479451444134699, 1145153116051710, 1281938940347554, 171944012489390, 1935794560865937, 312309934571895, 346097390328189, - 4268787777514047, + 21888242871839275222246405745257275088548364400416034343698203951763951430207, 254665054596013, 535852790101079, 1090099252562790, - 2278121317560743, + 21888242871839275222246405745257275088548364400416034343698201961097491476903, 1477722777855556, 837177271389787, - 3386306531345530, - 4371052242810479, - 2421982197453242, - 4074316398138025, + 21888242871839275222246405745257275088548364400416034343698203069282705261690, + 21888242871839275222246405745257275088548364400416034343698204054028416726639, + 21888242871839275222246405745257275088548364400416034343698202104958371369402, + 21888242871839275222246405745257275088548364400416034343698203757292572054185, 1352511407792506, 943620888541008, - 3960686437461182, - 2327833941815642, + 21888242871839275222246405745257275088548364400416034343698203643662611377342, + 21888242871839275222246405745257275088548364400416034343698202010810115731802, 1485334619477909, - 2817547957285456, + 21888242871839275222246405745257275088548364400416034343698202500524131201616, 2069096408368542, - 2796924364147240, + 21888242871839275222246405745257275088548364400416034343698202479900538063400, 1273790309057557, - 2850714373484747, + 21888242871839275222246405745257275088548364400416034343698202533690547400907, 745335768830180, - 3334105879175848, + 21888242871839275222246405745257275088548364400416034343698203017082053092008, 735204546918623, - 3225621823007265, + 21888242871839275222246405745257275088548364400416034343698202908597996923425, 180080892476915, - 3909423384074496, + 21888242871839275222246405745257275088548364400416034343698203592399557990656, 1520228643032201, 880498772709767, 12574478839006, - 2742761681166990, + 21888242871839275222246405745257275088548364400416034343698202425737855083150, 710316238735454, 1883591469300072, 924013793306144, - 2660749204697066, + 21888242871839275222246405745257275088548364400416034343698202343725378613226, 1239177564448686, 622770906290015, - 3708355096503265, + 21888242871839275222246405745257275088548364400416034343698203391331270419425, 2248408270776086, - 3960273090491413, - 2329885205470854, - 3495762478253969, - 3741868272572403, + 21888242871839275222246405745257275088548364400416034343698203643249264407573, + 21888242871839275222246405745257275088548364400416034343698202012861379387014, + 21888242871839275222246405745257275088548364400416034343698203178738652170129, + 21888242871839275222246405745257275088548364400416034343698203424844446488563, 119624075640975, 2147858009927227, - 3655047628173754, - 4219091797361364, + 21888242871839275222246405745257275088548364400416034343698203338023802089914, + 21888242871839275222246405745257275088548364400416034343698203902067971277524, 174480221305835, - 3610384344546735, - 3520901768487925, + 21888242871839275222246405745257275088548364400416034343698203293360518462895, + 21888242871839275222246405745257275088548364400416034343698203203877942404085, 374486280522042, 1395171237631208, - 3449522781300625, - 3161250853586079, + 21888242871839275222246405745257275088548364400416034343698203132498955216785, + 21888242871839275222246405745257275088548364400416034343698202844227027502239, 32907038280270, - 3043746851848266, - 3898061388709326, - 3187732425862604, - 2835995390605083, - 2781158195920639, - 2696817193350607, + 21888242871839275222246405745257275088548364400416034343698202726723025764426, + 21888242871839275222246405745257275088548364400416034343698203581037562625486, + 21888242871839275222246405745257275088548364400416034343698202870708599778764, + 21888242871839275222246405745257275088548364400416034343698202518971564521243, + 21888242871839275222246405745257275088548364400416034343698202464134369836799, + 21888242871839275222246405745257275088548364400416034343698202379793367266767, 1395519485528870, 832962581198297, - 3673117339753828, - 2285251527349369, - 4478719982324908, - 3603419291570728, + 21888242871839275222246405745257275088548364400416034343698203356093513669988, + 21888242871839275222246405745257275088548364400416034343698201968227701265529, + 21888242871839275222246405745257275088548364400416034343698204161696156241068, + 21888242871839275222246405745257275088548364400416034343698203286395465486888, 594849581966283, 1504131912606514, - 4080113072940413, - 3938485119974431, - 2337341443097322, + 21888242871839275222246405745257275088548364400416034343698203763089246856573, + 21888242871839275222246405745257275088548364400416034343698203621461293890591, + 21888242871839275222246405745257275088548364400416034343698202020317617013482, 2225456437737688, 2077069960892191, - 2512082079811629, - 2438445453102862, - 4488605658981572, - 2253949924609105, + 21888242871839275222246405745257275088548364400416034343698202195058253727789, + 21888242871839275222246405745257275088548364400416034343698202121421627019022, + 21888242871839275222246405745257275088548364400416034343698204171581832897732, + 21888242871839275222246405745257275088548364400416034343698201936926098525265, 191105476603054, 1985283197292495, 1380084387749379, 1212796616355919, - 3259867779502137, + 21888242871839275222246405745257275088548364400416034343698202942843953418297, 707323385046439, - 2758102663041798, + 21888242871839275222246405745257275088548364400416034343698202441078836957958, 1128218484532253, 730035351674554, 197117292830116, - 3574192603163925, - 3919626369053771, - 3091448674163451, - 3223484792059387, - 3981678322523876, - 3012916771620632, - 2735099531933008, + 21888242871839275222246405745257275088548364400416034343698203257168777080085, + 21888242871839275222246405745257275088548364400416034343698203602602542969931, + 21888242871839275222246405745257275088548364400416034343698202774424848079611, + 21888242871839275222246405745257275088548364400416034343698202906460965975547, + 21888242871839275222246405745257275088548364400416034343698203664654496440036, + 21888242871839275222246405745257275088548364400416034343698202695892945536792, + 21888242871839275222246405745257275088548364400416034343698202418075705849168, 1444556913089699, 2226931077543394, - 3801154320983936, - 2897760811514477, + 21888242871839275222246405745257275088548364400416034343698203484130494900096, + 21888242871839275222246405745257275088548364400416034343698202580736985430637, 971494580392401, - 3488995313306635, + 21888242871839275222246405745257275088548364400416034343698203171971487222795, 878874545034190, 1593656949520005, 635372723053433, - 2985475134241130, + 21888242871839275222246405745257275088548364400416034343698202668451308157290, 1157494012654262, - 3633633706265613, + 21888242871839275222246405745257275088548364400416034343698203316609880181773, 410266389962181, 859864647027209, - 3712755396507146, + 21888242871839275222246405745257275088548364400416034343698203395731570423306, 1664903056977090, - 4292909477393298, - 2470951383498700, + 21888242871839275222246405745257275088548364400416034343698203975885651309458, + 21888242871839275222246405745257275088548364400416034343698202153927557414860, 1988763998166593, - 3001270959969941, + 21888242871839275222246405745257275088548364400416034343698202684247133886101, 1066015751766441, 1605748599789085, - 4465014636554016, + 21888242871839275222246405745257275088548364400416034343698204147990810470176, 210991901763213, - 3389406812027609, + 21888242871839275222246405745257275088548364400416034343698203072382985943769, 71364912548447, - 4355120328614507, - 4460497585003143, + 21888242871839275222246405745257275088548364400416034343698204038096502530667, + 21888242871839275222246405745257275088548364400416034343698204143473758919303, 184945515836065, - 3866678389194791, - 2819734539512598, - 4295168679268096, + 21888242871839275222246405745257275088548364400416034343698203549654563110951, + 21888242871839275222246405745257275088548364400416034343698202502710713428758, + 21888242871839275222246405745257275088548364400416034343698203978144853184256, 798932221626337, 1717039054360638, - 2516106094419915, + 21888242871839275222246405745257275088548364400416034343698202199082268336075, 6125428299467, 101808538744476, - 2609104307631445, - 3132755455332289, - 3495465097876413, - 4187564917279328, + 21888242871839275222246405745257275088548364400416034343698202292080481547605, + 21888242871839275222246405745257275088548364400416034343698202815731629248449, + 21888242871839275222246405745257275088548364400416034343698203178441271792573, + 21888242871839275222246405745257275088548364400416034343698203870541091195488, 1272274293415766, - 2988723035437601, - 3379598900873623, + 21888242871839275222246405745257275088548364400416034343698202671699209353761, + 21888242871839275222246405745257275088548364400416034343698203062575074789783, 749766573479232, - 3675889536426859, - 3982293004175082, + 21888242871839275222246405745257275088548364400416034343698203358865710343019, + 21888242871839275222246405745257275088548364400416034343698203665269178091242, 1305614348866321, 592390345768342, - 2689764034046937, + 21888242871839275222246405745257275088548364400416034343698202372740207963097, 2214371840663653, 211034808856613, - 2568752708708525, - 3449632155566591, - 2968869721714757, + 21888242871839275222246405745257275088548364400416034343698202251728882624685, + 21888242871839275222246405745257275088548364400416034343698203132608329482751, + 21888242871839275222246405745257275088548364400416034343698202651845895630917, 993440874070854, 474372964624260, 751084130922612, - 3807026715824410, - 3486710092337875, + 21888242871839275222246405745257275088548364400416034343698203490002889740570, + 21888242871839275222246405745257275088548364400416034343698203169686266254035, 1905690037024261, - 2495294995727411, + 21888242871839275222246405745257275088548364400416034343698202178271169643571, 68538745593739, 904847125948959, 1269957030937765, - 3863329729645163, + 21888242871839275222246405745257275088548364400416034343698203546305903561323, 51936401127692, 1838462492801338, 1889484381894216, - 4314495870200443, + 21888242871839275222246405745257275088548364400416034343698203997472044116603, 818908515800185, - 2730042852971554, + 21888242871839275222246405745257275088548364400416034343698202413019026887714, 1766367392669957, - 4284718113731319, - 2971862054337715, - 4012242323436513, + 21888242871839275222246405745257275088548364400416034343698203967694287647479, + 21888242871839275222246405745257275088548364400416034343698202654838228253875, + 21888242871839275222246405745257275088548364400416034343698203695218497352673, 836228995060801, - 4404597159243957, + 21888242871839275222246405745257275088548364400416034343698204087573333160117, 474299317054827, 352010092316440, 1730371177530875, 1892589831101650, 2204863275828087, - 3181798066140302, + 21888242871839275222246405745257275088548364400416034343698202864774240056462, 55269345214601, 886943509670651, - 2443469804212260, + 21888242871839275222246405745257275088548364400416034343698202126445978128420, 640745938135704, 792482922315283, - 3051910315267862, + 21888242871839275222246405745257275088548364400416034343698202734886489184022, 2195792880849575, 831773246856013, 1904469046398648, 1507676987221315, 1827995250441887, - 3225883433643575, - 3297204780405442, + 21888242871839275222246405745257275088548364400416034343698202908859607559735, + 21888242871839275222246405745257275088548364400416034343698202980180954321602, 1825130549395963, - 2409709468009561, - 3424109351905960, - 2450659865756872, + 21888242871839275222246405745257275088548364400416034343698202092685641925721, + 21888242871839275222246405745257275088548364400416034343698203107085525822120, + 21888242871839275222246405745257275088548364400416034343698202133636039673032, 1511324460782141, - 2626349323056662, + 21888242871839275222246405745257275088548364400416034343698202309325496972822, 1348443137313505, - 2533590474440773, + 21888242871839275222246405745257275088548364400416034343698202216566648356933, 2246425929246740, - 3990043521718743, - 3445242836430565, + 21888242871839275222246405745257275088548364400416034343698203673019695634903, + 21888242871839275222246405745257275088548364400416034343698203128219010346725, 171276201020438, 1093917089480945, 2191868341826324, 1712725616735764, - 3020194616700785, - 2707178271221810, + 21888242871839275222246405745257275088548364400416034343698202703170790616945, + 21888242871839275222246405745257275088548364400416034343698202390154445137970, 631684647942298, 370833938632085, - 3143296473710251, - 2697338818571337, - 3164784248023741, + 21888242871839275222246405745257275088548364400416034343698202826272647626411, + 21888242871839275222246405745257275088548364400416034343698202380314992487497, + 21888242871839275222246405745257275088548364400416034343698202847760421939901, 729833931841717, - 3272094521502230, - 2412781300748738, - 3656929495972039, - 4269555306734054, + 21888242871839275222246405745257275088548364400416034343698202955070695418390, + 21888242871839275222246405745257275088548364400416034343698202095757474664898, + 21888242871839275222246405745257275088548364400416034343698203339905669888199, + 21888242871839275222246405745257275088548364400416034343698203952531480650214, 1633595452502560, - 3354703805470914, + 21888242871839275222246405745257275088548364400416034343698203037679979387074, 524874539849396, 1747487774938544, 1989305081571078, - 2645781628813911, - 3551342531939263, + 21888242871839275222246405745257275088548364400416034343698202328757802730071, + 21888242871839275222246405745257275088548364400416034343698203234318705855423, 993454981758780, 1403315661364863, 24943976981983, 1131929328141068, 255999101323570, - 2984748832099097, - 4009941777298061, + 21888242871839275222246405745257275088548364400416034343698202667725006015257, + 21888242871839275222246405745257275088548364400416034343698203692917951214221, 1215960293548384, 420840364029554, 1252957322133890, 746101674640835, 1274760804029746, - 3159565985216071, + 21888242871839275222246405745257275088548364400416034343698202842542159132231, 497453269967079, - 3945702251361370, + 21888242871839275222246405745257275088548364400416034343698203628678425277530, 804946391613413, 1498967970020067, - 3891098457347167, + 21888242871839275222246405745257275088548364400416034343698203574074631263327, 2161710336527553, 2014239838863618, 83794910322601, 244417475991057, - 2454686221350439, + 21888242871839275222246405745257275088548364400416034343698202137662395266599, 444347958209602, 2161107199506200, 1445630990048979, @@ -30091,57 +30091,57 @@ pub global CRP: [Polynomial; L] = [ 864636893935573, 1141433336869378, 438121044176436, - 3757696820765641, + 21888242871839275222246405745257275088548364400416034343698203440672994681801, 934214254888627, - 2533266620883317, + 21888242871839275222246405745257275088548364400416034343698202216242794799477, 1256260319727490, - 3528765609507358, - 3326896560461773, + 21888242871839275222246405745257275088548364400416034343698203211741783423518, + 21888242871839275222246405745257275088548364400416034343698203009872734377933, 803567668631601, - 2980227823860189, - 4256069665076095, + 21888242871839275222246405745257275088548364400416034343698202663203997776349, + 21888242871839275222246405745257275088548364400416034343698203939045838992255, 2251419951327480, 27031477472424, - 3759857415208965, - 2260292191886206, - 3049627599177549, + 21888242871839275222246405745257275088548364400416034343698203442833589125125, + 21888242871839275222246405745257275088548364400416034343698201943268365802366, + 21888242871839275222246405745257275088548364400416034343698202732603773093709, 1666791916852083, - 3630912546969392, + 21888242871839275222246405745257275088548364400416034343698203313888720885552, 1929295186757231, - 4291382276301289, - 2335957567760839, + 21888242871839275222246405745257275088548364400416034343698203974358450217449, + 21888242871839275222246405745257275088548364400416034343698202018933741676999, 792774432071228, 1093837160942384, 1505453851102444, - 2773569056839140, + 21888242871839275222246405745257275088548364400416034343698202456545230755300, 115588889966652, 2222270475084029, - 3607018707920996, + 21888242871839275222246405745257275088548364400416034343698203289994881837156, 1975210810166796, - 2624181640633460, - 2929801330943341, + 21888242871839275222246405745257275088548364400416034343698202307157814549620, + 21888242871839275222246405745257275088548364400416034343698202612777504859501, 752620420489121, - 4501333957276321, + 21888242871839275222246405745257275088548364400416034343698204184310131192481, 1061561759067928, - 4052268096306862, - 3527179145926896, - 2964325817452735, - 4249030089262132, + 21888242871839275222246405745257275088548364400416034343698203735244270223022, + 21888242871839275222246405745257275088548364400416034343698203210155319843056, + 21888242871839275222246405745257275088548364400416034343698202647301991368895, + 21888242871839275222246405745257275088548364400416034343698203932006263178292, 431692522942256, 1941420092838402, 1822164456397117, - 3150741010104275, + 21888242871839275222246405745257275088548364400416034343698202833717184020435, 609646684003610, 2133708013338598, - 3462969295153532, + 21888242871839275222246405745257275088548364400416034343698203145945469069692, 855457796117676, - 3103482552692192, - 2359498346113258, - 2753423580337889, - 3482572740923176, - 3066126171923868, + 21888242871839275222246405745257275088548364400416034343698202786458726608352, + 21888242871839275222246405745257275088548364400416034343698202042474520029418, + 21888242871839275222246405745257275088548364400416034343698202436399754254049, + 21888242871839275222246405745257275088548364400416034343698203165548914839336, + 21888242871839275222246405745257275088548364400416034343698202749102345840028, 309555076651365, - 2456489955344205, + 21888242871839275222246405745257275088548364400416034343698202139466129260365, 322657177361116, 362025449429682, 1616241974301824, @@ -30149,29 +30149,29 @@ pub global CRP: [Polynomial; L] = [ 1267100363559401, 1152723034185692, 251677238420547, - 4278623782445672, + 21888242871839275222246405745257275088548364400416034343698203961599956361832, 2187238838492815, 1039535811327236, 2040432678721760, - 2964270064093428, - 4125838599074469, - 2799696907925515, - 3851767857303039, - 2316145555007468, - 3316414208551854, + 21888242871839275222246405745257275088548364400416034343698202647246238009588, + 21888242871839275222246405745257275088548364400416034343698203808814772990629, + 21888242871839275222246405745257275088548364400416034343698202482673081841675, + 21888242871839275222246405745257275088548364400416034343698203534744031219199, + 21888242871839275222246405745257275088548364400416034343698201999121728923628, + 21888242871839275222246405745257275088548364400416034343698202999390382468014, 1079677027423454, - 3002417114211943, - 2677964977165154, - 4249006849343030, + 21888242871839275222246405745257275088548364400416034343698202685393288128103, + 21888242871839275222246405745257275088548364400416034343698202360941151081314, + 21888242871839275222246405745257275088548364400416034343698203931983023259190, 1027175084266996, - 3767263470582812, - 3898465881226304, - 4408634952697357, - 2598987632337853, - 4503190367897328, - 2270199814018986, + 21888242871839275222246405745257275088548364400416034343698203450239644498972, + 21888242871839275222246405745257275088548364400416034343698203581442055142464, + 21888242871839275222246405745257275088548364400416034343698204091611126613517, + 21888242871839275222246405745257275088548364400416034343698202281963806254013, + 21888242871839275222246405745257275088548364400416034343698204186166541813488, + 21888242871839275222246405745257275088548364400416034343698201953175987935146, 838373370560019, - 3440713090026471, + 21888242871839275222246405745257275088548364400416034343698203123689263942631, 1655048477991918, 1577876985225135, 1290210656335592, @@ -30180,630 +30180,630 @@ pub global CRP: [Polynomial; L] = [ 2073354054845760, 1367502617106560, 1740583170220540, - 2986870578313895, - 3202703003205981, - 4365328928014303, + 21888242871839275222246405745257275088548364400416034343698202669846752230055, + 21888242871839275222246405745257275088548364400416034343698202885679177122141, + 21888242871839275222246405745257275088548364400416034343698204048305101930463, 1119917255544712, 2064821352331175, 1007872880791366, 1436037854920243, 500493754338829, 352965558481836, - 3153009194033185, - 3027570014476892, + 21888242871839275222246405745257275088548364400416034343698202835985367949345, + 21888242871839275222246405745257275088548364400416034343698202710546188393052, 1695681728089323, - 3078403983894962, + 21888242871839275222246405745257275088548364400416034343698202761380157811122, 330127821804882, 254932877810048, - 2679661209938879, - 3869348726746956, - 3503239700041057, - 3889004172413085, + 21888242871839275222246405745257275088548364400416034343698202362637383855039, + 21888242871839275222246405745257275088548364400416034343698203552324900663116, + 21888242871839275222246405745257275088548364400416034343698203186215873957217, + 21888242871839275222246405745257275088548364400416034343698203571980346329245, 744304281595572, - 2806152126051974, - 2418583681121477, + 21888242871839275222246405745257275088548364400416034343698202489128299968134, + 21888242871839275222246405745257275088548364400416034343698202101559855037637, 1913225112967377, - 3351291983671780, - 3983582223673020, - 3912953816879766, + 21888242871839275222246405745257275088548364400416034343698203034268157587940, + 21888242871839275222246405745257275088548364400416034343698203666558397589180, + 21888242871839275222246405745257275088548364400416034343698203595929990795926, 664570005431984, 1958920743684295, 1584004928863294, - 3428813736940615, + 21888242871839275222246405745257275088548364400416034343698203111789910856775, 628527639227719, 417933985491292, 371286632743373, 361956657113671, - 3273470165257180, + 21888242871839275222246405745257275088548364400416034343698202956446339173340, 1643314001700631, - 2818134582704023, - 4208440599739843, - 3000649275249538, + 21888242871839275222246405745257275088548364400416034343698202501110756620183, + 21888242871839275222246405745257275088548364400416034343698203891416773656003, + 21888242871839275222246405745257275088548364400416034343698202683625449165698, 1956261259987615, - 3641899209836243, - 4317084512005656, - 3471285232220068, + 21888242871839275222246405745257275088548364400416034343698203324875383752403, + 21888242871839275222246405745257275088548364400416034343698204000060685921816, + 21888242871839275222246405745257275088548364400416034343698203154261406136228, 2087337876225869, - 3666172947302452, - 2545362853354081, + 21888242871839275222246405745257275088548364400416034343698203349149121218612, + 21888242871839275222246405745257275088548364400416034343698202228339027270241, 494609360573721, - 3831037801335202, - 3265888392818192, + 21888242871839275222246405745257275088548364400416034343698203514013975251362, + 21888242871839275222246405745257275088548364400416034343698202948864566734352, 1367167322332864, - 3229909478795231, - 2575000551596985, + 21888242871839275222246405745257275088548364400416034343698202912885652711391, + 21888242871839275222246405745257275088548364400416034343698202257976725513145, 1357468525728785, - 2724442777318865, + 21888242871839275222246405745257275088548364400416034343698202407418951235025, 1760185306550374, - 4391385378405181, - 2584576387285417, + 21888242871839275222246405745257275088548364400416034343698204074361552321341, + 21888242871839275222246405745257275088548364400416034343698202267552561201577, 1903015948388732, - 2571608280103104, - 2524913815957627, + 21888242871839275222246405745257275088548364400416034343698202254584454019264, + 21888242871839275222246405745257275088548364400416034343698202207889989873787, 607957869184027, 969894974782760, - 4216107451766077, + 21888242871839275222246405745257275088548364400416034343698203899083625682237, 164791218184615, - 2823156450812879, + 21888242871839275222246405745257275088548364400416034343698202506132624729039, 547365474591869, - 4484705652748031, + 21888242871839275222246405745257275088548364400416034343698204167681826664191, 34194879344390, - 4040171064459041, + 21888242871839275222246405745257275088548364400416034343698203723147238375201, 1904131744009491, - 4143207253745777, - 3961829976632887, - 3938260342420036, - 2651158781153585, - 2393590136330932, - 3899780858966365, - 3513697164037915, - 4265437373983425, + 21888242871839275222246405745257275088548364400416034343698203826183427661937, + 21888242871839275222246405745257275088548364400416034343698203644806150549047, + 21888242871839275222246405745257275088548364400416034343698203621236516336196, + 21888242871839275222246405745257275088548364400416034343698202334134955069745, + 21888242871839275222246405745257275088548364400416034343698202076566310247092, + 21888242871839275222246405745257275088548364400416034343698203582757032882525, + 21888242871839275222246405745257275088548364400416034343698203196673337954075, + 21888242871839275222246405745257275088548364400416034343698203948413547899585, 1041606449345639, - 3647657492681359, + 21888242871839275222246405745257275088548364400416034343698203330633666597519, 1964751782340317, 1355471364248209, 2065280500066040, - 4467402946515874, + 21888242871839275222246405745257275088548364400416034343698204150379120432034, 1251687828613625, - 3303641087204162, + 21888242871839275222246405745257275088548364400416034343698202986617261120322, 639030329993982, 444759287838511, 926089807135353, - 2350518522743189, - 3843754057047697, + 21888242871839275222246405745257275088548364400416034343698202033494696659349, + 21888242871839275222246405745257275088548364400416034343698203526730230963857, 1148945438901438, 667742652948182, 234742787935797, - 3306687773885120, + 21888242871839275222246405745257275088548364400416034343698202989663947801280, 631297070373138, - 3639002368249228, + 21888242871839275222246405745257275088548364400416034343698203321978542165388, 218866846615324, 1299101251850467, 286853144581322, - 2781670926642928, - 3345302578388703, + 21888242871839275222246405745257275088548364400416034343698202464647100559088, + 21888242871839275222246405745257275088548364400416034343698203028278752304863, 2250789407425538, 383307325209950, 2140568262278302, - 2766513451780127, + 21888242871839275222246405745257275088548364400416034343698202449489625696287, 2054856329904278, - 2616968104218851, + 21888242871839275222246405745257275088548364400416034343698202299944278135011, 234911505837234, - 2816527966306093, + 21888242871839275222246405745257275088548364400416034343698202499504140222253, 2232475147142473, - 4071694990937909, - 3289142906388942, - 3625684633736167, + 21888242871839275222246405745257275088548364400416034343698203754671164854069, + 21888242871839275222246405745257275088548364400416034343698202972119080305102, + 21888242871839275222246405745257275088548364400416034343698203308660807652327, 157120401855685, - 2837035614827780, + 21888242871839275222246405745257275088548364400416034343698202520011788743940, 367278773461191, 1526236640395913, 1845091732990089, - 3719683995962950, + 21888242871839275222246405745257275088548364400416034343698203402660169879110, 76321614197850, 139294390897487, - 2811817854257345, - 3979938213834151, - 3916617747999880, + 21888242871839275222246405745257275088548364400416034343698202494794028173505, + 21888242871839275222246405745257275088548364400416034343698203662914387750311, + 21888242871839275222246405745257275088548364400416034343698203599593921916040, 1490160304822258, - 2996436646747935, - 4130786760174887, + 21888242871839275222246405745257275088548364400416034343698202679412820664095, + 21888242871839275222246405745257275088548364400416034343698203813762934091047, 2233544159070742, - 2802243321453344, - 3849710061115570, - 2787686244430457, + 21888242871839275222246405745257275088548364400416034343698202485219495369504, + 21888242871839275222246405745257275088548364400416034343698203532686235031730, + 21888242871839275222246405745257275088548364400416034343698202470662418346617, 1213460361923078, 1622492844230612, 539515493266889, 918532036515797, 2199175314759593, - 3472722723277686, - 3832194598140690, - 2378751535395476, + 21888242871839275222246405745257275088548364400416034343698203155698897193846, + 21888242871839275222246405745257275088548364400416034343698203515170772056850, + 21888242871839275222246405745257275088548364400416034343698202061727709311636, 1351473617209182, - 2379782299021834, + 21888242871839275222246405745257275088548364400416034343698202062758472937994, 1822469158467618, 1036395773504341, 444399351188039, 1114786643106316, - 2253538371640384, + 21888242871839275222246405745257275088548364400416034343698201936514545556544, 1813711854713597, - 3179815891505952, - 4176020644159141, + 21888242871839275222246405745257275088548364400416034343698202862792065422112, + 21888242871839275222246405745257275088548364400416034343698203858996818075301, 54087391554146, 1662026206655764, - 2437869264825270, + 21888242871839275222246405745257275088548364400416034343698202120845438741430, 1089587817609048, - 3271447656222374, - 4002162283204639, + 21888242871839275222246405745257275088548364400416034343698202954423830138534, + 21888242871839275222246405745257275088548364400416034343698203685138457120799, 2053538001706436, 22026910125706, - 4152763969605912, + 21888242871839275222246405745257275088548364400416034343698203835740143522072, 1108103401795875, - 3316352139949330, - 2935814328067145, - 3374432521719593, + 21888242871839275222246405745257275088548364400416034343698202999328313865490, + 21888242871839275222246405745257275088548364400416034343698202618790501983305, + 21888242871839275222246405745257275088548364400416034343698203057408695635753, 1808976545842248, - 2756649893831062, - 3841561996810459, - 3361345909782862, + 21888242871839275222246405745257275088548364400416034343698202439626067747222, + 21888242871839275222246405745257275088548364400416034343698203524538170726619, + 21888242871839275222246405745257275088548364400416034343698203044322083699022, 186937706595637, - 3748986356535357, + 21888242871839275222246405745257275088548364400416034343698203431962530451517, 1086915616855656, 441654652981950, - 3271348494436775, + 21888242871839275222246405745257275088548364400416034343698202954324668352935, 806242455001596, 1365588557975681, 1240550508769432, - 4055340677946930, + 21888242871839275222246405745257275088548364400416034343698203738316851863090, 1629883705442607, 814491340481228, - 3247212604574449, + 21888242871839275222246405745257275088548364400416034343698202930188778490609, 424972601351399, - 2774075594248686, - 2394362519332485, + 21888242871839275222246405745257275088548364400416034343698202457051768164846, + 21888242871839275222246405745257275088548364400416034343698202077338693248645, 1693774285682555, 847322394777152, 2209839051298934, - 4200289418553148, + 21888242871839275222246405745257275088548364400416034343698203883265592469308, 36400789737452, 1130969381473714, - 2711950337429385, + 21888242871839275222246405745257275088548364400416034343698202394926511345545, 383257478729445, 34216118073459, 207676987208794, - 2289032616627962, - 2352656759737049, - 4192614746039313, + 21888242871839275222246405745257275088548364400416034343698201972008790544122, + 21888242871839275222246405745257275088548364400416034343698202035632933653209, + 21888242871839275222246405745257275088548364400416034343698203875590919955473, 1836468781260145, - 3237833987957442, - 2407842065300146, - 2930396736151841, + 21888242871839275222246405745257275088548364400416034343698202920810161873602, + 21888242871839275222246405745257275088548364400416034343698202090818239216306, + 21888242871839275222246405745257275088548364400416034343698202613372910068001, 756331885296781, - 3275441724119897, - 3018977752413625, - 4051370717652348, + 21888242871839275222246405745257275088548364400416034343698202958417898036057, + 21888242871839275222246405745257275088548364400416034343698202701953926329785, + 21888242871839275222246405745257275088548364400416034343698203734346891568508, 1579905720370547, 1428185870021080, - 3280790129430423, - 3075594910243074, + 21888242871839275222246405745257275088548364400416034343698202963766303346583, + 21888242871839275222246405745257275088548364400416034343698202758571084159234, 842961376435311, 726310620306741, 882469432680813, 1777548803404445, - 4157007688157638, + 21888242871839275222246405745257275088548364400416034343698203839983862073798, 365145932138201, - 2588681240772568, - 3277110501734199, - 4190882641652054, - 2802708590614333, + 21888242871839275222246405745257275088548364400416034343698202271657414688728, + 21888242871839275222246405745257275088548364400416034343698202960086675650359, + 21888242871839275222246405745257275088548364400416034343698203873858815568214, + 21888242871839275222246405745257275088548364400416034343698202485684764530493, 1633565286377155, - 2514650422794116, + 21888242871839275222246405745257275088548364400416034343698202197626596710276, 1932095729023606, - 2561744937880018, + 21888242871839275222246405745257275088548364400416034343698202244721111796178, 1102319385264974, 1232375696349373, 2237666227007899, 1561422387241816, - 4351478006222184, - 2524568736370708, + 21888242871839275222246405745257275088548364400416034343698204034454180138344, + 21888242871839275222246405745257275088548364400416034343698202207544910286868, 2083596946536149, - 4308891999913925, + 21888242871839275222246405745257275088548364400416034343698203991868173830085, 368329146965781, - 3926696553239853, - 4017895581730875, - 3259864960606660, + 21888242871839275222246405745257275088548364400416034343698203609672727156013, + 21888242871839275222246405745257275088548364400416034343698203700871755647035, + 21888242871839275222246405745257275088548364400416034343698202942841134522820, 1255241816999410, - 3454079388221749, - 3842814886357299, + 21888242871839275222246405745257275088548364400416034343698203137055562137909, + 21888242871839275222246405745257275088548364400416034343698203525791060273459, 1613947285844490, 775634756997106, - 3778673132537997, + 21888242871839275222246405745257275088548364400416034343698203461649306454157, 872495789796723, - 4489703899695698, - 4480890081462325, + 21888242871839275222246405745257275088548364400416034343698204172680073611858, + 21888242871839275222246405745257275088548364400416034343698204163866255378485, 1332584789572201, - 4036052900982108, - 2740477205553610, + 21888242871839275222246405745257275088548364400416034343698203719029074898268, + 21888242871839275222246405745257275088548364400416034343698202423453379469770, 778713294198578, - 3203376251558451, - 4120704953396658, - 2863593250104113, + 21888242871839275222246405745257275088548364400416034343698202886352425474611, + 21888242871839275222246405745257275088548364400416034343698203803681127312818, + 21888242871839275222246405745257275088548364400416034343698202546569424020273, 692687503771350, - 3875673819501116, + 21888242871839275222246405745257275088548364400416034343698203558649993417276, 1688340535834158, - 3645262600516689, - 3267447906403406, - 4065765515400153, - 4307071102866013, + 21888242871839275222246405745257275088548364400416034343698203328238774432849, + 21888242871839275222246405745257275088548364400416034343698202950424080319566, + 21888242871839275222246405745257275088548364400416034343698203748741689316313, + 21888242871839275222246405745257275088548364400416034343698203990047276782173, 1800928910501390, 1688223875228832, - 3096411903121185, - 3378487767481314, - 4195966915752493, + 21888242871839275222246405745257275088548364400416034343698202779388077037345, + 21888242871839275222246405745257275088548364400416034343698203061463941397474, + 21888242871839275222246405745257275088548364400416034343698203878943089668653, 255002460412381, - 4127723668580235, - 3544645527150507, - 3576766117688508, - 2677187639917474, - 2797078075040710, - 2317372632037949, - 3085125050985921, - 2282706277556186, - 3538724976812124, - 4264288461352898, - 2693906062224808, - 3218431963071911, - 3880371354551355, - 4084644102726065, + 21888242871839275222246405745257275088548364400416034343698203810699842496395, + 21888242871839275222246405745257275088548364400416034343698203227621701066667, + 21888242871839275222246405745257275088548364400416034343698203259742291604668, + 21888242871839275222246405745257275088548364400416034343698202360163813833634, + 21888242871839275222246405745257275088548364400416034343698202480054248956870, + 21888242871839275222246405745257275088548364400416034343698202000348805954109, + 21888242871839275222246405745257275088548364400416034343698202768101224902081, + 21888242871839275222246405745257275088548364400416034343698201965682451472346, + 21888242871839275222246405745257275088548364400416034343698203221701150728284, + 21888242871839275222246405745257275088548364400416034343698203947264635269058, + 21888242871839275222246405745257275088548364400416034343698202376882236140968, + 21888242871839275222246405745257275088548364400416034343698202901408136988071, + 21888242871839275222246405745257275088548364400416034343698203563347528467515, + 21888242871839275222246405745257275088548364400416034343698203767620276642225, 1549082033693029, - 3156495091189551, - 3063426738411540, + 21888242871839275222246405745257275088548364400416034343698202839471265105711, + 21888242871839275222246405745257275088548364400416034343698202746402912327700, 1448477482172572, 536817486305925, - 3086839027917291, + 21888242871839275222246405745257275088548364400416034343698202769815201833451, 1645807368604733, 864890873001438, 566324227946839, - 3863358972581744, + 21888242871839275222246405745257275088548364400416034343698203546335146497904, 1524151434332697, 1983056544767635, - 3468726964166601, - 3443691523853212, + 21888242871839275222246405745257275088548364400416034343698203151703138082761, + 21888242871839275222246405745257275088548364400416034343698203126667697769372, 2112277751787973, 1291906224065256, 1612158911825477, - 4173217564726774, + 21888242871839275222246405745257275088548364400416034343698203856193738642934, 1804383461369570, - 2892407783308656, - 3905489508971336, - 3537467136056792, - 3880456984500449, - 4124137603804370, + 21888242871839275222246405745257275088548364400416034343698202575383957224816, + 21888242871839275222246405745257275088548364400416034343698203588465682887496, + 21888242871839275222246405745257275088548364400416034343698203220443309972952, + 21888242871839275222246405745257275088548364400416034343698203563433158416609, + 21888242871839275222246405745257275088548364400416034343698203807113777720530, 1660884908390041, - 2812109235063329, - 3042144137703208, - 3394454326113687, + 21888242871839275222246405745257275088548364400416034343698202495085408979489, + 21888242871839275222246405745257275088548364400416034343698202725120311619368, + 21888242871839275222246405745257275088548364400416034343698203077430500029847, 1974723622187360, - 3649203897846250, + 21888242871839275222246405745257275088548364400416034343698203332180071762410, 2131253794642329, 71990453526960, 688937944636373, - 3308578206144945, + 21888242871839275222246405745257275088548364400416034343698202991554380061105, 685316942082456, - 3075708784723219, - 3991249165080566, - 3804329360523466, + 21888242871839275222246405745257275088548364400416034343698202758684958639379, + 21888242871839275222246405745257275088548364400416034343698203674225338996726, + 21888242871839275222246405745257275088548364400416034343698203487305534439626, 2248999791900950, 753650253706643, - 4285455989914158, - 2533494605010936, + 21888242871839275222246405745257275088548364400416034343698203968432163830318, + 21888242871839275222246405745257275088548364400416034343698202216470778927096, 732630943965, 971559207658830, 2183810958973193, - 3900753977883699, + 21888242871839275222246405745257275088548364400416034343698203583730151799859, 1246455858031940, - 4013450999521496, + 21888242871839275222246405745257275088548364400416034343698203696427173437656, 1301414793314988, - 2874521046203324, - 4141421213003824, + 21888242871839275222246405745257275088548364400416034343698202557497220119484, + 21888242871839275222246405745257275088548364400416034343698203824397386919984, 1245328523927716, 1206315575471751, - 3049541025208647, + 21888242871839275222246405745257275088548364400416034343698202732517199124807, 1704699826235132, - 2856839791561292, + 21888242871839275222246405745257275088548364400416034343698202539815965477452, 1262142996971653, - 2341903753104870, - 3451628465385775, - 3993328298317992, - 3983719177486293, - 3656970990209651, + 21888242871839275222246405745257275088548364400416034343698202024879927021030, + 21888242871839275222246405745257275088548364400416034343698203134604639301935, + 21888242871839275222246405745257275088548364400416034343698203676304472234152, + 21888242871839275222246405745257275088548364400416034343698203666695351402453, + 21888242871839275222246405745257275088548364400416034343698203339947164125811, 2121313746392936, 471599587119686, - 4031681549831083, + 21888242871839275222246405745257275088548364400416034343698203714657723747243, 130811088894726, - 3025925043526252, + 21888242871839275222246405745257275088548364400416034343698202708901217442412, 1464504369406317, 2240669713277923, 2130388565865646, - 3978485150789844, - 2704545667326818, - 2299450892122207, - 3334261099400017, - 3551264865072802, - 2838461897083596, - 3200730824283650, + 21888242871839275222246405745257275088548364400416034343698203661461324706004, + 21888242871839275222246405745257275088548364400416034343698202387521841242978, + 21888242871839275222246405745257275088548364400416034343698201982427066038367, + 21888242871839275222246405745257275088548364400416034343698203017237273316177, + 21888242871839275222246405745257275088548364400416034343698203234241038988962, + 21888242871839275222246405745257275088548364400416034343698202521438070999756, + 21888242871839275222246405745257275088548364400416034343698202883706998199810, 1714631899015675, - 3944420187040066, + 21888242871839275222246405745257275088548364400416034343698203627396360956226, 2217664469836465, 870230969646845, 1337186334206456, - 4219212577602481, - 2568346193148634, + 21888242871839275222246405745257275088548364400416034343698203902188751518641, + 21888242871839275222246405745257275088548364400416034343698202251322367064794, 309165011799601, 1106662555151000, 590812619875168, 552160365112505, - 4362347231803291, + 21888242871839275222246405745257275088548364400416034343698204045323405719451, 1253457840196011, - 2416510006317886, - 3704309276632005, + 21888242871839275222246405745257275088548364400416034343698202099486180234046, + 21888242871839275222246405745257275088548364400416034343698203387285450548165, 567492274755740, 1247563920310803, 2232573614433350, - 2540170264082957, + 21888242871839275222246405745257275088548364400416034343698202223146437999117, 1714778409718111, 356144781214483, - 3121152569854224, - 2967873883700926, + 21888242871839275222246405745257275088548364400416034343698202804128743770384, + 21888242871839275222246405745257275088548364400416034343698202650850057617086, 1992871487781888, 979938802467433, 1699404517715312, - 2989900856036224, + 21888242871839275222246405745257275088548364400416034343698202672877029952384, 1041278892388108, - 3277289887829450, + 21888242871839275222246405745257275088548364400416034343698202960266061745610, 2096697901643223, 1628004106497085, - 2609054277051453, + 21888242871839275222246405745257275088548364400416034343698202292030450967613, 376974476116591, 349174721869361, - 3011617210160591, + 21888242871839275222246405745257275088548364400416034343698202694593384076751, 47424827775953, 1712113848192550, - 2310167513328132, - 3411818466921567, - 4498656122914033, + 21888242871839275222246405745257275088548364400416034343698201993143687244292, + 21888242871839275222246405745257275088548364400416034343698203094794640837727, + 21888242871839275222246405745257275088548364400416034343698204181632296830193, 1259291139343402, 364127623447853, - 4127200359457397, - 2945894393370573, + 21888242871839275222246405745257275088548364400416034343698203810176533373557, + 21888242871839275222246405745257275088548364400416034343698202628870567286733, 1519581157502784, 471958955735875, 863827015446781, 152779667553510, - 4042791967744413, - 2873630942555327, + 21888242871839275222246405745257275088548364400416034343698203725768141660573, + 21888242871839275222246405745257275088548364400416034343698202556607116471487, 1456271837346939, 1790706869220997, - 3832538585872935, + 21888242871839275222246405745257275088548364400416034343698203515514759789095, 796481881905993, - 4484774580803771, + 21888242871839275222246405745257275088548364400416034343698204167750754719931, 663812365218309, - 2785130569138368, + 21888242871839275222246405745257275088548364400416034343698202468106743054528, 1443049985554576, 449087840197663, 1739006372906918, - 3008847083546197, + 21888242871839275222246405745257275088548364400416034343698202691823257462357, 501866396095190, 197950866840943, 57798293303436, - 2509785039115400, - 4226237094338659, + 21888242871839275222246405745257275088548364400416034343698202192761213031560, + 21888242871839275222246405745257275088548364400416034343698203909213268254819, 476739526237617, 2084454855787228, - 2988391577913312, + 21888242871839275222246405745257275088548364400416034343698202671367751829472, 1227855969059171, - 3984380080414040, + 21888242871839275222246405745257275088548364400416034343698203667356254330200, 1582208160769185, - 2520989391555735, - 3307221879779497, + 21888242871839275222246405745257275088548364400416034343698202203965565471895, + 21888242871839275222246405745257275088548364400416034343698202990198053695657, 560610737541831, - 2838277482758616, - 3580688158942872, - 4123664559461121, - 4189024129860644, - 3814127891115801, + 21888242871839275222246405745257275088548364400416034343698202521253656674776, + 21888242871839275222246405745257275088548364400416034343698203263664332859032, + 21888242871839275222246405745257275088548364400416034343698203806640733377281, + 21888242871839275222246405745257275088548364400416034343698203872000303776804, + 21888242871839275222246405745257275088548364400416034343698203497104065031961, 671951454725606, - 3108208328179971, + 21888242871839275222246405745257275088548364400416034343698202791184502096131, 26943627871123, 377155084034422, - 4076415314496179, - 4059069788560779, + 21888242871839275222246405745257275088548364400416034343698203759391488412339, + 21888242871839275222246405745257275088548364400416034343698203742045962476939, 1240363749384884, - 3665672851569683, + 21888242871839275222246405745257275088548364400416034343698203348649025485843, 1862192437561356, - 4149544678410058, + 21888242871839275222246405745257275088548364400416034343698203832520852326218, 1866808919432835, 1644569279490782, - 3773013970511136, + 21888242871839275222246405745257275088548364400416034343698203455990144427296, 1557826277666863, 292148380834781, - 3208154026725350, - 2476923894798379, + 21888242871839275222246405745257275088548364400416034343698202891130200641510, + 21888242871839275222246405745257275088548364400416034343698202159900068714539, 331354070505171, 415957892432579, 864907209147027, - 3718054419408253, + 21888242871839275222246405745257275088548364400416034343698203401030593324413, 400193854212929, 1215795096388949, - 2479383519319955, - 4296745598783094, + 21888242871839275222246405745257275088548364400416034343698202162359693236115, + 21888242871839275222246405745257275088548364400416034343698203979721772699254, 1218181009236129, - 3127689416952242, - 4025159020357678, - 2810397208926772, + 21888242871839275222246405745257275088548364400416034343698202810665590868402, + 21888242871839275222246405745257275088548364400416034343698203708135194273838, + 21888242871839275222246405745257275088548364400416034343698202493373382842932, 2063498775067476, 546641417581927, - 2723953161964412, + 21888242871839275222246405745257275088548364400416034343698202406929335880572, 2163152247880623, 2192577088145332, 995443083521006, - 3692193322098828, - 2960075428044413, + 21888242871839275222246405745257275088548364400416034343698203375169496014988, + 21888242871839275222246405745257275088548364400416034343698202643051601960573, 1277571156235603, - 3858271362835942, - 2676024868866747, - 4437599367826255, - 4192329242519894, - 2635750309567439, - 3083467505205697, - 2863431177783258, + 21888242871839275222246405745257275088548364400416034343698203541247536752102, + 21888242871839275222246405745257275088548364400416034343698202359001042782907, + 21888242871839275222246405745257275088548364400416034343698204120575541742415, + 21888242871839275222246405745257275088548364400416034343698203875305416436054, + 21888242871839275222246405745257275088548364400416034343698202318726483483599, + 21888242871839275222246405745257275088548364400416034343698202766443679121857, + 21888242871839275222246405745257275088548364400416034343698202546407351699418, 142238998722422, 1476823323095126, 1714087581599917, 2231381758969554, - 2362626039903458, - 3108509647021190, - 3801065681012486, - 2616882437675465, + 21888242871839275222246405745257275088548364400416034343698202045602213819618, + 21888242871839275222246405745257275088548364400416034343698202791485820937350, + 21888242871839275222246405745257275088548364400416034343698203484041854928646, + 21888242871839275222246405745257275088548364400416034343698202299858611591625, 2168011332942222, 1522746089868458, - 3529200827916917, + 21888242871839275222246405745257275088548364400416034343698203212177001833077, 950518979533361, - 2935021445565301, - 4212046908671745, + 21888242871839275222246405745257275088548364400416034343698202617997619481461, + 21888242871839275222246405745257275088548364400416034343698203895023082587905, 2081095142304150, 372275505779624, - 3132397034140498, - 3994826952146633, - 3004638663425299, - 2939584477001113, + 21888242871839275222246405745257275088548364400416034343698202815373208056658, + 21888242871839275222246405745257275088548364400416034343698203677803126062793, + 21888242871839275222246405745257275088548364400416034343698202687614837341459, + 21888242871839275222246405745257275088548364400416034343698202622560650917273, 159417581782673, - 3269501703143642, - 3083205762006389, - 3287377891443871, - 3626484579986784, + 21888242871839275222246405745257275088548364400416034343698202952477877059802, + 21888242871839275222246405745257275088548364400416034343698202766181935922549, + 21888242871839275222246405745257275088548364400416034343698202970354065360031, + 21888242871839275222246405745257275088548364400416034343698203309460753902944, 1788000353838400, - 4458295202740711, + 21888242871839275222246405745257275088548364400416034343698204141271376656871, 1450052389075883, 249427737914892, 2142789502873449, 2031253686125782, 963052027571325, - 3677257518921626, + 21888242871839275222246405745257275088548364400416034343698203360233692837786, 1682789283944700, 1426888746934129, 808330921348301, - 4384064010896994, - 3298177240122329, + 21888242871839275222246405745257275088548364400416034343698204067040184813154, + 21888242871839275222246405745257275088548364400416034343698202981153414038489, 922868767668305, - 4114857040127739, + 21888242871839275222246405745257275088548364400416034343698203797833214043899, 1585346512771111, 754355240214293, - 4096126469561132, - 2752201473085647, - 4013140488047573, + 21888242871839275222246405745257275088548364400416034343698203779102643477292, + 21888242871839275222246405745257275088548364400416034343698202435177647001807, + 21888242871839275222246405745257275088548364400416034343698203696116661963733, 1053901358938743, - 2946837621392206, + 21888242871839275222246405745257275088548364400416034343698202629813795308366, 110524111492630, 96062628453919, - 4027853206321947, + 21888242871839275222246405745257275088548364400416034343698203710829380238107, 162410780986840, 2050238040735807, 671264569577113, 904552031048557, 254509678183957, 24877072896699, - 3946947469845630, + 21888242871839275222246405745257275088548364400416034343698203629923643761790, 843025256587564, - 2483121323980270, - 4009108494812317, - 3634847513432352, - 2697343826633517, - 4227236783610706, - 4369559123523732, + 21888242871839275222246405745257275088548364400416034343698202166097497896430, + 21888242871839275222246405745257275088548364400416034343698203692084668728477, + 21888242871839275222246405745257275088548364400416034343698203317823687348512, + 21888242871839275222246405745257275088548364400416034343698202380320000549677, + 21888242871839275222246405745257275088548364400416034343698203910212957526866, + 21888242871839275222246405745257275088548364400416034343698204052535297439892, 1863406463161587, - 2286094362331032, + 21888242871839275222246405745257275088548364400416034343698201969070536247192, 1841290236925188, 541022652136853, - 3788424833136809, - 3566691234460558, + 21888242871839275222246405745257275088548364400416034343698203471401007052969, + 21888242871839275222246405745257275088548364400416034343698203249667408376718, 650978877979275, - 2869491839618857, + 21888242871839275222246405745257275088548364400416034343698202552468013535017, 947507315460634, - 3858753968370418, - 3761373890057672, - 4198901157264802, + 21888242871839275222246405745257275088548364400416034343698203541730142286578, + 21888242871839275222246405745257275088548364400416034343698203444350063973832, + 21888242871839275222246405745257275088548364400416034343698203881877331180962, 1624208846558964, 107724499343587, 1818166726301060, - 3927744512390090, + 21888242871839275222246405745257275088548364400416034343698203610720686306250, 1279700595694790, 1493013212797861, - 3746083513827419, + 21888242871839275222246405745257275088548364400416034343698203429059687743579, 2228402123224690, 1142785597398310, - 2697157706499305, - 3418229479297689, - 2385859103745990, + 21888242871839275222246405745257275088548364400416034343698202380133880415465, + 21888242871839275222246405745257275088548364400416034343698203101205653213849, + 21888242871839275222246405745257275088548364400416034343698202068835277662150, 1953353104655949, - 4084984987761382, + 21888242871839275222246405745257275088548364400416034343698203767961161677542, 359364023190785, - 2511472670739447, - 2461634685449971, - 3779514531273503, + 21888242871839275222246405745257275088548364400416034343698202194448844655607, + 21888242871839275222246405745257275088548364400416034343698202144610859366131, + 21888242871839275222246405745257275088548364400416034343698203462490705189663, 1288516444615281, 1974734318206155, 2193208267199190, 43353906155994, 519042381863845, - 4136954491807400, + 21888242871839275222246405745257275088548364400416034343698203819930665723560, 2159262165156906, - 2494244731772284, - 3802343558460229, - 3287375871406911, + 21888242871839275222246405745257275088548364400416034343698202177220905688444, + 21888242871839275222246405745257275088548364400416034343698203485319732376389, + 21888242871839275222246405745257275088548364400416034343698202970352045323071, 8984928784442, 117388064844905, 2238968274470231, - 4164474932071913, + 21888242871839275222246405745257275088548364400416034343698203847451105988073, 1392568655452210, 1495153421783368, - 3899911099875440, + 21888242871839275222246405745257275088548364400416034343698203582887273791600, 326881451204939, - 3902459586372231, - 4342216103589971, + 21888242871839275222246405745257275088548364400416034343698203585435760288391, + 21888242871839275222246405745257275088548364400416034343698204025192277506131, 1879978463530151, - 2513071032218235, - 3369217912435311, - 3282147240763986, + 21888242871839275222246405745257275088548364400416034343698202196047206134395, + 21888242871839275222246405745257275088548364400416034343698203052194086351471, + 21888242871839275222246405745257275088548364400416034343698202965123414680146, 118235266641302, - 2516683717892328, - 2646458644588099, + 21888242871839275222246405745257275088548364400416034343698202199659891808488, + 21888242871839275222246405745257275088548364400416034343698202329434818504259, 2199306326732590, 2096144618113694, - 2999236119192092, + 21888242871839275222246405745257275088548364400416034343698202682212293108252, 651566974164065, - 3949721540746009, - 3443338963768473, + 21888242871839275222246405745257275088548364400416034343698203632697714662169, + 21888242871839275222246405745257275088548364400416034343698203126315137684633, 58030515096515, - 3710654253952911, - 3284220028215929, - 2694003276620467, + 21888242871839275222246405745257275088548364400416034343698203393630427869071, + 21888242871839275222246405745257275088548364400416034343698202967196202132089, + 21888242871839275222246405745257275088548364400416034343698202376979450536627, 826191806554919, - 2570557959073610, - 2461213078235446, - 2907966636247625, + 21888242871839275222246405745257275088548364400416034343698202253534132989770, + 21888242871839275222246405745257275088548364400416034343698202144189252151606, + 21888242871839275222246405745257275088548364400416034343698202590942810163785, 315726235210734, 1256652539297543, - 3802675701106789, - 3213149781401546, + 21888242871839275222246405745257275088548364400416034343698203485651875022949, + 21888242871839275222246405745257275088548364400416034343698202896125955317706, 1457949755935021, 2134212640703257, 1709110187592860, 2152478174432754, - 4168833081109741, - 3044122103358666, - 3126541044224685, + 21888242871839275222246405745257275088548364400416034343698203851809255025901, + 21888242871839275222246405745257275088548364400416034343698202727098277274826, + 21888242871839275222246405745257275088548364400416034343698202809517218140845, 2860659200705, 1792608464175065, 1371793001498483, @@ -30811,230 +30811,230 @@ pub global CRP: [Polynomial; L] = [ 76455755764912, 384397715908058, 1292592183095488, - 2541892690244026, - 2339014140069422, - 4224300912053567, - 3712997019183618, - 3620861808117005, - 2649030143301493, + 21888242871839275222246405745257275088548364400416034343698202224868864160186, + 21888242871839275222246405745257275088548364400416034343698202021990313985582, + 21888242871839275222246405745257275088548364400416034343698203907277085969727, + 21888242871839275222246405745257275088548364400416034343698203395973193099778, + 21888242871839275222246405745257275088548364400416034343698203303837982033165, + 21888242871839275222246405745257275088548364400416034343698202332006317217653, 1404569392714576, - 3710335455626054, + 21888242871839275222246405745257275088548364400416034343698203393311629542214, 447011806530636, - 3732028666807773, - 4498388650190014, - 3863523505918861, + 21888242871839275222246405745257275088548364400416034343698203415004840723933, + 21888242871839275222246405745257275088548364400416034343698204181364824106174, + 21888242871839275222246405745257275088548364400416034343698203546499679835021, 1211437390905193, 277366420428551, - 3266834088740657, + 21888242871839275222246405745257275088548364400416034343698202949810262656817, 1977115427159688, - 4302333993259818, + 21888242871839275222246405745257275088548364400416034343698203985310167175978, 1424410876059175, - 2595036317373173, - 2619676852656311, + 21888242871839275222246405745257275088548364400416034343698202278012491289333, + 21888242871839275222246405745257275088548364400416034343698202302653026572471, 1192073102456992, 1583888430341854, - 2892773480786458, + 21888242871839275222246405745257275088548364400416034343698202575749654702618, 1313684123937654, 1920606701828736, 1775725361369534, 2109721413381960, - 3118164552938774, + 21888242871839275222246405745257275088548364400416034343698202801140726854934, 1154807034630261, 873484082147873, 1813460935054436, - 2840873618982713, - 2614222615125597, - 2542903291130227, + 21888242871839275222246405745257275088548364400416034343698202523849792898873, + 21888242871839275222246405745257275088548364400416034343698202297198789041757, + 21888242871839275222246405745257275088548364400416034343698202225879465046387, 985766349917813, - 2358176687569954, - 2863001065964990, + 21888242871839275222246405745257275088548364400416034343698202041152861486114, + 21888242871839275222246405745257275088548364400416034343698202545977239881150, 2094125460260526, 2166540009540561, 1308034112055580, 372565728119686, - 3491907035002128, + 21888242871839275222246405745257275088548364400416034343698203174883208918288, 622328244695589, - 3502768851785379, - 2494680744686399, - 2610743182379959, - 2942096637684420, + 21888242871839275222246405745257275088548364400416034343698203185745025701539, + 21888242871839275222246405745257275088548364400416034343698202177656918602559, + 21888242871839275222246405745257275088548364400416034343698202293719356296119, + 21888242871839275222246405745257275088548364400416034343698202625072811600580, 2147101202404709, 270119504664132, - 3557324527411938, - 4222309020261664, + 21888242871839275222246405745257275088548364400416034343698203240300701328098, + 21888242871839275222246405745257275088548364400416034343698203905285194177824, 820378262037038, 1265744374507631, - 4348108003972652, + 21888242871839275222246405745257275088548364400416034343698204031084177888812, 1994971002160128, - 4448477008058485, + 21888242871839275222246405745257275088548364400416034343698204131453181974645, 549835969054880, - 3404512477286149, + 21888242871839275222246405745257275088548364400416034343698203087488651202309, 1130610192005980, - 3908708012332784, - 4367879465180018, - 2419418379252895, - 3259656385266724, + 21888242871839275222246405745257275088548364400416034343698203591684186248944, + 21888242871839275222246405745257275088548364400416034343698204050855639096178, + 21888242871839275222246405745257275088548364400416034343698202102394553169055, + 21888242871839275222246405745257275088548364400416034343698202942632559182884, 1572832659610550, 2179457660568213, - 3345276630548121, + 21888242871839275222246405745257275088548364400416034343698203028252804464281, 261879451740914, 664446683436498, 1595606750673843, 143243884664264, - 2672966859042026, + 21888242871839275222246405745257275088548364400416034343698202355943032958186, 834640468199838, 2161753208196766, 1647664170965178, - 2506057269485363, - 3715343457719352, + 21888242871839275222246405745257275088548364400416034343698202189033443401523, + 21888242871839275222246405745257275088548364400416034343698203398319631635512, 1814127655072542, - 2991070267902195, + 21888242871839275222246405745257275088548364400416034343698202674046441818355, 1613534600209529, - 2487752030843999, + 21888242871839275222246405745257275088548364400416034343698202170728204760159, 670158004262849, 493152748891429, 723279033776945, - 4422199918427272, - 2656255501578467, - 2425568907999351, + 21888242871839275222246405745257275088548364400416034343698204105176092343432, + 21888242871839275222246405745257275088548364400416034343698202339231675494627, + 21888242871839275222246405745257275088548364400416034343698202108545081915511, 777498011284103, 607606929037645, 1259394147288272, - 3531932337858829, + 21888242871839275222246405745257275088548364400416034343698203214908511774989, 637543607638340, 1855830316653802, 1072874975260181, 871124761388827, - 4128761493445356, - 4093810524114977, - 4077551147630113, + 21888242871839275222246405745257275088548364400416034343698203811737667361516, + 21888242871839275222246405745257275088548364400416034343698203776786698031137, + 21888242871839275222246405745257275088548364400416034343698203760527321546273, 1724955997952906, 1318380421798893, - 2443109416587372, + 21888242871839275222246405745257275088548364400416034343698202126085590503532, 1149288567310426, - 2510396250632220, - 2278395263793782, - 4234284940833724, + 21888242871839275222246405745257275088548364400416034343698202193372424548380, + 21888242871839275222246405745257275088548364400416034343698201961371437709942, + 21888242871839275222246405745257275088548364400416034343698203917261114749884, 1941354522330911, - 3843063943427556, + 21888242871839275222246405745257275088548364400416034343698203526040117343716, 751584965888162, - 2487328388615137, - 3018104213016273, - 3242768033097569, + 21888242871839275222246405745257275088548364400416034343698202170304562531297, + 21888242871839275222246405745257275088548364400416034343698202701080386932433, + 21888242871839275222246405745257275088548364400416034343698202925744207013729, 926474173030829, 1814171488011051, - 4077197589387181, - 4240183659682281, - 3493885237291687, - 4084534806218612, - 4198133058685578, + 21888242871839275222246405745257275088548364400416034343698203760173763303341, + 21888242871839275222246405745257275088548364400416034343698203923159833598441, + 21888242871839275222246405745257275088548364400416034343698203176861411207847, + 21888242871839275222246405745257275088548364400416034343698203767510980134772, + 21888242871839275222246405745257275088548364400416034343698203881109232601738, 1973132749521583, - 3264056689121327, + 21888242871839275222246405745257275088548364400416034343698202947032863037487, 1754774968246811, - 4440669574860391, - 4102610355047066, - 2343075087766897, + 21888242871839275222246405745257275088548364400416034343698204123645748776551, + 21888242871839275222246405745257275088548364400416034343698203785586528963226, + 21888242871839275222246405745257275088548364400416034343698202026051261683057, 1608422688970256, 1070257026702160, 1578666468914501, - 2284381884537327, + 21888242871839275222246405745257275088548364400416034343698201967358058453487, 968722131695753, 1397007403068534, 1320873521609444, - 3759648668228814, - 2408475919734723, - 3051713903070760, + 21888242871839275222246405745257275088548364400416034343698203442624842144974, + 21888242871839275222246405745257275088548364400416034343698202091452093650883, + 21888242871839275222246405745257275088548364400416034343698202734690076986920, 1838539452231726, 290352698054006, 1695635198444066, 69037134028508, - 3192458903378961, - 2871426494241512, - 3271712506002797, + 21888242871839275222246405745257275088548364400416034343698202875435077295121, + 21888242871839275222246405745257275088548364400416034343698202554402668157672, + 21888242871839275222246405745257275088548364400416034343698202954688679918957, 2052338030829670, - 4255179679092550, - 3138922931830228, - 4404528350239897, + 21888242871839275222246405745257275088548364400416034343698203938155853008710, + 21888242871839275222246405745257275088548364400416034343698202821899105746388, + 21888242871839275222246405745257275088548364400416034343698204087504524156057, 2016285990001563, 918935064962820, 150826569029570, - 3239912052681973, + 21888242871839275222246405745257275088548364400416034343698202922888226598133, 1131422948593098, 1908351045954778, - 4355398075407015, - 3481219810671278, - 2376587610197943, - 4424342000922819, + 21888242871839275222246405745257275088548364400416034343698204038374249323175, + 21888242871839275222246405745257275088548364400416034343698203164195984587438, + 21888242871839275222246405745257275088548364400416034343698202059563784114103, + 21888242871839275222246405745257275088548364400416034343698204107318174838979, 844284635947910, 2062644824178908, - 2398727822389681, - 3206688488367664, - 3595949982828439, - 4197555324722645, - 3739982639492675, - 3529255996443307, + 21888242871839275222246405745257275088548364400416034343698202081703996305841, + 21888242871839275222246405745257275088548364400416034343698202889664662283824, + 21888242871839275222246405745257275088548364400416034343698203278926156744599, + 21888242871839275222246405745257275088548364400416034343698203880531498638805, + 21888242871839275222246405745257275088548364400416034343698203422958813408835, + 21888242871839275222246405745257275088548364400416034343698203212232170359467, 80744215914110, 1401665699720186, - 2716288244987246, - 3723788759843392, - 3954376892971484, + 21888242871839275222246405745257275088548364400416034343698202399264418903406, + 21888242871839275222246405745257275088548364400416034343698203406764933759552, + 21888242871839275222246405745257275088548364400416034343698203637353066887644, 153909943855307, 700417415790309, - 3189726772682866, - 2629702441274062, - 2299978681683614, - 3502515879876608, + 21888242871839275222246405745257275088548364400416034343698202872702946599026, + 21888242871839275222246405745257275088548364400416034343698202312678615190222, + 21888242871839275222246405745257275088548364400416034343698201982954855599774, + 21888242871839275222246405745257275088548364400416034343698203185492053792768, 1122595526283428, 213347857212515, 809496222040377, 1967563868346711, - 3993712085535376, - 4026457000293656, - 3306241310432091, - 3844457012087089, + 21888242871839275222246405745257275088548364400416034343698203676688259451536, + 21888242871839275222246405745257275088548364400416034343698203709433174209816, + 21888242871839275222246405745257275088548364400416034343698202989217484348251, + 21888242871839275222246405745257275088548364400416034343698203527433186003249, 1155050192693326, - 4255753536363516, + 21888242871839275222246405745257275088548364400416034343698203938729710279676, 1426633870876115, - 4242751783301149, - 4025446143892976, + 21888242871839275222246405745257275088548364400416034343698203925727957217309, + 21888242871839275222246405745257275088548364400416034343698203708422317809136, 1484966756090820, - 4436252183055995, - 3368924121629563, + 21888242871839275222246405745257275088548364400416034343698204119228356972155, + 21888242871839275222246405745257275088548364400416034343698203051900295545723, 2058847930167233, 975990494004865, - 2718867382963893, - 3933647238933555, - 3963123982875664, + 21888242871839275222246405745257275088548364400416034343698202401843556880053, + 21888242871839275222246405745257275088548364400416034343698203616623412849715, + 21888242871839275222246405745257275088548364400416034343698203646100156791824, 1283473508203362, - 4205866634945710, - 4014675390291551, + 21888242871839275222246405745257275088548364400416034343698203888842808861870, + 21888242871839275222246405745257275088548364400416034343698203697651564207711, 1986841385896259, - 4179337012490013, + 21888242871839275222246405745257275088548364400416034343698203862313186406173, 1939985490837593, - 4345639144912571, + 21888242871839275222246405745257275088548364400416034343698204028615318828731, 602775572998479, - 2942460712133274, - 2697637741509629, - 2269242909120067, + 21888242871839275222246405745257275088548364400416034343698202625436886049434, + 21888242871839275222246405745257275088548364400416034343698202380613915425789, + 21888242871839275222246405745257275088548364400416034343698201952219083036227, 2002860260815866, 1436560670642300, - 3313437657577786, + 21888242871839275222246405745257275088548364400416034343698202996413831493946, 1400692059426909, - 3266848608560039, + 21888242871839275222246405745257275088548364400416034343698202949824782476199, 388529364474501, - 3359039101311385, - 3972043388485526, + 21888242871839275222246405745257275088548364400416034343698203042015275227545, + 21888242871839275222246405745257275088548364400416034343698203655019562401686, 230021045444667, - 2979429141240379, - 2907995660458985, + 21888242871839275222246405745257275088548364400416034343698202662405315156539, + 21888242871839275222246405745257275088548364400416034343698202590971834375145, 293947042944229, 335466952998309, 2095948336938249, 2091836835957026, - 3880117846922311, - 3310996019751120, + 21888242871839275222246405745257275088548364400416034343698203563094020838471, + 21888242871839275222246405745257275088548364400416034343698202993972193667280, 488884138535899, - 2899019745702726, + 21888242871839275222246405745257275088548364400416034343698202581995919618886, 339171417455362, 929117727736671, 863291320170824, @@ -31043,206 +31043,206 @@ pub global CRP: [Polynomial; L] = [ 1581295922111104, 212426890972307, 709675961362409, - 2542971774780841, + 21888242871839275222246405745257275088548364400416034343698202225947948697001, 790984520347363, 259506392960058, - 3196516728542153, - 3702404571414379, + 21888242871839275222246405745257275088548364400416034343698202879492902458313, + 21888242871839275222246405745257275088548364400416034343698203385380745330539, 342620580276652, 966707364763276, 345406465672135, - 2839173550115038, + 21888242871839275222246405745257275088548364400416034343698202522149724031198, 1046701951809016, - 4392551874141902, + 21888242871839275222246405745257275088548364400416034343698204075528048058062, 1867381414602911, 698713708173631, - 2956880300575790, + 21888242871839275222246405745257275088548364400416034343698202639856474491950, 461980010149, - 3412793320944447, - 4271505446834402, + 21888242871839275222246405745257275088548364400416034343698203095769494860607, + 21888242871839275222246405745257275088548364400416034343698203954481620750562, 563173422193530, - 2564576740866241, - 2982991506783055, + 21888242871839275222246405745257275088548364400416034343698202247552914782401, + 21888242871839275222246405745257275088548364400416034343698202665967680699215, 1056599914324327, 2009447159201993, - 3280601264349858, - 3133532075495225, - 2685085170267990, + 21888242871839275222246405745257275088548364400416034343698202963577438266018, + 21888242871839275222246405745257275088548364400416034343698202816508249411385, + 21888242871839275222246405745257275088548364400416034343698202368061344184150, 1112639989615481, - 3402099870527439, - 2806051673762681, - 3899662356010590, + 21888242871839275222246405745257275088548364400416034343698203085076044443599, + 21888242871839275222246405745257275088548364400416034343698202489027847678841, + 21888242871839275222246405745257275088548364400416034343698203582638529926750, 409256932917763, 825962748132320, 1843472966045787, - 4184850094799648, - 2508508279903321, + 21888242871839275222246405745257275088548364400416034343698203867826268715808, + 21888242871839275222246405745257275088548364400416034343698202191484453819481, 1271361435228344, 181897672296472, - 3046183349212981, - 4279722950731925, + 21888242871839275222246405745257275088548364400416034343698202729159523129141, + 21888242871839275222246405745257275088548364400416034343698203962699124648085, 798090712049434, 1784475284621754, - 3113377949452945, + 21888242871839275222246405745257275088548364400416034343698202796354123369105, 996394088742322, - 3169654177750403, + 21888242871839275222246405745257275088548364400416034343698202852630351666563, 1176748302451592, 1051629151406289, 49057462340775, - 3288189008198610, - 2326678675061711, + 21888242871839275222246405745257275088548364400416034343698202971165182114770, + 21888242871839275222246405745257275088548364400416034343698202009654848977871, 1573338252295738, 1422929651087501, - 3673584707390385, + 21888242871839275222246405745257275088548364400416034343698203356560881306545, 1889615430295988, 1099311472605696, 1681582612854555, - 2932884711072048, - 4318399102466042, - 3396230049625419, - 4088814048241870, + 21888242871839275222246405745257275088548364400416034343698202615860884988208, + 21888242871839275222246405745257275088548364400416034343698204001375276382202, + 21888242871839275222246405745257275088548364400416034343698203079206223541579, + 21888242871839275222246405745257275088548364400416034343698203771790222158030, 1440052838333, - 3688840960612946, - 3632996555854374, - 3412159944451690, - 3973637884962908, + 21888242871839275222246405745257275088548364400416034343698203371817134529106, + 21888242871839275222246405745257275088548364400416034343698203315972729770534, + 21888242871839275222246405745257275088548364400416034343698203095136118367850, + 21888242871839275222246405745257275088548364400416034343698203656614058879068, 1627782758878474, - 2412467247893808, - 4338547161845488, + 21888242871839275222246405745257275088548364400416034343698202095443421809968, + 21888242871839275222246405745257275088548364400416034343698204021523335761648, 361802648915231, - 3118272333598714, + 21888242871839275222246405745257275088548364400416034343698202801248507514874, 469091754484869, 556275140539037, 967360526353278, - 3838197103520792, + 21888242871839275222246405745257275088548364400416034343698203521173277436952, 2120898263685774, 2137375236536432, 2193937228977593, - 4387934319034090, - 3804963739480349, + 21888242871839275222246405745257275088548364400416034343698204070910492950250, + 21888242871839275222246405745257275088548364400416034343698203487939913396509, 20867162065675, - 2684760942105871, - 2913632748067458, - 3754272670423110, + 21888242871839275222246405745257275088548364400416034343698202367737116022031, + 21888242871839275222246405745257275088548364400416034343698202596608921983618, + 21888242871839275222246405745257275088548364400416034343698203437248844339270, 2234203899248345, - 3123469164421808, - 2890383368894831, + 21888242871839275222246405745257275088548364400416034343698202806445338337968, + 21888242871839275222246405745257275088548364400416034343698202573359542810991, 1880774868678785, 779892042913634, 1241140892879285, - 3459301492931725, - 2319403524803161, + 21888242871839275222246405745257275088548364400416034343698203142277666847885, + 21888242871839275222246405745257275088548364400416034343698202002379698719321, 493497554730099, 1228338756605008, - 3899036865304460, - 2499724064165290, + 21888242871839275222246405745257275088548364400416034343698203582013039220620, + 21888242871839275222246405745257275088548364400416034343698202182700238081450, 1916005670964420, 375773411162700, 1693630515009270, 923013540418939, 927720555396043, - 3474140670517742, - 2279309605083376, - 3785371752764539, + 21888242871839275222246405745257275088548364400416034343698203157116844433902, + 21888242871839275222246405745257275088548364400416034343698201962285778999536, + 21888242871839275222246405745257275088548364400416034343698203468347926680699, 1643988389445710, 2168908754559332, - 2639495641506650, + 21888242871839275222246405745257275088548364400416034343698202322471815422810, 1449775284410367, 464214183422510, 1713953154789810, 1110573802773847, - 3857894475772816, + 21888242871839275222246405745257275088548364400416034343698203540870649688976, 1158767719120009, - 4065842924983686, - 2703773636632640, + 21888242871839275222246405745257275088548364400416034343698203748819098899846, + 21888242871839275222246405745257275088548364400416034343698202386749810548800, 1269294255344007, - 2416103899198296, - 3692560160678147, - 3702130715489067, + 21888242871839275222246405745257275088548364400416034343698202099080073114456, + 21888242871839275222246405745257275088548364400416034343698203375536334594307, + 21888242871839275222246405745257275088548364400416034343698203385106889405227, 1933708679535730, 351208439772534, 2183708328835966, 1294972750725383, 1305014372419822, 2059055004669883, - 3163533632224398, - 3835393449760573, - 3021186182983226, + 21888242871839275222246405745257275088548364400416034343698202846509806140558, + 21888242871839275222246405745257275088548364400416034343698203518369623676733, + 21888242871839275222246405745257275088548364400416034343698202704162356899386, 1710148408965971, 23535969608707, - 2785144910779623, + 21888242871839275222246405745257275088548364400416034343698202468121084695783, 2154160992506061, 604737661840057, 1381757277421704, - 3973362062019683, + 21888242871839275222246405745257275088548364400416034343698203656338235935843, 156172166983295, 1050180620626700, - 2716692200656812, - 3084120755710022, + 21888242871839275222246405745257275088548364400416034343698202399668374572972, + 21888242871839275222246405745257275088548364400416034343698202767096929626182, 128862506291231, 517974675075893, 1778757663565706, 1726263301221618, - 3222738793431797, - 3291070064160223, + 21888242871839275222246405745257275088548364400416034343698202905714967347957, + 21888242871839275222246405745257275088548364400416034343698202974046238076383, 1414501670468664, 49693749685683, - 4358383897391481, + 21888242871839275222246405745257275088548364400416034343698204041360071307641, 77158831225691, 790482810987978, 156917033383838, 2012978657460722, - 3344371703973355, - 2981518273941324, - 3202866361405644, - 2433505789545312, - 4359279815361945, + 21888242871839275222246405745257275088548364400416034343698203027347877889515, + 21888242871839275222246405745257275088548364400416034343698202664494447857484, + 21888242871839275222246405745257275088548364400416034343698202885842535321804, + 21888242871839275222246405745257275088548364400416034343698202116481963461472, + 21888242871839275222246405745257275088548364400416034343698204042255989278105, 668254962625877, 1932809424982875, - 2880586751597216, + 21888242871839275222246405745257275088548364400416034343698202563562925513376, 2034961099814296, - 3830308895709222, - 2963019086276773, - 3046229157071921, - 4317639106081806, - 2396949577172439, + 21888242871839275222246405745257275088548364400416034343698203513285069625382, + 21888242871839275222246405745257275088548364400416034343698202645995260192933, + 21888242871839275222246405745257275088548364400416034343698202729205330988081, + 21888242871839275222246405745257275088548364400416034343698204000615279997966, + 21888242871839275222246405745257275088548364400416034343698202079925751088599, 564952155455143, - 4046640611091369, + 21888242871839275222246405745257275088548364400416034343698203729616785007529, 802923469135293, - 2703022155962397, + 21888242871839275222246405745257275088548364400416034343698202385998329878557, 537938354857150, - 3030700120739118, - 4380650965591098, - 2583918045554828, - 3055580558799703, + 21888242871839275222246405745257275088548364400416034343698202713676294655278, + 21888242871839275222246405745257275088548364400416034343698204063627139507258, + 21888242871839275222246405745257275088548364400416034343698202266894219470988, + 21888242871839275222246405745257275088548364400416034343698202738556732715863, 468318193752436, - 2574246627203633, + 21888242871839275222246405745257275088548364400416034343698202257222801119793, 1637099363644671, - 2940622280153351, + 21888242871839275222246405745257275088548364400416034343698202623598454069511, 98910474399875, - 3200847354409827, + 21888242871839275222246405745257275088548364400416034343698202883823528325987, 36877720812516, 405289823505280, - 3534625927045360, + 21888242871839275222246405745257275088548364400416034343698203217602100961520, 1538986274282841, - 4235549099784094, - 3050707280807720, + 21888242871839275222246405745257275088548364400416034343698203918525273700254, + 21888242871839275222246405745257275088548364400416034343698202733683454723880, 528869238791892, - 3653990925430677, - 4392836167578795, + 21888242871839275222246405745257275088548364400416034343698203336967099346837, + 21888242871839275222246405745257275088548364400416034343698204075812341494955, 299497189268905, - 3156270156813361, + 21888242871839275222246405745257275088548364400416034343698202839246330729521, 1737909140292647, - 3836772799529509, - 2420829715180046, - 4248708725975301, - 3841292885016819, - 3028082790567442, - 3395357886132559, - 3559174982107708, - 2759255974666174, - 3340586820458021, - 3107954583160994, + 21888242871839275222246405745257275088548364400416034343698203519748973445669, + 21888242871839275222246405745257275088548364400416034343698202103805889096206, + 21888242871839275222246405745257275088548364400416034343698203931684899891461, + 21888242871839275222246405745257275088548364400416034343698203524269058932979, + 21888242871839275222246405745257275088548364400416034343698202711058964483602, + 21888242871839275222246405745257275088548364400416034343698203078334060048719, + 21888242871839275222246405745257275088548364400416034343698203242151156023868, + 21888242871839275222246405745257275088548364400416034343698202442232148582334, + 21888242871839275222246405745257275088548364400416034343698203023562994374181, + 21888242871839275222246405745257275088548364400416034343698202790930757077154, 359560961705906, 2194103114396579, 538580149841164, @@ -31250,122 +31250,122 @@ pub global CRP: [Polynomial; L] = [ 365602972521481, 1317352659238909, 702426322379853, - 3262228045298487, + 21888242871839275222246405745257275088548364400416034343698202945204219214647, 1733845807207859, - 3248910138534748, + 21888242871839275222246405745257275088548364400416034343698202931886312450908, 2018448306043215, - 4479977090139802, - 2401909717899567, + 21888242871839275222246405745257275088548364400416034343698204162953264055962, + 21888242871839275222246405745257275088548364400416034343698202084885891815727, 875737694620705, 25329255300981, 1751619716176942, - 3756835546822632, - 2793098900796254, + 21888242871839275222246405745257275088548364400416034343698203439811720738792, + 21888242871839275222246405745257275088548364400416034343698202476075074712414, 1416618202976969, - 2278854885843679, + 21888242871839275222246405745257275088548364400416034343698201961831059759839, 1441210138811776, 7214213780322, 176265095737277, - 3663351044211395, + 21888242871839275222246405745257275088548364400416034343698203346327218127555, 1337369240758851, 1817373974651117, - 3965059139357228, + 21888242871839275222246405745257275088548364400416034343698203648035313273388, 625591822103306, 730129541710882, - 2677723852215771, - 2954260946160974, + 21888242871839275222246405745257275088548364400416034343698202360700026131931, + 21888242871839275222246405745257275088548364400416034343698202637237120077134, 246148197205863, 821088097103060, 1383087606812354, - 2664317704560574, + 21888242871839275222246405745257275088548364400416034343698202347293878476734, 1989722279231377, 1511332993371010, - 4144388321116437, - 3431196283297822, - 3419158360704984, - 4201508201301890, + 21888242871839275222246405745257275088548364400416034343698203827364495032597, + 21888242871839275222246405745257275088548364400416034343698203114172457213982, + 21888242871839275222246405745257275088548364400416034343698203102134534621144, + 21888242871839275222246405745257275088548364400416034343698203884484375218050, 1112650249656332, 305474987071846, 1792775276172847, - 3743169206482135, - 3519200321723307, + 21888242871839275222246405745257275088548364400416034343698203426145380398295, + 21888242871839275222246405745257275088548364400416034343698203202176495639467, 1357229367256523, - 2430439091324290, - 3104515816810294, + 21888242871839275222246405745257275088548364400416034343698202113415265240450, + 21888242871839275222246405745257275088548364400416034343698202787491990726454, 1954218340992334, 1115242499713531, - 4196381338684134, - 2421552073090323, + 21888242871839275222246405745257275088548364400416034343698203879357512600294, + 21888242871839275222246405745257275088548364400416034343698202104528247006483, 1938418703961596, 168744818899301, - 2474245051431174, - 3922126220545466, - 4147015737339041, - 4483318078977176, + 21888242871839275222246405745257275088548364400416034343698202157221225347334, + 21888242871839275222246405745257275088548364400416034343698203605102394461626, + 21888242871839275222246405745257275088548364400416034343698203829991911255201, + 21888242871839275222246405745257275088548364400416034343698204166294252893336, 1778717175907408, 1626847830743635, 1679567382930702, - 3548360274865751, + 21888242871839275222246405745257275088548364400416034343698203231336448781911, 1519899009037187, 264263227079910, - 2876260833755411, + 21888242871839275222246405745257275088548364400416034343698202559237007671571, 1693545517986678, 867601774262908, 1537278722283384, 38295436848292, - 3299587074490771, - 2552615605735319, + 21888242871839275222246405745257275088548364400416034343698202982563248406931, + 21888242871839275222246405745257275088548364400416034343698202235591779651479, 1589978841911972, - 4157104648329613, + 21888242871839275222246405745257275088548364400416034343698203840080822245773, 1839203665778617, - 4256777735355637, + 21888242871839275222246405745257275088548364400416034343698203939753909271797, 1181279289667824, 2142827963882311, - 2376587577139067, - 4496834789941856, - 2934519755469582, - 4300067551661281, + 21888242871839275222246405745257275088548364400416034343698202059563751055227, + 21888242871839275222246405745257275088548364400416034343698204179810963858016, + 21888242871839275222246405745257275088548364400416034343698202617495929385742, + 21888242871839275222246405745257275088548364400416034343698203983043725577441, 795344542080157, 1898286410172777, 1056543472753214, 1730415559564710, - 2349102973781222, + 21888242871839275222246405745257275088548364400416034343698202032079147697382, 1905874775855397, 1658074231023887, 1643829547622905, - 4002004158232774, - 2615182181597404, - 4070245434016808, + 21888242871839275222246405745257275088548364400416034343698203684980332148934, + 21888242871839275222246405745257275088548364400416034343698202298158355513564, + 21888242871839275222246405745257275088548364400416034343698203753221607932968, 822292970358716, 961737226034090, 268770523017356, - 4304577061174086, - 3130738765320314, + 21888242871839275222246405745257275088548364400416034343698203987553235090246, + 21888242871839275222246405745257275088548364400416034343698202813714939236474, 176658254337308, - 2987564262589970, - 3968628100039253, + 21888242871839275222246405745257275088548364400416034343698202670540436506130, + 21888242871839275222246405745257275088548364400416034343698203651604273955413, 2017720460609663, - 2648777887624524, + 21888242871839275222246405745257275088548364400416034343698202331754061540684, 1763509684616103, - 2920977833204286, - 3973472446851882, + 21888242871839275222246405745257275088548364400416034343698202603954007120446, + 21888242871839275222246405745257275088548364400416034343698203656448620768042, 1971083809239849, - 3670237740857601, - 3224524006077970, + 21888242871839275222246405745257275088548364400416034343698203353213914773761, + 21888242871839275222246405745257275088548364400416034343698202907500179994130, 403420579082807, - 3647991778366395, + 21888242871839275222246405745257275088548364400416034343698203330967952282555, 1941564963902198, 479274466435845, 566571696014999, 38639028257698, - 2293503495595143, - 3506793437851089, + 21888242871839275222246405745257275088548364400416034343698201976479669511303, + 21888242871839275222246405745257275088548364400416034343698203189769611767249, 1779559891937744, 1080157779709572, 2163822826657925, - 3035110750960774, + 21888242871839275222246405745257275088548364400416034343698202718086924876934, 1972434487462029, - 3351326908127689, + 21888242871839275222246405745257275088548364400416034343698203034303082043849, 32496924245633, 1205629765089118, 942224356340337, @@ -31373,106 +31373,106 @@ pub global CRP: [Polynomial; L] = [ 1472628703178999, 433610128086736, 175833463499975, - 2949110335459312, - 3690241651466570, + 21888242871839275222246405745257275088548364400416034343698202632086509375472, + 21888242871839275222246405745257275088548364400416034343698203373217825382730, 765296813164271, - 4433612572187095, - 3234916019225804, + 21888242871839275222246405745257275088548364400416034343698204116588746103255, + 21888242871839275222246405745257275088548364400416034343698202917892193141964, 1889684638052496, - 3816040934702702, - 2386990653883481, - 4153913789369349, + 21888242871839275222246405745257275088548364400416034343698203499017108618862, + 21888242871839275222246405745257275088548364400416034343698202069966827799641, + 21888242871839275222246405745257275088548364400416034343698203836889963285509, 1464489154814725, 1950846777411626, - 4000678705735461, + 21888242871839275222246405745257275088548364400416034343698203683654879651621, 753444972488295, - 3309723568564117, + 21888242871839275222246405745257275088548364400416034343698202992699742480277, 1937219903238118, 33611632086177, 2144878216726210, - 3441739584568008, - 3969958161212934, - 3598931851828508, + 21888242871839275222246405745257275088548364400416034343698203124715758484168, + 21888242871839275222246405745257275088548364400416034343698203652934335129094, + 21888242871839275222246405745257275088548364400416034343698203281908025744668, 1720587870628892, - 2515948124098509, - 4116445875775944, + 21888242871839275222246405745257275088548364400416034343698202198924298014669, + 21888242871839275222246405745257275088548364400416034343698203799422049692104, 745646412356135, 602473168345201, 320230009127842, - 3053051421434588, - 4491947868213600, - 4410400727047958, + 21888242871839275222246405745257275088548364400416034343698202736027595350748, + 21888242871839275222246405745257275088548364400416034343698204174924042129760, + 21888242871839275222246405745257275088548364400416034343698204093376900964118, 1342632012137948, 936507292862778, 848777931186008, 1111410731565960, - 2275620077164665, + 21888242871839275222246405745257275088548364400416034343698201958596251080825, 1506664262136785, 1741215248857024, 1412406148953106, 34941062657404, - 3923179744282950, - 3418047786533783, + 21888242871839275222246405745257275088548364400416034343698203606155918199110, + 21888242871839275222246405745257275088548364400416034343698203101023960449943, 475767039726823, - 3795491281687121, + 21888242871839275222246405745257275088548364400416034343698203478467455603281, 1177408391508814, - 3114616172313616, - 3935171470374711, + 21888242871839275222246405745257275088548364400416034343698202797592346229776, + 21888242871839275222246405745257275088548364400416034343698203618147644290871, 28430368503904, 258430165629577, 1656843372437631, - 2912698384648105, + 21888242871839275222246405745257275088548364400416034343698202595674558564265, 1368901731353235, 1325207540488804, 1160189785535438, 966827676729444, - 4423104345031543, - 4306199154007008, - 3376183448795139, - 3772867206780181, - 3647771000575989, + 21888242871839275222246405745257275088548364400416034343698204106080518947703, + 21888242871839275222246405745257275088548364400416034343698203989175327923168, + 21888242871839275222246405745257275088548364400416034343698203059159622711299, + 21888242871839275222246405745257275088548364400416034343698203455843380696341, + 21888242871839275222246405745257275088548364400416034343698203330747174492149, 205918358981181, - 2734742783907035, + 21888242871839275222246405745257275088548364400416034343698202417718957823195, 925696277739922, - 2566597899593622, + 21888242871839275222246405745257275088548364400416034343698202249574073509782, 1292149211441965, 1788785278304015, - 4227055067303465, + 21888242871839275222246405745257275088548364400416034343698203910031241219625, 2152870268031668, - 3590010872372490, - 2704744258112835, - 2377863689796177, + 21888242871839275222246405745257275088548364400416034343698203272987046288650, + 21888242871839275222246405745257275088548364400416034343698202387720432028995, + 21888242871839275222246405745257275088548364400416034343698202060839863712337, 1281991162269455, 1639507262812430, 1142960247461773, 1762083237455979, 2154013108626581, - 3343711368125220, + 21888242871839275222246405745257275088548364400416034343698203026687542041380, 507597209306512, - 3491796807775613, - 2845415535429789, - 3848982121075290, + 21888242871839275222246405745257275088548364400416034343698203174772981691773, + 21888242871839275222246405745257275088548364400416034343698202528391709345949, + 21888242871839275222246405745257275088548364400416034343698203531958294991450, 217079499115642, - 2393540714066980, - 2841824782415758, - 3545266975004722, + 21888242871839275222246405745257275088548364400416034343698202076516887983140, + 21888242871839275222246405745257275088548364400416034343698202524800956331918, + 21888242871839275222246405745257275088548364400416034343698203228243148920882, 1615038736559770, - 4197261093828705, - 2377032495334760, + 21888242871839275222246405745257275088548364400416034343698203880237267744865, + 21888242871839275222246405745257275088548364400416034343698202060008669250920, 2113459081789586, - 4297150982926913, + 21888242871839275222246405745257275088548364400416034343698203980127156843073, 2188928233899387, 178472426363759, - 3684041374223488, - 4448996735841990, - 3515507770751565, + 21888242871839275222246405745257275088548364400416034343698203367017548139648, + 21888242871839275222246405745257275088548364400416034343698204131972909758150, + 21888242871839275222246405745257275088548364400416034343698203198483944667725, 1737969334687562, - 4239689753065549, - 3267857817025941, + 21888242871839275222246405745257275088548364400416034343698203922665926981709, + 21888242871839275222246405745257275088548364400416034343698202950833990942101, 855893444541138, - 3026845188290218, + 21888242871839275222246405745257275088548364400416034343698202709821362206378, 291667277449673, - 4444141176742159, + 21888242871839275222246405745257275088548364400416034343698204127117350658319, 1455681166006626, 597422692923300, 611123940090741, @@ -31480,380 +31480,380 @@ pub global CRP: [Polynomial; L] = [ 402599720588799, 586798236951262, 347747072769682, - 3567793136304778, + 21888242871839275222246405745257275088548364400416034343698203250769310220938, 1482173655299421, 626865268479709, - 3664821479706249, + 21888242871839275222246405745257275088548364400416034343698203347797653622409, 1914801749359597, 1087764606084481, - 3500748042389804, + 21888242871839275222246405745257275088548364400416034343698203183724216305964, 1837205808488407, 2026169432177292, 1486915229293237, - 3190539596754808, - 2723565111517108, - 2477166479746939, - 3907836603173588, + 21888242871839275222246405745257275088548364400416034343698202873515770670968, + 21888242871839275222246405745257275088548364400416034343698202406541285433268, + 21888242871839275222246405745257275088548364400416034343698202160142653663099, + 21888242871839275222246405745257275088548364400416034343698203590812777089748, 286535371614192, 1015316100237706, - 2548762594164665, - 2446348463944898, - 4017094782169165, + 21888242871839275222246405745257275088548364400416034343698202231738768080825, + 21888242871839275222246405745257275088548364400416034343698202129324637861058, + 21888242871839275222246405745257275088548364400416034343698203700070956085325, 1008637461232501, - 2671343331845058, - 4022725170251443, + 21888242871839275222246405745257275088548364400416034343698202354319505761218, + 21888242871839275222246405745257275088548364400416034343698203705701344167603, 964229628816072, 585266337566660, - 4207550287826510, + 21888242871839275222246405745257275088548364400416034343698203890526461742670, 1626750264490344, 2152496084249224, 1570847552807392, 2184204787481836, - 2283314425742430, + 21888242871839275222246405745257275088548364400416034343698201966290599658590, 1764354300681140, - 2615890304060928, - 3974221398300750, + 21888242871839275222246405745257275088548364400416034343698202298866477977088, + 21888242871839275222246405745257275088548364400416034343698203657197572216910, 1017351768793194, 861727586004745, 1404262509993021, - 2414623633704293, + 21888242871839275222246405745257275088548364400416034343698202097599807620453, 1340098175203672, - 4023633310139567, - 2811928545161354, - 3059725838041929, + 21888242871839275222246405745257275088548364400416034343698203706609484055727, + 21888242871839275222246405745257275088548364400416034343698202494904719077514, + 21888242871839275222246405745257275088548364400416034343698202742702011958089, 446711988461252, - 2883216512232596, - 3818839143207365, - 2822142816714256, + 21888242871839275222246405745257275088548364400416034343698202566192686148756, + 21888242871839275222246405745257275088548364400416034343698203501815317123525, + 21888242871839275222246405745257275088548364400416034343698202505118990630416, 1971561883501344, - 2390657283342189, - 2622817438749444, + 21888242871839275222246405745257275088548364400416034343698202073633457258349, + 21888242871839275222246405745257275088548364400416034343698202305793612665604, 1924449693690264, - 4193911390726823, - 3567611775810111, + 21888242871839275222246405745257275088548364400416034343698203876887564642983, + 21888242871839275222246405745257275088548364400416034343698203250587949726271, 392208492526051, - 2943314272063827, - 3310655649905804, - 3095257985504818, + 21888242871839275222246405745257275088548364400416034343698202626290445979987, + 21888242871839275222246405745257275088548364400416034343698202993631823821964, + 21888242871839275222246405745257275088548364400416034343698202778234159420978, 1387392183005212, - 4105666623869993, - 2759500093101827, - 3142947506852075, - 3407463595294178, - 2512456174075843, + 21888242871839275222246405745257275088548364400416034343698203788642797786153, + 21888242871839275222246405745257275088548364400416034343698202442476267017987, + 21888242871839275222246405745257275088548364400416034343698202825923680768235, + 21888242871839275222246405745257275088548364400416034343698203090439769210338, + 21888242871839275222246405745257275088548364400416034343698202195432347992003, 295794425462139, 1243904398810048, - 4075381044371789, + 21888242871839275222246405745257275088548364400416034343698203758357218287949, 2046337592420515, 324296590281264, 204130984262930, 1877912805343374, - 2775385718684157, - 3371869086455043, - 4256436448786012, + 21888242871839275222246405745257275088548364400416034343698202458361892600317, + 21888242871839275222246405745257275088548364400416034343698203054845260371203, + 21888242871839275222246405745257275088548364400416034343698203939412622702172, 1844166071273259, 350708776391399, 1381965812129969, - 3709372482577963, + 21888242871839275222246405745257275088548364400416034343698203392348656494123, 1569030793038111, - 3882494975534008, - 2478090082980566, + 21888242871839275222246405745257275088548364400416034343698203565471149450168, + 21888242871839275222246405745257275088548364400416034343698202161066256896726, 1575544417872581, 1935014864839040, 2126764797354150, 2058911319770034, - 3978535808328594, - 2307199860066323, + 21888242871839275222246405745257275088548364400416034343698203661511982244754, + 21888242871839275222246405745257275088548364400416034343698201990176033982483, 264201351222823, - 2390107742292294, - 3296552347167381, - 2636910834784634, - 2738959189629339, - 4436831579987645, + 21888242871839275222246405745257275088548364400416034343698202073083916208454, + 21888242871839275222246405745257275088548364400416034343698202979528521083541, + 21888242871839275222246405745257275088548364400416034343698202319887008700794, + 21888242871839275222246405745257275088548364400416034343698202421935363545499, + 21888242871839275222246405745257275088548364400416034343698204119807753903805, 1452001611221637, - 3488945142483874, - 3593865769864841, + 21888242871839275222246405745257275088548364400416034343698203171921316400034, + 21888242871839275222246405745257275088548364400416034343698203276841943781001, 1830606182867547, 2033754062789711, - 4189116890248688, + 21888242871839275222246405745257275088548364400416034343698203872093064164848, 2010238949703115, 190523794816629, - 3249525889360387, - 4136008039808446, - 2432262947150109, + 21888242871839275222246405745257275088548364400416034343698202932502063276547, + 21888242871839275222246405745257275088548364400416034343698203818984213724606, + 21888242871839275222246405745257275088548364400416034343698202115239121066269, 706114275907674, 1958302939069408, - 4249318866140215, + 21888242871839275222246405745257275088548364400416034343698203932295040056375, 1286159673955848, 693005532715205, 1771728415753925, - 2905178956189336, - 4333833517242443, + 21888242871839275222246405745257275088548364400416034343698202588155130105496, + 21888242871839275222246405745257275088548364400416034343698204016809691158603, 633601464613094, - 3918961466885003, + 21888242871839275222246405745257275088548364400416034343698203601937640801163, 1431555329533961, 199879675721348, 1183941190319661, - 2738472381216512, - 4079089060750918, - 2814492862227585, - 3433761070591951, + 21888242871839275222246405745257275088548364400416034343698202421448555132672, + 21888242871839275222246405745257275088548364400416034343698203762065234667078, + 21888242871839275222246405745257275088548364400416034343698202497469036143745, + 21888242871839275222246405745257275088548364400416034343698203116737244508111, 1159851046932405, 471570721916030, - 3861910755849705, - 2848193176130429, - 3737119620345309, + 21888242871839275222246405745257275088548364400416034343698203544886929765865, + 21888242871839275222246405745257275088548364400416034343698202531169350046589, + 21888242871839275222246405745257275088548364400416034343698203420095794261469, 822256881557678, - 3473967399223922, - 3466994111033434, + 21888242871839275222246405745257275088548364400416034343698203156943573140082, + 21888242871839275222246405745257275088548364400416034343698203149970284949594, 76928004163127, 1250238025891770, - 3116207754247110, - 3349379929097617, + 21888242871839275222246405745257275088548364400416034343698202799183928163270, + 21888242871839275222246405745257275088548364400416034343698203032356103013777, 835599352893896, 158143227360740, 1497256528670355, 964286199012343, - 4202339009085946, - 3448877127685228, - 3750122155100355, - 3933388867132891, - 4162795311663333, + 21888242871839275222246405745257275088548364400416034343698203885315183002106, + 21888242871839275222246405745257275088548364400416034343698203131853301601388, + 21888242871839275222246405745257275088548364400416034343698203433098329016515, + 21888242871839275222246405745257275088548364400416034343698203616365041049051, + 21888242871839275222246405745257275088548364400416034343698203845771485579493, 133283899185989, - 4039984494152294, - 3891384527641160, + 21888242871839275222246405745257275088548364400416034343698203722960668068454, + 21888242871839275222246405745257275088548364400416034343698203574360701557320, 1740348199557977, 277009307732931, 1683886740809, - 3352009511810661, + 21888242871839275222246405745257275088548364400416034343698203034985685726821, 2230798619583078, - 3344511553151241, - 3489649131510607, + 21888242871839275222246405745257275088548364400416034343698203027487727067401, + 21888242871839275222246405745257275088548364400416034343698203172625305426767, 1663504137711969, 196292223069982, - 4482261667979090, - 4456869885276479, - 3641041203212191, + 21888242871839275222246405745257275088548364400416034343698204165237841895250, + 21888242871839275222246405745257275088548364400416034343698204139846059192639, + 21888242871839275222246405745257275088548364400416034343698203324017377128351, 2158072959366559, - 3428169965284249, - 3320254478333337, + 21888242871839275222246405745257275088548364400416034343698203111146139200409, + 21888242871839275222246405745257275088548364400416034343698203003230652249497, 548197862283568, 1077349237141971, 1210199193035902, - 3076992826110148, - 3700278567790381, - 3960310413447908, - 2818604318500033, + 21888242871839275222246405745257275088548364400416034343698202759969000026308, + 21888242871839275222246405745257275088548364400416034343698203383254741706541, + 21888242871839275222246405745257275088548364400416034343698203643286587364068, + 21888242871839275222246405745257275088548364400416034343698202501580492416193, 560176613359433, - 4256286289566757, - 4489066672016532, - 2749395247186029, - 2575425345516011, - 2740676735644615, - 2300535301262756, - 2783339756190377, - 3168287341330204, + 21888242871839275222246405745257275088548364400416034343698203939262463482917, + 21888242871839275222246405745257275088548364400416034343698204172042845932692, + 21888242871839275222246405745257275088548364400416034343698202432371421102189, + 21888242871839275222246405745257275088548364400416034343698202258401519432171, + 21888242871839275222246405745257275088548364400416034343698202423652909560775, + 21888242871839275222246405745257275088548364400416034343698201983511475178916, + 21888242871839275222246405745257275088548364400416034343698202466315930106537, + 21888242871839275222246405745257275088548364400416034343698202851263515246364, 1848690771066820, 511645696523388, 1723933491427747, - 3458382975285327, + 21888242871839275222246405745257275088548364400416034343698203141359149201487, 2098796824471924, 913409612401749, 1753346473416987, 1829733442631859, 2011154202489978, - 4039534234867413, - 2705302136919478, + 21888242871839275222246405745257275088548364400416034343698203722510408783573, + 21888242871839275222246405745257275088548364400416034343698202388278310835638, 2016753369317181, - 2360528583575048, + 21888242871839275222246405745257275088548364400416034343698202043504757491208, 1056668239576608, - 3678673362803182, - 2417859026760461, - 3115368842194968, - 2900891726226510, + 21888242871839275222246405745257275088548364400416034343698203361649536719342, + 21888242871839275222246405745257275088548364400416034343698202100835200676621, + 21888242871839275222246405745257275088548364400416034343698202798345016111128, + 21888242871839275222246405745257275088548364400416034343698202583867900142670, 1722777018390583, 83805508457861, - 2528108287657139, - 4186539592679345, + 21888242871839275222246405745257275088548364400416034343698202211084461573299, + 21888242871839275222246405745257275088548364400416034343698203869515766595505, 895438118799754, 1027867250477181, 1312169136519697, 166337037084371, 421339655551944, - 3147921256566081, + 21888242871839275222246405745257275088548364400416034343698202830897430482241, 2180957580434254, 2041005647337538, 1317817123990599, 533873178400587, 1176387245697077, 1317866390962161, - 2532599348451500, - 2454371102933833, + 21888242871839275222246405745257275088548364400416034343698202215575522367660, + 21888242871839275222246405745257275088548364400416034343698202137347276849993, 979265211779404, - 3181172664288968, + 21888242871839275222246405745257275088548364400416034343698202864148838205128, 248343081765296, - 2546774021149962, - 3707243397103303, - 2478136287754732, + 21888242871839275222246405745257275088548364400416034343698202229750195066122, + 21888242871839275222246405745257275088548364400416034343698203390219571019463, + 21888242871839275222246405745257275088548364400416034343698202161112461670892, 603736412994811, - 2972624082631659, + 21888242871839275222246405745257275088548364400416034343698202655600256547819, 423141001434158, 1058785899074419, - 3694046680336581, - 2921513197128902, + 21888242871839275222246405745257275088548364400416034343698203377022854252741, + 21888242871839275222246405745257275088548364400416034343698202604489371045062, 95847059753244, - 3896918642372889, - 4205072630920021, + 21888242871839275222246405745257275088548364400416034343698203579894816289049, + 21888242871839275222246405745257275088548364400416034343698203888048804836181, 732281591831870, 1917625717596113, 1412825870810719, 850912789340724, 1296630869930646, 262044857647465, - 4403681497983864, - 3731128363887385, + 21888242871839275222246405745257275088548364400416034343698204086657671900024, + 21888242871839275222246405745257275088548364400416034343698203414104537803545, 2159854442654104, - 2270404511853010, - 2269165863234252, - 2817098772373916, + 21888242871839275222246405745257275088548364400416034343698201953380685769170, + 21888242871839275222246405745257275088548364400416034343698201952142037150412, + 21888242871839275222246405745257275088548364400416034343698202500074946290076, 338463511108596, 1929100320851057, - 4001174316570063, - 3555919763931520, - 2962137053919402, - 3456423670104610, + 21888242871839275222246405745257275088548364400416034343698203684150490486223, + 21888242871839275222246405745257275088548364400416034343698203238895937847680, + 21888242871839275222246405745257275088548364400416034343698202645113227835562, + 21888242871839275222246405745257275088548364400416034343698203139399844020770, 1669060061786890, 925565607064138, 1697829628972957, - 2923602527332633, - 3043674062082468, + 21888242871839275222246405745257275088548364400416034343698202606578701248793, + 21888242871839275222246405745257275088548364400416034343698202726650235998628, 650753975536861, 1196356428323015, - 3939553951399207, - 3840135217096067, + 21888242871839275222246405745257275088548364400416034343698203622530125315367, + 21888242871839275222246405745257275088548364400416034343698203523111391012227, 76298443255860, 1843979660310239, 2082842130111349, - 3949026985801341, - 3018333892528816, + 21888242871839275222246405745257275088548364400416034343698203632003159717501, + 21888242871839275222246405745257275088548364400416034343698202701310066444976, 1631265948283409, 1745075041631093, - 2627683223097252, - 3480323900869277, + 21888242871839275222246405745257275088548364400416034343698202310659397013412, + 21888242871839275222246405745257275088548364400416034343698203163300074785437, 189465379899271, - 3968471150514112, - 2657435347873081, + 21888242871839275222246405745257275088548364400416034343698203651447324430272, + 21888242871839275222246405745257275088548364400416034343698202340411521789241, 437073298264786, - 3128794903313048, - 3608112685240603, + 21888242871839275222246405745257275088548364400416034343698202811771077229208, + 21888242871839275222246405745257275088548364400416034343698203291088859156763, 2125864527752949, - 2975010350903540, + 21888242871839275222246405745257275088548364400416034343698202657986524819700, 1544953926113456, 1390833838897563, - 2583102010267327, + 21888242871839275222246405745257275088548364400416034343698202266078184183487, 297400889771430, - 2264920800007260, + 21888242871839275222246405745257275088548364400416034343698201947896973923420, 1693984936579339, - 3102169298553631, - 4345311341065547, - 2345653465463602, - 2364973028959096, + 21888242871839275222246405745257275088548364400416034343698202785145472469791, + 21888242871839275222246405745257275088548364400416034343698204028287514981707, + 21888242871839275222246405745257275088548364400416034343698202028629639379762, + 21888242871839275222246405745257275088548364400416034343698202047949202875256, 1089988183890262, 705454381652400, 1176481135954128, 1696870507333061, 478461747047456, - 3946666091012557, - 3385042898152762, + 21888242871839275222246405745257275088548364400416034343698203629642264928717, + 21888242871839275222246405745257275088548364400416034343698203068019072068922, 1081073042952661, 43185195138790, - 3193918631524236, + 21888242871839275222246405745257275088548364400416034343698202876894805440396, 151855353223945, 1470604153981822, - 3439705200944078, - 4480274688490568, - 2480766851551965, + 21888242871839275222246405745257275088548364400416034343698203122681374860238, + 21888242871839275222246405745257275088548364400416034343698204163250862406728, + 21888242871839275222246405745257275088548364400416034343698202163743025468125, 868524273688995, - 3583259599060868, + 21888242871839275222246405745257275088548364400416034343698203266235772977028, 36920538439149, 591378010909890, - 2797634763435835, + 21888242871839275222246405745257275088548364400416034343698202480610937351995, 512666674590567, - 2473766778376820, - 2589887187784435, + 21888242871839275222246405745257275088548364400416034343698202156742952292980, + 21888242871839275222246405745257275088548364400416034343698202272863361700595, 2217555069655210, 2081533154073842, 175961748262946, - 2867991524551372, - 2549861873037300, + 21888242871839275222246405745257275088548364400416034343698202550967698467532, + 21888242871839275222246405745257275088548364400416034343698202232838046953460, 897034756500665, 1328095490766623, - 2310239845774281, + 21888242871839275222246405745257275088548364400416034343698201993216019690441, 664451208138052, 1351633731570334, - 3699380714397258, - 2320997466353135, + 21888242871839275222246405745257275088548364400416034343698203382356888313418, + 21888242871839275222246405745257275088548364400416034343698202003973640269295, 851242114063413, 16204066281284, 1998307852484407, 1535285445111699, - 4487583149112646, - 3423648680868026, - 3015611229907749, + 21888242871839275222246405745257275088548364400416034343698204170559323028806, + 21888242871839275222246405745257275088548364400416034343698203106624854784186, + 21888242871839275222246405745257275088548364400416034343698202698587403823909, 206345957238377, 510924934882233, 287102026351732, - 2452475080215590, + 21888242871839275222246405745257275088548364400416034343698202135451254131750, 1345345671992082, 1607863010685196, - 3927720839155995, + 21888242871839275222246405745257275088548364400416034343698203610697013072155, 1604295632931854, - 4189993406209911, + 21888242871839275222246405745257275088548364400416034343698203872969580126071, 1186360812002658, - 2588849271423942, + 21888242871839275222246405745257275088548364400416034343698202271825445340102, 1064586142242133, 1567791211356278, - 4152040500695558, + 21888242871839275222246405745257275088548364400416034343698203835016674611718, 621472055250028, - 2936569233256071, + 21888242871839275222246405745257275088548364400416034343698202619545407172231, 779389538763823, - 2658839799535002, - 4421418324155473, - 4199312736732761, - 3449990172093224, + 21888242871839275222246405745257275088548364400416034343698202341815973451162, + 21888242871839275222246405745257275088548364400416034343698204104394498071633, + 21888242871839275222246405745257275088548364400416034343698203882288910648921, + 21888242871839275222246405745257275088548364400416034343698203132966346009384, 673432395596327, - 3404989501424505, + 21888242871839275222246405745257275088548364400416034343698203087965675340665, 1491990810568758, 2160672282330118, 2148938946961184, - 3107269943604933, + 21888242871839275222246405745257275088548364400416034343698202790246117521093, 1287984982864681, - 3030290691496148, - 2366397774944389, + 21888242871839275222246405745257275088548364400416034343698202713266865412308, + 21888242871839275222246405745257275088548364400416034343698202049373948860549, 207214856881569, 1138802091229338, - 3785488013492094, - 2269593223703764, + 21888242871839275222246405745257275088548364400416034343698203468464187408254, + 21888242871839275222246405745257275088548364400416034343698201952569397619924, 2137554991448272, - 2555846693732245, + 21888242871839275222246405745257275088548364400416034343698202238822867648405, 628682721549771, 413638602052510, 1240739036020131, 588706483372977, 96064171400389, - 3309859097674091, - 3559720717230776, - 3986920467819347, - 3768266486918838, + 21888242871839275222246405745257275088548364400416034343698202992835271590251, + 21888242871839275222246405745257275088548364400416034343698203242696891146936, + 21888242871839275222246405745257275088548364400416034343698203669896641735507, + 21888242871839275222246405745257275088548364400416034343698203451242660834998, 2031839682198169, 2105037333829658, 1308081539878576, - 3861367719944292, - 3088923454549377, - 4052343602717702, + 21888242871839275222246405745257275088548364400416034343698203544343893860452, + 21888242871839275222246405745257275088548364400416034343698202771899628465537, + 21888242871839275222246405745257275088548364400416034343698203735319776633862, 1060071867599469, - 3708668078376848, - 3276584952871541, + 21888242871839275222246405745257275088548364400416034343698203391644252293008, + 21888242871839275222246405745257275088548364400416034343698202959561126787701, 1162787595037505, 1638829160000197, 252235402094970, @@ -31862,293 +31862,293 @@ pub global CRP: [Polynomial; L] = [ 212879171004434, 2026186544773071, 1245754135275135, - 4172852696071119, + 21888242871839275222246405745257275088548364400416034343698203855828869987279, 600482920380670, 2043659104132280, 1128998116459839, 2139701097659351, - 2951965382697175, - 2912713067870311, - 4225713587007822, + 21888242871839275222246405745257275088548364400416034343698202634941556613335, + 21888242871839275222246405745257275088548364400416034343698202595689241786471, + 21888242871839275222246405745257275088548364400416034343698203908689760923982, 865539156313991, 359237611554345, 1575647911047014, 1085282971233151, 1889124176749082, - 3147108454450547, - 2534191520645691, + 21888242871839275222246405745257275088548364400416034343698202830084628366707, + 21888242871839275222246405745257275088548364400416034343698202217167694561851, 1214726205798891, - 2634866015712885, - 3363125671376163, + 21888242871839275222246405745257275088548364400416034343698202317842189629045, + 21888242871839275222246405745257275088548364400416034343698203046101845292323, 890341237529679, 35449486099924, 482407697027738, 1652542426658115, 271461479059141, - 3314964986535562, + 21888242871839275222246405745257275088548364400416034343698202997941160451722, 374716704283028, - 3309346820487502, - 2788899933013517, + 21888242871839275222246405745257275088548364400416034343698202992322994403662, + 21888242871839275222246405745257275088548364400416034343698202471876106929677, 575505434613225, - 3423095252880898, - 2917661534899496, + 21888242871839275222246405745257275088548364400416034343698203106071426797058, + 21888242871839275222246405745257275088548364400416034343698202600637708815656, 1744793138030367, 270335713498747, - 4293813630657943, - 4457958118208122, + 21888242871839275222246405745257275088548364400416034343698203976789804574103, + 21888242871839275222246405745257275088548364400416034343698204140934292124282, 594767006549169, 729027255403256, - 3542392503784734, + 21888242871839275222246405745257275088548364400416034343698203225368677700894, 2217835762110855, 1926469015171244, - 2271800988834559, - 2869243009323063, + 21888242871839275222246405745257275088548364400416034343698201954777162750719, + 21888242871839275222246405745257275088548364400416034343698202552219183239223, 1968549282748477, 1083515602066023, - 2958980448958955, + 21888242871839275222246405745257275088548364400416034343698202641956622875115, 816884489184649, 291496633132239, - 2400744902689825, + 21888242871839275222246405745257275088548364400416034343698202083721076605985, 1122958068597646, - 2649770377372861, - 4188824905057372, - 3703311410873110, + 21888242871839275222246405745257275088548364400416034343698202332746551289021, + 21888242871839275222246405745257275088548364400416034343698203871801078973532, + 21888242871839275222246405745257275088548364400416034343698203386287584789270, 1793298496385719, - 2787795349951365, - 4110716952809767, + 21888242871839275222246405745257275088548364400416034343698202470771523867525, + 21888242871839275222246405745257275088548364400416034343698203793693126725927, 2040483977349325, - 4054049675051082, - 2902608066297339, - 3945037557709440, + 21888242871839275222246405745257275088548364400416034343698203737025848967242, + 21888242871839275222246405745257275088548364400416034343698202585584240213499, + 21888242871839275222246405745257275088548364400416034343698203628013731625600, 1371327323654739, - 2564130070956281, - 2866191236145631, - 2835142194168397, + 21888242871839275222246405745257275088548364400416034343698202247106244872441, + 21888242871839275222246405745257275088548364400416034343698202549167410061791, + 21888242871839275222246405745257275088548364400416034343698202518118368084557, 937784702650220, - 3159366774280948, + 21888242871839275222246405745257275088548364400416034343698202842342948197108, 1834940231534820, - 2970460490092527, - 2431030583891856, - 4254091408567907, + 21888242871839275222246405745257275088548364400416034343698202653436664008687, + 21888242871839275222246405745257275088548364400416034343698202114006757808016, + 21888242871839275222246405745257275088548364400416034343698203937067582484067, 1112185402593053, - 3340651943928768, - 3570461293546601, + 21888242871839275222246405745257275088548364400416034343698203023628117844928, + 21888242871839275222246405745257275088548364400416034343698203253437467462761, 1505220697148920, - 3241962294290896, + 21888242871839275222246405745257275088548364400416034343698202924938468207056, 1424355485266982, - 4418692095853122, - 3515582817785128, + 21888242871839275222246405745257275088548364400416034343698204101668269769282, + 21888242871839275222246405745257275088548364400416034343698203198558991701288, 1434279929846836, 1191861310855670, - 2929119738415984, + 21888242871839275222246405745257275088548364400416034343698202612095912332144, 1039476970719488, 744479434242422, - 3952186511895388, + 21888242871839275222246405745257275088548364400416034343698203635162685811548, 935974425535309, 1385458137760243, 1283309793870121, 178389870431181, 283668694619341, - 2342440717068120, + 21888242871839275222246405745257275088548364400416034343698202025416890984280, 2113780402573849, 267445711268696, 1779464298555484, - 3107467219756897, - 2671946364607535, - 4164273661227056, + 21888242871839275222246405745257275088548364400416034343698202790443393673057, + 21888242871839275222246405745257275088548364400416034343698202354922538523695, + 21888242871839275222246405745257275088548364400416034343698203847249835143216, 1498219183530970, - 3016918932947021, + 21888242871839275222246405745257275088548364400416034343698202699895106863181, 982393743894519, 1408722635088656, 417603031077671, 107587905733380, 689476721873407, - 3225745971093022, - 3884967359091954, + 21888242871839275222246405745257275088548364400416034343698202908722145009182, + 21888242871839275222246405745257275088548364400416034343698203567943533008114, 1880972172588737, - 2322710271099187, + 21888242871839275222246405745257275088548364400416034343698202005686445015347, 1569008005664213, 1958140328244434, - 2596346600227067, + 21888242871839275222246405745257275088548364400416034343698202279322774143227, 1867747325262295, - 2981358953854919, + 21888242871839275222246405745257275088548364400416034343698202664335127771079, 496423112139710, 451693620484727, - 3945773918203895, + 21888242871839275222246405745257275088548364400416034343698203628750092120055, 1807102639623838, 1959837567396593, 1231771566445021, - 3811163095807359, - 3643580030315631, + 21888242871839275222246405745257275088548364400416034343698203494139269723519, + 21888242871839275222246405745257275088548364400416034343698203326556204231791, 128677496403433, 1420408806117581, 888168651854641, 185051476996121, - 3574821266345006, + 21888242871839275222246405745257275088548364400416034343698203257797440261166, 1787305812373528, - 3822553323367467, + 21888242871839275222246405745257275088548364400416034343698203505529497283627, 2111101085603209, 265299146240912, 1783511239048477, 752359179882485, - 2331357013460068, + 21888242871839275222246405745257275088548364400416034343698202014333187376228, 1358540137149537, - 3136092391677640, - 2836163442681240, + 21888242871839275222246405745257275088548364400416034343698202819068565593800, + 21888242871839275222246405745257275088548364400416034343698202519139616597400, 1896911327431670, 418396389242862, - 4163620548823137, + 21888242871839275222246405745257275088548364400416034343698203846596722739297, 2071417390309486, 821482117427443, - 3821577664702039, + 21888242871839275222246405745257275088548364400416034343698203504553838618199, 1492513686910119, - 4046900872722264, + 21888242871839275222246405745257275088548364400416034343698203729877046638424, 2154914903262615, 1562588145528645, - 4035713911337534, - 3051311559251170, + 21888242871839275222246405745257275088548364400416034343698203718690085253694, + 21888242871839275222246405745257275088548364400416034343698202734287733167330, 1096576846125002, - 4285478226480240, + 21888242871839275222246405745257275088548364400416034343698203968454400396400, 1260233262321036, - 4458359864564998, + 21888242871839275222246405745257275088548364400416034343698204141336038481158, 1595931679199821, - 4215226219354549, + 21888242871839275222246405745257275088548364400416034343698203898202393270709, 1480847042780615, 1102605580061341, - 3785944200164992, + 21888242871839275222246405745257275088548364400416034343698203468920374081152, 1311005327332684, 1873829967106485, - 2932965171423972, - 2733488272704838, - 2292275777990824, - 3177218749522012, + 21888242871839275222246405745257275088548364400416034343698202615941345340132, + 21888242871839275222246405745257275088548364400416034343698202416464446620998, + 21888242871839275222246405745257275088548364400416034343698201975251951906984, + 21888242871839275222246405745257275088548364400416034343698202860194923438172, 228601078533792, - 4490963793333389, + 21888242871839275222246405745257275088548364400416034343698204173939967249549, 469259489297875, 1674103246619095, - 2634091363372661, + 21888242871839275222246405745257275088548364400416034343698202317067537288821, 2106629496134117, 930480860744791, - 3249761820433133, - 4330220452906717, + 21888242871839275222246405745257275088548364400416034343698202932737994349293, + 21888242871839275222246405745257275088548364400416034343698204013196626822877, 184425431964129, 807462218356849, 1121784855786096, - 3287786410022584, - 3749896327182576, + 21888242871839275222246405745257275088548364400416034343698202970762583938744, + 21888242871839275222246405745257275088548364400416034343698203432872501098736, 195441642033657, 137470487992835, - 3642742474885304, - 2861189082234988, + 21888242871839275222246405745257275088548364400416034343698203325718648801464, + 21888242871839275222246405745257275088548364400416034343698202544165256151148, 1890522929262929, 181157659762933, 1402689774561128, 1637509182315043, 287397097441602, - 3256697750793655, + 21888242871839275222246405745257275088548364400416034343698202939673924709815, 2125854288833821, 1013941286989377, 1558496267512519, 686914017301140, - 3402520078487972, - 2271007372727413, + 21888242871839275222246405745257275088548364400416034343698203085496252404132, + 21888242871839275222246405745257275088548364400416034343698201953983546643573, 1194160681285189, 1928960971501735, - 4112146168829060, - 2976711696739498, + 21888242871839275222246405745257275088548364400416034343698203795122342745220, + 21888242871839275222246405745257275088548364400416034343698202659687870655658, 1982412472689590, - 2360543920406064, + 21888242871839275222246405745257275088548364400416034343698202043520094322224, 1783287081285891, 566746094587287, - 2598662945140496, - 2417143504044167, - 3723239508407213, + 21888242871839275222246405745257275088548364400416034343698202281639119056656, + 21888242871839275222246405745257275088548364400416034343698202100119677960327, + 21888242871839275222246405745257275088548364400416034343698203406215682323373, 1398824726765951, - 4061327920164744, - 2976817676411186, + 21888242871839275222246405745257275088548364400416034343698203744304094080904, + 21888242871839275222246405745257275088548364400416034343698202659793850327346, 402441763780605, - 3333724216338028, - 2451652755720521, + 21888242871839275222246405745257275088548364400416034343698203016700390254188, + 21888242871839275222246405745257275088548364400416034343698202134628929636681, 2089193961918391, 1932959460080510, 1547304284416436, - 3769059274188436, + 21888242871839275222246405745257275088548364400416034343698203452035448104596, 1575929961561971, 1012620068834308, - 2843651757635370, - 3718103066705426, - 3963466243166553, + 21888242871839275222246405745257275088548364400416034343698202526627931551530, + 21888242871839275222246405745257275088548364400416034343698203401079240621586, + 21888242871839275222246405745257275088548364400416034343698203646442417082713, 963224371491857, - 2910041315697628, + 21888242871839275222246405745257275088548364400416034343698202593017489613788, 2022059946871553, 1714397284377116, - 4375259930005197, - 3447802890438227, + 21888242871839275222246405745257275088548364400416034343698204058236103921357, + 21888242871839275222246405745257275088548364400416034343698203130779064354387, 2066223937822284, 277060972256175, 725879665245496, - 2870252220760892, + 21888242871839275222246405745257275088548364400416034343698202553228394677052, 1514579901434423, - 3060498765357609, - 3510850678350796, + 21888242871839275222246405745257275088548364400416034343698202743474939273769, + 21888242871839275222246405745257275088548364400416034343698203193826852266956, 185480732986259, 1722617368305334, - 4446170645305597, + 21888242871839275222246405745257275088548364400416034343698204129146819221757, 1942481814552403, - 2275361794218726, - 2437775799304583, - 2634870489986134, + 21888242871839275222246405745257275088548364400416034343698201958337968134886, + 21888242871839275222246405745257275088548364400416034343698202120751973220743, + 21888242871839275222246405745257275088548364400416034343698202317846663902294, 886022416699806, 1258866970385424, - 4407693836910974, - 3058305631442932, + 21888242871839275222246405745257275088548364400416034343698204090670010827134, + 21888242871839275222246405745257275088548364400416034343698202741281805359092, 465049726905319, 552878756578798, - 2650822922412425, + 21888242871839275222246405745257275088548364400416034343698202333799096328585, 379241268994264, - 4262285458197202, - 2581153899735478, - 2639696177264752, + 21888242871839275222246405745257275088548364400416034343698203945261632113362, + 21888242871839275222246405745257275088548364400416034343698202264130073651638, + 21888242871839275222246405745257275088548364400416034343698202322672351180912, 1062468198741310, - 4349976554495849, - 3289793432402330, - 2307707024418494, - 3366692375504447, - 3318749820114310, + 21888242871839275222246405745257275088548364400416034343698204032952728412009, + 21888242871839275222246405745257275088548364400416034343698202972769606318490, + 21888242871839275222246405745257275088548364400416034343698201990683198334654, + 21888242871839275222246405745257275088548364400416034343698203049668549420607, + 21888242871839275222246405745257275088548364400416034343698203001725994030470, 1291380911366477, - 4190416253354423, - 3858092348608297, - 2917516701801124, - 3332365916130473, + 21888242871839275222246405745257275088548364400416034343698203873392427270583, + 21888242871839275222246405745257275088548364400416034343698203541068522524457, + 21888242871839275222246405745257275088548364400416034343698202600492875717284, + 21888242871839275222246405745257275088548364400416034343698203015342090046633, 402360110109312, 1323284369136284, 1840354495815986, 467909068248912, 318333733207509, - 3393791196293697, + 21888242871839275222246405745257275088548364400416034343698203076767370209857, 1258868296965077, 1512688989769300, - 3917982648701036, + 21888242871839275222246405745257275088548364400416034343698203600958822617196, 1911083380764364, - 4424852794011910, - 3140693230124414, + 21888242871839275222246405745257275088548364400416034343698204107828967928070, + 21888242871839275222246405745257275088548364400416034343698202823669404040574, 1673672629370551, - 2696320223766170, + 21888242871839275222246405745257275088548364400416034343698202379296397682330, 1075396704818779, 398395160008661, 2075029269452658, 1359752265041063, - 2991919423092733, + 21888242871839275222246405745257275088548364400416034343698202674895597008893, 761824605225272, 2150172897801410, - 3720397143875164, + 21888242871839275222246405745257275088548364400416034343698203403373317791324, 2070381423395485, 2207027634951004, - 4368786146141432, + 21888242871839275222246405745257275088548364400416034343698204051762320057592, 1489947560655702, - 2340924952651869, - 4038289914379337, - 3717056267551968, + 21888242871839275222246405745257275088548364400416034343698202023901126568029, + 21888242871839275222246405745257275088548364400416034343698203721266088295497, + 21888242871839275222246405745257275088548364400416034343698203400032441468128, 2078612750232841, 938165984388623, 1576500783709930, @@ -32156,429 +32156,429 @@ pub global CRP: [Polynomial; L] = [ 1133604277042977, 573234152740955, 1715240890647244, - 4106203646131635, - 3333372597030983, - 2998792764309212, - 2596988587830277, + 21888242871839275222246405745257275088548364400416034343698203789179820047795, + 21888242871839275222246405745257275088548364400416034343698203016348770947143, + 21888242871839275222246405745257275088548364400416034343698202681768938225372, + 21888242871839275222246405745257275088548364400416034343698202279964761746437, 1084423857604359, 1799996185088942, - 3605562272068881, - 3721316303405757, + 21888242871839275222246405745257275088548364400416034343698203288538445985041, + 21888242871839275222246405745257275088548364400416034343698203404292477321917, 2202179210313692, 2169377679981272, 2010501315116702, - 3156878953752064, - 2433128007027542, + 21888242871839275222246405745257275088548364400416034343698202839855127668224, + 21888242871839275222246405745257275088548364400416034343698202116104180943702, 798767385482211, 956894558441097, 1416929716927044, - 3492548571774193, + 21888242871839275222246405745257275088548364400416034343698203175524745690353, 1406806333597764, - 2595220550257047, - 3263013463574918, - 2549156900587298, + 21888242871839275222246405745257275088548364400416034343698202278196724173207, + 21888242871839275222246405745257275088548364400416034343698202945989637491078, + 21888242871839275222246405745257275088548364400416034343698202232133074503458, 314800559712658, 357959081230822, - 3862485570289577, + 21888242871839275222246405745257275088548364400416034343698203545461744205737, 1989959891570470, 865805578960490, - 3681595050565667, + 21888242871839275222246405745257275088548364400416034343698203364571224481827, 1817035130698657, 576616953593342, - 3576826249191774, + 21888242871839275222246405745257275088548364400416034343698203259802423107934, 1323351989206164, - 2566287193562555, - 3985817442418379, + 21888242871839275222246405745257275088548364400416034343698202249263367478715, + 21888242871839275222246405745257275088548364400416034343698203668793616334539, 381055504734745, 617319266967179, - 3574437768592915, + 21888242871839275222246405745257275088548364400416034343698203257413942509075, 1532683895716775, 431763340230694, - 3615336513708616, + 21888242871839275222246405745257275088548364400416034343698203298312687624776, 2197052747737609, 428525426396699, 1296729690246325, - 2893437465004952, - 2479946540829443, - 3403615701329425, + 21888242871839275222246405745257275088548364400416034343698202576413638921112, + 21888242871839275222246405745257275088548364400416034343698202162922714745603, + 21888242871839275222246405745257275088548364400416034343698203086591875245585, 502948937409447, - 2967654673510470, + 21888242871839275222246405745257275088548364400416034343698202650630847426630, 2040939341186823, 1777622437176895, 1738482960243701, - 3431893734282424, + 21888242871839275222246405745257275088548364400416034343698203114869908198584, 1485135461002300, - 4416409885163418, - 4169178319307526, - 3802491314579684, + 21888242871839275222246405745257275088548364400416034343698204099386059079578, + 21888242871839275222246405745257275088548364400416034343698203852154493223686, + 21888242871839275222246405745257275088548364400416034343698203485467488495844, 1795084510154027, - 3769376004434835, + 21888242871839275222246405745257275088548364400416034343698203452352178350995, 717759924523975, 475633382954716, - 3652185846723394, - 2570280872789174, - 2913378757988758, - 3968723951727334, + 21888242871839275222246405745257275088548364400416034343698203335162020639554, + 21888242871839275222246405745257275088548364400416034343698202253257046705334, + 21888242871839275222246405745257275088548364400416034343698202596354931904918, + 21888242871839275222246405745257275088548364400416034343698203651700125643494, 1730666748449168, - 3795796309817579, + 21888242871839275222246405745257275088548364400416034343698203478772483733739, 633193375631688, 96559526729912, - 2623923150962625, - 3407951848699687, - 2720018795164515, - 3645793049923452, - 2702479591350998, + 21888242871839275222246405745257275088548364400416034343698202306899324878785, + 21888242871839275222246405745257275088548364400416034343698203090928022615847, + 21888242871839275222246405745257275088548364400416034343698202402994969080675, + 21888242871839275222246405745257275088548364400416034343698203328769223839612, + 21888242871839275222246405745257275088548364400416034343698202385455765267158, 1783899946093406, 269174798622934, 818181952433746, - 3109355169407726, + 21888242871839275222246405745257275088548364400416034343698202792331343323886, 897211379006038, 706092276882459, 581029704273067, 1355933838159376, - 3853305956511663, + 21888242871839275222246405745257275088548364400416034343698203536282130427823, 334931655546224, - 4443287485656383, - 3847868408142416, + 21888242871839275222246405745257275088548364400416034343698204126263659572543, + 21888242871839275222246405745257275088548364400416034343698203530844582058576, 1714492809125584, - 3207649057620791, - 3676464748067457, + 21888242871839275222246405745257275088548364400416034343698202890625231536951, + 21888242871839275222246405745257275088548364400416034343698203359440921983617, 86417122788690, 1729791206062144, 1526756161065359, 893063614092867, - 3422924056469668, + 21888242871839275222246405745257275088548364400416034343698203105900230385828, 1985033172397381, - 2595706463798637, - 3224961385324994, - 3113716600097038, + 21888242871839275222246405745257275088548364400416034343698202278682637714797, + 21888242871839275222246405745257275088548364400416034343698202907937559241154, + 21888242871839275222246405745257275088548364400416034343698202796692774013198, 1745915483035215, 471304856559189, 1663538041942291, - 2785548278959898, - 4306609657210477, + 21888242871839275222246405745257275088548364400416034343698202468524452876058, + 21888242871839275222246405745257275088548364400416034343698203989585831126637, 1923537257222062, - 2752319221504132, - 3043774975831302, + 21888242871839275222246405745257275088548364400416034343698202435295395420292, + 21888242871839275222246405745257275088548364400416034343698202726751149747462, 346624136437519, - 3863781230235110, - 2522529505852819, - 3368013468439223, + 21888242871839275222246405745257275088548364400416034343698203546757404151270, + 21888242871839275222246405745257275088548364400416034343698202205505679768979, + 21888242871839275222246405745257275088548364400416034343698203050989642355383, 255134986407880, - 2285499713846098, + 21888242871839275222246405745257275088548364400416034343698201968475887762258, 1761587210472445, 1744017022260118, - 3847072588537369, - 4499738423741251, - 3596063396734141, + 21888242871839275222246405745257275088548364400416034343698203530048762453529, + 21888242871839275222246405745257275088548364400416034343698204182714597657411, + 21888242871839275222246405745257275088548364400416034343698203279039570650301, 2182219303185903, 1761720369219230, - 2481393010441451, - 3200983155130353, - 2888833144966512, + 21888242871839275222246405745257275088548364400416034343698202164369184357611, + 21888242871839275222246405745257275088548364400416034343698202883959329046513, + 21888242871839275222246405745257275088548364400416034343698202571809318882672, 431690158212114, - 3268784786998807, + 21888242871839275222246405745257275088548364400416034343698202951760960914967, 1481992870276893, - 4245228735026710, - 4253452013796011, - 3156194391095358, + 21888242871839275222246405745257275088548364400416034343698203928204908942870, + 21888242871839275222246405745257275088548364400416034343698203936428187712171, + 21888242871839275222246405745257275088548364400416034343698202839170565011518, 882650685826803, 576165119900484, 952671822458770, - 3698631480883233, + 21888242871839275222246405745257275088548364400416034343698203381607654799393, 2201483816808927, - 3097570860060909, + 21888242871839275222246405745257275088548364400416034343698202780547033977069, 512818299067631, - 2397005982634990, - 3969486610351759, + 21888242871839275222246405745257275088548364400416034343698202079982156551150, + 21888242871839275222246405745257275088548364400416034343698203652462784267919, 2166942600260260, - 2793690558768941, + 21888242871839275222246405745257275088548364400416034343698202476666732685101, 2085292368406220, - 3883110359047129, - 4248031147958107, - 2639581511214759, + 21888242871839275222246405745257275088548364400416034343698203566086532963289, + 21888242871839275222246405745257275088548364400416034343698203931007321874267, + 21888242871839275222246405745257275088548364400416034343698202322557685130919, 843351319208319, - 2473886986872978, - 2929438379142674, + 21888242871839275222246405745257275088548364400416034343698202156863160789138, + 21888242871839275222246405745257275088548364400416034343698202612414553058834, 1548956105695891, - 4367247383970239, + 21888242871839275222246405745257275088548364400416034343698204050223557886399, 864705809309183, 1015134113903693, 1356228390270943, 816776194290077, - 4303376494163978, - 2764859668451464, + 21888242871839275222246405745257275088548364400416034343698203986352668080138, + 21888242871839275222246405745257275088548364400416034343698202447835842367624, 54885698729971, 1704846808274655, - 2348935711748059, + 21888242871839275222246405745257275088548364400416034343698202031911885664219, 170598021890035, - 4227950289910258, - 3959293839852580, - 3430882965928915, - 2805634952025642, - 3991064179572207, - 4383183728977269, + 21888242871839275222246405745257275088548364400416034343698203910926463826418, + 21888242871839275222246405745257275088548364400416034343698203642270013768740, + 21888242871839275222246405745257275088548364400416034343698203113859139845075, + 21888242871839275222246405745257275088548364400416034343698202488611125941802, + 21888242871839275222246405745257275088548364400416034343698203674040353488367, + 21888242871839275222246405745257275088548364400416034343698204066159902893429, 748501996202859, 330833804067680, - 3094666360361155, + 21888242871839275222246405745257275088548364400416034343698202777642534277315, 1755893377477132, - 2592433151096842, + 21888242871839275222246405745257275088548364400416034343698202275409325013002, 776283599930524, 184043183764386, - 2969342627617600, + 21888242871839275222246405745257275088548364400416034343698202652318801533760, 169004971294304, - 3825577347417956, + 21888242871839275222246405745257275088548364400416034343698203508553521334116, 566951901096846, 1500424074364867, 588463924328202, - 2930226500992872, + 21888242871839275222246405745257275088548364400416034343698202613202674909032, 971749346720156, - 2664859422790722, - 3284564298441339, + 21888242871839275222246405745257275088548364400416034343698202347835596706882, + 21888242871839275222246405745257275088548364400416034343698202967540472357499, 1519790844241557, - 4222488109003445, - 3413462269761465, - 4383860896358806, + 21888242871839275222246405745257275088548364400416034343698203905464282919605, + 21888242871839275222246405745257275088548364400416034343698203096438443677625, + 21888242871839275222246405745257275088548364400416034343698204066837070274966, 1188843417678021, - 2351579675935751, + 21888242871839275222246405745257275088548364400416034343698202034555849851911, 1151859423756510, - 3826777265039749, - 3565914179697629, - 4393381308250262, + 21888242871839275222246405745257275088548364400416034343698203509753438955909, + 21888242871839275222246405745257275088548364400416034343698203248890353613789, + 21888242871839275222246405745257275088548364400416034343698204076357482166422, 1345063447809925, 2023857086381696, 1023301139678874, - 4122179102875775, - 2558321239953669, + 21888242871839275222246405745257275088548364400416034343698203805155276791935, + 21888242871839275222246405745257275088548364400416034343698202241297413869829, 1128859810226089, 700096542970540, 2022547069445523, - 3482441436647790, + 21888242871839275222246405745257275088548364400416034343698203165417610563950, 1389465701588366, 905319950830120, - 2614141921330592, + 21888242871839275222246405745257275088548364400416034343698202297118095246752, 1513378964560050, - 4006979652758944, + 21888242871839275222246405745257275088548364400416034343698203689955826675104, 227788836522600, 1310851454525859, - 2352556955667462, + 21888242871839275222246405745257275088548364400416034343698202035533129583622, 1311394537080178, 1338113831250828, - 2690123092372823, + 21888242871839275222246405745257275088548364400416034343698202373099266288983, 720265133386421, 431086668532075, 700317608452676, 1113533710894023, 94559541349245, - 4357298085003606, + 21888242871839275222246405745257275088548364400416034343698204040274258919766, 1538925727100550, - 3469515486535933, - 3328722555411925, - 2826794036049211, + 21888242871839275222246405745257275088548364400416034343698203152491660452093, + 21888242871839275222246405745257275088548364400416034343698203011698729328085, + 21888242871839275222246405745257275088548364400416034343698202509770209965371, 1155374299417356, - 4310790852038647, - 2860756004569244, - 3682503741155388, - 3327896039671294, + 21888242871839275222246405745257275088548364400416034343698203993767025954807, + 21888242871839275222246405745257275088548364400416034343698202543732178485404, + 21888242871839275222246405745257275088548364400416034343698203365479915071548, + 21888242871839275222246405745257275088548364400416034343698203010872213587454, 198227332654642, 742488599001409, - 2977495554963355, - 3686057928911983, - 2991201570041449, + 21888242871839275222246405745257275088548364400416034343698202660471728879515, + 21888242871839275222246405745257275088548364400416034343698203369034102828143, + 21888242871839275222246405745257275088548364400416034343698202674177743957609, 1554353354417392, - 4424296320452795, + 21888242871839275222246405745257275088548364400416034343698204107272494368955, 548058603031662, - 3790945064450771, + 21888242871839275222246405745257275088548364400416034343698203473921238366931, 1758311872015835, 39227821606229, 1866174773956354, - 4233737795464335, - 2367826822576955, + 21888242871839275222246405745257275088548364400416034343698203916713969380495, + 21888242871839275222246405745257275088548364400416034343698202050802996493115, 1516358275735566, - 4100569024415826, + 21888242871839275222246405745257275088548364400416034343698203783545198331986, 1307925309901960, - 3410748239599128, + 21888242871839275222246405745257275088548364400416034343698203093724413515288, 2074021220428799, - 2338479652769895, + 21888242871839275222246405745257275088548364400416034343698202021455826686055, 937636484219109, 268495669757963, - 2471025457917379, - 2846927469010930, + 21888242871839275222246405745257275088548364400416034343698202154001631833539, + 21888242871839275222246405745257275088548364400416034343698202529903642927090, 2097781198242062, - 3491134796181460, - 4193324071339483, - 2397938534822833, + 21888242871839275222246405745257275088548364400416034343698203174110970097620, + 21888242871839275222246405745257275088548364400416034343698203876300245255643, + 21888242871839275222246405745257275088548364400416034343698202080914708738993, 1811623063226601, 364275316611898, 1587919631638888, 1634806983276426, 937950365280581, 211176830916571, - 4287207800041326, - 3050299767551526, - 2290124771179268, + 21888242871839275222246405745257275088548364400416034343698203970183973957486, + 21888242871839275222246405745257275088548364400416034343698202733275941467686, + 21888242871839275222246405745257275088548364400416034343698201973100945095428, 1505260650859732, 1790777786348494, 1857863323825984, - 3055495832585014, + 21888242871839275222246405745257275088548364400416034343698202738472006501174, 74703216791732, - 3791469510664793, - 2672049830178644, + 21888242871839275222246405745257275088548364400416034343698203474445684580953, + 21888242871839275222246405745257275088548364400416034343698202355026004094804, 182429410372028, - 3998437335558612, + 21888242871839275222246405745257275088548364400416034343698203681413509474772, 1789944679478627, - 3573697189323749, - 3936785709545593, + 21888242871839275222246405745257275088548364400416034343698203256673363239909, + 21888242871839275222246405745257275088548364400416034343698203619761883461753, 349366468135774, 662008602221680, 2177824614664669, 1540960749078775, 466090251813772, - 4421397521360637, + 21888242871839275222246405745257275088548364400416034343698204104373695276797, 2121325255852479, 666640101829358, 1891692741109416, - 3688958286172667, - 2967192976874569, - 2681468806049447, + 21888242871839275222246405745257275088548364400416034343698203371934460088827, + 21888242871839275222246405745257275088548364400416034343698202650169150790729, + 21888242871839275222246405745257275088548364400416034343698202364444979965607, 1049750216563611, 1607230386524685, 675696812485568, - 3083218165807168, + 21888242871839275222246405745257275088548364400416034343698202766194339723328, 2123311745458523, - 3426229145248790, - 3675609980423003, + 21888242871839275222246405745257275088548364400416034343698203109205319164950, + 21888242871839275222246405745257275088548364400416034343698203358586154339163, 1744906412739846, 1109437623877725, - 4384159025773396, - 3598141562569090, + 21888242871839275222246405745257275088548364400416034343698204067135199689556, + 21888242871839275222246405745257275088548364400416034343698203281117736485250, 1234332365459609, 1073965812914532, - 4275398901053364, - 2972459935013893, - 3703084827880436, - 3344780146567264, - 3955605149890569, + 21888242871839275222246405745257275088548364400416034343698203958375074969524, + 21888242871839275222246405745257275088548364400416034343698202655436108930053, + 21888242871839275222246405745257275088548364400416034343698203386061001796596, + 21888242871839275222246405745257275088548364400416034343698203027756320483424, + 21888242871839275222246405745257275088548364400416034343698203638581323806729, 2080529391762893, - 4067302493983719, + 21888242871839275222246405745257275088548364400416034343698203750278667899879, 1845226702016363, 2027893164309761, 597761464408860, 1208828884355899, - 4332639654476655, - 3121411058150542, - 3488077609566849, - 2551981803370086, - 3673307609626484, + 21888242871839275222246405745257275088548364400416034343698204015615828392815, + 21888242871839275222246405745257275088548364400416034343698202804387232066702, + 21888242871839275222246405745257275088548364400416034343698203171053783483009, + 21888242871839275222246405745257275088548364400416034343698202234957977286246, + 21888242871839275222246405745257275088548364400416034343698203356283783542644, 1737225754245769, - 3336637772787416, + 21888242871839275222246405745257275088548364400416034343698203019613946703576, 2233312227223460, - 2602440353973926, - 3493879639284828, - 2868349823801350, - 4157948419194693, + 21888242871839275222246405745257275088548364400416034343698202285416527890086, + 21888242871839275222246405745257275088548364400416034343698203176855813200988, + 21888242871839275222246405745257275088548364400416034343698202551325997717510, + 21888242871839275222246405745257275088548364400416034343698203840924593110853, 1518852537537400, - 3293968488255659, + 21888242871839275222246405745257275088548364400416034343698202976944662171819, 1604173226689234, 1828777868283059, - 3846585185684037, + 21888242871839275222246405745257275088548364400416034343698203529561359600197, 1326167584962809, - 3404625849184781, - 3449374573476399, + 21888242871839275222246405745257275088548364400416034343698203087602023100941, + 21888242871839275222246405745257275088548364400416034343698203132350747392559, 493262236161715, 464894053015489, 2238352079034784, - 4116554601251902, - 4283529700310167, - 4271238353903905, - 3146358424638438, - 3953203242100661, + 21888242871839275222246405745257275088548364400416034343698203799530775168062, + 21888242871839275222246405745257275088548364400416034343698203966505874226327, + 21888242871839275222246405745257275088548364400416034343698203954214527820065, + 21888242871839275222246405745257275088548364400416034343698202829334598554598, + 21888242871839275222246405745257275088548364400416034343698203636179416016821, 832510916309887, - 4346482351911543, + 21888242871839275222246405745257275088548364400416034343698204029458525827703, 1672772303008713, 915791599438422, 1500695527397155, - 2760247162430539, - 3483342502354877, - 3235550429621481, + 21888242871839275222246405745257275088548364400416034343698202443223336346699, + 21888242871839275222246405745257275088548364400416034343698203166318676271037, + 21888242871839275222246405745257275088548364400416034343698202918526603537641, 587401130888051, - 3673835568562514, + 21888242871839275222246405745257275088548364400416034343698203356811742478674, 2204714359222039, 2150247460086973, 1041529438904876, 1355309178382598, - 2397879465308461, - 2767534370445922, + 21888242871839275222246405745257275088548364400416034343698202080855639224621, + 21888242871839275222246405745257275088548364400416034343698202450510544362082, 482754022771945, 52300750440612, 1868670585200845, 1704157009695054, - 3781122443375045, + 21888242871839275222246405745257275088548364400416034343698203464098617291205, 648950843507573, 1029684691780033, - 4441907449935584, + 21888242871839275222246405745257275088548364400416034343698204124883623851744, 1029232561626218, 1794224521667739, 2128153032521608, 2048395988181944, - 2276518162506919, - 2653454815137125, + 21888242871839275222246405745257275088548364400416034343698201959494336423079, + 21888242871839275222246405745257275088548364400416034343698202336430989053285, 1939065188478373, 49040750636393, 1985186664309496, - 4030060333317652, - 3801742037712572, - 4017618522944774, + 21888242871839275222246405745257275088548364400416034343698203713036507233812, + 21888242871839275222246405745257275088548364400416034343698203484718211628732, + 21888242871839275222246405745257275088548364400416034343698203700594696860934, 1779672999369120, - 3159919955486545, + 21888242871839275222246405745257275088548364400416034343698202842896129402705, 1018387776343888, 589039876435809, - 3050249349910496, + 21888242871839275222246405745257275088548364400416034343698202733225523826656, 815165477186036, - 3398117572578864, + 21888242871839275222246405745257275088548364400416034343698203081093746495024, 49370952952685, 182724544856673, 1329667490519924, - 2263347418359374, - 2782309844095700, - 4124133723656801, + 21888242871839275222246405745257275088548364400416034343698201946323592275534, + 21888242871839275222246405745257275088548364400416034343698202465286018011860, + 21888242871839275222246405745257275088548364400416034343698203807109897572961, 2229604672328898, 1266830416629836, 1729541210370757, 1022688848604040, 1710468253004806, - 4421972757001565, + 21888242871839275222246405745257275088548364400416034343698204104948930917725, 2228227511814562, 449255424484251, 1499832203215633, - 2370777082016030, + 21888242871839275222246405745257275088548364400416034343698202053753255932190, 605528847684645, 1041374926333255, 1014769432826799, 284431551029532, - 3414813518916048, + 21888242871839275222246405745257275088548364400416034343698203097789692832208, 1684451796564186, - 2364887966422561, + 21888242871839275222246405745257275088548364400416034343698202047864140338721, 152864087525711, - 3485073897053754, - 2912703374475925, - 3274696983661911, - 2401337018103659, + 21888242871839275222246405745257275088548364400416034343698203168050070969914, + 21888242871839275222246405745257275088548364400416034343698202595679548392085, + 21888242871839275222246405745257275088548364400416034343698202957673157578071, + 21888242871839275222246405745257275088548364400416034343698202084313192019819, 1520532180744011, - 2751369609135639, - 2551706637890223, - 2814521355325735, + 21888242871839275222246405745257275088548364400416034343698202434345783051799, + 21888242871839275222246405745257275088548364400416034343698202234682811806383, + 21888242871839275222246405745257275088548364400416034343698202497497529241895, 1361897619881683, 1075560083335374, - 3483999305224289, - 4256706026538245, + 21888242871839275222246405745257275088548364400416034343698203166975479140449, + 21888242871839275222246405745257275088548364400416034343698203939682200454405, 1499775152866557, - 3539915997275392, - 3690421853122742, + 21888242871839275222246405745257275088548364400416034343698203222892171191552, + 21888242871839275222246405745257275088548364400416034343698203373398027038902, 1118168904800965, 298242511246886, 1123887951460300, - 4323615701658539, + 21888242871839275222246405745257275088548364400416034343698204006591875574699, 1916621544133875, 1287768825235986, 997402858694695, @@ -32590,116 +32590,116 @@ pub global CRP: [Polynomial; L] = [ 2007716083274135, 1023605542160673, 320123006454865, - 3841831169026059, - 3577792843849222, - 4100142463721252, - 3850440599823654, + 21888242871839275222246405745257275088548364400416034343698203524807342942219, + 21888242871839275222246405745257275088548364400416034343698203260769017765382, + 21888242871839275222246405745257275088548364400416034343698203783118637637412, + 21888242871839275222246405745257275088548364400416034343698203533416773739814, 1208649271440345, - 3153415774658665, - 2712076035497696, - 3642497652741129, + 21888242871839275222246405745257275088548364400416034343698202836391948574825, + 21888242871839275222246405745257275088548364400416034343698202395052209413856, + 21888242871839275222246405745257275088548364400416034343698203325473826657289, 261274186190376, - 3258577543954584, + 21888242871839275222246405745257275088548364400416034343698202941553717870744, 654770773023648, - 2584176696783821, + 21888242871839275222246405745257275088548364400416034343698202267152870699981, 1587943551151450, 464637023664471, - 4447217497198900, + 21888242871839275222246405745257275088548364400416034343698204130193671115060, 2210211980392470, - 3109257714925631, - 3533838617224300, + 21888242871839275222246405745257275088548364400416034343698202792233888841791, + 21888242871839275222246405745257275088548364400416034343698203216814791140460, 2000982133865302, - 4017577081825028, + 21888242871839275222246405745257275088548364400416034343698203700553255741188, 288295916423625, - 2555180167656378, - 3756570845945500, + 21888242871839275222246405745257275088548364400416034343698202238156341572538, + 21888242871839275222246405745257275088548364400416034343698203439547019861660, 1740718855695289, 1460149878718406, - 3816189717388830, - 4223303051814368, + 21888242871839275222246405745257275088548364400416034343698203499165891304990, + 21888242871839275222246405745257275088548364400416034343698203906279225730528, 1326454366594737, 158831625070974, 1523864888053159, 792125507372119, 1631593291493704, - 2633190486539517, - 4371679950110390, - 3172389680125102, + 21888242871839275222246405745257275088548364400416034343698202316166660455677, + 21888242871839275222246405745257275088548364400416034343698204054656124026550, + 21888242871839275222246405745257275088548364400416034343698202855365854041262, 16411556472132, - 4079442553341556, + 21888242871839275222246405745257275088548364400416034343698203762418727257716, 2138195138457841, 79770051494418, 1128178079785365, - 4350928227065577, + 21888242871839275222246405745257275088548364400416034343698204033904400981737, 1561140788216912, 649497268958289, 1478988936028090, - 2441663615085469, + 21888242871839275222246405745257275088548364400416034343698202124639789001629, 729067575006832, - 4455779910146380, + 21888242871839275222246405745257275088548364400416034343698204138756084062540, 2102258426963530, - 2512465508417768, - 3150832655826199, - 4330444016487839, + 21888242871839275222246405745257275088548364400416034343698202195441682333928, + 21888242871839275222246405745257275088548364400416034343698202833808829742359, + 21888242871839275222246405745257275088548364400416034343698204013420190403999, 524844162934274, - 2732998109109176, - 2601192148355282, + 21888242871839275222246405745257275088548364400416034343698202415974283025336, + 21888242871839275222246405745257275088548364400416034343698202284168322271442, 1724533258805677, - 3724585640671683, + 21888242871839275222246405745257275088548364400416034343698203407561814587843, 1368598012911520, 1278467697415908, - 3136232638012726, + 21888242871839275222246405745257275088548364400416034343698202819208811928886, 1830027072710921, 1744258116888553, - 2690385034786810, + 21888242871839275222246405745257275088548364400416034343698202373361208702970, 2164612788996707, 1602989893743138, 191703284075914, 658141138729896, - 3525593130362101, - 4481083801890608, - 2659701657909816, + 21888242871839275222246405745257275088548364400416034343698203208569304278261, + 21888242871839275222246405745257275088548364400416034343698204164059975806768, + 21888242871839275222246405745257275088548364400416034343698202342677831825976, 1593828343486065, - 2595774025478464, - 4159852846321762, - 4376736121460309, - 3615298014402840, - 3208291104017996, - 3123019945816192, + 21888242871839275222246405745257275088548364400416034343698202278750199394624, + 21888242871839275222246405745257275088548364400416034343698203842829020237922, + 21888242871839275222246405745257275088548364400416034343698204059712295376469, + 21888242871839275222246405745257275088548364400416034343698203298274188319000, + 21888242871839275222246405745257275088548364400416034343698202891267277934156, + 21888242871839275222246405745257275088548364400416034343698202805996119732352, 1352116059703894, 1282735166875042, 541190027858138, - 4490219310880916, + 21888242871839275222246405745257275088548364400416034343698204173195484797076, 2031537819575347, - 2640965156775955, + 21888242871839275222246405745257275088548364400416034343698202323941330692115, 1029498238722044, - 4438172729695166, + 21888242871839275222246405745257275088548364400416034343698204121148903611326, 104797382750228, 912195510178129, - 2749742184603370, - 4396787120686492, + 21888242871839275222246405745257275088548364400416034343698202432718358519530, + 21888242871839275222246405745257275088548364400416034343698204079763294602652, 2104498281077713, - 2455655112646540, - 4093448376109006, - 4333674511926114, - 3241665550624910, + 21888242871839275222246405745257275088548364400416034343698202138631286562700, + 21888242871839275222246405745257275088548364400416034343698203776424550025166, + 21888242871839275222246405745257275088548364400416034343698204016650685842274, + 21888242871839275222246405745257275088548364400416034343698202924641724541070, 1687844404503320, 1887142214548506, - 2832296664041188, + 21888242871839275222246405745257275088548364400416034343698202515272837957348, 1501813158513149, - 2270831963950647, - 4341770402962929, + 21888242871839275222246405745257275088548364400416034343698201953808137866807, + 21888242871839275222246405745257275088548364400416034343698204024746576879089, 680022267594300, 35914576503524, 27910893711533, - 4288087460256904, + 21888242871839275222246405745257275088548364400416034343698203971063634173064, 1951110363368288, - 3161376590945918, + 21888242871839275222246405745257275088548364400416034343698202844352764862078, 1361363054163823, 487308040404948, 2198623835124458, - 2887839786209244, - 3977381128645091, + 21888242871839275222246405745257275088548364400416034343698202570815960125404, + 21888242871839275222246405745257275088548364400416034343698203660357302561251, 674407195754809, 725774218623151, 1446712863484748, @@ -32708,101 +32708,101 @@ pub global CRP: [Polynomial; L] = [ 1250399324299520, 564396806965061, 1691450874394842, - 3669524407356349, + 21888242871839275222246405745257275088548364400416034343698203352500581272509, 1965121729200697, 1392720986926560, - 3067211147362071, + 21888242871839275222246405745257275088548364400416034343698202750187321278231, 305331916822103, - 2824956200556994, - 3783963306438807, - 3857959569721179, - 3945450294423966, + 21888242871839275222246405745257275088548364400416034343698202507932374473154, + 21888242871839275222246405745257275088548364400416034343698203466939480354967, + 21888242871839275222246405745257275088548364400416034343698203540935743637339, + 21888242871839275222246405745257275088548364400416034343698203628426468340126, 1709039893121096, - 3291414277272981, - 4416620895695452, + 21888242871839275222246405745257275088548364400416034343698202974390451189141, + 21888242871839275222246405745257275088548364400416034343698204099597069611612, 2161078038150596, - 2487561367262521, - 2588051680778424, + 21888242871839275222246405745257275088548364400416034343698202170537541178681, + 21888242871839275222246405745257275088548364400416034343698202271027854694584, 1076478446530749, - 3304257372068181, - 4489110011776239, + 21888242871839275222246405745257275088548364400416034343698202987233545984341, + 21888242871839275222246405745257275088548364400416034343698204172086185692399, 298064547387353, 1528903114340821, 1413869252319445, - 2980121385332787, - 3352831727392199, - 2863525441431557, + 21888242871839275222246405745257275088548364400416034343698202663097559248947, + 21888242871839275222246405745257275088548364400416034343698203035807901308359, + 21888242871839275222246405745257275088548364400416034343698202546501615347717, 1772612854586808, - 2761685116256659, - 3905838916428823, + 21888242871839275222246405745257275088548364400416034343698202444661290172819, + 21888242871839275222246405745257275088548364400416034343698203588815090344983, 1889855845902145, 210820652524576, - 3949923374775722, + 21888242871839275222246405745257275088548364400416034343698203632899548691882, 356381114517755, 1758770904166135, - 3252029689430278, - 2354725381651560, + 21888242871839275222246405745257275088548364400416034343698202935005863346438, + 21888242871839275222246405745257275088548364400416034343698202037701555567720, 1716751736040142, - 3045813447617361, - 2355156301710002, - 2817097800873388, + 21888242871839275222246405745257275088548364400416034343698202728789621533521, + 21888242871839275222246405745257275088548364400416034343698202038132475626162, + 21888242871839275222246405745257275088548364400416034343698202500073974789548, 1255490078428292, - 4014376634112374, + 21888242871839275222246405745257275088548364400416034343698203697352808028534, 30368838314446, - 4114831044359832, - 2252636823006675, - 3118288874788677, - 4429930912149358, - 4168361486215256, - 3504226154451514, + 21888242871839275222246405745257275088548364400416034343698203797807218275992, + 21888242871839275222246405745257275088548364400416034343698201935612996922835, + 21888242871839275222246405745257275088548364400416034343698202801265048704837, + 21888242871839275222246405745257275088548364400416034343698204112907086065518, + 21888242871839275222246405745257275088548364400416034343698203851337660131416, + 21888242871839275222246405745257275088548364400416034343698203187202328367674, 1002790306714775, - 4493544289278162, + 21888242871839275222246405745257275088548364400416034343698204176520463194322, 2063612036078116, - 2665637472816870, + 21888242871839275222246405745257275088548364400416034343698202348613646733030, 1070176529528184, 578325023929992, - 2778253829101313, - 3828199867408488, + 21888242871839275222246405745257275088548364400416034343698202461230003017473, + 21888242871839275222246405745257275088548364400416034343698203511176041324648, 906709650994740, - 2662242679451426, + 21888242871839275222246405745257275088548364400416034343698202345218853367586, 540137613948743, - 3094518366697546, - 3889401073704500, - 3393944960072946, - 4228386128735305, + 21888242871839275222246405745257275088548364400416034343698202777494540613706, + 21888242871839275222246405745257275088548364400416034343698203572377247620660, + 21888242871839275222246405745257275088548364400416034343698203076921133989106, + 21888242871839275222246405745257275088548364400416034343698203911362302651465, 597714930585739, 107177898042546, 1038158845827221, - 3567919603079898, + 21888242871839275222246405745257275088548364400416034343698203250895776996058, 76791935217808, - 3459113032500367, + 21888242871839275222246405745257275088548364400416034343698203142089206416527, 314215835046136, - 2691603339973470, + 21888242871839275222246405745257275088548364400416034343698202374579513889630, 1692024944919066, 1184813477380249, - 2876786180093015, + 21888242871839275222246405745257275088548364400416034343698202559762354009175, 548159083245866, 604849701843154, - 4072123162169371, - 2263968745653339, + 21888242871839275222246405745257275088548364400416034343698203755099336085531, + 21888242871839275222246405745257275088548364400416034343698201946944919569499, 108243330874092, - 2748624519023359, + 21888242871839275222246405745257275088548364400416034343698202431600692939519, 2102598410658911, 1285474233648349, - 3762671172469252, - 3676854683085908, + 21888242871839275222246405745257275088548364400416034343698203445647346385412, + 21888242871839275222246405745257275088548364400416034343698203359830857002068, 1197039305557429, - 3344263131789597, + 21888242871839275222246405745257275088548364400416034343698203027239305705757, 1049087126692487, - 2806303589594870, + 21888242871839275222246405745257275088548364400416034343698202489279763511030, 2009671177607643, 311146425294865, - 3270454610127707, + 21888242871839275222246405745257275088548364400416034343698202953430784043867, 149973997110255, - 2413745771370979, + 21888242871839275222246405745257275088548364400416034343698202096721945287139, 2245520215878484, - 3462205961364820, - 3353457958121831, + 21888242871839275222246405745257275088548364400416034343698203145182135280980, + 21888242871839275222246405745257275088548364400416034343698203036434132037991, 2160383177864324, ]), ]; @@ -32845,7 +32845,7 @@ pk_aggregation (CIRCUIT 5) ------------------------------------- ************************************/ -pub global PK_AGGREGATION_BIT_PK: u32 = 52; +pub global PK_AGGREGATION_BIT_PK: u32 = 53; pub global PK_AGGREGATION_CONFIGS: PkAggregationConfigs = PkAggregationConfigs::new(QIS); /************************************ @@ -32854,8 +32854,8 @@ user_data_encryption (USED FOR DATA ENCRYPTION) ------------------------------------- ************************************/ -pub global USER_DATA_ENCRYPTION_BIT_PK: u32 = 52; -pub global USER_DATA_ENCRYPTION_BIT_CT: u32 = 52; +pub global USER_DATA_ENCRYPTION_BIT_PK: u32 = 53; +pub global USER_DATA_ENCRYPTION_BIT_CT: u32 = 53; pub global USER_DATA_ENCRYPTION_BIT_U: u32 = 1; pub global USER_DATA_ENCRYPTION_BIT_E0: u32 = 105; pub global USER_DATA_ENCRYPTION_BIT_E1: u32 = 5; @@ -32868,7 +32868,7 @@ pub global USER_DATA_ENCRYPTION_BIT_P2: u32 = 52; pub global USER_DATA_ENCRYPTION_K0IS: [Field; L] = [1553741877321401, 3467771713378059, 3107483745689273, 4188347660158895]; pub global USER_DATA_ENCRYPTION_PK_BOUNDS: [Field; L] = - [1125899911102464, 2251799813881856, 2251799815716864, 2251799817289728]; + [2251799822204928, 4503599627763712, 4503599631433728, 4503599634579456]; pub global USER_DATA_ENCRYPTION_E0_BOUND: Field = 39614081257132168796771975168000; pub global USER_DATA_ENCRYPTION_E1_BOUND: Field = 20; pub global USER_DATA_ENCRYPTION_U_BOUND: Field = 1; diff --git a/circuits/lib/src/core/threshold/pk_aggregation.nr b/circuits/lib/src/core/threshold/pk_aggregation.nr index d0f3d854a5..91efaf8326 100644 --- a/circuits/lib/src/core/threshold/pk_aggregation.nr +++ b/circuits/lib/src/core/threshold/pk_aggregation.nr @@ -23,8 +23,9 @@ impl Configs { /// Public Key Aggregation (Circuit 5). /// /// Verifies that for each CRT basis l and each coefficient i: -/// - pk0_agg[l][i] = sum_h(pk0[h][l][i]) mod q_l -/// - pk1_agg[l][i] = sum_h(pk1[h][l][i]) mod q_l +/// - pk0_agg[l][i] = sum_h(pk0[h][l][i]) mod q_l (witnesses use centered coefficients; aggregation +/// uses a half-q shift so [`ModU128::reduce_mod`] sees small non-negative integers) +/// - pk1_agg[l][i] = pk1[0][l][i] (all parties share pk1 = a, aggregated pk1 = a) pub struct PkAggregation { /// Circuit parameters including CRT moduli configs: Configs, @@ -74,7 +75,7 @@ impl PkAggregation; L]; H], pk_agg: [Polynomial; L], @@ -83,21 +84,33 @@ impl PkAggregation PkAggregation, /// Set when all fold steps have completed. pub result: Option, + /// `start` was called with zero proofs — folding is complete with no aggregate. + #[serde(default)] + pub fold_input_was_empty: bool, } impl ProofFoldState { @@ -38,6 +41,7 @@ impl ProofFoldState { remaining: Vec::new(), total_steps: None, result: None, + fold_input_was_empty: false, } } @@ -59,7 +63,7 @@ impl ProofFoldState { /// Begin folding `proofs` sequentially. /// - /// - 0 proofs → `result` stays `None` + /// - 0 proofs → `result` stays `None`, `fold_input_was_empty` is set (caller can treat fold as done) /// - 1 proof → `result` is set immediately, no ZK request dispatched /// - N proofs → first fold step dispatched; subsequent steps follow via `handle_response` pub fn start( @@ -70,9 +74,17 @@ impl ProofFoldState { e3_id: &E3id, ec: &EventContext, ) -> Result<()> { + self.correlation = None; + self.accumulated = None; + self.remaining.clear(); + self.total_steps = None; + self.result = None; + self.fold_input_was_empty = false; + match proofs.len() { 0 => { info!("{label}: no proofs to fold"); + self.fold_input_was_empty = true; Ok(()) } 1 => { diff --git a/crates/aggregator/src/publickey_aggregator.rs b/crates/aggregator/src/publickey_aggregator.rs index 9768b72b82..10f9f3bccb 100644 --- a/crates/aggregator/src/publickey_aggregator.rs +++ b/crates/aggregator/src/publickey_aggregator.rs @@ -7,7 +7,6 @@ use crate::proof_fold::ProofFoldState; use actix::prelude::*; use anyhow::Result; -use e3_bfv_client::client::compute_pk_commitment; use e3_data::Persistable; use e3_events::{ prelude::*, BusHandle, ComputeResponse, ComputeResponseKind, DKGRecursiveAggregationComplete, @@ -53,11 +52,10 @@ pub enum PublicKeyAggregatorState { }, GeneratingC5Proof { public_key: ArcBytes, - public_key_hash: [u8; 32], keyshare_bytes: Vec, nodes: OrderedSet, /// DKG recursive proofs per party (restart-critical). - dkg_node_proofs: HashMap, + dkg_node_proofs: HashMap>, honest_party_ids: BTreeSet, dishonest_parties: BTreeSet, cross_node_fold: ProofFoldState, @@ -91,6 +89,8 @@ pub struct PublicKeyAggregator { e3_id: E3id, state: Persistable, params_preset: BfvPreset, + /// DKG recursive aggregation events received before entering GeneratingC5Proof. + early_dkg_proofs: Vec>, } pub struct PublicKeyAggregatorParams { @@ -114,6 +114,7 @@ impl PublicKeyAggregator { e3_id: params.e3_id, state, params_preset: params.params_preset, + early_dkg_proofs: Vec::new(), } } @@ -299,48 +300,36 @@ impl PublicKeyAggregator { keyshares: honest_keyshares_set.clone(), })?; - let public_key_hash = compute_pk_commitment( - pubkey.clone(), - self.fhe.params.degree(), - self.fhe.params.plaintext(), - self.fhe.params.moduli().to_vec(), - )?; - + let committee_h = honest_keyshares.len(); let honest_nodes_set = OrderedSet::from(honest_nodes); + let keyshare_bytes: Vec<_> = honest_keyshares_set.iter().cloned().collect(); // Publish pending event before transitioning state so a publish // failure leaves us in VerifyingC1 (retryable) rather than // GeneratingC5Proof (no retry path). - let committee_h = honest_keyshares.len(); - - info!("Publishing PkAggregationProofPending for C5 proof generation..."); let pubkey = ArcBytes::from_bytes(&pubkey); + info!("Publishing PkAggregationProofPending for C5 proof generation..."); self.bus.publish( PkAggregationProofPending { e3_id: self.e3_id.clone(), proof_request: PkAggregationProofRequest { - keyshare_bytes: honest_keyshares.clone(), + keyshare_bytes: keyshare_bytes.clone(), aggregated_pk_bytes: pubkey.clone(), params_preset: self.params_preset.clone(), - // this field is not really used in the circuit, we only use H committee_n: committee_h, committee_h, - // this field is not really used in the circuit, we only use H committee_threshold: 0, }, public_key: pubkey.clone(), - public_key_hash, nodes: honest_nodes_set.clone(), }, ec.clone(), )?; - // Transition to GeneratingC5Proof with restart-critical fold fields self.state.try_mutate(&ec, |_| { Ok(PublicKeyAggregatorState::GeneratingC5Proof { public_key: pubkey.clone(), - public_key_hash, - keyshare_bytes: honest_keyshares, + keyshare_bytes, nodes: honest_nodes_set, dkg_node_proofs: HashMap::new(), honest_party_ids: honest_party_ids.clone(), @@ -351,6 +340,12 @@ impl PublicKeyAggregator { }) })?; + // Replay any DKG proofs that arrived before we entered GeneratingC5Proof. + let early = std::mem::take(&mut self.early_dkg_proofs); + for event in early { + self.handle_dkg_recursive_aggregation_complete(event)?; + } + self.try_start_cross_node_fold(&ec)?; Ok(()) @@ -381,7 +376,6 @@ impl PublicKeyAggregator { self.state.try_mutate(&ec, |state| { let PublicKeyAggregatorState::GeneratingC5Proof { public_key, - public_key_hash, keyshare_bytes, nodes, dkg_node_proofs, @@ -395,7 +389,6 @@ impl PublicKeyAggregator { }; Ok(PublicKeyAggregatorState::GeneratingC5Proof { public_key, - public_key_hash, keyshare_bytes, nodes, dkg_node_proofs, @@ -426,6 +419,11 @@ impl PublicKeyAggregator { dkg_node_proofs, .. }) = state.as_ref() else { + info!( + "PublicKeyAggregator: early DKG proof from party {} — buffering until GeneratingC5Proof", + msg.party_id + ); + self.early_dkg_proofs.push(TypedEvent::new(msg, ec)); return Ok(()); }; if dkg_node_proofs.contains_key(&msg.party_id) { @@ -445,7 +443,6 @@ impl PublicKeyAggregator { self.state.try_mutate(&ec, |state| { let PublicKeyAggregatorState::GeneratingC5Proof { public_key, - public_key_hash, keyshare_bytes, nodes, mut dkg_node_proofs, @@ -461,7 +458,6 @@ impl PublicKeyAggregator { dkg_node_proofs.insert(msg.party_id, msg.aggregated_proof); Ok(PublicKeyAggregatorState::GeneratingC5Proof { public_key, - public_key_hash, keyshare_bytes, nodes, dkg_node_proofs, @@ -497,18 +493,28 @@ impl PublicKeyAggregator { return Ok(()); } + // Collect non-None proofs from honest parties for cross-node folding. + // Folding is skipped only when all honest-party proofs are None (every node + // reported aggregation disabled). A mixed Some/None scenario should not occur + // in practice because proof_aggregation_enabled is an E3-level flag shared by all nodes. let mut pairs: Vec<_> = dkg_node_proofs .iter() .filter(|(pid, _)| honest_party_ids.contains(pid)) - .map(|(pid, p)| (*pid, p.clone())) + .filter_map(|(pid, p)| p.as_ref().map(|proof| (*pid, proof.clone()))) .collect(); pairs.sort_by_key(|(pid, _)| *pid); let proofs: Vec = pairs.into_iter().map(|(_, p)| p).collect(); + // If no proofs to fold (aggregation was disabled), try publishing immediately + if proofs.is_empty() { + info!("PublicKeyAggregator: proof aggregation disabled — skipping cross-node fold"); + self.try_publish_complete()?; + return Ok(()); + } + self.state.try_mutate(ec, |state| { let PublicKeyAggregatorState::GeneratingC5Proof { public_key, - public_key_hash, keyshare_bytes, nodes, dkg_node_proofs, @@ -534,7 +540,6 @@ impl PublicKeyAggregator { )?; Ok(PublicKeyAggregatorState::GeneratingC5Proof { public_key, - public_key_hash, keyshare_bytes, nodes, dkg_node_proofs, @@ -552,7 +557,6 @@ impl PublicKeyAggregator { fn try_publish_complete(&mut self) -> Result<()> { let PublicKeyAggregatorState::GeneratingC5Proof { public_key, - public_key_hash, nodes, c5_proof_pending, cross_node_fold, @@ -566,25 +570,58 @@ impl PublicKeyAggregator { return Ok(()); }; - let (Some(c5_proof), Some(cross_node_proof)) = - (c5_proof_pending.as_ref(), cross_node_fold.result.as_ref()) - else { + let Some(c5_proof) = c5_proof_pending.as_ref() else { return Ok(()); }; + // Cross-node fold result is optional — None when proof aggregation is disabled + let dkg_aggregated_proof = cross_node_fold.result.clone(); + + // If aggregation is enabled but fold hasn't completed yet, wait + let all_proofs_are_none = self + .state + .get() + .and_then(|s| { + if let PublicKeyAggregatorState::GeneratingC5Proof { + dkg_node_proofs, + honest_party_ids, + .. + } = &s + { + let all_present = honest_party_ids + .iter() + .all(|id| dkg_node_proofs.contains_key(id)); + Some(all_present && dkg_node_proofs.values().all(|p| p.is_none())) + } else { + None + } + }) + .unwrap_or(false); + + if dkg_aggregated_proof.is_none() && !all_proofs_are_none { + // Aggregation is enabled but fold not done yet — wait + return Ok(()); + } + let ec = last_ec .clone() .ok_or_else(|| anyhow::anyhow!("No EventContext for publish"))?; - info!("Both C5 and cross-node DKG proof ready — publishing PublicKeyAggregated"); + info!( + "C5 proof ready — publishing PublicKeyAggregated (dkg_aggregated_proof={})", + if dkg_aggregated_proof.is_some() { + "present" + } else { + "skipped" + } + ); let event = PublicKeyAggregated { pubkey: public_key.clone(), - public_key_hash, e3_id: self.e3_id.clone(), nodes: nodes.clone(), pk_aggregation_proof: Some(c5_proof.clone()), - dkg_aggregated_proof: Some(cross_node_proof.clone()), + dkg_aggregated_proof, }; self.bus.publish(event, ec.clone())?; @@ -618,7 +655,6 @@ impl PublicKeyAggregator { self.state.try_mutate_without_context(|state| { let PublicKeyAggregatorState::GeneratingC5Proof { public_key, - public_key_hash, keyshare_bytes, nodes, dkg_node_proofs, @@ -641,7 +677,6 @@ impl PublicKeyAggregator { )?; Ok(PublicKeyAggregatorState::GeneratingC5Proof { public_key, - public_key_hash, keyshare_bytes, nodes, dkg_node_proofs, diff --git a/crates/aggregator/src/threshold_plaintext_aggregator.rs b/crates/aggregator/src/threshold_plaintext_aggregator.rs index d1e51d2334..946473dbb7 100644 --- a/crates/aggregator/src/threshold_plaintext_aggregator.rs +++ b/crates/aggregator/src/threshold_plaintext_aggregator.rs @@ -25,6 +25,7 @@ use e3_trbfv::{ }; use e3_utils::NotifySync; use e3_utils::{utility_types::ArcBytes, MAILBOX_LIMIT}; +use e3_zk_helpers::circuits::threshold::decrypted_shares_aggregation::MAX_MSG_NON_ZERO_COEFFS; use tracing::{debug, info, trace, warn}; #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] @@ -535,12 +536,13 @@ impl ThresholdPlaintextAggregator { /// Publish `PlaintextAggregated` when both C7 proofs and C6 fold are complete. fn try_publish_complete(&mut self) -> Result<()> { - let (Some(c7_proofs), Some(c6_proof)) = ( - self.c7_proofs_pending.as_ref(), - self.c6_fold.result.as_ref(), - ) else { + let Some(c7_proofs) = self.c7_proofs_pending.as_ref() else { return Ok(()); }; + let c6_ready = self.c6_fold.result.is_some() || self.c6_fold.fold_input_was_empty; + if !c6_ready { + return Ok(()); + } let state: GeneratingC7Proof = self .state @@ -555,11 +557,26 @@ impl ThresholdPlaintextAggregator { info!("Both C7 and C6 fold proof ready — publishing PlaintextAggregated"); + let len = MAX_MSG_NON_ZERO_COEFFS * 8; + let decrypted_output: Vec = state + .plaintext + .iter() + .map(|pt| { + let mut bytes = pt.extract_bytes(); + if bytes.len() >= len { + bytes.truncate(len); + } else { + bytes.resize(len, 0); + } + ArcBytes::from_bytes(&bytes) + }) + .collect(); + let event = PlaintextAggregated { - decrypted_output: state.plaintext.clone(), + decrypted_output, e3_id: self.e3_id.clone(), aggregation_proofs: c7_proofs.clone(), - c6_aggregated_proof: Some(c6_proof.clone()), + c6_aggregated_proof: self.c6_fold.result.clone(), }; info!( diff --git a/crates/events/src/enclave_event/compute_request/zk.rs b/crates/events/src/enclave_event/compute_request/zk.rs index 17bb1234b8..df65c93fbd 100644 --- a/crates/events/src/enclave_event/compute_request/zk.rs +++ b/crates/events/src/enclave_event/compute_request/zk.rs @@ -241,6 +241,13 @@ pub struct ThresholdShareDecryptionProofRequest { pub d_share_bytes: Vec, /// BFV preset for parameter resolution. pub params_preset: BfvPreset, + /// When false, skip wrapper proofs for recursive C6 folding (mirrors DKG `proof_aggregation_enabled`). + #[serde(default = "default_proof_aggregation_enabled")] + pub proof_aggregation_enabled: bool, +} + +fn default_proof_aggregation_enabled() -> bool { + true } /// Response containing generated proofs for threshold share decryption (C6). diff --git a/crates/events/src/enclave_event/dkg_recursive_aggregation_complete.rs b/crates/events/src/enclave_event/dkg_recursive_aggregation_complete.rs index 820f483683..0458aabdbc 100644 --- a/crates/events/src/enclave_event/dkg_recursive_aggregation_complete.rs +++ b/crates/events/src/enclave_event/dkg_recursive_aggregation_complete.rs @@ -14,9 +14,10 @@ use crate::{E3id, Proof}; use serde::{Deserialize, Serialize}; /// NodeProofAggregator -> PublicKeyAggregator: fully aggregated DKG node proof. +/// When proof aggregation is disabled for the E3, `aggregated_proof` is `None`. #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] pub struct DKGRecursiveAggregationComplete { pub e3_id: E3id, pub party_id: u64, - pub aggregated_proof: Proof, + pub aggregated_proof: Option, } diff --git a/crates/events/src/enclave_event/e3_requested.rs b/crates/events/src/enclave_event/e3_requested.rs index bd56fc6490..8c5432881c 100644 --- a/crates/events/src/enclave_event/e3_requested.rs +++ b/crates/events/src/enclave_event/e3_requested.rs @@ -28,6 +28,15 @@ pub struct E3Requested { pub esi_per_ct: usize, /// The FHE parameters pub params: ArcBytes, + /// When true, ciphernodes generate wrapper/fold proofs for DKG proof + /// aggregation (public verifiability). When false, wrapper/fold proofs + /// are skipped to reduce latency. C5 and C7 proofs are always generated. + #[serde(default = "default_proof_aggregation")] + pub proof_aggregation_enabled: bool, +} + +fn default_proof_aggregation() -> bool { + true } impl Default for E3Requested { @@ -40,6 +49,7 @@ impl Default for E3Requested { seed: Seed([0u8; 32]), threshold_m: 0, threshold_n: 0, + proof_aggregation_enabled: true, } } } diff --git a/crates/events/src/enclave_event/pk_aggregation_proof_pending.rs b/crates/events/src/enclave_event/pk_aggregation_proof_pending.rs index 52dd677868..19686f493b 100644 --- a/crates/events/src/enclave_event/pk_aggregation_proof_pending.rs +++ b/crates/events/src/enclave_event/pk_aggregation_proof_pending.rs @@ -21,6 +21,5 @@ pub struct PkAggregationProofPending { pub e3_id: E3id, pub proof_request: PkAggregationProofRequest, pub public_key: ArcBytes, - pub public_key_hash: [u8; 32], pub nodes: OrderedSet, } diff --git a/crates/events/src/enclave_event/publickey_aggregated.rs b/crates/events/src/enclave_event/publickey_aggregated.rs index 5baa0033ae..9ba9130dee 100644 --- a/crates/events/src/enclave_event/publickey_aggregated.rs +++ b/crates/events/src/enclave_event/publickey_aggregated.rs @@ -17,8 +17,6 @@ use std::fmt::{self, Display}; pub struct PublicKeyAggregated { #[derivative(Debug(format_with = "e3_utils::formatters::hexf"))] pub pubkey: ArcBytes, // TODO: ArcBytes ? - #[derivative(Debug(format_with = "e3_utils::formatters::hexf"))] - pub public_key_hash: [u8; 32], // TODO: ArcBytes32 ? pub e3_id: E3id, pub nodes: OrderedSet, /// C5 proof: proof of correct pk aggregation. diff --git a/crates/events/src/enclave_event/threshold_share_pending.rs b/crates/events/src/enclave_event/threshold_share_pending.rs index a5b0247193..e296a0c291 100644 --- a/crates/events/src/enclave_event/threshold_share_pending.rs +++ b/crates/events/src/enclave_event/threshold_share_pending.rs @@ -33,6 +33,14 @@ pub struct ThresholdSharePending { /// Required because collected_encryption_keys may be filtered for expulsions, /// making positional indices diverge from actual party IDs. pub recipient_party_ids: Vec, + /// When true, wrapper/fold proofs are generated for DKG proof aggregation. + /// When false, proof aggregation is skipped (only raw C1-C4 proofs generated). + #[serde(default = "default_true")] + pub proof_aggregation_enabled: bool, +} + +fn default_true() -> bool { + true } impl Display for ThresholdSharePending { diff --git a/crates/evm-helpers/src/contracts.rs b/crates/evm-helpers/src/contracts.rs index 30b6e4e315..26dc174910 100644 --- a/crates/evm-helpers/src/contracts.rs +++ b/crates/evm-helpers/src/contracts.rs @@ -58,10 +58,12 @@ sol! { bytes e3ProgramParams; bytes customParams; address decryptionVerifier; + address pkVerifier; bytes32 committeePublicKey; bytes32 ciphertextOutput; bytes plaintextOutput; address requester; + bool proofAggregationEnabled; } #[derive(Debug)] @@ -72,6 +74,7 @@ sol! { bytes e3ProgramParams; bytes computeProviderParams; bytes customParams; + bool proofAggregationEnabled; } #[derive(Debug, PartialEq)] @@ -107,7 +110,6 @@ sol! { uint256 dkgWindow; uint256 computeWindow; uint256 decryptionWindow; - uint256 gracePeriod; } #[derive(Debug)] @@ -121,15 +123,12 @@ sol! { #[sol(rpc)] contract Enclave { uint256 public nexte3Id = 0; - mapping(uint256 e3Id => uint256 inputCount) public inputCounts; - mapping(uint256 e3Id => bytes params) public e3Params; mapping(address e3Program => bool allowed) public e3Programs; function request(E3RequestParams calldata requestParams) external returns (uint256 e3Id, E3 memory e3); function enableE3Program(address e3Program) public returns (bool success); function publishCiphertextOutput(uint256 e3Id, bytes calldata ciphertextOutput, bytes calldata proof) external returns (bool success); function publishPlaintextOutput(uint256 e3Id, bytes calldata data, bytes calldata proof) external returns (bool success); function getE3(uint256 e3Id) external view returns (E3 memory e3); - function getInputRoot(uint256 e3Id) public view returns (uint256); function getE3Quote(E3RequestParams memory request) external view returns (uint256 fee); function getE3Stage(uint256 e3Id) external view returns (E3Stage stage); function getFailureReason(uint256 e3Id) external view returns (FailureReason reason); @@ -148,18 +147,9 @@ pub trait EnclaveRead { /// Get the details of an E3 by ID async fn get_e3(&self, e3_id: U256) -> Result; - /// Get the input count for a specific E3 ID - async fn get_input_count(&self, e3_id: U256) -> Result; - /// Get the latest block number async fn get_latest_block(&self) -> Result; - /// Get the root for a specific ID - async fn get_input_root(&self, id: U256) -> Result; - - /// Get E3 parameters for a specific E3 ID - async fn get_e3_params(&self, e3_id: U256) -> Result; - /// Check if an E3 program is enabled async fn is_e3_program_enabled(&self, e3_program: Address) -> Result; @@ -171,6 +161,7 @@ pub trait EnclaveRead { e3_program: Address, e3_params: Bytes, compute_provider_params: Bytes, + proof_aggregation_enabled: bool, ) -> Result; async fn get_e3_stage(&self, e3_id: U256) -> Result; @@ -196,6 +187,7 @@ pub trait EnclaveWrite { e3_params: Bytes, compute_provider_params: Bytes, custom_params: Bytes, + proof_aggregation_enabled: bool, ) -> Result<(TransactionReceipt, U256)>; /// Enable an E3 program @@ -363,29 +355,11 @@ where Ok(e3_return) } - async fn get_input_count(&self, e3_id: U256) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let input_count = contract.inputCounts(e3_id).call().await?; - Ok(input_count) - } - async fn get_latest_block(&self) -> Result { let block = self.provider.get_block_number().await?; Ok(block) } - async fn get_input_root(&self, id: U256) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let root = contract.getInputRoot(id).call().await?; - Ok(root) - } - - async fn get_e3_params(&self, e3_id: U256) -> Result { - let contract = Enclave::new(self.contract_address, &self.provider); - let params = contract.e3Params(e3_id).call().await?; - Ok(params) - } - async fn is_e3_program_enabled(&self, e3_program: Address) -> Result { let contract = Enclave::new(self.contract_address, &self.provider); let enabled = contract.e3Programs(e3_program).call().await?; @@ -399,6 +373,7 @@ where e3_program: Address, e3_params: Bytes, compute_provider_params: Bytes, + proof_aggregation_enabled: bool, ) -> Result { let e3_request = E3RequestParams { committeeSize: committee_size, @@ -407,6 +382,7 @@ where e3ProgramParams: e3_params, computeProviderParams: compute_provider_params, customParams: Bytes::new(), + proofAggregationEnabled: proof_aggregation_enabled, }; let contract = Enclave::new(self.contract_address, &self.provider); @@ -456,6 +432,7 @@ impl EnclaveWrite for EnclaveContract { e3_params: Bytes, compute_provider_params: Bytes, custom_params: Bytes, + proof_aggregation_enabled: bool, ) -> Result<(TransactionReceipt, U256)> { let _guard = NONCE_LOCK.lock().await; let wallet_addr = self @@ -473,6 +450,7 @@ impl EnclaveWrite for EnclaveContract { e3ProgramParams: e3_params.clone(), computeProviderParams: compute_provider_params.clone(), customParams: custom_params.clone(), + proofAggregationEnabled: proof_aggregation_enabled, }; let builder = contract.request(e3_request).nonce(nonce); diff --git a/crates/evm-helpers/src/events.rs b/crates/evm-helpers/src/events.rs index 1d25a33ac3..1e3468ca04 100644 --- a/crates/evm-helpers/src/events.rs +++ b/crates/evm-helpers/src/events.rs @@ -22,6 +22,11 @@ sol! { function verifyDecryption(bytes data) external view returns (bool); } + #[derive(Debug)] + interface IPkVerifier { + function verify(bytes memory proof) external view returns (bytes32 pkCommitment); + } + #[derive(Debug)] enum CommitteeSize { Micro, @@ -41,10 +46,12 @@ sol! { bytes e3ProgramParams; bytes customParams; IDecryptionVerifier decryptionVerifier; + IPkVerifier pkVerifier; bytes32 committeePublicKey; bytes32 ciphertextOutput; bytes plaintextOutput; address requester; + bool proofAggregationEnabled; } #[derive(Debug)] diff --git a/crates/evm/Cargo.toml b/crates/evm/Cargo.toml index 75299bfa28..6a039230c0 100644 --- a/crates/evm/Cargo.toml +++ b/crates/evm/Cargo.toml @@ -34,10 +34,11 @@ url = { workspace = true } zeroize = { workspace = true } [dev-dependencies] -e3-evm = { workspace = true } -e3-entrypoint = { workspace = true } +alloy-dyn-abi = { workspace = true } e3-ciphernode-builder = { workspace = true } -e3-test-helpers = { workspace = true } +e3-entrypoint = { workspace = true } e3-events = { workspace = true, features = ["test-helpers"] } +e3-evm = { workspace = true } +e3-test-helpers = { workspace = true } tokio = { workspace = true, features = ["test-util"] } tracing-subscriber = { workspace = true } diff --git a/crates/evm/src/ciphernode_registry_sol.rs b/crates/evm/src/ciphernode_registry_sol.rs index 686c71c40d..2ada5ef6ad 100644 --- a/crates/evm/src/ciphernode_registry_sol.rs +++ b/crates/evm/src/ciphernode_registry_sol.rs @@ -8,11 +8,11 @@ use crate::{ error_decoder::format_evm_error, events::{EnclaveEvmEvent, EvmEventProcessor}, evm_parser::EvmParser, - helpers::{send_tx_with_retry, EthProvider}, + helpers::{encode_zk_proof, send_tx_with_retry, EthProvider}, }; use actix::prelude::*; use alloy::{ - primitives::{Address, Bytes, FixedBytes, LogData, B256, U256}, + primitives::{Address, Bytes, LogData, B256, U256}, providers::{Provider, WalletProvider}, rpc::types::TransactionReceipt, sol, @@ -21,7 +21,7 @@ use alloy::{ use anyhow::Result; use e3_events::{ prelude::*, run_once, BusHandle, CommitteeFinalizeRequested, CommitteeFinalized, E3id, EType, - EffectsEnabled, EnclaveEvent, EnclaveEventData, EventSubscriber, EventType, OrderedSet, + EffectsEnabled, EnclaveEvent, EnclaveEventData, EventSubscriber, EventType, OrderedSet, Proof, PublicKeyAggregated, Seed, Shutdown, TicketGenerated, TicketId, }; use e3_utils::{ArcBytes, NotifySync, MAILBOX_LIMIT}; @@ -435,8 +435,8 @@ impl Handler Self::Result { let e3_id = msg.e3_id.clone(); let pubkey = msg.pubkey.clone(); - let public_key_hash = msg.public_key_hash.clone(); let nodes = msg.nodes.clone(); + let pk_aggregation_proof = msg.pk_aggregation_proof.clone(); let contract_address = self.contract_address; let provider = self.provider.clone(); let bus = self.bus.clone(); @@ -448,7 +448,7 @@ impl Handler, public_key: ArcBytes, - public_key_hash: [u8; 32], + pk_aggregation_proof: Option<&Proof>, ) -> Result { let e3_id_u256: U256 = e3_id.try_into()?; let public_key_bytes = Bytes::from(public_key.extract_bytes()); - let public_key_hash_fixed = FixedBytes::from(public_key_hash); + + let proof: Bytes = encode_zk_proof( + pk_aggregation_proof.ok_or_else(|| anyhow::anyhow!("pk_aggregation_proof required"))?, + )?; + let nodes_vec: Vec
= nodes .into_iter() .filter_map(|node| node.parse().ok()) @@ -559,6 +563,7 @@ pub async fn publish_committee_to_registry Handler Handler Box::pin({ let contract_address = self.contract_address; let provider = self.provider.clone(); - let bus = self.bus.clone(); async move { let result = process_e3_failure(provider, contract_address, msg.e3_id.clone()).await; @@ -211,6 +223,7 @@ async fn publish_plaintext_output( contract_address: Address, e3_id: E3id, decrypted_output: Vec, + aggregation_proof: Option<&Proof>, ) -> Result { let e3_id: U256 = e3_id.try_into()?; @@ -221,14 +234,18 @@ async fn publish_plaintext_output( .pending() .await?; - // RPC may not have synced ciphertext output being published yet + let proof = aggregation_proof + .map(encode_zk_proof) + .transpose()? + .ok_or_else(|| anyhow::anyhow!("C7 proof missing or invalid"))?; + send_tx_with_retry( "publishPlaintextOutput", &["CiphertextOutputNotPublished"], || { info!("publishPlaintextOutput() e3_id={:?}", e3_id); - let proof = Bytes::from(vec![1]); let decrypted_output = Bytes::from(decrypted_output.clone()); + let proof = proof.clone(); let contract = IEnclave::new(contract_address, provider.provider()); async move { diff --git a/crates/evm/src/helpers.rs b/crates/evm/src/helpers.rs index 7c14c184ab..82005b18a6 100644 --- a/crates/evm/src/helpers.rs +++ b/crates/evm/src/helpers.rs @@ -28,16 +28,43 @@ use alloy::{ Authorization, }, }; +use alloy::{primitives::Bytes, sol_types::SolValue}; use anyhow::{Context, Result}; use base64::{engine::general_purpose::STANDARD, Engine}; use e3_config::{RpcAuth, RPC}; use e3_crypto::Cipher; use e3_data::Repository; +use e3_events::Proof; use e3_utils::{retry_with_backoff, RetryError}; use std::{env, future::Future, pin::Pin, sync::Arc}; use tracing::info; use zeroize::{Zeroize, Zeroizing}; +/// ABI-encodes a ZK proof for EVM verifiers (C5 pk, C7 decryption, etc.). +/// Format: abi.encode(rawProof, publicInputs). Public inputs as bytes32[]. +pub fn encode_zk_proof(proof: &Proof) -> Result { + let signals: &[u8] = &*proof.public_signals; + if signals.is_empty() { + anyhow::bail!("public_signals must be non-empty"); + } + if signals.len() % 32 != 0 { + anyhow::bail!( + "public_signals length must be a multiple of 32, got {}", + signals.len() + ); + } + let mut inputs = Vec::with_capacity(signals.len() / 32); + for chunk in signals.chunks_exact(32) { + let mut arr = [0u8; 32]; + arr.copy_from_slice(chunk); + inputs.push(arr); + } + + Ok(Bytes::from( + ((&*proof.data).to_vec(), inputs).abi_encode_params(), + )) +} + pub trait AuthConversions { fn to_header_value(&self) -> Option; fn to_ws_auth(&self) -> Option; @@ -289,6 +316,50 @@ where #[cfg(test)] mod tests { use super::*; + use alloy_dyn_abi::DynSolType; + use e3_events::{CircuitName, Proof}; + use e3_utils::ArcBytes; + + /// Verifies encode_zk_proof produces ABI that matches BfvPkVerifier/BfvDecryptionVerifier: + /// abi.decode(proof, (bytes, bytes32[])) + #[test] + fn test_encode_zk_proof_abi_format() { + let raw_proof = vec![1u8, 2, 3, 4, 5]; + let public_signals: Vec = (0..64).map(|i| i as u8).collect(); // 2 × 32-byte fields + let proof = Proof::new( + CircuitName::PkAggregation, + ArcBytes::from_bytes(&raw_proof), + ArcBytes::from_bytes(&public_signals), + ); + + let encoded = encode_zk_proof(&proof).expect("encoding should succeed"); + + let tuple_type = DynSolType::Tuple(vec![ + DynSolType::Bytes, + DynSolType::Array(Box::new(DynSolType::FixedBytes(32))), + ]); + // Pair encode_zk_proof's abi_encode_params with abi_decode_params (not abi_decode). + tuple_type.abi_decode_params(&encoded).expect( + "encoded proof should decode as (bytes, bytes32[]) - matches contract abi.decode", + ); + } + + #[test] + fn test_encode_zk_proof_rejects_invalid() { + let proof = Proof::new( + CircuitName::PkAggregation, + ArcBytes::from_bytes(&[1, 2, 3]), + ArcBytes::from_bytes(&[0u8; 31]), // not divisible by 32 + ); + assert!(encode_zk_proof(&proof).is_err()); + + let proof_empty = Proof::new( + CircuitName::PkAggregation, + ArcBytes::from_bytes(&[1, 2, 3]), + ArcBytes::from_bytes(&[]), + ); + assert!(encode_zk_proof(&proof_empty).is_err()); + } #[test] fn test_rpc_conversions() -> Result<()> { diff --git a/crates/indexer/tests/fixtures/fake_enclave.sol b/crates/indexer/tests/fixtures/fake_enclave.sol index ec8da583fb..925e7d3e95 100644 --- a/crates/indexer/tests/fixtures/fake_enclave.sol +++ b/crates/indexer/tests/fixtures/fake_enclave.sol @@ -42,6 +42,7 @@ contract FakeEnclave { encryptionSchemeId: bytes32(keccak256("AES-256-GCM")), e3Program: 0x7F3E4df648B8Cb96C1D343be976b91B97CaD5c21, decryptionVerifier: 0x4B0D8c2E5f7a6c832f8b16d3aB0e7F5d9E9B24b1, + pkVerifier: 0x5C1e9D3f8A7B6c932F9C27e4Ab1F8F6e0F0C35c2, e3ProgramParams: abi.encode(42, "testParams"), customParams: abi.encode("custom_params"), committeePublicKey: bytes32(keccak256("committee_public_key")), @@ -69,6 +70,7 @@ struct E3 { bytes e3ProgramParams; bytes customParams; address decryptionVerifier; + address pkVerifier; bytes32 committeePublicKey; bytes32 ciphertextOutput; bytes plaintextOutput; diff --git a/crates/keyshare/src/ext.rs b/crates/keyshare/src/ext.rs index e3cb47105e..e2c67e22d8 100644 --- a/crates/keyshare/src/ext.rs +++ b/crates/keyshare/src/ext.rs @@ -69,6 +69,7 @@ impl E3Extension for ThresholdKeyshareExtension { meta.threshold_n as u64, meta.params.clone(), self.address.clone(), + meta.proof_aggregation_enabled, ))); // New container with None diff --git a/crates/keyshare/src/threshold_keyshare.rs b/crates/keyshare/src/threshold_keyshare.rs index 907dc09e92..844fedb58a 100644 --- a/crates/keyshare/src/threshold_keyshare.rs +++ b/crates/keyshare/src/threshold_keyshare.rs @@ -259,6 +259,12 @@ pub struct ThresholdKeyshareState { pub aggregated_pk: Option, pub expelled_parties: HashSet, pub honest_parties: Option>, + #[serde(default = "default_proof_agg")] + pub proof_aggregation_enabled: bool, +} + +fn default_proof_agg() -> bool { + true } impl ThresholdKeyshareState { @@ -270,6 +276,7 @@ impl ThresholdKeyshareState { threshold_n: u64, params: ArcBytes, address: String, + proof_aggregation_enabled: bool, ) -> Self { Self { e3_id, @@ -282,6 +289,7 @@ impl ThresholdKeyshareState { aggregated_pk: None, expelled_parties: HashSet::new(), honest_parties: None, + proof_aggregation_enabled, } } @@ -1198,6 +1206,11 @@ impl ThresholdKeyshare { sk_share_encryption_requests, e_sm_share_encryption_requests, recipient_party_ids, + proof_aggregation_enabled: self + .state + .try_get() + .map(|s| s.proof_aggregation_enabled) + .unwrap_or(true), }, ec.clone(), )?; @@ -2126,6 +2139,7 @@ impl ThresholdKeyshare { es_poly_sum: decrypting.es_poly_sum, d_share_bytes: d_share_poly.clone(), params_preset: threshold_preset, + proof_aggregation_enabled: state.proof_aggregation_enabled, }, }, ec.clone(), diff --git a/crates/multithread/src/multithread.rs b/crates/multithread/src/multithread.rs index a29f26f893..f49ce16857 100644 --- a/crates/multithread/src/multithread.rs +++ b/crates/multithread/src/multithread.rs @@ -455,19 +455,19 @@ fn handle_threshold_share_decryption_proof( ) })?; - // Wrap for recursive folding - let wrapped = generate_wrapper_proof(prover, &proof, &e3_id_str).map_err(|e| { - ComputeRequestError::new( - ComputeRequestErrorKind::Zk(ZkEventError::ProofGenerationFailed(format!( - "C6 wrapper proof[{}]: {}", - i, e - ))), - request.clone(), - ) - })?; - + if req.proof_aggregation_enabled { + let wrapped = generate_wrapper_proof(prover, &proof, &e3_id_str).map_err(|e| { + ComputeRequestError::new( + ComputeRequestErrorKind::Zk(ZkEventError::ProofGenerationFailed(format!( + "C6 wrapper proof[{}]: {}", + i, e + ))), + request.clone(), + ) + })?; + wrapped_proofs.push(wrapped); + } proofs.push(proof); - wrapped_proofs.push(wrapped); } Ok(ComputeResponse::zk( diff --git a/crates/request/src/meta.rs b/crates/request/src/meta.rs index 25c4551999..adf3646ce0 100644 --- a/crates/request/src/meta.rs +++ b/crates/request/src/meta.rs @@ -21,6 +21,7 @@ pub struct E3Meta { pub params: ArcBytes, pub esi_per_ct: usize, pub error_size: ArcBytes, + pub proof_aggregation_enabled: bool, } pub struct E3MetaExtension; @@ -45,6 +46,7 @@ impl E3Extension for E3MetaExtension { params, esi_per_ct, error_size, + proof_aggregation_enabled, .. } = data.clone(); @@ -56,6 +58,7 @@ impl E3Extension for E3MetaExtension { params, esi_per_ct, error_size, + proof_aggregation_enabled, }; ctx.repositories().meta(&e3_id).write(&meta); let _ = ctx.set_dependency(META_KEY, meta); diff --git a/crates/sortition/src/ciphernode_selector.rs b/crates/sortition/src/ciphernode_selector.rs index ac7e691b75..481e0cee35 100644 --- a/crates/sortition/src/ciphernode_selector.rs +++ b/crates/sortition/src/ciphernode_selector.rs @@ -30,6 +30,7 @@ fn e3_meta_from(req: &E3Requested) -> E3Meta { params: req.params.clone(), esi_per_ct: req.esi_per_ct, error_size: req.error_size.clone(), + proof_aggregation_enabled: req.proof_aggregation_enabled, } } diff --git a/crates/tests/tests/integration.rs b/crates/tests/tests/integration.rs index 53073ec8bf..f408ca43ed 100644 --- a/crates/tests/tests/integration.rs +++ b/crates/tests/tests/integration.rs @@ -720,6 +720,7 @@ async fn test_trbfv_actor() -> Result<()> { error_size, esi_per_ct: esi_per_ct as usize, params, + proof_aggregation_enabled: true, }; bus.publish_without_context(e3_requested)?; @@ -1346,7 +1347,6 @@ async fn test_stopped_keyshares_retain_state() -> Result<()> { #[actix::test] #[ignore = "Needs to be ported to trBFV system"] async fn test_duplicate_e3_id_with_different_chain_id() -> Result<()> { - use e3_bfv_client::compute_pk_commitment; use e3_events::{OrderedSet, PublicKeyAggregated, TakeEvents}; use e3_test_helpers::{ create_random_eth_addrs, create_shared_rng_from_u64, get_common_setup, simulate_libp2p_net, @@ -1476,13 +1476,6 @@ async fn test_duplicate_e3_id_with_different_chain_id() -> Result<()> { let test_pubkey = aggregate_public_key(&generate_pk_shares( ¶ms, &crpoly, &rng_test, ð_addrs, )?)?; - let public_key_hash = compute_pk_commitment( - test_pubkey.to_bytes(), - params.degree(), - params.plaintext(), - params.moduli().to_vec(), - )?; - let history_collector = ciphernodes.last().unwrap().history().unwrap(); let history = history_collector .send(TakeEvents::::new(28)) @@ -1492,7 +1485,6 @@ async fn test_duplicate_e3_id_with_different_chain_id() -> Result<()> { history.events.last().cloned().unwrap().into_data(), PublicKeyAggregated { pubkey: ArcBytes::from_bytes(&test_pubkey.to_bytes()), - public_key_hash, e3_id: E3id::new("1234", 1), nodes: OrderedSet::from(eth_addrs.clone()), pk_aggregation_proof: None, @@ -1521,13 +1513,6 @@ async fn test_duplicate_e3_id_with_different_chain_id() -> Result<()> { ¶ms, &crpoly, &rng_test, ð_addrs, )?)?; - let public_key_hash = compute_pk_commitment( - test_pubkey.to_bytes(), - params.degree(), - params.plaintext(), - params.moduli().to_vec(), - )?; - let history = history_collector .send(TakeEvents::::new(8)) .await?; @@ -1536,7 +1521,6 @@ async fn test_duplicate_e3_id_with_different_chain_id() -> Result<()> { history.events.last().cloned().unwrap().into_data(), PublicKeyAggregated { pubkey: ArcBytes::from_bytes(&test_pubkey.to_bytes()), - public_key_hash, e3_id: E3id::new("1234", 2), nodes: OrderedSet::from(eth_addrs.clone()), pk_aggregation_proof: None, diff --git a/crates/zk-helpers/src/circuits/threshold/decrypted_shares_aggregation/computation.rs b/crates/zk-helpers/src/circuits/threshold/decrypted_shares_aggregation/computation.rs index b35a634449..ed619236d0 100644 --- a/crates/zk-helpers/src/circuits/threshold/decrypted_shares_aggregation/computation.rs +++ b/crates/zk-helpers/src/circuits/threshold/decrypted_shares_aggregation/computation.rs @@ -11,6 +11,9 @@ //! with [`e3_polynomial::CrtPolynomial::reduce`]; all input coefficients are reduced to //! [0, zkp_modulus) with [`e3_polynomial::reduce`] inside [`Inputs::compute`]. +/// Max message coefficients in the C7 circuit (matches Noir's MAX_MSG_NON_ZERO_COEFFS). +pub const MAX_MSG_NON_ZERO_COEFFS: usize = 100; + use crate::calculate_bit_width; use crate::compute_q_mod_t; use crate::compute_q_mod_t_centered; @@ -155,9 +158,8 @@ impl Computation for Configs { q_inverse_mod_t, bits, bounds, - // TODO: make this configurable based on the application (e.g., CRISP = 80, - // since there's just CRISP for now we can hardcode it). - max_msg_non_zero_coeffs: 80, // Default; matches Noir's MAX_MSG_NON_ZERO_COEFFS. + // TODO: make this configurable based on the application (e.g., CRISP = 80). + max_msg_non_zero_coeffs: MAX_MSG_NON_ZERO_COEFFS, }) } } diff --git a/crates/zk-helpers/src/circuits/threshold/pk_aggregation/computation.rs b/crates/zk-helpers/src/circuits/threshold/pk_aggregation/computation.rs index 77375714bd..6ec4b6a28a 100644 --- a/crates/zk-helpers/src/circuits/threshold/pk_aggregation/computation.rs +++ b/crates/zk-helpers/src/circuits/threshold/pk_aggregation/computation.rs @@ -131,7 +131,7 @@ impl Computation for Bounds { let mut pk_bound_max = BigUint::from(0u32); for &qi in threshold_params.moduli() { - let qi_bound: BigUint = (&BigUint::from(qi) - 1u32) / 2u32; + let qi_bound: BigUint = (BigUint::from(qi) - 1u32) / 2u32; if qi_bound > pk_bound_max { pk_bound_max = qi_bound; @@ -156,34 +156,29 @@ impl Computation for Inputs { build_pair_for_preset(preset).map_err(|e| CircuitsErrors::Other(e.to_string()))?; let bit_pk = compute_modulus_bit(&threshold_params); - let moduli = threshold_params.moduli(); - - // Coefficients must be in [0, q_i), not centered to (-q_i/2, q_i/2]. The circuit sums - // party coefficients then applies reduce_mod to get a value in [0, q_l); the aggregated - // key is also in [0, q_i). Centered representatives would make the sum before reduction - // inconsistent and could break the aggregation check. let mut pk0: Vec = data.pk0_shares.clone(); // pk1 is the same (common random polynomial a) for all parties let mut pk1: Vec = (0..data.committee.h).map(|_| data.a.clone()).collect(); - // Extract pk0_agg from aggregated public key + // Extract pk0_agg and pk1_agg from aggregated public key (c[1] = a) let mut pk0_agg = CrtPolynomial::from_fhe_polynomial(&data.public_key.c.c[0]); - let mut pk1_agg = data.a.clone(); + let mut pk1_agg = CrtPolynomial::from_fhe_polynomial(&data.public_key.c.c[1]); // Compute expected_threshold_pk_commitments for each honest party // Each commitment is computed from pk0[i] and pk1[i] for party i let mut expected_threshold_pk_commitments = Vec::new(); pk0_agg.reverse(); - + pk0_agg.center(threshold_params.moduli())?; pk1_agg.reverse(); - pk1_agg.scalar_mul(&BigInt::from(data.committee.h)); - pk1_agg.reduce(moduli)?; + pk1_agg.center(threshold_params.moduli())?; for party_index in 0..data.committee.h { pk0[party_index].reverse(); + pk0[party_index].center(threshold_params.moduli())?; pk1[party_index].reverse(); + pk1[party_index].center(threshold_params.moduli())?; let commitment = compute_threshold_pk_commitment(&pk0[party_index], &pk1[party_index], bit_pk); diff --git a/crates/zk-helpers/src/circuits/threshold/pk_generation/utils.rs b/crates/zk-helpers/src/circuits/threshold/pk_generation/utils.rs index 8a4d1b1709..ce8f16c6fb 100644 --- a/crates/zk-helpers/src/circuits/threshold/pk_generation/utils.rs +++ b/crates/zk-helpers/src/circuits/threshold/pk_generation/utils.rs @@ -12,7 +12,7 @@ use e3_fhe_params::create_deterministic_crp_from_default_seed; use e3_polynomial::CrtPolynomial; /// Returns the deterministic CRP (common random polynomial) as a CRT polynomial with limbs -/// reversed per modulus, matching the representation used in the circuit. +/// reversed and coefficients centered per modulus, matching the representation used in the circuit. pub fn deterministic_crp_crt_polynomial( threshold_params: &std::sync::Arc, ) -> Result { @@ -20,6 +20,7 @@ pub fn deterministic_crp_crt_polynomial( let mut a = CrtPolynomial::from_fhe_polynomial(crp.poly()); a.reverse(); + a.center(threshold_params.moduli())?; Ok(a) } diff --git a/crates/zk-helpers/src/circuits/threshold/user_data_encryption/computation.rs b/crates/zk-helpers/src/circuits/threshold/user_data_encryption/computation.rs index cc73d7045c..607b40070d 100644 --- a/crates/zk-helpers/src/circuits/threshold/user_data_encryption/computation.rs +++ b/crates/zk-helpers/src/circuits/threshold/user_data_encryption/computation.rs @@ -272,7 +272,7 @@ impl Computation for Bounds { let k0qi = BigInt::from(k0is[i]); - // PK and R2 bounds (same as qi_bound) + // PK bounds: centered magnitude (qi-1)/2; matches pk_aggregation / C1 commitment pk_bounds.push(qi_bound.clone()); r2_bounds.push(qi_bound.clone()); @@ -403,8 +403,10 @@ impl Computation for Inputs { ct0.center(&moduli)?; ct1.center(&moduli)?; + pk0.center(&moduli)?; pk1.center(&moduli)?; + e0.center(&moduli)?; let CrtPolynomial { limbs: ct0_limbs } = ct0; diff --git a/crates/zk-helpers/src/circuits/threshold/user_data_encryption/utils.rs b/crates/zk-helpers/src/circuits/threshold/user_data_encryption/utils.rs index 087ad161a7..1ffacf9c80 100644 --- a/crates/zk-helpers/src/circuits/threshold/user_data_encryption/utils.rs +++ b/crates/zk-helpers/src/circuits/threshold/user_data_encryption/utils.rs @@ -35,10 +35,9 @@ pub fn bfv_ciphertext_to_greco( Ok((ct0is, ct1is)) } -/// Converts a BFV public key to Greco format. +/// Converts a BFV public key to Greco format for commitment computation. /// -/// Takes a BFV public key and converts it to Greco format, returning pk0is and pk1is -/// as CRT polynomials. +/// Coefficients are reversed then centered per modulus, matching C1 / C5 threshold PK proofs. /// /// # Arguments /// * `params` - BFV parameters @@ -54,10 +53,12 @@ pub fn bfv_public_key_to_greco( public_key: &PublicKey, ) -> Result<(CrtPolynomial, CrtPolynomial), CrtPolynomialError> { let moduli = params.moduli(); - - let pk0is = fhe_poly_to_crt_centered(&public_key.c.c[0], moduli)?; - let pk1is = fhe_poly_to_crt_centered(&public_key.c.c[1], moduli)?; - + let mut pk0is = CrtPolynomial::from_fhe_polynomial(&public_key.c.c[0]); + let mut pk1is = CrtPolynomial::from_fhe_polynomial(&public_key.c.c[1]); + pk0is.reverse(); + pk1is.reverse(); + pk0is.center(moduli)?; + pk1is.center(moduli)?; Ok((pk0is, pk1is)) } diff --git a/crates/zk-prover/src/actors/node_proof_aggregator.rs b/crates/zk-prover/src/actors/node_proof_aggregator.rs index 881acb67d3..d77f575578 100644 --- a/crates/zk-prover/src/actors/node_proof_aggregator.rs +++ b/crates/zk-prover/src/actors/node_proof_aggregator.rs @@ -79,6 +79,29 @@ impl NodeProofAggregator { let (msg, ec) = msg.into_components(); let e3_id = msg.e3_id.clone(); + // When proof aggregation is disabled, skip wrapping/folding entirely + // and immediately signal completion with no aggregated proof. + if !msg.proof_aggregation_enabled { + info!( + "NodeProofAggregator: proof aggregation disabled for E3 {} — skipping", + e3_id + ); + if let Err(err) = self.bus.publish( + DKGRecursiveAggregationComplete { + e3_id: e3_id.clone(), + party_id: msg.full_share.party_id, + aggregated_proof: None, + }, + ec, + ) { + error!( + "NodeProofAggregator: failed to publish DKGRecursiveAggregationComplete (skipped) for E3 {}: {err}", + e3_id + ); + } + return; + } + let sk_enc_count = msg.sk_share_encryption_requests.len(); let e_sm_enc_count = msg.e_sm_share_encryption_requests.len(); // Must mirror the formula in ProofRequestActor::handle_threshold_share_pending: @@ -263,7 +286,7 @@ impl NodeProofAggregator { DKGRecursiveAggregationComplete { e3_id: e3_id.clone(), party_id: state.party_id, - aggregated_proof, + aggregated_proof: Some(aggregated_proof), }, state.last_ec, ) { diff --git a/crates/zk-prover/src/actors/proof_request.rs b/crates/zk-prover/src/actors/proof_request.rs index a1e229e078..d8eb23991c 100644 --- a/crates/zk-prover/src/actors/proof_request.rs +++ b/crates/zk-prover/src/actors/proof_request.rs @@ -48,6 +48,8 @@ struct NodeAggregationMeta { total_expected: usize, /// Buffered C0 wrapped proof, if it arrived before meta was stored. pending_c0: Option, + /// When false, skip emitting DKGInnerProofReady (no wrapping/folding). + proof_aggregation_enabled: bool, } #[derive(Clone, Debug)] @@ -260,6 +262,13 @@ impl ProofRequestActor { addr } + /// Returns true if proof aggregation (wrapping/folding) is enabled for this E3. + fn is_proof_aggregation_enabled(&self, e3_id: &E3id) -> bool { + self.node_agg_meta + .get(e3_id) + .map_or(true, |m| m.proof_aggregation_enabled) + } + fn handle_encryption_key_pending(&mut self, msg: TypedEvent) { let (msg, ec) = msg.into_components(); let correlation_id = CorrelationId::new(); @@ -305,20 +314,23 @@ impl ProofRequestActor { party_id: msg.full_share.party_id, total_expected, pending_c0: None, + proof_aggregation_enabled: msg.proof_aggregation_enabled, }, ); // If C0 wrapped proof arrived before meta, emit DKGInnerProofReady now if let Some(c0_proof) = pending_c0 { - if let Err(err) = self.bus.publish( - DKGInnerProofReady { - e3_id: e3_id.clone(), - party_id: msg.full_share.party_id, - wrapped_proof: c0_proof, - seq: 0, - }, - ec.clone(), - ) { - error!("Failed to publish DKGInnerProofReady for C0: {err}"); + if msg.proof_aggregation_enabled { + if let Err(err) = self.bus.publish( + DKGInnerProofReady { + e3_id: e3_id.clone(), + party_id: msg.full_share.party_id, + wrapped_proof: c0_proof, + seq: 0, + }, + ec.clone(), + ) { + error!("Failed to publish DKGInnerProofReady for C0: {err}"); + } } } @@ -662,19 +674,21 @@ impl ProofRequestActor { } if let Some(meta) = self.node_agg_meta.get(&e3_id) { - if let Err(err) = self.bus.publish( - DKGInnerProofReady { - e3_id: e3_id.clone(), - party_id: meta.party_id, - wrapped_proof, - seq, - }, - ec.clone(), - ) { - error!( - "Failed to publish DKGInnerProofReady for C4 seq={}: {err}", - seq - ); + if meta.proof_aggregation_enabled { + if let Err(err) = self.bus.publish( + DKGInnerProofReady { + e3_id: e3_id.clone(), + party_id: meta.party_id, + wrapped_proof, + seq, + }, + ec.clone(), + ) { + error!( + "Failed to publish DKGInnerProofReady for C4 seq={}: {err}", + seq + ); + } } } @@ -814,7 +828,8 @@ impl ProofRequestActor { return; }; - if proofs.len() != wrapped_proofs.len() { + let aggregation_enabled = self.is_proof_aggregation_enabled(&e3_id); + if aggregation_enabled && proofs.len() != wrapped_proofs.len() { error!( "C6 proofs and wrapped_proofs length mismatch: {} vs {} — DecryptionshareCreated will not be published", proofs.len(), @@ -844,6 +859,12 @@ impl ProofRequestActor { let ec = pending.ec; + let wrapped_to_publish = if aggregation_enabled { + wrapped_proofs + } else { + Vec::new() + }; + match self.bus.publish( DecryptionshareCreated { party_id: pending.party_id, @@ -851,7 +872,7 @@ impl ProofRequestActor { e3_id: e3_id.clone(), decryption_share: pending.decryption_share, signed_decryption_proofs: signed_proofs, - wrapped_proofs, + wrapped_proofs: wrapped_to_publish, }, ec.clone(), ) { @@ -1060,19 +1081,21 @@ impl ProofRequestActor { ); if let Some(meta) = self.node_agg_meta.get(&e3_id) { - if let Err(err) = self.bus.publish( - DKGInnerProofReady { - e3_id: e3_id.clone(), - party_id: meta.party_id, - wrapped_proof, - seq, - }, - ec.clone(), - ) { - error!( - "Failed to publish DKGInnerProofReady for {:?} seq={}: {err}", - kind, seq - ); + if meta.proof_aggregation_enabled { + if let Err(err) = self.bus.publish( + DKGInnerProofReady { + e3_id: e3_id.clone(), + party_id: meta.party_id, + wrapped_proof, + seq, + }, + ec.clone(), + ) { + error!( + "Failed to publish DKGInnerProofReady for {:?} seq={}: {err}", + kind, seq + ); + } } } @@ -1352,16 +1375,18 @@ impl ProofRequestActor { // Emit DKGInnerProofReady for C0, or buffer if meta not yet available if let Some(meta) = self.node_agg_meta.get(&e3_id) { - if let Err(err) = self.bus.publish( - DKGInnerProofReady { - e3_id: e3_id.clone(), - party_id: meta.party_id, - wrapped_proof, - seq: 0, - }, - ec.clone(), - ) { - error!("Failed to publish DKGInnerProofReady for C0: {err}"); + if meta.proof_aggregation_enabled { + if let Err(err) = self.bus.publish( + DKGInnerProofReady { + e3_id: e3_id.clone(), + party_id: meta.party_id, + wrapped_proof: wrapped_proof.clone(), + seq: 0, + }, + ec.clone(), + ) { + error!("Failed to publish DKGInnerProofReady for C0: {err}"); + } } } else { // ThresholdSharePending hasn't arrived yet — buffer C0 wrapped proof @@ -1371,6 +1396,7 @@ impl ProofRequestActor { party_id: 0, total_expected: 0, pending_c0: Some(wrapped_proof), + proof_aggregation_enabled: true, // will be overwritten by ThresholdSharePending }, ); } diff --git a/crates/zk-prover/src/circuits/dkg/share_computation.rs b/crates/zk-prover/src/circuits/dkg/share_computation.rs index fb1b5ab55b..e483401a7a 100644 --- a/crates/zk-prover/src/circuits/dkg/share_computation.rs +++ b/crates/zk-prover/src/circuits/dkg/share_computation.rs @@ -19,6 +19,7 @@ use e3_zk_helpers::dkg::share_computation::{ ShareComputationChunkCircuitData, ShareComputationCircuit, ShareComputationCircuitData, }; use e3_zk_helpers::Computation; +use std::fmt::Display; ////////////////////////////////////////////////////////////////////////////// // Two-level wrapper proof generation @@ -216,6 +217,27 @@ impl Provable for ShareComputationCircuit { generate_share_computation_final_proof(prover, &batch_proofs, e3_id) } + fn prove_with_variant( + &self, + prover: &ZkProver, + params: &Self::Params, + input: &Self::Input, + e3_id: &str, + variant: CircuitVariant, + ) -> Result + where + Self::Inputs: Computation + serde::Serialize, + ::Error: Display, + { + if variant != CircuitVariant::Recursive { + return Err(ZkError::ProveFailed(format!( + "share_computation only supports CircuitVariant::Recursive, got {:?}", + variant + ))); + } + self.prove(prover, params, input, e3_id) + } + /// Inner share_computation proof is verified with Recursive variant. fn verify( &self, diff --git a/crates/zk-prover/tests/local_e2e_tests.rs b/crates/zk-prover/tests/local_e2e_tests.rs index ab36f1e640..2438f57452 100644 --- a/crates/zk-prover/tests/local_e2e_tests.rs +++ b/crates/zk-prover/tests/local_e2e_tests.rs @@ -10,7 +10,8 @@ //! Circuit artifacts (`.json` + `.vk`) are expected in `circuits/bin/{group}/target/`, //! produced by `pnpm build:circuits` locally or the `build_circuits` CI job. //! -//! To add a new circuit: add setup_*_test() and one line in `e2e_proof_tests!`. +//! To add a new circuit: add setup_*_test() and one line in `e2e_proof_tests!` +//! `(name, setup, CircuitVariant::Recursive | Evm)` (C5 pk_aggregation uses Evm). //! Commitment consistency tests are defined separately. mod common; @@ -43,10 +44,13 @@ use e3_zk_helpers::threshold::{ }; use e3_zk_helpers::CiphernodesCommitteeSize; use e3_zk_helpers::Computation; -use e3_zk_helpers::{compute_share_computation_sk_commitment, compute_threshold_pk_commitment}; +use e3_zk_helpers::{ + compute_pk_aggregation_commitment, compute_share_computation_sk_commitment, + compute_threshold_pk_commitment, +}; use e3_zk_prover::{ - generate_chunk_batch_proof, generate_share_computation_final_proof, Provable, ZkBackend, - ZkProver, + generate_chunk_batch_proof, generate_share_computation_final_proof, CircuitVariant, Provable, + ZkBackend, ZkProver, }; /// Convert raw public signals bytes (32-byte big-endian chunks) to ark_bn254::Fr field elements. @@ -356,7 +360,7 @@ async fn setup_pk_test() -> Option<( } macro_rules! e2e_proof_tests { - ($(($name:ident, $setup:expr)),* $(,)?) => { + ($(($name:ident, $setup:expr, $variant:expr)),* $(,)?) => { $( paste::paste! { #[tokio::test] @@ -369,14 +373,15 @@ macro_rules! e2e_proof_tests { }; let proof = circuit - .prove(&prover, &preset, &sample, e3_id) + .prove_with_variant(&prover, &preset, &sample, e3_id, $variant) .expect("proof generation should succeed"); assert!(!proof.data.is_empty(), "proof data should not be empty"); assert!(!proof.public_signals.is_empty(), "public signals should not be empty"); let party_id = 1; - let verification_result = circuit.verify(&prover, &proof, e3_id, party_id); + let verification_result = + circuit.verify_with_variant(&prover, &proof, e3_id, party_id, $variant); assert!( verification_result.as_ref().is_ok_and(|&v| v), "Proof verification failed: {:?}", @@ -391,15 +396,15 @@ macro_rules! e2e_proof_tests { } e2e_proof_tests! { - (pk_generation, setup_pk_generation_test()), - (pk, setup_pk_test()), - (share_computation_sk, setup_share_computation_sk_base_chunk_test()), - (share_computation_e_sm, setup_share_computation_e_sm_base_chunk_test()), - (share_encryption_sk, setup_share_encryption_sk_test()), - (share_encryption_e_sm, setup_share_encryption_e_sm_test()), - (share_decryption, setup_share_decryption_test()), - (pk_aggregation, setup_pk_aggregation_test()), - (decrypted_shares_aggregation, setup_decrypted_shares_aggregation_test()), + (pk_generation, setup_pk_generation_test(), CircuitVariant::Recursive), + (pk, setup_pk_test(), CircuitVariant::Recursive), + (share_computation_sk, setup_share_computation_sk_base_chunk_test(), CircuitVariant::Recursive), + (share_computation_e_sm, setup_share_computation_e_sm_base_chunk_test(), CircuitVariant::Recursive), + (share_encryption_sk, setup_share_encryption_sk_test(), CircuitVariant::Recursive), + (share_encryption_e_sm, setup_share_encryption_e_sm_test(), CircuitVariant::Recursive), + (share_decryption, setup_share_decryption_test(), CircuitVariant::Recursive), + (pk_aggregation, setup_pk_aggregation_test(), CircuitVariant::Evm), + (decrypted_shares_aggregation, setup_decrypted_shares_aggregation_test(), CircuitVariant::Recursive), } #[tokio::test] @@ -640,8 +645,10 @@ async fn test_pk_aggregation_commitment_consistency() { return; }; + // C5 uses Evm variant in production; Recursive fails because commitment hashes (256-bit) + // exceed the noir-recursive verifier's limb bound. let proof = circuit - .prove(&prover, &preset, &sample, e3_id) + .prove_with_variant(&prover, &preset, &sample, e3_id, CircuitVariant::Evm) .expect("proof generation should succeed"); let computation_output = PkAggregationCircuit::compute(preset, &sample).unwrap(); @@ -655,10 +662,21 @@ async fn test_pk_aggregation_commitment_consistency() { let commitment_from_proof = extract_field(&proof.public_signals, i); assert_eq!( commitment_from_proof, *expected, - "pk_aggregation commitment {} mismatch", + "pk_aggregation per-party commitment {} mismatch", i ); } + let expected_final_commitment = compute_pk_aggregation_commitment( + &computation_output.inputs.pk0_agg, + &computation_output.inputs.pk1_agg, + computation_output.bits.pk_bit, + ); + let final_commitment_from_proof = extract_field_from_end(&proof.public_signals, 0); + assert_eq!( + final_commitment_from_proof, expected_final_commitment, + "pk_aggregation final commitment mismatch" + ); + prover.cleanup(e3_id).unwrap(); } diff --git a/examples/CRISP/Cargo.lock b/examples/CRISP/Cargo.lock index bf660e249c..ad4276264f 100644 --- a/examples/CRISP/Cargo.lock +++ b/examples/CRISP/Cargo.lock @@ -2076,7 +2076,6 @@ dependencies = [ "e3-bfv-client", "e3-sdk", "eyre", - "hex", "num-bigint", ] diff --git a/examples/CRISP/crates/crisp-utils/Cargo.toml b/examples/CRISP/crates/crisp-utils/Cargo.toml index 517e0c6235..c9080c78e4 100644 --- a/examples/CRISP/crates/crisp-utils/Cargo.toml +++ b/examples/CRISP/crates/crisp-utils/Cargo.toml @@ -10,6 +10,5 @@ repository.workspace = true e3-sdk = { workspace = true, default-features = false, features=["bfv"] } e3-bfv-client = { workspace = true } eyre = { workspace = true } -hex = { workspace = true } num-bigint = "=0.4.6" diff --git a/examples/CRISP/crates/crisp-utils/src/lib.rs b/examples/CRISP/crates/crisp-utils/src/lib.rs index 6931f3dc84..00bf7d745c 100644 --- a/examples/CRISP/crates/crisp-utils/src/lib.rs +++ b/examples/CRISP/crates/crisp-utils/src/lib.rs @@ -8,8 +8,10 @@ use e3_bfv_client::decode_bytes_to_vec_u64; use eyre::Result; use num_bigint::BigUint; -/// Maximum number of bits that can fit each vote option. -pub const MAX_VOTE_BITS: usize = 50; +/// Number of polynomial coefficients used for the vote payload (must match `@crisp-e3/sdk` / circuits). +/// +/// Splits evenly across options: `segment_size = MAX_MSG_NON_ZERO_COEFFS / num_choices` (e.g. 2 → 50 bits each). +pub const MAX_MSG_NON_ZERO_COEFFS: usize = 100; /// Represents decoded vote counts from a tally #[derive(Debug, Clone)] @@ -22,32 +24,14 @@ pub struct VoteCounts { /// /// # Encoding scheme /// -/// The BFV plaintext polynomial has `degree` coefficients (e.g., 512). -/// When encoding a vote with `n` choices, the polynomial is divided into -/// `n` equal segments of `floor(degree / n)` coefficients each. -/// -/// Each segment represents one choice's vote count in binary (big-endian): -/// -/// |---- segment 0 ----|---- segment 1 ----|---- segment 2 ----|-- padding --| -/// | choice 0 (Yes) | choice 1 (No) | choice 2 (Abst) | zeros | -/// | binary, MSB first| binary, MSB first | binary, MSB first| | -/// -/// Within each segment, the binary representation is right-aligned: -/// [0, 0, 0, ..., 0, 1, 0, 1, 1] ← represents decimal 11 -/// ^-- leading zeros ^-- MSB ^-- LSB +/// Only the first [`MAX_MSG_NON_ZERO_COEFFS`] coefficients carry the vote; the rest are zero padding +/// to the BFV polynomial degree. With `n` choices, each choice uses +/// `segment_size = floor(MAX_MSG_NON_ZERO_COEFFS / n)` binary coefficients (MSB at the start of the segment). /// -/// Because FHE addition is performed coefficient-wise on the polynomial, -/// summing N encrypted votes produces the total count per coefficient. -/// The binary reconstruction then recovers the final tally per choice. +/// |-- choice 0 --|-- choice 1 --| ... | unused in msg region |-- degree padding --| /// -/// # MAX_VOTE_BITS -/// -/// To prevent overflow during FHE computation, only the last `MAX_VOTE_BITS` -/// coefficients of each segment are used (MAX_VOTE_BITS = 50). This caps the -/// maximum representable vote count at `2^50 - 1` (~1.1 quadrillion). -/// -/// We read from the right side of each segment (the significant bits) -/// and ignore leading zeros on the left. +/// Homomorphic addition is coefficient-wise, so summed ciphertexts yield per-coefficient sums and this +/// decode recovers each option’s total. /// /// # Arguments /// @@ -60,66 +44,28 @@ pub struct VoteCounts { /// A `Vec` of length `num_choices`, where `results[i]` is the /// total vote weight for choice `i`. /// -/// # Example -/// -/// Given degree=512, MAX_VOTE_BITS=50, num_choices=2: -/// segment_size = 512 / 2 = 256 coefficients per choice -/// effective_size = min(256, 50) = 50 -/// -/// Choice 0 reads coefficients [206..256) (last 50 of segment 0) -/// Choice 1 reads coefficients [462..512) (last 50 of segment 1) -/// -/// Given degree=512, MAX_VOTE_BITS=50, num_choices=4: -/// segment_size = 512 / 4 = 128 coefficients per choice -/// effective_size = min(128, 50) = 50 -/// remainder = 512 - (128 * 4) = 0 -/// -/// Choice 0 reads coefficients [ 78..128) (last 50 of segment 0) -/// Choice 1 reads coefficients [206..256) (last 50 of segment 1) -/// Choice 2 reads coefficients [334..384) (last 50 of segment 2) -/// Choice 3 reads coefficients [462..512) (last 50 of segment 3) -/// -/// Given degree=512, MAX_VOTE_BITS=50, num_choices=3: -/// segment_size = 512 / 3 = 170 coefficients per choice -/// effective_size = min(170, 50) = 50 -/// remainder = 512 - (170 * 3) = 2 coefficients (trailing zeros, ignored) -/// -/// Choice 0 reads coefficients [120..170) -/// Choice 1 reads coefficients [290..340) -/// Choice 2 reads coefficients [460..510) -/// pub fn decode_tally(tally_bytes: &[u8], num_choices: usize) -> Result> { if num_choices == 0 { return Err(eyre::eyre!("Number of choices must be positive")); } - // Each u64 coefficient is stored as 8 little-endian bytes. - // This gives us the full polynomial coefficient array. let values = decode_bytes_to_vec_u64(tally_bytes)?; - // Divide the polynomial evenly into num_choices segments. - // Any leftover coefficients (degree % num_choices) are trailing - // zeros and are ignored. - let segment_size = values.len() / num_choices; - - // Only read the rightmost MAX_VOTE_BITS (50) coefficients from each - // segment to avoid overflow. If the segment is smaller than - // MAX_VOTE_BITS (unlikely with degree=512), use the full segment. - let effective_size = segment_size.min(MAX_VOTE_BITS); + if values.len() < MAX_MSG_NON_ZERO_COEFFS { + return Err(eyre::eyre!( + "decoded coefficient count ({}) is less than MAX_MSG_NON_ZERO_COEFFS ({})", + values.len(), + MAX_MSG_NON_ZERO_COEFFS + )); + } + let segment_size = MAX_MSG_NON_ZERO_COEFFS / num_choices; let mut results = Vec::with_capacity(num_choices); for choice_idx in 0..num_choices { - // Find where this choice's segment starts in the array let segment_start = choice_idx * segment_size; + let segment = &values[segment_start..segment_start + segment_size]; - // Right-align: skip leading zeros, read only the significant bits - // at the end of the segment - let read_start = segment_start + segment_size - effective_size; - let segment = &values[read_start..read_start + effective_size]; - - // Reconstruct the vote count from binary (big-endian within segment): - // value = segment[0] * 2^(n-1) + segment[1] * 2^(n-2) + ... + segment[n-1] * 2^0 let mut value = BigUint::from(0u64); for (i, &v) in segment.iter().enumerate() { let weight = BigUint::from(2u64).pow((segment.len() - 1 - i) as u32); @@ -136,27 +82,71 @@ pub fn decode_tally(tally_bytes: &[u8], num_choices: usize) -> Result Vec { + assert!(vote.len() >= 2); + assert!(degree >= MAX_MSG_NON_ZERO_COEFFS); + + let n = vote.len(); + let segment_size = MAX_MSG_NON_ZERO_COEFFS / n; + let max_val = (1u128 << segment_size) - 1; + + let mut out = vec![0u64; degree]; + let mut idx = 0; + + for &value in vote { + assert!( + (value as u128) <= max_val, + "value {value} exceeds max for segment_size {segment_size}" + ); + let bits = format!("{value:b}"); + let bin_len = bits.len(); + for i in 0..segment_size { + let offset = segment_size.saturating_sub(bin_len); + out[idx] = if i < offset { + 0 + } else { + u64::from(bits.as_bytes()[i - offset] - b'0') + }; + idx += 1; + } + } - let bytes = hex::decode(tally_hex.strip_prefix("0x").unwrap_or(tally_hex)).unwrap(); - let result = decode_tally(&bytes, 2).unwrap(); + while idx < MAX_MSG_NON_ZERO_COEFFS { + out[idx] = 0; + idx += 1; + } - assert_eq!(result[0], BigUint::from(10000000000u64)); - assert_eq!(result[1], BigUint::from(30000000000u64)); + out + } + + fn coeffs_to_le_bytes(coeffs: &[u64]) -> Vec { + let mut bytes = Vec::with_capacity(coeffs.len() * 8); + for c in coeffs { + bytes.extend_from_slice(&c.to_le_bytes()); + } + bytes } #[test] - fn test_decode_tally_with_wrong_num_options() { - // Expected: yes = 10000000000, no = 30000000000 - let tally_hex = "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000300000000000000000000000000000003000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + fn test_decode_tally_matches_sdk_layout() { + let degree = 512; + let coeffs = encode_vote_like_sdk(&[10_000_000_000u64, 30_000_000_000u64], degree); + let bytes = coeffs_to_le_bytes(&coeffs); + let result = decode_tally(&bytes, 2).unwrap(); - let bytes = hex::decode(tally_hex.strip_prefix("0x").unwrap_or(tally_hex)).unwrap(); + assert_eq!(result[0], BigUint::from(10_000_000_000u64)); + assert_eq!(result[1], BigUint::from(30_000_000_000u64)); + } + + #[test] + fn test_decode_tally_wrong_num_options_differs() { + let degree = 512; + let coeffs = encode_vote_like_sdk(&[10_000_000_000u64, 30_000_000_000u64], degree); + let bytes = coeffs_to_le_bytes(&coeffs); let result = decode_tally(&bytes, 3).unwrap(); - assert!(result[0] != BigUint::from(10000000000u64)); - assert!(result[1] != BigUint::from(30000000000u64)); + assert_ne!(result[0], BigUint::from(10_000_000_000u64)); + assert_ne!(result[1], BigUint::from(30_000_000_000u64)); } } diff --git a/examples/CRISP/enclave.config.yaml b/examples/CRISP/enclave.config.yaml index 8925b9d4f9..6a37ccad3a 100644 --- a/examples/CRISP/enclave.config.yaml +++ b/examples/CRISP/enclave.config.yaml @@ -3,23 +3,23 @@ chains: rpc_url: "ws://localhost:8545" contracts: e3_program: - address: "0x851356ae760d987E095750cCeb3bC6014560891C" - deploy_block: 64 + address: "0x5eb3Bc0a489C5A8288765d2336659EbCA68FCd00" + deploy_block: 31 enclave: address: "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e" - deploy_block: 42 + deploy_block: 13 ciphernode_registry: address: "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" - deploy_block: 36 + deploy_block: 9 bonding_registry: address: "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" - deploy_block: 39 + deploy_block: 10 slashing_manager: address: "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" - deploy_block: 32 + deploy_block: 8 fee_token: address: "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" - deploy_block: 17 + deploy_block: 4 program: dev: true # risc0: diff --git a/examples/CRISP/packages/crisp-contracts/contracts/Mocks/MockEnclave.sol b/examples/CRISP/packages/crisp-contracts/contracts/Mocks/MockEnclave.sol index abe10da5a7..8ca678f8e9 100644 --- a/examples/CRISP/packages/crisp-contracts/contracts/Mocks/MockEnclave.sol +++ b/examples/CRISP/packages/crisp-contracts/contracts/Mocks/MockEnclave.sol @@ -9,6 +9,7 @@ import { E3 } from "@enclave-e3/contracts/contracts/interfaces/IE3.sol"; import { IEnclave } from "@enclave-e3/contracts/contracts/interfaces/IEnclave.sol"; import { IE3Program } from "@enclave-e3/contracts/contracts/interfaces/IE3Program.sol"; import { IDecryptionVerifier } from "@enclave-e3/contracts/contracts/interfaces/IDecryptionVerifier.sol"; +import { IPkVerifier } from "@enclave-e3/contracts/contracts/interfaces/IPkVerifier.sol"; contract MockEnclave { bytes public plaintextOutput; @@ -29,10 +30,12 @@ contract MockEnclave { e3ProgramParams: bytes(""), customParams: abi.encode(address(0), nextE3Id, 2, 0, 0), decryptionVerifier: IDecryptionVerifier(address(0)), + pkVerifier: IPkVerifier(address(0)), committeePublicKey: committeePublicKey, ciphertextOutput: bytes32(0), plaintextOutput: plaintextOutput, - requester: address(0) + requester: address(0), + proofAggregationEnabled: false }); IE3Program(program).validate(nextE3Id, 0, bytes(""), bytes(""), abi.encode(address(0), nextE3Id, 2, 0, 0)); @@ -64,10 +67,12 @@ contract MockEnclave { e3ProgramParams: bytes(""), customParams: abi.encode(address(0), 0, 2, 0, 0), decryptionVerifier: IDecryptionVerifier(address(0)), + pkVerifier: IPkVerifier(address(0)), committeePublicKey: committeePublicKey, ciphertextOutput: bytes32(0), plaintextOutput: plaintextOutput, - requester: address(0) + requester: address(0), + proofAggregationEnabled: false }); } } diff --git a/examples/CRISP/packages/crisp-contracts/deploy/crisp.ts b/examples/CRISP/packages/crisp-contracts/deploy/crisp.ts index cd26b6cfa4..b60df7f433 100644 --- a/examples/CRISP/packages/crisp-contracts/deploy/crisp.ts +++ b/examples/CRISP/packages/crisp-contracts/deploy/crisp.ts @@ -41,7 +41,7 @@ export const deployCRISPContracts = async () => { throw new Error('PoseidonT3 address not found, it must be deployed first') } - const zkTranscriptLib = await ethers.deployContract('ZKTranscriptLib') + const zkTranscriptLib = await ethers.deployContract('contracts/CRISPVerifier.sol:ZKTranscriptLib') await zkTranscriptLib.waitForDeployment() const zkTranscriptLibAddress = await zkTranscriptLib.getAddress() diff --git a/examples/CRISP/packages/crisp-contracts/deploy/deploy.ts b/examples/CRISP/packages/crisp-contracts/deploy/deploy.ts index 5582d17bb0..f4236fba13 100644 --- a/examples/CRISP/packages/crisp-contracts/deploy/deploy.ts +++ b/examples/CRISP/packages/crisp-contracts/deploy/deploy.ts @@ -34,7 +34,7 @@ export const deploy = async () => { const shouldPrintEnv = Boolean(process.env.PRINT_ENV_VARS) if (shouldDeployEnclave) { - await deployEnclave(true) + await deployEnclave(true, true) } await deployCRISPContracts() diff --git a/examples/CRISP/packages/crisp-contracts/deployed_contracts.json b/examples/CRISP/packages/crisp-contracts/deployed_contracts.json index 4a6c4eda23..f20d36aecf 100644 --- a/examples/CRISP/packages/crisp-contracts/deployed_contracts.json +++ b/examples/CRISP/packages/crisp-contracts/deployed_contracts.json @@ -151,21 +151,21 @@ }, "localhost": { "PoseidonT3": { - "blockNumber": 6, + "blockNumber": 3, "address": "0x3333333C0A88F9BE4fd23ed0536F9B6c427e3B93" }, "MockUSDC": { "constructorArgs": { "initialSupply": "1000000" }, - "blockNumber": 8, + "blockNumber": 4, "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" }, "EnclaveToken": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 10, + "blockNumber": 5, "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" }, "EnclaveTicketToken": { @@ -174,14 +174,14 @@ "registry": "0x0000000000000000000000000000000000000001", "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 13, + "blockNumber": 7, "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9" }, "SlashingManager": { "constructorArgs": { "admin": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 15, + "blockNumber": 8, "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" }, "CiphernodeRegistryOwnable": { @@ -196,7 +196,7 @@ "proxyAdminAddress": "0x9bd03768a7DCc129555dE410FF8E85528A4F88b5", "implementationAddress": "0x0165878A594ca255338adfa4d48449f69242Eb8F" }, - "blockNumber": 16, + "blockNumber": 9, "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" }, "BondingRegistry": { @@ -218,7 +218,7 @@ "proxyAdminAddress": "0x8aCd85898458400f7Db866d53FCFF6f0D49741FF", "implementationAddress": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6" }, - "blockNumber": 19, + "blockNumber": 10, "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" }, "Enclave": { @@ -241,7 +241,7 @@ "proxyAdminAddress": "0x8dAF17A20c9DBA35f005b6324F493785D239719d", "implementationAddress": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788" }, - "blockNumber": 22, + "blockNumber": 13, "address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e" }, "E3RefundManager": { @@ -257,42 +257,70 @@ "proxyAdminAddress": "0x32467b43BFa67273FC7dDda0999Ee9A12F2AaA08", "implementationAddress": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" }, - "blockNumber": 25, + "blockNumber": 15, "address": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82" }, "MockComputeProvider": { - "blockNumber": 30, + "blockNumber": 17, "address": "0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E" }, "MockDecryptionVerifier": { - "blockNumber": 31, + "blockNumber": 18, "address": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690" }, - "MockE3Program": { - "blockNumber": 33, + "MockPkVerifier": { + "blockNumber": 19, "address": "0x84eA74d481Ee0A5332c457a4d796187F6Ba67fEB" }, + "MockE3Program": { + "blockNumber": 20, + "address": "0x9E545E3C0baAB3E08CdfD552C960A1050f373042" + }, + "ZKTranscriptLib": { + "blockNumber": 22, + "address": "0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8" + }, + "RecursiveAggregationFoldVerifier": { + "blockNumber": 23, + "address": "0x851356ae760d987E095750cCeb3bC6014560891C" + }, + "ThresholdDecryptedSharesAggregationVerifier": { + "blockNumber": 24, + "address": "0xf5059a5D33d5853360D16C683c16e67980206f36" + }, + "ThresholdPkAggregationVerifier": { + "blockNumber": 25, + "address": "0x95401dc811bb5740090279Ba06cfA8fcF6113778" + }, + "BfvDecryptionVerifier": { + "blockNumber": 26, + "address": "0x998abeb3E57409262aE5b751f60747921B33613E" + }, + "BfvPkVerifier": { + "blockNumber": 28, + "address": "0x4826533B4897376654Bb4d4AD88B7faFD0C98528" + }, "MockRISC0Verifier": { - "address": "0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8", - "blockNumber": 36 + "address": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF", + "blockNumber": 30 }, "HonkVerifier": { - "address": "0xf5059a5D33d5853360D16C683c16e67980206f36", - "blockNumber": 37 + "address": "0x9d4454B023096f34B160D6B654540c56A1F81688", + "blockNumber": 31 }, "CRISPProgram": { - "address": "0x95401dc811bb5740090279Ba06cfA8fcF6113778", - "blockNumber": 37, + "address": "0x5eb3Bc0a489C5A8288765d2336659EbCA68FCd00", + "blockNumber": 31, "constructorArgs": { "enclave": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", - "verifierAddress": "0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8", - "honkVerifierAddress": "0xf5059a5D33d5853360D16C683c16e67980206f36", + "verifierAddress": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF", + "honkVerifierAddress": "0x9d4454B023096f34B160D6B654540c56A1F81688", "imageId": "0x23734b77b0f76e85623a88d7a82f24c34c94834f2501964ea123b7a2027013a2" } }, "MockVotingToken": { - "address": "0x70e0bA845a1A0F2DA3359C97E0285013525FFC49", - "blockNumber": 39 + "address": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D", + "blockNumber": 33 } } } \ No newline at end of file diff --git a/examples/CRISP/packages/crisp-contracts/hardhat.config.ts b/examples/CRISP/packages/crisp-contracts/hardhat.config.ts index 6bfc74660e..bed7a6fbcb 100644 --- a/examples/CRISP/packages/crisp-contracts/hardhat.config.ts +++ b/examples/CRISP/packages/crisp-contracts/hardhat.config.ts @@ -138,9 +138,15 @@ const config: HardhatUserConfig = { '@enclave-e3/contracts/contracts/test/MockCiphernodeRegistry.sol', '@enclave-e3/contracts/contracts/test/MockComputeProvider.sol', '@enclave-e3/contracts/contracts/test/MockDecryptionVerifier.sol', + '@enclave-e3/contracts/contracts/test/MockPkVerifier.sol', '@enclave-e3/contracts/contracts/test/MockE3Program.sol', '@enclave-e3/contracts/contracts/test/MockSlashingVerifier.sol', '@enclave-e3/contracts/contracts/test/MockStableToken.sol', + '@enclave-e3/contracts/contracts/verifiers/bfv/BfvDecryptionVerifier.sol', + '@enclave-e3/contracts/contracts/verifiers/bfv/BfvPkVerifier.sol', + '@enclave-e3/contracts/contracts/verifiers/bfv/honk/RecursiveAggregationFoldVerifier.sol', + '@enclave-e3/contracts/contracts/verifiers/bfv/honk/ThresholdDecryptedSharesAggregationVerifier.sol', + '@enclave-e3/contracts/contracts/verifiers/bfv/honk/ThresholdPkAggregationVerifier.sol', ], settings: { optimizer: { diff --git a/examples/CRISP/packages/crisp-contracts/tests/utils.ts b/examples/CRISP/packages/crisp-contracts/tests/utils.ts index af4c785843..822ad45691 100644 --- a/examples/CRISP/packages/crisp-contracts/tests/utils.ts +++ b/examples/CRISP/packages/crisp-contracts/tests/utils.ts @@ -51,7 +51,7 @@ export async function deployMockEnclave() { * @returns The address of the deployed HonkVerifier contract. */ export async function deployHonkVerifier() { - const zkTranscriptLib = await deployContract('ZKTranscriptLib') + const zkTranscriptLib = await deployContract('contracts/CRISPVerifier.sol:ZKTranscriptLib') const HonkVerifierFactory = await ethers.getContractFactory('HonkVerifier', { libraries: { diff --git a/examples/CRISP/packages/crisp-sdk/src/constants.ts b/examples/CRISP/packages/crisp-sdk/src/constants.ts index 1f7863fe59..af67b911fd 100644 --- a/examples/CRISP/packages/crisp-sdk/src/constants.ts +++ b/examples/CRISP/packages/crisp-sdk/src/constants.ts @@ -12,9 +12,10 @@ export const CRISP_SERVER_PREVIOUS_CIPHERTEXT_ENDPOINT = 'state/previous-ciphert export const MERKLE_TREE_MAX_DEPTH = 20 // static, hardcoded in the circuit. -// @note that the following must be changed accordingly to the CRISP circuit -// Hard limit on the maximum number of vote bits supported for each option. -export const MAX_VOTE_BITS = 50 +// @note Must stay aligned with CRISP circuits / threshold message layout (Rust & Noir MAX_MSG_NON_ZERO_COEFFS). +// Vote payload uses only the first MAX_MSG_NON_ZERO_COEFFS polynomial coeffs, split evenly across options +// (e.g. 2 options → 50 binary coeffs each within those 100). +export const MAX_MSG_NON_ZERO_COEFFS = 100 // Hard limit on the maximum number of vote options supported. export const MAX_VOTE_OPTIONS = 10 diff --git a/examples/CRISP/packages/crisp-sdk/src/encoding.ts b/examples/CRISP/packages/crisp-sdk/src/encoding.ts index 4d5f4ca083..4bb0ae3eae 100644 --- a/examples/CRISP/packages/crisp-sdk/src/encoding.ts +++ b/examples/CRISP/packages/crisp-sdk/src/encoding.ts @@ -9,13 +9,14 @@ * * Encodes vote choices (numbers per option) into polynomial coefficient arrays * suitable for BFV homomorphic encryption. Each choice is represented as a - * segment of binary digits, padded to fit the polynomial degree. Supports + * segment of binary digits within the first MAX_MSG_NON_ZERO_COEFFS coeffs, then + * zero-padded to the BFV polynomial degree. Supports * encoding, encryption, decryption, and tally decoding. */ import { ZKInputsGenerator } from '@crisp-e3/zk-inputs' -import { toBinary, numberArrayToBigInt64Array, decodeBytesToNumbers } from './utils' -import { MAX_VOTE_BITS } from './constants' +import { toBinary, numberArrayToBigInt64Array, decodeBytesToNumbers, getMaxVoteValue } from './utils' +import { MAX_MSG_NON_ZERO_COEFFS } from './constants' import { hexToBytes } from 'viem' import type { Hex } from 'viem' import type { Vote } from './types' @@ -34,29 +35,33 @@ export const getZkInputsGenerator = () => { /** * Encodes vote choices into a polynomial coefficient array for BFV encryption. - * Each choice is split into a segment of binary digits; segments are padded - * to align with the polynomial degree. + * Each choice occupies floor(MAX_MSG_NON_ZERO_COEFFS / n) binary coefficients; + * remaining slots in the first MAX_MSG_NON_ZERO_COEFFS coeffs are zero; then + * the vector is padded to the BFV degree. * * @param vote - Array of numeric values per choice (e.g. [10, 5] for 2 options) * @returns Array of 0s and 1s representing coefficients - * @throws If vote has fewer than 2 choices or any value exceeds max bits + * @throws If vote has fewer than 2 choices, any value exceeds max for its segment, or degree is too small */ export const encodeVote = (vote: Vote): number[] => { - if (vote.length < 2) { + const numChoices = vote.length + + if (numChoices < 2) { throw new Error('Vote must have at least two choices') } const bfvParams = getZkInputsGenerator().getBFVParams() const degree = bfvParams.degree - const n = vote.length + if (degree < MAX_MSG_NON_ZERO_COEFFS) { + throw new Error(`BFV degree (${degree}) must be at least MAX_MSG_NON_ZERO_COEFFS (${MAX_MSG_NON_ZERO_COEFFS})`) + } - const segmentSize = Math.floor(degree / n) - const maxBits = Math.min(segmentSize, MAX_VOTE_BITS) - const maxValue = 2 ** maxBits - 1 + const segmentSize = Math.floor(MAX_MSG_NON_ZERO_COEFFS / numChoices) + const maxValue = getMaxVoteValue(numChoices) const voteArray: number[] = [] - for (let choiceIdx = 0; choiceIdx < n; choiceIdx += 1) { - const value = choiceIdx < vote.length ? vote[choiceIdx] : 0 + for (let choiceIdx = 0; choiceIdx < numChoices; choiceIdx += 1) { + const value = vote[choiceIdx] if (value > maxValue) { throw new Error(`Vote value for choice ${choiceIdx} exceeds maximum (${maxValue})`) @@ -66,12 +71,16 @@ export const encodeVote = (vote: Vote): number[] => { for (let i = 0; i < segmentSize; i += 1) { const offset = segmentSize - binary.length - voteArray.push(i < offset ? 0 : parseInt(binary[i - offset])) + voteArray.push(i < offset ? 0 : parseInt(binary[i - offset], 10)) } } - const remainder = degree - segmentSize * n - for (let i = 0; i < remainder; i++) { + const msgCoeffsUsed = segmentSize * numChoices + for (let i = msgCoeffsUsed; i < MAX_MSG_NON_ZERO_COEFFS; i += 1) { + voteArray.push(0) + } + + for (let i = 0; i < degree - MAX_MSG_NON_ZERO_COEFFS; i += 1) { voteArray.push(0) } @@ -109,14 +118,12 @@ export const decodeTally = (tallyBytes: string | number[], numChoices: number): throw new Error('Number of choices must be positive') } - const segmentSize = Math.floor(tallyBytes.length / numChoices) - const effectiveSize = Math.min(segmentSize, MAX_VOTE_BITS) + const segmentSize = Math.floor(MAX_MSG_NON_ZERO_COEFFS / numChoices) const results: Vote = [] for (let choiceIdx = 0; choiceIdx < numChoices; choiceIdx++) { const segmentStart = choiceIdx * segmentSize - const readStart = segmentStart + segmentSize - effectiveSize - const segment = tallyBytes.slice(readStart, readStart + effectiveSize) + const segment = tallyBytes.slice(segmentStart, segmentStart + segmentSize) let value = 0 for (let i = 0; i < segment.length; i++) { diff --git a/examples/CRISP/packages/crisp-sdk/src/index.ts b/examples/CRISP/packages/crisp-sdk/src/index.ts index a5986495a9..73e4d5112f 100644 --- a/examples/CRISP/packages/crisp-sdk/src/index.ts +++ b/examples/CRISP/packages/crisp-sdk/src/index.ts @@ -6,7 +6,7 @@ export * from './token' export * from './state' -export { MERKLE_TREE_MAX_DEPTH, SIGNATURE_MESSAGE, SIGNATURE_MESSAGE_HASH } from './constants' +export { MAX_MSG_NON_ZERO_COEFFS, MAX_VOTE_OPTIONS, MERKLE_TREE_MAX_DEPTH, SIGNATURE_MESSAGE, SIGNATURE_MESSAGE_HASH } from './constants' export { hashLeaf, generateMerkleProof, generateMerkleTree, getAddressFromSignature, getMaxVoteValue, getZeroVote } from './utils' export { decodeTally, diff --git a/examples/CRISP/packages/crisp-sdk/src/utils.ts b/examples/CRISP/packages/crisp-sdk/src/utils.ts index adeee7501f..5d7d874d65 100644 --- a/examples/CRISP/packages/crisp-sdk/src/utils.ts +++ b/examples/CRISP/packages/crisp-sdk/src/utils.ts @@ -7,10 +7,9 @@ import { poseidon2 } from 'poseidon-lite' import { LeanIMT } from '@zk-kit/lean-imt' import type { MerkleProof } from './types' -import { MAX_VOTE_BITS, MERKLE_TREE_MAX_DEPTH, SIGNATURE_MESSAGE_HASH } from './constants' +import { MAX_MSG_NON_ZERO_COEFFS, MERKLE_TREE_MAX_DEPTH, SIGNATURE_MESSAGE_HASH } from './constants' import { publicKeyToAddress } from 'viem/utils' import { hexToBytes, recoverPublicKey } from 'viem' -import { ZKInputsGenerator } from '@crisp-e3/zk-inputs' /** * Hash a leaf node for the Merkle tree @@ -130,10 +129,8 @@ export const getAddressFromSignature = async (signature: `0x${string}`, messageH * @returns Maximum value per choice. */ export const getMaxVoteValue = (numChoices: number): number => { - const bfvParams = ZKInputsGenerator.withDefaults().getBFVParams() - const segmentSize = Math.floor(bfvParams.degree / numChoices) - const effectiveBits = Math.min(segmentSize, MAX_VOTE_BITS) - return 2 ** effectiveBits - 1 + const segmentSize = Math.floor(MAX_MSG_NON_ZERO_COEFFS / numChoices) + return 2 ** segmentSize - 1 } /** diff --git a/examples/CRISP/packages/crisp-sdk/tests/vote.test.ts b/examples/CRISP/packages/crisp-sdk/tests/vote.test.ts index 52544a8bd9..dd6f97542b 100644 --- a/examples/CRISP/packages/crisp-sdk/tests/vote.test.ts +++ b/examples/CRISP/packages/crisp-sdk/tests/vote.test.ts @@ -5,7 +5,7 @@ // or FITNESS FOR A PARTICULAR PURPOSE. import { describe, it, expect, beforeAll, beforeEach, afterEach, afterAll, vi } from 'vitest' import { Vote } from '../src/types' -import { SIGNATURE_MESSAGE_HASH, SIGNATURE_MESSAGE } from '../src/constants' +import { MAX_MSG_NON_ZERO_COEFFS, SIGNATURE_MESSAGE_HASH, SIGNATURE_MESSAGE } from '../src/constants' import { getZeroVote } from '../src/utils' import { decodeTally, verifyProof, encodeVote, generateBFVKeys, encryptVote, decryptVote, destroyBBApi } from '../src/vote' import { publicKeyToAddress, signMessage } from 'viem/accounts' @@ -68,13 +68,12 @@ describe('Vote', () => { describe('decodeTally', () => { it('Should decode an encoded tally into its decimal representation', () => { - const tally = - '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000300000000000000000000000000000003000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000030000000000000003000000000000000300000000000000030000000000000003000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' - - const decoded = decodeTally(tally, 2) + const expected: Vote = [10000000000, 30000000000] + const encoded = encodeVote(expected) + const decoded = decodeTally(encoded, 2) - expect(decoded[0]).toBe(10000000000) - expect(decoded[1]).toBe(30000000000) + expect(decoded[0]).toBe(expected[0]) + expect(decoded[1]).toBe(expected[1]) }) }) @@ -126,23 +125,16 @@ describe('Vote', () => { expect(decoded[4]).toBe(5) }) - it('Should handle remainder bits correctly for odd number of choices', () => { - // With 3 choices, there will be remainder bits at the end + it('Should zero-pad unused slots in the first MAX_MSG_NON_ZERO_COEFFS coeffs for 3 choices', () => { const encoded = encodeVote([1, 1, 1]) const decoded = decodeTally(encoded, 3) - // All segments should decode correctly expect(decoded[0]).toBe(1) expect(decoded[1]).toBe(1) expect(decoded[2]).toBe(1) - // Remainder bits (if any) should be zero - const segmentSize = Math.floor(encoded.length / 3) - const remainder = encoded.length - segmentSize * 3 - if (remainder > 0) { - const remainderBits = Array.from(encoded.slice(segmentSize * 3)) - expect(remainderBits.every((b) => b === 0)).toBe(true) - } + const segmentSize = Math.floor(MAX_MSG_NON_ZERO_COEFFS / 3) + expect(encoded.slice(segmentSize * 3, MAX_MSG_NON_ZERO_COEFFS).every((b) => b === 0)).toBe(true) }) }) diff --git a/examples/CRISP/server/.env.example b/examples/CRISP/server/.env.example index 850466139e..652915fdd5 100644 --- a/examples/CRISP/server/.env.example +++ b/examples/CRISP/server/.env.example @@ -15,7 +15,7 @@ CRON_API_KEY=1234567890 # Based on Default Anvil Deployments (Only for testing) ENCLAVE_ADDRESS="0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e" CIPHERNODE_REGISTRY_ADDRESS="0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" -E3_PROGRAM_ADDRESS="0x95401dc811bb5740090279Ba06cfA8fcF6113778" +E3_PROGRAM_ADDRESS="0x5eb3Bc0a489C5A8288765d2336659EbCA68FCd00" FEE_TOKEN_ADDRESS="0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" # E3 Config @@ -23,7 +23,7 @@ FEE_TOKEN_ADDRESS="0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" # After this interval, the computation phase starts automatically # After activation + this interval, ciphernodes are then not responsing to # any more decryption requests -E3_DURATION=900 +E3_DURATION=600 # 0=Micro, 1=Small, 2=Medium, 3=Large E3_COMMITTEE_SIZE=0 @@ -31,3 +31,8 @@ E3_COMMITTEE_SIZE=0 E3_COMPUTE_PROVIDER_NAME="RISC0" E3_COMPUTE_PROVIDER_PARALLEL=false E3_COMPUTE_PROVIDER_BATCH_SIZE=4 # Must be a power of 2 + +# Whether to enable proof aggregation for E3 programs. +# When enabled, the ciphernodes will fold proofs to then have one final proof +# posted on chain to enable public verifiability. It takes considerably longer. +E3_PROOF_AGGREGATION_ENABLED=false diff --git a/examples/CRISP/server/src/cli/commands.rs b/examples/CRISP/server/src/cli/commands.rs index 9aaf62da71..3cb5613c37 100644 --- a/examples/CRISP/server/src/cli/commands.rs +++ b/examples/CRISP/server/src/cli/commands.rs @@ -19,9 +19,7 @@ use alloy::providers::{Provider, ProviderBuilder}; use alloy::sol_types::SolValue; use crisp::config::CONFIG; use e3_fhe_params::{build_bfv_params_from_set_arc, encode_bfv_params}; -use e3_sdk::evm_helpers::contracts::{ - CommitteeSize, EnclaveContract, EnclaveRead, EnclaveWrite, E3, -}; +use e3_sdk::evm_helpers::contracts::{CommitteeSize, EnclaveContract, EnclaveRead, EnclaveWrite}; use fhe::bfv::{BfvParameters, Ciphertext, Encoding, Plaintext, PublicKey, SecretKey}; use fhe_traits::{ DeserializeParametrized, FheDecoder, FheDecrypter, FheEncoder, FheEncrypter, @@ -163,6 +161,8 @@ pub async fn initialize_crisp_round( U256::from(window_start + CONFIG.e3_duration), ]; + let proof_aggregation_enabled = CONFIG.e3_proof_aggregation_enabled; + let fee_amount = contract .get_e3_quote( committee_size.clone(), @@ -170,6 +170,7 @@ pub async fn initialize_crisp_round( e3_program, e3_params.clone(), compute_provider_params_bytes.clone(), + proof_aggregation_enabled, ) .await?; info!("Fee required: {} tokens", fee_amount); @@ -216,6 +217,7 @@ pub async fn initialize_crisp_round( e3_params, compute_provider_params_bytes, custom_params_bytes, + proof_aggregation_enabled, ) .await?; info!("E3 request sent. TxHash: {:?}", res.transaction_hash); diff --git a/examples/CRISP/server/src/config.rs b/examples/CRISP/server/src/config.rs index 8976a0ac73..c4f1a7984e 100644 --- a/examples/CRISP/server/src/config.rs +++ b/examples/CRISP/server/src/config.rs @@ -23,6 +23,8 @@ pub struct Config { pub chain_id: u64, pub cron_api_key: String, // E3 parameters + #[serde(default)] + pub e3_proof_aggregation_enabled: bool, pub e3_committee_size: u8, // 0=Micro, 1=Small, 2=Medium, 3=Large pub e3_duration: u64, pub e3_compute_provider_name: String, diff --git a/examples/CRISP/server/src/server/routes/rounds.rs b/examples/CRISP/server/src/server/routes/rounds.rs index cbfdd9794f..4fda2d3612 100644 --- a/examples/CRISP/server/src/server/routes/rounds.rs +++ b/examples/CRISP/server/src/server/routes/rounds.rs @@ -229,6 +229,9 @@ pub async fn initialize_crisp_round( parallel: CONFIG.e3_compute_provider_parallel, batch_size: CONFIG.e3_compute_provider_batch_size, }; + + let proof_aggregation_enabled = CONFIG.e3_proof_aggregation_enabled; + let compute_provider_params = Bytes::from(bincode::serialize(&compute_provider_params)?); let (receipt, e3_id) = contract .request_e3( @@ -238,6 +241,7 @@ pub async fn initialize_crisp_round( e3_params, compute_provider_params, custom_params_bytes, + proof_aggregation_enabled, ) .await?; info!( diff --git a/packages/enclave-contracts/.gitignore b/packages/enclave-contracts/.gitignore index 54675c7cfe..26f46e3962 100644 --- a/packages/enclave-contracts/.gitignore +++ b/packages/enclave-contracts/.gitignore @@ -36,17 +36,7 @@ !/artifacts/contracts/token/EnclaveTicketToken.sol/ !/artifacts/contracts/token/EnclaveTicketToken.sol/EnclaveTicketToken.json -# Verifier contracts -!/artifacts/contracts/verifier/ -!/artifacts/contracts/verifier/ThresholdPkAggregationVerifier.sol/ -!/artifacts/contracts/verifier/ThresholdPkAggregationVerifier.sol/ThresholdPkAggregationVerifier.json -!/artifacts/contracts/verifier/ThresholdPkAggregationVerifier.sol/ZKTranscriptLib.json -!/artifacts/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol/ -!/artifacts/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol/ThresholdDecryptedSharesAggregationVerifier.json -!/artifacts/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol/ZKTranscriptLib.json -!/artifacts/contracts/verifier/RecursiveAggregationFoldVerifier.sol/ -!/artifacts/contracts/verifier/RecursiveAggregationFoldVerifier.sol/RecursiveAggregationFoldVerifier.json -!/artifacts/contracts/verifier/RecursiveAggregationFoldVerifier.sol/ZKTranscriptLib.json +# Verifier build artifacts under artifacts/contracts/verifiers/ stay ignored (see /artifacts/**). build cache diff --git a/packages/enclave-contracts/.solhintignore b/packages/enclave-contracts/.solhintignore index 79b6675271..2e0f23ae42 100644 --- a/packages/enclave-contracts/.solhintignore +++ b/packages/enclave-contracts/.solhintignore @@ -3,4 +3,4 @@ **/node_modules # auto-generated verifier contracts (BB/Barretenberg) -contracts/verifier/**/*.sol +contracts/verifiers/**/*.sol diff --git a/packages/enclave-contracts/README.md b/packages/enclave-contracts/README.md index 40b5c9b5ec..8becd5eb25 100644 --- a/packages/enclave-contracts/README.md +++ b/packages/enclave-contracts/README.md @@ -108,8 +108,7 @@ pnpm run hardhat committee:new --network [network] To publish the public key of a committee, run ```sh -pnpm run hardhat --network [network] committee:publish --e3-id [e3-id] --nodes [node address], -[node address] --public-key [publickey] +pnpm run hardhat --network [network] committee:publish --e3-id [e3-id] --nodes [node address],[node address] --public-key [publickey] --proof [hex-encoded pk proof] ``` To activate an E3, run diff --git a/packages/enclave-contracts/artifacts/contracts/Enclave.sol/Enclave.json b/packages/enclave-contracts/artifacts/contracts/Enclave.sol/Enclave.json index 63a70af0a7..be758b5471 100644 --- a/packages/enclave-contracts/artifacts/contracts/Enclave.sol/Enclave.json +++ b/packages/enclave-contracts/artifacts/contracts/Enclave.sol/Enclave.json @@ -601,6 +601,11 @@ "name": "decryptionVerifier", "type": "address" }, + { + "internalType": "contract IPkVerifier", + "name": "pkVerifier", + "type": "address" + }, { "internalType": "bytes32", "name": "committeePublicKey", @@ -620,6 +625,11 @@ "internalType": "address", "name": "requester", "type": "address" + }, + { + "internalType": "bool", + "name": "proofAggregationEnabled", + "type": "bool" } ], "indexed": false, @@ -1122,6 +1132,11 @@ "name": "decryptionVerifier", "type": "address" }, + { + "internalType": "contract IPkVerifier", + "name": "pkVerifier", + "type": "address" + }, { "internalType": "bytes32", "name": "committeePublicKey", @@ -1141,6 +1156,11 @@ "internalType": "address", "name": "requester", "type": "address" + }, + { + "internalType": "bool", + "name": "proofAggregationEnabled", + "type": "bool" } ], "stateMutability": "view", @@ -1302,6 +1322,11 @@ "name": "decryptionVerifier", "type": "address" }, + { + "internalType": "contract IPkVerifier", + "name": "pkVerifier", + "type": "address" + }, { "internalType": "bytes32", "name": "committeePublicKey", @@ -1321,6 +1346,11 @@ "internalType": "address", "name": "requester", "type": "address" + }, + { + "internalType": "bool", + "name": "proofAggregationEnabled", + "type": "bool" } ], "internalType": "struct E3", @@ -1364,6 +1394,11 @@ "internalType": "bytes", "name": "customParams", "type": "bytes" + }, + { + "internalType": "bool", + "name": "proofAggregationEnabled", + "type": "bool" } ], "internalType": "struct IEnclave.E3RequestParams", @@ -1420,6 +1455,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + } + ], + "name": "getPkVerifier", + "outputs": [ + { + "internalType": "contract IPkVerifier", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -1601,7 +1655,7 @@ }, { "internalType": "bytes32", - "name": "committeePublicKeyHash", + "name": "committeePublicKey", "type": "bytes32" } ], @@ -1641,6 +1695,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + } + ], + "name": "pkVerifiers", + "outputs": [ + { + "internalType": "contract IPkVerifier", + "name": "pkVerifier", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -1765,6 +1838,11 @@ "internalType": "bytes", "name": "customParams", "type": "bytes" + }, + { + "internalType": "bool", + "name": "proofAggregationEnabled", + "type": "bool" } ], "internalType": "struct IEnclave.E3RequestParams", @@ -1826,6 +1904,11 @@ "name": "decryptionVerifier", "type": "address" }, + { + "internalType": "contract IPkVerifier", + "name": "pkVerifier", + "type": "address" + }, { "internalType": "bytes32", "name": "committeePublicKey", @@ -1845,6 +1928,11 @@ "internalType": "address", "name": "requester", "type": "address" + }, + { + "internalType": "bool", + "name": "proofAggregationEnabled", + "type": "bool" } ], "internalType": "struct E3", @@ -1969,6 +2057,24 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + }, + { + "internalType": "contract IPkVerifier", + "name": "pkVerifier", + "type": "address" + } + ], + "name": "setPkVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -2039,11 +2145,11 @@ "type": "function" } ], - "bytecode": "0x6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6146f2806100d65f395ff3fe608060405234801561000f575f5ffd5b50600436106102a2575f3560e01c80638da5cb5b1161016c578063c1ab0f1f116100d5578063e59e46951161008f578063e59e4695146106d4578063ea71aa57146106e7578063f0691cba146106fa578063f2fde38b1461070d578063f81b8ef614610720578063fad8e11114610733578063fd2f3d0114610746575f5ffd5b8063c1ab0f1f14610641578063c4ccafa214610654578063cb64961714610676578063cbd168721461067f578063cf0f34c414610692578063cfbdc98d146106a5575f5ffd5b8063929a8faf11610126578063929a8faf146105ac57806399c6679d146105cd5780639c8570c8146105f5578063b68fd1be14610608578063bb2d1b821461061b578063bff232c11461062e575f5ffd5b80638da5cb5b146105445780638dcdd86b1461054c5780638e5ce3ad1461055e57806390173a41146105715780639117173c146105865780639231238614610599575f5ffd5b80634147a3601161020e578063715018a6116101c8578063715018a6146104dd57806377868ae4146104e55780637cfa9d74146104f85780637edcd7ab1461050b57806381476ec21461051e5780638581424314610531575f5ffd5b80634147a3601461043e578063459d92941461045d5780634e92ec631461049b5780634fc77264146104ae578063647846a5146104c15780636db5c8fd146104d4575f5ffd5b806315cce2241161025f57806315cce2241461037d5780631ba7294514610390578063343d842d146103a357806336c5d38a146103c45780634017daf0146103f3578063406ed35c1461041e575f5ffd5b806301d12f1c146102a657806302a3a9c9146102bb5780630ef81b2f146102ce57806310bc62811461030c57806311bd61d914610334578063156e6c7d1461035c575b5f5ffd5b6102b96102b4366004613943565b610759565b005b6102b96102c93660046139f3565b6108bf565b6102f66102dc366004613a0e565b5f908152600960205260409020546001600160a01b031690565b6040516103039190613a25565b60405180910390f35b6102f661031a366004613a0e565b60096020525f90815260409020546001600160a01b031681565b610347610342366004613a4c565b61096b565b60405163ffffffff9091168152602001610303565b61036f61036a366004613a74565b6109a7565b604051908152602001610303565b6102b961038b3660046139f3565b6109b3565b6102b961039e366004613aaa565b610a58565b6103b66103b1366004613a74565b610a6c565b604051610303929190613c3b565b6103e66103d2366004613a0e565b5f908152600e602052604090205460ff1690565b6040516103039190613c6b565b610406610401366004613a0e565b6111ef565b6040516103039c9b9a99989796959493929190613c79565b61043161042c366004613a0e565b611403565b6040516103039190613d2a565b61036f61044c366004613a0e565b600b6020525f908152604090205481565b61048b61046b366004613d3c565b8051602081830181018051600a8252928201919093012091525460ff1681565b6040519015158152602001610303565b6102b96104a9366004613a0e565b6116db565b6102b96104bc3660046139f3565b61176a565b6004546102f6906001600160a01b031681565b61036f60055481565b6102b96117fd565b6102b96104f3366004613d6d565b611810565b6102b9610506366004613a0e565b6118a8565b61048b610519366004613ddb565b6119a6565b6102b961052c366004613e52565b611bce565b6001546102f6906001600160a01b031681565b6102f6611cbe565b5f546102f6906001600160a01b031681565b6003546102f6906001600160a01b031681565b610579611cec565b6040516103039190613e72565b6102b9610594366004613a0e565b611d32565b6105796105a7366004613a0e565b611eda565b6105bf6105ba366004613a0e565b611f33565b604051610303929190613e93565b6102f66105db366004613a0e565b5f908152600f60205260409020546001600160a01b031690565b61048b610603366004613ddb565b611f5a565b6102b9610616366004613d6d565b6121f2565b6102b9610629366004613ea9565b612289565b6102b961063c3660046139f3565b612374565b6102b961064f366004613e52565b61241b565b61048b6106623660046139f3565b60076020525f908152604090205460ff1681565b61036f60065481565b6102b961068d366004613edc565b6124fe565b6102b96106a0366004613a0e565b6125b1565b6106c76106b3366004613a0e565b5f908152600c602052604090205460ff1690565b6040516103039190613f0f565b6102b96106e23660046139f3565b6125ee565b6102b96106f5366004613f1d565b612688565b6002546102f6906001600160a01b031681565b6102b961071b3660046139f3565b61279b565b6103e661072e366004613a0e565b6127d5565b6102b96107413660046139f3565b612965565b6102b96107543660046139f3565b6129fd565b5f610762612a8c565b805490915060ff600160401b82041615906001600160401b03165f811580156107885750825b90505f826001600160401b031660011480156107a35750303b155b9050811580156107b1575080155b156107cf5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107f957845460ff60401b1916600160401b1785555b61080233612ab6565b61080b886125b1565b6108148c612965565b61081d8b6125ee565b6108268a6108bf565b61082f896109b3565b61083887612ac7565b610841866121f2565b610849611cbe565b6001600160a01b03168d6001600160a01b03161461086a5761086a8d61279b565b83156108b057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b6108c7612bfb565b6001600160a01b0381166109225760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964204533526566756e644d616e6167657220616464726573730060448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f9557d04c1c0b16f93f13b69aed23b3b6ab935bff3c53ac81d17896d3583542ed905f90a250565b6011602052815f5260405f208160028110610984575f80fd5b60089182820401919006600402915091509054906101000a900463ffffffff1681565b620f4240805b50919050565b6109bb612bfb565b6001600160a01b038116158015906109e157506004546001600160a01b03828116911614155b8190610a015760405163eddf07f560e01b81526004016109199190613a25565b50600480546001600160a01b0319166001600160a01b0383161790556040517f722ff84c1234b2482061def5c82c6b5080c117b3cbb69d686844a051e4b8e7f390610a4d908390613a25565b60405180910390a150565b610a60612bfb565b610a6981612ac7565b50565b5f610a75613633565b5f601181610a866020870187613f54565b6003811115610a9757610a97613ac4565b6003811115610aa857610aa8613ac4565b8152602081019190915260409081015f20815180830190925260028282826020028201915f905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610acf579050505050505090505f81600160028110610b2657610b26613f6d565b602002015163ffffffff1611845f016020810190610b449190613f54565b90610b635760405163286c068d60e11b81526004016109199190613f81565b50602084013542811015610b8d57604051630b99e87960e01b815260040161091991815260200190565b5060408401356020850135811015610bbb5760405163174b5a0760e21b815260040161091991815260200190565b506014546013545f9190610bd3426040890135613fa3565b610bdd9190613fb6565b610be79190613fb6565b905060055481108190610c10576040516313b783af60e21b815260040161091991815260200190565b5060075f610c2460808801606089016139f3565b6001600160a01b0316815260208101919091526040015f205460ff16610c5060808701606088016139f3565b90610c6f5760405163295a6a6f60e11b81526004016109199190613a25565b505f610c7a866109a7565b60068054965090915085905f610c8f83613fc9565b9091555050604080514460208201529081018690525f9060600160408051808303601f1901815291815281516020928301205f898152600b84528281208690556004546010855283822080546001600160a01b039092166001600160a01b0319928316179055600c8552838220805460ff19166001179055600f909452829020805433941693909317909255601354919250610d2e9190890135613fb6565b5f878152600d6020908152604090912060010191909155818652610d5490880188613f54565b85602001906003811115610d6a57610d6a613ac4565b90816003811115610d7d57610d7d613ac4565b905250436040808701919091528051808201825290602089019060029083908390808284375f920191909152505050606080870191909152610dc590608089019089016139f3565b6001600160a01b031660a0860152610de06080880188613fe1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c080870191909152610e2890880188613fe1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525060e08a0194909452505050610120860181905261014086018190526040805160208101909152908152610160860152336101808601819052600454610ea9916001600160a01b03909116903085612c2d565b5f610eba6080890160608a016139f3565b6001600160a01b031663fefd9a8b8884610ed760808d018d613fe1565b610ee460a08f018f613fe1565b8f8060c00190610ef49190613fe1565b6040518963ffffffff1660e01b8152600401610f1798979695949392919061404b565b6020604051808303815f875af1158015610f33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5791906140a1565b5f818152600960205260409020549091506001600160a01b03168181610f93576040516381c4951960e01b815260040161091991815260200190565b50608087018290526001600160a01b0381166101008801525f8881526008602090815260409091208851815590880151600180830180548b94939260ff199190911690836003811115610fe857610fe8613ac4565b02179055506040820151816002015560608201518160030190600261100e9291906136b5565b506080820151600582015560a08201516006820180546001600160a01b0319166001600160a01b0390921691909117905560c082015160078201906110539082614149565b5060e082015160088201906110689082614149565b506101008201516009820180546001600160a01b0319166001600160a01b03909216919091179055610120820151600a820155610140820151600b820155610160820151600c8201906110bb9082614149565b506101809190910151600d90910180546001600160a01b0319166001600160a01b039283161790555f5460405163291a691b60e01b815291169063291a691b9061110d908b9087908b906004016141fe565b6020604051808303815f875af1158015611129573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061114d9190614243565b61116a57604051630d8dbe2560e01b815260040160405180910390fd5b61117a60808a0160608b016139f3565b6001600160a01b03167fc82a56518b9f52a6515ea4c47357881d49ce5088a24cc1dc05c966f3a0f28b7189896040516111b4929190613c3b565b60405180910390a2875f5160206146c65f395f51905f525f60016040516111dc929190614262565b60405180910390a2505050505050915091565b60086020525f9081526040902080546001820154600283015460058401546006850154600786018054959660ff90951695939492936001600160a01b03909216929161123a906140b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611266906140b8565b80156112b15780601f10611288576101008083540402835291602001916112b1565b820191905f5260205f20905b81548152906001019060200180831161129457829003601f168201915b5050505050908060080180546112c6906140b8565b80601f01602080910402602001604051908101604052809291908181526020018280546112f2906140b8565b801561133d5780601f106113145761010080835404028352916020019161133d565b820191905f5260205f20905b81548152906001019060200180831161132057829003601f168201915b5050506009840154600a850154600b860154600c8701805496976001600160a01b039094169692955090935090611373906140b8565b80601f016020809104026020016040519081016040528092919081815260200182805461139f906140b8565b80156113ea5780601f106113c1576101008083540402835291602001916113ea565b820191905f5260205f20905b8154815290600101906020018083116113cd57829003601f168201915b505050600d90930154919250506001600160a01b03168c565b61140b613633565b5f8281526008602090815260409182902082516101a08101909352805483526001810154909183019060ff16600381111561144857611448613ac4565b600381111561145957611459613ac4565b8152600282810154602083015260408051808201808352919093019291600385019182845b81548152602001906001019080831161147e5750505091835250506005820154602082015260068201546001600160a01b031660408201526007820180546060909201916114cb906140b8565b80601f01602080910402602001604051908101604052809291908181526020018280546114f7906140b8565b80156115425780601f1061151957610100808354040283529160200191611542565b820191905f5260205f20905b81548152906001019060200180831161152557829003601f168201915b5050505050815260200160088201805461155b906140b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611587906140b8565b80156115d25780601f106115a9576101008083540402835291602001916115d2565b820191905f5260205f20905b8154815290600101906020018083116115b557829003601f168201915b505050918352505060098201546001600160a01b03166020820152600a8201546040820152600b8201546060820152600c82018054608090920191611616906140b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611642906140b8565b801561168d5780601f106116645761010080835404028352916020019161168d565b820191905f5260205f20905b81548152906001019060200180831161167057829003601f168201915b5050509183525050600d91909101546001600160a01b0390811660209092019190915260a08201519192508391166109ad5760405163cd6f4a4f60e01b815260040161091991815260200190565b6116e3612bfb565b5f8181526009602052604090205481906001600160a01b031661171c576040516381c4951960e01b815260040161091991815260200190565b505f818152600960205260409081902080546001600160a01b0319169055517f104eb329a192aef26eddea07c2af5ad2587792e62b37ed4045b6ba59bc5540fc90610a4d9083815260200190565b611772612bfb565b6001600160a01b0381165f90815260076020526040902054819060ff166117ad576040516321ac7c5f60e01b81526004016109199190613a25565b506001600160a01b0381165f9081526007602052604090819020805460ff19169055517f56070b80bd617fcd2f7a284861edb488830a38f9dedcd77b2cb2f4eac17743e790610a4d908390613a25565b611805612bfb565b61180e5f612c9a565b565b611818612bfb565b80515f5b8181101561186c57600a83828151811061183857611838613f6d565b602002602001015160405161184d919061427d565b908152604051908190036020019020805460ff1916905560010161181c565b507fd1b46e030b48add7bc03225cc5a6f403970976b36983f99ec31d535d627fc7db8260405161189c9190614293565b60405180910390a15050565b5f546001600160a01b031633146118d15760405162461bcd60e51b8152600401610919906142f6565b5f818152600c602052604090205460ff1660018160068111156118f6576118f6613ac4565b1461191b57816001826040516337e1404160e01b815260040161091993929190614327565b5f828152600c60205260409020805460ff191660021790556012546119409042613fb6565b5f838152600d602052604080822092909255905183917fc44405af9078047712501f519e1fb900c2896c62b488336f84529c72ae16e6f191a2815f5160206146c65f395f51905f526001600260405161199a929190614262565b60405180910390a25050565b5f5f6119b187611403565b5f888152600c602052604090205490915060ff1660048160068111156119d9576119d9613ac4565b1488600483909192611a01576040516337e1404160e01b815260040161091993929190614327565b5050505f888152600d60209081526040918290208251606081018452815481526001820154928101929092526002015491810182905290899042811015611a64576040516308f3034360e31b815260048101929092526024820152604401610919565b50505f898152600860205260409020600c01611a81888a83614348565b505f898152600c6020526040902080546005919060ff191660018302179055508261010001516001600160a01b0316632f0e1bbf8a8a8a604051611ac69291906143fc565b6040519081900381206001600160e01b031960e085901b168252611af192918b908b9060040161440b565b602060405180830381865afa158015611b0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b309190614243565b9350878785611b5457604051632f9f8ab960e01b815260040161091992919061442a565b5050611b5f89612d0a565b887f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca1698989604051611b9192919061442a565b60405180910390a2885f5160206146c65f395f51905f5260046005604051611bba929190614262565b60405180910390a250505095945050505050565b5f546001600160a01b03163314611bf75760405162461bcd60e51b8152600401610919906142f6565b5f828152600c602052604090205460ff166002816006811115611c1c57611c1c613ac4565b14611c4157826002826040516337e1404160e01b815260040161091993929190614327565b5f838152600c60209081526040808320805460ff191660031790556008909152808220600a018490555184917f11df18edb9bc9cd90a79068e0e208b630202148643d797d6150e7bacb733e63c91a2825f5160206146c65f395f51905f5260026003604051611cb1929190614262565b60405180910390a2505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b611d0d60405180606001604052805f81526020015f81526020015f81525090565b5060408051606081018252601254815260135460208201526014549181019190915290565b5f818152600c602052604090205460ff166006816006811115611d5757611d57613ac4565b14611d945760405162461bcd60e51b815260206004820152600d60248201526c114cc81b9bdd0819985a5b1959609a1b6044820152606401610919565b5f828152600b602052604090205480611de65760405162461bcd60e51b8152602060048201526014602482015273139bc81c185e5b595b9d081d1bc81c99599d5b9960621b6044820152606401610919565b5f838152600b60205260408120819055611dff846130b9565b5f858152601060205260409020546002549192506001600160a01b0390811691611e2c91839116856131ad565b60025460405163da19b69760e01b81526001600160a01b039091169063da19b69790611e62908890879087908790600401614480565b5f604051808303815f87803b158015611e79575f5ffd5b505af1158015611e8b573d5f5f3e3d5ffd5b50505050847f5297818f48a66292b8b3e2caab83eec531b669bb20807fd38cf006adb2a07317848451604051611ecb929190918252602082015260400190565b60405180910390a25050505050565b611efb60405180606001604052805f81526020015f81526020015f81525090565b505f908152600d6020908152604091829020825160608101845281548152600182015492810192909252600201549181019190915290565b5f818152600c6020526040812054819060ff16611f5084826131d8565b9250925050915091565b5f5f611f6587611403565b5f888152600c602052604090205490915060ff166003816006811115611f8d57611f8d613ac4565b1488600383909192611fb5576040516337e1404160e01b815260040161091993929190614327565b5050505f888152600d6020908152604091829020825160608101845281548152600182015492810183905260029091015492810192909252899042811015612019576040516308f3034360e31b815260048101929092526024820152604401610919565b50506060830151602001518990428111156120505760405163017e35e560e71b815260048101929092526024820152604401610919565b505061014083015189901561207b57604051637eb9cea960e11b815260040161091991815260200190565b505f888860405161208d9291906143fc565b60408051918290039091205f8c815260086020908152838220600b01839055600c905291909120805460ff191660041790556014549091506120cf9042613fb6565b5f8b8152600d6020526040908190206002019190915560a08501519051632f0e1bbf60e01b81526001600160a01b0390911690632f0e1bbf9061211c908d9085908c908c9060040161440b565b6020604051808303815f875af1158015612138573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215c9190614243565b945088888661218057604051632f9f8ab960e01b815260040161091992919061442a565b5050897f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade0718a8a6040516121b492919061442a565b60405180910390a2895f5160206146c65f395f51905f52600360046040516121dd929190614262565b60405180910390a25050505095945050505050565b6121fa612bfb565b80515f5b81811015612259576001600a84838151811061221c5761221c613f6d565b6020026020010151604051612231919061427d565b908152604051908190036020019020805491151560ff199092169190911790556001016121fe565b507f027b83cad653f54850fef6faa8c705f73a53e7f8de50a3a33ac1e0e3a5c0be818260405161189c9190614293565b5f546001600160a01b03163314806122ab57506003546001600160a01b031633145b6122f75760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c79205265676973747279206f7220536c617368696e674d6772000000006044820152606401610919565b5f8160ff1611801561230d5750600d60ff821611155b6123525760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103330b4b63ab932903932b0b9b7b760511b6044820152606401610919565b612370828260ff16600d81111561236b5761236b613ac4565b613360565b5050565b61237c612bfb565b6001600160a01b0381166123d25760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420536c617368696e674d616e616765722061646472657373006044820152606401610919565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f4ccc8ed483c7c44c3602c3c38afc2c014a8f1d2dc210dfe58ebeeeead230f8e0905f90a250565b6003546001600160a01b0316331461246c5760405162461bcd60e51b815260206004820152601460248201527327b7363c9029b630b9b434b733a6b0b730b3b2b960611b6044820152606401610919565b60025460405163c1ab0f1f60e01b815260048101849052602481018390526001600160a01b039091169063c1ab0f1f906044015f604051808303815f87803b1580156124b6575f5ffd5b505af11580156124c8573d5f5f3e3d5ffd5b50505050817f4f41a3b0a032ebcae925f2ace77d507435840ca4b2dbaffdd7723fa8d72ee5428260405161199a91815260200190565b612506612bfb565b6001600160a01b0381161580159061253757505f828152600960205260409020546001600160a01b03828116911614155b8290612559576040516381c4951960e01b815260040161091991815260200190565b505f8281526009602090815260409182902080546001600160a01b0319166001600160a01b03851617905590518381527ff4041a3f914dac3bc9bf5f003ba41f28dbb84abe42f4e07c76266f5c8ceecb69910161189c565b6125b9612bfb565b60058190556040518181527fba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b52355290602001610a4d565b6125f6612bfb565b6001600160a01b0381161580159061261c57506001546001600160a01b03828116911614155b819061263c576040516320252f0b60e01b81526004016109199190613a25565b50600180546001600160a01b0319166001600160a01b0383161790556040517fad4055f18cdad6f4bdd71afe3a72cbeee964217943e1bde38f138289e981a9a790610a4d908390613a25565b612690612bfb565b61269d60208201826144ca565b63ffffffff166126b360408301602084016144ca565b63ffffffff16101580156126d857505f6126d060208301836144ca565b63ffffffff16115b6127185760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081d1a1c995cda1bdb19607a1b6044820152606401610919565b8060115f84600381111561272e5761272e613ac4565b600381111561273f5761273f613ac4565b815260208101919091526040015f206127599160026136f3565b5081600381111561276c5761276c613ac4565b7f8b56fae526eee054f0849759a99fc7d4ff3823824ebf097a56f7d78adb6b34fa8260405161199a91906144e3565b6127a3612bfb565b6001600160a01b0381166127cc575f604051631e4fbdf760e01b81526004016109199190613a25565b610a6981612c9a565b5f818152600c602052604081205460ff16818160068111156127f9576127f9613ac4565b0361281e57826001826040516337e1404160e01b815260040161091993929190614327565b600581600681111561283257612832613ac4565b036128535760405163462c7bed60e01b815260048101849052602401610919565b600681600681111561286757612867613ac4565b0361288857604051633de16e3560e11b815260048101849052602401610919565b5f61289384836131d8565b93509050806128b857604051639f65d93560e01b815260048101859052602401610919565b5f848152600c60209081526040808320805460ff19908116600617909155600e9092529091208054859216600183600d8111156128f7576128f7613ac4565b0217905550835f5160206146c65f395f51905f5283600660405161291c929190614262565b60405180910390a2837fe20209be7caae6e76291267cfa711353981274bf127e94f16eb9ec44b68582bb8385604051612956929190614521565b60405180910390a25050919050565b61296d612bfb565b6001600160a01b0381161580159061299257505f546001600160a01b03828116911614155b81906129b2576040516375ac4eb760e11b81526004016109199190613a25565b505f80546001600160a01b0319166001600160a01b0383161790556040517f80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b690610a4d908390613a25565b6001600160a01b0381165f90815260076020526040902054819060ff1615612a395760405163b29d459560e01b81526004016109199190613a25565b506001600160a01b0381165f9081526007602052604090819020805460ff19166001179055517fb8d368517268f297fff00825d67d098763117d061360d31027be5b2e1a59d46790610a4d908390613a25565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b612abe6134b1565b610a69816134d6565b8035612b0a5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420444b472077696e646f7760701b6044820152606401610919565b5f816020013511612b565760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420636f6d707574652077696e646f7760501b6044820152606401610919565b5f816040013511612ba55760405162461bcd60e51b8152602060048201526019602482015278496e76616c69642064656372797074696f6e2077696e646f7760381b6044820152606401610919565b80356012819055602080830135601381905560408085013560148190558151948552928401919091528201527f7e86ba16b805e2835af5c5b7aa5a942ced8bcc1fb95a05fbe42dae3862350a1690606001610a4d565b33612c04611cbe565b6001600160a01b03161461180e573360405163118cdaa760e01b81526004016109199190613a25565b6040516001600160a01b038481166024830152838116604483015260648201839052612c949186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506134de565b50505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f805460405162beb08960e51b8152600481018490526001600160a01b03909116906317d61120906024015f60405180830381865afa158015612d4f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d76919081019061453c565b80515f848152600b60209081526040808320805490849055601090925282205493945091926001600160a01b031690829003612e14576002546040516341489f1560e01b81526001600160a01b03909116906341489f1590612de0908890889086906004016145cb565b5f604051808303815f87803b158015612df7575f5ffd5b505af1158015612e09573d5f5f3e3d5ffd5b505050505050505050565b825f03612eb5575f858152600f60205260409020546001600160a01b03168015612e4c57612e4c6001600160a01b03831682856131ad565b6002546040516341489f1560e01b81526001600160a01b03909116906341489f1590612e80908990899087906004016145cb565b5f604051808303815f87803b158015612e97575f5ffd5b505af1158015612ea9573d5f5f3e3d5ffd5b50505050505050505050565b5f836001600160401b03811115612ece57612ece6137e5565b604051908082528060200260200182016040528015612ef7578160200160208202803683370190505b5090505f612f0585856145fb565b90505f805b86811015612f445782848281518110612f2557612f25613f6d565b6020908102919091010152612f3a8383613fb6565b9150600101612f0a565b505f612f508287613fa3565b90508015612f8d578084612f6560018a613fa3565b81518110612f7557612f75613f6d565b60200260200101818151612f899190613fb6565b9052505b600154612fa7906001600160a01b03878116911688613541565b600154604051636ec640c760e11b81526001600160a01b039091169063dd8c818e90612fdb9088908c90899060040161464a565b5f604051808303815f87803b158015612ff2575f5ffd5b505af1158015613004573d5f5f3e3d5ffd5b505060015461302292506001600160a01b038881169250165f613541565b887fac9fe8ad7f55eac03284399116ecafc104f10459773f4cdf47063c46e5be335a898660405161305492919061467f565b60405180910390a26002546040516341489f1560e01b81526001600160a01b03909116906341489f1590613090908c908c908a906004016145cb565b5f604051808303815f87803b1580156130a7575f5ffd5b505af11580156108b0573d5f5f3e3d5ffd5b5f818152600e602052604090205460609060ff16600181600d8111156130e1576130e1613ac4565b14806130fe5750600281600d8111156130fc576130fc613ac4565b145b15613136575f5b60405190808252806020026020018201604052801561312e578160200160208202803683370190505b509392505050565b5f5460405162beb08960e51b8152600481018590526001600160a01b03909116906317d61120906024015f60405180830381865afa92505050801561319c57506040513d5f823e601f3d908101601f19168201604052613199919081019061453c565b60015b6131a6575f613105565b9392505050565b6131d383846001600160a01b031663a9059cbb8585604051602401612c629291906146ac565b505050565b5f828152600d60209081526040808320815160608101835281548152600182015493810193909352600201548282015282549051632800d82960e01b81526004810186905283929183916001600160a01b0390911690632800d82990602401602060405180830381865afa158015613252573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061327691906140a1565b9050600185600681111561328c5761328c613ac4565b14801561329857508042115b156132ab57600180935093505050613359565b60028560068111156132bf576132bf613ac4565b1480156132cc5750815142115b156132e05760016003935093505050613359565b60038560068111156132f4576132f4613ac4565b1480156133045750816020015142115b156133185760016006935093505050613359565b600485600681111561332c5761332c613ac4565b14801561333c5750816040015142115b15613350576001600a935093505050613359565b5f5f9350935050505b9250929050565b5f828152600c602052604081205460ff169081600681111561338457613384613ac4565b036133a957826001826040516337e1404160e01b815260040161091993929190614327565b60058160068111156133bd576133bd613ac4565b036133de5760405163462c7bed60e01b815260048101849052602401610919565b60068160068111156133f2576133f2613ac4565b0361341357604051633de16e3560e11b815260048101849052602401610919565b5f838152600c60209081526040808320805460ff19908116600617909155600e9092529091208054849216600183600d81111561345257613452613ac4565b0217905550825f5160206146c65f395f51905f52826006604051613477929190614262565b60405180910390a2827fe20209be7caae6e76291267cfa711353981274bf127e94f16eb9ec44b68582bb8284604051611cb1929190614521565b6134b96135d1565b61180e57604051631afcd79f60e31b815260040160405180910390fd5b6127a36134b1565b5f5f60205f8451602086015f885af1806134fd576040513d5f823e3d81fd5b50505f513d91508115613514578060011415613521565b6001600160a01b0384163b155b15612c945783604051635274afe760e01b81526004016109199190613a25565b5f836001600160a01b031663095ea7b384846040516024016135649291906146ac565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050905061359d84826135ea565b612c94576135c784856001600160a01b031663095ea7b3865f604051602401612c629291906146ac565b612c9484826134de565b5f6135da612a8c565b54600160401b900460ff16919050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156136295750811561361b5780600114613629565b5f866001600160a01b03163b115b9695505050505050565b604080516101a081019091525f808252602082019081526020015f815260200161365b61378f565b81526020015f81526020015f6001600160a01b0316815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f8152602001606081526020015f6001600160a01b031681525090565b82600281019282156136e3579160200282015b828111156136e35782518255916020019190600101906136c8565b506136ef9291506137ad565b5090565b6001830191839082156136e3579160200282015f5b8382111561375257833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302613708565b80156137825782816101000a81549063ffffffff0219169055600401602081600301049283019260010302613752565b50506136ef9291506137ad565b60405180604001604052806002906020820280368337509192915050565b5b808211156136ef575f81556001016137ae565b6001600160a01b0381168114610a69575f5ffd5b5f606082840312156109ad575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613821576138216137e5565b604052919050565b5f6001600160401b03821115613841576138416137e5565b5060051b60200190565b5f82601f83011261385a575f5ffd5b81356001600160401b03811115613873576138736137e5565b613886601f8201601f19166020016137f9565b81815284602083860101111561389a575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f82601f8301126138c5575f5ffd5b81356138d86138d382613829565b6137f9565b8082825260208201915060208360051b8601019250858311156138f9575f5ffd5b602085015b838110156139395780356001600160401b0381111561391b575f5ffd5b61392a886020838a010161384b565b845250602092830192016138fe565b5095945050505050565b5f5f5f5f5f5f5f5f610140898b03121561395b575f5ffd5b8835613966816137c1565b97506020890135613976816137c1565b96506040890135613986816137c1565b95506060890135613996816137c1565b945060808901356139a6816137c1565b935060a089013592506139bc8a60c08b016137d5565b91506101208901356001600160401b038111156139d7575f5ffd5b6139e38b828c016138b6565b9150509295985092959890939650565b5f60208284031215613a03575f5ffd5b81356131a6816137c1565b5f60208284031215613a1e575f5ffd5b5035919050565b6001600160a01b0391909116815260200190565b803560048110613a47575f5ffd5b919050565b5f5f60408385031215613a5d575f5ffd5b613a6683613a39565b946020939093013593505050565b5f60208284031215613a84575f5ffd5b81356001600160401b03811115613a99575f5ffd5b820160e081850312156131a6575f5ffd5b5f60608284031215613aba575f5ffd5b6131a683836137d5565b634e487b7160e01b5f52602160045260245ffd5b60048110613ae857613ae8613ac4565b9052565b805f5b6002811015612c94578151845260209384019390910190600101613aef565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b805182525f6020820151613b536020850182613ad8565b50604082015160408401526060820151613b706060850182613aec565b50608082015160a084015260a0820151613b9560c08501826001600160a01b03169052565b5060c08201516101c060e0850152613bb16101c0850182613b0e565b905060e0830151848203610100860152613bcb8282613b0e565b915050610100830151613bea6101208601826001600160a01b03169052565b50610120830151610140850152610140830151610160850152610160830151848203610180860152613c1c8282613b0e565b91505061018083015161312e6101a08601826001600160a01b03169052565b828152604060208201525f613c536040830184613b3c565b949350505050565b600e8110613ae857613ae8613ac4565b60208101612ab08284613c5b565b8c8152613c89602082018d613ad8565b8a604082015289606082015260018060a01b038916608082015261018060a08201525f613cba61018083018a613b0e565b82810360c0840152613ccc818a613b0e565b6001600160a01b03891660e0850152610100840188905261012084018790528381036101408501529050613d008186613b0e565b915050613d196101608301846001600160a01b03169052565b9d9c50505050505050505050505050565b602081525f6131a66020830184613b3c565b5f60208284031215613d4c575f5ffd5b81356001600160401b03811115613d61575f5ffd5b613c538482850161384b565b5f60208284031215613d7d575f5ffd5b81356001600160401b03811115613d92575f5ffd5b613c53848285016138b6565b5f5f83601f840112613dae575f5ffd5b5081356001600160401b03811115613dc4575f5ffd5b602083019150836020828501011115613359575f5ffd5b5f5f5f5f5f60608688031215613def575f5ffd5b8535945060208601356001600160401b03811115613e0b575f5ffd5b613e1788828901613d9e565b90955093505060408601356001600160401b03811115613e35575f5ffd5b613e4188828901613d9e565b969995985093965092949392505050565b5f5f60408385031215613e63575f5ffd5b50508035926020909101359150565b81518152602080830151908201526040808301519082015260608101612ab0565b8215158152604081016131a66020830184613c5b565b5f5f60408385031215613eba575f5ffd5b82359150602083013560ff81168114613ed1575f5ffd5b809150509250929050565b5f5f60408385031215613eed575f5ffd5b823591506020830135613ed1816137c1565b60078110613ae857613ae8613ac4565b60208101612ab08284613eff565b5f5f60608385031215613f2e575f5ffd5b613f3783613a39565b915083606084011115613f48575f5ffd5b50926020919091019150565b5f60208284031215613f64575f5ffd5b6131a682613a39565b634e487b7160e01b5f52603260045260245ffd5b60208101612ab08284613ad8565b634e487b7160e01b5f52601160045260245ffd5b81810381811115612ab057612ab0613f8f565b80820180821115612ab057612ab0613f8f565b5f60018201613fda57613fda613f8f565b5060010190565b5f5f8335601e19843603018112613ff6575f5ffd5b8301803591506001600160401b0382111561400f575f5ffd5b602001915036819003821315613359575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b88815287602082015260a060408201525f61406a60a08301888a614023565b828103606084015261407d818789614023565b90508281036080840152614092818587614023565b9b9a5050505050505050505050565b5f602082840312156140b1575f5ffd5b5051919050565b600181811c908216806140cc57607f821691505b6020821081036109ad57634e487b7160e01b5f52602260045260245ffd5b601f8211156131d357805f5260205f20601f840160051c8101602085101561410f5750805b601f840160051c820191505b8181101561412e575f815560010161411b565b5050505050565b5f19600383901b1c191660019190911b1790565b81516001600160401b03811115614162576141626137e5565b6141768161417084546140b8565b846140ea565b6020601f8211600181146141a3575f83156141915750848201515b61419b8482614135565b85555061412e565b5f84815260208120601f198516915b828110156141d257878501518255602094850194600190920191016141b2565b50848210156141ef57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b838152602081018390526080810160408201835f5b600281101561423857815163ffffffff16835260209283019290910190600101614213565b505050949350505050565b5f60208284031215614253575f5ffd5b815180151581146131a6575f5ffd5b604081016142708285613eff565b6131a66020830184613eff565b5f82518060208501845e5f920191825250919050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156142ea57603f198786030184526142d5858351613b0e565b945060209384019391909101906001016142b9565b50929695505050505050565b6020808252601790820152764f6e6c79204369706865726e6f6465526567697374727960481b604082015260600190565b8381526060810161433b6020830185613eff565b613c536040830184613eff565b6001600160401b0383111561435f5761435f6137e5565b6143738361436d83546140b8565b836140ea565b5f601f84116001811461439f575f851561438d5750838201355b6143978682614135565b84555061412e565b5f83815260208120601f198716915b828110156143ce57868501358255602094850194600190920191016143ae565b50868210156143ea575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b818382375f9101908152919050565b848152836020820152606060408201525f613629606083018486614023565b602081525f613c53602083018486614023565b5f8151808452602084019350602083015f5b828110156144765781516001600160a01b031686526020958601959091019060010161444f565b5093949350505050565b848152836020820152608060408201525f61449e608083018561443d565b905060018060a01b038316606083015295945050505050565b803563ffffffff81168114613a47575f5ffd5b5f602082840312156144da575f5ffd5b6131a6826144b7565b6040810181835f5b60028110156145185763ffffffff614502836144b7565b16835260209283019291909101906001016144eb565b50505092915050565b6040810161452f8285613eff565b6131a66020830184613c5b565b5f6020828403121561454c575f5ffd5b81516001600160401b03811115614561575f5ffd5b8201601f81018413614571575f5ffd5b805161457f6138d382613829565b8082825260208201915060208360051b8501019250868311156145a0575f5ffd5b6020840193505b828410156136295783516145ba816137c1565b8252602093840193909101906145a7565b838152606060208201525f6145e3606083018561443d565b905060018060a01b0383166040830152949350505050565b5f8261461557634e487b7160e01b5f52601260045260245ffd5b500490565b5f8151808452602084019350602083015f5b8281101561447657815186526020958601959091019060010161462c565b6001600160a01b03841681526060602082018190525f9061466d9083018561443d565b8281036040840152613629818561461a565b604081525f614691604083018561443d565b82810360208401526146a3818561461a565b95945050505050565b6001600160a01b0392909216825260208201526040019056fe1b418a230a21d37a078bf8f16decbde8ccceacd77159371f62f0d4ea00d19967a164736f6c634300081c000a", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106102a2575f3560e01c80638da5cb5b1161016c578063c1ab0f1f116100d5578063e59e46951161008f578063e59e4695146106d4578063ea71aa57146106e7578063f0691cba146106fa578063f2fde38b1461070d578063f81b8ef614610720578063fad8e11114610733578063fd2f3d0114610746575f5ffd5b8063c1ab0f1f14610641578063c4ccafa214610654578063cb64961714610676578063cbd168721461067f578063cf0f34c414610692578063cfbdc98d146106a5575f5ffd5b8063929a8faf11610126578063929a8faf146105ac57806399c6679d146105cd5780639c8570c8146105f5578063b68fd1be14610608578063bb2d1b821461061b578063bff232c11461062e575f5ffd5b80638da5cb5b146105445780638dcdd86b1461054c5780638e5ce3ad1461055e57806390173a41146105715780639117173c146105865780639231238614610599575f5ffd5b80634147a3601161020e578063715018a6116101c8578063715018a6146104dd57806377868ae4146104e55780637cfa9d74146104f85780637edcd7ab1461050b57806381476ec21461051e5780638581424314610531575f5ffd5b80634147a3601461043e578063459d92941461045d5780634e92ec631461049b5780634fc77264146104ae578063647846a5146104c15780636db5c8fd146104d4575f5ffd5b806315cce2241161025f57806315cce2241461037d5780631ba7294514610390578063343d842d146103a357806336c5d38a146103c45780634017daf0146103f3578063406ed35c1461041e575f5ffd5b806301d12f1c146102a657806302a3a9c9146102bb5780630ef81b2f146102ce57806310bc62811461030c57806311bd61d914610334578063156e6c7d1461035c575b5f5ffd5b6102b96102b4366004613943565b610759565b005b6102b96102c93660046139f3565b6108bf565b6102f66102dc366004613a0e565b5f908152600960205260409020546001600160a01b031690565b6040516103039190613a25565b60405180910390f35b6102f661031a366004613a0e565b60096020525f90815260409020546001600160a01b031681565b610347610342366004613a4c565b61096b565b60405163ffffffff9091168152602001610303565b61036f61036a366004613a74565b6109a7565b604051908152602001610303565b6102b961038b3660046139f3565b6109b3565b6102b961039e366004613aaa565b610a58565b6103b66103b1366004613a74565b610a6c565b604051610303929190613c3b565b6103e66103d2366004613a0e565b5f908152600e602052604090205460ff1690565b6040516103039190613c6b565b610406610401366004613a0e565b6111ef565b6040516103039c9b9a99989796959493929190613c79565b61043161042c366004613a0e565b611403565b6040516103039190613d2a565b61036f61044c366004613a0e565b600b6020525f908152604090205481565b61048b61046b366004613d3c565b8051602081830181018051600a8252928201919093012091525460ff1681565b6040519015158152602001610303565b6102b96104a9366004613a0e565b6116db565b6102b96104bc3660046139f3565b61176a565b6004546102f6906001600160a01b031681565b61036f60055481565b6102b96117fd565b6102b96104f3366004613d6d565b611810565b6102b9610506366004613a0e565b6118a8565b61048b610519366004613ddb565b6119a6565b6102b961052c366004613e52565b611bce565b6001546102f6906001600160a01b031681565b6102f6611cbe565b5f546102f6906001600160a01b031681565b6003546102f6906001600160a01b031681565b610579611cec565b6040516103039190613e72565b6102b9610594366004613a0e565b611d32565b6105796105a7366004613a0e565b611eda565b6105bf6105ba366004613a0e565b611f33565b604051610303929190613e93565b6102f66105db366004613a0e565b5f908152600f60205260409020546001600160a01b031690565b61048b610603366004613ddb565b611f5a565b6102b9610616366004613d6d565b6121f2565b6102b9610629366004613ea9565b612289565b6102b961063c3660046139f3565b612374565b6102b961064f366004613e52565b61241b565b61048b6106623660046139f3565b60076020525f908152604090205460ff1681565b61036f60065481565b6102b961068d366004613edc565b6124fe565b6102b96106a0366004613a0e565b6125b1565b6106c76106b3366004613a0e565b5f908152600c602052604090205460ff1690565b6040516103039190613f0f565b6102b96106e23660046139f3565b6125ee565b6102b96106f5366004613f1d565b612688565b6002546102f6906001600160a01b031681565b6102b961071b3660046139f3565b61279b565b6103e661072e366004613a0e565b6127d5565b6102b96107413660046139f3565b612965565b6102b96107543660046139f3565b6129fd565b5f610762612a8c565b805490915060ff600160401b82041615906001600160401b03165f811580156107885750825b90505f826001600160401b031660011480156107a35750303b155b9050811580156107b1575080155b156107cf5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107f957845460ff60401b1916600160401b1785555b61080233612ab6565b61080b886125b1565b6108148c612965565b61081d8b6125ee565b6108268a6108bf565b61082f896109b3565b61083887612ac7565b610841866121f2565b610849611cbe565b6001600160a01b03168d6001600160a01b03161461086a5761086a8d61279b565b83156108b057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b6108c7612bfb565b6001600160a01b0381166109225760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964204533526566756e644d616e6167657220616464726573730060448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f9557d04c1c0b16f93f13b69aed23b3b6ab935bff3c53ac81d17896d3583542ed905f90a250565b6011602052815f5260405f208160028110610984575f80fd5b60089182820401919006600402915091509054906101000a900463ffffffff1681565b620f4240805b50919050565b6109bb612bfb565b6001600160a01b038116158015906109e157506004546001600160a01b03828116911614155b8190610a015760405163eddf07f560e01b81526004016109199190613a25565b50600480546001600160a01b0319166001600160a01b0383161790556040517f722ff84c1234b2482061def5c82c6b5080c117b3cbb69d686844a051e4b8e7f390610a4d908390613a25565b60405180910390a150565b610a60612bfb565b610a6981612ac7565b50565b5f610a75613633565b5f601181610a866020870187613f54565b6003811115610a9757610a97613ac4565b6003811115610aa857610aa8613ac4565b8152602081019190915260409081015f20815180830190925260028282826020028201915f905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610acf579050505050505090505f81600160028110610b2657610b26613f6d565b602002015163ffffffff1611845f016020810190610b449190613f54565b90610b635760405163286c068d60e11b81526004016109199190613f81565b50602084013542811015610b8d57604051630b99e87960e01b815260040161091991815260200190565b5060408401356020850135811015610bbb5760405163174b5a0760e21b815260040161091991815260200190565b506014546013545f9190610bd3426040890135613fa3565b610bdd9190613fb6565b610be79190613fb6565b905060055481108190610c10576040516313b783af60e21b815260040161091991815260200190565b5060075f610c2460808801606089016139f3565b6001600160a01b0316815260208101919091526040015f205460ff16610c5060808701606088016139f3565b90610c6f5760405163295a6a6f60e11b81526004016109199190613a25565b505f610c7a866109a7565b60068054965090915085905f610c8f83613fc9565b9091555050604080514460208201529081018690525f9060600160408051808303601f1901815291815281516020928301205f898152600b84528281208690556004546010855283822080546001600160a01b039092166001600160a01b0319928316179055600c8552838220805460ff19166001179055600f909452829020805433941693909317909255601354919250610d2e9190890135613fb6565b5f878152600d6020908152604090912060010191909155818652610d5490880188613f54565b85602001906003811115610d6a57610d6a613ac4565b90816003811115610d7d57610d7d613ac4565b905250436040808701919091528051808201825290602089019060029083908390808284375f920191909152505050606080870191909152610dc590608089019089016139f3565b6001600160a01b031660a0860152610de06080880188613fe1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c080870191909152610e2890880188613fe1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525060e08a0194909452505050610120860181905261014086018190526040805160208101909152908152610160860152336101808601819052600454610ea9916001600160a01b03909116903085612c2d565b5f610eba6080890160608a016139f3565b6001600160a01b031663fefd9a8b8884610ed760808d018d613fe1565b610ee460a08f018f613fe1565b8f8060c00190610ef49190613fe1565b6040518963ffffffff1660e01b8152600401610f1798979695949392919061404b565b6020604051808303815f875af1158015610f33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5791906140a1565b5f818152600960205260409020549091506001600160a01b03168181610f93576040516381c4951960e01b815260040161091991815260200190565b50608087018290526001600160a01b0381166101008801525f8881526008602090815260409091208851815590880151600180830180548b94939260ff199190911690836003811115610fe857610fe8613ac4565b02179055506040820151816002015560608201518160030190600261100e9291906136b5565b506080820151600582015560a08201516006820180546001600160a01b0319166001600160a01b0390921691909117905560c082015160078201906110539082614149565b5060e082015160088201906110689082614149565b506101008201516009820180546001600160a01b0319166001600160a01b03909216919091179055610120820151600a820155610140820151600b820155610160820151600c8201906110bb9082614149565b506101809190910151600d90910180546001600160a01b0319166001600160a01b039283161790555f5460405163291a691b60e01b815291169063291a691b9061110d908b9087908b906004016141fe565b6020604051808303815f875af1158015611129573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061114d9190614243565b61116a57604051630d8dbe2560e01b815260040160405180910390fd5b61117a60808a0160608b016139f3565b6001600160a01b03167fc82a56518b9f52a6515ea4c47357881d49ce5088a24cc1dc05c966f3a0f28b7189896040516111b4929190613c3b565b60405180910390a2875f5160206146c65f395f51905f525f60016040516111dc929190614262565b60405180910390a2505050505050915091565b60086020525f9081526040902080546001820154600283015460058401546006850154600786018054959660ff90951695939492936001600160a01b03909216929161123a906140b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611266906140b8565b80156112b15780601f10611288576101008083540402835291602001916112b1565b820191905f5260205f20905b81548152906001019060200180831161129457829003601f168201915b5050505050908060080180546112c6906140b8565b80601f01602080910402602001604051908101604052809291908181526020018280546112f2906140b8565b801561133d5780601f106113145761010080835404028352916020019161133d565b820191905f5260205f20905b81548152906001019060200180831161132057829003601f168201915b5050506009840154600a850154600b860154600c8701805496976001600160a01b039094169692955090935090611373906140b8565b80601f016020809104026020016040519081016040528092919081815260200182805461139f906140b8565b80156113ea5780601f106113c1576101008083540402835291602001916113ea565b820191905f5260205f20905b8154815290600101906020018083116113cd57829003601f168201915b505050600d90930154919250506001600160a01b03168c565b61140b613633565b5f8281526008602090815260409182902082516101a08101909352805483526001810154909183019060ff16600381111561144857611448613ac4565b600381111561145957611459613ac4565b8152600282810154602083015260408051808201808352919093019291600385019182845b81548152602001906001019080831161147e5750505091835250506005820154602082015260068201546001600160a01b031660408201526007820180546060909201916114cb906140b8565b80601f01602080910402602001604051908101604052809291908181526020018280546114f7906140b8565b80156115425780601f1061151957610100808354040283529160200191611542565b820191905f5260205f20905b81548152906001019060200180831161152557829003601f168201915b5050505050815260200160088201805461155b906140b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611587906140b8565b80156115d25780601f106115a9576101008083540402835291602001916115d2565b820191905f5260205f20905b8154815290600101906020018083116115b557829003601f168201915b505050918352505060098201546001600160a01b03166020820152600a8201546040820152600b8201546060820152600c82018054608090920191611616906140b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611642906140b8565b801561168d5780601f106116645761010080835404028352916020019161168d565b820191905f5260205f20905b81548152906001019060200180831161167057829003601f168201915b5050509183525050600d91909101546001600160a01b0390811660209092019190915260a08201519192508391166109ad5760405163cd6f4a4f60e01b815260040161091991815260200190565b6116e3612bfb565b5f8181526009602052604090205481906001600160a01b031661171c576040516381c4951960e01b815260040161091991815260200190565b505f818152600960205260409081902080546001600160a01b0319169055517f104eb329a192aef26eddea07c2af5ad2587792e62b37ed4045b6ba59bc5540fc90610a4d9083815260200190565b611772612bfb565b6001600160a01b0381165f90815260076020526040902054819060ff166117ad576040516321ac7c5f60e01b81526004016109199190613a25565b506001600160a01b0381165f9081526007602052604090819020805460ff19169055517f56070b80bd617fcd2f7a284861edb488830a38f9dedcd77b2cb2f4eac17743e790610a4d908390613a25565b611805612bfb565b61180e5f612c9a565b565b611818612bfb565b80515f5b8181101561186c57600a83828151811061183857611838613f6d565b602002602001015160405161184d919061427d565b908152604051908190036020019020805460ff1916905560010161181c565b507fd1b46e030b48add7bc03225cc5a6f403970976b36983f99ec31d535d627fc7db8260405161189c9190614293565b60405180910390a15050565b5f546001600160a01b031633146118d15760405162461bcd60e51b8152600401610919906142f6565b5f818152600c602052604090205460ff1660018160068111156118f6576118f6613ac4565b1461191b57816001826040516337e1404160e01b815260040161091993929190614327565b5f828152600c60205260409020805460ff191660021790556012546119409042613fb6565b5f838152600d602052604080822092909255905183917fc44405af9078047712501f519e1fb900c2896c62b488336f84529c72ae16e6f191a2815f5160206146c65f395f51905f526001600260405161199a929190614262565b60405180910390a25050565b5f5f6119b187611403565b5f888152600c602052604090205490915060ff1660048160068111156119d9576119d9613ac4565b1488600483909192611a01576040516337e1404160e01b815260040161091993929190614327565b5050505f888152600d60209081526040918290208251606081018452815481526001820154928101929092526002015491810182905290899042811015611a64576040516308f3034360e31b815260048101929092526024820152604401610919565b50505f898152600860205260409020600c01611a81888a83614348565b505f898152600c6020526040902080546005919060ff191660018302179055508261010001516001600160a01b0316632f0e1bbf8a8a8a604051611ac69291906143fc565b6040519081900381206001600160e01b031960e085901b168252611af192918b908b9060040161440b565b602060405180830381865afa158015611b0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b309190614243565b9350878785611b5457604051632f9f8ab960e01b815260040161091992919061442a565b5050611b5f89612d0a565b887f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca1698989604051611b9192919061442a565b60405180910390a2885f5160206146c65f395f51905f5260046005604051611bba929190614262565b60405180910390a250505095945050505050565b5f546001600160a01b03163314611bf75760405162461bcd60e51b8152600401610919906142f6565b5f828152600c602052604090205460ff166002816006811115611c1c57611c1c613ac4565b14611c4157826002826040516337e1404160e01b815260040161091993929190614327565b5f838152600c60209081526040808320805460ff191660031790556008909152808220600a018490555184917f11df18edb9bc9cd90a79068e0e208b630202148643d797d6150e7bacb733e63c91a2825f5160206146c65f395f51905f5260026003604051611cb1929190614262565b60405180910390a2505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b611d0d60405180606001604052805f81526020015f81526020015f81525090565b5060408051606081018252601254815260135460208201526014549181019190915290565b5f818152600c602052604090205460ff166006816006811115611d5757611d57613ac4565b14611d945760405162461bcd60e51b815260206004820152600d60248201526c114cc81b9bdd0819985a5b1959609a1b6044820152606401610919565b5f828152600b602052604090205480611de65760405162461bcd60e51b8152602060048201526014602482015273139bc81c185e5b595b9d081d1bc81c99599d5b9960621b6044820152606401610919565b5f838152600b60205260408120819055611dff846130b9565b5f858152601060205260409020546002549192506001600160a01b0390811691611e2c91839116856131ad565b60025460405163da19b69760e01b81526001600160a01b039091169063da19b69790611e62908890879087908790600401614480565b5f604051808303815f87803b158015611e79575f5ffd5b505af1158015611e8b573d5f5f3e3d5ffd5b50505050847f5297818f48a66292b8b3e2caab83eec531b669bb20807fd38cf006adb2a07317848451604051611ecb929190918252602082015260400190565b60405180910390a25050505050565b611efb60405180606001604052805f81526020015f81526020015f81525090565b505f908152600d6020908152604091829020825160608101845281548152600182015492810192909252600201549181019190915290565b5f818152600c6020526040812054819060ff16611f5084826131d8565b9250925050915091565b5f5f611f6587611403565b5f888152600c602052604090205490915060ff166003816006811115611f8d57611f8d613ac4565b1488600383909192611fb5576040516337e1404160e01b815260040161091993929190614327565b5050505f888152600d6020908152604091829020825160608101845281548152600182015492810183905260029091015492810192909252899042811015612019576040516308f3034360e31b815260048101929092526024820152604401610919565b50506060830151602001518990428111156120505760405163017e35e560e71b815260048101929092526024820152604401610919565b505061014083015189901561207b57604051637eb9cea960e11b815260040161091991815260200190565b505f888860405161208d9291906143fc565b60408051918290039091205f8c815260086020908152838220600b01839055600c905291909120805460ff191660041790556014549091506120cf9042613fb6565b5f8b8152600d6020526040908190206002019190915560a08501519051632f0e1bbf60e01b81526001600160a01b0390911690632f0e1bbf9061211c908d9085908c908c9060040161440b565b6020604051808303815f875af1158015612138573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215c9190614243565b945088888661218057604051632f9f8ab960e01b815260040161091992919061442a565b5050897f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade0718a8a6040516121b492919061442a565b60405180910390a2895f5160206146c65f395f51905f52600360046040516121dd929190614262565b60405180910390a25050505095945050505050565b6121fa612bfb565b80515f5b81811015612259576001600a84838151811061221c5761221c613f6d565b6020026020010151604051612231919061427d565b908152604051908190036020019020805491151560ff199092169190911790556001016121fe565b507f027b83cad653f54850fef6faa8c705f73a53e7f8de50a3a33ac1e0e3a5c0be818260405161189c9190614293565b5f546001600160a01b03163314806122ab57506003546001600160a01b031633145b6122f75760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c79205265676973747279206f7220536c617368696e674d6772000000006044820152606401610919565b5f8160ff1611801561230d5750600d60ff821611155b6123525760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103330b4b63ab932903932b0b9b7b760511b6044820152606401610919565b612370828260ff16600d81111561236b5761236b613ac4565b613360565b5050565b61237c612bfb565b6001600160a01b0381166123d25760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420536c617368696e674d616e616765722061646472657373006044820152606401610919565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f4ccc8ed483c7c44c3602c3c38afc2c014a8f1d2dc210dfe58ebeeeead230f8e0905f90a250565b6003546001600160a01b0316331461246c5760405162461bcd60e51b815260206004820152601460248201527327b7363c9029b630b9b434b733a6b0b730b3b2b960611b6044820152606401610919565b60025460405163c1ab0f1f60e01b815260048101849052602481018390526001600160a01b039091169063c1ab0f1f906044015f604051808303815f87803b1580156124b6575f5ffd5b505af11580156124c8573d5f5f3e3d5ffd5b50505050817f4f41a3b0a032ebcae925f2ace77d507435840ca4b2dbaffdd7723fa8d72ee5428260405161199a91815260200190565b612506612bfb565b6001600160a01b0381161580159061253757505f828152600960205260409020546001600160a01b03828116911614155b8290612559576040516381c4951960e01b815260040161091991815260200190565b505f8281526009602090815260409182902080546001600160a01b0319166001600160a01b03851617905590518381527ff4041a3f914dac3bc9bf5f003ba41f28dbb84abe42f4e07c76266f5c8ceecb69910161189c565b6125b9612bfb565b60058190556040518181527fba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b52355290602001610a4d565b6125f6612bfb565b6001600160a01b0381161580159061261c57506001546001600160a01b03828116911614155b819061263c576040516320252f0b60e01b81526004016109199190613a25565b50600180546001600160a01b0319166001600160a01b0383161790556040517fad4055f18cdad6f4bdd71afe3a72cbeee964217943e1bde38f138289e981a9a790610a4d908390613a25565b612690612bfb565b61269d60208201826144ca565b63ffffffff166126b360408301602084016144ca565b63ffffffff16101580156126d857505f6126d060208301836144ca565b63ffffffff16115b6127185760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081d1a1c995cda1bdb19607a1b6044820152606401610919565b8060115f84600381111561272e5761272e613ac4565b600381111561273f5761273f613ac4565b815260208101919091526040015f206127599160026136f3565b5081600381111561276c5761276c613ac4565b7f8b56fae526eee054f0849759a99fc7d4ff3823824ebf097a56f7d78adb6b34fa8260405161199a91906144e3565b6127a3612bfb565b6001600160a01b0381166127cc575f604051631e4fbdf760e01b81526004016109199190613a25565b610a6981612c9a565b5f818152600c602052604081205460ff16818160068111156127f9576127f9613ac4565b0361281e57826001826040516337e1404160e01b815260040161091993929190614327565b600581600681111561283257612832613ac4565b036128535760405163462c7bed60e01b815260048101849052602401610919565b600681600681111561286757612867613ac4565b0361288857604051633de16e3560e11b815260048101849052602401610919565b5f61289384836131d8565b93509050806128b857604051639f65d93560e01b815260048101859052602401610919565b5f848152600c60209081526040808320805460ff19908116600617909155600e9092529091208054859216600183600d8111156128f7576128f7613ac4565b0217905550835f5160206146c65f395f51905f5283600660405161291c929190614262565b60405180910390a2837fe20209be7caae6e76291267cfa711353981274bf127e94f16eb9ec44b68582bb8385604051612956929190614521565b60405180910390a25050919050565b61296d612bfb565b6001600160a01b0381161580159061299257505f546001600160a01b03828116911614155b81906129b2576040516375ac4eb760e11b81526004016109199190613a25565b505f80546001600160a01b0319166001600160a01b0383161790556040517f80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b690610a4d908390613a25565b6001600160a01b0381165f90815260076020526040902054819060ff1615612a395760405163b29d459560e01b81526004016109199190613a25565b506001600160a01b0381165f9081526007602052604090819020805460ff19166001179055517fb8d368517268f297fff00825d67d098763117d061360d31027be5b2e1a59d46790610a4d908390613a25565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b612abe6134b1565b610a69816134d6565b8035612b0a5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420444b472077696e646f7760701b6044820152606401610919565b5f816020013511612b565760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420636f6d707574652077696e646f7760501b6044820152606401610919565b5f816040013511612ba55760405162461bcd60e51b8152602060048201526019602482015278496e76616c69642064656372797074696f6e2077696e646f7760381b6044820152606401610919565b80356012819055602080830135601381905560408085013560148190558151948552928401919091528201527f7e86ba16b805e2835af5c5b7aa5a942ced8bcc1fb95a05fbe42dae3862350a1690606001610a4d565b33612c04611cbe565b6001600160a01b03161461180e573360405163118cdaa760e01b81526004016109199190613a25565b6040516001600160a01b038481166024830152838116604483015260648201839052612c949186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506134de565b50505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f805460405162beb08960e51b8152600481018490526001600160a01b03909116906317d61120906024015f60405180830381865afa158015612d4f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d76919081019061453c565b80515f848152600b60209081526040808320805490849055601090925282205493945091926001600160a01b031690829003612e14576002546040516341489f1560e01b81526001600160a01b03909116906341489f1590612de0908890889086906004016145cb565b5f604051808303815f87803b158015612df7575f5ffd5b505af1158015612e09573d5f5f3e3d5ffd5b505050505050505050565b825f03612eb5575f858152600f60205260409020546001600160a01b03168015612e4c57612e4c6001600160a01b03831682856131ad565b6002546040516341489f1560e01b81526001600160a01b03909116906341489f1590612e80908990899087906004016145cb565b5f604051808303815f87803b158015612e97575f5ffd5b505af1158015612ea9573d5f5f3e3d5ffd5b50505050505050505050565b5f836001600160401b03811115612ece57612ece6137e5565b604051908082528060200260200182016040528015612ef7578160200160208202803683370190505b5090505f612f0585856145fb565b90505f805b86811015612f445782848281518110612f2557612f25613f6d565b6020908102919091010152612f3a8383613fb6565b9150600101612f0a565b505f612f508287613fa3565b90508015612f8d578084612f6560018a613fa3565b81518110612f7557612f75613f6d565b60200260200101818151612f899190613fb6565b9052505b600154612fa7906001600160a01b03878116911688613541565b600154604051636ec640c760e11b81526001600160a01b039091169063dd8c818e90612fdb9088908c90899060040161464a565b5f604051808303815f87803b158015612ff2575f5ffd5b505af1158015613004573d5f5f3e3d5ffd5b505060015461302292506001600160a01b038881169250165f613541565b887fac9fe8ad7f55eac03284399116ecafc104f10459773f4cdf47063c46e5be335a898660405161305492919061467f565b60405180910390a26002546040516341489f1560e01b81526001600160a01b03909116906341489f1590613090908c908c908a906004016145cb565b5f604051808303815f87803b1580156130a7575f5ffd5b505af11580156108b0573d5f5f3e3d5ffd5b5f818152600e602052604090205460609060ff16600181600d8111156130e1576130e1613ac4565b14806130fe5750600281600d8111156130fc576130fc613ac4565b145b15613136575f5b60405190808252806020026020018201604052801561312e578160200160208202803683370190505b509392505050565b5f5460405162beb08960e51b8152600481018590526001600160a01b03909116906317d61120906024015f60405180830381865afa92505050801561319c57506040513d5f823e601f3d908101601f19168201604052613199919081019061453c565b60015b6131a6575f613105565b9392505050565b6131d383846001600160a01b031663a9059cbb8585604051602401612c629291906146ac565b505050565b5f828152600d60209081526040808320815160608101835281548152600182015493810193909352600201548282015282549051632800d82960e01b81526004810186905283929183916001600160a01b0390911690632800d82990602401602060405180830381865afa158015613252573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061327691906140a1565b9050600185600681111561328c5761328c613ac4565b14801561329857508042115b156132ab57600180935093505050613359565b60028560068111156132bf576132bf613ac4565b1480156132cc5750815142115b156132e05760016003935093505050613359565b60038560068111156132f4576132f4613ac4565b1480156133045750816020015142115b156133185760016006935093505050613359565b600485600681111561332c5761332c613ac4565b14801561333c5750816040015142115b15613350576001600a935093505050613359565b5f5f9350935050505b9250929050565b5f828152600c602052604081205460ff169081600681111561338457613384613ac4565b036133a957826001826040516337e1404160e01b815260040161091993929190614327565b60058160068111156133bd576133bd613ac4565b036133de5760405163462c7bed60e01b815260048101849052602401610919565b60068160068111156133f2576133f2613ac4565b0361341357604051633de16e3560e11b815260048101849052602401610919565b5f838152600c60209081526040808320805460ff19908116600617909155600e9092529091208054849216600183600d81111561345257613452613ac4565b0217905550825f5160206146c65f395f51905f52826006604051613477929190614262565b60405180910390a2827fe20209be7caae6e76291267cfa711353981274bf127e94f16eb9ec44b68582bb8284604051611cb1929190614521565b6134b96135d1565b61180e57604051631afcd79f60e31b815260040160405180910390fd5b6127a36134b1565b5f5f60205f8451602086015f885af1806134fd576040513d5f823e3d81fd5b50505f513d91508115613514578060011415613521565b6001600160a01b0384163b155b15612c945783604051635274afe760e01b81526004016109199190613a25565b5f836001600160a01b031663095ea7b384846040516024016135649291906146ac565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050905061359d84826135ea565b612c94576135c784856001600160a01b031663095ea7b3865f604051602401612c629291906146ac565b612c9484826134de565b5f6135da612a8c565b54600160401b900460ff16919050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156136295750811561361b5780600114613629565b5f866001600160a01b03163b115b9695505050505050565b604080516101a081019091525f808252602082019081526020015f815260200161365b61378f565b81526020015f81526020015f6001600160a01b0316815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f8152602001606081526020015f6001600160a01b031681525090565b82600281019282156136e3579160200282015b828111156136e35782518255916020019190600101906136c8565b506136ef9291506137ad565b5090565b6001830191839082156136e3579160200282015f5b8382111561375257833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302613708565b80156137825782816101000a81549063ffffffff0219169055600401602081600301049283019260010302613752565b50506136ef9291506137ad565b60405180604001604052806002906020820280368337509192915050565b5b808211156136ef575f81556001016137ae565b6001600160a01b0381168114610a69575f5ffd5b5f606082840312156109ad575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613821576138216137e5565b604052919050565b5f6001600160401b03821115613841576138416137e5565b5060051b60200190565b5f82601f83011261385a575f5ffd5b81356001600160401b03811115613873576138736137e5565b613886601f8201601f19166020016137f9565b81815284602083860101111561389a575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f82601f8301126138c5575f5ffd5b81356138d86138d382613829565b6137f9565b8082825260208201915060208360051b8601019250858311156138f9575f5ffd5b602085015b838110156139395780356001600160401b0381111561391b575f5ffd5b61392a886020838a010161384b565b845250602092830192016138fe565b5095945050505050565b5f5f5f5f5f5f5f5f610140898b03121561395b575f5ffd5b8835613966816137c1565b97506020890135613976816137c1565b96506040890135613986816137c1565b95506060890135613996816137c1565b945060808901356139a6816137c1565b935060a089013592506139bc8a60c08b016137d5565b91506101208901356001600160401b038111156139d7575f5ffd5b6139e38b828c016138b6565b9150509295985092959890939650565b5f60208284031215613a03575f5ffd5b81356131a6816137c1565b5f60208284031215613a1e575f5ffd5b5035919050565b6001600160a01b0391909116815260200190565b803560048110613a47575f5ffd5b919050565b5f5f60408385031215613a5d575f5ffd5b613a6683613a39565b946020939093013593505050565b5f60208284031215613a84575f5ffd5b81356001600160401b03811115613a99575f5ffd5b820160e081850312156131a6575f5ffd5b5f60608284031215613aba575f5ffd5b6131a683836137d5565b634e487b7160e01b5f52602160045260245ffd5b60048110613ae857613ae8613ac4565b9052565b805f5b6002811015612c94578151845260209384019390910190600101613aef565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b805182525f6020820151613b536020850182613ad8565b50604082015160408401526060820151613b706060850182613aec565b50608082015160a084015260a0820151613b9560c08501826001600160a01b03169052565b5060c08201516101c060e0850152613bb16101c0850182613b0e565b905060e0830151848203610100860152613bcb8282613b0e565b915050610100830151613bea6101208601826001600160a01b03169052565b50610120830151610140850152610140830151610160850152610160830151848203610180860152613c1c8282613b0e565b91505061018083015161312e6101a08601826001600160a01b03169052565b828152604060208201525f613c536040830184613b3c565b949350505050565b600e8110613ae857613ae8613ac4565b60208101612ab08284613c5b565b8c8152613c89602082018d613ad8565b8a604082015289606082015260018060a01b038916608082015261018060a08201525f613cba61018083018a613b0e565b82810360c0840152613ccc818a613b0e565b6001600160a01b03891660e0850152610100840188905261012084018790528381036101408501529050613d008186613b0e565b915050613d196101608301846001600160a01b03169052565b9d9c50505050505050505050505050565b602081525f6131a66020830184613b3c565b5f60208284031215613d4c575f5ffd5b81356001600160401b03811115613d61575f5ffd5b613c538482850161384b565b5f60208284031215613d7d575f5ffd5b81356001600160401b03811115613d92575f5ffd5b613c53848285016138b6565b5f5f83601f840112613dae575f5ffd5b5081356001600160401b03811115613dc4575f5ffd5b602083019150836020828501011115613359575f5ffd5b5f5f5f5f5f60608688031215613def575f5ffd5b8535945060208601356001600160401b03811115613e0b575f5ffd5b613e1788828901613d9e565b90955093505060408601356001600160401b03811115613e35575f5ffd5b613e4188828901613d9e565b969995985093965092949392505050565b5f5f60408385031215613e63575f5ffd5b50508035926020909101359150565b81518152602080830151908201526040808301519082015260608101612ab0565b8215158152604081016131a66020830184613c5b565b5f5f60408385031215613eba575f5ffd5b82359150602083013560ff81168114613ed1575f5ffd5b809150509250929050565b5f5f60408385031215613eed575f5ffd5b823591506020830135613ed1816137c1565b60078110613ae857613ae8613ac4565b60208101612ab08284613eff565b5f5f60608385031215613f2e575f5ffd5b613f3783613a39565b915083606084011115613f48575f5ffd5b50926020919091019150565b5f60208284031215613f64575f5ffd5b6131a682613a39565b634e487b7160e01b5f52603260045260245ffd5b60208101612ab08284613ad8565b634e487b7160e01b5f52601160045260245ffd5b81810381811115612ab057612ab0613f8f565b80820180821115612ab057612ab0613f8f565b5f60018201613fda57613fda613f8f565b5060010190565b5f5f8335601e19843603018112613ff6575f5ffd5b8301803591506001600160401b0382111561400f575f5ffd5b602001915036819003821315613359575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b88815287602082015260a060408201525f61406a60a08301888a614023565b828103606084015261407d818789614023565b90508281036080840152614092818587614023565b9b9a5050505050505050505050565b5f602082840312156140b1575f5ffd5b5051919050565b600181811c908216806140cc57607f821691505b6020821081036109ad57634e487b7160e01b5f52602260045260245ffd5b601f8211156131d357805f5260205f20601f840160051c8101602085101561410f5750805b601f840160051c820191505b8181101561412e575f815560010161411b565b5050505050565b5f19600383901b1c191660019190911b1790565b81516001600160401b03811115614162576141626137e5565b6141768161417084546140b8565b846140ea565b6020601f8211600181146141a3575f83156141915750848201515b61419b8482614135565b85555061412e565b5f84815260208120601f198516915b828110156141d257878501518255602094850194600190920191016141b2565b50848210156141ef57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b838152602081018390526080810160408201835f5b600281101561423857815163ffffffff16835260209283019290910190600101614213565b505050949350505050565b5f60208284031215614253575f5ffd5b815180151581146131a6575f5ffd5b604081016142708285613eff565b6131a66020830184613eff565b5f82518060208501845e5f920191825250919050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156142ea57603f198786030184526142d5858351613b0e565b945060209384019391909101906001016142b9565b50929695505050505050565b6020808252601790820152764f6e6c79204369706865726e6f6465526567697374727960481b604082015260600190565b8381526060810161433b6020830185613eff565b613c536040830184613eff565b6001600160401b0383111561435f5761435f6137e5565b6143738361436d83546140b8565b836140ea565b5f601f84116001811461439f575f851561438d5750838201355b6143978682614135565b84555061412e565b5f83815260208120601f198716915b828110156143ce57868501358255602094850194600190920191016143ae565b50868210156143ea575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b818382375f9101908152919050565b848152836020820152606060408201525f613629606083018486614023565b602081525f613c53602083018486614023565b5f8151808452602084019350602083015f5b828110156144765781516001600160a01b031686526020958601959091019060010161444f565b5093949350505050565b848152836020820152608060408201525f61449e608083018561443d565b905060018060a01b038316606083015295945050505050565b803563ffffffff81168114613a47575f5ffd5b5f602082840312156144da575f5ffd5b6131a6826144b7565b6040810181835f5b60028110156145185763ffffffff614502836144b7565b16835260209283019291909101906001016144eb565b50505092915050565b6040810161452f8285613eff565b6131a66020830184613c5b565b5f6020828403121561454c575f5ffd5b81516001600160401b03811115614561575f5ffd5b8201601f81018413614571575f5ffd5b805161457f6138d382613829565b8082825260208201915060208360051b8501019250868311156145a0575f5ffd5b6020840193505b828410156136295783516145ba816137c1565b8252602093840193909101906145a7565b838152606060208201525f6145e3606083018561443d565b905060018060a01b0383166040830152949350505050565b5f8261461557634e487b7160e01b5f52601260045260245ffd5b500490565b5f8151808452602084019350602083015f5b8281101561447657815186526020958601959091019060010161462c565b6001600160a01b03841681526060602082018190525f9061466d9083018561443d565b8281036040840152613629818561461a565b604081525f614691604083018561443d565b82810360208401526146a3818561461a565b95945050505050565b6001600160a01b0392909216825260208201526040019056fe1b418a230a21d37a078bf8f16decbde8ccceacd77159371f62f0d4ea00d19967a164736f6c634300081c000a", + "bytecode": "0x6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b614949806100d65f395ff3fe608060405234801561000f575f5ffd5b50600436106102c3575f3560e01c80638e5ce3ad11610177578063cb649617116100d5578063ea71aa571161008f578063ea71aa5714610745578063f0691cba14610758578063f2fde38b1461076b578063f81b8ef61461077e578063fad8e11114610791578063fbdb3237146107a4578063fd2f3d01146107cc575f5ffd5b8063cb649617146106c1578063cbd16872146106ca578063cf0f34c4146106dd578063cfbdc98d146106f0578063da16fb2f1461071f578063e59e469514610732575f5ffd5b80639c8570c8116101315780639c8570c814610618578063ac3d2f421461062b578063b68fd1be14610653578063bb2d1b8214610666578063bff232c114610679578063c1ab0f1f1461068c578063c4ccafa21461069f575f5ffd5b80638e5ce3ad1461058157806390173a41146105945780639117173c146105a957806392312386146105bc578063929a8faf146105cf57806399c6679d146105f0575f5ffd5b80634fc77264116102245780637c8c3b4d116101de5780637c8c3b4d146105085780637cfa9d741461051b5780637edcd7ab1461052e57806381476ec21461054157806385814243146105545780638da5cb5b146105675780638dcdd86b1461056f575f5ffd5b80634fc772641461049d57806364226409146104b0578063647846a5146104d15780636db5c8fd146104e4578063715018a6146104ed57806377868ae4146104f5575f5ffd5b80631ba72945116102805780631ba729451461039057806336c5d38a146103a35780634017daf0146103d2578063406ed35c146103ff5780634147a3601461041f578063459d92941461044c5780634e92ec631461048a575f5ffd5b806301d12f1c146102c757806302a3a9c9146102dc5780630ef81b2f146102ef57806310bc62811461032d57806311bd61d91461035557806315cce2241461037d575b5f5ffd5b6102da6102d5366004613b31565b6107df565b005b6102da6102ea366004613be1565b610945565b6103176102fd366004613bfc565b5f908152600960205260409020546001600160a01b031690565b6040516103249190613c20565b60405180910390f35b61031761033b366004613bfc565b60096020525f90815260409020546001600160a01b031681565b610368610363366004613c47565b6109f1565b60405163ffffffff9091168152602001610324565b6102da61038b366004613be1565b610a2d565b6102da61039e366004613c6f565b610ad2565b6103c56103b1366004613bfc565b5f908152600f602052604090205460ff1690565b6040516103249190613cb1565b6103e56103e0366004613bfc565b610ae6565b6040516103249e9d9c9b9a99989796959493929190613cfd565b61041261040d366004613bfc565b610d10565b6040516103249190613eed565b61043e61042d366004613bfc565b600c6020525f908152604090205481565b604051908152602001610324565b61047a61045a366004613eff565b8051602081830181018051600b8252928201919093012091525460ff1681565b6040519015158152602001610324565b6102da610498366004613bfc565b61100d565b6102da6104ab366004613be1565b61109c565b6104c36104be366004613f38565b61112f565b604051610324929190613f6f565b600454610317906001600160a01b031681565b61043e60055481565b6102da61193b565b6102da610503366004613f87565b61194e565b6102da610516366004613fb8565b6119e6565b6102da610529366004613bfc565b611a6f565b61047a61053c366004614023565b611b6d565b6102da61054f36600461409a565b611d93565b600154610317906001600160a01b031681565b610317611e86565b5f54610317906001600160a01b031681565b600354610317906001600160a01b031681565b61059c611eb4565b60405161032491906140ba565b6102da6105b7366004613bfc565b611efa565b61059c6105ca366004613bfc565b6120a2565b6105e26105dd366004613bfc565b6120fb565b6040516103249291906140db565b6103176105fe366004613bfc565b5f908152601060205260409020546001600160a01b031690565b61047a610626366004614023565b612122565b610317610639366004613bfc565b5f908152600a60205260409020546001600160a01b031690565b6102da610661366004613f87565b6123ba565b6102da6106743660046140f1565b612451565b6102da610687366004613be1565b61253c565b6102da61069a36600461409a565b6125e3565b61047a6106ad366004613be1565b60076020525f908152604090205460ff1681565b61043e60065481565b6102da6106d8366004613fb8565b6126c6565b6102da6106eb366004613bfc565b612779565b6107126106fe366004613bfc565b5f908152600d602052604090205460ff1690565b6040516103249190614129565b61043e61072d366004613f38565b6127b6565b6102da610740366004613be1565b6127c0565b6102da610753366004614137565b61285a565b600254610317906001600160a01b031681565b6102da610779366004613be1565b61296d565b6103c561078c366004613bfc565b6129a7565b6102da61079f366004613be1565b612b41565b6103176107b2366004613bfc565b600a6020525f90815260409020546001600160a01b031681565b6102da6107da366004613be1565b612bd9565b5f6107e8612c68565b805490915060ff600160401b82041615906001600160401b03165f8115801561080e5750825b90505f826001600160401b031660011480156108295750303b155b905081158015610837575080155b156108555760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561087f57845460ff60401b1916600160401b1785555b61088833612c92565b61089188612779565b61089a8c612b41565b6108a38b6127c0565b6108ac8a610945565b6108b589610a2d565b6108be87612ca3565b6108c7866123ba565b6108cf611e86565b6001600160a01b03168d6001600160a01b0316146108f0576108f08d61296d565b831561093657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b61094d612dd7565b6001600160a01b0381166109a85760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964204533526566756e644d616e6167657220616464726573730060448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f9557d04c1c0b16f93f13b69aed23b3b6ab935bff3c53ac81d17896d3583542ed905f90a250565b6012602052815f5260405f208160028110610a0a575f80fd5b60089182820401919006600402915091509054906101000a900463ffffffff1681565b610a35612dd7565b6001600160a01b03811615801590610a5b57506004546001600160a01b03828116911614155b8190610a7b5760405163eddf07f560e01b815260040161099f9190613c20565b50600480546001600160a01b0319166001600160a01b0383161790556040517f722ff84c1234b2482061def5c82c6b5080c117b3cbb69d686844a051e4b8e7f390610ac7908390613c20565b60405180910390a150565b610ada612dd7565b610ae381612ca3565b50565b60086020525f9081526040902080546001820154600283015460058401546006850154600786018054959660ff90951695939492936001600160a01b039092169291610b319061416e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5d9061416e565b8015610ba85780601f10610b7f57610100808354040283529160200191610ba8565b820191905f5260205f20905b815481529060010190602001808311610b8b57829003601f168201915b505050505090806008018054610bbd9061416e565b80601f0160208091040260200160405190810160405280929190818152602001828054610be99061416e565b8015610c345780601f10610c0b57610100808354040283529160200191610c34565b820191905f5260205f20905b815481529060010190602001808311610c1757829003601f168201915b5050506009840154600a850154600b860154600c870154600d8801805497986001600160a01b03958616989490951696509194509291610c739061416e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9f9061416e565b8015610cea5780601f10610cc157610100808354040283529160200191610cea565b820191905f5260205f20905b815481529060010190602001808311610ccd57829003601f168201915b505050600e90930154919250506001600160a01b0381169060ff600160a01b909104168e565b610d18613826565b5f8281526008602090815260409182902082516101e08101909352805483526001810154909183019060ff166003811115610d5557610d55613c89565b6003811115610d6657610d66613c89565b8152600282810154602083015260408051808201808352919093019291600385019182845b815481526020019060010190808311610d8b5750505091835250506005820154602082015260068201546001600160a01b03166040820152600782018054606090920191610dd89061416e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e049061416e565b8015610e4f5780601f10610e2657610100808354040283529160200191610e4f565b820191905f5260205f20905b815481529060010190602001808311610e3257829003601f168201915b50505050508152602001600882018054610e689061416e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e949061416e565b8015610edf5780601f10610eb657610100808354040283529160200191610edf565b820191905f5260205f20905b815481529060010190602001808311610ec257829003601f168201915b505050918352505060098201546001600160a01b039081166020830152600a830154166040820152600b8201546060820152600c8201546080820152600d8201805460a090920191610f309061416e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5c9061416e565b8015610fa75780601f10610f7e57610100808354040283529160200191610fa7565b820191905f5260205f20905b815481529060010190602001808311610f8a57829003601f168201915b5050509183525050600e91909101546001600160a01b038082166020840152600160a01b90910460ff16151560409092019190915260a08201519192508391166110075760405163cd6f4a4f60e01b815260040161099f91815260200190565b50919050565b611015612dd7565b5f8181526009602052604090205481906001600160a01b031661104e576040516381c4951960e01b815260040161099f91815260200190565b505f818152600960205260409081902080546001600160a01b0319169055517f104eb329a192aef26eddea07c2af5ad2587792e62b37ed4045b6ba59bc5540fc90610ac79083815260200190565b6110a4612dd7565b6001600160a01b0381165f90815260076020526040902054819060ff166110df576040516321ac7c5f60e01b815260040161099f9190613c20565b506001600160a01b0381165f9081526007602052604090819020805460ff19169055517f56070b80bd617fcd2f7a284861edb488830a38f9dedcd77b2cb2f4eac17743e790610ac7908390613c20565b5f611138613826565b5f60128161114960208701876141a0565b600381111561115a5761115a613c89565b600381111561116b5761116b613c89565b8152602081019190915260409081015f20815180830190925260028282826020028201915f905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611192579050505050505090505f816001600281106111e9576111e96141b9565b602002015163ffffffff1611845f01602081019061120791906141a0565b906112265760405163286c068d60e11b815260040161099f91906141cd565b5060208401354281101561125057604051630b99e87960e01b815260040161099f91815260200190565b506040840135602085013581101561127e5760405163174b5a0760e21b815260040161099f91815260200190565b506015546014545f91906112964260408901356141ef565b6112a09190614202565b6112aa9190614202565b9050600554811081906112d3576040516313b783af60e21b815260040161099f91815260200190565b5060075f6112e76080880160608901613be1565b6001600160a01b0316815260208101919091526040015f205460ff166113136080870160608801613be1565b906113325760405163295a6a6f60e11b815260040161099f9190613c20565b505f61133d866127b6565b60068054965090915085905f61135283614215565b9091555050604080514460208201529081018690525f9060600160408051808303601f1901815291815281516020928301205f898152600c84528281208690556004546011855283822080546001600160a01b039092166001600160a01b0319928316179055600d8552838220805460ff1916600117905560109094528290208054339416939093179092556014549192506113f19190890135614202565b5f878152600e6020908152604090912060010191909155818652611417908801886141a0565b8560200190600381111561142d5761142d613c89565b9081600381111561144057611440613c89565b905250436040808701919091528051808201825290602089019060029083908390808284375f9201919091525050506060808701919091526114889060808901908901613be1565b6001600160a01b031660a08601526114a3608088018861422d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c0808701919091526114eb9088018861422d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060e08087019190915261153890610100890190890161427c565b15156101c08601525f610140860181905261016086018190526040805160208101909152908152610180860152336101a08601819052600454611588916001600160a01b03909116903085612e09565b5f6115996080890160608a01613be1565b6001600160a01b031663fefd9a8b88846115b660808d018d61422d565b6115c360a08f018f61422d565b8f8060c001906115d3919061422d565b6040518963ffffffff1660e01b81526004016115f69897969594939291906142bf565b6020604051808303815f875af1158015611612573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116369190614315565b5f818152600960205260409020549091506001600160a01b03168181611672576040516381c4951960e01b815260040161099f91815260200190565b505f828152600a60205260409020546001600160a01b031682816116ac576040516381c4951960e01b815260040161099f91815260200190565b50608088018390526001600160a01b038083166101008a015281166101208901525f8981526008602090815260409091208951815590890151600180830180548c94939260ff19919091169083600381111561170a5761170a613c89565b0217905550604082015181600201556060820151816003019060026117309291906138a3565b506080820151600582015560a08201516006820180546001600160a01b0319166001600160a01b0390921691909117905560c08201516007820190611775908261438b565b5060e0820151600882019061178a908261438b565b506101008201516009820180546001600160a01b039283166001600160a01b031991821617909155610120840151600a84018054919093169116179055610140820151600b820155610160820151600c820155610180820151600d8201906117f2908261438b565b506101a0820151600e90910180546101c0909301511515600160a01b026001600160a81b03199093166001600160a01b0392831617929092179091555f5460405163291a691b60e01b815291169063291a691b90611858908c9088908c90600401614440565b6020604051808303815f875af1158015611874573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118989190614485565b6118b557604051630d8dbe2560e01b815260040160405180910390fd5b6118c560808b0160608c01613be1565b6001600160a01b03167f5904e83d57e704fba4d92c5617f6b50ae993cd42d78babfcb239d0a6775f30708a8a6040516118ff929190613f6f565b60405180910390a2885f51602061491d5f395f51905f525f60016040516119279291906144a0565b60405180910390a250505050505050915091565b611943612dd7565b61194c5f612e76565b565b611956612dd7565b80515f5b818110156119aa57600b838281518110611976576119766141b9565b602002602001015160405161198b91906144bb565b908152604051908190036020019020805460ff1916905560010161195a565b507fd1b46e030b48add7bc03225cc5a6f403970976b36983f99ec31d535d627fc7db826040516119da91906144d1565b60405180910390a15050565b6119ee612dd7565b6001600160a01b03811615801590611a1f57505f828152600a60205260409020546001600160a01b03828116911614155b8290611a41576040516381c4951960e01b815260040161099f91815260200190565b505f918252600a602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f546001600160a01b03163314611a985760405162461bcd60e51b815260040161099f90614534565b5f818152600d602052604090205460ff166001816006811115611abd57611abd613c89565b14611ae257816001826040516337e1404160e01b815260040161099f93929190614565565b5f828152600d60205260409020805460ff19166002179055601354611b079042614202565b5f838152600e602052604080822092909255905183917fc44405af9078047712501f519e1fb900c2896c62b488336f84529c72ae16e6f191a2815f51602061491d5f395f51905f5260016002604051611b619291906144a0565b60405180910390a25050565b5f5f611b7887610d10565b5f888152600d602052604090205490915060ff166004816006811115611ba057611ba0613c89565b1488600483909192611bc8576040516337e1404160e01b815260040161099f93929190614565565b5050505f888152600e60209081526040918290208251606081018452815481526001820154928101929092526002015491810182905290899042811015611c2b576040516308f3034360e31b81526004810192909252602482015260440161099f565b50505f898152600860205260409020600d01611c48888a83614586565b505f898152600d6020526040902080546005919060ff191660018302179055508261010001516001600160a01b031663258ae5828989604051611c8c92919061463a565b6040519081900381206001600160e01b031960e084901b168252611cb6918a908a90600401614649565b602060405180830381865afa158015611cd1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf59190614485565b9350878785611d1957604051632f9f8ab960e01b815260040161099f92919061466b565b5050611d2489612ee6565b887f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca1698989604051611d5692919061466b565b60405180910390a2885f51602061491d5f395f51905f5260046005604051611d7f9291906144a0565b60405180910390a250505095945050505050565b5f546001600160a01b03163314611dbc5760405162461bcd60e51b815260040161099f90614534565b5f828152600860209081526040808320600d9092529091205460ff166002816006811115611dec57611dec613c89565b14611e1157836002826040516337e1404160e01b815260040161099f93929190614565565b5f848152600d6020526040808220805460ff19166003179055600b84018590555185917f11df18edb9bc9cd90a79068e0e208b630202148643d797d6150e7bacb733e63c91a2835f51602061491d5f395f51905f5260026003604051611e789291906144a0565b60405180910390a250505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b611ed560405180606001604052805f81526020015f81526020015f81525090565b5060408051606081018252601354815260145460208201526015549181019190915290565b5f818152600d602052604090205460ff166006816006811115611f1f57611f1f613c89565b14611f5c5760405162461bcd60e51b815260206004820152600d60248201526c114cc81b9bdd0819985a5b1959609a1b604482015260640161099f565b5f828152600c602052604090205480611fae5760405162461bcd60e51b8152602060048201526014602482015273139bc81c185e5b595b9d081d1bc81c99599d5b9960621b604482015260640161099f565b5f838152600c60205260408120819055611fc784613295565b5f858152601160205260409020546002549192506001600160a01b0390811691611ff49183911685613389565b60025460405163da19b69760e01b81526001600160a01b039091169063da19b6979061202a9088908790879087906004016146c1565b5f604051808303815f87803b158015612041575f5ffd5b505af1158015612053573d5f5f3e3d5ffd5b50505050847f5297818f48a66292b8b3e2caab83eec531b669bb20807fd38cf006adb2a07317848451604051612093929190918252602082015260400190565b60405180910390a25050505050565b6120c360405180606001604052805f81526020015f81526020015f81525090565b505f908152600e6020908152604091829020825160608101845281548152600182015492810192909252600201549181019190915290565b5f818152600d6020526040812054819060ff1661211884826133b4565b9250925050915091565b5f5f61212d87610d10565b5f888152600d602052604090205490915060ff16600381600681111561215557612155613c89565b148860038390919261217d576040516337e1404160e01b815260040161099f93929190614565565b5050505f888152600e60209081526040918290208251606081018452815481526001820154928101839052600290910154928101929092528990428110156121e1576040516308f3034360e31b81526004810192909252602482015260440161099f565b50506060830151602001518990428111156122185760405163017e35e560e71b81526004810192909252602482015260440161099f565b505061016083015189901561224357604051637eb9cea960e11b815260040161099f91815260200190565b505f888860405161225592919061463a565b60408051918290039091205f8c815260086020908152838220600c01839055600d905291909120805460ff191660041790556015549091506122979042614202565b5f8b8152600e6020526040908190206002019190915560a08501519051632f0e1bbf60e01b81526001600160a01b0390911690632f0e1bbf906122e4908d9085908c908c906004016146f8565b6020604051808303815f875af1158015612300573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123249190614485565b945088888661234857604051632f9f8ab960e01b815260040161099f92919061466b565b5050897f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade0718a8a60405161237c92919061466b565b60405180910390a2895f51602061491d5f395f51905f52600360046040516123a59291906144a0565b60405180910390a25050505095945050505050565b6123c2612dd7565b80515f5b81811015612421576001600b8483815181106123e4576123e46141b9565b60200260200101516040516123f991906144bb565b908152604051908190036020019020805491151560ff199092169190911790556001016123c6565b507f027b83cad653f54850fef6faa8c705f73a53e7f8de50a3a33ac1e0e3a5c0be81826040516119da91906144d1565b5f546001600160a01b031633148061247357506003546001600160a01b031633145b6124bf5760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c79205265676973747279206f7220536c617368696e674d677200000000604482015260640161099f565b5f8160ff161180156124d55750600d60ff821611155b61251a5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103330b4b63ab932903932b0b9b7b760511b604482015260640161099f565b612538828260ff16600d81111561253357612533613c89565b61353c565b5050565b612544612dd7565b6001600160a01b03811661259a5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420536c617368696e674d616e61676572206164647265737300604482015260640161099f565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f4ccc8ed483c7c44c3602c3c38afc2c014a8f1d2dc210dfe58ebeeeead230f8e0905f90a250565b6003546001600160a01b031633146126345760405162461bcd60e51b815260206004820152601460248201527327b7363c9029b630b9b434b733a6b0b730b3b2b960611b604482015260640161099f565b60025460405163c1ab0f1f60e01b815260048101849052602481018390526001600160a01b039091169063c1ab0f1f906044015f604051808303815f87803b15801561267e575f5ffd5b505af1158015612690573d5f5f3e3d5ffd5b50505050817f4f41a3b0a032ebcae925f2ace77d507435840ca4b2dbaffdd7723fa8d72ee54282604051611b6191815260200190565b6126ce612dd7565b6001600160a01b038116158015906126ff57505f828152600960205260409020546001600160a01b03828116911614155b8290612721576040516381c4951960e01b815260040161099f91815260200190565b505f8281526009602090815260409182902080546001600160a01b0319166001600160a01b03851617905590518381527ff4041a3f914dac3bc9bf5f003ba41f28dbb84abe42f4e07c76266f5c8ceecb6991016119da565b612781612dd7565b60058190556040518181527fba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b52355290602001610ac7565b620f424080611007565b6127c8612dd7565b6001600160a01b038116158015906127ee57506001546001600160a01b03828116911614155b819061280e576040516320252f0b60e01b815260040161099f9190613c20565b50600180546001600160a01b0319166001600160a01b0383161790556040517fad4055f18cdad6f4bdd71afe3a72cbeee964217943e1bde38f138289e981a9a790610ac7908390613c20565b612862612dd7565b61286f602082018261472a565b63ffffffff16612885604083016020840161472a565b63ffffffff16101580156128aa57505f6128a2602083018361472a565b63ffffffff16115b6128ea5760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081d1a1c995cda1bdb19607a1b604482015260640161099f565b8060125f84600381111561290057612900613c89565b600381111561291157612911613c89565b815260208101919091526040015f2061292b9160026138e1565b5081600381111561293e5761293e613c89565b7f8b56fae526eee054f0849759a99fc7d4ff3823824ebf097a56f7d78adb6b34fa82604051611b619190614743565b612975612dd7565b6001600160a01b03811661299e575f604051631e4fbdf760e01b815260040161099f9190613c20565b610ae381612e76565b5f818152600d602052604081205460ff16818160068111156129cb576129cb613c89565b036129f057826001826040516337e1404160e01b815260040161099f93929190614565565b6005816006811115612a0457612a04613c89565b03612a255760405163462c7bed60e01b81526004810184905260240161099f565b6006816006811115612a3957612a39613c89565b03612a5a57604051633de16e3560e11b81526004810184905260240161099f565b5f612a6584836133b4565b9350905080612a8a57604051639f65d93560e01b81526004810185905260240161099f565b5f848152600d6020526040902080546006919060ff191660018302179055505f848152600f60205260409020805484919060ff1916600183600d811115612ad357612ad3613c89565b0217905550835f51602061491d5f395f51905f52836006604051612af89291906144a0565b60405180910390a2837fe20209be7caae6e76291267cfa711353981274bf127e94f16eb9ec44b68582bb8385604051612b32929190614781565b60405180910390a25050919050565b612b49612dd7565b6001600160a01b03811615801590612b6e57505f546001600160a01b03828116911614155b8190612b8e576040516375ac4eb760e11b815260040161099f9190613c20565b505f80546001600160a01b0319166001600160a01b0383161790556040517f80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b690610ac7908390613c20565b6001600160a01b0381165f90815260076020526040902054819060ff1615612c155760405163b29d459560e01b815260040161099f9190613c20565b506001600160a01b0381165f9081526007602052604090819020805460ff19166001179055517fb8d368517268f297fff00825d67d098763117d061360d31027be5b2e1a59d46790610ac7908390613c20565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b612c9a6136a4565b610ae3816136c9565b8035612ce65760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420444b472077696e646f7760701b604482015260640161099f565b5f816020013511612d325760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420636f6d707574652077696e646f7760501b604482015260640161099f565b5f816040013511612d815760405162461bcd60e51b8152602060048201526019602482015278496e76616c69642064656372797074696f6e2077696e646f7760381b604482015260640161099f565b80356013819055602080830135601481905560408085013560158190558151948552928401919091528201527f7e86ba16b805e2835af5c5b7aa5a942ced8bcc1fb95a05fbe42dae3862350a1690606001610ac7565b33612de0611e86565b6001600160a01b03161461194c573360405163118cdaa760e01b815260040161099f9190613c20565b6040516001600160a01b038481166024830152838116604483015260648201839052612e709186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506136d1565b50505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f805460405162beb08960e51b8152600481018490526001600160a01b03909116906317d61120906024015f60405180830381865afa158015612f2b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612f52919081019061479c565b80515f848152600c60209081526040808320805490849055601190925282205493945091926001600160a01b031690829003612ff0576002546040516341489f1560e01b81526001600160a01b03909116906341489f1590612fbc9088908890869060040161482b565b5f604051808303815f87803b158015612fd3575f5ffd5b505af1158015612fe5573d5f5f3e3d5ffd5b505050505050505050565b825f03613091575f858152601060205260409020546001600160a01b03168015613028576130286001600160a01b0383168285613389565b6002546040516341489f1560e01b81526001600160a01b03909116906341489f159061305c9089908990879060040161482b565b5f604051808303815f87803b158015613073575f5ffd5b505af1158015613085573d5f5f3e3d5ffd5b50505050505050505050565b5f836001600160401b038111156130aa576130aa6139d3565b6040519080825280602002602001820160405280156130d3578160200160208202803683370190505b5090505f6130e1858561485b565b90505f805b868110156131205782848281518110613101576131016141b9565b60209081029190910101526131168383614202565b91506001016130e6565b505f61312c82876141ef565b9050801561316957808461314160018a6141ef565b81518110613151576131516141b9565b602002602001018181516131659190614202565b9052505b600154613183906001600160a01b03878116911688613734565b600154604051636ec640c760e11b81526001600160a01b039091169063dd8c818e906131b79088908c9089906004016148aa565b5f604051808303815f87803b1580156131ce575f5ffd5b505af11580156131e0573d5f5f3e3d5ffd5b50506001546131fe92506001600160a01b038881169250165f613734565b887fac9fe8ad7f55eac03284399116ecafc104f10459773f4cdf47063c46e5be335a89866040516132309291906148df565b60405180910390a26002546040516341489f1560e01b81526001600160a01b03909116906341489f159061326c908c908c908a9060040161482b565b5f604051808303815f87803b158015613283575f5ffd5b505af1158015610936573d5f5f3e3d5ffd5b5f818152600f602052604090205460609060ff16600181600d8111156132bd576132bd613c89565b14806132da5750600281600d8111156132d8576132d8613c89565b145b15613312575f5b60405190808252806020026020018201604052801561330a578160200160208202803683370190505b509392505050565b5f5460405162beb08960e51b8152600481018590526001600160a01b03909116906317d61120906024015f60405180830381865afa92505050801561337857506040513d5f823e601f3d908101601f19168201604052613375919081019061479c565b60015b613382575f6132e1565b9392505050565b6133af83846001600160a01b031663a9059cbb8585604051602401612e3e929190614903565b505050565b5f828152600e60209081526040808320815160608101835281548152600182015493810193909352600201548282015282549051632800d82960e01b81526004810186905283929183916001600160a01b0390911690632800d82990602401602060405180830381865afa15801561342e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134529190614315565b9050600185600681111561346857613468613c89565b14801561347457508042115b1561348757600180935093505050613535565b600285600681111561349b5761349b613c89565b1480156134a85750815142115b156134bc5760016003935093505050613535565b60038560068111156134d0576134d0613c89565b1480156134e05750816020015142115b156134f45760016006935093505050613535565b600485600681111561350857613508613c89565b1480156135185750816040015142115b1561352c576001600a935093505050613535565b5f5f9350935050505b9250929050565b5f828152600d602052604081205460ff169081600681111561356057613560613c89565b0361358557826001826040516337e1404160e01b815260040161099f93929190614565565b600581600681111561359957613599613c89565b036135ba5760405163462c7bed60e01b81526004810184905260240161099f565b60068160068111156135ce576135ce613c89565b036135ef57604051633de16e3560e11b81526004810184905260240161099f565b5f838152600d6020526040902080546006919060ff191660018302179055505f838152600f60205260409020805483919060ff1916600183600d81111561363857613638613c89565b0217905550825f51602061491d5f395f51905f5282600660405161365d9291906144a0565b60405180910390a2827fe20209be7caae6e76291267cfa711353981274bf127e94f16eb9ec44b68582bb8284604051613697929190614781565b60405180910390a2505050565b6136ac6137c4565b61194c57604051631afcd79f60e31b815260040160405180910390fd5b6129756136a4565b5f5f60205f8451602086015f885af1806136f0576040513d5f823e3d81fd5b50505f513d91508115613707578060011415613714565b6001600160a01b0384163b155b15612e705783604051635274afe760e01b815260040161099f9190613c20565b5f836001600160a01b031663095ea7b38484604051602401613757929190614903565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050905061379084826137dd565b612e70576137ba84856001600160a01b031663095ea7b3865f604051602401612e3e929190614903565b612e7084826136d1565b5f6137cd612c68565b54600160401b900460ff16919050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f51905082801561381c5750811561380e578060011461381c565b5f866001600160a01b03163b115b9695505050505050565b604080516101e081019091525f808252602082019081526020015f815260200161384e61397d565b81525f602082018190526040820181905260608083018190526080830181905260a0830182905260c0830182905260e08301829052610100830182905261012083015261014082018190526101609091015290565b82600281019282156138d1579160200282015b828111156138d15782518255916020019190600101906138b6565b506138dd92915061399b565b5090565b6001830191839082156138d1579160200282015f5b8382111561394057833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026138f6565b80156139705782816101000a81549063ffffffff0219169055600401602081600301049283019260010302613940565b50506138dd92915061399b565b60405180604001604052806002906020820280368337509192915050565b5b808211156138dd575f815560010161399c565b6001600160a01b0381168114610ae3575f5ffd5b5f60608284031215611007575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613a0f57613a0f6139d3565b604052919050565b5f6001600160401b03821115613a2f57613a2f6139d3565b5060051b60200190565b5f82601f830112613a48575f5ffd5b81356001600160401b03811115613a6157613a616139d3565b613a74601f8201601f19166020016139e7565b818152846020838601011115613a88575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f82601f830112613ab3575f5ffd5b8135613ac6613ac182613a17565b6139e7565b8082825260208201915060208360051b860101925085831115613ae7575f5ffd5b602085015b83811015613b275780356001600160401b03811115613b09575f5ffd5b613b18886020838a0101613a39565b84525060209283019201613aec565b5095945050505050565b5f5f5f5f5f5f5f5f610140898b031215613b49575f5ffd5b8835613b54816139af565b97506020890135613b64816139af565b96506040890135613b74816139af565b95506060890135613b84816139af565b94506080890135613b94816139af565b935060a08901359250613baa8a60c08b016139c3565b91506101208901356001600160401b03811115613bc5575f5ffd5b613bd18b828c01613aa4565b9150509295985092959890939650565b5f60208284031215613bf1575f5ffd5b8135613382816139af565b5f60208284031215613c0c575f5ffd5b5035919050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b803560048110613c42575f5ffd5b919050565b5f5f60408385031215613c58575f5ffd5b613c6183613c34565b946020939093013593505050565b5f60608284031215613c7f575f5ffd5b61338283836139c3565b634e487b7160e01b5f52602160045260245ffd5b600e8110613cad57613cad613c89565b9052565b60208101612c8c8284613c9d565b60048110613cad57613cad613c89565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b8e8152613d0d602082018f613cbf565b8c60408201528b6060820152613d26608082018c613c13565b6101c060a08201525f613d3d6101c083018c613ccf565b82810360c0840152613d4f818c613ccf565b9050613d5e60e084018b613c13565b613d6c61010084018a613c13565b8761012084015286610140840152828103610160840152613d8d8187613ccf565b915050613d9e610180830185613c13565b8215156101a08301529f9e505050505050505050505050505050565b805f5b6002811015612e70578151845260209384019390910190600101613dbd565b805182525f6020820151613df36020850182613cbf565b50604082015160408401526060820151613e106060850182613dba565b50608082015160a084015260a0820151613e2d60c0850182613c13565b5060c082015161020060e0850152613e49610200850182613ccf565b905060e0830151848203610100860152613e638282613ccf565b915050610100830151613e7a610120860182613c13565b50610120830151613e8f610140860182613c13565b506101408301516101608501526101608301516101808501526101808301518482036101a0860152613ec18282613ccf565b9150506101a0830151613ed86101c0860182613c13565b506101c08301518015156101e086015261330a565b602081525f6133826020830184613ddc565b5f60208284031215613f0f575f5ffd5b81356001600160401b03811115613f24575f5ffd5b613f3084828501613a39565b949350505050565b5f60208284031215613f48575f5ffd5b81356001600160401b03811115613f5d575f5ffd5b82016101008185031215613382575f5ffd5b828152604060208201525f613f306040830184613ddc565b5f60208284031215613f97575f5ffd5b81356001600160401b03811115613fac575f5ffd5b613f3084828501613aa4565b5f5f60408385031215613fc9575f5ffd5b823591506020830135613fdb816139af565b809150509250929050565b5f5f83601f840112613ff6575f5ffd5b5081356001600160401b0381111561400c575f5ffd5b602083019150836020828501011115613535575f5ffd5b5f5f5f5f5f60608688031215614037575f5ffd5b8535945060208601356001600160401b03811115614053575f5ffd5b61405f88828901613fe6565b90955093505060408601356001600160401b0381111561407d575f5ffd5b61408988828901613fe6565b969995985093965092949392505050565b5f5f604083850312156140ab575f5ffd5b50508035926020909101359150565b81518152602080830151908201526040808301519082015260608101612c8c565b8215158152604081016133826020830184613c9d565b5f5f60408385031215614102575f5ffd5b82359150602083013560ff81168114613fdb575f5ffd5b60078110613cad57613cad613c89565b60208101612c8c8284614119565b5f5f60608385031215614148575f5ffd5b61415183613c34565b915083606084011115614162575f5ffd5b50926020919091019150565b600181811c9082168061418257607f821691505b60208210810361100757634e487b7160e01b5f52602260045260245ffd5b5f602082840312156141b0575f5ffd5b61338282613c34565b634e487b7160e01b5f52603260045260245ffd5b60208101612c8c8284613cbf565b634e487b7160e01b5f52601160045260245ffd5b81810381811115612c8c57612c8c6141db565b80820180821115612c8c57612c8c6141db565b5f60018201614226576142266141db565b5060010190565b5f5f8335601e19843603018112614242575f5ffd5b8301803591506001600160401b0382111561425b575f5ffd5b602001915036819003821315613535575f5ffd5b8015158114610ae3575f5ffd5b5f6020828403121561428c575f5ffd5b81356133828161426f565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b88815287602082015260a060408201525f6142de60a08301888a614297565b82810360608401526142f1818789614297565b90508281036080840152614306818587614297565b9b9a5050505050505050505050565b5f60208284031215614325575f5ffd5b5051919050565b601f8211156133af57805f5260205f20601f840160051c810160208510156143515750805b601f840160051c820191505b81811015614370575f815560010161435d565b5050505050565b5f19600383901b1c191660019190911b1790565b81516001600160401b038111156143a4576143a46139d3565b6143b8816143b2845461416e565b8461432c565b6020601f8211600181146143e5575f83156143d35750848201515b6143dd8482614377565b855550614370565b5f84815260208120601f198516915b8281101561441457878501518255602094850194600190920191016143f4565b508482101561443157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b838152602081018390526080810160408201835f5b600281101561447a57815163ffffffff16835260209283019290910190600101614455565b505050949350505050565b5f60208284031215614495575f5ffd5b81516133828161426f565b604081016144ae8285614119565b6133826020830184614119565b5f82518060208501845e5f920191825250919050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561452857603f19878603018452614513858351613ccf565b945060209384019391909101906001016144f7565b50929695505050505050565b6020808252601790820152764f6e6c79204369706865726e6f6465526567697374727960481b604082015260600190565b838152606081016145796020830185614119565b613f306040830184614119565b6001600160401b0383111561459d5761459d6139d3565b6145b1836145ab835461416e565b8361432c565b5f601f8411600181146145dd575f85156145cb5750838201355b6145d58682614377565b845550614370565b5f83815260208120601f198716915b8281101561460c57868501358255602094850194600190920191016145ec565b5086821015614628575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b818382375f9101908152919050565b838152604060208201525f614662604083018486614297565b95945050505050565b602081525f613f30602083018486614297565b5f8151808452602084019350602083015f5b828110156146b75781516001600160a01b0316865260209586019590910190600101614690565b5093949350505050565b848152836020820152608060408201525f6146df608083018561467e565b905060018060a01b038316606083015295945050505050565b848152836020820152606060408201525f61381c606083018486614297565b803563ffffffff81168114613c42575f5ffd5b5f6020828403121561473a575f5ffd5b61338282614717565b6040810181835f5b60028110156147785763ffffffff61476283614717565b168352602092830192919091019060010161474b565b50505092915050565b6040810161478f8285614119565b6133826020830184613c9d565b5f602082840312156147ac575f5ffd5b81516001600160401b038111156147c1575f5ffd5b8201601f810184136147d1575f5ffd5b80516147df613ac182613a17565b8082825260208201915060208360051b850101925086831115614800575f5ffd5b6020840193505b8284101561381c57835161481a816139af565b825260209384019390910190614807565b838152606060208201525f614843606083018561467e565b905060018060a01b0383166040830152949350505050565b5f8261487557634e487b7160e01b5f52601260045260245ffd5b500490565b5f8151808452602084019350602083015f5b828110156146b757815186526020958601959091019060010161488c565b6001600160a01b03841681526060602082018190525f906148cd9083018561467e565b828103604084015261381c818561487a565b604081525f6148f1604083018561467e565b8281036020840152614662818561487a565b6001600160a01b0392909216825260208201526040019056fe1b418a230a21d37a078bf8f16decbde8ccceacd77159371f62f0d4ea00d19967a164736f6c634300081c000a", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106102c3575f3560e01c80638e5ce3ad11610177578063cb649617116100d5578063ea71aa571161008f578063ea71aa5714610745578063f0691cba14610758578063f2fde38b1461076b578063f81b8ef61461077e578063fad8e11114610791578063fbdb3237146107a4578063fd2f3d01146107cc575f5ffd5b8063cb649617146106c1578063cbd16872146106ca578063cf0f34c4146106dd578063cfbdc98d146106f0578063da16fb2f1461071f578063e59e469514610732575f5ffd5b80639c8570c8116101315780639c8570c814610618578063ac3d2f421461062b578063b68fd1be14610653578063bb2d1b8214610666578063bff232c114610679578063c1ab0f1f1461068c578063c4ccafa21461069f575f5ffd5b80638e5ce3ad1461058157806390173a41146105945780639117173c146105a957806392312386146105bc578063929a8faf146105cf57806399c6679d146105f0575f5ffd5b80634fc77264116102245780637c8c3b4d116101de5780637c8c3b4d146105085780637cfa9d741461051b5780637edcd7ab1461052e57806381476ec21461054157806385814243146105545780638da5cb5b146105675780638dcdd86b1461056f575f5ffd5b80634fc772641461049d57806364226409146104b0578063647846a5146104d15780636db5c8fd146104e4578063715018a6146104ed57806377868ae4146104f5575f5ffd5b80631ba72945116102805780631ba729451461039057806336c5d38a146103a35780634017daf0146103d2578063406ed35c146103ff5780634147a3601461041f578063459d92941461044c5780634e92ec631461048a575f5ffd5b806301d12f1c146102c757806302a3a9c9146102dc5780630ef81b2f146102ef57806310bc62811461032d57806311bd61d91461035557806315cce2241461037d575b5f5ffd5b6102da6102d5366004613b31565b6107df565b005b6102da6102ea366004613be1565b610945565b6103176102fd366004613bfc565b5f908152600960205260409020546001600160a01b031690565b6040516103249190613c20565b60405180910390f35b61031761033b366004613bfc565b60096020525f90815260409020546001600160a01b031681565b610368610363366004613c47565b6109f1565b60405163ffffffff9091168152602001610324565b6102da61038b366004613be1565b610a2d565b6102da61039e366004613c6f565b610ad2565b6103c56103b1366004613bfc565b5f908152600f602052604090205460ff1690565b6040516103249190613cb1565b6103e56103e0366004613bfc565b610ae6565b6040516103249e9d9c9b9a99989796959493929190613cfd565b61041261040d366004613bfc565b610d10565b6040516103249190613eed565b61043e61042d366004613bfc565b600c6020525f908152604090205481565b604051908152602001610324565b61047a61045a366004613eff565b8051602081830181018051600b8252928201919093012091525460ff1681565b6040519015158152602001610324565b6102da610498366004613bfc565b61100d565b6102da6104ab366004613be1565b61109c565b6104c36104be366004613f38565b61112f565b604051610324929190613f6f565b600454610317906001600160a01b031681565b61043e60055481565b6102da61193b565b6102da610503366004613f87565b61194e565b6102da610516366004613fb8565b6119e6565b6102da610529366004613bfc565b611a6f565b61047a61053c366004614023565b611b6d565b6102da61054f36600461409a565b611d93565b600154610317906001600160a01b031681565b610317611e86565b5f54610317906001600160a01b031681565b600354610317906001600160a01b031681565b61059c611eb4565b60405161032491906140ba565b6102da6105b7366004613bfc565b611efa565b61059c6105ca366004613bfc565b6120a2565b6105e26105dd366004613bfc565b6120fb565b6040516103249291906140db565b6103176105fe366004613bfc565b5f908152601060205260409020546001600160a01b031690565b61047a610626366004614023565b612122565b610317610639366004613bfc565b5f908152600a60205260409020546001600160a01b031690565b6102da610661366004613f87565b6123ba565b6102da6106743660046140f1565b612451565b6102da610687366004613be1565b61253c565b6102da61069a36600461409a565b6125e3565b61047a6106ad366004613be1565b60076020525f908152604090205460ff1681565b61043e60065481565b6102da6106d8366004613fb8565b6126c6565b6102da6106eb366004613bfc565b612779565b6107126106fe366004613bfc565b5f908152600d602052604090205460ff1690565b6040516103249190614129565b61043e61072d366004613f38565b6127b6565b6102da610740366004613be1565b6127c0565b6102da610753366004614137565b61285a565b600254610317906001600160a01b031681565b6102da610779366004613be1565b61296d565b6103c561078c366004613bfc565b6129a7565b6102da61079f366004613be1565b612b41565b6103176107b2366004613bfc565b600a6020525f90815260409020546001600160a01b031681565b6102da6107da366004613be1565b612bd9565b5f6107e8612c68565b805490915060ff600160401b82041615906001600160401b03165f8115801561080e5750825b90505f826001600160401b031660011480156108295750303b155b905081158015610837575080155b156108555760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561087f57845460ff60401b1916600160401b1785555b61088833612c92565b61089188612779565b61089a8c612b41565b6108a38b6127c0565b6108ac8a610945565b6108b589610a2d565b6108be87612ca3565b6108c7866123ba565b6108cf611e86565b6001600160a01b03168d6001600160a01b0316146108f0576108f08d61296d565b831561093657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b61094d612dd7565b6001600160a01b0381166109a85760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964204533526566756e644d616e6167657220616464726573730060448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f9557d04c1c0b16f93f13b69aed23b3b6ab935bff3c53ac81d17896d3583542ed905f90a250565b6012602052815f5260405f208160028110610a0a575f80fd5b60089182820401919006600402915091509054906101000a900463ffffffff1681565b610a35612dd7565b6001600160a01b03811615801590610a5b57506004546001600160a01b03828116911614155b8190610a7b5760405163eddf07f560e01b815260040161099f9190613c20565b50600480546001600160a01b0319166001600160a01b0383161790556040517f722ff84c1234b2482061def5c82c6b5080c117b3cbb69d686844a051e4b8e7f390610ac7908390613c20565b60405180910390a150565b610ada612dd7565b610ae381612ca3565b50565b60086020525f9081526040902080546001820154600283015460058401546006850154600786018054959660ff90951695939492936001600160a01b039092169291610b319061416e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5d9061416e565b8015610ba85780601f10610b7f57610100808354040283529160200191610ba8565b820191905f5260205f20905b815481529060010190602001808311610b8b57829003601f168201915b505050505090806008018054610bbd9061416e565b80601f0160208091040260200160405190810160405280929190818152602001828054610be99061416e565b8015610c345780601f10610c0b57610100808354040283529160200191610c34565b820191905f5260205f20905b815481529060010190602001808311610c1757829003601f168201915b5050506009840154600a850154600b860154600c870154600d8801805497986001600160a01b03958616989490951696509194509291610c739061416e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9f9061416e565b8015610cea5780601f10610cc157610100808354040283529160200191610cea565b820191905f5260205f20905b815481529060010190602001808311610ccd57829003601f168201915b505050600e90930154919250506001600160a01b0381169060ff600160a01b909104168e565b610d18613826565b5f8281526008602090815260409182902082516101e08101909352805483526001810154909183019060ff166003811115610d5557610d55613c89565b6003811115610d6657610d66613c89565b8152600282810154602083015260408051808201808352919093019291600385019182845b815481526020019060010190808311610d8b5750505091835250506005820154602082015260068201546001600160a01b03166040820152600782018054606090920191610dd89061416e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e049061416e565b8015610e4f5780601f10610e2657610100808354040283529160200191610e4f565b820191905f5260205f20905b815481529060010190602001808311610e3257829003601f168201915b50505050508152602001600882018054610e689061416e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e949061416e565b8015610edf5780601f10610eb657610100808354040283529160200191610edf565b820191905f5260205f20905b815481529060010190602001808311610ec257829003601f168201915b505050918352505060098201546001600160a01b039081166020830152600a830154166040820152600b8201546060820152600c8201546080820152600d8201805460a090920191610f309061416e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5c9061416e565b8015610fa75780601f10610f7e57610100808354040283529160200191610fa7565b820191905f5260205f20905b815481529060010190602001808311610f8a57829003601f168201915b5050509183525050600e91909101546001600160a01b038082166020840152600160a01b90910460ff16151560409092019190915260a08201519192508391166110075760405163cd6f4a4f60e01b815260040161099f91815260200190565b50919050565b611015612dd7565b5f8181526009602052604090205481906001600160a01b031661104e576040516381c4951960e01b815260040161099f91815260200190565b505f818152600960205260409081902080546001600160a01b0319169055517f104eb329a192aef26eddea07c2af5ad2587792e62b37ed4045b6ba59bc5540fc90610ac79083815260200190565b6110a4612dd7565b6001600160a01b0381165f90815260076020526040902054819060ff166110df576040516321ac7c5f60e01b815260040161099f9190613c20565b506001600160a01b0381165f9081526007602052604090819020805460ff19169055517f56070b80bd617fcd2f7a284861edb488830a38f9dedcd77b2cb2f4eac17743e790610ac7908390613c20565b5f611138613826565b5f60128161114960208701876141a0565b600381111561115a5761115a613c89565b600381111561116b5761116b613c89565b8152602081019190915260409081015f20815180830190925260028282826020028201915f905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611192579050505050505090505f816001600281106111e9576111e96141b9565b602002015163ffffffff1611845f01602081019061120791906141a0565b906112265760405163286c068d60e11b815260040161099f91906141cd565b5060208401354281101561125057604051630b99e87960e01b815260040161099f91815260200190565b506040840135602085013581101561127e5760405163174b5a0760e21b815260040161099f91815260200190565b506015546014545f91906112964260408901356141ef565b6112a09190614202565b6112aa9190614202565b9050600554811081906112d3576040516313b783af60e21b815260040161099f91815260200190565b5060075f6112e76080880160608901613be1565b6001600160a01b0316815260208101919091526040015f205460ff166113136080870160608801613be1565b906113325760405163295a6a6f60e11b815260040161099f9190613c20565b505f61133d866127b6565b60068054965090915085905f61135283614215565b9091555050604080514460208201529081018690525f9060600160408051808303601f1901815291815281516020928301205f898152600c84528281208690556004546011855283822080546001600160a01b039092166001600160a01b0319928316179055600d8552838220805460ff1916600117905560109094528290208054339416939093179092556014549192506113f19190890135614202565b5f878152600e6020908152604090912060010191909155818652611417908801886141a0565b8560200190600381111561142d5761142d613c89565b9081600381111561144057611440613c89565b905250436040808701919091528051808201825290602089019060029083908390808284375f9201919091525050506060808701919091526114889060808901908901613be1565b6001600160a01b031660a08601526114a3608088018861422d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c0808701919091526114eb9088018861422d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060e08087019190915261153890610100890190890161427c565b15156101c08601525f610140860181905261016086018190526040805160208101909152908152610180860152336101a08601819052600454611588916001600160a01b03909116903085612e09565b5f6115996080890160608a01613be1565b6001600160a01b031663fefd9a8b88846115b660808d018d61422d565b6115c360a08f018f61422d565b8f8060c001906115d3919061422d565b6040518963ffffffff1660e01b81526004016115f69897969594939291906142bf565b6020604051808303815f875af1158015611612573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116369190614315565b5f818152600960205260409020549091506001600160a01b03168181611672576040516381c4951960e01b815260040161099f91815260200190565b505f828152600a60205260409020546001600160a01b031682816116ac576040516381c4951960e01b815260040161099f91815260200190565b50608088018390526001600160a01b038083166101008a015281166101208901525f8981526008602090815260409091208951815590890151600180830180548c94939260ff19919091169083600381111561170a5761170a613c89565b0217905550604082015181600201556060820151816003019060026117309291906138a3565b506080820151600582015560a08201516006820180546001600160a01b0319166001600160a01b0390921691909117905560c08201516007820190611775908261438b565b5060e0820151600882019061178a908261438b565b506101008201516009820180546001600160a01b039283166001600160a01b031991821617909155610120840151600a84018054919093169116179055610140820151600b820155610160820151600c820155610180820151600d8201906117f2908261438b565b506101a0820151600e90910180546101c0909301511515600160a01b026001600160a81b03199093166001600160a01b0392831617929092179091555f5460405163291a691b60e01b815291169063291a691b90611858908c9088908c90600401614440565b6020604051808303815f875af1158015611874573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118989190614485565b6118b557604051630d8dbe2560e01b815260040160405180910390fd5b6118c560808b0160608c01613be1565b6001600160a01b03167f5904e83d57e704fba4d92c5617f6b50ae993cd42d78babfcb239d0a6775f30708a8a6040516118ff929190613f6f565b60405180910390a2885f51602061491d5f395f51905f525f60016040516119279291906144a0565b60405180910390a250505050505050915091565b611943612dd7565b61194c5f612e76565b565b611956612dd7565b80515f5b818110156119aa57600b838281518110611976576119766141b9565b602002602001015160405161198b91906144bb565b908152604051908190036020019020805460ff1916905560010161195a565b507fd1b46e030b48add7bc03225cc5a6f403970976b36983f99ec31d535d627fc7db826040516119da91906144d1565b60405180910390a15050565b6119ee612dd7565b6001600160a01b03811615801590611a1f57505f828152600a60205260409020546001600160a01b03828116911614155b8290611a41576040516381c4951960e01b815260040161099f91815260200190565b505f918252600a602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f546001600160a01b03163314611a985760405162461bcd60e51b815260040161099f90614534565b5f818152600d602052604090205460ff166001816006811115611abd57611abd613c89565b14611ae257816001826040516337e1404160e01b815260040161099f93929190614565565b5f828152600d60205260409020805460ff19166002179055601354611b079042614202565b5f838152600e602052604080822092909255905183917fc44405af9078047712501f519e1fb900c2896c62b488336f84529c72ae16e6f191a2815f51602061491d5f395f51905f5260016002604051611b619291906144a0565b60405180910390a25050565b5f5f611b7887610d10565b5f888152600d602052604090205490915060ff166004816006811115611ba057611ba0613c89565b1488600483909192611bc8576040516337e1404160e01b815260040161099f93929190614565565b5050505f888152600e60209081526040918290208251606081018452815481526001820154928101929092526002015491810182905290899042811015611c2b576040516308f3034360e31b81526004810192909252602482015260440161099f565b50505f898152600860205260409020600d01611c48888a83614586565b505f898152600d6020526040902080546005919060ff191660018302179055508261010001516001600160a01b031663258ae5828989604051611c8c92919061463a565b6040519081900381206001600160e01b031960e084901b168252611cb6918a908a90600401614649565b602060405180830381865afa158015611cd1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf59190614485565b9350878785611d1957604051632f9f8ab960e01b815260040161099f92919061466b565b5050611d2489612ee6565b887f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca1698989604051611d5692919061466b565b60405180910390a2885f51602061491d5f395f51905f5260046005604051611d7f9291906144a0565b60405180910390a250505095945050505050565b5f546001600160a01b03163314611dbc5760405162461bcd60e51b815260040161099f90614534565b5f828152600860209081526040808320600d9092529091205460ff166002816006811115611dec57611dec613c89565b14611e1157836002826040516337e1404160e01b815260040161099f93929190614565565b5f848152600d6020526040808220805460ff19166003179055600b84018590555185917f11df18edb9bc9cd90a79068e0e208b630202148643d797d6150e7bacb733e63c91a2835f51602061491d5f395f51905f5260026003604051611e789291906144a0565b60405180910390a250505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b611ed560405180606001604052805f81526020015f81526020015f81525090565b5060408051606081018252601354815260145460208201526015549181019190915290565b5f818152600d602052604090205460ff166006816006811115611f1f57611f1f613c89565b14611f5c5760405162461bcd60e51b815260206004820152600d60248201526c114cc81b9bdd0819985a5b1959609a1b604482015260640161099f565b5f828152600c602052604090205480611fae5760405162461bcd60e51b8152602060048201526014602482015273139bc81c185e5b595b9d081d1bc81c99599d5b9960621b604482015260640161099f565b5f838152600c60205260408120819055611fc784613295565b5f858152601160205260409020546002549192506001600160a01b0390811691611ff49183911685613389565b60025460405163da19b69760e01b81526001600160a01b039091169063da19b6979061202a9088908790879087906004016146c1565b5f604051808303815f87803b158015612041575f5ffd5b505af1158015612053573d5f5f3e3d5ffd5b50505050847f5297818f48a66292b8b3e2caab83eec531b669bb20807fd38cf006adb2a07317848451604051612093929190918252602082015260400190565b60405180910390a25050505050565b6120c360405180606001604052805f81526020015f81526020015f81525090565b505f908152600e6020908152604091829020825160608101845281548152600182015492810192909252600201549181019190915290565b5f818152600d6020526040812054819060ff1661211884826133b4565b9250925050915091565b5f5f61212d87610d10565b5f888152600d602052604090205490915060ff16600381600681111561215557612155613c89565b148860038390919261217d576040516337e1404160e01b815260040161099f93929190614565565b5050505f888152600e60209081526040918290208251606081018452815481526001820154928101839052600290910154928101929092528990428110156121e1576040516308f3034360e31b81526004810192909252602482015260440161099f565b50506060830151602001518990428111156122185760405163017e35e560e71b81526004810192909252602482015260440161099f565b505061016083015189901561224357604051637eb9cea960e11b815260040161099f91815260200190565b505f888860405161225592919061463a565b60408051918290039091205f8c815260086020908152838220600c01839055600d905291909120805460ff191660041790556015549091506122979042614202565b5f8b8152600e6020526040908190206002019190915560a08501519051632f0e1bbf60e01b81526001600160a01b0390911690632f0e1bbf906122e4908d9085908c908c906004016146f8565b6020604051808303815f875af1158015612300573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123249190614485565b945088888661234857604051632f9f8ab960e01b815260040161099f92919061466b565b5050897f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade0718a8a60405161237c92919061466b565b60405180910390a2895f51602061491d5f395f51905f52600360046040516123a59291906144a0565b60405180910390a25050505095945050505050565b6123c2612dd7565b80515f5b81811015612421576001600b8483815181106123e4576123e46141b9565b60200260200101516040516123f991906144bb565b908152604051908190036020019020805491151560ff199092169190911790556001016123c6565b507f027b83cad653f54850fef6faa8c705f73a53e7f8de50a3a33ac1e0e3a5c0be81826040516119da91906144d1565b5f546001600160a01b031633148061247357506003546001600160a01b031633145b6124bf5760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c79205265676973747279206f7220536c617368696e674d677200000000604482015260640161099f565b5f8160ff161180156124d55750600d60ff821611155b61251a5760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103330b4b63ab932903932b0b9b7b760511b604482015260640161099f565b612538828260ff16600d81111561253357612533613c89565b61353c565b5050565b612544612dd7565b6001600160a01b03811661259a5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420536c617368696e674d616e61676572206164647265737300604482015260640161099f565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f4ccc8ed483c7c44c3602c3c38afc2c014a8f1d2dc210dfe58ebeeeead230f8e0905f90a250565b6003546001600160a01b031633146126345760405162461bcd60e51b815260206004820152601460248201527327b7363c9029b630b9b434b733a6b0b730b3b2b960611b604482015260640161099f565b60025460405163c1ab0f1f60e01b815260048101849052602481018390526001600160a01b039091169063c1ab0f1f906044015f604051808303815f87803b15801561267e575f5ffd5b505af1158015612690573d5f5f3e3d5ffd5b50505050817f4f41a3b0a032ebcae925f2ace77d507435840ca4b2dbaffdd7723fa8d72ee54282604051611b6191815260200190565b6126ce612dd7565b6001600160a01b038116158015906126ff57505f828152600960205260409020546001600160a01b03828116911614155b8290612721576040516381c4951960e01b815260040161099f91815260200190565b505f8281526009602090815260409182902080546001600160a01b0319166001600160a01b03851617905590518381527ff4041a3f914dac3bc9bf5f003ba41f28dbb84abe42f4e07c76266f5c8ceecb6991016119da565b612781612dd7565b60058190556040518181527fba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b52355290602001610ac7565b620f424080611007565b6127c8612dd7565b6001600160a01b038116158015906127ee57506001546001600160a01b03828116911614155b819061280e576040516320252f0b60e01b815260040161099f9190613c20565b50600180546001600160a01b0319166001600160a01b0383161790556040517fad4055f18cdad6f4bdd71afe3a72cbeee964217943e1bde38f138289e981a9a790610ac7908390613c20565b612862612dd7565b61286f602082018261472a565b63ffffffff16612885604083016020840161472a565b63ffffffff16101580156128aa57505f6128a2602083018361472a565b63ffffffff16115b6128ea5760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081d1a1c995cda1bdb19607a1b604482015260640161099f565b8060125f84600381111561290057612900613c89565b600381111561291157612911613c89565b815260208101919091526040015f2061292b9160026138e1565b5081600381111561293e5761293e613c89565b7f8b56fae526eee054f0849759a99fc7d4ff3823824ebf097a56f7d78adb6b34fa82604051611b619190614743565b612975612dd7565b6001600160a01b03811661299e575f604051631e4fbdf760e01b815260040161099f9190613c20565b610ae381612e76565b5f818152600d602052604081205460ff16818160068111156129cb576129cb613c89565b036129f057826001826040516337e1404160e01b815260040161099f93929190614565565b6005816006811115612a0457612a04613c89565b03612a255760405163462c7bed60e01b81526004810184905260240161099f565b6006816006811115612a3957612a39613c89565b03612a5a57604051633de16e3560e11b81526004810184905260240161099f565b5f612a6584836133b4565b9350905080612a8a57604051639f65d93560e01b81526004810185905260240161099f565b5f848152600d6020526040902080546006919060ff191660018302179055505f848152600f60205260409020805484919060ff1916600183600d811115612ad357612ad3613c89565b0217905550835f51602061491d5f395f51905f52836006604051612af89291906144a0565b60405180910390a2837fe20209be7caae6e76291267cfa711353981274bf127e94f16eb9ec44b68582bb8385604051612b32929190614781565b60405180910390a25050919050565b612b49612dd7565b6001600160a01b03811615801590612b6e57505f546001600160a01b03828116911614155b8190612b8e576040516375ac4eb760e11b815260040161099f9190613c20565b505f80546001600160a01b0319166001600160a01b0383161790556040517f80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b690610ac7908390613c20565b6001600160a01b0381165f90815260076020526040902054819060ff1615612c155760405163b29d459560e01b815260040161099f9190613c20565b506001600160a01b0381165f9081526007602052604090819020805460ff19166001179055517fb8d368517268f297fff00825d67d098763117d061360d31027be5b2e1a59d46790610ac7908390613c20565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b612c9a6136a4565b610ae3816136c9565b8035612ce65760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420444b472077696e646f7760701b604482015260640161099f565b5f816020013511612d325760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420636f6d707574652077696e646f7760501b604482015260640161099f565b5f816040013511612d815760405162461bcd60e51b8152602060048201526019602482015278496e76616c69642064656372797074696f6e2077696e646f7760381b604482015260640161099f565b80356013819055602080830135601481905560408085013560158190558151948552928401919091528201527f7e86ba16b805e2835af5c5b7aa5a942ced8bcc1fb95a05fbe42dae3862350a1690606001610ac7565b33612de0611e86565b6001600160a01b03161461194c573360405163118cdaa760e01b815260040161099f9190613c20565b6040516001600160a01b038481166024830152838116604483015260648201839052612e709186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506136d1565b50505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f805460405162beb08960e51b8152600481018490526001600160a01b03909116906317d61120906024015f60405180830381865afa158015612f2b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612f52919081019061479c565b80515f848152600c60209081526040808320805490849055601190925282205493945091926001600160a01b031690829003612ff0576002546040516341489f1560e01b81526001600160a01b03909116906341489f1590612fbc9088908890869060040161482b565b5f604051808303815f87803b158015612fd3575f5ffd5b505af1158015612fe5573d5f5f3e3d5ffd5b505050505050505050565b825f03613091575f858152601060205260409020546001600160a01b03168015613028576130286001600160a01b0383168285613389565b6002546040516341489f1560e01b81526001600160a01b03909116906341489f159061305c9089908990879060040161482b565b5f604051808303815f87803b158015613073575f5ffd5b505af1158015613085573d5f5f3e3d5ffd5b50505050505050505050565b5f836001600160401b038111156130aa576130aa6139d3565b6040519080825280602002602001820160405280156130d3578160200160208202803683370190505b5090505f6130e1858561485b565b90505f805b868110156131205782848281518110613101576131016141b9565b60209081029190910101526131168383614202565b91506001016130e6565b505f61312c82876141ef565b9050801561316957808461314160018a6141ef565b81518110613151576131516141b9565b602002602001018181516131659190614202565b9052505b600154613183906001600160a01b03878116911688613734565b600154604051636ec640c760e11b81526001600160a01b039091169063dd8c818e906131b79088908c9089906004016148aa565b5f604051808303815f87803b1580156131ce575f5ffd5b505af11580156131e0573d5f5f3e3d5ffd5b50506001546131fe92506001600160a01b038881169250165f613734565b887fac9fe8ad7f55eac03284399116ecafc104f10459773f4cdf47063c46e5be335a89866040516132309291906148df565b60405180910390a26002546040516341489f1560e01b81526001600160a01b03909116906341489f159061326c908c908c908a9060040161482b565b5f604051808303815f87803b158015613283575f5ffd5b505af1158015610936573d5f5f3e3d5ffd5b5f818152600f602052604090205460609060ff16600181600d8111156132bd576132bd613c89565b14806132da5750600281600d8111156132d8576132d8613c89565b145b15613312575f5b60405190808252806020026020018201604052801561330a578160200160208202803683370190505b509392505050565b5f5460405162beb08960e51b8152600481018590526001600160a01b03909116906317d61120906024015f60405180830381865afa92505050801561337857506040513d5f823e601f3d908101601f19168201604052613375919081019061479c565b60015b613382575f6132e1565b9392505050565b6133af83846001600160a01b031663a9059cbb8585604051602401612e3e929190614903565b505050565b5f828152600e60209081526040808320815160608101835281548152600182015493810193909352600201548282015282549051632800d82960e01b81526004810186905283929183916001600160a01b0390911690632800d82990602401602060405180830381865afa15801561342e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134529190614315565b9050600185600681111561346857613468613c89565b14801561347457508042115b1561348757600180935093505050613535565b600285600681111561349b5761349b613c89565b1480156134a85750815142115b156134bc5760016003935093505050613535565b60038560068111156134d0576134d0613c89565b1480156134e05750816020015142115b156134f45760016006935093505050613535565b600485600681111561350857613508613c89565b1480156135185750816040015142115b1561352c576001600a935093505050613535565b5f5f9350935050505b9250929050565b5f828152600d602052604081205460ff169081600681111561356057613560613c89565b0361358557826001826040516337e1404160e01b815260040161099f93929190614565565b600581600681111561359957613599613c89565b036135ba5760405163462c7bed60e01b81526004810184905260240161099f565b60068160068111156135ce576135ce613c89565b036135ef57604051633de16e3560e11b81526004810184905260240161099f565b5f838152600d6020526040902080546006919060ff191660018302179055505f838152600f60205260409020805483919060ff1916600183600d81111561363857613638613c89565b0217905550825f51602061491d5f395f51905f5282600660405161365d9291906144a0565b60405180910390a2827fe20209be7caae6e76291267cfa711353981274bf127e94f16eb9ec44b68582bb8284604051613697929190614781565b60405180910390a2505050565b6136ac6137c4565b61194c57604051631afcd79f60e31b815260040160405180910390fd5b6129756136a4565b5f5f60205f8451602086015f885af1806136f0576040513d5f823e3d81fd5b50505f513d91508115613707578060011415613714565b6001600160a01b0384163b155b15612e705783604051635274afe760e01b815260040161099f9190613c20565b5f836001600160a01b031663095ea7b38484604051602401613757929190614903565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050905061379084826137dd565b612e70576137ba84856001600160a01b031663095ea7b3865f604051602401612e3e929190614903565b612e7084826136d1565b5f6137cd612c68565b54600160401b900460ff16919050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f51905082801561381c5750811561380e578060011461381c565b5f866001600160a01b03163b115b9695505050505050565b604080516101e081019091525f808252602082019081526020015f815260200161384e61397d565b81525f602082018190526040820181905260608083018190526080830181905260a0830182905260c0830182905260e08301829052610100830182905261012083015261014082018190526101609091015290565b82600281019282156138d1579160200282015b828111156138d15782518255916020019190600101906138b6565b506138dd92915061399b565b5090565b6001830191839082156138d1579160200282015f5b8382111561394057833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026138f6565b80156139705782816101000a81549063ffffffff0219169055600401602081600301049283019260010302613940565b50506138dd92915061399b565b60405180604001604052806002906020820280368337509192915050565b5b808211156138dd575f815560010161399c565b6001600160a01b0381168114610ae3575f5ffd5b5f60608284031215611007575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613a0f57613a0f6139d3565b604052919050565b5f6001600160401b03821115613a2f57613a2f6139d3565b5060051b60200190565b5f82601f830112613a48575f5ffd5b81356001600160401b03811115613a6157613a616139d3565b613a74601f8201601f19166020016139e7565b818152846020838601011115613a88575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f82601f830112613ab3575f5ffd5b8135613ac6613ac182613a17565b6139e7565b8082825260208201915060208360051b860101925085831115613ae7575f5ffd5b602085015b83811015613b275780356001600160401b03811115613b09575f5ffd5b613b18886020838a0101613a39565b84525060209283019201613aec565b5095945050505050565b5f5f5f5f5f5f5f5f610140898b031215613b49575f5ffd5b8835613b54816139af565b97506020890135613b64816139af565b96506040890135613b74816139af565b95506060890135613b84816139af565b94506080890135613b94816139af565b935060a08901359250613baa8a60c08b016139c3565b91506101208901356001600160401b03811115613bc5575f5ffd5b613bd18b828c01613aa4565b9150509295985092959890939650565b5f60208284031215613bf1575f5ffd5b8135613382816139af565b5f60208284031215613c0c575f5ffd5b5035919050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b803560048110613c42575f5ffd5b919050565b5f5f60408385031215613c58575f5ffd5b613c6183613c34565b946020939093013593505050565b5f60608284031215613c7f575f5ffd5b61338283836139c3565b634e487b7160e01b5f52602160045260245ffd5b600e8110613cad57613cad613c89565b9052565b60208101612c8c8284613c9d565b60048110613cad57613cad613c89565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b8e8152613d0d602082018f613cbf565b8c60408201528b6060820152613d26608082018c613c13565b6101c060a08201525f613d3d6101c083018c613ccf565b82810360c0840152613d4f818c613ccf565b9050613d5e60e084018b613c13565b613d6c61010084018a613c13565b8761012084015286610140840152828103610160840152613d8d8187613ccf565b915050613d9e610180830185613c13565b8215156101a08301529f9e505050505050505050505050505050565b805f5b6002811015612e70578151845260209384019390910190600101613dbd565b805182525f6020820151613df36020850182613cbf565b50604082015160408401526060820151613e106060850182613dba565b50608082015160a084015260a0820151613e2d60c0850182613c13565b5060c082015161020060e0850152613e49610200850182613ccf565b905060e0830151848203610100860152613e638282613ccf565b915050610100830151613e7a610120860182613c13565b50610120830151613e8f610140860182613c13565b506101408301516101608501526101608301516101808501526101808301518482036101a0860152613ec18282613ccf565b9150506101a0830151613ed86101c0860182613c13565b506101c08301518015156101e086015261330a565b602081525f6133826020830184613ddc565b5f60208284031215613f0f575f5ffd5b81356001600160401b03811115613f24575f5ffd5b613f3084828501613a39565b949350505050565b5f60208284031215613f48575f5ffd5b81356001600160401b03811115613f5d575f5ffd5b82016101008185031215613382575f5ffd5b828152604060208201525f613f306040830184613ddc565b5f60208284031215613f97575f5ffd5b81356001600160401b03811115613fac575f5ffd5b613f3084828501613aa4565b5f5f60408385031215613fc9575f5ffd5b823591506020830135613fdb816139af565b809150509250929050565b5f5f83601f840112613ff6575f5ffd5b5081356001600160401b0381111561400c575f5ffd5b602083019150836020828501011115613535575f5ffd5b5f5f5f5f5f60608688031215614037575f5ffd5b8535945060208601356001600160401b03811115614053575f5ffd5b61405f88828901613fe6565b90955093505060408601356001600160401b0381111561407d575f5ffd5b61408988828901613fe6565b969995985093965092949392505050565b5f5f604083850312156140ab575f5ffd5b50508035926020909101359150565b81518152602080830151908201526040808301519082015260608101612c8c565b8215158152604081016133826020830184613c9d565b5f5f60408385031215614102575f5ffd5b82359150602083013560ff81168114613fdb575f5ffd5b60078110613cad57613cad613c89565b60208101612c8c8284614119565b5f5f60608385031215614148575f5ffd5b61415183613c34565b915083606084011115614162575f5ffd5b50926020919091019150565b600181811c9082168061418257607f821691505b60208210810361100757634e487b7160e01b5f52602260045260245ffd5b5f602082840312156141b0575f5ffd5b61338282613c34565b634e487b7160e01b5f52603260045260245ffd5b60208101612c8c8284613cbf565b634e487b7160e01b5f52601160045260245ffd5b81810381811115612c8c57612c8c6141db565b80820180821115612c8c57612c8c6141db565b5f60018201614226576142266141db565b5060010190565b5f5f8335601e19843603018112614242575f5ffd5b8301803591506001600160401b0382111561425b575f5ffd5b602001915036819003821315613535575f5ffd5b8015158114610ae3575f5ffd5b5f6020828403121561428c575f5ffd5b81356133828161426f565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b88815287602082015260a060408201525f6142de60a08301888a614297565b82810360608401526142f1818789614297565b90508281036080840152614306818587614297565b9b9a5050505050505050505050565b5f60208284031215614325575f5ffd5b5051919050565b601f8211156133af57805f5260205f20601f840160051c810160208510156143515750805b601f840160051c820191505b81811015614370575f815560010161435d565b5050505050565b5f19600383901b1c191660019190911b1790565b81516001600160401b038111156143a4576143a46139d3565b6143b8816143b2845461416e565b8461432c565b6020601f8211600181146143e5575f83156143d35750848201515b6143dd8482614377565b855550614370565b5f84815260208120601f198516915b8281101561441457878501518255602094850194600190920191016143f4565b508482101561443157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b838152602081018390526080810160408201835f5b600281101561447a57815163ffffffff16835260209283019290910190600101614455565b505050949350505050565b5f60208284031215614495575f5ffd5b81516133828161426f565b604081016144ae8285614119565b6133826020830184614119565b5f82518060208501845e5f920191825250919050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561452857603f19878603018452614513858351613ccf565b945060209384019391909101906001016144f7565b50929695505050505050565b6020808252601790820152764f6e6c79204369706865726e6f6465526567697374727960481b604082015260600190565b838152606081016145796020830185614119565b613f306040830184614119565b6001600160401b0383111561459d5761459d6139d3565b6145b1836145ab835461416e565b8361432c565b5f601f8411600181146145dd575f85156145cb5750838201355b6145d58682614377565b845550614370565b5f83815260208120601f198716915b8281101561460c57868501358255602094850194600190920191016145ec565b5086821015614628575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b818382375f9101908152919050565b838152604060208201525f614662604083018486614297565b95945050505050565b602081525f613f30602083018486614297565b5f8151808452602084019350602083015f5b828110156146b75781516001600160a01b0316865260209586019590910190600101614690565b5093949350505050565b848152836020820152608060408201525f6146df608083018561467e565b905060018060a01b038316606083015295945050505050565b848152836020820152606060408201525f61381c606083018486614297565b803563ffffffff81168114613c42575f5ffd5b5f6020828403121561473a575f5ffd5b61338282614717565b6040810181835f5b60028110156147785763ffffffff61476283614717565b168352602092830192919091019060010161474b565b50505092915050565b6040810161478f8285614119565b6133826020830184613c9d565b5f602082840312156147ac575f5ffd5b81516001600160401b038111156147c1575f5ffd5b8201601f810184136147d1575f5ffd5b80516147df613ac182613a17565b8082825260208201915060208360051b850101925086831115614800575f5ffd5b6020840193505b8284101561381c57835161481a816139af565b825260209384019390910190614807565b838152606060208201525f614843606083018561467e565b905060018060a01b0383166040830152949350505050565b5f8261487557634e487b7160e01b5f52601260045260245ffd5b500490565b5f8151808452602084019350602083015f5b828110156146b757815186526020958601959091019060010161488c565b6001600160a01b03841681526060602082018190525f906148cd9083018561467e565b828103604084015261381c818561487a565b604081525f6148f1604083018561467e565b8281036020840152614662818561487a565b6001600160a01b0392909216825260208201526040019056fe1b418a230a21d37a078bf8f16decbde8ccceacd77159371f62f0d4ea00d19967a164736f6c634300081c000a", "linkReferences": {}, "deployedLinkReferences": {}, "immutableReferences": {}, "inputSourceName": "project/contracts/Enclave.sol", - "buildInfoId": "solc-0_8_28-dffd00520e201ac3c58c9a66fb0b3e5b1925a3e4" + "buildInfoId": "solc-0_8_28-48efe0838d1e7fb2ef1a3cba330cb80744c9a50e" } \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json b/packages/enclave-contracts/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json index d41d7a2081..3e1d5d0334 100644 --- a/packages/enclave-contracts/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json +++ b/packages/enclave-contracts/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json @@ -940,5 +940,5 @@ "deployedLinkReferences": {}, "immutableReferences": {}, "inputSourceName": "project/contracts/interfaces/IBondingRegistry.sol", - "buildInfoId": "solc-0_8_28-bd46eae6f77be9a8538850385226c1ee4fc57e42" + "buildInfoId": "solc-0_8_28-48efe0838d1e7fb2ef1a3cba330cb80744c9a50e" } \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json b/packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json index 749277e738..88373513c9 100644 --- a/packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json +++ b/packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json @@ -621,9 +621,9 @@ "type": "bytes" }, { - "internalType": "bytes32", - "name": "publicKeyHash", - "type": "bytes32" + "internalType": "bytes", + "name": "proof", + "type": "bytes" } ], "name": "publishCommittee", @@ -782,5 +782,5 @@ "deployedLinkReferences": {}, "immutableReferences": {}, "inputSourceName": "project/contracts/interfaces/ICiphernodeRegistry.sol", - "buildInfoId": "solc-0_8_28-bd46eae6f77be9a8538850385226c1ee4fc57e42" + "buildInfoId": "solc-0_8_28-48efe0838d1e7fb2ef1a3cba330cb80744c9a50e" } \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json b/packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json index 497378e36e..432d009169 100644 --- a/packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json +++ b/packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json @@ -264,6 +264,11 @@ "name": "decryptionVerifier", "type": "address" }, + { + "internalType": "contract IPkVerifier", + "name": "pkVerifier", + "type": "address" + }, { "internalType": "bytes32", "name": "committeePublicKey", @@ -283,6 +288,11 @@ "internalType": "address", "name": "requester", "type": "address" + }, + { + "internalType": "bool", + "name": "proofAggregationEnabled", + "type": "bool" } ], "indexed": false, @@ -733,6 +743,11 @@ "name": "decryptionVerifier", "type": "address" }, + { + "internalType": "contract IPkVerifier", + "name": "pkVerifier", + "type": "address" + }, { "internalType": "bytes32", "name": "committeePublicKey", @@ -752,6 +767,11 @@ "internalType": "address", "name": "requester", "type": "address" + }, + { + "internalType": "bool", + "name": "proofAggregationEnabled", + "type": "bool" } ], "internalType": "struct E3", @@ -795,6 +815,11 @@ "internalType": "bytes", "name": "customParams", "type": "bytes" + }, + { + "internalType": "bool", + "name": "proofAggregationEnabled", + "type": "bool" } ], "internalType": "struct IEnclave.E3RequestParams", @@ -851,6 +876,25 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + } + ], + "name": "getPkVerifier", + "outputs": [ + { + "internalType": "contract IPkVerifier", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -941,7 +985,7 @@ }, { "internalType": "bytes32", - "name": "committeePublicKeyHash", + "name": "committeePublicKey", "type": "bytes32" } ], @@ -1085,6 +1129,11 @@ "internalType": "bytes", "name": "customParams", "type": "bytes" + }, + { + "internalType": "bool", + "name": "proofAggregationEnabled", + "type": "bool" } ], "internalType": "struct IEnclave.E3RequestParams", @@ -1146,6 +1195,11 @@ "name": "decryptionVerifier", "type": "address" }, + { + "internalType": "contract IPkVerifier", + "name": "pkVerifier", + "type": "address" + }, { "internalType": "bytes32", "name": "committeePublicKey", @@ -1165,6 +1219,11 @@ "internalType": "address", "name": "requester", "type": "address" + }, + { + "internalType": "bool", + "name": "proofAggregationEnabled", + "type": "bool" } ], "internalType": "struct E3", @@ -1276,6 +1335,24 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + }, + { + "internalType": "contract IPkVerifier", + "name": "pkVerifier", + "type": "address" + } + ], + "name": "setPkVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1313,5 +1390,5 @@ "deployedLinkReferences": {}, "immutableReferences": {}, "inputSourceName": "project/contracts/interfaces/IEnclave.sol", - "buildInfoId": "solc-0_8_28-bd46eae6f77be9a8538850385226c1ee4fc57e42" + "buildInfoId": "solc-0_8_28-48efe0838d1e7fb2ef1a3cba330cb80744c9a50e" } \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/interfaces/ISlashingManager.sol/ISlashingManager.json b/packages/enclave-contracts/artifacts/contracts/interfaces/ISlashingManager.sol/ISlashingManager.json index 513041be4c..6d56ef23d5 100644 --- a/packages/enclave-contracts/artifacts/contracts/interfaces/ISlashingManager.sol/ISlashingManager.json +++ b/packages/enclave-contracts/artifacts/contracts/interfaces/ISlashingManager.sol/ISlashingManager.json @@ -954,5 +954,5 @@ "deployedLinkReferences": {}, "immutableReferences": {}, "inputSourceName": "project/contracts/interfaces/ISlashingManager.sol", - "buildInfoId": "solc-0_8_28-bd46eae6f77be9a8538850385226c1ee4fc57e42" + "buildInfoId": "solc-0_8_28-48efe0838d1e7fb2ef1a3cba330cb80744c9a50e" } \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json b/packages/enclave-contracts/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json index ed8c293754..522d8e156c 100644 --- a/packages/enclave-contracts/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json +++ b/packages/enclave-contracts/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json @@ -1009,9 +1009,9 @@ "type": "bytes" }, { - "internalType": "bytes32", - "name": "publicKeyHash", - "type": "bytes32" + "internalType": "bytes", + "name": "proof", + "type": "bytes" } ], "name": "publishCommittee", @@ -1242,30 +1242,30 @@ "type": "function" } ], - "bytecode": "0x6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b613711806100d65f395ff3fe608060405234801561000f575f5ffd5b506004361061023f575f3560e01c80639a7a2ffc11610135578063dbb06c93116100b4578063f165053611610079578063f16505361461056a578063f2fde38b14610584578063f379b0df14610597578063f52fd803146105d1578063f6fc05d514610643575f5ffd5b8063dbb06c9314610517578063e59e469514610529578063e6745e131461053c578063e82f3b701461054f578063ebf0c71714610562575f5ffd5b8063c2b40ae4116100fa578063c2b40ae4146104a2578063c3a0ec30146104c1578063ca2869a0146104d2578063cd6dc687146104f1578063da881e5a14610504575f5ffd5b80639a7a2ffc146104245780639f0f874a14610460578063a016493014610469578063a8a4d69b1461047c578063bff232c11461048f575f5ffd5b8063715018a6116101c15780638cb89ecb116101865780638cb89ecb146103c15780638d1ddfb1146103e05780638da5cb5b146103f65780638e5ce3ad146103fe5780639015d37114610411575f5ffd5b8063715018a6146103465780637c92f5241461034e578063858142431461037b5780638a78bb151461039b5780638b530cb5146103ae575f5ffd5b80632e7b716d116102075780632e7b716d146102d85780634d6861a6146102eb57806350e6d94c146102fe5780635d5047761461032057806370e36bbe14610333575f5ffd5b8063096b810a146102435780630f3e34121461025857806317d611201461026b5780632800d82914610294578063291a691b146102b5575b5f5ffd5b61025661025136600461300d565b61064c565b005b610256610266366004613028565b610798565b61027e610279366004613028565b6107db565b60405161028b919061303f565b60405180910390f35b6102a76102a2366004613028565b61091d565b60405190815260200161028b565b6102c86102c336600461308a565b610969565b604051901515815260200161028b565b6102c86102e636600461300d565b610b43565b6102c86102f9366004613028565b610bf6565b6102c861030c36600461300d565b60066020525f908152604090205460ff1681565b6102c861032e3660046130c3565b610c35565b61025661034136600461300d565b610c79565b610256610cef565b61036161035c3660046130f1565b610d02565b6040805192835263ffffffff90911660208301520161028b565b60015461038e906001600160a01b031681565b60405161028b9190613126565b6102566103a936600461300d565b610ea9565b6102566103bc36600461317e565b610fe7565b6102a76103cf366004613028565b60096020525f908152604090205481565b600454600160281b900464ffffffffff166102a7565b61038e611159565b600b5461038e906001600160a01b031681565b6102c861041f36600461300d565b611187565b61044a61043236600461300d565b60076020525f908152604090205464ffffffffff1681565b60405164ffffffffff909116815260200161028b565b6102a760035481565b61027e610477366004613028565b6111a4565b6102c861048a3660046130c3565b61123a565b61025661049d36600461300d565b61127e565b6102a76104b0366004613028565b60086020525f908152604090205481565b6001546001600160a01b031661038e565b6102a76104e0366004613028565b5f9081526008602052604090205490565b6102566104ff36600461322e565b6112cf565b6102c8610512366004613028565b61142c565b5f5461038e906001600160a01b031681565b61025661053736600461300d565b61165f565b61025661054a366004613258565b6116d7565b6102a761055d366004613028565b61189a565b6102a76118cb565b610572601481565b60405160ff909116815260200161028b565b61025661059236600461300d565b6118dd565b6004546105b39064ffffffffff80821691600160281b90041682565b6040805164ffffffffff93841681529290911660208301520161028b565b6106146105df366004613028565b5f908152600a6020819052604090912090810154600590910154909163ffffffff80831692600160201b900416908284101590565b60405161028b949392919093845263ffffffff9283166020850152911660408301521515606082015260800190565b6102a760025481565b610654611159565b6001600160a01b0316336001600160a01b0316148061067d57506001546001600160a01b031633145b61069a57604051632864c4e160e01b815260040160405180910390fd5b6106a381611187565b81906106cc576040516381e5828960e01b81526004016106c39190613126565b60405180910390fd5b506001600160a01b0381165f9081526007602052604081205464ffffffffff16906106fa9060049083611917565b6001600160a01b0382165f908152600660205260408120805460ff1916905560028054916107278361328c565b90915550506002546004546040805164ffffffffff80861682526020820194909452600160281b909204909216918101919091526001600160a01b038316907f8c008e3835f6c79bfcdb89f0f6ca8705e0b01049ee84a90b0e4da1c7ba9405d5906060015b60405180910390a25050565b6107a0611bb9565b60038190556040518181527fbe772dc189863d512fa01e489c8eac204975aef1a8662d8b5a333804b5207ab79060200160405180910390a150565b5f818152600a602081905260408220600681015491810154606093919291816001600160401b03811115610811576108116132a1565b60405190808252806020026020018201604052801561083a578160200160208202803683370190505b5090505f805b84811015610911576001866009015f886006018481548110610864576108646132c9565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205460ff16600281111561089c5761089c6132b5565b03610909578560060181815481106108b6576108b66132c9565b905f5260205f20015f9054906101000a90046001600160a01b03168383815181106108e3576108e36132c9565b6001600160a01b039092166020928302919091019091015281610905816132dd565b9250505b600101610840565b50909695505050505050565b5f818152600a6020526040812081815460ff166003811115610941576109416132b5565b0361095f57604051630d4c1d9760e41b815260040160405180910390fd5b6003015492915050565b5f80546001600160a01b031633146109945760405163e4c2a7eb60e01b815260040160405180910390fd5b5f848152600a6020526040812090815460ff1660038111156109b8576109b86132b5565b146109d6576040516374ff462560e11b815260040160405180910390fd5b60015460408051630cc37d8f60e11b815290515f926001600160a01b031691631986fb1e9160048083019260209291908290030181865afa158015610a1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4191906132f5565b905080610a54604086016020870161331f565b63ffffffff161115610a6c604086016020870161331f565b829091610a9a576040516344ec930f60e01b815263ffffffff909216600483015260248201526044016106c3565b5050815460ff1916600190811783558201859055436002830155600354610ac19042613338565b6003830155610ad560058301856002612f44565b50610ade6118cb565b5f87815260086020526040908190209190915560028301546003840154915188927f381d281d32f95ef8fe4e5f3b263ea6a32d03d331e1a141ae1da996dc02a7a17092610b2f928a928a929161334b565b60405180910390a250600195945050505050565b5f610b4d82611187565b610b5857505f919050565b6001546001600160a01b0316610b81576040516350ca893360e01b815260040160405180910390fd5b600154604051639f8a13d760e01b81526001600160a01b0390911690639f8a13d790610bb1908590600401613126565b602060405180830381865afa158015610bcc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf0919061339b565b92915050565b5f818152600a602052604081206001815460ff166003811115610c1b57610c1b6132b5565b14610c2857505f92915050565b6003015442111592915050565b5f60015f848152600a602090815260408083206001600160a01b038716845260090190915290205460ff166002811115610c7157610c716132b5565b149392505050565b610c81611bb9565b6001600160a01b038116610ca85760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b038316908117825560405190917f2c8267accd82e977550ed2349c73311183cd22e306347be4453c8d130995e3c991a250565b610cf7611bb9565b610d005f611beb565b565b600b545f9081906001600160a01b03163314610d315760405163fcef374960e01b815260040160405180910390fd5b5f858152600a602052604090206002815460ff166003811115610d5657610d566132b5565b14610d7457604051634f4b461f60e11b815260040160405180910390fd5b60058101546001600160a01b0386165f90815260098301602052604090205463ffffffff909116925060019060ff166002811115610db457610db46132b5565b14610dc457600a01549150610ea1565b6001600160a01b0385165f9081526009820160205260408120805460ff19166002179055600a8201805491610df88361328c565b919050555080600a01549250846001600160a01b0316867f6c783b92374361b4d6efaf29673b89437ee969bb3c9d2d5d86b143ad5447b8498686604051610e49929190918252602082015260400190565b60405180910390a36040805184815263ffffffff84166020820181905285101591810182905287907f119cb11dd0a68c257d6dc9b06dcb37dd422ce276eb8bf3cd0b7079a116b8e2989060600160405180910390a250505b935093915050565b610eb1611159565b6001600160a01b0316336001600160a01b03161480610eda57506001546001600160a01b031633145b610ef757604051632864c4e160e01b815260040160405180910390fd5b610f0081611187565b610fe45760048054600160281b900464ffffffffff1690610f2a906001600160a01b038416611c5b565b6001600160a01b0382165f908152600660209081526040808320805460ff1916600117905560079091528120805464ffffffffff841664ffffffffff199091161790556002805491610f7b836132dd565b90915550506002546004546040805164ffffffffff80861682526020820194909452600160281b909204909216918101919091526001600160a01b038316907f3318d261fe14a5761d2d1e21555652f623d2134c430a9883c9ad6e958bb0db539060600161078c565b50565b610fef611bb9565b5f868152600a602052604090206002815460ff166003811115611014576110146132b5565b1461103257604051634f4b461f60e11b815260040160405180910390fd5b6004810154156110555760405163632a22bb60e01b815260040160405180910390fd5b6006810154851461109e5760405162461bcd60e51b815260206004820152601360248201527209cdec8ca40c6deeadce840dad2e6dac2e8c6d606b1b60448201526064016106c3565b60048181018390555f88815260096020526040808220859055905490516340a3b76160e11b8152918201899052602482018490526001600160a01b0316906381476ec2906044015f604051808303815f87803b1580156110fc575f5ffd5b505af115801561110e573d5f5f3e3d5ffd5b50505050867ff7472ea3a028fe8a86ab1c9a3e2176b284c8c3a22675c101e0fa21c140b6678d8787878760405161114894939291906133ba565b60405180910390a250505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03165f9081526006602052604090205460ff1690565b5f818152600a602052604090206004810154606091906111d7576040516322e679e360e11b815260040160405180910390fd5b8060060180548060200260200160405190810160405280929190818152602001828054801561122d57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161120f575b5050505050915050919050565b5f805f848152600a602090815260408083206001600160a01b038716845260090190915290205460ff166002811115611275576112756132b5565b14159392505050565b611286611bb9565b6001600160a01b0381166112ad5760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6112d8611e31565b805490915060ff600160401b82041615906001600160401b03165f811580156112fe5750825b90505f826001600160401b031660011480156113195750303b155b905081158015611327575080155b156113455760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561136f57845460ff60401b1916600160401b1785555b6001600160a01b0387166113965760405163d92e233d60e01b815260040160405180910390fd5b61139f33611e59565b6113ab60046014611e6a565b6113b486610798565b6113bc611159565b6001600160a01b0316876001600160a01b0316146113dd576113dd876118dd565b831561142357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f818152600a6020526040812081815460ff166003811115611450576114506132b5565b0361146e57604051630d4c1d9760e41b815260040160405180910390fd5b6001815460ff166003811115611486576114866132b5565b146114a457604051631860f69960e31b815260040160405180910390fd5b806003015442116114c857604051632f021e8d60e11b815260040160405180910390fd5b60058101546006820154600160201b90910463ffffffff161115806115ad578154600360ff199091161782556006820154600583015460408051928352600160201b90910463ffffffff16602083015285917fecc4a9fb7e28d074cba7f5b227e9b5827823c850a385539b9a2f98a08f8c203d910160405180910390a25f54604051635d968dc160e11b815260048101869052600260248201526001600160a01b039091169063bb2d1b82906044015f604051808303815f87803b15801561158e575f5ffd5b505af11580156115a0573d5f5f3e3d5ffd5b505f979650505050505050565b815460ff191660021782556006820154600a8301555f54604051631f3ea75d60e21b8152600481018690526001600160a01b0390911690637cfa9d74906024015f604051808303815f87803b158015611604575f5ffd5b505af1158015611616573d5f5f3e3d5ffd5b50505050837fed38c6266ebed7c01d311349a7fa67e0ef0f1d2f4760d60dbb34ca4799a2e1328360060160405161164d9190613431565b60405180910390a25060019392505050565b611667611bb9565b6001600160a01b03811661168e5760405163d92e233d60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517fad4055f18cdad6f4bdd71afe3a72cbeee964217943e1bde38f138289e981a9a7905f90a250565b5f828152600a6020526040812090815460ff1660038111156116fb576116fb6132b5565b0361171957604051630d4c1d9760e41b815260040160405180910390fd5b6001815460ff166003811115611731576117316132b5565b1461174f57604051631860f69960e31b815260040160405180910390fd5b806003015442111561177457604051639a19114d60e01b815260040160405180910390fd5b335f90815260078201602052604090205460ff16156117a65760405163257309f160e11b815260040160405180910390fd5b6117af33610b43565b6117cc5760405163149fbcfd60e11b815260040160405180910390fd5b6117d7338385611ee9565b6001810154604080516bffffffffffffffffffffffff193360601b16602080830191909152603482018690526054820187905260748083019490945282518083039094018452609490910190915281519101205f90335f8181526007850160205260409020805460ff19166001179055909150611856908390836120ba565b506040805184815260208101839052339186917f52999628fb1cb05707e842278833b22e511f11746202cecdf221968b0b89e8bd910160405180910390a350505050565b5f81815260096020526040902054806118c6576040516322e679e360e11b815260040160405180910390fd5b919050565b5f6118d8600460146122bb565b905090565b6118e5611bb9565b6001600160a01b03811661190e575f604051631e4fbdf760e01b81526004016106c39190613126565b610fe481611beb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182106119565760405162461bcd60e51b81526004016106c390613474565b825464ffffffffff600160281b909104811690821681116119b45760405162461bcd60e51b815260206004820152601860248201527713185e9e5253550e881b195859881b5d5cdd08195e1a5cdd60421b60448201526064016106c3565b825f5b81866001015f6119c784886123b4565b64ffffffffff1681526020019081526020015f20819055505f8160016119ed91906134be565b60ff168464ffffffffff16901c64ffffffffff16905060018564ffffffffff16901c64ffffffffff168111611a225750611bb1565b600185165f03611ae9575f611a4183611a3c8860016134d7565b6123b4565b60408051808201825286815264ffffffffff83165f90815260018c0160209081529083902054908201529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611aa2916004016134f4565b602060405180830381865af4158015611abd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae191906132f5565b935050611b9d565b5f611af983611a3c600189613524565b60408051808201825264ffffffffff83165f90815260018c0160209081529083902054825281018790529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611b5a916004016134f4565b602060405180830381865af4158015611b75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9991906132f5565b9350505b50647fffffffff600194851c1693016119b7565b505050505050565b33611bc2611159565b6001600160a01b031614610d00573360405163118cdaa760e01b81526004016106c39190613126565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b8154600160281b900464ffffffffff167f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018210611caa5760405162461bcd60e51b81526004016106c390613474565b825464ffffffffff90811690821610611cfd5760405162461bcd60e51b815260206004820152601560248201527413185e9e5253550e881d1c9959481a5cc8199d5b1b605a1b60448201526064016106c3565b611d088160016134d7565b835464ffffffffff91909116600160281b0269ffffffffff000000000019909116178355815f5b81856001015f611d3f84876123b4565b64ffffffffff16815260208101919091526040015f20556001831615611e2a575f611d6f82611a3c600187613524565b60408051808201825264ffffffffff83165f90815260018a0160209081529083902054825281018690529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611dd0916004016134f4565b602060405180830381865af4158015611deb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0f91906132f5565b647fffffffff600195861c1694909350919091019050611d2f565b5050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610bf0565b611e616123d1565b610fe4816123f6565b602060ff82161115611eb85760405162461bcd60e51b81526020600482015260176024820152764c617a79494d543a205472656520746f6f206c6172676560481b60448201526064016106c3565b611ec9600160ff831681901b613541565b825469ffffffffffffffffffff191664ffffffffff919091161790915550565b5f8211611f095760405163aeaddff160e01b815260040160405180910390fd5b6001546001600160a01b0316611f32576040516350ca893360e01b815260040160405180910390fd5b5f818152600a602052604081206001805460028301549293926001600160a01b039091169163bb03bd71918891611f6891613541565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611faf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fd391906132f5565b90505f60015f9054906101000a90046001600160a01b03166001600160a01b0316631209b1f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612026573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204a91906132f5565b90505f811161206c5760405163aeaddff160e01b815260040160405180910390fd5b5f6120778284613554565b90505f81116120995760405163149fbcfd60e11b815260040160405180910390fd5b808611156114235760405163aeaddff160e01b815260040160405180910390fd5b60058301546006840180545f92600160201b900463ffffffff169081111561213857508054600180820183555f928352602080842090920180546001600160a01b0319166001600160a01b03881690811790915583526008870182526040808420869055600988019092529120805460ff19168217905590506122b4565b5f5f90505f876008015f855f81548110612154576121546132c9565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054905060015b84548110156121dc575f896008015f87848154811061219e5761219e6132c9565b5f9182526020808320909101546001600160a01b031683528201929092526040019020549050828111156121d3578092508193505b5060010161217d565b508086106121f0575f9450505050506122b4565b5f886009015f868581548110612208576122086132c9565b5f9182526020808320909101546001600160a01b031683528201929092526040019020805460ff19166001836002811115612245576122456132b5565b02179055508684838154811061225d5761225d6132c9565b5f91825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918916815260088a018252604080822089905560098b0190925220805460ff191660019081179091559450505050505b9392505050565b5f5f8260ff161161230e5760405162461bcd60e51b815260206004820152601a60248201527f4c617a79494d543a206465707468206d757374206265203e203000000000000060448201526064016106c3565b602060ff831611156123325760405162461bcd60e51b81526004016106c390613573565b8254600160281b900464ffffffffff168061235160ff851660026136c4565b64ffffffffff1610156123a15760405162461bcd60e51b8152602060048201526018602482015277098c2f4f2929aa87440c2dac4d2ceeadeeae640c8cae0e8d60431b60448201526064016106c3565b6123ac8482856123fe565b949350505050565b5f816123c760ff851663ffffffff6136dd565b6122b491906134d7565b6123d96124c6565b610d0057604051631afcd79f60e31b815260040160405180910390fd5b6118e56123d1565b5f602060ff831611156124235760405162461bcd60e51b81526004016106c390613573565b8264ffffffffff165f036124415761243a826124df565b90506122b4565b5f61244d8360016134be565b60ff166001600160401b03811115612467576124676132a1565b604051908082528060200260200182016040528015612490578160200160208202803683370190505b50905061249f85858584612b79565b808360ff16815181106124b4576124b46132c9565b60200260200101519150509392505050565b5f6124cf611e31565b54600160401b900460ff16919050565b5f8160ff165f036124f157505f919050565b8160ff1660010361252357507f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864919050565b8160ff1660020361255557507f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1919050565b8160ff1660030361258757507f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238919050565b8160ff166004036125b957507f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a919050565b8160ff166005036125eb57507f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55919050565b8160ff1660060361261d57507f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78919050565b8160ff1660070361264f57507f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d919050565b8160ff1660080361268157507f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61919050565b8160ff166009036126b357507f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747919050565b8160ff16600a036126e557507f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2919050565b8160ff16600b0361271757507f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636919050565b8160ff16600c0361274957507f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a919050565b8160ff16600d0361277b57507f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0919050565b8160ff16600e036127ad57507f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c919050565b8160ff16600f036127df57507f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92919050565b8160ff1660100361281157507f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323919050565b8160ff1660110361284357507f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992919050565b8160ff1660120361287557507f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f919050565b8160ff166013036128a757507f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca919050565b8160ff166014036128d957507f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e919050565b8160ff1660150361290b57507f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1919050565b8160ff1660160361293d57507f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b919050565b8160ff1660170361296f57507f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d919050565b8160ff166018036129a157507f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540919050565b8160ff166019036129d357507f2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21919050565b8160ff16601a03612a0557507f120c58f143d491e95902f7f5277778a2e0ad5168f6add75669932630ce611518919050565b8160ff16601b03612a3757507f1f21feb70d3f21b07bf853d5e5db03071ec495a0a565a21da2d665d279483795919050565b8160ff16601c03612a6957507f24be905fa71335e14c638cc0f66a8623a826e768068a9e968bb1a1dde18a72d2919050565b8160ff16601d03612a9b57507f0f8666b62ed17491c50ceadead57d4cd597ef3821d65c328744c74e553dac26d919050565b8160ff16601e03612acd57507f0918d46bf52d98b034413f4a1a1c41594e7a7a3f6ae08cb43d1a2a230e1959ef919050565b8160ff16601f03612aff57507f1bbeb01b4c479ecde76917645e404dfa2e26f90d0afc5a65128513ad375c5ff2919050565b8160ff16602003612b3157507f2f68a1c58e257e42a17a6c61dff5551ed560b9922ab119d5ac8e184c9734ead9919050565b60405162461bcd60e51b815260206004820152601e60248201527f4c617a79494d543a2064656661756c745a65726f2062616420696e646578000060448201526064016106c3565b602060ff83161115612b9d5760405162461bcd60e51b81526004016106c390613573565b5f8364ffffffffff1611612c015760405162461bcd60e51b815260206004820152602560248201527f4c617a79494d543a206e756d626572206f66206c6561766573206d7573742062604482015264065203e20360dc1b60648201526084016106c3565b5f612c0d600185613524565b9050600181165f03612c6057846001015f612c285f846123b4565b64ffffffffff1681526020019081526020015f2054825f81518110612c4f57612c4f6132c9565b602002602001018181525050612c88565b612c695f6124df565b825f81518110612c7b57612c7b6132c9565b6020026020010181815250505b5f5b8360ff168160ff161015611bb157600182165f03612d805773__$078c82ddf6c95d34ea184ef1dd6130d136$__63561558fe6040518060400160405280868560ff1681518110612cdc57612cdc6132c9565b60200260200101518152602001612cf2856124df565b8152506040518263ffffffff1660e01b8152600401612d1191906134f4565b602060405180830381865af4158015612d2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d5091906132f5565b83612d5c8360016134be565b60ff1681518110612d6f57612d6f6132c9565b602002602001018181525050612f31565b5f612d8c8260016134be565b60ff168664ffffffffff16901c64ffffffffff16905060018364ffffffffff16901c64ffffffffff16811115612e2e575f876001015f612de3856001612dd291906134be565b60018864ffffffffff16901c6123b4565b64ffffffffff1681526020019081526020015f205490508085846001612e0991906134be565b60ff1681518110612e1c57612e1c6132c9565b60200260200101818152505050612f2f565b5f876001015f612e4585600188611a3c9190613524565b64ffffffffff1681526020019081526020015f2054905073__$078c82ddf6c95d34ea184ef1dd6130d136$__63561558fe6040518060400160405280848152602001888760ff1681518110612e9c57612e9c6132c9565b60200260200101518152506040518263ffffffff1660e01b8152600401612ec391906134f4565b602060405180830381865af4158015612ede573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0291906132f5565b85612f0e8560016134be565b60ff1681518110612f2157612f216132c9565b602002602001018181525050505b505b647fffffffff600192831c169101612c8a565b600183019183908215612fd5579160200282015f5b83821115612fa357833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302612f59565b8015612fd35782816101000a81549063ffffffff0219169055600401602081600301049283019260010302612fa3565b505b50612fe1929150612fe5565b5090565b5b80821115612fe1575f8155600101612fe6565b6001600160a01b0381168114610fe4575f5ffd5b5f6020828403121561301d575f5ffd5b81356122b481612ff9565b5f60208284031215613038575f5ffd5b5035919050565b602080825282518282018190525f918401906040840190835b8181101561307f5783516001600160a01b0316835260209384019390920191600101613058565b509095945050505050565b5f5f5f6080848603121561309c575f5ffd5b8335925060208401359150608084018510156130b6575f5ffd5b6040840190509250925092565b5f5f604083850312156130d4575f5ffd5b8235915060208301356130e681612ff9565b809150509250929050565b5f5f5f60608486031215613103575f5ffd5b83359250602084013561311581612ff9565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b5f5f83601f84011261314a575f5ffd5b5081356001600160401b03811115613160575f5ffd5b602083019150836020828501011115613177575f5ffd5b9250929050565b5f5f5f5f5f5f60808789031215613193575f5ffd5b8635955060208701356001600160401b038111156131af575f5ffd5b8701601f810189136131bf575f5ffd5b80356001600160401b038111156131d4575f5ffd5b8960208260051b84010111156131e8575f5ffd5b6020919091019550935060408701356001600160401b0381111561320a575f5ffd5b61321689828a0161313a565b979a9699509497949695606090950135949350505050565b5f5f6040838503121561323f575f5ffd5b823561324a81612ff9565b946020939093013593505050565b5f5f60408385031215613269575f5ffd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b5f8161329a5761329a613278565b505f190190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f600182016132ee576132ee613278565b5060010190565b5f60208284031215613305575f5ffd5b5051919050565b803563ffffffff811681146118c6575f5ffd5b5f6020828403121561332f575f5ffd5b6122b48261330c565b80820180821115610bf057610bf0613278565b84815260a0810160208201855f5b60028110156133865763ffffffff6133708361330c565b1683526020928301929190910190600101613359565b50505060608201939093526080015292915050565b5f602082840312156133ab575f5ffd5b815180151581146122b4575f5ffd5b604080825281018490525f8560608301825b878110156133fc5782356133df81612ff9565b6001600160a01b03168252602092830192909101906001016133cc565b508381036020850152848152848660208301375f602086830101526020601f19601f8701168201019250505095945050505050565b602080825282548282018190525f848152918220906040840190835b8181101561307f5783546001600160a01b031683526001938401936020909301920161344d565b6020808252602a908201527f4c617a79494d543a206c656166206d757374206265203c20534e41524b5f53436040820152691053105497d19251531160b21b606082015260800190565b60ff8181168382160190811115610bf057610bf0613278565b64ffffffffff8181168382160190811115610bf057610bf0613278565b6040810181835f5b600281101561351b5781518352602092830192909101906001016134fc565b50505092915050565b64ffffffffff8281168282160390811115610bf057610bf0613278565b81810381811115610bf057610bf0613278565b5f8261356e57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526023908201527f4c617a79494d543a206465707468206d757374206265203c3d204d41585f44456040820152620a0a8960eb1b606082015260800190565b6001815b6001841115610ea1578085048111156135d5576135d5613278565b60018416156135e357908102905b60019390931c9280026135ba565b5f826135ff57506001610bf0565b8161360b57505f610bf0565b8160018114613621576002811461362b5761365d565b6001915050610bf0565b60ff84111561363c5761363c613278565b6001841b915064ffffffffff82111561365757613657613278565b50610bf0565b5060208310610133831016604e8410600b8410161715613695575081810a64ffffffffff81111561369057613690613278565b610bf0565b6136a564ffffffffff84846135b6565b8064ffffffffff048211156136bc576136bc613278565b029392505050565b5f6122b464ffffffffff841664ffffffffff84166135f1565b64ffffffffff81811683821602908116908181146136fd576136fd613278565b509291505056fea164736f6c634300081c000a", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061023f575f3560e01c80639a7a2ffc11610135578063dbb06c93116100b4578063f165053611610079578063f16505361461056a578063f2fde38b14610584578063f379b0df14610597578063f52fd803146105d1578063f6fc05d514610643575f5ffd5b8063dbb06c9314610517578063e59e469514610529578063e6745e131461053c578063e82f3b701461054f578063ebf0c71714610562575f5ffd5b8063c2b40ae4116100fa578063c2b40ae4146104a2578063c3a0ec30146104c1578063ca2869a0146104d2578063cd6dc687146104f1578063da881e5a14610504575f5ffd5b80639a7a2ffc146104245780639f0f874a14610460578063a016493014610469578063a8a4d69b1461047c578063bff232c11461048f575f5ffd5b8063715018a6116101c15780638cb89ecb116101865780638cb89ecb146103c15780638d1ddfb1146103e05780638da5cb5b146103f65780638e5ce3ad146103fe5780639015d37114610411575f5ffd5b8063715018a6146103465780637c92f5241461034e578063858142431461037b5780638a78bb151461039b5780638b530cb5146103ae575f5ffd5b80632e7b716d116102075780632e7b716d146102d85780634d6861a6146102eb57806350e6d94c146102fe5780635d5047761461032057806370e36bbe14610333575f5ffd5b8063096b810a146102435780630f3e34121461025857806317d611201461026b5780632800d82914610294578063291a691b146102b5575b5f5ffd5b61025661025136600461300d565b61064c565b005b610256610266366004613028565b610798565b61027e610279366004613028565b6107db565b60405161028b919061303f565b60405180910390f35b6102a76102a2366004613028565b61091d565b60405190815260200161028b565b6102c86102c336600461308a565b610969565b604051901515815260200161028b565b6102c86102e636600461300d565b610b43565b6102c86102f9366004613028565b610bf6565b6102c861030c36600461300d565b60066020525f908152604090205460ff1681565b6102c861032e3660046130c3565b610c35565b61025661034136600461300d565b610c79565b610256610cef565b61036161035c3660046130f1565b610d02565b6040805192835263ffffffff90911660208301520161028b565b60015461038e906001600160a01b031681565b60405161028b9190613126565b6102566103a936600461300d565b610ea9565b6102566103bc36600461317e565b610fe7565b6102a76103cf366004613028565b60096020525f908152604090205481565b600454600160281b900464ffffffffff166102a7565b61038e611159565b600b5461038e906001600160a01b031681565b6102c861041f36600461300d565b611187565b61044a61043236600461300d565b60076020525f908152604090205464ffffffffff1681565b60405164ffffffffff909116815260200161028b565b6102a760035481565b61027e610477366004613028565b6111a4565b6102c861048a3660046130c3565b61123a565b61025661049d36600461300d565b61127e565b6102a76104b0366004613028565b60086020525f908152604090205481565b6001546001600160a01b031661038e565b6102a76104e0366004613028565b5f9081526008602052604090205490565b6102566104ff36600461322e565b6112cf565b6102c8610512366004613028565b61142c565b5f5461038e906001600160a01b031681565b61025661053736600461300d565b61165f565b61025661054a366004613258565b6116d7565b6102a761055d366004613028565b61189a565b6102a76118cb565b610572601481565b60405160ff909116815260200161028b565b61025661059236600461300d565b6118dd565b6004546105b39064ffffffffff80821691600160281b90041682565b6040805164ffffffffff93841681529290911660208301520161028b565b6106146105df366004613028565b5f908152600a6020819052604090912090810154600590910154909163ffffffff80831692600160201b900416908284101590565b60405161028b949392919093845263ffffffff9283166020850152911660408301521515606082015260800190565b6102a760025481565b610654611159565b6001600160a01b0316336001600160a01b0316148061067d57506001546001600160a01b031633145b61069a57604051632864c4e160e01b815260040160405180910390fd5b6106a381611187565b81906106cc576040516381e5828960e01b81526004016106c39190613126565b60405180910390fd5b506001600160a01b0381165f9081526007602052604081205464ffffffffff16906106fa9060049083611917565b6001600160a01b0382165f908152600660205260408120805460ff1916905560028054916107278361328c565b90915550506002546004546040805164ffffffffff80861682526020820194909452600160281b909204909216918101919091526001600160a01b038316907f8c008e3835f6c79bfcdb89f0f6ca8705e0b01049ee84a90b0e4da1c7ba9405d5906060015b60405180910390a25050565b6107a0611bb9565b60038190556040518181527fbe772dc189863d512fa01e489c8eac204975aef1a8662d8b5a333804b5207ab79060200160405180910390a150565b5f818152600a602081905260408220600681015491810154606093919291816001600160401b03811115610811576108116132a1565b60405190808252806020026020018201604052801561083a578160200160208202803683370190505b5090505f805b84811015610911576001866009015f886006018481548110610864576108646132c9565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205460ff16600281111561089c5761089c6132b5565b03610909578560060181815481106108b6576108b66132c9565b905f5260205f20015f9054906101000a90046001600160a01b03168383815181106108e3576108e36132c9565b6001600160a01b039092166020928302919091019091015281610905816132dd565b9250505b600101610840565b50909695505050505050565b5f818152600a6020526040812081815460ff166003811115610941576109416132b5565b0361095f57604051630d4c1d9760e41b815260040160405180910390fd5b6003015492915050565b5f80546001600160a01b031633146109945760405163e4c2a7eb60e01b815260040160405180910390fd5b5f848152600a6020526040812090815460ff1660038111156109b8576109b86132b5565b146109d6576040516374ff462560e11b815260040160405180910390fd5b60015460408051630cc37d8f60e11b815290515f926001600160a01b031691631986fb1e9160048083019260209291908290030181865afa158015610a1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4191906132f5565b905080610a54604086016020870161331f565b63ffffffff161115610a6c604086016020870161331f565b829091610a9a576040516344ec930f60e01b815263ffffffff909216600483015260248201526044016106c3565b5050815460ff1916600190811783558201859055436002830155600354610ac19042613338565b6003830155610ad560058301856002612f44565b50610ade6118cb565b5f87815260086020526040908190209190915560028301546003840154915188927f381d281d32f95ef8fe4e5f3b263ea6a32d03d331e1a141ae1da996dc02a7a17092610b2f928a928a929161334b565b60405180910390a250600195945050505050565b5f610b4d82611187565b610b5857505f919050565b6001546001600160a01b0316610b81576040516350ca893360e01b815260040160405180910390fd5b600154604051639f8a13d760e01b81526001600160a01b0390911690639f8a13d790610bb1908590600401613126565b602060405180830381865afa158015610bcc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf0919061339b565b92915050565b5f818152600a602052604081206001815460ff166003811115610c1b57610c1b6132b5565b14610c2857505f92915050565b6003015442111592915050565b5f60015f848152600a602090815260408083206001600160a01b038716845260090190915290205460ff166002811115610c7157610c716132b5565b149392505050565b610c81611bb9565b6001600160a01b038116610ca85760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b038316908117825560405190917f2c8267accd82e977550ed2349c73311183cd22e306347be4453c8d130995e3c991a250565b610cf7611bb9565b610d005f611beb565b565b600b545f9081906001600160a01b03163314610d315760405163fcef374960e01b815260040160405180910390fd5b5f858152600a602052604090206002815460ff166003811115610d5657610d566132b5565b14610d7457604051634f4b461f60e11b815260040160405180910390fd5b60058101546001600160a01b0386165f90815260098301602052604090205463ffffffff909116925060019060ff166002811115610db457610db46132b5565b14610dc457600a01549150610ea1565b6001600160a01b0385165f9081526009820160205260408120805460ff19166002179055600a8201805491610df88361328c565b919050555080600a01549250846001600160a01b0316867f6c783b92374361b4d6efaf29673b89437ee969bb3c9d2d5d86b143ad5447b8498686604051610e49929190918252602082015260400190565b60405180910390a36040805184815263ffffffff84166020820181905285101591810182905287907f119cb11dd0a68c257d6dc9b06dcb37dd422ce276eb8bf3cd0b7079a116b8e2989060600160405180910390a250505b935093915050565b610eb1611159565b6001600160a01b0316336001600160a01b03161480610eda57506001546001600160a01b031633145b610ef757604051632864c4e160e01b815260040160405180910390fd5b610f0081611187565b610fe45760048054600160281b900464ffffffffff1690610f2a906001600160a01b038416611c5b565b6001600160a01b0382165f908152600660209081526040808320805460ff1916600117905560079091528120805464ffffffffff841664ffffffffff199091161790556002805491610f7b836132dd565b90915550506002546004546040805164ffffffffff80861682526020820194909452600160281b909204909216918101919091526001600160a01b038316907f3318d261fe14a5761d2d1e21555652f623d2134c430a9883c9ad6e958bb0db539060600161078c565b50565b610fef611bb9565b5f868152600a602052604090206002815460ff166003811115611014576110146132b5565b1461103257604051634f4b461f60e11b815260040160405180910390fd5b6004810154156110555760405163632a22bb60e01b815260040160405180910390fd5b6006810154851461109e5760405162461bcd60e51b815260206004820152601360248201527209cdec8ca40c6deeadce840dad2e6dac2e8c6d606b1b60448201526064016106c3565b60048181018390555f88815260096020526040808220859055905490516340a3b76160e11b8152918201899052602482018490526001600160a01b0316906381476ec2906044015f604051808303815f87803b1580156110fc575f5ffd5b505af115801561110e573d5f5f3e3d5ffd5b50505050867ff7472ea3a028fe8a86ab1c9a3e2176b284c8c3a22675c101e0fa21c140b6678d8787878760405161114894939291906133ba565b60405180910390a250505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03165f9081526006602052604090205460ff1690565b5f818152600a602052604090206004810154606091906111d7576040516322e679e360e11b815260040160405180910390fd5b8060060180548060200260200160405190810160405280929190818152602001828054801561122d57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161120f575b5050505050915050919050565b5f805f848152600a602090815260408083206001600160a01b038716845260090190915290205460ff166002811115611275576112756132b5565b14159392505050565b611286611bb9565b6001600160a01b0381166112ad5760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6112d8611e31565b805490915060ff600160401b82041615906001600160401b03165f811580156112fe5750825b90505f826001600160401b031660011480156113195750303b155b905081158015611327575080155b156113455760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561136f57845460ff60401b1916600160401b1785555b6001600160a01b0387166113965760405163d92e233d60e01b815260040160405180910390fd5b61139f33611e59565b6113ab60046014611e6a565b6113b486610798565b6113bc611159565b6001600160a01b0316876001600160a01b0316146113dd576113dd876118dd565b831561142357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f818152600a6020526040812081815460ff166003811115611450576114506132b5565b0361146e57604051630d4c1d9760e41b815260040160405180910390fd5b6001815460ff166003811115611486576114866132b5565b146114a457604051631860f69960e31b815260040160405180910390fd5b806003015442116114c857604051632f021e8d60e11b815260040160405180910390fd5b60058101546006820154600160201b90910463ffffffff161115806115ad578154600360ff199091161782556006820154600583015460408051928352600160201b90910463ffffffff16602083015285917fecc4a9fb7e28d074cba7f5b227e9b5827823c850a385539b9a2f98a08f8c203d910160405180910390a25f54604051635d968dc160e11b815260048101869052600260248201526001600160a01b039091169063bb2d1b82906044015f604051808303815f87803b15801561158e575f5ffd5b505af11580156115a0573d5f5f3e3d5ffd5b505f979650505050505050565b815460ff191660021782556006820154600a8301555f54604051631f3ea75d60e21b8152600481018690526001600160a01b0390911690637cfa9d74906024015f604051808303815f87803b158015611604575f5ffd5b505af1158015611616573d5f5f3e3d5ffd5b50505050837fed38c6266ebed7c01d311349a7fa67e0ef0f1d2f4760d60dbb34ca4799a2e1328360060160405161164d9190613431565b60405180910390a25060019392505050565b611667611bb9565b6001600160a01b03811661168e5760405163d92e233d60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517fad4055f18cdad6f4bdd71afe3a72cbeee964217943e1bde38f138289e981a9a7905f90a250565b5f828152600a6020526040812090815460ff1660038111156116fb576116fb6132b5565b0361171957604051630d4c1d9760e41b815260040160405180910390fd5b6001815460ff166003811115611731576117316132b5565b1461174f57604051631860f69960e31b815260040160405180910390fd5b806003015442111561177457604051639a19114d60e01b815260040160405180910390fd5b335f90815260078201602052604090205460ff16156117a65760405163257309f160e11b815260040160405180910390fd5b6117af33610b43565b6117cc5760405163149fbcfd60e11b815260040160405180910390fd5b6117d7338385611ee9565b6001810154604080516bffffffffffffffffffffffff193360601b16602080830191909152603482018690526054820187905260748083019490945282518083039094018452609490910190915281519101205f90335f8181526007850160205260409020805460ff19166001179055909150611856908390836120ba565b506040805184815260208101839052339186917f52999628fb1cb05707e842278833b22e511f11746202cecdf221968b0b89e8bd910160405180910390a350505050565b5f81815260096020526040902054806118c6576040516322e679e360e11b815260040160405180910390fd5b919050565b5f6118d8600460146122bb565b905090565b6118e5611bb9565b6001600160a01b03811661190e575f604051631e4fbdf760e01b81526004016106c39190613126565b610fe481611beb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182106119565760405162461bcd60e51b81526004016106c390613474565b825464ffffffffff600160281b909104811690821681116119b45760405162461bcd60e51b815260206004820152601860248201527713185e9e5253550e881b195859881b5d5cdd08195e1a5cdd60421b60448201526064016106c3565b825f5b81866001015f6119c784886123b4565b64ffffffffff1681526020019081526020015f20819055505f8160016119ed91906134be565b60ff168464ffffffffff16901c64ffffffffff16905060018564ffffffffff16901c64ffffffffff168111611a225750611bb1565b600185165f03611ae9575f611a4183611a3c8860016134d7565b6123b4565b60408051808201825286815264ffffffffff83165f90815260018c0160209081529083902054908201529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611aa2916004016134f4565b602060405180830381865af4158015611abd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae191906132f5565b935050611b9d565b5f611af983611a3c600189613524565b60408051808201825264ffffffffff83165f90815260018c0160209081529083902054825281018790529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611b5a916004016134f4565b602060405180830381865af4158015611b75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9991906132f5565b9350505b50647fffffffff600194851c1693016119b7565b505050505050565b33611bc2611159565b6001600160a01b031614610d00573360405163118cdaa760e01b81526004016106c39190613126565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b8154600160281b900464ffffffffff167f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018210611caa5760405162461bcd60e51b81526004016106c390613474565b825464ffffffffff90811690821610611cfd5760405162461bcd60e51b815260206004820152601560248201527413185e9e5253550e881d1c9959481a5cc8199d5b1b605a1b60448201526064016106c3565b611d088160016134d7565b835464ffffffffff91909116600160281b0269ffffffffff000000000019909116178355815f5b81856001015f611d3f84876123b4565b64ffffffffff16815260208101919091526040015f20556001831615611e2a575f611d6f82611a3c600187613524565b60408051808201825264ffffffffff83165f90815260018a0160209081529083902054825281018690529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611dd0916004016134f4565b602060405180830381865af4158015611deb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0f91906132f5565b647fffffffff600195861c1694909350919091019050611d2f565b5050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610bf0565b611e616123d1565b610fe4816123f6565b602060ff82161115611eb85760405162461bcd60e51b81526020600482015260176024820152764c617a79494d543a205472656520746f6f206c6172676560481b60448201526064016106c3565b611ec9600160ff831681901b613541565b825469ffffffffffffffffffff191664ffffffffff919091161790915550565b5f8211611f095760405163aeaddff160e01b815260040160405180910390fd5b6001546001600160a01b0316611f32576040516350ca893360e01b815260040160405180910390fd5b5f818152600a602052604081206001805460028301549293926001600160a01b039091169163bb03bd71918891611f6891613541565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611faf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fd391906132f5565b90505f60015f9054906101000a90046001600160a01b03166001600160a01b0316631209b1f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612026573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204a91906132f5565b90505f811161206c5760405163aeaddff160e01b815260040160405180910390fd5b5f6120778284613554565b90505f81116120995760405163149fbcfd60e11b815260040160405180910390fd5b808611156114235760405163aeaddff160e01b815260040160405180910390fd5b60058301546006840180545f92600160201b900463ffffffff169081111561213857508054600180820183555f928352602080842090920180546001600160a01b0319166001600160a01b03881690811790915583526008870182526040808420869055600988019092529120805460ff19168217905590506122b4565b5f5f90505f876008015f855f81548110612154576121546132c9565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054905060015b84548110156121dc575f896008015f87848154811061219e5761219e6132c9565b5f9182526020808320909101546001600160a01b031683528201929092526040019020549050828111156121d3578092508193505b5060010161217d565b508086106121f0575f9450505050506122b4565b5f886009015f868581548110612208576122086132c9565b5f9182526020808320909101546001600160a01b031683528201929092526040019020805460ff19166001836002811115612245576122456132b5565b02179055508684838154811061225d5761225d6132c9565b5f91825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918916815260088a018252604080822089905560098b0190925220805460ff191660019081179091559450505050505b9392505050565b5f5f8260ff161161230e5760405162461bcd60e51b815260206004820152601a60248201527f4c617a79494d543a206465707468206d757374206265203e203000000000000060448201526064016106c3565b602060ff831611156123325760405162461bcd60e51b81526004016106c390613573565b8254600160281b900464ffffffffff168061235160ff851660026136c4565b64ffffffffff1610156123a15760405162461bcd60e51b8152602060048201526018602482015277098c2f4f2929aa87440c2dac4d2ceeadeeae640c8cae0e8d60431b60448201526064016106c3565b6123ac8482856123fe565b949350505050565b5f816123c760ff851663ffffffff6136dd565b6122b491906134d7565b6123d96124c6565b610d0057604051631afcd79f60e31b815260040160405180910390fd5b6118e56123d1565b5f602060ff831611156124235760405162461bcd60e51b81526004016106c390613573565b8264ffffffffff165f036124415761243a826124df565b90506122b4565b5f61244d8360016134be565b60ff166001600160401b03811115612467576124676132a1565b604051908082528060200260200182016040528015612490578160200160208202803683370190505b50905061249f85858584612b79565b808360ff16815181106124b4576124b46132c9565b60200260200101519150509392505050565b5f6124cf611e31565b54600160401b900460ff16919050565b5f8160ff165f036124f157505f919050565b8160ff1660010361252357507f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864919050565b8160ff1660020361255557507f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1919050565b8160ff1660030361258757507f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238919050565b8160ff166004036125b957507f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a919050565b8160ff166005036125eb57507f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55919050565b8160ff1660060361261d57507f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78919050565b8160ff1660070361264f57507f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d919050565b8160ff1660080361268157507f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61919050565b8160ff166009036126b357507f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747919050565b8160ff16600a036126e557507f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2919050565b8160ff16600b0361271757507f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636919050565b8160ff16600c0361274957507f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a919050565b8160ff16600d0361277b57507f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0919050565b8160ff16600e036127ad57507f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c919050565b8160ff16600f036127df57507f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92919050565b8160ff1660100361281157507f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323919050565b8160ff1660110361284357507f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992919050565b8160ff1660120361287557507f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f919050565b8160ff166013036128a757507f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca919050565b8160ff166014036128d957507f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e919050565b8160ff1660150361290b57507f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1919050565b8160ff1660160361293d57507f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b919050565b8160ff1660170361296f57507f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d919050565b8160ff166018036129a157507f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540919050565b8160ff166019036129d357507f2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21919050565b8160ff16601a03612a0557507f120c58f143d491e95902f7f5277778a2e0ad5168f6add75669932630ce611518919050565b8160ff16601b03612a3757507f1f21feb70d3f21b07bf853d5e5db03071ec495a0a565a21da2d665d279483795919050565b8160ff16601c03612a6957507f24be905fa71335e14c638cc0f66a8623a826e768068a9e968bb1a1dde18a72d2919050565b8160ff16601d03612a9b57507f0f8666b62ed17491c50ceadead57d4cd597ef3821d65c328744c74e553dac26d919050565b8160ff16601e03612acd57507f0918d46bf52d98b034413f4a1a1c41594e7a7a3f6ae08cb43d1a2a230e1959ef919050565b8160ff16601f03612aff57507f1bbeb01b4c479ecde76917645e404dfa2e26f90d0afc5a65128513ad375c5ff2919050565b8160ff16602003612b3157507f2f68a1c58e257e42a17a6c61dff5551ed560b9922ab119d5ac8e184c9734ead9919050565b60405162461bcd60e51b815260206004820152601e60248201527f4c617a79494d543a2064656661756c745a65726f2062616420696e646578000060448201526064016106c3565b602060ff83161115612b9d5760405162461bcd60e51b81526004016106c390613573565b5f8364ffffffffff1611612c015760405162461bcd60e51b815260206004820152602560248201527f4c617a79494d543a206e756d626572206f66206c6561766573206d7573742062604482015264065203e20360dc1b60648201526084016106c3565b5f612c0d600185613524565b9050600181165f03612c6057846001015f612c285f846123b4565b64ffffffffff1681526020019081526020015f2054825f81518110612c4f57612c4f6132c9565b602002602001018181525050612c88565b612c695f6124df565b825f81518110612c7b57612c7b6132c9565b6020026020010181815250505b5f5b8360ff168160ff161015611bb157600182165f03612d805773__$078c82ddf6c95d34ea184ef1dd6130d136$__63561558fe6040518060400160405280868560ff1681518110612cdc57612cdc6132c9565b60200260200101518152602001612cf2856124df565b8152506040518263ffffffff1660e01b8152600401612d1191906134f4565b602060405180830381865af4158015612d2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d5091906132f5565b83612d5c8360016134be565b60ff1681518110612d6f57612d6f6132c9565b602002602001018181525050612f31565b5f612d8c8260016134be565b60ff168664ffffffffff16901c64ffffffffff16905060018364ffffffffff16901c64ffffffffff16811115612e2e575f876001015f612de3856001612dd291906134be565b60018864ffffffffff16901c6123b4565b64ffffffffff1681526020019081526020015f205490508085846001612e0991906134be565b60ff1681518110612e1c57612e1c6132c9565b60200260200101818152505050612f2f565b5f876001015f612e4585600188611a3c9190613524565b64ffffffffff1681526020019081526020015f2054905073__$078c82ddf6c95d34ea184ef1dd6130d136$__63561558fe6040518060400160405280848152602001888760ff1681518110612e9c57612e9c6132c9565b60200260200101518152506040518263ffffffff1660e01b8152600401612ec391906134f4565b602060405180830381865af4158015612ede573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0291906132f5565b85612f0e8560016134be565b60ff1681518110612f2157612f216132c9565b602002602001018181525050505b505b647fffffffff600192831c169101612c8a565b600183019183908215612fd5579160200282015f5b83821115612fa357833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302612f59565b8015612fd35782816101000a81549063ffffffff0219169055600401602081600301049283019260010302612fa3565b505b50612fe1929150612fe5565b5090565b5b80821115612fe1575f8155600101612fe6565b6001600160a01b0381168114610fe4575f5ffd5b5f6020828403121561301d575f5ffd5b81356122b481612ff9565b5f60208284031215613038575f5ffd5b5035919050565b602080825282518282018190525f918401906040840190835b8181101561307f5783516001600160a01b0316835260209384019390920191600101613058565b509095945050505050565b5f5f5f6080848603121561309c575f5ffd5b8335925060208401359150608084018510156130b6575f5ffd5b6040840190509250925092565b5f5f604083850312156130d4575f5ffd5b8235915060208301356130e681612ff9565b809150509250929050565b5f5f5f60608486031215613103575f5ffd5b83359250602084013561311581612ff9565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b5f5f83601f84011261314a575f5ffd5b5081356001600160401b03811115613160575f5ffd5b602083019150836020828501011115613177575f5ffd5b9250929050565b5f5f5f5f5f5f60808789031215613193575f5ffd5b8635955060208701356001600160401b038111156131af575f5ffd5b8701601f810189136131bf575f5ffd5b80356001600160401b038111156131d4575f5ffd5b8960208260051b84010111156131e8575f5ffd5b6020919091019550935060408701356001600160401b0381111561320a575f5ffd5b61321689828a0161313a565b979a9699509497949695606090950135949350505050565b5f5f6040838503121561323f575f5ffd5b823561324a81612ff9565b946020939093013593505050565b5f5f60408385031215613269575f5ffd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b5f8161329a5761329a613278565b505f190190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f600182016132ee576132ee613278565b5060010190565b5f60208284031215613305575f5ffd5b5051919050565b803563ffffffff811681146118c6575f5ffd5b5f6020828403121561332f575f5ffd5b6122b48261330c565b80820180821115610bf057610bf0613278565b84815260a0810160208201855f5b60028110156133865763ffffffff6133708361330c565b1683526020928301929190910190600101613359565b50505060608201939093526080015292915050565b5f602082840312156133ab575f5ffd5b815180151581146122b4575f5ffd5b604080825281018490525f8560608301825b878110156133fc5782356133df81612ff9565b6001600160a01b03168252602092830192909101906001016133cc565b508381036020850152848152848660208301375f602086830101526020601f19601f8701168201019250505095945050505050565b602080825282548282018190525f848152918220906040840190835b8181101561307f5783546001600160a01b031683526001938401936020909301920161344d565b6020808252602a908201527f4c617a79494d543a206c656166206d757374206265203c20534e41524b5f53436040820152691053105497d19251531160b21b606082015260800190565b60ff8181168382160190811115610bf057610bf0613278565b64ffffffffff8181168382160190811115610bf057610bf0613278565b6040810181835f5b600281101561351b5781518352602092830192909101906001016134fc565b50505092915050565b64ffffffffff8281168282160390811115610bf057610bf0613278565b81810381811115610bf057610bf0613278565b5f8261356e57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526023908201527f4c617a79494d543a206465707468206d757374206265203c3d204d41585f44456040820152620a0a8960eb1b606082015260800190565b6001815b6001841115610ea1578085048111156135d5576135d5613278565b60018416156135e357908102905b60019390931c9280026135ba565b5f826135ff57506001610bf0565b8161360b57505f610bf0565b8160018114613621576002811461362b5761365d565b6001915050610bf0565b60ff84111561363c5761363c613278565b6001841b915064ffffffffff82111561365757613657613278565b50610bf0565b5060208310610133831016604e8410600b8410161715613695575081810a64ffffffffff81111561369057613690613278565b610bf0565b6136a564ffffffffff84846135b6565b8064ffffffffff048211156136bc576136bc613278565b029392505050565b5f6122b464ffffffffff841664ffffffffff84166135f1565b64ffffffffff81811683821602908116908181146136fd576136fd613278565b509291505056fea164736f6c634300081c000a", + "bytecode": "0x6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b613cbe806100d65f395ff3fe608060405234801561000f575f5ffd5b506004361061023f575f3560e01c80639a7a2ffc11610135578063dbb06c93116100b4578063f165053611610079578063f16505361461056a578063f2fde38b14610584578063f379b0df14610597578063f52fd803146105d1578063f6fc05d514610643575f5ffd5b8063dbb06c9314610517578063e59e469514610529578063e6745e131461053c578063e82f3b701461054f578063ebf0c71714610562575f5ffd5b8063c2b40ae4116100fa578063c2b40ae4146104a2578063c3a0ec30146104c1578063ca2869a0146104d2578063cd6dc687146104f1578063da881e5a14610504575f5ffd5b80639a7a2ffc146104245780639f0f874a14610460578063a016493014610469578063a8a4d69b1461047c578063bff232c11461048f575f5ffd5b806370e36bbe116101c15780638cb89ecb116101865780638cb89ecb146103c15780638d1ddfb1146103e05780638da5cb5b146103f65780638e5ce3ad146103fe5780639015d37114610411575f5ffd5b806370e36bbe14610346578063715018a6146103595780637c92f52414610361578063858142431461038e5780638a78bb15146103ae575f5ffd5b80632e7b716d116102075780632e7b716d146102d85780634d6861a6146102eb57806350e6d94c146102fe5780635d504776146103205780635e1d33bd14610333575f5ffd5b8063096b810a146102435780630f3e34121461025857806317d611201461026b5780632800d82914610294578063291a691b146102b5575b5f5ffd5b61025661025136600461317b565b61064c565b005b610256610266366004613196565b610798565b61027e610279366004613196565b6107db565b60405161028b91906131ad565b60405180910390f35b6102a76102a2366004613196565b61091d565b60405190815260200161028b565b6102c86102c33660046131f8565b610969565b604051901515815260200161028b565b6102c86102e636600461317b565b610b43565b6102c86102f9366004613196565b610bf6565b6102c861030c36600461317b565b60066020525f908152604090205460ff1681565b6102c861032e366004613231565b610c35565b6102566103413660046132a3565b610c79565b61025661035436600461317b565b610f59565b610256610fcf565b61037461036f366004613379565b610fe2565b6040805192835263ffffffff90911660208301520161028b565b6001546103a1906001600160a01b031681565b60405161028b91906133ae565b6102566103bc36600461317b565b611189565b6102a76103cf366004613196565b60096020525f908152604090205481565b600454600160281b900464ffffffffff166102a7565b6103a16112c7565b600b546103a1906001600160a01b031681565b6102c861041f36600461317b565b6112f5565b61044a61043236600461317b565b60076020525f908152604090205464ffffffffff1681565b60405164ffffffffff909116815260200161028b565b6102a760035481565b61027e610477366004613196565b611312565b6102c861048a366004613231565b6113a8565b61025661049d36600461317b565b6113ec565b6102a76104b0366004613196565b60086020525f908152604090205481565b6001546001600160a01b03166103a1565b6102a76104e0366004613196565b5f9081526008602052604090205490565b6102566104ff3660046133c2565b61143d565b6102c8610512366004613196565b61159a565b5f546103a1906001600160a01b031681565b61025661053736600461317b565b6117cd565b61025661054a3660046133ec565b611845565b6102a761055d366004613196565b611a08565b6102a7611a39565b610572601481565b60405160ff909116815260200161028b565b61025661059236600461317b565b611a4b565b6004546105b39064ffffffffff80821691600160281b90041682565b6040805164ffffffffff93841681529290911660208301520161028b565b6106146105df366004613196565b5f908152600a6020819052604090912090810154600590910154909163ffffffff80831692600160201b900416908284101590565b60405161028b949392919093845263ffffffff9283166020850152911660408301521515606082015260800190565b6102a760025481565b6106546112c7565b6001600160a01b0316336001600160a01b0316148061067d57506001546001600160a01b031633145b61069a57604051632864c4e160e01b815260040160405180910390fd5b6106a3816112f5565b81906106cc576040516381e5828960e01b81526004016106c391906133ae565b60405180910390fd5b506001600160a01b0381165f9081526007602052604081205464ffffffffff16906106fa9060049083611a85565b6001600160a01b0382165f908152600660205260408120805460ff19169055600280549161072783613420565b90915550506002546004546040805164ffffffffff80861682526020820194909452600160281b909204909216918101919091526001600160a01b038316907f8c008e3835f6c79bfcdb89f0f6ca8705e0b01049ee84a90b0e4da1c7ba9405d5906060015b60405180910390a25050565b6107a0611d27565b60038190556040518181527fbe772dc189863d512fa01e489c8eac204975aef1a8662d8b5a333804b5207ab79060200160405180910390a150565b5f818152600a602081905260408220600681015491810154606093919291816001600160401b0381111561081157610811613435565b60405190808252806020026020018201604052801561083a578160200160208202803683370190505b5090505f805b84811015610911576001866009015f8860060184815481106108645761086461345d565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205460ff16600281111561089c5761089c613449565b03610909578560060181815481106108b6576108b661345d565b905f5260205f20015f9054906101000a90046001600160a01b03168383815181106108e3576108e361345d565b6001600160a01b03909216602092830291909101909101528161090581613471565b9250505b600101610840565b50909695505050505050565b5f818152600a6020526040812081815460ff16600381111561094157610941613449565b0361095f57604051630d4c1d9760e41b815260040160405180910390fd5b6003015492915050565b5f80546001600160a01b031633146109945760405163e4c2a7eb60e01b815260040160405180910390fd5b5f848152600a6020526040812090815460ff1660038111156109b8576109b8613449565b146109d6576040516374ff462560e11b815260040160405180910390fd5b60015460408051630cc37d8f60e11b815290515f926001600160a01b031691631986fb1e9160048083019260209291908290030181865afa158015610a1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a419190613489565b905080610a5460408601602087016134b3565b63ffffffff161115610a6c60408601602087016134b3565b829091610a9a576040516344ec930f60e01b815263ffffffff909216600483015260248201526044016106c3565b5050815460ff1916600190811783558201859055436002830155600354610ac190426134cc565b6003830155610ad5600583018560026130b2565b50610ade611a39565b5f87815260086020526040908190209190915560028301546003840154915188927f381d281d32f95ef8fe4e5f3b263ea6a32d03d331e1a141ae1da996dc02a7a17092610b2f928a928a92916134df565b60405180910390a250600195945050505050565b5f610b4d826112f5565b610b5857505f919050565b6001546001600160a01b0316610b81576040516350ca893360e01b815260040160405180910390fd5b600154604051639f8a13d760e01b81526001600160a01b0390911690639f8a13d790610bb19085906004016133ae565b602060405180830381865afa158015610bcc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf0919061353e565b92915050565b5f818152600a602052604081206001815460ff166003811115610c1b57610c1b613449565b14610c2857505f92915050565b6003015442111592915050565b5f60015f848152600a602090815260408083206001600160a01b038716845260090190915290205460ff166002811115610c7157610c71613449565b149392505050565b610c81611d27565b5f878152600a602052604090206002815460ff166003811115610ca657610ca6613449565b14610cc457604051634f4b461f60e11b815260040160405180910390fd5b600481015415610ce75760405163632a22bb60e01b815260040160405180910390fd5b60068101548614610d305760405162461bcd60e51b815260206004820152601360248201527209cdec8ca40c6deeadce840dad2e6dac2e8c6d606b1b60448201526064016106c3565b5f610d3d83850185613655565b9150505f815111610d875760405162461bcd60e51b815260206004820152601460248201527343353a206e6f207075626c696320696e7075747360601b60448201526064016106c3565b5f8160018351610d9791906136f8565b81518110610da757610da761345d565b60209081029190910101515f805460405163101bb4d760e21b8152600481018e905292935090916001600160a01b039091169063406ed35c906024015f60405180830381865afa158015610dfd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e2491908101906137dd565b61012081015160405163473b057f60e11b81529192506001600160a01b031690638e760afe90610e5a908990899060040161397c565b602060405180830381865afa158015610e75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e999190613489565b5060048481018390555f8c815260096020526040808220859055905490516340a3b76160e11b81529182018d9052602482018490526001600160a01b0316906381476ec2906044015f604051808303815f87803b158015610ef8575f5ffd5b505af1158015610f0a573d5f5f3e3d5ffd5b505050508a7ff7472ea3a028fe8a86ab1c9a3e2176b284c8c3a22675c101e0fa21c140b6678d8b8b8b8b604051610f44949392919061398f565b60405180910390a25050505050505050505050565b610f61611d27565b6001600160a01b038116610f885760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b038316908117825560405190917f2c8267accd82e977550ed2349c73311183cd22e306347be4453c8d130995e3c991a250565b610fd7611d27565b610fe05f611d59565b565b600b545f9081906001600160a01b031633146110115760405163fcef374960e01b815260040160405180910390fd5b5f858152600a602052604090206002815460ff16600381111561103657611036613449565b1461105457604051634f4b461f60e11b815260040160405180910390fd5b60058101546001600160a01b0386165f90815260098301602052604090205463ffffffff909116925060019060ff16600281111561109457611094613449565b146110a457600a01549150611181565b6001600160a01b0385165f9081526009820160205260408120805460ff19166002179055600a82018054916110d883613420565b919050555080600a01549250846001600160a01b0316867f6c783b92374361b4d6efaf29673b89437ee969bb3c9d2d5d86b143ad5447b8498686604051611129929190918252602082015260400190565b60405180910390a36040805184815263ffffffff84166020820181905285101591810182905287907f119cb11dd0a68c257d6dc9b06dcb37dd422ce276eb8bf3cd0b7079a116b8e2989060600160405180910390a250505b935093915050565b6111916112c7565b6001600160a01b0316336001600160a01b031614806111ba57506001546001600160a01b031633145b6111d757604051632864c4e160e01b815260040160405180910390fd5b6111e0816112f5565b6112c45760048054600160281b900464ffffffffff169061120a906001600160a01b038416611dc9565b6001600160a01b0382165f908152600660209081526040808320805460ff1916600117905560079091528120805464ffffffffff841664ffffffffff19909116179055600280549161125b83613471565b90915550506002546004546040805164ffffffffff80861682526020820194909452600160281b909204909216918101919091526001600160a01b038316907f3318d261fe14a5761d2d1e21555652f623d2134c430a9883c9ad6e958bb0db539060600161078c565b50565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03165f9081526006602052604090205460ff1690565b5f818152600a60205260409020600481015460609190611345576040516322e679e360e11b815260040160405180910390fd5b8060060180548060200260200160405190810160405280929190818152602001828054801561139b57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161137d575b5050505050915050919050565b5f805f848152600a602090815260408083206001600160a01b038716845260090190915290205460ff1660028111156113e3576113e3613449565b14159392505050565b6113f4611d27565b6001600160a01b03811661141b5760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f611446611f9f565b805490915060ff600160401b82041615906001600160401b03165f8115801561146c5750825b90505f826001600160401b031660011480156114875750303b155b905081158015611495575080155b156114b35760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156114dd57845460ff60401b1916600160401b1785555b6001600160a01b0387166115045760405163d92e233d60e01b815260040160405180910390fd5b61150d33611fc7565b61151960046014611fd8565b61152286610798565b61152a6112c7565b6001600160a01b0316876001600160a01b03161461154b5761154b87611a4b565b831561159157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f818152600a6020526040812081815460ff1660038111156115be576115be613449565b036115dc57604051630d4c1d9760e41b815260040160405180910390fd5b6001815460ff1660038111156115f4576115f4613449565b1461161257604051631860f69960e31b815260040160405180910390fd5b8060030154421161163657604051632f021e8d60e11b815260040160405180910390fd5b60058101546006820154600160201b90910463ffffffff1611158061171b578154600360ff199091161782556006820154600583015460408051928352600160201b90910463ffffffff16602083015285917fecc4a9fb7e28d074cba7f5b227e9b5827823c850a385539b9a2f98a08f8c203d910160405180910390a25f54604051635d968dc160e11b815260048101869052600260248201526001600160a01b039091169063bb2d1b82906044015f604051808303815f87803b1580156116fc575f5ffd5b505af115801561170e573d5f5f3e3d5ffd5b505f979650505050505050565b815460ff191660021782556006820154600a8301555f54604051631f3ea75d60e21b8152600481018690526001600160a01b0390911690637cfa9d74906024015f604051808303815f87803b158015611772575f5ffd5b505af1158015611784573d5f5f3e3d5ffd5b50505050837fed38c6266ebed7c01d311349a7fa67e0ef0f1d2f4760d60dbb34ca4799a2e132836006016040516117bb91906139f1565b60405180910390a25060019392505050565b6117d5611d27565b6001600160a01b0381166117fc5760405163d92e233d60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517fad4055f18cdad6f4bdd71afe3a72cbeee964217943e1bde38f138289e981a9a7905f90a250565b5f828152600a6020526040812090815460ff16600381111561186957611869613449565b0361188757604051630d4c1d9760e41b815260040160405180910390fd5b6001815460ff16600381111561189f5761189f613449565b146118bd57604051631860f69960e31b815260040160405180910390fd5b80600301544211156118e257604051639a19114d60e01b815260040160405180910390fd5b335f90815260078201602052604090205460ff16156119145760405163257309f160e11b815260040160405180910390fd5b61191d33610b43565b61193a5760405163149fbcfd60e11b815260040160405180910390fd5b611945338385612057565b6001810154604080516bffffffffffffffffffffffff193360601b16602080830191909152603482018690526054820187905260748083019490945282518083039094018452609490910190915281519101205f90335f8181526007850160205260409020805460ff191660011790559091506119c490839083612228565b506040805184815260208101839052339186917f52999628fb1cb05707e842278833b22e511f11746202cecdf221968b0b89e8bd910160405180910390a350505050565b5f8181526009602052604090205480611a34576040516322e679e360e11b815260040160405180910390fd5b919050565b5f611a4660046014612429565b905090565b611a53611d27565b6001600160a01b038116611a7c575f604051631e4fbdf760e01b81526004016106c391906133ae565b6112c481611d59565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018210611ac45760405162461bcd60e51b81526004016106c390613a34565b825464ffffffffff600160281b90910481169082168111611b225760405162461bcd60e51b815260206004820152601860248201527713185e9e5253550e881b195859881b5d5cdd08195e1a5cdd60421b60448201526064016106c3565b825f5b81866001015f611b358488612522565b64ffffffffff1681526020019081526020015f20819055505f816001611b5b9190613a7e565b60ff168464ffffffffff16901c64ffffffffff16905060018564ffffffffff16901c64ffffffffff168111611b905750611d1f565b600185165f03611c57575f611baf83611baa886001613a97565b612522565b60408051808201825286815264ffffffffff83165f90815260018c0160209081529083902054908201529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611c1091600401613ab4565b602060405180830381865af4158015611c2b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c4f9190613489565b935050611d0b565b5f611c6783611baa600189613ae4565b60408051808201825264ffffffffff83165f90815260018c0160209081529083902054825281018790529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611cc891600401613ab4565b602060405180830381865af4158015611ce3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d079190613489565b9350505b50647fffffffff600194851c169301611b25565b505050505050565b33611d306112c7565b6001600160a01b031614610fe0573360405163118cdaa760e01b81526004016106c391906133ae565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b8154600160281b900464ffffffffff167f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018210611e185760405162461bcd60e51b81526004016106c390613a34565b825464ffffffffff90811690821610611e6b5760405162461bcd60e51b815260206004820152601560248201527413185e9e5253550e881d1c9959481a5cc8199d5b1b605a1b60448201526064016106c3565b611e76816001613a97565b835464ffffffffff91909116600160281b0269ffffffffff000000000019909116178355815f5b81856001015f611ead8487612522565b64ffffffffff16815260208101919091526040015f20556001831615611f98575f611edd82611baa600187613ae4565b60408051808201825264ffffffffff83165f90815260018a0160209081529083902054825281018690529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611f3e91600401613ab4565b602060405180830381865af4158015611f59573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7d9190613489565b647fffffffff600195861c1694909350919091019050611e9d565b5050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610bf0565b611fcf61253f565b6112c481612564565b602060ff821611156120265760405162461bcd60e51b81526020600482015260176024820152764c617a79494d543a205472656520746f6f206c6172676560481b60448201526064016106c3565b612037600160ff831681901b6136f8565b825469ffffffffffffffffffff191664ffffffffff919091161790915550565b5f82116120775760405163aeaddff160e01b815260040160405180910390fd5b6001546001600160a01b03166120a0576040516350ca893360e01b815260040160405180910390fd5b5f818152600a602052604081206001805460028301549293926001600160a01b039091169163bb03bd719188916120d6916136f8565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561211d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121419190613489565b90505f60015f9054906101000a90046001600160a01b03166001600160a01b0316631209b1f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612194573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b89190613489565b90505f81116121da5760405163aeaddff160e01b815260040160405180910390fd5b5f6121e58284613b01565b90505f81116122075760405163149fbcfd60e11b815260040160405180910390fd5b808611156115915760405163aeaddff160e01b815260040160405180910390fd5b60058301546006840180545f92600160201b900463ffffffff16908111156122a657508054600180820183555f928352602080842090920180546001600160a01b0319166001600160a01b03881690811790915583526008870182526040808420869055600988019092529120805460ff1916821790559050612422565b5f5f90505f876008015f855f815481106122c2576122c261345d565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054905060015b845481101561234a575f896008015f87848154811061230c5761230c61345d565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054905082811115612341578092508193505b506001016122eb565b5080861061235e575f945050505050612422565b5f886009015f8685815481106123765761237661345d565b5f9182526020808320909101546001600160a01b031683528201929092526040019020805460ff191660018360028111156123b3576123b3613449565b0217905550868483815481106123cb576123cb61345d565b5f91825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918916815260088a018252604080822089905560098b0190925220805460ff191660019081179091559450505050505b9392505050565b5f5f8260ff161161247c5760405162461bcd60e51b815260206004820152601a60248201527f4c617a79494d543a206465707468206d757374206265203e203000000000000060448201526064016106c3565b602060ff831611156124a05760405162461bcd60e51b81526004016106c390613b20565b8254600160281b900464ffffffffff16806124bf60ff85166002613c71565b64ffffffffff16101561250f5760405162461bcd60e51b8152602060048201526018602482015277098c2f4f2929aa87440c2dac4d2ceeadeeae640c8cae0e8d60431b60448201526064016106c3565b61251a84828561256c565b949350505050565b5f8161253560ff851663ffffffff613c8a565b6124229190613a97565b612547612634565b610fe057604051631afcd79f60e31b815260040160405180910390fd5b611a5361253f565b5f602060ff831611156125915760405162461bcd60e51b81526004016106c390613b20565b8264ffffffffff165f036125af576125a88261264d565b9050612422565b5f6125bb836001613a7e565b60ff166001600160401b038111156125d5576125d5613435565b6040519080825280602002602001820160405280156125fe578160200160208202803683370190505b50905061260d85858584612ce7565b808360ff16815181106126225761262261345d565b60200260200101519150509392505050565b5f61263d611f9f565b54600160401b900460ff16919050565b5f8160ff165f0361265f57505f919050565b8160ff1660010361269157507f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864919050565b8160ff166002036126c357507f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1919050565b8160ff166003036126f557507f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238919050565b8160ff1660040361272757507f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a919050565b8160ff1660050361275957507f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55919050565b8160ff1660060361278b57507f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78919050565b8160ff166007036127bd57507f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d919050565b8160ff166008036127ef57507f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61919050565b8160ff1660090361282157507f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747919050565b8160ff16600a0361285357507f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2919050565b8160ff16600b0361288557507f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636919050565b8160ff16600c036128b757507f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a919050565b8160ff16600d036128e957507f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0919050565b8160ff16600e0361291b57507f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c919050565b8160ff16600f0361294d57507f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92919050565b8160ff1660100361297f57507f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323919050565b8160ff166011036129b157507f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992919050565b8160ff166012036129e357507f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f919050565b8160ff16601303612a1557507f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca919050565b8160ff16601403612a4757507f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e919050565b8160ff16601503612a7957507f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1919050565b8160ff16601603612aab57507f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b919050565b8160ff16601703612add57507f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d919050565b8160ff16601803612b0f57507f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540919050565b8160ff16601903612b4157507f2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21919050565b8160ff16601a03612b7357507f120c58f143d491e95902f7f5277778a2e0ad5168f6add75669932630ce611518919050565b8160ff16601b03612ba557507f1f21feb70d3f21b07bf853d5e5db03071ec495a0a565a21da2d665d279483795919050565b8160ff16601c03612bd757507f24be905fa71335e14c638cc0f66a8623a826e768068a9e968bb1a1dde18a72d2919050565b8160ff16601d03612c0957507f0f8666b62ed17491c50ceadead57d4cd597ef3821d65c328744c74e553dac26d919050565b8160ff16601e03612c3b57507f0918d46bf52d98b034413f4a1a1c41594e7a7a3f6ae08cb43d1a2a230e1959ef919050565b8160ff16601f03612c6d57507f1bbeb01b4c479ecde76917645e404dfa2e26f90d0afc5a65128513ad375c5ff2919050565b8160ff16602003612c9f57507f2f68a1c58e257e42a17a6c61dff5551ed560b9922ab119d5ac8e184c9734ead9919050565b60405162461bcd60e51b815260206004820152601e60248201527f4c617a79494d543a2064656661756c745a65726f2062616420696e646578000060448201526064016106c3565b602060ff83161115612d0b5760405162461bcd60e51b81526004016106c390613b20565b5f8364ffffffffff1611612d6f5760405162461bcd60e51b815260206004820152602560248201527f4c617a79494d543a206e756d626572206f66206c6561766573206d7573742062604482015264065203e20360dc1b60648201526084016106c3565b5f612d7b600185613ae4565b9050600181165f03612dce57846001015f612d965f84612522565b64ffffffffff1681526020019081526020015f2054825f81518110612dbd57612dbd61345d565b602002602001018181525050612df6565b612dd75f61264d565b825f81518110612de957612de961345d565b6020026020010181815250505b5f5b8360ff168160ff161015611d1f57600182165f03612eee5773__$078c82ddf6c95d34ea184ef1dd6130d136$__63561558fe6040518060400160405280868560ff1681518110612e4a57612e4a61345d565b60200260200101518152602001612e608561264d565b8152506040518263ffffffff1660e01b8152600401612e7f9190613ab4565b602060405180830381865af4158015612e9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ebe9190613489565b83612eca836001613a7e565b60ff1681518110612edd57612edd61345d565b60200260200101818152505061309f565b5f612efa826001613a7e565b60ff168664ffffffffff16901c64ffffffffff16905060018364ffffffffff16901c64ffffffffff16811115612f9c575f876001015f612f51856001612f409190613a7e565b60018864ffffffffff16901c612522565b64ffffffffff1681526020019081526020015f205490508085846001612f779190613a7e565b60ff1681518110612f8a57612f8a61345d565b6020026020010181815250505061309d565b5f876001015f612fb385600188611baa9190613ae4565b64ffffffffff1681526020019081526020015f2054905073__$078c82ddf6c95d34ea184ef1dd6130d136$__63561558fe6040518060400160405280848152602001888760ff168151811061300a5761300a61345d565b60200260200101518152506040518263ffffffff1660e01b81526004016130319190613ab4565b602060405180830381865af415801561304c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130709190613489565b8561307c856001613a7e565b60ff168151811061308f5761308f61345d565b602002602001018181525050505b505b647fffffffff600192831c169101612df8565b600183019183908215613143579160200282015f5b8382111561311157833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026130c7565b80156131415782816101000a81549063ffffffff0219169055600401602081600301049283019260010302613111565b505b5061314f929150613153565b5090565b5b8082111561314f575f8155600101613154565b6001600160a01b03811681146112c4575f5ffd5b5f6020828403121561318b575f5ffd5b813561242281613167565b5f602082840312156131a6575f5ffd5b5035919050565b602080825282518282018190525f918401906040840190835b818110156131ed5783516001600160a01b03168352602093840193909201916001016131c6565b509095945050505050565b5f5f5f6080848603121561320a575f5ffd5b833592506020840135915060808401851015613224575f5ffd5b6040840190509250925092565b5f5f60408385031215613242575f5ffd5b82359150602083013561325481613167565b809150509250929050565b5f5f83601f84011261326f575f5ffd5b5081356001600160401b03811115613285575f5ffd5b60208301915083602082850101111561329c575f5ffd5b9250929050565b5f5f5f5f5f5f5f6080888a0312156132b9575f5ffd5b8735965060208801356001600160401b038111156132d5575f5ffd5b8801601f81018a136132e5575f5ffd5b80356001600160401b038111156132fa575f5ffd5b8a60208260051b840101111561330e575f5ffd5b6020919091019650945060408801356001600160401b03811115613330575f5ffd5b61333c8a828b0161325f565b90955093505060608801356001600160401b0381111561335a575f5ffd5b6133668a828b0161325f565b989b979a50959850939692959293505050565b5f5f5f6060848603121561338b575f5ffd5b83359250602084013561339d81613167565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b5f5f604083850312156133d3575f5ffd5b82356133de81613167565b946020939093013593505050565b5f5f604083850312156133fd575f5ffd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b5f8161342e5761342e61340c565b505f190190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f600182016134825761348261340c565b5060010190565b5f60208284031215613499575f5ffd5b5051919050565b803563ffffffff81168114611a34575f5ffd5b5f602082840312156134c3575f5ffd5b612422826134a0565b80820180821115610bf057610bf061340c565b84815260a0810160208201855f5b600281101561351a5763ffffffff613504836134a0565b16835260209283019291909101906001016134ed565b50505060608201939093526080015292915050565b80518015158114611a34575f5ffd5b5f6020828403121561354e575f5ffd5b6124228261352f565b6040516101e081016001600160401b038111828210171561357a5761357a613435565b60405290565b604051601f8201601f191681016001600160401b03811182821017156135a8576135a8613435565b604052919050565b5f6001600160401b038211156135c8576135c8613435565b50601f01601f191660200190565b5f82601f8301126135e5575f5ffd5b81356001600160401b038111156135fe576135fe613435565b8060051b61360e60208201613580565b91825260208185018101929081019086841115613629575f5ffd5b6020860192505b8383101561364b578235825260209283019290910190613630565b9695505050505050565b5f5f60408385031215613666575f5ffd5b82356001600160401b0381111561367b575f5ffd5b8301601f8101851361368b575f5ffd5b803561369e613699826135b0565b613580565b8181528660208385010111156136b2575f5ffd5b816020840160208301375f6020838301015280945050505060208301356001600160401b038111156136e2575f5ffd5b6136ee858286016135d6565b9150509250929050565b81810381811115610bf057610bf061340c565b805160048110611a34575f5ffd5b5f82601f830112613728575f5ffd5b604080519081016001600160401b038111828210171561374a5761374a613435565b8060405250806040840185811115613760575f5ffd5b845b8181101561377a578051835260209283019201613762565b509195945050505050565b8051611a3481613167565b5f82601f83011261379f575f5ffd5b81516137ad613699826135b0565b8181528460208386010111156137c1575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f602082840312156137ed575f5ffd5b81516001600160401b03811115613802575f5ffd5b82016102008185031215613814575f5ffd5b61381c613557565b8151815261382c6020830161370b565b6020820152604082810151908201526138488560608401613719565b606082015260a0820151608082015261386360c08301613785565b60a082015260e08201516001600160401b03811115613880575f5ffd5b61388c86828501613790565b60c0830152506101008201516001600160401b038111156138ab575f5ffd5b6138b786828501613790565b60e0830152506138ca6101208301613785565b6101008201526138dd6101408301613785565b61012082015261016082810151610140830152610180830151908201526101a08201516001600160401b03811115613913575f5ffd5b61391f86828501613790565b610180830152506139336101c08301613785565b6101a08201526139466101e0830161352f565b6101c0820152949350505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f61251a602083018486613954565b604080825281018490525f8560608301825b878110156139d15782356139b481613167565b6001600160a01b03168252602092830192909101906001016139a1565b5083810360208501526139e5818688613954565b98975050505050505050565b602080825282548282018190525f848152918220906040840190835b818110156131ed5783546001600160a01b0316835260019384019360209093019201613a0d565b6020808252602a908201527f4c617a79494d543a206c656166206d757374206265203c20534e41524b5f53436040820152691053105497d19251531160b21b606082015260800190565b60ff8181168382160190811115610bf057610bf061340c565b64ffffffffff8181168382160190811115610bf057610bf061340c565b6040810181835f5b6002811015613adb578151835260209283019290910190600101613abc565b50505092915050565b64ffffffffff8281168282160390811115610bf057610bf061340c565b5f82613b1b57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526023908201527f4c617a79494d543a206465707468206d757374206265203c3d204d41585f44456040820152620a0a8960eb1b606082015260800190565b6001815b600184111561118157808504811115613b8257613b8261340c565b6001841615613b9057908102905b60019390931c928002613b67565b5f82613bac57506001610bf0565b81613bb857505f610bf0565b8160018114613bce5760028114613bd857613c0a565b6001915050610bf0565b60ff841115613be957613be961340c565b6001841b915064ffffffffff821115613c0457613c0461340c565b50610bf0565b5060208310610133831016604e8410600b8410161715613c42575081810a64ffffffffff811115613c3d57613c3d61340c565b610bf0565b613c5264ffffffffff8484613b63565b8064ffffffffff04821115613c6957613c6961340c565b029392505050565b5f61242264ffffffffff841664ffffffffff8416613b9e565b64ffffffffff8181168382160290811690818114613caa57613caa61340c565b509291505056fea164736f6c634300081c000a", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061023f575f3560e01c80639a7a2ffc11610135578063dbb06c93116100b4578063f165053611610079578063f16505361461056a578063f2fde38b14610584578063f379b0df14610597578063f52fd803146105d1578063f6fc05d514610643575f5ffd5b8063dbb06c9314610517578063e59e469514610529578063e6745e131461053c578063e82f3b701461054f578063ebf0c71714610562575f5ffd5b8063c2b40ae4116100fa578063c2b40ae4146104a2578063c3a0ec30146104c1578063ca2869a0146104d2578063cd6dc687146104f1578063da881e5a14610504575f5ffd5b80639a7a2ffc146104245780639f0f874a14610460578063a016493014610469578063a8a4d69b1461047c578063bff232c11461048f575f5ffd5b806370e36bbe116101c15780638cb89ecb116101865780638cb89ecb146103c15780638d1ddfb1146103e05780638da5cb5b146103f65780638e5ce3ad146103fe5780639015d37114610411575f5ffd5b806370e36bbe14610346578063715018a6146103595780637c92f52414610361578063858142431461038e5780638a78bb15146103ae575f5ffd5b80632e7b716d116102075780632e7b716d146102d85780634d6861a6146102eb57806350e6d94c146102fe5780635d504776146103205780635e1d33bd14610333575f5ffd5b8063096b810a146102435780630f3e34121461025857806317d611201461026b5780632800d82914610294578063291a691b146102b5575b5f5ffd5b61025661025136600461317b565b61064c565b005b610256610266366004613196565b610798565b61027e610279366004613196565b6107db565b60405161028b91906131ad565b60405180910390f35b6102a76102a2366004613196565b61091d565b60405190815260200161028b565b6102c86102c33660046131f8565b610969565b604051901515815260200161028b565b6102c86102e636600461317b565b610b43565b6102c86102f9366004613196565b610bf6565b6102c861030c36600461317b565b60066020525f908152604090205460ff1681565b6102c861032e366004613231565b610c35565b6102566103413660046132a3565b610c79565b61025661035436600461317b565b610f59565b610256610fcf565b61037461036f366004613379565b610fe2565b6040805192835263ffffffff90911660208301520161028b565b6001546103a1906001600160a01b031681565b60405161028b91906133ae565b6102566103bc36600461317b565b611189565b6102a76103cf366004613196565b60096020525f908152604090205481565b600454600160281b900464ffffffffff166102a7565b6103a16112c7565b600b546103a1906001600160a01b031681565b6102c861041f36600461317b565b6112f5565b61044a61043236600461317b565b60076020525f908152604090205464ffffffffff1681565b60405164ffffffffff909116815260200161028b565b6102a760035481565b61027e610477366004613196565b611312565b6102c861048a366004613231565b6113a8565b61025661049d36600461317b565b6113ec565b6102a76104b0366004613196565b60086020525f908152604090205481565b6001546001600160a01b03166103a1565b6102a76104e0366004613196565b5f9081526008602052604090205490565b6102566104ff3660046133c2565b61143d565b6102c8610512366004613196565b61159a565b5f546103a1906001600160a01b031681565b61025661053736600461317b565b6117cd565b61025661054a3660046133ec565b611845565b6102a761055d366004613196565b611a08565b6102a7611a39565b610572601481565b60405160ff909116815260200161028b565b61025661059236600461317b565b611a4b565b6004546105b39064ffffffffff80821691600160281b90041682565b6040805164ffffffffff93841681529290911660208301520161028b565b6106146105df366004613196565b5f908152600a6020819052604090912090810154600590910154909163ffffffff80831692600160201b900416908284101590565b60405161028b949392919093845263ffffffff9283166020850152911660408301521515606082015260800190565b6102a760025481565b6106546112c7565b6001600160a01b0316336001600160a01b0316148061067d57506001546001600160a01b031633145b61069a57604051632864c4e160e01b815260040160405180910390fd5b6106a3816112f5565b81906106cc576040516381e5828960e01b81526004016106c391906133ae565b60405180910390fd5b506001600160a01b0381165f9081526007602052604081205464ffffffffff16906106fa9060049083611a85565b6001600160a01b0382165f908152600660205260408120805460ff19169055600280549161072783613420565b90915550506002546004546040805164ffffffffff80861682526020820194909452600160281b909204909216918101919091526001600160a01b038316907f8c008e3835f6c79bfcdb89f0f6ca8705e0b01049ee84a90b0e4da1c7ba9405d5906060015b60405180910390a25050565b6107a0611d27565b60038190556040518181527fbe772dc189863d512fa01e489c8eac204975aef1a8662d8b5a333804b5207ab79060200160405180910390a150565b5f818152600a602081905260408220600681015491810154606093919291816001600160401b0381111561081157610811613435565b60405190808252806020026020018201604052801561083a578160200160208202803683370190505b5090505f805b84811015610911576001866009015f8860060184815481106108645761086461345d565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205460ff16600281111561089c5761089c613449565b03610909578560060181815481106108b6576108b661345d565b905f5260205f20015f9054906101000a90046001600160a01b03168383815181106108e3576108e361345d565b6001600160a01b03909216602092830291909101909101528161090581613471565b9250505b600101610840565b50909695505050505050565b5f818152600a6020526040812081815460ff16600381111561094157610941613449565b0361095f57604051630d4c1d9760e41b815260040160405180910390fd5b6003015492915050565b5f80546001600160a01b031633146109945760405163e4c2a7eb60e01b815260040160405180910390fd5b5f848152600a6020526040812090815460ff1660038111156109b8576109b8613449565b146109d6576040516374ff462560e11b815260040160405180910390fd5b60015460408051630cc37d8f60e11b815290515f926001600160a01b031691631986fb1e9160048083019260209291908290030181865afa158015610a1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a419190613489565b905080610a5460408601602087016134b3565b63ffffffff161115610a6c60408601602087016134b3565b829091610a9a576040516344ec930f60e01b815263ffffffff909216600483015260248201526044016106c3565b5050815460ff1916600190811783558201859055436002830155600354610ac190426134cc565b6003830155610ad5600583018560026130b2565b50610ade611a39565b5f87815260086020526040908190209190915560028301546003840154915188927f381d281d32f95ef8fe4e5f3b263ea6a32d03d331e1a141ae1da996dc02a7a17092610b2f928a928a92916134df565b60405180910390a250600195945050505050565b5f610b4d826112f5565b610b5857505f919050565b6001546001600160a01b0316610b81576040516350ca893360e01b815260040160405180910390fd5b600154604051639f8a13d760e01b81526001600160a01b0390911690639f8a13d790610bb19085906004016133ae565b602060405180830381865afa158015610bcc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf0919061353e565b92915050565b5f818152600a602052604081206001815460ff166003811115610c1b57610c1b613449565b14610c2857505f92915050565b6003015442111592915050565b5f60015f848152600a602090815260408083206001600160a01b038716845260090190915290205460ff166002811115610c7157610c71613449565b149392505050565b610c81611d27565b5f878152600a602052604090206002815460ff166003811115610ca657610ca6613449565b14610cc457604051634f4b461f60e11b815260040160405180910390fd5b600481015415610ce75760405163632a22bb60e01b815260040160405180910390fd5b60068101548614610d305760405162461bcd60e51b815260206004820152601360248201527209cdec8ca40c6deeadce840dad2e6dac2e8c6d606b1b60448201526064016106c3565b5f610d3d83850185613655565b9150505f815111610d875760405162461bcd60e51b815260206004820152601460248201527343353a206e6f207075626c696320696e7075747360601b60448201526064016106c3565b5f8160018351610d9791906136f8565b81518110610da757610da761345d565b60209081029190910101515f805460405163101bb4d760e21b8152600481018e905292935090916001600160a01b039091169063406ed35c906024015f60405180830381865afa158015610dfd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e2491908101906137dd565b61012081015160405163473b057f60e11b81529192506001600160a01b031690638e760afe90610e5a908990899060040161397c565b602060405180830381865afa158015610e75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e999190613489565b5060048481018390555f8c815260096020526040808220859055905490516340a3b76160e11b81529182018d9052602482018490526001600160a01b0316906381476ec2906044015f604051808303815f87803b158015610ef8575f5ffd5b505af1158015610f0a573d5f5f3e3d5ffd5b505050508a7ff7472ea3a028fe8a86ab1c9a3e2176b284c8c3a22675c101e0fa21c140b6678d8b8b8b8b604051610f44949392919061398f565b60405180910390a25050505050505050505050565b610f61611d27565b6001600160a01b038116610f885760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b038316908117825560405190917f2c8267accd82e977550ed2349c73311183cd22e306347be4453c8d130995e3c991a250565b610fd7611d27565b610fe05f611d59565b565b600b545f9081906001600160a01b031633146110115760405163fcef374960e01b815260040160405180910390fd5b5f858152600a602052604090206002815460ff16600381111561103657611036613449565b1461105457604051634f4b461f60e11b815260040160405180910390fd5b60058101546001600160a01b0386165f90815260098301602052604090205463ffffffff909116925060019060ff16600281111561109457611094613449565b146110a457600a01549150611181565b6001600160a01b0385165f9081526009820160205260408120805460ff19166002179055600a82018054916110d883613420565b919050555080600a01549250846001600160a01b0316867f6c783b92374361b4d6efaf29673b89437ee969bb3c9d2d5d86b143ad5447b8498686604051611129929190918252602082015260400190565b60405180910390a36040805184815263ffffffff84166020820181905285101591810182905287907f119cb11dd0a68c257d6dc9b06dcb37dd422ce276eb8bf3cd0b7079a116b8e2989060600160405180910390a250505b935093915050565b6111916112c7565b6001600160a01b0316336001600160a01b031614806111ba57506001546001600160a01b031633145b6111d757604051632864c4e160e01b815260040160405180910390fd5b6111e0816112f5565b6112c45760048054600160281b900464ffffffffff169061120a906001600160a01b038416611dc9565b6001600160a01b0382165f908152600660209081526040808320805460ff1916600117905560079091528120805464ffffffffff841664ffffffffff19909116179055600280549161125b83613471565b90915550506002546004546040805164ffffffffff80861682526020820194909452600160281b909204909216918101919091526001600160a01b038316907f3318d261fe14a5761d2d1e21555652f623d2134c430a9883c9ad6e958bb0db539060600161078c565b50565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03165f9081526006602052604090205460ff1690565b5f818152600a60205260409020600481015460609190611345576040516322e679e360e11b815260040160405180910390fd5b8060060180548060200260200160405190810160405280929190818152602001828054801561139b57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161137d575b5050505050915050919050565b5f805f848152600a602090815260408083206001600160a01b038716845260090190915290205460ff1660028111156113e3576113e3613449565b14159392505050565b6113f4611d27565b6001600160a01b03811661141b5760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f611446611f9f565b805490915060ff600160401b82041615906001600160401b03165f8115801561146c5750825b90505f826001600160401b031660011480156114875750303b155b905081158015611495575080155b156114b35760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156114dd57845460ff60401b1916600160401b1785555b6001600160a01b0387166115045760405163d92e233d60e01b815260040160405180910390fd5b61150d33611fc7565b61151960046014611fd8565b61152286610798565b61152a6112c7565b6001600160a01b0316876001600160a01b03161461154b5761154b87611a4b565b831561159157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f818152600a6020526040812081815460ff1660038111156115be576115be613449565b036115dc57604051630d4c1d9760e41b815260040160405180910390fd5b6001815460ff1660038111156115f4576115f4613449565b1461161257604051631860f69960e31b815260040160405180910390fd5b8060030154421161163657604051632f021e8d60e11b815260040160405180910390fd5b60058101546006820154600160201b90910463ffffffff1611158061171b578154600360ff199091161782556006820154600583015460408051928352600160201b90910463ffffffff16602083015285917fecc4a9fb7e28d074cba7f5b227e9b5827823c850a385539b9a2f98a08f8c203d910160405180910390a25f54604051635d968dc160e11b815260048101869052600260248201526001600160a01b039091169063bb2d1b82906044015f604051808303815f87803b1580156116fc575f5ffd5b505af115801561170e573d5f5f3e3d5ffd5b505f979650505050505050565b815460ff191660021782556006820154600a8301555f54604051631f3ea75d60e21b8152600481018690526001600160a01b0390911690637cfa9d74906024015f604051808303815f87803b158015611772575f5ffd5b505af1158015611784573d5f5f3e3d5ffd5b50505050837fed38c6266ebed7c01d311349a7fa67e0ef0f1d2f4760d60dbb34ca4799a2e132836006016040516117bb91906139f1565b60405180910390a25060019392505050565b6117d5611d27565b6001600160a01b0381166117fc5760405163d92e233d60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517fad4055f18cdad6f4bdd71afe3a72cbeee964217943e1bde38f138289e981a9a7905f90a250565b5f828152600a6020526040812090815460ff16600381111561186957611869613449565b0361188757604051630d4c1d9760e41b815260040160405180910390fd5b6001815460ff16600381111561189f5761189f613449565b146118bd57604051631860f69960e31b815260040160405180910390fd5b80600301544211156118e257604051639a19114d60e01b815260040160405180910390fd5b335f90815260078201602052604090205460ff16156119145760405163257309f160e11b815260040160405180910390fd5b61191d33610b43565b61193a5760405163149fbcfd60e11b815260040160405180910390fd5b611945338385612057565b6001810154604080516bffffffffffffffffffffffff193360601b16602080830191909152603482018690526054820187905260748083019490945282518083039094018452609490910190915281519101205f90335f8181526007850160205260409020805460ff191660011790559091506119c490839083612228565b506040805184815260208101839052339186917f52999628fb1cb05707e842278833b22e511f11746202cecdf221968b0b89e8bd910160405180910390a350505050565b5f8181526009602052604090205480611a34576040516322e679e360e11b815260040160405180910390fd5b919050565b5f611a4660046014612429565b905090565b611a53611d27565b6001600160a01b038116611a7c575f604051631e4fbdf760e01b81526004016106c391906133ae565b6112c481611d59565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018210611ac45760405162461bcd60e51b81526004016106c390613a34565b825464ffffffffff600160281b90910481169082168111611b225760405162461bcd60e51b815260206004820152601860248201527713185e9e5253550e881b195859881b5d5cdd08195e1a5cdd60421b60448201526064016106c3565b825f5b81866001015f611b358488612522565b64ffffffffff1681526020019081526020015f20819055505f816001611b5b9190613a7e565b60ff168464ffffffffff16901c64ffffffffff16905060018564ffffffffff16901c64ffffffffff168111611b905750611d1f565b600185165f03611c57575f611baf83611baa886001613a97565b612522565b60408051808201825286815264ffffffffff83165f90815260018c0160209081529083902054908201529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611c1091600401613ab4565b602060405180830381865af4158015611c2b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c4f9190613489565b935050611d0b565b5f611c6783611baa600189613ae4565b60408051808201825264ffffffffff83165f90815260018c0160209081529083902054825281018790529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611cc891600401613ab4565b602060405180830381865af4158015611ce3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d079190613489565b9350505b50647fffffffff600194851c169301611b25565b505050505050565b33611d306112c7565b6001600160a01b031614610fe0573360405163118cdaa760e01b81526004016106c391906133ae565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b8154600160281b900464ffffffffff167f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018210611e185760405162461bcd60e51b81526004016106c390613a34565b825464ffffffffff90811690821610611e6b5760405162461bcd60e51b815260206004820152601560248201527413185e9e5253550e881d1c9959481a5cc8199d5b1b605a1b60448201526064016106c3565b611e76816001613a97565b835464ffffffffff91909116600160281b0269ffffffffff000000000019909116178355815f5b81856001015f611ead8487612522565b64ffffffffff16815260208101919091526040015f20556001831615611f98575f611edd82611baa600187613ae4565b60408051808201825264ffffffffff83165f90815260018a0160209081529083902054825281018690529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611f3e91600401613ab4565b602060405180830381865af4158015611f59573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7d9190613489565b647fffffffff600195861c1694909350919091019050611e9d565b5050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610bf0565b611fcf61253f565b6112c481612564565b602060ff821611156120265760405162461bcd60e51b81526020600482015260176024820152764c617a79494d543a205472656520746f6f206c6172676560481b60448201526064016106c3565b612037600160ff831681901b6136f8565b825469ffffffffffffffffffff191664ffffffffff919091161790915550565b5f82116120775760405163aeaddff160e01b815260040160405180910390fd5b6001546001600160a01b03166120a0576040516350ca893360e01b815260040160405180910390fd5b5f818152600a602052604081206001805460028301549293926001600160a01b039091169163bb03bd719188916120d6916136f8565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561211d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121419190613489565b90505f60015f9054906101000a90046001600160a01b03166001600160a01b0316631209b1f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612194573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b89190613489565b90505f81116121da5760405163aeaddff160e01b815260040160405180910390fd5b5f6121e58284613b01565b90505f81116122075760405163149fbcfd60e11b815260040160405180910390fd5b808611156115915760405163aeaddff160e01b815260040160405180910390fd5b60058301546006840180545f92600160201b900463ffffffff16908111156122a657508054600180820183555f928352602080842090920180546001600160a01b0319166001600160a01b03881690811790915583526008870182526040808420869055600988019092529120805460ff1916821790559050612422565b5f5f90505f876008015f855f815481106122c2576122c261345d565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054905060015b845481101561234a575f896008015f87848154811061230c5761230c61345d565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054905082811115612341578092508193505b506001016122eb565b5080861061235e575f945050505050612422565b5f886009015f8685815481106123765761237661345d565b5f9182526020808320909101546001600160a01b031683528201929092526040019020805460ff191660018360028111156123b3576123b3613449565b0217905550868483815481106123cb576123cb61345d565b5f91825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918916815260088a018252604080822089905560098b0190925220805460ff191660019081179091559450505050505b9392505050565b5f5f8260ff161161247c5760405162461bcd60e51b815260206004820152601a60248201527f4c617a79494d543a206465707468206d757374206265203e203000000000000060448201526064016106c3565b602060ff831611156124a05760405162461bcd60e51b81526004016106c390613b20565b8254600160281b900464ffffffffff16806124bf60ff85166002613c71565b64ffffffffff16101561250f5760405162461bcd60e51b8152602060048201526018602482015277098c2f4f2929aa87440c2dac4d2ceeadeeae640c8cae0e8d60431b60448201526064016106c3565b61251a84828561256c565b949350505050565b5f8161253560ff851663ffffffff613c8a565b6124229190613a97565b612547612634565b610fe057604051631afcd79f60e31b815260040160405180910390fd5b611a5361253f565b5f602060ff831611156125915760405162461bcd60e51b81526004016106c390613b20565b8264ffffffffff165f036125af576125a88261264d565b9050612422565b5f6125bb836001613a7e565b60ff166001600160401b038111156125d5576125d5613435565b6040519080825280602002602001820160405280156125fe578160200160208202803683370190505b50905061260d85858584612ce7565b808360ff16815181106126225761262261345d565b60200260200101519150509392505050565b5f61263d611f9f565b54600160401b900460ff16919050565b5f8160ff165f0361265f57505f919050565b8160ff1660010361269157507f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864919050565b8160ff166002036126c357507f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1919050565b8160ff166003036126f557507f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238919050565b8160ff1660040361272757507f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a919050565b8160ff1660050361275957507f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55919050565b8160ff1660060361278b57507f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78919050565b8160ff166007036127bd57507f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d919050565b8160ff166008036127ef57507f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61919050565b8160ff1660090361282157507f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747919050565b8160ff16600a0361285357507f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2919050565b8160ff16600b0361288557507f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636919050565b8160ff16600c036128b757507f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a919050565b8160ff16600d036128e957507f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0919050565b8160ff16600e0361291b57507f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c919050565b8160ff16600f0361294d57507f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92919050565b8160ff1660100361297f57507f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323919050565b8160ff166011036129b157507f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992919050565b8160ff166012036129e357507f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f919050565b8160ff16601303612a1557507f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca919050565b8160ff16601403612a4757507f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e919050565b8160ff16601503612a7957507f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1919050565b8160ff16601603612aab57507f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b919050565b8160ff16601703612add57507f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d919050565b8160ff16601803612b0f57507f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540919050565b8160ff16601903612b4157507f2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21919050565b8160ff16601a03612b7357507f120c58f143d491e95902f7f5277778a2e0ad5168f6add75669932630ce611518919050565b8160ff16601b03612ba557507f1f21feb70d3f21b07bf853d5e5db03071ec495a0a565a21da2d665d279483795919050565b8160ff16601c03612bd757507f24be905fa71335e14c638cc0f66a8623a826e768068a9e968bb1a1dde18a72d2919050565b8160ff16601d03612c0957507f0f8666b62ed17491c50ceadead57d4cd597ef3821d65c328744c74e553dac26d919050565b8160ff16601e03612c3b57507f0918d46bf52d98b034413f4a1a1c41594e7a7a3f6ae08cb43d1a2a230e1959ef919050565b8160ff16601f03612c6d57507f1bbeb01b4c479ecde76917645e404dfa2e26f90d0afc5a65128513ad375c5ff2919050565b8160ff16602003612c9f57507f2f68a1c58e257e42a17a6c61dff5551ed560b9922ab119d5ac8e184c9734ead9919050565b60405162461bcd60e51b815260206004820152601e60248201527f4c617a79494d543a2064656661756c745a65726f2062616420696e646578000060448201526064016106c3565b602060ff83161115612d0b5760405162461bcd60e51b81526004016106c390613b20565b5f8364ffffffffff1611612d6f5760405162461bcd60e51b815260206004820152602560248201527f4c617a79494d543a206e756d626572206f66206c6561766573206d7573742062604482015264065203e20360dc1b60648201526084016106c3565b5f612d7b600185613ae4565b9050600181165f03612dce57846001015f612d965f84612522565b64ffffffffff1681526020019081526020015f2054825f81518110612dbd57612dbd61345d565b602002602001018181525050612df6565b612dd75f61264d565b825f81518110612de957612de961345d565b6020026020010181815250505b5f5b8360ff168160ff161015611d1f57600182165f03612eee5773__$078c82ddf6c95d34ea184ef1dd6130d136$__63561558fe6040518060400160405280868560ff1681518110612e4a57612e4a61345d565b60200260200101518152602001612e608561264d565b8152506040518263ffffffff1660e01b8152600401612e7f9190613ab4565b602060405180830381865af4158015612e9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ebe9190613489565b83612eca836001613a7e565b60ff1681518110612edd57612edd61345d565b60200260200101818152505061309f565b5f612efa826001613a7e565b60ff168664ffffffffff16901c64ffffffffff16905060018364ffffffffff16901c64ffffffffff16811115612f9c575f876001015f612f51856001612f409190613a7e565b60018864ffffffffff16901c612522565b64ffffffffff1681526020019081526020015f205490508085846001612f779190613a7e565b60ff1681518110612f8a57612f8a61345d565b6020026020010181815250505061309d565b5f876001015f612fb385600188611baa9190613ae4565b64ffffffffff1681526020019081526020015f2054905073__$078c82ddf6c95d34ea184ef1dd6130d136$__63561558fe6040518060400160405280848152602001888760ff168151811061300a5761300a61345d565b60200260200101518152506040518263ffffffff1660e01b81526004016130319190613ab4565b602060405180830381865af415801561304c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130709190613489565b8561307c856001613a7e565b60ff168151811061308f5761308f61345d565b602002602001018181525050505b505b647fffffffff600192831c169101612df8565b600183019183908215613143579160200282015f5b8382111561311157833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026130c7565b80156131415782816101000a81549063ffffffff0219169055600401602081600301049283019260010302613111565b505b5061314f929150613153565b5090565b5b8082111561314f575f8155600101613154565b6001600160a01b03811681146112c4575f5ffd5b5f6020828403121561318b575f5ffd5b813561242281613167565b5f602082840312156131a6575f5ffd5b5035919050565b602080825282518282018190525f918401906040840190835b818110156131ed5783516001600160a01b03168352602093840193909201916001016131c6565b509095945050505050565b5f5f5f6080848603121561320a575f5ffd5b833592506020840135915060808401851015613224575f5ffd5b6040840190509250925092565b5f5f60408385031215613242575f5ffd5b82359150602083013561325481613167565b809150509250929050565b5f5f83601f84011261326f575f5ffd5b5081356001600160401b03811115613285575f5ffd5b60208301915083602082850101111561329c575f5ffd5b9250929050565b5f5f5f5f5f5f5f6080888a0312156132b9575f5ffd5b8735965060208801356001600160401b038111156132d5575f5ffd5b8801601f81018a136132e5575f5ffd5b80356001600160401b038111156132fa575f5ffd5b8a60208260051b840101111561330e575f5ffd5b6020919091019650945060408801356001600160401b03811115613330575f5ffd5b61333c8a828b0161325f565b90955093505060608801356001600160401b0381111561335a575f5ffd5b6133668a828b0161325f565b989b979a50959850939692959293505050565b5f5f5f6060848603121561338b575f5ffd5b83359250602084013561339d81613167565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b5f5f604083850312156133d3575f5ffd5b82356133de81613167565b946020939093013593505050565b5f5f604083850312156133fd575f5ffd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b5f8161342e5761342e61340c565b505f190190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f600182016134825761348261340c565b5060010190565b5f60208284031215613499575f5ffd5b5051919050565b803563ffffffff81168114611a34575f5ffd5b5f602082840312156134c3575f5ffd5b612422826134a0565b80820180821115610bf057610bf061340c565b84815260a0810160208201855f5b600281101561351a5763ffffffff613504836134a0565b16835260209283019291909101906001016134ed565b50505060608201939093526080015292915050565b80518015158114611a34575f5ffd5b5f6020828403121561354e575f5ffd5b6124228261352f565b6040516101e081016001600160401b038111828210171561357a5761357a613435565b60405290565b604051601f8201601f191681016001600160401b03811182821017156135a8576135a8613435565b604052919050565b5f6001600160401b038211156135c8576135c8613435565b50601f01601f191660200190565b5f82601f8301126135e5575f5ffd5b81356001600160401b038111156135fe576135fe613435565b8060051b61360e60208201613580565b91825260208185018101929081019086841115613629575f5ffd5b6020860192505b8383101561364b578235825260209283019290910190613630565b9695505050505050565b5f5f60408385031215613666575f5ffd5b82356001600160401b0381111561367b575f5ffd5b8301601f8101851361368b575f5ffd5b803561369e613699826135b0565b613580565b8181528660208385010111156136b2575f5ffd5b816020840160208301375f6020838301015280945050505060208301356001600160401b038111156136e2575f5ffd5b6136ee858286016135d6565b9150509250929050565b81810381811115610bf057610bf061340c565b805160048110611a34575f5ffd5b5f82601f830112613728575f5ffd5b604080519081016001600160401b038111828210171561374a5761374a613435565b8060405250806040840185811115613760575f5ffd5b845b8181101561377a578051835260209283019201613762565b509195945050505050565b8051611a3481613167565b5f82601f83011261379f575f5ffd5b81516137ad613699826135b0565b8181528460208386010111156137c1575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f602082840312156137ed575f5ffd5b81516001600160401b03811115613802575f5ffd5b82016102008185031215613814575f5ffd5b61381c613557565b8151815261382c6020830161370b565b6020820152604082810151908201526138488560608401613719565b606082015260a0820151608082015261386360c08301613785565b60a082015260e08201516001600160401b03811115613880575f5ffd5b61388c86828501613790565b60c0830152506101008201516001600160401b038111156138ab575f5ffd5b6138b786828501613790565b60e0830152506138ca6101208301613785565b6101008201526138dd6101408301613785565b61012082015261016082810151610140830152610180830151908201526101a08201516001600160401b03811115613913575f5ffd5b61391f86828501613790565b610180830152506139336101c08301613785565b6101a08201526139466101e0830161352f565b6101c0820152949350505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f61251a602083018486613954565b604080825281018490525f8560608301825b878110156139d15782356139b481613167565b6001600160a01b03168252602092830192909101906001016139a1565b5083810360208501526139e5818688613954565b98975050505050505050565b602080825282548282018190525f848152918220906040840190835b818110156131ed5783546001600160a01b0316835260019384019360209093019201613a0d565b6020808252602a908201527f4c617a79494d543a206c656166206d757374206265203c20534e41524b5f53436040820152691053105497d19251531160b21b606082015260800190565b60ff8181168382160190811115610bf057610bf061340c565b64ffffffffff8181168382160190811115610bf057610bf061340c565b6040810181835f5b6002811015613adb578151835260209283019290910190600101613abc565b50505092915050565b64ffffffffff8281168282160390811115610bf057610bf061340c565b5f82613b1b57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526023908201527f4c617a79494d543a206465707468206d757374206265203c3d204d41585f44456040820152620a0a8960eb1b606082015260800190565b6001815b600184111561118157808504811115613b8257613b8261340c565b6001841615613b9057908102905b60019390931c928002613b67565b5f82613bac57506001610bf0565b81613bb857505f610bf0565b8160018114613bce5760028114613bd857613c0a565b6001915050610bf0565b60ff841115613be957613be961340c565b6001841b915064ffffffffff821115613c0457613c0461340c565b50610bf0565b5060208310610133831016604e8410600b8410161715613c42575081810a64ffffffffff811115613c3d57613c3d61340c565b610bf0565b613c5264ffffffffff8484613b63565b8064ffffffffff04821115613c6957613c6961340c565b029392505050565b5f61242264ffffffffff841664ffffffffff8416613b9e565b64ffffffffff8181168382160290811690818114613caa57613caa61340c565b509291505056fea164736f6c634300081c000a", "linkReferences": { "npm/poseidon-solidity@0.0.5/PoseidonT3.sol": { "PoseidonT3": [ { "length": 20, - "start": 6994 + "start": 7360 }, { "length": 20, - "start": 7178 + "start": 7544 }, { "length": 20, - "start": 7808 + "start": 8174 }, { "length": 20, - "start": 11642 + "start": 12008 }, { "length": 20, - "start": 12084 + "start": 12450 } ] } @@ -1275,28 +1275,28 @@ "PoseidonT3": [ { "length": 20, - "start": 6780 + "start": 7146 }, { "length": 20, - "start": 6964 + "start": 7330 }, { "length": 20, - "start": 7594 + "start": 7960 }, { "length": 20, - "start": 11428 + "start": 11794 }, { "length": 20, - "start": 11870 + "start": 12236 } ] } }, "immutableReferences": {}, "inputSourceName": "project/contracts/registry/CiphernodeRegistryOwnable.sol", - "buildInfoId": "solc-0_8_28-dbd94fb7bf5c147a4effe4d89ec8d62bae78112f" + "buildInfoId": "solc-0_8_28-9ac09828abf2959f97031765d7270708a52260d9" } \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/token/EnclaveTicketToken.sol/EnclaveTicketToken.json b/packages/enclave-contracts/artifacts/contracts/token/EnclaveTicketToken.sol/EnclaveTicketToken.json index de3393366d..a47b0fdd6a 100644 --- a/packages/enclave-contracts/artifacts/contracts/token/EnclaveTicketToken.sol/EnclaveTicketToken.json +++ b/packages/enclave-contracts/artifacts/contracts/token/EnclaveTicketToken.sol/EnclaveTicketToken.json @@ -1223,5 +1223,5 @@ ] }, "inputSourceName": "project/contracts/token/EnclaveTicketToken.sol", - "buildInfoId": "solc-0_8_28-bd46eae6f77be9a8538850385226c1ee4fc57e42" + "buildInfoId": "solc-0_8_28-16cf43f6814888a6b7f512f8d4a2a360fcb66d4c" } \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/verifier/RecursiveAggregationFoldVerifier.sol/RecursiveAggregationFoldVerifier.json b/packages/enclave-contracts/artifacts/contracts/verifier/RecursiveAggregationFoldVerifier.sol/RecursiveAggregationFoldVerifier.json deleted file mode 100644 index ff4eb97f39..0000000000 --- a/packages/enclave-contracts/artifacts/contracts/verifier/RecursiveAggregationFoldVerifier.sol/RecursiveAggregationFoldVerifier.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "_format": "hh3-artifact-1", - "contractName": "RecursiveAggregationFoldVerifier", - "sourceName": "contracts/verifier/RecursiveAggregationFoldVerifier.sol", - "abi": [ - { - "inputs": [], - "name": "ConsistencyCheckFailed", - "type": "error" - }, - { - "inputs": [], - "name": "GeminiChallengeInSubgroup", - "type": "error" - }, - { - "inputs": [], - "name": "ProofLengthWrong", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "logN", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "actualLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLength", - "type": "uint256" - } - ], - "name": "ProofLengthWrongWithLogN", - "type": "error" - }, - { - "inputs": [], - "name": "PublicInputsLengthWrong", - "type": "error" - }, - { - "inputs": [], - "name": "ShpleminiFailed", - "type": "error" - }, - { - "inputs": [], - "name": "SumcheckFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "proof", - "type": "bytes" - }, - { - "internalType": "bytes32[]", - "name": "publicInputs", - "type": "bytes32[]" - } - ], - "name": "verify", - "outputs": [ - { - "internalType": "bool", - "name": "verified", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x610120604052348015610010575f5ffd5b50622000006080819052601560a08190527f0c0bf44aa8d9785b43e16005da8fc455d330c7ff959979a9c7cc87670345385960c0819052601260e081905260038361005d6001602461008a565b610067919061008a565b610071919061008a565b61007c90600261008a565b61010052506100af92505050565b808201808211156100a957634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c05160e05161010051615cba6101495f395f8181610c5401528181610cb90152612ec201525f81816101b001526108ff01525f61018e01525f8181605b01528181609401528181610101015281816101d201528181610a2d01528181610b8e01528181610c2b01528181611523015281816115dd015281816116100152818161181a0152612b9f01525f5050615cba5ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063ea50d0e41461002d575b5f5ffd5b61004061003b3660046154f1565b610054565b604051901515815260200160405180910390f35b5f5f61007f7f00000000000000000000000000000000000000000000000000000000000000006102ee565b905061008c8160206155c9565b85146100ee577f0000000000000000000000000000000000000000000000000000000000000000856100bf8360206155c9565b6040516359895a5360e01b81526004810193909352602483019190915260448201526064015b60405180910390fd5b5f6100f76103fb565b90505f61012588887f0000000000000000000000000000000000000000000000000000000000000000610410565b90506010826040015161013891906155e0565b85146101575760405163fa06659360e01b815260040160405180910390fd5b60405163995bf45760e01b81525f9073__$f25d01d3eaf7d03206a1c3f23eb1654acf$__9063995bf457906101fa9085908b908b907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090600401615763565b610be060405180830381865af4158015610216573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061023a9190615a8f565b905061028a8787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855185516060810151608090910151919350915060016108a9565b815160a0015261029a8282610a10565b6102b7576040516313f8744360e31b815260040160405180910390fd5b6102c2828483610c17565b6102df576040516352ec174560e11b815260040160405180910390fd5b50600198975050505050505050565b5f8060026102fe60016008615b39565b61030891906155c9565b9050610316600260036155c9565b6103209082615b39565b9050600161032f6009856155c9565b61033991906155c9565b6103439082615b39565b90506001610352816029615b39565b61035c91906155c9565b6103669082615b39565b9050610374600160026155c9565b61037e9082615b39565b905061038b6001846155c9565b6103959082615b39565b90506103a3600160046155c9565b6103ad9082615b39565b905060026103bc6001856155e0565b6103c691906155c9565b6103d09082615b39565b90506103dd6002806155c9565b6103e79082615b39565b90506103f4601082615b39565b9392505050565b610403615024565b61040b611c14565b905090565b6104186151ae565b5f805b601081101561047a57610447868387610435602083615b39565b9261044293929190615b4c565b61254e565b8351826010811061045a5761045a615b73565b6020020181815250506020826104709190615b39565b915060010161041b565b5061049e85828661048c604083615b39565b9261049993929190615b4c565b612561565b60208301526104ae604082615b39565b90506104c185828661048c604083615b39565b6040808401919091526104d49082615b39565b90506104e785828661048c604083615b39565b60608301526104f7604082615b39565b905061050a85828661048c604083615b39565b608083015261051a604082615b39565b905061052d85828661048c604083615b39565b60c083015261053d604082615b39565b905061055085828661048c604083615b39565b60e0830152610560604082615b39565b905061057385828661048c604083615b39565b60a0830152610583604082615b39565b905061059685828661048c604083615b39565b6101008301526105a7604082615b39565b90506105ba85828661048c604083615b39565b6101208301526105cb604082615b39565b90506105de85828661048c604083615b39565b610140830151526105f0604082615b39565b9050610603858286610435602083615b39565b610160830152610614602082615b39565b90505f5b83811015610692575f5b60098110156106895761063c878488610435602083615b39565b84610180015183601c811061065357610653615b73565b6020020151826009811061066957610669615b73565b60200201818152505060208361067f9190615b39565b9250600101610622565b50600101610618565b505f5b6106a160016029615b39565b8110156106f0576106b9868387610435602083615b39565b836101c0015182602a81106106d0576106d0615b73565b6020020181815250506020826106e69190615b39565b9150600101610695565b50610702858286610435602083615b39565b6101a0830152610713602082615b39565b905061072685828661048c604083615b39565b6101408301516020015261073b604082615b39565b905061074e85828661048c604083615b39565b61014083015160026020020152610766604082615b39565b90505f5b6107756001856155e0565b8110156107be5761078d86838761048c604083615b39565b836101e0015182601b81106107a4576107a4615b73565b60200201526107b4604083615b39565b915060010161076a565b505f5b83811015610811576107da868387610435602083615b39565b83610200015182601c81106107f1576107f1615b73565b6020020181815250506020826108079190615b39565b91506001016107c1565b505f5b60048110156108655761082e868387610435602083615b39565b836102200151826004811061084557610845615b73565b60200201818152505060208261085b9190615b39565b9150600101610814565b5061087785828661048c604083615b39565b610240830152610888604082615b39565b905061089b85828661048c604083615b39565b610260830152509392505050565b5f600180826108d6866108d1896108cc6108c78a6310000000615b39565b6125e3565b6125fb565b612616565b90505f6108f4876108ef8a6108cc6108c78b6001615b39565b61262f565b90505f5b61092360107f00000000000000000000000000000000000000000000000000000000000000006155e0565b811015610990575f61094d8c838151811061094057610940615b73565b6020026020010151612657565b905061095d866108cc8684612616565b955061096d856108cc8584612616565b9450610979848b612616565b9350610985838b61262f565b9250506001016108f8565b505f5b60108110156109f7575f8a82601081106109af576109af615b73565b602002015190506109c4866108cc8684612616565b95506109d4856108cc8584612616565b94506109e0848b612616565b93506109ec838b61262f565b925050600101610993565b50610a02848461266c565b9a9950505050505050505050565b5f5f610a2583606001518561016001516125fb565b905060015f5b7f0000000000000000000000000000000000000000000000000000000000000000811015610b17575f86610180015182601c8110610a6b57610a6b615b73565b602002015180519091505f90610a89908360015b6020020151612616565b9050848114610aab576040516313f8744360e31b815260040160405180910390fd5b5f876080015184601c8110610ac257610ac2615b73565b60200201519050610ad3838261267a565b9550610b07856108cc60016108d1856108cc8e604001518b601c8110610afb57610afb615b73565b6020020151600161262f565b9450505050806001019050610a2b565b50610b20615291565b5f5b6029811015610b70576101c0870151610b3c600183615b39565b602a8110610b4c57610b4c615b73565b6020020151828260298110610b6357610b63615b73565b6020020152600101610b22565b505f610b8582875f0151886020015186612828565b9050600160025b7f0000000000000000000000000000000000000000000000000000000000000000811015610be257610bd882896080015183601c8110610bce57610bce615b73565b60200201516125fb565b9150600101610b8c565b50610c08610bf5836108cc60018561262f565b6108d18a6101a001518a606001516125fb565b94909414979650505050505050565b5f610c206152b0565b5f610c4f8460c001517f00000000000000000000000000000000000000000000000000000000000000006128a1565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b03811115610c8a57610c8a615940565b604051908082528060200260200182016040528015610cb3578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b03811115610cef57610cef615940565b604051908082528060200260200182016040528015610d2857816020015b610d15615320565b815260200190600190039081610d0d5790505b509050610d5b610d56876101000151855f81518110610d4957610d49615b73565b602002602001015161262f565b61296a565b84610120018181525050610d90610d56876101000151855f81518110610d8357610d83615b73565b6020026020010151612616565b610140850181905261012085015160e0880151610db1926108d191906125fb565b845260c0860151610de190610dc59061296a565b6108cc8661012001516108ef8a60e001518961014001516125fb565b6020850152815160019083905f90610dfb57610dfb615b73565b602002602001018181525050876102400151815f81518110610e1f57610e1f615b73565b6020908102919091010152600160a08501525f60c08501528351610e42906129da565b60408501526020840151610e55906129da565b606085015260015b610e6960016024615b39565b8111610f0a57610e8185604001518660a001516125fb565b838281518110610e9357610e93615b73565b602002602001018181525050610edc8560c001516108d18b6101c00151600185610ebd91906155e0565b602a8110610ecd57610ecd615b73565b60200201518860a001516125fb565b60c086015260a08086015190880151610ef591906125fb565b60a0860152610f0381615b87565b9050610e5d565b505f5b6005811015610fe3575f610f22601e83615b39565b90505f610f3160016024615b39565b610f3b9084615b39565b9050610f6c858381518110610f5257610f52615b73565b60200260200101516108d189606001518a60a001516125fb565b858381518110610f7e57610f7e615b73565b602002602001018181525050610fbb8760c001516108d18d6101c0015184602a8110610fac57610fac615b73565b60200201518a60a001516125fb565b60c088015260a080880151908a0151610fd491906125fb565b60a08801525050600101610f0d565b50876020015181600181518110610ffc57610ffc615b73565b602002602001018190525086606001518160028151811061101f5761101f615b73565b602002602001018190525086608001518160038151811061104257611042615b73565b60200260200101819052508660a001518160048151811061106557611065615b73565b60200260200101819052508660c001518160058151811061108857611088615b73565b60200260200101819052508660e00151816006815181106110ab576110ab615b73565b6020026020010181905250866101000151816007815181106110cf576110cf615b73565b6020026020010181905250866101200151816008815181106110f3576110f3615b73565b60200260200101819052508661014001518160098151811061111757611117615b73565b602002602001018190525086610160015181600a8151811061113b5761113b615b73565b6020026020010181905250866101c0015181600b8151811061115f5761115f615b73565b602002602001018190525086610180015181600c8151811061118357611183615b73565b6020026020010181905250866101a0015181600d815181106111a7576111a7615b73565b6020026020010181905250866101e0015181600e815181106111cb576111cb615b73565b602002602001018190525086610200015181600f815181106111ef576111ef615b73565b60200260200101819052508661022001518160108151811061121357611213615b73565b60200260200101819052508661024001518160118151811061123757611237615b73565b60200260200101819052508661026001518160128151811061125b5761125b615b73565b60200260200101819052508661028001518160138151811061127f5761127f615b73565b6020026020010181905250866102a00151816014815181106112a3576112a3615b73565b6020026020010181905250866102c00151816015815181106112c7576112c7615b73565b6020026020010181905250866102e00151816016815181106112eb576112eb615b73565b60200260200101819052508661030001518160178151811061130f5761130f615b73565b60200260200101819052508661032001518160188151811061133357611333615b73565b60200260200101819052508661034001518160198151811061135757611357615b73565b602002602001018190525086610360015181601a8151811061137b5761137b615b73565b602002602001018190525086610380015181601b8151811061139f5761139f615b73565b6020026020010181905250866103a0015181601c815181106113c3576113c3615b73565b6020026020010181905250866103c0015181601d815181106113e7576113e7615b73565b6020026020010181905250876040015181601e8151811061140a5761140a615b73565b6020026020010181905250876060015181601f8151811061142d5761142d615b73565b602002602001018190525087608001518160208151811061145057611450615b73565b60200260200101819052508760a001518160218151811061147357611473615b73565b60200260200101819052508761012001518160228151811061149757611497615b73565b6020026020010181905250876101000151816023815181106114bb576114bb615b73565b60200260200101819052508760c00151816024815181106114de576114de615b73565b60200260200101819052508760e001518160258151811061150157611501615b73565b60200260200101819052505f61154787608001518660c001518b6102000151877f00000000000000000000000000000000000000000000000000000000000000006129ec565b9050611571815f8151811061155e5761155e615b73565b60200260200101518661012001516125fb565b608086018190526102008a01515160e08901516115a292916108d19161159791906125fb565b8861014001516125fb565b608086015260e08701516115b590612b4a565b60a08601525f6115c760016024615b39565b6115d2906001615b39565b90505f5b61160160017f00000000000000000000000000000000000000000000000000000000000000006155e0565b811015611812575f61163460017f00000000000000000000000000000000000000000000000000000000000000006155e0565b8210159050806117a357611668610d568b6101000151898560016116589190615b39565b81518110610d4957610d49615b73565b6101208901526101008a015161169890610d569089611688866001615b39565b81518110610d8357610d83615b73565b61014089015260a08801516101208901516116b391906125fb565b61016089015260a088015160e08b01516116db916116d0916125fb565b8961014001516125fb565b61018089018190526116fe906116f0906129da565b6108d18a61016001516129da565b866117098486615b39565b8151811061171957611719615b73565b6020026020010181815250505f6117528961018001518e61020001518560016117429190615b39565b601c8110610bce57610bce615b73565b905061178c816108d18b61016001518887600161176f9190615b39565b8151811061177f5761177f615b73565b60200260200101516125fb565b905061179c896080015182612616565b60808a0152505b6117c26117b88960a001518c60e001516125fb565b8b60e001516125fb565b60a08901526101e08c015182601b81106117de576117de615b73565b6020020151856117ee8486615b39565b815181106117fe576117fe615b73565b6020908102919091010152506001016115d6565b5061183e60017f00000000000000000000000000000000000000000000000000000000000000006155e0565b6118489082615b39565b90506118686118608961010001518a60c0015161262f565b60019061266c565b60e08701515261010088015160c08901516118ac91611860916108ef907f07b0c561a6148404f086204a9f36ffb0617942546750f230c893619174a57a76906125fb565b60e0878101805160200192909252815180516040909101529051805160609091015260a0870151908901516118ee916118e4916125fb565b8960e001516125fb565b60a08701525f5b600481101561199c575f6119278860e00151836004811061191857611918615b73565b60200201518960a001516125fb565b9050611932816129da565b886101000151836004811061194957611949615b73565b602002015260a088015160e08b015161196291906125fb565b8860a001818152505061198e88608001516108d1838f61022001518660048110610bce57610bce615b73565b6080890152506001016118f5565b506101008601515184518590839081106119b8576119b8615b73565b602090810291909101810191909152610100870151908101516119dc916002610a7f565b846119e8836001615b39565b815181106119f8576119f8615b73565b60209081029190910101526101008601516060015184611a19836002615b39565b81518110611a2957611a29615b73565b60209081029190910101525f5b6003811015611a8b578a61014001518160038110611a5657611a56615b73565b60200201518483611a6681615b87565b945081518110611a7857611a78615b73565b6020908102919091010152600101611a36565b506040518060400160405280600181526020016002815250838281518110611ab557611ab5615b73565b60200260200101819052508560800151848280611ad190615b87565b935081518110611ae357611ae3615b73565b602002602001018181525050611b0d8a61022001518960c001518a608001518d6101a00151612b55565b611b2a5760405163a2a2ac8360e01b815260040160405180910390fd5b5f8a6102600151905080848381518110611b4657611b46615b73565b6020026020010181905250886101000151858381518110611b6957611b69615b73565b602002602001018181525050611b7d615338565b611b878587612eb8565b8152611b9282612fb0565b602082018190528c5182515f92611baa929190612ff6565b90505f5f611bba8f5f0151613087565b91509150611bc782613148565b611bd081613148565b8351611bdd9083856131e7565b84526020840151611bef9082856131e7565b602085018190528451611c0191613216565b9f9e505050505050505050505050505050565b611c1c615024565b50604080516103e0810182526220000081526015602080830191909152601282840152825180840184527f286493b1bc5a9674ed3d063c79269512944b6dfb58b880361d36fce8a61c981481527f1ef073ead7f7fd307a1a357548e4d8c9f5d03d5a7191cea80b2ba0cf03d18d29818301526060830152825180840184527f216ae5e3bf2a41f792d13f7028ec70fb78ac8d5fa4834341acad58d3453bf12381527f2ef50ace63f2e23d4b2a184ce511e1b7781287457bcc135459c5c56de1877b93818301526080830152825180840184527f04874f63e091441575d7f87163ad2d04fa3e4b49cee4cde183081c90e13ff17f81527f1547db64a1675f5ab99f4dc4cf2af5cfd0ef1fbdb68977d8abc8f7112e88bf808183015260a0830152825180840184527f17094eb4ca2210abcb1b4d41cf1355b04dd66b014d42345e6eadf8407a74ed1a81527f2228aebc15e7852110c94a633f8fb944d71cb1a5cff1b5127d0e4eecf1a7726f8183015260c0830152825180840184527f15cfc9a869b9c86a839a67ab04b780b3049b2d5f10a901055f85d4717428f6dc81527f2aec2a8cee64e9da3981b9d6f9f00faffbe2ece25cd4f57d80b8552d81c716b58183015260e0830152825180840184527f232463dd05273276d135bcdfe18a8b299585d6e0fe220dfafe63a54293476dfe81527f17f763713bb623ce792152d0aabd32b83ca5a6abecb97ece41dc00a1bb6296ad81830152610100830152825180840184527f1ad0852ae1f831506b33a76a4968849abaf87e068b8e00ba462e190ff4dc0ff981527f2b782e70b28e331338317e348ecb3d3ee69c0cb7b1ca634b32395b5349605a9381830152610120830152825180840184527f1a03cf866e6a54045329039071909e3129fefe1a3f380a5db12e3156f6bed47e81527f1bdf1ec93f5b5962d4aac343eaa211a5b8021546f0dc225d03f39cb465546d5a81830152610140830152825180840184527f1940cce3f764969daf23bd6cf6d09ecd7e50392878ce2ba3a0a30c88f619cd3781527f06d183a757a5b2294f8e3b10d3304744bc4d7b68246b01563c48dfd3ab44384281830152610160830152825180840184527f11a96a0fb134b4ad2a3ac7b54fc7989a18ada93ac73e0e7bfb7134f334854c5581527f166911402df98ab7053779cb1f431384018e058cbe2ac79d1d5ff020ce5474d981830152610180830152825180840184527f11b342da18e6325f40bddb950e3ba058fe013e0a6757512f022a0d9961d3d46881527f04225227552dcaa71ff7c4571eebd04ca40091a33ff91d1b220af458dffca289818301526101a0830152825180840184527f1b5b7f1276e5867eef1d033df65d003c591c16bf64bd2d4cb89bccc1a98ab3dd81527f28f55668465e42d873d91d75906232c6f05bf37be890e4d4c0ef6a1d5df8c211818301526101c0830152825180840184527f18ae1c0c284757fd6a6bcf60413a8e2334fcb46562ea30b9cb9444a66349346381527f1cade59f171ec1d94348309a02e1642067d6e6b43eb254837e703c1488dff221818301526101e0830152825180840184527f2537fc03ae8cfc49498d0a04704d77e10d6477d6b7c5e515cf24dadab0dee87481527f0850d14d62e2c194a69110f3aefa10d6caea9bf6ff940331877c5f49e41e5fa781830152610200830152825180840184527f02f24bc3b670a81abc44133de34592b13bb3a5ea67cdaa1d73ad35965b8abe4981527f0c62df1ee51bfbaeba2a75c1cc8aa8a2ea3222f21bc0b8958bd43c3aa749e96381830152610220830152825180840184527f21ac9dc80bd7f54e6817d224b7650c4176407a1109f92567c05676ac1fe0973c81527f2d325ad91e20be879c716023bcde84d469c4f7867c12bb321c387e4a1036f86d81830152610240830152825180840184527f25b123800356ccc6d7a609989a0e4fc132bf757389ca25f0c1db7612bbec234981527f03832b0106e3581612f83d158277886cc9e5637790fccabde84b3218220f2a4881830152610260830152825180840184527f25962cb0996ebaeea7b01f8860fde2547f8bb738291e53c7f25a4ac80af4fd2e81527f22ec82955d2dc95fddc9cf9fd4f7aa555635abb02cf6eeb7ac3df225c8b62d5281830152610280830152825180840184527f1332d280da268502ba2d853e14e53baf604c7a6a41b7e70bdf2e861cc6a5982181527f0d14761f5281d5dc1209b25146d92d9e5692294f818c8c3468c9921f7a7cce79818301526102a0830152825180840184527f1b215ab72c8af91207dee6f8ac01f0e0d51895a9f670d7173c7b6d5b80a3908581527f04ee544edd280fa185c8d9886c9e19832ef71d67fab5093eadeec49ccc5a34b1818301526102c0830152825180840184527f11005f2ce25b6f954b89343fa059782ab8ecdc84d411c828cc7dfd54f796b6f681527f0c68694f3595aecaaffdff52c0fa5f1d05fa8c7ba651da1220634fa4b8867ba7818301526102e0830152825180840184527f1145c2f8face74c268cc68c772d99c59587659cbd594a1aef32a36ab556621e281527f1ffa60a61a074aa68c8412fd9f3b4ae61437cf3ff3f0497e1244ba56370d7b9181830152610300830152825180840184527f099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d2681527e15b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f81830152610320830152825180840184527f1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e81527f305e8992b148eedb22e6e992077a84482141c7ebe42000a1d58ccb74381f6d1981830152610340830152825180840184527f061f64497996e8915722501e9e367938ed8da2375186b518c7345c60b1134b2d81527f1b84d38339321f405ebaf6a2f830842ad3d7cb59792e11c0d2691f317fd50e6e81830152610360830152825180840184527f043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce81527f261522c4089330646aff96736194949330952ae74c573d1686d9cb4a007338548183015261038083015282518084018452600181526002818301526103a083015282518084019093527f1f0071e7d3b9be4c8376ff230b3b8b242585d403d25463022d38e574cb0b575483527f19cb572dac34151573e3024878327a8ea7febb3d76c6171b10d1e3f2f2907584908301526103c081019190915290565b5f6103f461255c8385615b9f565b612657565b612569615320565b60408051808201909152805f516020615c6e5f395f51905f5261258f60205f8789615b4c565b61259891615b9f565b6125a29190615bbc565b81526020908101905f516020615c6e5f395f51905f52906125c7906040908789615b4c565b6125d091615b9f565b6125da9190615bbc565b90529392505050565b5f5f516020615c8e5f395f51905f52825b0692915050565b5f5f516020615c8e5f395f51905f5282840990505b92915050565b5f5f516020615c8e5f395f51905f528284089392505050565b5f5f516020615c8e5f395f51905f52825f516020615c8e5f395f51905f520384089392505050565b5f5f516020615c8e5f395f51905f52826125f4565b5f6103f4836108cc8461296a565b5f5f604051806101200160405280619d8081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec5181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd31815260200161024081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd3181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec518152602001619d8081525090505f600190505f5f90505b600981101561277357612769826108cc878461262f565b9150600101612752565b5061277c61534b565b5f5b60098110156127cd576127ae610d5685836009811061279f5761279f615b73565b60200201516108cc898561262f565b8282600981106127c0576127c0615b73565b602002015260010161277e565b505f5b600981101561281357612809856108d18984600981106127f2576127f2615b73565b6020020151858560098110610bce57610bce615b73565b94506001016127d0565b5061281e84836125fb565b9695505050505050565b5f61283161536a565b61283c86828561340a565b612848868683866135b6565b612854868683866137a2565b61285f8682856139c7565b61286a868285613bbb565b61287686868386613f04565b6128818682856143b0565b61288c8682856147c2565b612897868285614b83565b61281e8185614e83565b60605f826001600160401b038111156128bc576128bc615940565b6040519080825280602002602001820160405280156128e5578160200160208202803683370190505b50905083815f815181106128fb576128fb615b73565b602090810291909101015260015b838110156129625761293d826129206001846155e0565b8151811061293057612930615b73565b6020026020010151612b4a565b82828151811061294f5761294f615b73565b6020908102919091010152600101612909565b509392505050565b5f5f8290505f604051602081526020808201526020604082015282606082015260025f516020615c8e5f395f51905f520360808201525f516020615c8e5f395f51905f5260a082015260205f60c08360055afa806129c6575f5ffd5b505f51608091909101604052949350505050565b5f516020615c8e5f395f51905f520390565b60605f826001600160401b03811115612a0757612a07615940565b604051908082528060200260200182016040528015612a30578160200160208202803683370190505b509050825b8015612b3f575f85612a486001846155e0565b81518110612a5857612a58615b73565b602002602001015190505f89600184612a7191906155e0565b601c8110612a8157612a81615b73565b602002015190505f612adc612aa0612a99858d6125fb565b60026125fb565b6108ef8b612aaf6001896155e0565b601c8110612abf57612abf615b73565b60200201516108cc612ad6886108cc60018a61262f565b8761262f565b9050612afd816108cc610d56612af7876108cc60018961262f565b86612616565b99508990508085612b0f6001876155e0565b81518110612b1f57612b1f615b73565b60200260200101818152505050505080612b3890615bdb565b9050612a35565b509695505050505050565b5f61261082836125fb565b5f600181612b6e612b6887610100614edc565b8361262f565b905080612b8e5760405163835eb8f760e01b815260040160405180910390fd5b612b96615389565b80518390525f5b7f0000000000000000000000000000000000000000000000000000000000000000811015612c7f575f612bd18260096155c9565b612bdc906001615b39565b905084835f0151826101008110612bf557612bf5615b73565b60200201525f612c06826001615b39565b90505b612c14600983615b39565b811015612c75578351612c5490612c2c6001846155e0565b6101008110612c3d57612c3d615b73565b60200201518a85601c8110610bce57610bce615b73565b8451826101008110612c6857612c68615b73565b6020020152600101612c09565b5050600101612b9d565b50608081018390525f602082018190525b610100811015612d9057612cb1612cab83608001518a6125fb565b8561262f565b8260a00151826101008110612cc857612cc8615b73565b602002015260a0820151612cf290826101008110612ce857612ce8615b73565b602002015161296a565b8260a00151826101008110612d0957612d09615b73565b602002018181525050612d4f82602001516108d1845f0151846101008110612d3357612d33615b73565b60200201518560a00151856101008110610bce57610bce615b73565b60208301526080820151612d83907f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d66125fb565b6080830152600101612c90565b505f612da1836108cc61010061296a565b9050612db18260200151826125fb565b602083015260a0820151612dcc905f5b6020020151826125fb565b604083015260a0820151612df890612de760016101006155e0565b6101008110612dc157612dc1615b73565b60608301526040820151612e0e908a6002610bce565b60c08301819052612e6e906108d1612e468b7f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d661262f565b60208d015160408e01516108cc91612e5d9161262f565b8e5160208901516108ef91906125fb565b60c083018190526060830151612ea391612e97916108d1906108cc8e600260200201518c61262f565b6108ef858c6003610bce565b60c08301819052159998505050505050505050565b612ec0615320565b7f00000000000000000000000000000000000000000000000000000000000000005f5b81811015612f1557612f0d858281518110612f0057612f00615b73565b6020026020010151613148565b600101612ee3565b50604051600190815b60018401811015612f7a5760208102870160208202870181515160408501528151602001516060850152805160808501525050604080830160606040850160075afa8316925060408260808460065afa90921691600101612f1e565b5080518452602081015160208501525080612fa8576040516352ec174560e11b815260040160405180910390fd5b505092915050565b612fb8615320565b5f516020615c6e5f395f51905f5282602001515f516020615c6e5f395f51905f52612fe391906155e0565b612fed9190615bbc565b60208301525090565b5f5f5f61300286613087565b9150915061300e6153cd565b82518152602080840151818301528251604080840191909152838201516060840152875160808401528782015160a0840152865160c08401528682015160e08401525161307c9161306191849101615bf0565b60405160208183030381529060405280519060200120612657565b979650505050505050565b61308f615320565b613097615320565b82516020808501516040860151606087015160cc90811b608892831b604494851b90961795909517949094178652608087015160a088015160c089015160e08a0151871b90841b91851b9092171717868401526101008701516101208801516101408901516101608a0151871b90841b91851b909217171785526101808701516101a08801516101c08901516101e09099015190951b9790911b9390911b1791909117939093179281019290925291565b805160208201515f5f516020615c6e5f395f51905f528380095f516020615c6e5f395f51905f5260035f516020615c6e5f395f51905f52838709085f516020615c6e5f395f51905f5284850914915050806131e15760405162461bcd60e51b8152602060048201526019602482015278706f696e74206973206e6f74206f6e2074686520637572766560381b60448201526064016100e5565b50505050565b6131ef615320565b6131f7615320565b6132018386614f3d565b905061320d8185614f93565b95945050505050565b81516020808401518351848301516040805194850195909552938301919091527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260608301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60808301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60a08301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60c083015260e08201526101008101919091527f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c16101208201527f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b06101408201527f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe46101608201527f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e556101808201525f9081906101a00160405160208183030381529060405290505f5f60086001600160a01b0316836040516133ac9190615c24565b5f60405180830381855afa9150503d805f81146133e4576040519150601f19603f3d011682016040523d82523d5f602084013e6133e9565b606091505b509150915081801561281e57508080602001905181019061281e9190615c3a565b5f613416846007614ff4565b90507f183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f80000005f61347761347161344b85600361262f565b6108cc61346661345b8b5f614ff4565b6108cc8c601d614ff4565b6108cc8b601c614ff4565b836125fb565b90506134f86134ed6134d46134bb6134a2856108d16134978d6002614ff4565b6108cc8e601c614ff4565b6108d16134b08c6003614ff4565b6108cc8d601d614ff4565b6108d16134c98b6004614ff4565b6108cc8c601e614ff4565b6108d16134e28a6005614ff4565b6108cc8b601f614ff4565b6108d1886001614ff4565b9050613517816108d161350c86600161262f565b6108cc8a6027614ff4565b905061352381846125fb565b905061352f81856125fb565b8552505f905061356961355f61355461354988601c614ff4565b6108d189601f614ff4565b6108ef886024614ff4565b6108d1875f614ff4565b905061357a816108cc84600261262f565b905061358b816108cc84600161262f565b905061359781836125fb565b90506135a381846125fb565b9050808460015b60200201525050505050565b5f5f5f6135ec6135e26135ca89601c614ff4565b6108d16135d88b6012614ff4565b8a606001516125fb565b8760800151612616565b9050613625816108cc61361b6136038b601d614ff4565b6108d16136118d6013614ff4565b8c606001516125fb565b8960800151612616565b905061364a816108cc61361b61363c8b601e614ff4565b6108d16136118d6014614ff4565b905061366f816108cc61361b6136618b601f614ff4565b6108d16136118d6015614ff4565b92505f90506136936135e261368589601c614ff4565b6108d16135d88b600e614ff4565b90506136b8816108cc61361b6136aa8b601d614ff4565b6108d16136118d600f614ff4565b90506136dd816108cc61361b6136cf8b601e614ff4565b6108d16136118d6010614ff4565b9050613702816108cc61361b6136f48b601f614ff4565b6108d16136118d6011614ff4565b91505f9050613729613723613718896020614ff4565b6108d18a601a614ff4565b846125fb565b905061375e816108ef6137586137408b6028614ff4565b6108d161374e8d601b614ff4565b8c60a001516125fb565b856125fb565b905061376a81856125fb565b6040860152505f61378d61375861378289601b614ff4565b6108cc8a6028614ff4565b9050808560035b602002015250505050505050565b5f5f6138006137e86137d06137bb61361b8a6016614ff4565b6108d16137c98b6017614ff4565b8a516125fb565b6108d16137de8a6018614ff4565b89602001516125fb565b6108d16137f6896019614ff4565b88604001516125fb565b91505f61383761381e61381489601c614ff4565b8860800151612616565b6108d161382c8a6003614ff4565b6108cc8b6024614ff4565b90505f61386061384889601d614ff4565b6108d16138558b5f614ff4565b6108cc8c6025614ff4565b90505f61388a6138718a601e614ff4565b6108d161387f8c6001614ff4565b6108cc8d6026614ff4565b90506138c96138b16138a3856108d1868d5f01516125fb565b6108d1848c602001516125fb565b6108d16138bf8c6004614ff4565b8b604001516125fb565b93505050505f6138dd613723886021614ff4565b90505f6138ee613723896021614ff4565b90505f61392661390d6139028b6023614ff4565b6108d18c6006614ff4565b6108ef61391b8c6023614ff4565b6108cc8d6006614ff4565b90505f613944612b6861393987896125fb565b6108cc8d6021614ff4565b905061395081886125fb565b90505f61397861396a6139648d6006614ff4565b876125fb565b6108ef6139648e6022614ff4565b90505f6139868c6023614ff4565b90505f613996612b6883846125fb565b60808c0185905260a08c0184905290506139b0818b6125fb565b8b6006602002015250505050505050505050505050565b5f6139d35f600161262f565b90505f6139e15f600261262f565b90505f6139ef5f600361262f565b90505f613a0b613a0088601d614ff4565b6108ef89601c614ff4565b90505f613a27613a1c89601e614ff4565b6108ef8a601d614ff4565b90505f613a43613a388a601f614ff4565b6108ef8b601e614ff4565b90505f613a5f613a548b6024614ff4565b6108ef8c601f614ff4565b905083613a70816108cc818b612616565b9050613a80816108cc878a612616565b9050613a90816108cc8789612616565b9050613aa1816108cc8d6008614ff4565b9050613aad818a6125fb565b60e08b01525082613ac2816108cc818b612616565b9050613ad2816108cc868a612616565b9050613ae2816108cc8689612616565b9050613af3816108cc8d6008614ff4565b9050613aff818a6125fb565b6101008b01525081613b15816108cc818b612616565b9050613b25816108cc858a612616565b9050613b35816108cc8589612616565b9050613b46816108cc8d6008614ff4565b9050613b52818a6125fb565b6101208b01525080613b68816108cc818b612616565b9050613b78816108cc848a612616565b9050613b88816108cc8489612616565b9050613b99816108cc8d6008614ff4565b9050613ba5818a6125fb565b610140909a019990995250505050505050505050565b613bf46040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613bff84601d614ff4565b8152613c0c84601e614ff4565b6020820152613c1c846024614ff4565b6040820152613c2c846027614ff4565b6060820152613c3c846026614ff4565b6080820152613c4c846025614ff4565b60a08201525f613c5d856002614ff4565b90505f613c6a865f614ff4565b90505f613c7e8460400151855f015161262f565b90505f613c93856020015186602001516125fb565b606086015190915086905f90613ca990806125fb565b90505f613cc7613cc189602001518a606001516125fb565b886125fb565b90505f613ce6613cdf8a60a001518b60400151612616565b8a51612616565b9050613cf561396482886125fb565b9050613d1c613d16613d10613d0a848761262f565b8861262f565b84612616565b83612616565b9050613d44613d39613d2e83876125fb565b6108cc8f6009614ff4565b6108cc60018a61262f565b6101608c015250505050602085015160808601515f91613d6391612616565b90505f613d81613d778860600151886125fb565b886020015161262f565b90505f613da5613d9184876125fb565b6108d16137588b60a001518c5f015161262f565b9050613dcd613dc2613db7838c6125fb565b6108cc8e6009614ff4565b6108cc60018961262f565b6101808b0152505f9150613dee9050613de7836011612616565b87516125fb565b90505f613dfb8384612616565b9050613e078182612616565b90505f613e158360096125fb565b9050613e3e613e38613723613e318b60a001518c5f0151612616565b8b51612616565b8261262f565b60c089018190525f90613e5990613cc190613d2e908d6125fb565b9050613e6c8b600b602002015182612616565b6101608c0152505086515f9250613e939150613de790613e8c9080612616565b8851612616565b90505f613ed3613eae836108cc8a5f01518b60a0015161262f565b60208901516108ef90613ec19080612616565b6108cc8b602001518c60800151612616565b9050613ef089600c60200201516108d1613cc1613d2e858d6125fb565b89600c602002015250505050505050505050565b613f6e604051806101e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613f86613f7c86601e614ff4565b85604001516125fb565b808252613fa5906108d1613f9b88601d614ff4565b87602001516125fb565b808252613fba906108d1613de788601c614ff4565b808252613fcc906108d1876001614ff4565b80825260208201819052613fe5906108ef87601f614ff4565b8152614000613ff5866024614ff4565b6108ef87601c614ff4565b608082015261401e614013866027614ff4565b6108ef87601f614ff4565b60608201526080810151614037906108cc81600161262f565b6101c082015260808101516140779061406d90614066906108cc60015f516020615c8e5f395f51905f526155e0565b6001612616565b82606001516125fb565b60a082018190526140ad9061409f906108cc614094896002614ff4565b6108cc8a6003614ff4565b6108cc61375888600a614ff4565b83600e60200201526101c08101516140d19061409f906108cc614094896002614ff4565b6101e084015280516140f6906108cc6140eb886002614ff4565b6108cc896003614ff4565b6101208201525f61411561410b87601f614ff4565b836020015161262f565b9050614126816108cc83600161262f565b60e0830152614143614139876026614ff4565b86604001516125fb565b60408301819052614166906108d161415c896025614ff4565b88602001516125fb565b60408301819052614186906108d161417f896024614ff4565b88516125fb565b60408301526141a3614199876027614ff4565b836040015161262f565b60408301525f6141c26141b7886026614ff4565b6108ef89601e614ff4565b90506142146141ef613471614066866080015160015f516020615c8e5f395f51905f526108cc91906155e0565b6108cc614066866040015160015f516020615c8e5f395f51905f526108cc91906155e0565b60c084015260408301516142369061422c90806125fb565b846040015161262f565b61010084015260c083015161426290614254906108cc8a6004614ff4565b6108cc6139648a600a614ff4565b6102008601526101c083015161428190614254906108cc8a6004614ff4565b6102208601526101008301516142a090614254906108cc8a6004614ff4565b61024086015260e08301516142ba906108cc896004614ff4565b6101408401526142d96142ce886025614ff4565b6108ef89601d614ff4565b6101608401526080830151614317906141b79061430c90614066906108cc60015f516020615c8e5f395f51905f526155e0565b8561016001516125fb565b61018084018190526101208401516101a0850181905261434e916108d1906108cc6143438c6005614ff4565b6108cc8d6002614ff4565b6101a08401819052835161436e91906108d1906108cc6143438c5f614ff4565b6101a084018190526101408401516143869190612616565b6101a084018190526143a0906108cc6139648a600a614ff4565b6101a0840181905285600d613794565b6143e96040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61441e6144056143fa86601c614ff4565b6108cc876025614ff4565b6108d1614413876024614ff4565b6108cc88601d614ff4565b815261446361445861443f61443487601c614ff4565b6108cc88601f614ff4565b6108d161444d88601d614ff4565b6108cc89601e614ff4565b6108ef866026614ff4565b6040820181905261447890600160441b6125fb565b6040820181905261448e906108ef866027614ff4565b6040820181905281516144a19190612616565b604082018190526144b7906108cc866005614ff4565b604082015280516144cc90600160441b6125fb565b8082526144ec906108d16144e1876024614ff4565b6108cc886025614ff4565b80825260208201819052614513906108ef61450887601e614ff4565b6108d188601f614ff4565b60208201819052614529906108cc866004614ff4565b6020820152805160608201819052614546906108d186601f614ff4565b6060820181905261456a906108ef61455f876026614ff4565b6108d1886027614ff4565b6060820181905261457f906108cc865f614ff4565b8160600181815250505f6145a861459e83602001518460400151612616565b8360600151612616565b90506145b9816108cc876003614ff4565b90506145d16145c9866025614ff4565b6140006125fb565b608083018190526145e7906108d1876024614ff4565b608083018190526145fa906140006125fb565b60808301819052614610906108d187601e614ff4565b60808301819052614623906140006125fb565b60808301819052614639906108d187601d614ff4565b6080830181905261464c906140006125fb565b60808301819052614662906108d187601c614ff4565b60808301819052614678906108ef87601f614ff4565b6080830181905261468e906108cc876005614ff4565b60808301526146a16145c9866026614ff4565b60a083018190526146b7906108d1876025614ff4565b60a083018190526146ca906140006125fb565b60a083018190526146e0906108d1876024614ff4565b60a083018190526146f3906140006125fb565b60a08301819052614709906108d187601f614ff4565b60a0830181905261471c906140006125fb565b60a08301819052614732906108d187601e614ff4565b60a08301819052614748906108ef876027614ff4565b60a0830181905261475d906108cc875f614ff4565b60a0830181905260808301515f916147759190612616565b9050614786816108cc886004614ff4565b90506147928282612616565b60c084018190526147ab906108cc61396489600b614ff4565b60c084018190528560136020020152505050505050565b6148386040518061022001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61485161484685601c614ff4565b6108d1866002614ff4565b815261486c61486185601d614ff4565b6108d1866003614ff4565b602082015261488a61487f85601e614ff4565b6108d1866004614ff4565b60408201526148a861489d85601f614ff4565b6108d1866005614ff4565b606082015280516148da906148d3906148cc906148c590806125fb565b84516125fb565b83516125fb565b82516125fb565b608082015260208101516149189061490e90614904906148fa90806125fb565b84602001516125fb565b83602001516125fb565b82602001516125fb565b60a082015260408101516149569061494c906149429061493890806125fb565b84604001516125fb565b83604001516125fb565b82604001516125fb565b60c0820152606081015161498a9061406d906149809061497690806125fb565b84606001516125fb565b83606001516125fb565b60e0820152608081015160a08201516149a39190612616565b61010082015260c081015160e08201516149bd9190612616565b61012082015260a08101516149e1906149d69080612616565b826101200151612616565b61014082015260e0810151614a05906149fa9080612616565b826101000151612616565b610160820152610120810151614a1b9080612616565b6101e08201819052614a3c90614a319080612616565b826101600151612616565b6101e0820152610100810151614a529080612616565b6101a08201819052614a7390614a689080612616565b826101400151612616565b6101a08201819052610160820151614a8a91612616565b6101808201526101408101516101e0820151614aa69190612616565b6101c0820152614aba61347185600c614ff4565b6102008201819052610280840151610180830151614ae5926108d1916108cc906108ef8a6024614ff4565b8360146020020152614b1583601560200201516108d18361020001516108cc856101a001516108ef8a6025614ff4565b8360156020020152614b4583601660200201516108d18361020001516108cc856101c001516108ef8a6026614ff4565b8360166020020152614b7583601760200201516108d18361020001516108cc856101e001516108ef8a6027614ff4565b836017602002015250505050565b614bd56040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f6040518060800160405280614c0a7f10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e76125e3565b8152602001614c387f0c28145b6a44df3e0149b3d0a30b3bb599df9756d4dd9b84a86b38cfb45a740b6125e3565b8152602001614c657e544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac156125e3565b8152602001614c937f222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428b6125e3565b90529050614cb0614ca586601c614ff4565b6108d1876002614ff4565b6101208301819052614cef90614ce490614cd990614cce90806125fb565b8561012001516125fb565b8461012001516125fb565b8361012001516125fb565b8252614cfc85601d614ff4565b6020830152614d0c85601e614ff4565b6040830152614d1c85601f614ff4565b606083015281516020830151614d449161459e91614d3a9190612616565b8460400151612616565b6080830152614d5761372386600d614ff4565b6101408301528151614d7890614d6e90835f610bce565b8360800151612616565b60a0830152614da484601860200201516108d18461014001516108cc8660a001516108ef8b6024614ff4565b6103008501526020820151614dbf90614d6e90836001610bce565b60c0830152614deb84601960200201516108d18461014001516108cc8660c001516108ef8b6025614ff4565b6103208501526040820151614e0690614d6e90836002610bce565b60e0830152614e3284601a60200201516108d18461014001516108cc8660e001516108ef8b6026614ff4565b6103408501526060820151614e4d90614d6e90836003610bce565b610100830152614e7b84601b60200201516108d18461014001516108cc8661010001516108ef8b6027614ff4565b84601b6135aa565b815160015b601c811015614ed557614ecb826108d18684601c8110614eaa57614eaa615b73565b602002015186614ebb6001876155e0565b601b8110610bce57610bce615b73565b9150600101614e88565b5092915050565b5f5f8390505f60405160208152602080820152602060408201528260608201528460808201525f516020615c8e5f395f51905f5260a082015260205f60c08360055afa80614f28575f5ffd5b505f5160809190910160405295945050505050565b614f45615320565b614f4d615320565b604051835181526020840151602082015284604082015260408160608360075afa80614f77575f5ffd5b5080518252602080820151908301526060016040529392505050565b614f9b615320565b614fa3615320565b6040518451815260208501516020820152835160408201526020840151606082015260408160808360065afa80614fd8575f5ffd5b5080518252602080820151908301526080016040529392505050565b5f8282602881111561500857615008615c59565b6029811061501857615018615b73565b60200201519392505050565b604051806103e001604052805f81526020015f81526020015f815260200161504a615320565b8152602001615057615320565b8152602001615064615320565b8152602001615071615320565b815260200161507e615320565b815260200161508b615320565b8152602001615098615320565b81526020016150a5615320565b81526020016150b2615320565b81526020016150bf615320565b81526020016150cc615320565b81526020016150d9615320565b81526020016150e6615320565b81526020016150f3615320565b8152602001615100615320565b815260200161510d615320565b815260200161511a615320565b8152602001615127615320565b8152602001615134615320565b8152602001615141615320565b815260200161514e615320565b815260200161515b615320565b8152602001615168615320565b8152602001615175615320565b8152602001615182615320565b815260200161518f615320565b815260200161519c615320565b81526020016151a9615320565b905290565b6040518061028001604052806151c26153ec565b81526020016151cf615320565b81526020016151dc615320565b81526020016151e9615320565b81526020016151f6615320565b8152602001615203615320565b8152602001615210615320565b815260200161521d615320565b815260200161522a615320565b8152602001615237615320565b815260200161524461540b565b81526020015f8152602001615257615438565b81526020015f815260200161526a615466565b8152602001615277615485565b815260200161528461536a565b815260200161518f6154b3565b6040518061052001604052806029906020820280368337509192915050565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020016152ee6154b3565b81526020016152fb6154b3565b81526020015f81526020015f81526020015f81526020015f8152602001606081525090565b60405180604001604052805f81526020015f81525090565b604051806040016040528061519c615320565b6040518061012001604052806009906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b6040518060e0016040528061539c6154d1565b81526020015f81526020015f81526020015f81526020015f81526020016153c16154d1565b81526020015f81525090565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b60405180606001604052806003905b615422615320565b81526020019060019003908161541a5790505090565b604051806103800160405280601c905b61545061534b565b8152602001906001900390816154485790505090565b604051806105400160405280602a906020820280368337509192915050565b604051806103600160405280601b905b61549d615320565b8152602001906001900390816154955790505090565b60405180608001604052806004906020820280368337509192915050565b604051806120000160405280610100906020820280368337509192915050565b5f5f5f5f60408587031215615504575f5ffd5b84356001600160401b03811115615519575f5ffd5b8501601f81018713615529575f5ffd5b80356001600160401b0381111561553e575f5ffd5b87602082840101111561554f575f5ffd5b6020918201955093508501356001600160401b0381111561556e575f5ffd5b8501601f8101871361557e575f5ffd5b80356001600160401b03811115615593575f5ffd5b8760208260051b84010111156155a7575f5ffd5b949793965060200194505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417612610576126106155b5565b81810381811115612610576126106155b5565b805f5b60108110156131e15781518452602093840193909101906001016155f6565b805f5b60038110156131e15761563684835180518252602090810151910152565b6040939093019260209190910190600101615618565b805f5b601c8110156131e1578151845f5b600981101561567c57825182526020928301929091019060010161565d565b50505061012093909301926020919091019060010161564f565b805f5b602a8110156131e1578151845260209384019390910190600101615699565b805f5b601b8110156131e1576156d984835180518252602090810151910152565b60409390930192602091909101906001016156bb565b805f5b601c8110156131e15781518452602093840193909101906001016156f2565b805f5b60048110156131e1578151845260209384019390910190600101615714565b8183525f6001600160fb1b0383111561574a575f5ffd5b8260051b80836020870137939093016020019392505050565b61576e8188516155f3565b5f602088015161578c61020084018280518252602090810151910152565b5060408801518051610240840152602090810151610260840152606089015180516102808501528101516102a0840152608089015180516102c08501528101516102e084015260a0890151805161030085015281015161032084015260c0890151805161034085015281015161036084015260e089015180516103808501528101516103a084015261010089015180516103c08501528101516103e084015261012089015180516104008501520151610420830152610140880151615855610440840182615615565b5061016088015161050083015261018088015161587661052084018261564c565b506101a08801516124a08301526101c08801516158976124c0840182615696565b506101e08801516158ac612a008401826156b8565b506102008801516158c16130c08401826156ef565b506102208801516158d6613440840182615711565b5061024088015180516134c08401526020908101516134e0840152610260890151805161350085015201516135208301526135c0613540830181905261591f9083018789615733565b613560830195909552506135808101929092526135a0909101529392505050565b634e487b7160e01b5f52604160045260245ffd5b60405161014081016001600160401b038111828210171561597757615977615940565b60405290565b604051601f8201601f191681016001600160401b03811182821017156159a5576159a5615940565b604052919050565b5f60c082840312156159bd575f5ffd5b60405160c081016001600160401b03811182821017156159df576159df615940565b604090815283518252602080850151908301528381015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b5f82601f830112615a30575f5ffd5b5f610360615a3d8161597d565b915083018185821115615a4e575f5ffd5b845b82811015615a68578051825260209182019101615a50565b509195945050505050565b5f82601f830112615a82575f5ffd5b5f610380615a3d8161597d565b5f610be0828403128015615aa1575f5ffd5b50615aaa615954565b615ab484846159ad565b8152615ac38460c08501615a21565b6020820152615ad6846104208501615a73565b60408201526107a08301516060820152615af4846107c08501615a73565b6080820152610b4083015160a0820152610b6083015160c0820152610b8083015160e0820152610ba0830151610100820152610bc09092015161012083015250919050565b80820180821115612610576126106155b5565b5f5f85851115615b5a575f5ffd5b83861115615b66575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52603260045260245ffd5b5f60018201615b9857615b986155b5565b5060010190565b80356020831015612610575f19602084900360031b1b1692915050565b5f82615bd657634e487b7160e01b5f52601260045260245ffd5b500690565b5f81615be957615be96155b5565b505f190190565b5f8183825b6008811015615c14578151835260209283019290910190600101615bf5565b5050506101008201905092915050565b5f82518060208501845e5f920191825250919050565b5f60208284031215615c4a575f5ffd5b815180151581146103f4575f5ffd5b634e487b7160e01b5f52602160045260245ffdfe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063ea50d0e41461002d575b5f5ffd5b61004061003b3660046154f1565b610054565b604051901515815260200160405180910390f35b5f5f61007f7f00000000000000000000000000000000000000000000000000000000000000006102ee565b905061008c8160206155c9565b85146100ee577f0000000000000000000000000000000000000000000000000000000000000000856100bf8360206155c9565b6040516359895a5360e01b81526004810193909352602483019190915260448201526064015b60405180910390fd5b5f6100f76103fb565b90505f61012588887f0000000000000000000000000000000000000000000000000000000000000000610410565b90506010826040015161013891906155e0565b85146101575760405163fa06659360e01b815260040160405180910390fd5b60405163995bf45760e01b81525f9073__$f25d01d3eaf7d03206a1c3f23eb1654acf$__9063995bf457906101fa9085908b908b907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090600401615763565b610be060405180830381865af4158015610216573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061023a9190615a8f565b905061028a8787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855185516060810151608090910151919350915060016108a9565b815160a0015261029a8282610a10565b6102b7576040516313f8744360e31b815260040160405180910390fd5b6102c2828483610c17565b6102df576040516352ec174560e11b815260040160405180910390fd5b50600198975050505050505050565b5f8060026102fe60016008615b39565b61030891906155c9565b9050610316600260036155c9565b6103209082615b39565b9050600161032f6009856155c9565b61033991906155c9565b6103439082615b39565b90506001610352816029615b39565b61035c91906155c9565b6103669082615b39565b9050610374600160026155c9565b61037e9082615b39565b905061038b6001846155c9565b6103959082615b39565b90506103a3600160046155c9565b6103ad9082615b39565b905060026103bc6001856155e0565b6103c691906155c9565b6103d09082615b39565b90506103dd6002806155c9565b6103e79082615b39565b90506103f4601082615b39565b9392505050565b610403615024565b61040b611c14565b905090565b6104186151ae565b5f805b601081101561047a57610447868387610435602083615b39565b9261044293929190615b4c565b61254e565b8351826010811061045a5761045a615b73565b6020020181815250506020826104709190615b39565b915060010161041b565b5061049e85828661048c604083615b39565b9261049993929190615b4c565b612561565b60208301526104ae604082615b39565b90506104c185828661048c604083615b39565b6040808401919091526104d49082615b39565b90506104e785828661048c604083615b39565b60608301526104f7604082615b39565b905061050a85828661048c604083615b39565b608083015261051a604082615b39565b905061052d85828661048c604083615b39565b60c083015261053d604082615b39565b905061055085828661048c604083615b39565b60e0830152610560604082615b39565b905061057385828661048c604083615b39565b60a0830152610583604082615b39565b905061059685828661048c604083615b39565b6101008301526105a7604082615b39565b90506105ba85828661048c604083615b39565b6101208301526105cb604082615b39565b90506105de85828661048c604083615b39565b610140830151526105f0604082615b39565b9050610603858286610435602083615b39565b610160830152610614602082615b39565b90505f5b83811015610692575f5b60098110156106895761063c878488610435602083615b39565b84610180015183601c811061065357610653615b73565b6020020151826009811061066957610669615b73565b60200201818152505060208361067f9190615b39565b9250600101610622565b50600101610618565b505f5b6106a160016029615b39565b8110156106f0576106b9868387610435602083615b39565b836101c0015182602a81106106d0576106d0615b73565b6020020181815250506020826106e69190615b39565b9150600101610695565b50610702858286610435602083615b39565b6101a0830152610713602082615b39565b905061072685828661048c604083615b39565b6101408301516020015261073b604082615b39565b905061074e85828661048c604083615b39565b61014083015160026020020152610766604082615b39565b90505f5b6107756001856155e0565b8110156107be5761078d86838761048c604083615b39565b836101e0015182601b81106107a4576107a4615b73565b60200201526107b4604083615b39565b915060010161076a565b505f5b83811015610811576107da868387610435602083615b39565b83610200015182601c81106107f1576107f1615b73565b6020020181815250506020826108079190615b39565b91506001016107c1565b505f5b60048110156108655761082e868387610435602083615b39565b836102200151826004811061084557610845615b73565b60200201818152505060208261085b9190615b39565b9150600101610814565b5061087785828661048c604083615b39565b610240830152610888604082615b39565b905061089b85828661048c604083615b39565b610260830152509392505050565b5f600180826108d6866108d1896108cc6108c78a6310000000615b39565b6125e3565b6125fb565b612616565b90505f6108f4876108ef8a6108cc6108c78b6001615b39565b61262f565b90505f5b61092360107f00000000000000000000000000000000000000000000000000000000000000006155e0565b811015610990575f61094d8c838151811061094057610940615b73565b6020026020010151612657565b905061095d866108cc8684612616565b955061096d856108cc8584612616565b9450610979848b612616565b9350610985838b61262f565b9250506001016108f8565b505f5b60108110156109f7575f8a82601081106109af576109af615b73565b602002015190506109c4866108cc8684612616565b95506109d4856108cc8584612616565b94506109e0848b612616565b93506109ec838b61262f565b925050600101610993565b50610a02848461266c565b9a9950505050505050505050565b5f5f610a2583606001518561016001516125fb565b905060015f5b7f0000000000000000000000000000000000000000000000000000000000000000811015610b17575f86610180015182601c8110610a6b57610a6b615b73565b602002015180519091505f90610a89908360015b6020020151612616565b9050848114610aab576040516313f8744360e31b815260040160405180910390fd5b5f876080015184601c8110610ac257610ac2615b73565b60200201519050610ad3838261267a565b9550610b07856108cc60016108d1856108cc8e604001518b601c8110610afb57610afb615b73565b6020020151600161262f565b9450505050806001019050610a2b565b50610b20615291565b5f5b6029811015610b70576101c0870151610b3c600183615b39565b602a8110610b4c57610b4c615b73565b6020020151828260298110610b6357610b63615b73565b6020020152600101610b22565b505f610b8582875f0151886020015186612828565b9050600160025b7f0000000000000000000000000000000000000000000000000000000000000000811015610be257610bd882896080015183601c8110610bce57610bce615b73565b60200201516125fb565b9150600101610b8c565b50610c08610bf5836108cc60018561262f565b6108d18a6101a001518a606001516125fb565b94909414979650505050505050565b5f610c206152b0565b5f610c4f8460c001517f00000000000000000000000000000000000000000000000000000000000000006128a1565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b03811115610c8a57610c8a615940565b604051908082528060200260200182016040528015610cb3578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b03811115610cef57610cef615940565b604051908082528060200260200182016040528015610d2857816020015b610d15615320565b815260200190600190039081610d0d5790505b509050610d5b610d56876101000151855f81518110610d4957610d49615b73565b602002602001015161262f565b61296a565b84610120018181525050610d90610d56876101000151855f81518110610d8357610d83615b73565b6020026020010151612616565b610140850181905261012085015160e0880151610db1926108d191906125fb565b845260c0860151610de190610dc59061296a565b6108cc8661012001516108ef8a60e001518961014001516125fb565b6020850152815160019083905f90610dfb57610dfb615b73565b602002602001018181525050876102400151815f81518110610e1f57610e1f615b73565b6020908102919091010152600160a08501525f60c08501528351610e42906129da565b60408501526020840151610e55906129da565b606085015260015b610e6960016024615b39565b8111610f0a57610e8185604001518660a001516125fb565b838281518110610e9357610e93615b73565b602002602001018181525050610edc8560c001516108d18b6101c00151600185610ebd91906155e0565b602a8110610ecd57610ecd615b73565b60200201518860a001516125fb565b60c086015260a08086015190880151610ef591906125fb565b60a0860152610f0381615b87565b9050610e5d565b505f5b6005811015610fe3575f610f22601e83615b39565b90505f610f3160016024615b39565b610f3b9084615b39565b9050610f6c858381518110610f5257610f52615b73565b60200260200101516108d189606001518a60a001516125fb565b858381518110610f7e57610f7e615b73565b602002602001018181525050610fbb8760c001516108d18d6101c0015184602a8110610fac57610fac615b73565b60200201518a60a001516125fb565b60c088015260a080880151908a0151610fd491906125fb565b60a08801525050600101610f0d565b50876020015181600181518110610ffc57610ffc615b73565b602002602001018190525086606001518160028151811061101f5761101f615b73565b602002602001018190525086608001518160038151811061104257611042615b73565b60200260200101819052508660a001518160048151811061106557611065615b73565b60200260200101819052508660c001518160058151811061108857611088615b73565b60200260200101819052508660e00151816006815181106110ab576110ab615b73565b6020026020010181905250866101000151816007815181106110cf576110cf615b73565b6020026020010181905250866101200151816008815181106110f3576110f3615b73565b60200260200101819052508661014001518160098151811061111757611117615b73565b602002602001018190525086610160015181600a8151811061113b5761113b615b73565b6020026020010181905250866101c0015181600b8151811061115f5761115f615b73565b602002602001018190525086610180015181600c8151811061118357611183615b73565b6020026020010181905250866101a0015181600d815181106111a7576111a7615b73565b6020026020010181905250866101e0015181600e815181106111cb576111cb615b73565b602002602001018190525086610200015181600f815181106111ef576111ef615b73565b60200260200101819052508661022001518160108151811061121357611213615b73565b60200260200101819052508661024001518160118151811061123757611237615b73565b60200260200101819052508661026001518160128151811061125b5761125b615b73565b60200260200101819052508661028001518160138151811061127f5761127f615b73565b6020026020010181905250866102a00151816014815181106112a3576112a3615b73565b6020026020010181905250866102c00151816015815181106112c7576112c7615b73565b6020026020010181905250866102e00151816016815181106112eb576112eb615b73565b60200260200101819052508661030001518160178151811061130f5761130f615b73565b60200260200101819052508661032001518160188151811061133357611333615b73565b60200260200101819052508661034001518160198151811061135757611357615b73565b602002602001018190525086610360015181601a8151811061137b5761137b615b73565b602002602001018190525086610380015181601b8151811061139f5761139f615b73565b6020026020010181905250866103a0015181601c815181106113c3576113c3615b73565b6020026020010181905250866103c0015181601d815181106113e7576113e7615b73565b6020026020010181905250876040015181601e8151811061140a5761140a615b73565b6020026020010181905250876060015181601f8151811061142d5761142d615b73565b602002602001018190525087608001518160208151811061145057611450615b73565b60200260200101819052508760a001518160218151811061147357611473615b73565b60200260200101819052508761012001518160228151811061149757611497615b73565b6020026020010181905250876101000151816023815181106114bb576114bb615b73565b60200260200101819052508760c00151816024815181106114de576114de615b73565b60200260200101819052508760e001518160258151811061150157611501615b73565b60200260200101819052505f61154787608001518660c001518b6102000151877f00000000000000000000000000000000000000000000000000000000000000006129ec565b9050611571815f8151811061155e5761155e615b73565b60200260200101518661012001516125fb565b608086018190526102008a01515160e08901516115a292916108d19161159791906125fb565b8861014001516125fb565b608086015260e08701516115b590612b4a565b60a08601525f6115c760016024615b39565b6115d2906001615b39565b90505f5b61160160017f00000000000000000000000000000000000000000000000000000000000000006155e0565b811015611812575f61163460017f00000000000000000000000000000000000000000000000000000000000000006155e0565b8210159050806117a357611668610d568b6101000151898560016116589190615b39565b81518110610d4957610d49615b73565b6101208901526101008a015161169890610d569089611688866001615b39565b81518110610d8357610d83615b73565b61014089015260a08801516101208901516116b391906125fb565b61016089015260a088015160e08b01516116db916116d0916125fb565b8961014001516125fb565b61018089018190526116fe906116f0906129da565b6108d18a61016001516129da565b866117098486615b39565b8151811061171957611719615b73565b6020026020010181815250505f6117528961018001518e61020001518560016117429190615b39565b601c8110610bce57610bce615b73565b905061178c816108d18b61016001518887600161176f9190615b39565b8151811061177f5761177f615b73565b60200260200101516125fb565b905061179c896080015182612616565b60808a0152505b6117c26117b88960a001518c60e001516125fb565b8b60e001516125fb565b60a08901526101e08c015182601b81106117de576117de615b73565b6020020151856117ee8486615b39565b815181106117fe576117fe615b73565b6020908102919091010152506001016115d6565b5061183e60017f00000000000000000000000000000000000000000000000000000000000000006155e0565b6118489082615b39565b90506118686118608961010001518a60c0015161262f565b60019061266c565b60e08701515261010088015160c08901516118ac91611860916108ef907f07b0c561a6148404f086204a9f36ffb0617942546750f230c893619174a57a76906125fb565b60e0878101805160200192909252815180516040909101529051805160609091015260a0870151908901516118ee916118e4916125fb565b8960e001516125fb565b60a08701525f5b600481101561199c575f6119278860e00151836004811061191857611918615b73565b60200201518960a001516125fb565b9050611932816129da565b886101000151836004811061194957611949615b73565b602002015260a088015160e08b015161196291906125fb565b8860a001818152505061198e88608001516108d1838f61022001518660048110610bce57610bce615b73565b6080890152506001016118f5565b506101008601515184518590839081106119b8576119b8615b73565b602090810291909101810191909152610100870151908101516119dc916002610a7f565b846119e8836001615b39565b815181106119f8576119f8615b73565b60209081029190910101526101008601516060015184611a19836002615b39565b81518110611a2957611a29615b73565b60209081029190910101525f5b6003811015611a8b578a61014001518160038110611a5657611a56615b73565b60200201518483611a6681615b87565b945081518110611a7857611a78615b73565b6020908102919091010152600101611a36565b506040518060400160405280600181526020016002815250838281518110611ab557611ab5615b73565b60200260200101819052508560800151848280611ad190615b87565b935081518110611ae357611ae3615b73565b602002602001018181525050611b0d8a61022001518960c001518a608001518d6101a00151612b55565b611b2a5760405163a2a2ac8360e01b815260040160405180910390fd5b5f8a6102600151905080848381518110611b4657611b46615b73565b6020026020010181905250886101000151858381518110611b6957611b69615b73565b602002602001018181525050611b7d615338565b611b878587612eb8565b8152611b9282612fb0565b602082018190528c5182515f92611baa929190612ff6565b90505f5f611bba8f5f0151613087565b91509150611bc782613148565b611bd081613148565b8351611bdd9083856131e7565b84526020840151611bef9082856131e7565b602085018190528451611c0191613216565b9f9e505050505050505050505050505050565b611c1c615024565b50604080516103e0810182526220000081526015602080830191909152601282840152825180840184527f286493b1bc5a9674ed3d063c79269512944b6dfb58b880361d36fce8a61c981481527f1ef073ead7f7fd307a1a357548e4d8c9f5d03d5a7191cea80b2ba0cf03d18d29818301526060830152825180840184527f216ae5e3bf2a41f792d13f7028ec70fb78ac8d5fa4834341acad58d3453bf12381527f2ef50ace63f2e23d4b2a184ce511e1b7781287457bcc135459c5c56de1877b93818301526080830152825180840184527f04874f63e091441575d7f87163ad2d04fa3e4b49cee4cde183081c90e13ff17f81527f1547db64a1675f5ab99f4dc4cf2af5cfd0ef1fbdb68977d8abc8f7112e88bf808183015260a0830152825180840184527f17094eb4ca2210abcb1b4d41cf1355b04dd66b014d42345e6eadf8407a74ed1a81527f2228aebc15e7852110c94a633f8fb944d71cb1a5cff1b5127d0e4eecf1a7726f8183015260c0830152825180840184527f15cfc9a869b9c86a839a67ab04b780b3049b2d5f10a901055f85d4717428f6dc81527f2aec2a8cee64e9da3981b9d6f9f00faffbe2ece25cd4f57d80b8552d81c716b58183015260e0830152825180840184527f232463dd05273276d135bcdfe18a8b299585d6e0fe220dfafe63a54293476dfe81527f17f763713bb623ce792152d0aabd32b83ca5a6abecb97ece41dc00a1bb6296ad81830152610100830152825180840184527f1ad0852ae1f831506b33a76a4968849abaf87e068b8e00ba462e190ff4dc0ff981527f2b782e70b28e331338317e348ecb3d3ee69c0cb7b1ca634b32395b5349605a9381830152610120830152825180840184527f1a03cf866e6a54045329039071909e3129fefe1a3f380a5db12e3156f6bed47e81527f1bdf1ec93f5b5962d4aac343eaa211a5b8021546f0dc225d03f39cb465546d5a81830152610140830152825180840184527f1940cce3f764969daf23bd6cf6d09ecd7e50392878ce2ba3a0a30c88f619cd3781527f06d183a757a5b2294f8e3b10d3304744bc4d7b68246b01563c48dfd3ab44384281830152610160830152825180840184527f11a96a0fb134b4ad2a3ac7b54fc7989a18ada93ac73e0e7bfb7134f334854c5581527f166911402df98ab7053779cb1f431384018e058cbe2ac79d1d5ff020ce5474d981830152610180830152825180840184527f11b342da18e6325f40bddb950e3ba058fe013e0a6757512f022a0d9961d3d46881527f04225227552dcaa71ff7c4571eebd04ca40091a33ff91d1b220af458dffca289818301526101a0830152825180840184527f1b5b7f1276e5867eef1d033df65d003c591c16bf64bd2d4cb89bccc1a98ab3dd81527f28f55668465e42d873d91d75906232c6f05bf37be890e4d4c0ef6a1d5df8c211818301526101c0830152825180840184527f18ae1c0c284757fd6a6bcf60413a8e2334fcb46562ea30b9cb9444a66349346381527f1cade59f171ec1d94348309a02e1642067d6e6b43eb254837e703c1488dff221818301526101e0830152825180840184527f2537fc03ae8cfc49498d0a04704d77e10d6477d6b7c5e515cf24dadab0dee87481527f0850d14d62e2c194a69110f3aefa10d6caea9bf6ff940331877c5f49e41e5fa781830152610200830152825180840184527f02f24bc3b670a81abc44133de34592b13bb3a5ea67cdaa1d73ad35965b8abe4981527f0c62df1ee51bfbaeba2a75c1cc8aa8a2ea3222f21bc0b8958bd43c3aa749e96381830152610220830152825180840184527f21ac9dc80bd7f54e6817d224b7650c4176407a1109f92567c05676ac1fe0973c81527f2d325ad91e20be879c716023bcde84d469c4f7867c12bb321c387e4a1036f86d81830152610240830152825180840184527f25b123800356ccc6d7a609989a0e4fc132bf757389ca25f0c1db7612bbec234981527f03832b0106e3581612f83d158277886cc9e5637790fccabde84b3218220f2a4881830152610260830152825180840184527f25962cb0996ebaeea7b01f8860fde2547f8bb738291e53c7f25a4ac80af4fd2e81527f22ec82955d2dc95fddc9cf9fd4f7aa555635abb02cf6eeb7ac3df225c8b62d5281830152610280830152825180840184527f1332d280da268502ba2d853e14e53baf604c7a6a41b7e70bdf2e861cc6a5982181527f0d14761f5281d5dc1209b25146d92d9e5692294f818c8c3468c9921f7a7cce79818301526102a0830152825180840184527f1b215ab72c8af91207dee6f8ac01f0e0d51895a9f670d7173c7b6d5b80a3908581527f04ee544edd280fa185c8d9886c9e19832ef71d67fab5093eadeec49ccc5a34b1818301526102c0830152825180840184527f11005f2ce25b6f954b89343fa059782ab8ecdc84d411c828cc7dfd54f796b6f681527f0c68694f3595aecaaffdff52c0fa5f1d05fa8c7ba651da1220634fa4b8867ba7818301526102e0830152825180840184527f1145c2f8face74c268cc68c772d99c59587659cbd594a1aef32a36ab556621e281527f1ffa60a61a074aa68c8412fd9f3b4ae61437cf3ff3f0497e1244ba56370d7b9181830152610300830152825180840184527f099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d2681527e15b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f81830152610320830152825180840184527f1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e81527f305e8992b148eedb22e6e992077a84482141c7ebe42000a1d58ccb74381f6d1981830152610340830152825180840184527f061f64497996e8915722501e9e367938ed8da2375186b518c7345c60b1134b2d81527f1b84d38339321f405ebaf6a2f830842ad3d7cb59792e11c0d2691f317fd50e6e81830152610360830152825180840184527f043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce81527f261522c4089330646aff96736194949330952ae74c573d1686d9cb4a007338548183015261038083015282518084018452600181526002818301526103a083015282518084019093527f1f0071e7d3b9be4c8376ff230b3b8b242585d403d25463022d38e574cb0b575483527f19cb572dac34151573e3024878327a8ea7febb3d76c6171b10d1e3f2f2907584908301526103c081019190915290565b5f6103f461255c8385615b9f565b612657565b612569615320565b60408051808201909152805f516020615c6e5f395f51905f5261258f60205f8789615b4c565b61259891615b9f565b6125a29190615bbc565b81526020908101905f516020615c6e5f395f51905f52906125c7906040908789615b4c565b6125d091615b9f565b6125da9190615bbc565b90529392505050565b5f5f516020615c8e5f395f51905f52825b0692915050565b5f5f516020615c8e5f395f51905f5282840990505b92915050565b5f5f516020615c8e5f395f51905f528284089392505050565b5f5f516020615c8e5f395f51905f52825f516020615c8e5f395f51905f520384089392505050565b5f5f516020615c8e5f395f51905f52826125f4565b5f6103f4836108cc8461296a565b5f5f604051806101200160405280619d8081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec5181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd31815260200161024081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd3181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec518152602001619d8081525090505f600190505f5f90505b600981101561277357612769826108cc878461262f565b9150600101612752565b5061277c61534b565b5f5b60098110156127cd576127ae610d5685836009811061279f5761279f615b73565b60200201516108cc898561262f565b8282600981106127c0576127c0615b73565b602002015260010161277e565b505f5b600981101561281357612809856108d18984600981106127f2576127f2615b73565b6020020151858560098110610bce57610bce615b73565b94506001016127d0565b5061281e84836125fb565b9695505050505050565b5f61283161536a565b61283c86828561340a565b612848868683866135b6565b612854868683866137a2565b61285f8682856139c7565b61286a868285613bbb565b61287686868386613f04565b6128818682856143b0565b61288c8682856147c2565b612897868285614b83565b61281e8185614e83565b60605f826001600160401b038111156128bc576128bc615940565b6040519080825280602002602001820160405280156128e5578160200160208202803683370190505b50905083815f815181106128fb576128fb615b73565b602090810291909101015260015b838110156129625761293d826129206001846155e0565b8151811061293057612930615b73565b6020026020010151612b4a565b82828151811061294f5761294f615b73565b6020908102919091010152600101612909565b509392505050565b5f5f8290505f604051602081526020808201526020604082015282606082015260025f516020615c8e5f395f51905f520360808201525f516020615c8e5f395f51905f5260a082015260205f60c08360055afa806129c6575f5ffd5b505f51608091909101604052949350505050565b5f516020615c8e5f395f51905f520390565b60605f826001600160401b03811115612a0757612a07615940565b604051908082528060200260200182016040528015612a30578160200160208202803683370190505b509050825b8015612b3f575f85612a486001846155e0565b81518110612a5857612a58615b73565b602002602001015190505f89600184612a7191906155e0565b601c8110612a8157612a81615b73565b602002015190505f612adc612aa0612a99858d6125fb565b60026125fb565b6108ef8b612aaf6001896155e0565b601c8110612abf57612abf615b73565b60200201516108cc612ad6886108cc60018a61262f565b8761262f565b9050612afd816108cc610d56612af7876108cc60018961262f565b86612616565b99508990508085612b0f6001876155e0565b81518110612b1f57612b1f615b73565b60200260200101818152505050505080612b3890615bdb565b9050612a35565b509695505050505050565b5f61261082836125fb565b5f600181612b6e612b6887610100614edc565b8361262f565b905080612b8e5760405163835eb8f760e01b815260040160405180910390fd5b612b96615389565b80518390525f5b7f0000000000000000000000000000000000000000000000000000000000000000811015612c7f575f612bd18260096155c9565b612bdc906001615b39565b905084835f0151826101008110612bf557612bf5615b73565b60200201525f612c06826001615b39565b90505b612c14600983615b39565b811015612c75578351612c5490612c2c6001846155e0565b6101008110612c3d57612c3d615b73565b60200201518a85601c8110610bce57610bce615b73565b8451826101008110612c6857612c68615b73565b6020020152600101612c09565b5050600101612b9d565b50608081018390525f602082018190525b610100811015612d9057612cb1612cab83608001518a6125fb565b8561262f565b8260a00151826101008110612cc857612cc8615b73565b602002015260a0820151612cf290826101008110612ce857612ce8615b73565b602002015161296a565b8260a00151826101008110612d0957612d09615b73565b602002018181525050612d4f82602001516108d1845f0151846101008110612d3357612d33615b73565b60200201518560a00151856101008110610bce57610bce615b73565b60208301526080820151612d83907f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d66125fb565b6080830152600101612c90565b505f612da1836108cc61010061296a565b9050612db18260200151826125fb565b602083015260a0820151612dcc905f5b6020020151826125fb565b604083015260a0820151612df890612de760016101006155e0565b6101008110612dc157612dc1615b73565b60608301526040820151612e0e908a6002610bce565b60c08301819052612e6e906108d1612e468b7f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d661262f565b60208d015160408e01516108cc91612e5d9161262f565b8e5160208901516108ef91906125fb565b60c083018190526060830151612ea391612e97916108d1906108cc8e600260200201518c61262f565b6108ef858c6003610bce565b60c08301819052159998505050505050505050565b612ec0615320565b7f00000000000000000000000000000000000000000000000000000000000000005f5b81811015612f1557612f0d858281518110612f0057612f00615b73565b6020026020010151613148565b600101612ee3565b50604051600190815b60018401811015612f7a5760208102870160208202870181515160408501528151602001516060850152805160808501525050604080830160606040850160075afa8316925060408260808460065afa90921691600101612f1e565b5080518452602081015160208501525080612fa8576040516352ec174560e11b815260040160405180910390fd5b505092915050565b612fb8615320565b5f516020615c6e5f395f51905f5282602001515f516020615c6e5f395f51905f52612fe391906155e0565b612fed9190615bbc565b60208301525090565b5f5f5f61300286613087565b9150915061300e6153cd565b82518152602080840151818301528251604080840191909152838201516060840152875160808401528782015160a0840152865160c08401528682015160e08401525161307c9161306191849101615bf0565b60405160208183030381529060405280519060200120612657565b979650505050505050565b61308f615320565b613097615320565b82516020808501516040860151606087015160cc90811b608892831b604494851b90961795909517949094178652608087015160a088015160c089015160e08a0151871b90841b91851b9092171717868401526101008701516101208801516101408901516101608a0151871b90841b91851b909217171785526101808701516101a08801516101c08901516101e09099015190951b9790911b9390911b1791909117939093179281019290925291565b805160208201515f5f516020615c6e5f395f51905f528380095f516020615c6e5f395f51905f5260035f516020615c6e5f395f51905f52838709085f516020615c6e5f395f51905f5284850914915050806131e15760405162461bcd60e51b8152602060048201526019602482015278706f696e74206973206e6f74206f6e2074686520637572766560381b60448201526064016100e5565b50505050565b6131ef615320565b6131f7615320565b6132018386614f3d565b905061320d8185614f93565b95945050505050565b81516020808401518351848301516040805194850195909552938301919091527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260608301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60808301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60a08301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60c083015260e08201526101008101919091527f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c16101208201527f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b06101408201527f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe46101608201527f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e556101808201525f9081906101a00160405160208183030381529060405290505f5f60086001600160a01b0316836040516133ac9190615c24565b5f60405180830381855afa9150503d805f81146133e4576040519150601f19603f3d011682016040523d82523d5f602084013e6133e9565b606091505b509150915081801561281e57508080602001905181019061281e9190615c3a565b5f613416846007614ff4565b90507f183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f80000005f61347761347161344b85600361262f565b6108cc61346661345b8b5f614ff4565b6108cc8c601d614ff4565b6108cc8b601c614ff4565b836125fb565b90506134f86134ed6134d46134bb6134a2856108d16134978d6002614ff4565b6108cc8e601c614ff4565b6108d16134b08c6003614ff4565b6108cc8d601d614ff4565b6108d16134c98b6004614ff4565b6108cc8c601e614ff4565b6108d16134e28a6005614ff4565b6108cc8b601f614ff4565b6108d1886001614ff4565b9050613517816108d161350c86600161262f565b6108cc8a6027614ff4565b905061352381846125fb565b905061352f81856125fb565b8552505f905061356961355f61355461354988601c614ff4565b6108d189601f614ff4565b6108ef886024614ff4565b6108d1875f614ff4565b905061357a816108cc84600261262f565b905061358b816108cc84600161262f565b905061359781836125fb565b90506135a381846125fb565b9050808460015b60200201525050505050565b5f5f5f6135ec6135e26135ca89601c614ff4565b6108d16135d88b6012614ff4565b8a606001516125fb565b8760800151612616565b9050613625816108cc61361b6136038b601d614ff4565b6108d16136118d6013614ff4565b8c606001516125fb565b8960800151612616565b905061364a816108cc61361b61363c8b601e614ff4565b6108d16136118d6014614ff4565b905061366f816108cc61361b6136618b601f614ff4565b6108d16136118d6015614ff4565b92505f90506136936135e261368589601c614ff4565b6108d16135d88b600e614ff4565b90506136b8816108cc61361b6136aa8b601d614ff4565b6108d16136118d600f614ff4565b90506136dd816108cc61361b6136cf8b601e614ff4565b6108d16136118d6010614ff4565b9050613702816108cc61361b6136f48b601f614ff4565b6108d16136118d6011614ff4565b91505f9050613729613723613718896020614ff4565b6108d18a601a614ff4565b846125fb565b905061375e816108ef6137586137408b6028614ff4565b6108d161374e8d601b614ff4565b8c60a001516125fb565b856125fb565b905061376a81856125fb565b6040860152505f61378d61375861378289601b614ff4565b6108cc8a6028614ff4565b9050808560035b602002015250505050505050565b5f5f6138006137e86137d06137bb61361b8a6016614ff4565b6108d16137c98b6017614ff4565b8a516125fb565b6108d16137de8a6018614ff4565b89602001516125fb565b6108d16137f6896019614ff4565b88604001516125fb565b91505f61383761381e61381489601c614ff4565b8860800151612616565b6108d161382c8a6003614ff4565b6108cc8b6024614ff4565b90505f61386061384889601d614ff4565b6108d16138558b5f614ff4565b6108cc8c6025614ff4565b90505f61388a6138718a601e614ff4565b6108d161387f8c6001614ff4565b6108cc8d6026614ff4565b90506138c96138b16138a3856108d1868d5f01516125fb565b6108d1848c602001516125fb565b6108d16138bf8c6004614ff4565b8b604001516125fb565b93505050505f6138dd613723886021614ff4565b90505f6138ee613723896021614ff4565b90505f61392661390d6139028b6023614ff4565b6108d18c6006614ff4565b6108ef61391b8c6023614ff4565b6108cc8d6006614ff4565b90505f613944612b6861393987896125fb565b6108cc8d6021614ff4565b905061395081886125fb565b90505f61397861396a6139648d6006614ff4565b876125fb565b6108ef6139648e6022614ff4565b90505f6139868c6023614ff4565b90505f613996612b6883846125fb565b60808c0185905260a08c0184905290506139b0818b6125fb565b8b6006602002015250505050505050505050505050565b5f6139d35f600161262f565b90505f6139e15f600261262f565b90505f6139ef5f600361262f565b90505f613a0b613a0088601d614ff4565b6108ef89601c614ff4565b90505f613a27613a1c89601e614ff4565b6108ef8a601d614ff4565b90505f613a43613a388a601f614ff4565b6108ef8b601e614ff4565b90505f613a5f613a548b6024614ff4565b6108ef8c601f614ff4565b905083613a70816108cc818b612616565b9050613a80816108cc878a612616565b9050613a90816108cc8789612616565b9050613aa1816108cc8d6008614ff4565b9050613aad818a6125fb565b60e08b01525082613ac2816108cc818b612616565b9050613ad2816108cc868a612616565b9050613ae2816108cc8689612616565b9050613af3816108cc8d6008614ff4565b9050613aff818a6125fb565b6101008b01525081613b15816108cc818b612616565b9050613b25816108cc858a612616565b9050613b35816108cc8589612616565b9050613b46816108cc8d6008614ff4565b9050613b52818a6125fb565b6101208b01525080613b68816108cc818b612616565b9050613b78816108cc848a612616565b9050613b88816108cc8489612616565b9050613b99816108cc8d6008614ff4565b9050613ba5818a6125fb565b610140909a019990995250505050505050505050565b613bf46040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613bff84601d614ff4565b8152613c0c84601e614ff4565b6020820152613c1c846024614ff4565b6040820152613c2c846027614ff4565b6060820152613c3c846026614ff4565b6080820152613c4c846025614ff4565b60a08201525f613c5d856002614ff4565b90505f613c6a865f614ff4565b90505f613c7e8460400151855f015161262f565b90505f613c93856020015186602001516125fb565b606086015190915086905f90613ca990806125fb565b90505f613cc7613cc189602001518a606001516125fb565b886125fb565b90505f613ce6613cdf8a60a001518b60400151612616565b8a51612616565b9050613cf561396482886125fb565b9050613d1c613d16613d10613d0a848761262f565b8861262f565b84612616565b83612616565b9050613d44613d39613d2e83876125fb565b6108cc8f6009614ff4565b6108cc60018a61262f565b6101608c015250505050602085015160808601515f91613d6391612616565b90505f613d81613d778860600151886125fb565b886020015161262f565b90505f613da5613d9184876125fb565b6108d16137588b60a001518c5f015161262f565b9050613dcd613dc2613db7838c6125fb565b6108cc8e6009614ff4565b6108cc60018961262f565b6101808b0152505f9150613dee9050613de7836011612616565b87516125fb565b90505f613dfb8384612616565b9050613e078182612616565b90505f613e158360096125fb565b9050613e3e613e38613723613e318b60a001518c5f0151612616565b8b51612616565b8261262f565b60c089018190525f90613e5990613cc190613d2e908d6125fb565b9050613e6c8b600b602002015182612616565b6101608c0152505086515f9250613e939150613de790613e8c9080612616565b8851612616565b90505f613ed3613eae836108cc8a5f01518b60a0015161262f565b60208901516108ef90613ec19080612616565b6108cc8b602001518c60800151612616565b9050613ef089600c60200201516108d1613cc1613d2e858d6125fb565b89600c602002015250505050505050505050565b613f6e604051806101e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613f86613f7c86601e614ff4565b85604001516125fb565b808252613fa5906108d1613f9b88601d614ff4565b87602001516125fb565b808252613fba906108d1613de788601c614ff4565b808252613fcc906108d1876001614ff4565b80825260208201819052613fe5906108ef87601f614ff4565b8152614000613ff5866024614ff4565b6108ef87601c614ff4565b608082015261401e614013866027614ff4565b6108ef87601f614ff4565b60608201526080810151614037906108cc81600161262f565b6101c082015260808101516140779061406d90614066906108cc60015f516020615c8e5f395f51905f526155e0565b6001612616565b82606001516125fb565b60a082018190526140ad9061409f906108cc614094896002614ff4565b6108cc8a6003614ff4565b6108cc61375888600a614ff4565b83600e60200201526101c08101516140d19061409f906108cc614094896002614ff4565b6101e084015280516140f6906108cc6140eb886002614ff4565b6108cc896003614ff4565b6101208201525f61411561410b87601f614ff4565b836020015161262f565b9050614126816108cc83600161262f565b60e0830152614143614139876026614ff4565b86604001516125fb565b60408301819052614166906108d161415c896025614ff4565b88602001516125fb565b60408301819052614186906108d161417f896024614ff4565b88516125fb565b60408301526141a3614199876027614ff4565b836040015161262f565b60408301525f6141c26141b7886026614ff4565b6108ef89601e614ff4565b90506142146141ef613471614066866080015160015f516020615c8e5f395f51905f526108cc91906155e0565b6108cc614066866040015160015f516020615c8e5f395f51905f526108cc91906155e0565b60c084015260408301516142369061422c90806125fb565b846040015161262f565b61010084015260c083015161426290614254906108cc8a6004614ff4565b6108cc6139648a600a614ff4565b6102008601526101c083015161428190614254906108cc8a6004614ff4565b6102208601526101008301516142a090614254906108cc8a6004614ff4565b61024086015260e08301516142ba906108cc896004614ff4565b6101408401526142d96142ce886025614ff4565b6108ef89601d614ff4565b6101608401526080830151614317906141b79061430c90614066906108cc60015f516020615c8e5f395f51905f526155e0565b8561016001516125fb565b61018084018190526101208401516101a0850181905261434e916108d1906108cc6143438c6005614ff4565b6108cc8d6002614ff4565b6101a08401819052835161436e91906108d1906108cc6143438c5f614ff4565b6101a084018190526101408401516143869190612616565b6101a084018190526143a0906108cc6139648a600a614ff4565b6101a0840181905285600d613794565b6143e96040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61441e6144056143fa86601c614ff4565b6108cc876025614ff4565b6108d1614413876024614ff4565b6108cc88601d614ff4565b815261446361445861443f61443487601c614ff4565b6108cc88601f614ff4565b6108d161444d88601d614ff4565b6108cc89601e614ff4565b6108ef866026614ff4565b6040820181905261447890600160441b6125fb565b6040820181905261448e906108ef866027614ff4565b6040820181905281516144a19190612616565b604082018190526144b7906108cc866005614ff4565b604082015280516144cc90600160441b6125fb565b8082526144ec906108d16144e1876024614ff4565b6108cc886025614ff4565b80825260208201819052614513906108ef61450887601e614ff4565b6108d188601f614ff4565b60208201819052614529906108cc866004614ff4565b6020820152805160608201819052614546906108d186601f614ff4565b6060820181905261456a906108ef61455f876026614ff4565b6108d1886027614ff4565b6060820181905261457f906108cc865f614ff4565b8160600181815250505f6145a861459e83602001518460400151612616565b8360600151612616565b90506145b9816108cc876003614ff4565b90506145d16145c9866025614ff4565b6140006125fb565b608083018190526145e7906108d1876024614ff4565b608083018190526145fa906140006125fb565b60808301819052614610906108d187601e614ff4565b60808301819052614623906140006125fb565b60808301819052614639906108d187601d614ff4565b6080830181905261464c906140006125fb565b60808301819052614662906108d187601c614ff4565b60808301819052614678906108ef87601f614ff4565b6080830181905261468e906108cc876005614ff4565b60808301526146a16145c9866026614ff4565b60a083018190526146b7906108d1876025614ff4565b60a083018190526146ca906140006125fb565b60a083018190526146e0906108d1876024614ff4565b60a083018190526146f3906140006125fb565b60a08301819052614709906108d187601f614ff4565b60a0830181905261471c906140006125fb565b60a08301819052614732906108d187601e614ff4565b60a08301819052614748906108ef876027614ff4565b60a0830181905261475d906108cc875f614ff4565b60a0830181905260808301515f916147759190612616565b9050614786816108cc886004614ff4565b90506147928282612616565b60c084018190526147ab906108cc61396489600b614ff4565b60c084018190528560136020020152505050505050565b6148386040518061022001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61485161484685601c614ff4565b6108d1866002614ff4565b815261486c61486185601d614ff4565b6108d1866003614ff4565b602082015261488a61487f85601e614ff4565b6108d1866004614ff4565b60408201526148a861489d85601f614ff4565b6108d1866005614ff4565b606082015280516148da906148d3906148cc906148c590806125fb565b84516125fb565b83516125fb565b82516125fb565b608082015260208101516149189061490e90614904906148fa90806125fb565b84602001516125fb565b83602001516125fb565b82602001516125fb565b60a082015260408101516149569061494c906149429061493890806125fb565b84604001516125fb565b83604001516125fb565b82604001516125fb565b60c0820152606081015161498a9061406d906149809061497690806125fb565b84606001516125fb565b83606001516125fb565b60e0820152608081015160a08201516149a39190612616565b61010082015260c081015160e08201516149bd9190612616565b61012082015260a08101516149e1906149d69080612616565b826101200151612616565b61014082015260e0810151614a05906149fa9080612616565b826101000151612616565b610160820152610120810151614a1b9080612616565b6101e08201819052614a3c90614a319080612616565b826101600151612616565b6101e0820152610100810151614a529080612616565b6101a08201819052614a7390614a689080612616565b826101400151612616565b6101a08201819052610160820151614a8a91612616565b6101808201526101408101516101e0820151614aa69190612616565b6101c0820152614aba61347185600c614ff4565b6102008201819052610280840151610180830151614ae5926108d1916108cc906108ef8a6024614ff4565b8360146020020152614b1583601560200201516108d18361020001516108cc856101a001516108ef8a6025614ff4565b8360156020020152614b4583601660200201516108d18361020001516108cc856101c001516108ef8a6026614ff4565b8360166020020152614b7583601760200201516108d18361020001516108cc856101e001516108ef8a6027614ff4565b836017602002015250505050565b614bd56040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f6040518060800160405280614c0a7f10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e76125e3565b8152602001614c387f0c28145b6a44df3e0149b3d0a30b3bb599df9756d4dd9b84a86b38cfb45a740b6125e3565b8152602001614c657e544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac156125e3565b8152602001614c937f222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428b6125e3565b90529050614cb0614ca586601c614ff4565b6108d1876002614ff4565b6101208301819052614cef90614ce490614cd990614cce90806125fb565b8561012001516125fb565b8461012001516125fb565b8361012001516125fb565b8252614cfc85601d614ff4565b6020830152614d0c85601e614ff4565b6040830152614d1c85601f614ff4565b606083015281516020830151614d449161459e91614d3a9190612616565b8460400151612616565b6080830152614d5761372386600d614ff4565b6101408301528151614d7890614d6e90835f610bce565b8360800151612616565b60a0830152614da484601860200201516108d18461014001516108cc8660a001516108ef8b6024614ff4565b6103008501526020820151614dbf90614d6e90836001610bce565b60c0830152614deb84601960200201516108d18461014001516108cc8660c001516108ef8b6025614ff4565b6103208501526040820151614e0690614d6e90836002610bce565b60e0830152614e3284601a60200201516108d18461014001516108cc8660e001516108ef8b6026614ff4565b6103408501526060820151614e4d90614d6e90836003610bce565b610100830152614e7b84601b60200201516108d18461014001516108cc8661010001516108ef8b6027614ff4565b84601b6135aa565b815160015b601c811015614ed557614ecb826108d18684601c8110614eaa57614eaa615b73565b602002015186614ebb6001876155e0565b601b8110610bce57610bce615b73565b9150600101614e88565b5092915050565b5f5f8390505f60405160208152602080820152602060408201528260608201528460808201525f516020615c8e5f395f51905f5260a082015260205f60c08360055afa80614f28575f5ffd5b505f5160809190910160405295945050505050565b614f45615320565b614f4d615320565b604051835181526020840151602082015284604082015260408160608360075afa80614f77575f5ffd5b5080518252602080820151908301526060016040529392505050565b614f9b615320565b614fa3615320565b6040518451815260208501516020820152835160408201526020840151606082015260408160808360065afa80614fd8575f5ffd5b5080518252602080820151908301526080016040529392505050565b5f8282602881111561500857615008615c59565b6029811061501857615018615b73565b60200201519392505050565b604051806103e001604052805f81526020015f81526020015f815260200161504a615320565b8152602001615057615320565b8152602001615064615320565b8152602001615071615320565b815260200161507e615320565b815260200161508b615320565b8152602001615098615320565b81526020016150a5615320565b81526020016150b2615320565b81526020016150bf615320565b81526020016150cc615320565b81526020016150d9615320565b81526020016150e6615320565b81526020016150f3615320565b8152602001615100615320565b815260200161510d615320565b815260200161511a615320565b8152602001615127615320565b8152602001615134615320565b8152602001615141615320565b815260200161514e615320565b815260200161515b615320565b8152602001615168615320565b8152602001615175615320565b8152602001615182615320565b815260200161518f615320565b815260200161519c615320565b81526020016151a9615320565b905290565b6040518061028001604052806151c26153ec565b81526020016151cf615320565b81526020016151dc615320565b81526020016151e9615320565b81526020016151f6615320565b8152602001615203615320565b8152602001615210615320565b815260200161521d615320565b815260200161522a615320565b8152602001615237615320565b815260200161524461540b565b81526020015f8152602001615257615438565b81526020015f815260200161526a615466565b8152602001615277615485565b815260200161528461536a565b815260200161518f6154b3565b6040518061052001604052806029906020820280368337509192915050565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020016152ee6154b3565b81526020016152fb6154b3565b81526020015f81526020015f81526020015f81526020015f8152602001606081525090565b60405180604001604052805f81526020015f81525090565b604051806040016040528061519c615320565b6040518061012001604052806009906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b6040518060e0016040528061539c6154d1565b81526020015f81526020015f81526020015f81526020015f81526020016153c16154d1565b81526020015f81525090565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b60405180606001604052806003905b615422615320565b81526020019060019003908161541a5790505090565b604051806103800160405280601c905b61545061534b565b8152602001906001900390816154485790505090565b604051806105400160405280602a906020820280368337509192915050565b604051806103600160405280601b905b61549d615320565b8152602001906001900390816154955790505090565b60405180608001604052806004906020820280368337509192915050565b604051806120000160405280610100906020820280368337509192915050565b5f5f5f5f60408587031215615504575f5ffd5b84356001600160401b03811115615519575f5ffd5b8501601f81018713615529575f5ffd5b80356001600160401b0381111561553e575f5ffd5b87602082840101111561554f575f5ffd5b6020918201955093508501356001600160401b0381111561556e575f5ffd5b8501601f8101871361557e575f5ffd5b80356001600160401b03811115615593575f5ffd5b8760208260051b84010111156155a7575f5ffd5b949793965060200194505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417612610576126106155b5565b81810381811115612610576126106155b5565b805f5b60108110156131e15781518452602093840193909101906001016155f6565b805f5b60038110156131e15761563684835180518252602090810151910152565b6040939093019260209190910190600101615618565b805f5b601c8110156131e1578151845f5b600981101561567c57825182526020928301929091019060010161565d565b50505061012093909301926020919091019060010161564f565b805f5b602a8110156131e1578151845260209384019390910190600101615699565b805f5b601b8110156131e1576156d984835180518252602090810151910152565b60409390930192602091909101906001016156bb565b805f5b601c8110156131e15781518452602093840193909101906001016156f2565b805f5b60048110156131e1578151845260209384019390910190600101615714565b8183525f6001600160fb1b0383111561574a575f5ffd5b8260051b80836020870137939093016020019392505050565b61576e8188516155f3565b5f602088015161578c61020084018280518252602090810151910152565b5060408801518051610240840152602090810151610260840152606089015180516102808501528101516102a0840152608089015180516102c08501528101516102e084015260a0890151805161030085015281015161032084015260c0890151805161034085015281015161036084015260e089015180516103808501528101516103a084015261010089015180516103c08501528101516103e084015261012089015180516104008501520151610420830152610140880151615855610440840182615615565b5061016088015161050083015261018088015161587661052084018261564c565b506101a08801516124a08301526101c08801516158976124c0840182615696565b506101e08801516158ac612a008401826156b8565b506102008801516158c16130c08401826156ef565b506102208801516158d6613440840182615711565b5061024088015180516134c08401526020908101516134e0840152610260890151805161350085015201516135208301526135c0613540830181905261591f9083018789615733565b613560830195909552506135808101929092526135a0909101529392505050565b634e487b7160e01b5f52604160045260245ffd5b60405161014081016001600160401b038111828210171561597757615977615940565b60405290565b604051601f8201601f191681016001600160401b03811182821017156159a5576159a5615940565b604052919050565b5f60c082840312156159bd575f5ffd5b60405160c081016001600160401b03811182821017156159df576159df615940565b604090815283518252602080850151908301528381015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b5f82601f830112615a30575f5ffd5b5f610360615a3d8161597d565b915083018185821115615a4e575f5ffd5b845b82811015615a68578051825260209182019101615a50565b509195945050505050565b5f82601f830112615a82575f5ffd5b5f610380615a3d8161597d565b5f610be0828403128015615aa1575f5ffd5b50615aaa615954565b615ab484846159ad565b8152615ac38460c08501615a21565b6020820152615ad6846104208501615a73565b60408201526107a08301516060820152615af4846107c08501615a73565b6080820152610b4083015160a0820152610b6083015160c0820152610b8083015160e0820152610ba0830151610100820152610bc09092015161012083015250919050565b80820180821115612610576126106155b5565b5f5f85851115615b5a575f5ffd5b83861115615b66575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52603260045260245ffd5b5f60018201615b9857615b986155b5565b5060010190565b80356020831015612610575f19602084900360031b1b1692915050565b5f82615bd657634e487b7160e01b5f52601260045260245ffd5b500690565b5f81615be957615be96155b5565b505f190190565b5f8183825b6008811015615c14578151835260209283019290910190600101615bf5565b5050506101008201905092915050565b5f82518060208501845e5f920191825250919050565b5f60208284031215615c4a575f5ffd5b815180151581146103f4575f5ffd5b634e487b7160e01b5f52602160045260245ffdfe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a", - "linkReferences": { - "project/contracts/verifier/RecursiveAggregationFoldVerifier.sol": { - "ZKTranscriptLib": [ - { - "length": 20, - "start": 689 - } - ] - } - }, - "deployedLinkReferences": { - "project/contracts/verifier/RecursiveAggregationFoldVerifier.sol": { - "ZKTranscriptLib": [ - { - "length": 20, - "start": 360 - } - ] - } - }, - "immutableReferences": { - "7752": [ - { - "length": 32, - "start": 91 - }, - { - "length": 32, - "start": 148 - }, - { - "length": 32, - "start": 257 - }, - { - "length": 32, - "start": 466 - }, - { - "length": 32, - "start": 2605 - }, - { - "length": 32, - "start": 2958 - }, - { - "length": 32, - "start": 3115 - }, - { - "length": 32, - "start": 5411 - }, - { - "length": 32, - "start": 5597 - }, - { - "length": 32, - "start": 5648 - }, - { - "length": 32, - "start": 6170 - }, - { - "length": 32, - "start": 11167 - } - ], - "7754": [ - { - "length": 32, - "start": 398 - } - ], - "7756": [ - { - "length": 32, - "start": 432 - }, - { - "length": 32, - "start": 2303 - } - ], - "7758": [ - { - "length": 32, - "start": 3156 - }, - { - "length": 32, - "start": 3257 - }, - { - "length": 32, - "start": 11970 - } - ] - }, - "inputSourceName": "project/contracts/verifier/RecursiveAggregationFoldVerifier.sol", - "buildInfoId": "solc-0_8_28-543ccb35c9b85334df682667ad98480ea27e7555" -} \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/verifier/RecursiveAggregationFoldVerifier.sol/ZKTranscriptLib.json b/packages/enclave-contracts/artifacts/contracts/verifier/RecursiveAggregationFoldVerifier.sol/ZKTranscriptLib.json deleted file mode 100644 index d05f0d8dd0..0000000000 --- a/packages/enclave-contracts/artifacts/contracts/verifier/RecursiveAggregationFoldVerifier.sol/ZKTranscriptLib.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "_format": "hh3-artifact-1", - "contractName": "ZKTranscriptLib", - "sourceName": "contracts/verifier/RecursiveAggregationFoldVerifier.sol", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "Fr[16]", - "name": "pairingPointObject", - "type": "uint256[16]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "geminiMaskingPoly", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "w1", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "w2", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "w3", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "w4", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "lookupReadCounts", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "lookupReadTags", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "lookupInverses", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "zPerm", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point[3]", - "name": "libraCommitments", - "type": "tuple[3]" - }, - { - "internalType": "Fr", - "name": "libraSum", - "type": "uint256" - }, - { - "internalType": "Fr[9][28]", - "name": "sumcheckUnivariates", - "type": "uint256[9][28]" - }, - { - "internalType": "Fr", - "name": "libraEvaluation", - "type": "uint256" - }, - { - "internalType": "Fr[42]", - "name": "sumcheckEvaluations", - "type": "uint256[42]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point[27]", - "name": "geminiFoldComms", - "type": "tuple[27]" - }, - { - "internalType": "Fr[28]", - "name": "geminiAEvaluations", - "type": "uint256[28]" - }, - { - "internalType": "Fr[4]", - "name": "libraPolyEvals", - "type": "uint256[4]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "shplonkQ", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "kzgQuotient", - "type": "tuple" - } - ], - "internalType": "struct Honk.ZKProof", - "name": "proof", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "publicInputs", - "type": "bytes32[]" - }, - { - "internalType": "uint256", - "name": "vkHash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicInputsSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "logN", - "type": "uint256" - } - ], - "name": "generateTranscript", - "outputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "Fr", - "name": "eta", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "etaTwo", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "etaThree", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "beta", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "gamma", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "publicInputsDelta", - "type": "uint256" - } - ], - "internalType": "struct Honk.RelationParameters", - "name": "relationParameters", - "type": "tuple" - }, - { - "internalType": "Fr[27]", - "name": "alphas", - "type": "uint256[27]" - }, - { - "internalType": "Fr[28]", - "name": "gateChallenges", - "type": "uint256[28]" - }, - { - "internalType": "Fr", - "name": "libraChallenge", - "type": "uint256" - }, - { - "internalType": "Fr[28]", - "name": "sumCheckUChallenges", - "type": "uint256[28]" - }, - { - "internalType": "Fr", - "name": "rho", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "geminiR", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "shplonkNu", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "shplonkZ", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "publicInputsDelta", - "type": "uint256" - } - ], - "internalType": "struct ZKTranscript", - "name": "t", - "type": "tuple" - } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "bytecode": "0x6116f3610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063995bf45714610038575b5f5ffd5b61004b610046366004611214565b610061565b604051610058919061144a565b60405180910390f35b610069610d76565b5f610078888888888886610128565b9083529050610087818961017c565b6020840191909152905061009b818461026c565b604084019190915290506100af8189610315565b606084019190915290506100c4888285610376565b608084019190915290506100d88882610445565b60a084019190915290506100ed8882856105cb565b60c0840191909152905061010288828561073d565b60e0840191909152905061011688826108bf565b50610100830152509695505050505050565b610130610ddb565b5f61013e88888888886108fc565b60408601919091526020850191909152908352925061015d8389610c6a565b6080850191909152606084019190915291989197509095505050505050565b610184610e0b565b5f61018d610e2a565b8481526101008401805151602080840191909152905181015160408084019190915261012086018051516060850152518201516080840152516101f1916101d69184910161151f565b60405160208183030381529060405280519060200120610cf2565b91505f6101fd83610d18565b50808552905060015b6102126001601c611566565b8110156102625761024385610228600184611566565b601b81106102385761023861150b565b602002015183610d48565b8582601b81106102555761025561150b565b6020020152600101610206565b5050509250929050565b610274610e48565b5f61028b846040516020016101d691815260200190565b935061029684610d18565b50825260015b8381101561030d576102ee836102b3600184611566565b601c81106102c3576102c361150b565b6020020151846102d4600185611566565b601c81106102e4576102e461150b565b6020020151610d48565b8382601c81106103005761030061150b565b602002015260010161029c565b509093915050565b5f5f61031f610e67565b84815261014084018051515160208084019190915290515181015160408084019190915261016086015160608401525161035f916101d691849101611579565b915061036a82610d18565b50959194509092505050565b61037e610e48565b5f805b8381101561043b57610391610e85565b8581525f5b60098110156103fa5787610180015183601c81106103b6576103b661150b565b602002015181600981106103cc576103cc61150b565b6020020151826103dd8360016115ac565b600a81106103ed576103ed61150b565b6020020152600101610396565b5061040f816040516020016101d691906115bf565b955061041a86610d18565b508483601c811061042d5761042d61150b565b602002015250600101610381565b5090949293505050565b5f5f61044f610ea4565b83815260015b610461600160296115ac565b81116104b6576101c0860151610478600183611566565b602a81106104885761048861150b565b602002015182826030811061049f5761049f61150b565b6020020152806104ae816115f3565b915050610455565b856101a001518282603081106104ce576104ce61150b565b60200201526104de6001826115ac565b61014087015160200151519091508282603081106104fe576104fe61150b565b602002015261014086015160016020020151602001518282600161052291906115ac565b603081106105325761053261150b565b60200201526105426002826115ac565b61014087015160400151519091508282603081106105625761056261150b565b602002015261014086015160026020020151602001518282600161058691906115ac565b603081106105965761059661150b565b6020020181815250506105b3826040516020016101d6919061160b565b92506105be83610d18565b5096929550919350505050565b5f80806105d9600185611566565b6105e490600261163f565b6105ef9060016115ac565b6001600160401b0381111561060657610606610eff565b60405190808252806020026020018201604052801561062f578160200160208202803683370190505b50905084815f815181106106455761064561150b565b60209081029190910101525f5b61065d600186611566565b81101561071057866101e0015181601b811061067b5761067b61150b565b6020020151518261068d83600261163f565b6106989060016115ac565b815181106106a8576106a861150b565b602002602001018181525050866101e0015181601b81106106cb576106cb61150b565b602002015160200151828260026106e2919061163f565b6106ed9060026115ac565b815181106106fd576106fd61150b565b6020908102919091010152600101610652565b50610725816040516020016101d69190611656565b915061073082610d18565b5096919550909350505050565b5f808061074b8460016115ac565b6107569060046115ac565b6001600160401b0381111561076d5761076d610eff565b604051908082528060200260200182016040528015610796578160200160208202803683370190505b50905084815f815181106107ac576107ac61150b565b602090810291909101015260015b848111610816576102008701516107d2600183611566565b601c81106107e2576107e261150b565b60200201518282815181106107f9576107f961150b565b60209081029190910101528061080e816115f3565b9150506107ba565b505f806108248660016115ac565b90505b6108328660046115ac565b811161089157876102200151826004811061084f5761084f61150b565b60200201518382815181106108665761086661150b565b60209081029190910101528161087b816115f3565b9250508080610889906115f3565b915050610827565b506108a6826040516020016101d69190611656565b92506108b183610d18565b509792965091945050505050565b5f5f6108c9610ec3565b838152610240850180515160208084019190915290518101516040808401919091525161035f916101d691849101611680565b5f8080808061090c8660016115ac565b6109179060086115ac565b6001600160401b0381111561092e5761092e610eff565b604051908082528060200260200182016040528015610957578160200160208202803683370190505b509050865f1b815f8151811061096f5761096f61150b565b60209081029190910101525f5b610987601088611566565b8110156109d8578989828181106109a0576109a061150b565b90506020020135828260016109b591906115ac565b815181106109c5576109c561150b565b602090810291909101015260010161097c565b505f5b6010811015610a49578a51610a039082601081106109fb576109fb61150b565b602002015190565b82826010610a128b60016115ac565b610a1c9190611566565b610a2691906115ac565b81518110610a3657610a3661150b565b60209081029190910101526001016109db565b5060208a01515181610a5c8860016115ac565b81518110610a6c57610a6c61150b565b6020908102919091018101919091528a810151015181610a8d8860016115ac565b610a989060016115ac565b81518110610aa857610aa861150b565b602090810291909101015260408a01515181610ac58860016115ac565b610ad09060026115ac565b81518110610ae057610ae061150b565b60209081029190910181019190915260408b0151015181610b028860016115ac565b610b0d9060036115ac565b81518110610b1d57610b1d61150b565b602090810291909101015260608a01515181610b3a8860016115ac565b610b459060046115ac565b81518110610b5557610b5561150b565b60209081029190910181019190915260608b0151015181610b778860016115ac565b610b829060056115ac565b81518110610b9257610b9261150b565b602090810291909101015260808a01515181610baf8860016115ac565b610bba9060066115ac565b81518110610bca57610bca61150b565b60209081029190910181019190915260808b0151015181610bec8860016115ac565b610bf79060076115ac565b81518110610c0757610c0761150b565b602002602001018181525050610c27816040516020016101d69190611656565b9150610c3282610d18565b6040805160208101869052929750909550610c4d91016101d6565b9150610c5882610d18565b50809350505095509550955095915050565b5f5f5f610c75610ee1565b85815260c0858101805151602080850191909152905181015160408085019190915260e08801805151606086015251820151608085015260a08089018051519186019190915251820151928401929092529051610cd8916101d6918491016116b3565b9150610ce382610d18565b90979096509194509092505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001900690565b5f808260016001607f1b038116607f82901c610d3382610cf2565b9450610d3e81610cf2565b9350505050915091565b5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840990505b92915050565b604051806101400160405280610d8a610ddb565b8152602001610d97610e0b565b8152602001610da4610e48565b81526020015f8152602001610db7610e48565b81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b604051806103600160405280601b906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101400160405280600a906020820280368337509192915050565b6040518061060001604052806030906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b60405161028081016001600160401b0381118282101715610f3657610f36610eff565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610f6457610f64610eff565b604052919050565b5f82601f830112610f7b575f5ffd5b5f610200610f8881610f3c565b915083018185821115610f99575f5ffd5b845b82811015610fb3578035825260209182019101610f9b565b509195945050505050565b5f60408284031215610fce575f5ffd5b604080519081016001600160401b0381118282101715610ff057610ff0610eff565b604052823581526020928301359281019290925250919050565b5f82601f830112611019575f5ffd5b5f6110246060610f3c565b90508060c0840185811115611037575f5ffd5b845b81811015610fb35761104b8782610fbe565b8352602090920191604001611039565b5f82601f83011261106a575f5ffd5b61038061107681610f3c565b905080611f8084018581111561108a575f5ffd5b845b818110156110ee5786601f8201126110a2575f5ffd5b5f6101206110af81610f3c565b9150820181898211156110c0575f5ffd5b835b828110156110da5780358252602091820191016110c2565b50505084526020909301926101200161108c565b509095945050505050565b5f82601f830112611108575f5ffd5b5f610540610f8881610f3c565b5f82601f830112611124575f5ffd5b5f61036061113181610f3c565b915050806106c0840185811115611146575f5ffd5b845b81811015610fb35761115a8782610fbe565b8352602090920191604001611148565b5f82601f830112611179575f5ffd5b5f610380610f8881610f3c565b5f82601f830112611195575f5ffd5b5f6111a06080610f3c565b90508060808401858111156111b3575f5ffd5b845b81811015610fb35780358352602092830192016111b5565b5f5f83601f8401126111dd575f5ffd5b5081356001600160401b038111156111f3575f5ffd5b6020830191508360208260051b850101111561120d575f5ffd5b9250929050565b5f5f5f5f5f5f8688036135c081121561122b575f5ffd5b613540811215611239575f5ffd5b50611242610f13565b61124c8989610f6c565b815261125c896102008a01610fbe565b602082015261126f896102408a01610fbe565b6040820152611282896102808a01610fbe565b6060820152611295896102c08a01610fbe565b60808201526112a8896103008a01610fbe565b60a08201526112bb896103408a01610fbe565b60c08201526112ce896103808a01610fbe565b60e08201526112e1896103c08a01610fbe565b6101008201526112f5896104008a01610fbe565b610120820152611309896104408a0161100a565b610140820152610500880135610160820152611329896105208a0161105b565b6101808201526124a08801356101a0820152611349896124c08a016110f9565b6101c082015261135d89612a008a01611115565b6101e0820152611371896130c08a0161116a565b610200820152611385896134408a01611186565b610220820152611399896134c08a01610fbe565b6102408201526113ad896135008a01610fbe565b61026082015295506135408701356001600160401b038111156113ce575f5ffd5b6113da89828a016111cd565b979a90995096976135608101359761358082013597506135a09091013595509350505050565b805f5b601b811015611422578151845260209384019390910190600101611403565b50505050565b805f5b601c81101561142257815184526020938401939091019060010161142b565b8151805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a09081015190820152610be08101602083015161149960c0840182611400565b5060408301516114ad610420840182611428565b5060608301516107a083015260808301516114cc6107c0840182611428565b5060a0830151610b4083015260c0830151610b6083015260e0830151610b80830152610100830151610ba083015261012090920151610bc09091015290565b634e487b7160e01b5f52603260045260245ffd5b5f8183825b6005811015611543578151835260209283019290910190600101611524565b50505060a08201905092915050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d7057610d70611552565b5f8183825b600481101561159d57815183526020928301929091019060010161157e565b50505060808201905092915050565b80820180821115610d7057610d70611552565b5f8183825b600a8110156115e35781518352602092830192909101906001016115c4565b5050506101408201905092915050565b5f6001820161160457611604611552565b5060010190565b5f8183825b603081101561162f578151835260209283019290910190600101611610565b5050506106008201905092915050565b8082028115828204841417610d7057610d70611552565b81515f90829060208501835b82811015610fb3578151845260209384019390910190600101611662565b5f8183825b60038110156116a4578151835260209283019290910190600101611685565b50505060608201905092915050565b5f8183825b60078110156116d75781518352602092830192909101906001016116b8565b50505060e0820190509291505056fea164736f6c634300081c000a", - "deployedBytecode": "0x7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063995bf45714610038575b5f5ffd5b61004b610046366004611214565b610061565b604051610058919061144a565b60405180910390f35b610069610d76565b5f610078888888888886610128565b9083529050610087818961017c565b6020840191909152905061009b818461026c565b604084019190915290506100af8189610315565b606084019190915290506100c4888285610376565b608084019190915290506100d88882610445565b60a084019190915290506100ed8882856105cb565b60c0840191909152905061010288828561073d565b60e0840191909152905061011688826108bf565b50610100830152509695505050505050565b610130610ddb565b5f61013e88888888886108fc565b60408601919091526020850191909152908352925061015d8389610c6a565b6080850191909152606084019190915291989197509095505050505050565b610184610e0b565b5f61018d610e2a565b8481526101008401805151602080840191909152905181015160408084019190915261012086018051516060850152518201516080840152516101f1916101d69184910161151f565b60405160208183030381529060405280519060200120610cf2565b91505f6101fd83610d18565b50808552905060015b6102126001601c611566565b8110156102625761024385610228600184611566565b601b81106102385761023861150b565b602002015183610d48565b8582601b81106102555761025561150b565b6020020152600101610206565b5050509250929050565b610274610e48565b5f61028b846040516020016101d691815260200190565b935061029684610d18565b50825260015b8381101561030d576102ee836102b3600184611566565b601c81106102c3576102c361150b565b6020020151846102d4600185611566565b601c81106102e4576102e461150b565b6020020151610d48565b8382601c81106103005761030061150b565b602002015260010161029c565b509093915050565b5f5f61031f610e67565b84815261014084018051515160208084019190915290515181015160408084019190915261016086015160608401525161035f916101d691849101611579565b915061036a82610d18565b50959194509092505050565b61037e610e48565b5f805b8381101561043b57610391610e85565b8581525f5b60098110156103fa5787610180015183601c81106103b6576103b661150b565b602002015181600981106103cc576103cc61150b565b6020020151826103dd8360016115ac565b600a81106103ed576103ed61150b565b6020020152600101610396565b5061040f816040516020016101d691906115bf565b955061041a86610d18565b508483601c811061042d5761042d61150b565b602002015250600101610381565b5090949293505050565b5f5f61044f610ea4565b83815260015b610461600160296115ac565b81116104b6576101c0860151610478600183611566565b602a81106104885761048861150b565b602002015182826030811061049f5761049f61150b565b6020020152806104ae816115f3565b915050610455565b856101a001518282603081106104ce576104ce61150b565b60200201526104de6001826115ac565b61014087015160200151519091508282603081106104fe576104fe61150b565b602002015261014086015160016020020151602001518282600161052291906115ac565b603081106105325761053261150b565b60200201526105426002826115ac565b61014087015160400151519091508282603081106105625761056261150b565b602002015261014086015160026020020151602001518282600161058691906115ac565b603081106105965761059661150b565b6020020181815250506105b3826040516020016101d6919061160b565b92506105be83610d18565b5096929550919350505050565b5f80806105d9600185611566565b6105e490600261163f565b6105ef9060016115ac565b6001600160401b0381111561060657610606610eff565b60405190808252806020026020018201604052801561062f578160200160208202803683370190505b50905084815f815181106106455761064561150b565b60209081029190910101525f5b61065d600186611566565b81101561071057866101e0015181601b811061067b5761067b61150b565b6020020151518261068d83600261163f565b6106989060016115ac565b815181106106a8576106a861150b565b602002602001018181525050866101e0015181601b81106106cb576106cb61150b565b602002015160200151828260026106e2919061163f565b6106ed9060026115ac565b815181106106fd576106fd61150b565b6020908102919091010152600101610652565b50610725816040516020016101d69190611656565b915061073082610d18565b5096919550909350505050565b5f808061074b8460016115ac565b6107569060046115ac565b6001600160401b0381111561076d5761076d610eff565b604051908082528060200260200182016040528015610796578160200160208202803683370190505b50905084815f815181106107ac576107ac61150b565b602090810291909101015260015b848111610816576102008701516107d2600183611566565b601c81106107e2576107e261150b565b60200201518282815181106107f9576107f961150b565b60209081029190910101528061080e816115f3565b9150506107ba565b505f806108248660016115ac565b90505b6108328660046115ac565b811161089157876102200151826004811061084f5761084f61150b565b60200201518382815181106108665761086661150b565b60209081029190910101528161087b816115f3565b9250508080610889906115f3565b915050610827565b506108a6826040516020016101d69190611656565b92506108b183610d18565b509792965091945050505050565b5f5f6108c9610ec3565b838152610240850180515160208084019190915290518101516040808401919091525161035f916101d691849101611680565b5f8080808061090c8660016115ac565b6109179060086115ac565b6001600160401b0381111561092e5761092e610eff565b604051908082528060200260200182016040528015610957578160200160208202803683370190505b509050865f1b815f8151811061096f5761096f61150b565b60209081029190910101525f5b610987601088611566565b8110156109d8578989828181106109a0576109a061150b565b90506020020135828260016109b591906115ac565b815181106109c5576109c561150b565b602090810291909101015260010161097c565b505f5b6010811015610a49578a51610a039082601081106109fb576109fb61150b565b602002015190565b82826010610a128b60016115ac565b610a1c9190611566565b610a2691906115ac565b81518110610a3657610a3661150b565b60209081029190910101526001016109db565b5060208a01515181610a5c8860016115ac565b81518110610a6c57610a6c61150b565b6020908102919091018101919091528a810151015181610a8d8860016115ac565b610a989060016115ac565b81518110610aa857610aa861150b565b602090810291909101015260408a01515181610ac58860016115ac565b610ad09060026115ac565b81518110610ae057610ae061150b565b60209081029190910181019190915260408b0151015181610b028860016115ac565b610b0d9060036115ac565b81518110610b1d57610b1d61150b565b602090810291909101015260608a01515181610b3a8860016115ac565b610b459060046115ac565b81518110610b5557610b5561150b565b60209081029190910181019190915260608b0151015181610b778860016115ac565b610b829060056115ac565b81518110610b9257610b9261150b565b602090810291909101015260808a01515181610baf8860016115ac565b610bba9060066115ac565b81518110610bca57610bca61150b565b60209081029190910181019190915260808b0151015181610bec8860016115ac565b610bf79060076115ac565b81518110610c0757610c0761150b565b602002602001018181525050610c27816040516020016101d69190611656565b9150610c3282610d18565b6040805160208101869052929750909550610c4d91016101d6565b9150610c5882610d18565b50809350505095509550955095915050565b5f5f5f610c75610ee1565b85815260c0858101805151602080850191909152905181015160408085019190915260e08801805151606086015251820151608085015260a08089018051519186019190915251820151928401929092529051610cd8916101d6918491016116b3565b9150610ce382610d18565b90979096509194509092505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001900690565b5f808260016001607f1b038116607f82901c610d3382610cf2565b9450610d3e81610cf2565b9350505050915091565b5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840990505b92915050565b604051806101400160405280610d8a610ddb565b8152602001610d97610e0b565b8152602001610da4610e48565b81526020015f8152602001610db7610e48565b81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b604051806103600160405280601b906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101400160405280600a906020820280368337509192915050565b6040518061060001604052806030906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b60405161028081016001600160401b0381118282101715610f3657610f36610eff565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610f6457610f64610eff565b604052919050565b5f82601f830112610f7b575f5ffd5b5f610200610f8881610f3c565b915083018185821115610f99575f5ffd5b845b82811015610fb3578035825260209182019101610f9b565b509195945050505050565b5f60408284031215610fce575f5ffd5b604080519081016001600160401b0381118282101715610ff057610ff0610eff565b604052823581526020928301359281019290925250919050565b5f82601f830112611019575f5ffd5b5f6110246060610f3c565b90508060c0840185811115611037575f5ffd5b845b81811015610fb35761104b8782610fbe565b8352602090920191604001611039565b5f82601f83011261106a575f5ffd5b61038061107681610f3c565b905080611f8084018581111561108a575f5ffd5b845b818110156110ee5786601f8201126110a2575f5ffd5b5f6101206110af81610f3c565b9150820181898211156110c0575f5ffd5b835b828110156110da5780358252602091820191016110c2565b50505084526020909301926101200161108c565b509095945050505050565b5f82601f830112611108575f5ffd5b5f610540610f8881610f3c565b5f82601f830112611124575f5ffd5b5f61036061113181610f3c565b915050806106c0840185811115611146575f5ffd5b845b81811015610fb35761115a8782610fbe565b8352602090920191604001611148565b5f82601f830112611179575f5ffd5b5f610380610f8881610f3c565b5f82601f830112611195575f5ffd5b5f6111a06080610f3c565b90508060808401858111156111b3575f5ffd5b845b81811015610fb35780358352602092830192016111b5565b5f5f83601f8401126111dd575f5ffd5b5081356001600160401b038111156111f3575f5ffd5b6020830191508360208260051b850101111561120d575f5ffd5b9250929050565b5f5f5f5f5f5f8688036135c081121561122b575f5ffd5b613540811215611239575f5ffd5b50611242610f13565b61124c8989610f6c565b815261125c896102008a01610fbe565b602082015261126f896102408a01610fbe565b6040820152611282896102808a01610fbe565b6060820152611295896102c08a01610fbe565b60808201526112a8896103008a01610fbe565b60a08201526112bb896103408a01610fbe565b60c08201526112ce896103808a01610fbe565b60e08201526112e1896103c08a01610fbe565b6101008201526112f5896104008a01610fbe565b610120820152611309896104408a0161100a565b610140820152610500880135610160820152611329896105208a0161105b565b6101808201526124a08801356101a0820152611349896124c08a016110f9565b6101c082015261135d89612a008a01611115565b6101e0820152611371896130c08a0161116a565b610200820152611385896134408a01611186565b610220820152611399896134c08a01610fbe565b6102408201526113ad896135008a01610fbe565b61026082015295506135408701356001600160401b038111156113ce575f5ffd5b6113da89828a016111cd565b979a90995096976135608101359761358082013597506135a09091013595509350505050565b805f5b601b811015611422578151845260209384019390910190600101611403565b50505050565b805f5b601c81101561142257815184526020938401939091019060010161142b565b8151805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a09081015190820152610be08101602083015161149960c0840182611400565b5060408301516114ad610420840182611428565b5060608301516107a083015260808301516114cc6107c0840182611428565b5060a0830151610b4083015260c0830151610b6083015260e0830151610b80830152610100830151610ba083015261012090920151610bc09091015290565b634e487b7160e01b5f52603260045260245ffd5b5f8183825b6005811015611543578151835260209283019290910190600101611524565b50505060a08201905092915050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d7057610d70611552565b5f8183825b600481101561159d57815183526020928301929091019060010161157e565b50505060808201905092915050565b80820180821115610d7057610d70611552565b5f8183825b600a8110156115e35781518352602092830192909101906001016115c4565b5050506101408201905092915050565b5f6001820161160457611604611552565b5060010190565b5f8183825b603081101561162f578151835260209283019290910190600101611610565b5050506106008201905092915050565b8082028115828204841417610d7057610d70611552565b81515f90829060208501835b82811015610fb3578151845260209384019390910190600101611662565b5f8183825b60038110156116a4578151835260209283019290910190600101611685565b50505060608201905092915050565b5f8183825b60078110156116d75781518352602092830192909101906001016116b8565b50505060e0820190509291505056fea164736f6c634300081c000a", - "linkReferences": {}, - "deployedLinkReferences": {}, - "immutableReferences": {}, - "inputSourceName": "project/contracts/verifier/RecursiveAggregationFoldVerifier.sol", - "buildInfoId": "solc-0_8_28-543ccb35c9b85334df682667ad98480ea27e7555" -} \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol/ThresholdDecryptedSharesAggregationVerifier.json b/packages/enclave-contracts/artifacts/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol/ThresholdDecryptedSharesAggregationVerifier.json deleted file mode 100644 index bb670eee0f..0000000000 --- a/packages/enclave-contracts/artifacts/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol/ThresholdDecryptedSharesAggregationVerifier.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "_format": "hh3-artifact-1", - "contractName": "ThresholdDecryptedSharesAggregationVerifier", - "sourceName": "contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol", - "abi": [ - { - "inputs": [], - "name": "ConsistencyCheckFailed", - "type": "error" - }, - { - "inputs": [], - "name": "GeminiChallengeInSubgroup", - "type": "error" - }, - { - "inputs": [], - "name": "ProofLengthWrong", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "logN", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "actualLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLength", - "type": "uint256" - } - ], - "name": "ProofLengthWrongWithLogN", - "type": "error" - }, - { - "inputs": [], - "name": "PublicInputsLengthWrong", - "type": "error" - }, - { - "inputs": [], - "name": "ShpleminiFailed", - "type": "error" - }, - { - "inputs": [], - "name": "SumcheckFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "proof", - "type": "bytes" - }, - { - "internalType": "bytes32[]", - "name": "publicInputs", - "type": "bytes32[]" - } - ], - "name": "verify", - "outputs": [ - { - "internalType": "bool", - "name": "verified", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x610120604052348015610010575f5ffd5b50620200006080819052601160a08190527f1a888222f07de9fba8c8456b3e25b3abe8f5a37ba2fb1cb1e5c24a19dcb8977f60c08190526101a260e081905260038361005e6001602461008b565b610068919061008b565b610072919061008b565b61007d90600261008b565b61010052506100b092505050565b808201808211156100aa57634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c05160e05161010051615cba61014a5f395f8181610c5401528181610cb90152612ec201525f81816101b001526108ff01525f61018e01525f8181605b01528181609401528181610101015281816101d201528181610a2d01528181610b8e01528181610c2b01528181611523015281816115dd015281816116100152818161181a0152612b9f01525f5050615cba5ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063ea50d0e41461002d575b5f5ffd5b61004061003b3660046154f1565b610054565b604051901515815260200160405180910390f35b5f5f61007f7f00000000000000000000000000000000000000000000000000000000000000006102ee565b905061008c8160206155c9565b85146100ee577f0000000000000000000000000000000000000000000000000000000000000000856100bf8360206155c9565b6040516359895a5360e01b81526004810193909352602483019190915260448201526064015b60405180910390fd5b5f6100f76103fb565b90505f61012588887f0000000000000000000000000000000000000000000000000000000000000000610410565b90506010826040015161013891906155e0565b85146101575760405163fa06659360e01b815260040160405180910390fd5b60405163995bf45760e01b81525f9073__$d0188790065ac172f94fde8676855b6381$__9063995bf457906101fa9085908b908b907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090600401615763565b610be060405180830381865af4158015610216573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061023a9190615a8f565b905061028a8787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855185516060810151608090910151919350915060016108a9565b815160a0015261029a8282610a10565b6102b7576040516313f8744360e31b815260040160405180910390fd5b6102c2828483610c17565b6102df576040516352ec174560e11b815260040160405180910390fd5b50600198975050505050505050565b5f8060026102fe60016008615b39565b61030891906155c9565b9050610316600260036155c9565b6103209082615b39565b9050600161032f6009856155c9565b61033991906155c9565b6103439082615b39565b90506001610352816029615b39565b61035c91906155c9565b6103669082615b39565b9050610374600160026155c9565b61037e9082615b39565b905061038b6001846155c9565b6103959082615b39565b90506103a3600160046155c9565b6103ad9082615b39565b905060026103bc6001856155e0565b6103c691906155c9565b6103d09082615b39565b90506103dd6002806155c9565b6103e79082615b39565b90506103f4601082615b39565b9392505050565b610403615024565b61040b611c14565b905090565b6104186151ae565b5f805b601081101561047a57610447868387610435602083615b39565b9261044293929190615b4c565b61254e565b8351826010811061045a5761045a615b73565b6020020181815250506020826104709190615b39565b915060010161041b565b5061049e85828661048c604083615b39565b9261049993929190615b4c565b612561565b60208301526104ae604082615b39565b90506104c185828661048c604083615b39565b6040808401919091526104d49082615b39565b90506104e785828661048c604083615b39565b60608301526104f7604082615b39565b905061050a85828661048c604083615b39565b608083015261051a604082615b39565b905061052d85828661048c604083615b39565b60c083015261053d604082615b39565b905061055085828661048c604083615b39565b60e0830152610560604082615b39565b905061057385828661048c604083615b39565b60a0830152610583604082615b39565b905061059685828661048c604083615b39565b6101008301526105a7604082615b39565b90506105ba85828661048c604083615b39565b6101208301526105cb604082615b39565b90506105de85828661048c604083615b39565b610140830151526105f0604082615b39565b9050610603858286610435602083615b39565b610160830152610614602082615b39565b90505f5b83811015610692575f5b60098110156106895761063c878488610435602083615b39565b84610180015183601c811061065357610653615b73565b6020020151826009811061066957610669615b73565b60200201818152505060208361067f9190615b39565b9250600101610622565b50600101610618565b505f5b6106a160016029615b39565b8110156106f0576106b9868387610435602083615b39565b836101c0015182602a81106106d0576106d0615b73565b6020020181815250506020826106e69190615b39565b9150600101610695565b50610702858286610435602083615b39565b6101a0830152610713602082615b39565b905061072685828661048c604083615b39565b6101408301516020015261073b604082615b39565b905061074e85828661048c604083615b39565b61014083015160026020020152610766604082615b39565b90505f5b6107756001856155e0565b8110156107be5761078d86838761048c604083615b39565b836101e0015182601b81106107a4576107a4615b73565b60200201526107b4604083615b39565b915060010161076a565b505f5b83811015610811576107da868387610435602083615b39565b83610200015182601c81106107f1576107f1615b73565b6020020181815250506020826108079190615b39565b91506001016107c1565b505f5b60048110156108655761082e868387610435602083615b39565b836102200151826004811061084557610845615b73565b60200201818152505060208261085b9190615b39565b9150600101610814565b5061087785828661048c604083615b39565b610240830152610888604082615b39565b905061089b85828661048c604083615b39565b610260830152509392505050565b5f600180826108d6866108d1896108cc6108c78a6310000000615b39565b6125e3565b6125fb565b612616565b90505f6108f4876108ef8a6108cc6108c78b6001615b39565b61262f565b90505f5b61092360107f00000000000000000000000000000000000000000000000000000000000000006155e0565b811015610990575f61094d8c838151811061094057610940615b73565b6020026020010151612657565b905061095d866108cc8684612616565b955061096d856108cc8584612616565b9450610979848b612616565b9350610985838b61262f565b9250506001016108f8565b505f5b60108110156109f7575f8a82601081106109af576109af615b73565b602002015190506109c4866108cc8684612616565b95506109d4856108cc8584612616565b94506109e0848b612616565b93506109ec838b61262f565b925050600101610993565b50610a02848461266c565b9a9950505050505050505050565b5f5f610a2583606001518561016001516125fb565b905060015f5b7f0000000000000000000000000000000000000000000000000000000000000000811015610b17575f86610180015182601c8110610a6b57610a6b615b73565b602002015180519091505f90610a89908360015b6020020151612616565b9050848114610aab576040516313f8744360e31b815260040160405180910390fd5b5f876080015184601c8110610ac257610ac2615b73565b60200201519050610ad3838261267a565b9550610b07856108cc60016108d1856108cc8e604001518b601c8110610afb57610afb615b73565b6020020151600161262f565b9450505050806001019050610a2b565b50610b20615291565b5f5b6029811015610b70576101c0870151610b3c600183615b39565b602a8110610b4c57610b4c615b73565b6020020151828260298110610b6357610b63615b73565b6020020152600101610b22565b505f610b8582875f0151886020015186612828565b9050600160025b7f0000000000000000000000000000000000000000000000000000000000000000811015610be257610bd882896080015183601c8110610bce57610bce615b73565b60200201516125fb565b9150600101610b8c565b50610c08610bf5836108cc60018561262f565b6108d18a6101a001518a606001516125fb565b94909414979650505050505050565b5f610c206152b0565b5f610c4f8460c001517f00000000000000000000000000000000000000000000000000000000000000006128a1565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b03811115610c8a57610c8a615940565b604051908082528060200260200182016040528015610cb3578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b03811115610cef57610cef615940565b604051908082528060200260200182016040528015610d2857816020015b610d15615320565b815260200190600190039081610d0d5790505b509050610d5b610d56876101000151855f81518110610d4957610d49615b73565b602002602001015161262f565b61296a565b84610120018181525050610d90610d56876101000151855f81518110610d8357610d83615b73565b6020026020010151612616565b610140850181905261012085015160e0880151610db1926108d191906125fb565b845260c0860151610de190610dc59061296a565b6108cc8661012001516108ef8a60e001518961014001516125fb565b6020850152815160019083905f90610dfb57610dfb615b73565b602002602001018181525050876102400151815f81518110610e1f57610e1f615b73565b6020908102919091010152600160a08501525f60c08501528351610e42906129da565b60408501526020840151610e55906129da565b606085015260015b610e6960016024615b39565b8111610f0a57610e8185604001518660a001516125fb565b838281518110610e9357610e93615b73565b602002602001018181525050610edc8560c001516108d18b6101c00151600185610ebd91906155e0565b602a8110610ecd57610ecd615b73565b60200201518860a001516125fb565b60c086015260a08086015190880151610ef591906125fb565b60a0860152610f0381615b87565b9050610e5d565b505f5b6005811015610fe3575f610f22601e83615b39565b90505f610f3160016024615b39565b610f3b9084615b39565b9050610f6c858381518110610f5257610f52615b73565b60200260200101516108d189606001518a60a001516125fb565b858381518110610f7e57610f7e615b73565b602002602001018181525050610fbb8760c001516108d18d6101c0015184602a8110610fac57610fac615b73565b60200201518a60a001516125fb565b60c088015260a080880151908a0151610fd491906125fb565b60a08801525050600101610f0d565b50876020015181600181518110610ffc57610ffc615b73565b602002602001018190525086606001518160028151811061101f5761101f615b73565b602002602001018190525086608001518160038151811061104257611042615b73565b60200260200101819052508660a001518160048151811061106557611065615b73565b60200260200101819052508660c001518160058151811061108857611088615b73565b60200260200101819052508660e00151816006815181106110ab576110ab615b73565b6020026020010181905250866101000151816007815181106110cf576110cf615b73565b6020026020010181905250866101200151816008815181106110f3576110f3615b73565b60200260200101819052508661014001518160098151811061111757611117615b73565b602002602001018190525086610160015181600a8151811061113b5761113b615b73565b6020026020010181905250866101c0015181600b8151811061115f5761115f615b73565b602002602001018190525086610180015181600c8151811061118357611183615b73565b6020026020010181905250866101a0015181600d815181106111a7576111a7615b73565b6020026020010181905250866101e0015181600e815181106111cb576111cb615b73565b602002602001018190525086610200015181600f815181106111ef576111ef615b73565b60200260200101819052508661022001518160108151811061121357611213615b73565b60200260200101819052508661024001518160118151811061123757611237615b73565b60200260200101819052508661026001518160128151811061125b5761125b615b73565b60200260200101819052508661028001518160138151811061127f5761127f615b73565b6020026020010181905250866102a00151816014815181106112a3576112a3615b73565b6020026020010181905250866102c00151816015815181106112c7576112c7615b73565b6020026020010181905250866102e00151816016815181106112eb576112eb615b73565b60200260200101819052508661030001518160178151811061130f5761130f615b73565b60200260200101819052508661032001518160188151811061133357611333615b73565b60200260200101819052508661034001518160198151811061135757611357615b73565b602002602001018190525086610360015181601a8151811061137b5761137b615b73565b602002602001018190525086610380015181601b8151811061139f5761139f615b73565b6020026020010181905250866103a0015181601c815181106113c3576113c3615b73565b6020026020010181905250866103c0015181601d815181106113e7576113e7615b73565b6020026020010181905250876040015181601e8151811061140a5761140a615b73565b6020026020010181905250876060015181601f8151811061142d5761142d615b73565b602002602001018190525087608001518160208151811061145057611450615b73565b60200260200101819052508760a001518160218151811061147357611473615b73565b60200260200101819052508761012001518160228151811061149757611497615b73565b6020026020010181905250876101000151816023815181106114bb576114bb615b73565b60200260200101819052508760c00151816024815181106114de576114de615b73565b60200260200101819052508760e001518160258151811061150157611501615b73565b60200260200101819052505f61154787608001518660c001518b6102000151877f00000000000000000000000000000000000000000000000000000000000000006129ec565b9050611571815f8151811061155e5761155e615b73565b60200260200101518661012001516125fb565b608086018190526102008a01515160e08901516115a292916108d19161159791906125fb565b8861014001516125fb565b608086015260e08701516115b590612b4a565b60a08601525f6115c760016024615b39565b6115d2906001615b39565b90505f5b61160160017f00000000000000000000000000000000000000000000000000000000000000006155e0565b811015611812575f61163460017f00000000000000000000000000000000000000000000000000000000000000006155e0565b8210159050806117a357611668610d568b6101000151898560016116589190615b39565b81518110610d4957610d49615b73565b6101208901526101008a015161169890610d569089611688866001615b39565b81518110610d8357610d83615b73565b61014089015260a08801516101208901516116b391906125fb565b61016089015260a088015160e08b01516116db916116d0916125fb565b8961014001516125fb565b61018089018190526116fe906116f0906129da565b6108d18a61016001516129da565b866117098486615b39565b8151811061171957611719615b73565b6020026020010181815250505f6117528961018001518e61020001518560016117429190615b39565b601c8110610bce57610bce615b73565b905061178c816108d18b61016001518887600161176f9190615b39565b8151811061177f5761177f615b73565b60200260200101516125fb565b905061179c896080015182612616565b60808a0152505b6117c26117b88960a001518c60e001516125fb565b8b60e001516125fb565b60a08901526101e08c015182601b81106117de576117de615b73565b6020020151856117ee8486615b39565b815181106117fe576117fe615b73565b6020908102919091010152506001016115d6565b5061183e60017f00000000000000000000000000000000000000000000000000000000000000006155e0565b6118489082615b39565b90506118686118608961010001518a60c0015161262f565b60019061266c565b60e08701515261010088015160c08901516118ac91611860916108ef907f07b0c561a6148404f086204a9f36ffb0617942546750f230c893619174a57a76906125fb565b60e0878101805160200192909252815180516040909101529051805160609091015260a0870151908901516118ee916118e4916125fb565b8960e001516125fb565b60a08701525f5b600481101561199c575f6119278860e00151836004811061191857611918615b73565b60200201518960a001516125fb565b9050611932816129da565b886101000151836004811061194957611949615b73565b602002015260a088015160e08b015161196291906125fb565b8860a001818152505061198e88608001516108d1838f61022001518660048110610bce57610bce615b73565b6080890152506001016118f5565b506101008601515184518590839081106119b8576119b8615b73565b602090810291909101810191909152610100870151908101516119dc916002610a7f565b846119e8836001615b39565b815181106119f8576119f8615b73565b60209081029190910101526101008601516060015184611a19836002615b39565b81518110611a2957611a29615b73565b60209081029190910101525f5b6003811015611a8b578a61014001518160038110611a5657611a56615b73565b60200201518483611a6681615b87565b945081518110611a7857611a78615b73565b6020908102919091010152600101611a36565b506040518060400160405280600181526020016002815250838281518110611ab557611ab5615b73565b60200260200101819052508560800151848280611ad190615b87565b935081518110611ae357611ae3615b73565b602002602001018181525050611b0d8a61022001518960c001518a608001518d6101a00151612b55565b611b2a5760405163a2a2ac8360e01b815260040160405180910390fd5b5f8a6102600151905080848381518110611b4657611b46615b73565b6020026020010181905250886101000151858381518110611b6957611b69615b73565b602002602001018181525050611b7d615338565b611b878587612eb8565b8152611b9282612fb0565b602082018190528c5182515f92611baa929190612ff6565b90505f5f611bba8f5f0151613087565b91509150611bc782613148565b611bd081613148565b8351611bdd9083856131e7565b84526020840151611bef9082856131e7565b602085018190528451611c0191613216565b9f9e505050505050505050505050505050565b611c1c615024565b50604080516103e08101825262020000815260116020808301919091526101a282840152825180840184527f13637737c33db244a3712ce1f84f4a6400935882acd540419ff5fc19166ea61881527f15e894c35784b66acc688f1d787868569692c5761fa71b84ab52a3b2c1dd41a8818301526060830152825180840184527f16daf8e28d24b787f5a311fc0930d1d495f74cb0eba1780ae0d36610a1ab587081527f220aa4f565987b5544214f4aa9477fd03cbb82e8a57a2aeaa21968038c2af3a5818301526080830152825180840184527f2c0c47eac6980c002be7c5f4633a8bd6d5d0fc9e6651e541b141fc02557ca48d81527f1ca159a1bbe1a8c82eb796fba79bcdff36d3fb98c986996878fdf102d6a12ab98183015260a0830152825180840184527f1c05ee47a359c77501f8bb557929e27f64523630d83a818cd364994cadcaf8c581527f2f8e9947f0eab4542b5e684bbc807466bc192c42d7fce467125769936b4536f58183015260c0830152825180840184527f082a6fc7457baf2a604ae295f701031e54ede6a34d88f93f5e7aaeb2a213312181527f20ecb56a891971bc2cf9bc98cdc00fc8ec720de344999055300f979e749ec93d8183015260e0830152825180840184527f265c425247eed132b40b111b5a7c14d7d9db56aefbf71eeec0b2cc09dd66a6b381527f3054e4ee825da9852d2fc5172b24c4ffbdfd315f13fce4b498379c566604897e81830152610100830152825180840184527f163a3285e23ec78bb34d3c6122f47c770ee1f228ed2dda996542bade7a8bc2e481527f188245f34ba632acb17885f4be308c9551dbfd5095069e7077281d144e55044b81830152610120830152825180840184527f1913712d01550fa30bf15a28a13902738529edfc1ddc730c5bc57c00514fd3b481527f1f125db8f6315e55f2b20ba6863482eac90d77f6c6289efb0d6a6c740be172cd81830152610140830152825180840184527f26ce5fb2dc4d867f0f6957729e6158fe7d6924445514b4c485f0b093195cff4881527f102d0d1aa8a400a6f7e233d512ed7205fcb3eb0ba5c0d54041f23b25f58a4c5781830152610160830152825180840184527f0ff4dd20d4821b5ca6738a69881d693c04c892bade4b929a311c6612d94ffbc281527f19fcce46268bf02b94f4486494e361d2c126372f35e0583d55825134c2ee88cc81830152610180830152825180840184527f018d6d017a26c5c223931a63ee8ad0ef37f9f9f0caba099d8d8482e95b6f46e881527f0ed38b925edf5f9b54e2b5289074d64999010264d2a4eae8fc53b8e38fc10b6b818301526101a0830152825180840184527f1a08892e26c7c33a003d075a86a9edd8cdf253009e26fa7b2ac7f4339ca07ce381527f09383a35fb9f67045a070c939b0d947454f64cd92bcf90838b2163bc0e071b58818301526101c0830152825180840184527f0d2f53319bc2e321ef88e47d0a3a35b0f35728ed7b7790dd357ecda4ea55a57b81527f074497f78eec311b533ca170dc19e81c0cf5a22dce7bdf938841ff71e8cbdc8d818301526101e0830152825180840184527f0cde2682ddd264dcac5b0e5626164271411bca898cd8beb4c98536534ffe3e6981527f20f8bfa3f9ed612f481072d20715601f08415ecbb5092b8dae96a15c583ac77081830152610200830152825180840184527f2dc45f069a801ce507391a5d369024e6c0a8f508426efa10efec079f652943fd81527f0ca193ecd89783532ab900689868dfa9713a57dd313c222bfa2d1ee92c5a1ec981830152610220830152825180840184527f18f0b7ba3135bb08f1e312928b750b6bacb9776a9e8a3d30d1da58873083baa681527f1ed01d844f4aee867147b3eb571130d0e37c0686151a13106aeb40936713c09381830152610240830152825180840184527f2787d437215fba393c1bb6e8bc91cdf1f5c75cb93b1eb8b522819a6cfc71507c81527f027ea99429a3d006c4d01411577bf6ac562f7811b4d64e7ff060351468d63b6b81830152610260830152825180840184527f0d0f4f0fa40d68989657a0feee08deed1f08355b066c778578bfbf430cc2d22b81527f2d9d81c8732bf6991afa6657818d09e17fe8bfb40f59301a7b992fc8f2a9d1e981830152610280830152825180840184527ea673368cf560b1069debee688c082cda349df8fbacc711f845dc7960acdeba81527f0234d1b5f65d17aaf71d51ae744b28b6a024bface3333ea19ef58c8c2fc38595818301526102a0830152825180840184527f29353e7eeeae9d8cf7bc6bac6961a44a69fe7b38396fc4b07d416b226fbecc3d81527f012d0615aad587261d1403ca95322f67b6e64382ac7346503bb61ee8ff465ffd818301526102c0830152825180840184527f0dddb0066cbe44ac884fe3658ad6c24943d3329fd839b8dd47b37e0b334f3efc81527f1a54ecfb49945a189bd28fa28103f9ad98d08107f8d68167d96417d95297903f818301526102e0830152825180840184527f271c4df54fa64ddca42889abf3e4559c2aa59525ea5a1858fadae4b6eb6f140681527f06f10a564e9397fc800ffbb6b4c887df1d1e4eeb6dd8cd4f789916e31836f19781830152610300830152825180840184527f099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d2681527e15b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f81830152610320830152825180840184527f1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e81527f305e8992b148eedb22e6e992077a84482141c7ebe42000a1d58ccb74381f6d1981830152610340830152825180840184527f061f64497996e8915722501e9e367938ed8da2375186b518c7345c60b1134b2d81527f1b84d38339321f405ebaf6a2f830842ad3d7cb59792e11c0d2691f317fd50e6e81830152610360830152825180840184527f043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce81527f261522c4089330646aff96736194949330952ae74c573d1686d9cb4a007338548183015261038083015282518084018452600181526002818301526103a083015282518084019093527f0602bc9d2460bf21b73d27154ff5f8919350545f3cb6dc7f40dae014613bc4c683527f1df576b5b16064433355e8bad62265096027978ab6496527059305dbd8708565908301526103c081019190915290565b5f6103f461255c8385615b9f565b612657565b612569615320565b60408051808201909152805f516020615c6e5f395f51905f5261258f60205f8789615b4c565b61259891615b9f565b6125a29190615bbc565b81526020908101905f516020615c6e5f395f51905f52906125c7906040908789615b4c565b6125d091615b9f565b6125da9190615bbc565b90529392505050565b5f5f516020615c8e5f395f51905f52825b0692915050565b5f5f516020615c8e5f395f51905f5282840990505b92915050565b5f5f516020615c8e5f395f51905f528284089392505050565b5f5f516020615c8e5f395f51905f52825f516020615c8e5f395f51905f520384089392505050565b5f5f516020615c8e5f395f51905f52826125f4565b5f6103f4836108cc8461296a565b5f5f604051806101200160405280619d8081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec5181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd31815260200161024081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd3181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec518152602001619d8081525090505f600190505f5f90505b600981101561277357612769826108cc878461262f565b9150600101612752565b5061277c61534b565b5f5b60098110156127cd576127ae610d5685836009811061279f5761279f615b73565b60200201516108cc898561262f565b8282600981106127c0576127c0615b73565b602002015260010161277e565b505f5b600981101561281357612809856108d18984600981106127f2576127f2615b73565b6020020151858560098110610bce57610bce615b73565b94506001016127d0565b5061281e84836125fb565b9695505050505050565b5f61283161536a565b61283c86828561340a565b612848868683866135b6565b612854868683866137a2565b61285f8682856139c7565b61286a868285613bbb565b61287686868386613f04565b6128818682856143b0565b61288c8682856147c2565b612897868285614b83565b61281e8185614e83565b60605f826001600160401b038111156128bc576128bc615940565b6040519080825280602002602001820160405280156128e5578160200160208202803683370190505b50905083815f815181106128fb576128fb615b73565b602090810291909101015260015b838110156129625761293d826129206001846155e0565b8151811061293057612930615b73565b6020026020010151612b4a565b82828151811061294f5761294f615b73565b6020908102919091010152600101612909565b509392505050565b5f5f8290505f604051602081526020808201526020604082015282606082015260025f516020615c8e5f395f51905f520360808201525f516020615c8e5f395f51905f5260a082015260205f60c08360055afa806129c6575f5ffd5b505f51608091909101604052949350505050565b5f516020615c8e5f395f51905f520390565b60605f826001600160401b03811115612a0757612a07615940565b604051908082528060200260200182016040528015612a30578160200160208202803683370190505b509050825b8015612b3f575f85612a486001846155e0565b81518110612a5857612a58615b73565b602002602001015190505f89600184612a7191906155e0565b601c8110612a8157612a81615b73565b602002015190505f612adc612aa0612a99858d6125fb565b60026125fb565b6108ef8b612aaf6001896155e0565b601c8110612abf57612abf615b73565b60200201516108cc612ad6886108cc60018a61262f565b8761262f565b9050612afd816108cc610d56612af7876108cc60018961262f565b86612616565b99508990508085612b0f6001876155e0565b81518110612b1f57612b1f615b73565b60200260200101818152505050505080612b3890615bdb565b9050612a35565b509695505050505050565b5f61261082836125fb565b5f600181612b6e612b6887610100614edc565b8361262f565b905080612b8e5760405163835eb8f760e01b815260040160405180910390fd5b612b96615389565b80518390525f5b7f0000000000000000000000000000000000000000000000000000000000000000811015612c7f575f612bd18260096155c9565b612bdc906001615b39565b905084835f0151826101008110612bf557612bf5615b73565b60200201525f612c06826001615b39565b90505b612c14600983615b39565b811015612c75578351612c5490612c2c6001846155e0565b6101008110612c3d57612c3d615b73565b60200201518a85601c8110610bce57610bce615b73565b8451826101008110612c6857612c68615b73565b6020020152600101612c09565b5050600101612b9d565b50608081018390525f602082018190525b610100811015612d9057612cb1612cab83608001518a6125fb565b8561262f565b8260a00151826101008110612cc857612cc8615b73565b602002015260a0820151612cf290826101008110612ce857612ce8615b73565b602002015161296a565b8260a00151826101008110612d0957612d09615b73565b602002018181525050612d4f82602001516108d1845f0151846101008110612d3357612d33615b73565b60200201518560a00151856101008110610bce57610bce615b73565b60208301526080820151612d83907f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d66125fb565b6080830152600101612c90565b505f612da1836108cc61010061296a565b9050612db18260200151826125fb565b602083015260a0820151612dcc905f5b6020020151826125fb565b604083015260a0820151612df890612de760016101006155e0565b6101008110612dc157612dc1615b73565b60608301526040820151612e0e908a6002610bce565b60c08301819052612e6e906108d1612e468b7f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d661262f565b60208d015160408e01516108cc91612e5d9161262f565b8e5160208901516108ef91906125fb565b60c083018190526060830151612ea391612e97916108d1906108cc8e600260200201518c61262f565b6108ef858c6003610bce565b60c08301819052159998505050505050505050565b612ec0615320565b7f00000000000000000000000000000000000000000000000000000000000000005f5b81811015612f1557612f0d858281518110612f0057612f00615b73565b6020026020010151613148565b600101612ee3565b50604051600190815b60018401811015612f7a5760208102870160208202870181515160408501528151602001516060850152805160808501525050604080830160606040850160075afa8316925060408260808460065afa90921691600101612f1e565b5080518452602081015160208501525080612fa8576040516352ec174560e11b815260040160405180910390fd5b505092915050565b612fb8615320565b5f516020615c6e5f395f51905f5282602001515f516020615c6e5f395f51905f52612fe391906155e0565b612fed9190615bbc565b60208301525090565b5f5f5f61300286613087565b9150915061300e6153cd565b82518152602080840151818301528251604080840191909152838201516060840152875160808401528782015160a0840152865160c08401528682015160e08401525161307c9161306191849101615bf0565b60405160208183030381529060405280519060200120612657565b979650505050505050565b61308f615320565b613097615320565b82516020808501516040860151606087015160cc90811b608892831b604494851b90961795909517949094178652608087015160a088015160c089015160e08a0151871b90841b91851b9092171717868401526101008701516101208801516101408901516101608a0151871b90841b91851b909217171785526101808701516101a08801516101c08901516101e09099015190951b9790911b9390911b1791909117939093179281019290925291565b805160208201515f5f516020615c6e5f395f51905f528380095f516020615c6e5f395f51905f5260035f516020615c6e5f395f51905f52838709085f516020615c6e5f395f51905f5284850914915050806131e15760405162461bcd60e51b8152602060048201526019602482015278706f696e74206973206e6f74206f6e2074686520637572766560381b60448201526064016100e5565b50505050565b6131ef615320565b6131f7615320565b6132018386614f3d565b905061320d8185614f93565b95945050505050565b81516020808401518351848301516040805194850195909552938301919091527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260608301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60808301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60a08301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60c083015260e08201526101008101919091527f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c16101208201527f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b06101408201527f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe46101608201527f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e556101808201525f9081906101a00160405160208183030381529060405290505f5f60086001600160a01b0316836040516133ac9190615c24565b5f60405180830381855afa9150503d805f81146133e4576040519150601f19603f3d011682016040523d82523d5f602084013e6133e9565b606091505b509150915081801561281e57508080602001905181019061281e9190615c3a565b5f613416846007614ff4565b90507f183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f80000005f61347761347161344b85600361262f565b6108cc61346661345b8b5f614ff4565b6108cc8c601d614ff4565b6108cc8b601c614ff4565b836125fb565b90506134f86134ed6134d46134bb6134a2856108d16134978d6002614ff4565b6108cc8e601c614ff4565b6108d16134b08c6003614ff4565b6108cc8d601d614ff4565b6108d16134c98b6004614ff4565b6108cc8c601e614ff4565b6108d16134e28a6005614ff4565b6108cc8b601f614ff4565b6108d1886001614ff4565b9050613517816108d161350c86600161262f565b6108cc8a6027614ff4565b905061352381846125fb565b905061352f81856125fb565b8552505f905061356961355f61355461354988601c614ff4565b6108d189601f614ff4565b6108ef886024614ff4565b6108d1875f614ff4565b905061357a816108cc84600261262f565b905061358b816108cc84600161262f565b905061359781836125fb565b90506135a381846125fb565b9050808460015b60200201525050505050565b5f5f5f6135ec6135e26135ca89601c614ff4565b6108d16135d88b6012614ff4565b8a606001516125fb565b8760800151612616565b9050613625816108cc61361b6136038b601d614ff4565b6108d16136118d6013614ff4565b8c606001516125fb565b8960800151612616565b905061364a816108cc61361b61363c8b601e614ff4565b6108d16136118d6014614ff4565b905061366f816108cc61361b6136618b601f614ff4565b6108d16136118d6015614ff4565b92505f90506136936135e261368589601c614ff4565b6108d16135d88b600e614ff4565b90506136b8816108cc61361b6136aa8b601d614ff4565b6108d16136118d600f614ff4565b90506136dd816108cc61361b6136cf8b601e614ff4565b6108d16136118d6010614ff4565b9050613702816108cc61361b6136f48b601f614ff4565b6108d16136118d6011614ff4565b91505f9050613729613723613718896020614ff4565b6108d18a601a614ff4565b846125fb565b905061375e816108ef6137586137408b6028614ff4565b6108d161374e8d601b614ff4565b8c60a001516125fb565b856125fb565b905061376a81856125fb565b6040860152505f61378d61375861378289601b614ff4565b6108cc8a6028614ff4565b9050808560035b602002015250505050505050565b5f5f6138006137e86137d06137bb61361b8a6016614ff4565b6108d16137c98b6017614ff4565b8a516125fb565b6108d16137de8a6018614ff4565b89602001516125fb565b6108d16137f6896019614ff4565b88604001516125fb565b91505f61383761381e61381489601c614ff4565b8860800151612616565b6108d161382c8a6003614ff4565b6108cc8b6024614ff4565b90505f61386061384889601d614ff4565b6108d16138558b5f614ff4565b6108cc8c6025614ff4565b90505f61388a6138718a601e614ff4565b6108d161387f8c6001614ff4565b6108cc8d6026614ff4565b90506138c96138b16138a3856108d1868d5f01516125fb565b6108d1848c602001516125fb565b6108d16138bf8c6004614ff4565b8b604001516125fb565b93505050505f6138dd613723886021614ff4565b90505f6138ee613723896021614ff4565b90505f61392661390d6139028b6023614ff4565b6108d18c6006614ff4565b6108ef61391b8c6023614ff4565b6108cc8d6006614ff4565b90505f613944612b6861393987896125fb565b6108cc8d6021614ff4565b905061395081886125fb565b90505f61397861396a6139648d6006614ff4565b876125fb565b6108ef6139648e6022614ff4565b90505f6139868c6023614ff4565b90505f613996612b6883846125fb565b60808c0185905260a08c0184905290506139b0818b6125fb565b8b6006602002015250505050505050505050505050565b5f6139d35f600161262f565b90505f6139e15f600261262f565b90505f6139ef5f600361262f565b90505f613a0b613a0088601d614ff4565b6108ef89601c614ff4565b90505f613a27613a1c89601e614ff4565b6108ef8a601d614ff4565b90505f613a43613a388a601f614ff4565b6108ef8b601e614ff4565b90505f613a5f613a548b6024614ff4565b6108ef8c601f614ff4565b905083613a70816108cc818b612616565b9050613a80816108cc878a612616565b9050613a90816108cc8789612616565b9050613aa1816108cc8d6008614ff4565b9050613aad818a6125fb565b60e08b01525082613ac2816108cc818b612616565b9050613ad2816108cc868a612616565b9050613ae2816108cc8689612616565b9050613af3816108cc8d6008614ff4565b9050613aff818a6125fb565b6101008b01525081613b15816108cc818b612616565b9050613b25816108cc858a612616565b9050613b35816108cc8589612616565b9050613b46816108cc8d6008614ff4565b9050613b52818a6125fb565b6101208b01525080613b68816108cc818b612616565b9050613b78816108cc848a612616565b9050613b88816108cc8489612616565b9050613b99816108cc8d6008614ff4565b9050613ba5818a6125fb565b610140909a019990995250505050505050505050565b613bf46040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613bff84601d614ff4565b8152613c0c84601e614ff4565b6020820152613c1c846024614ff4565b6040820152613c2c846027614ff4565b6060820152613c3c846026614ff4565b6080820152613c4c846025614ff4565b60a08201525f613c5d856002614ff4565b90505f613c6a865f614ff4565b90505f613c7e8460400151855f015161262f565b90505f613c93856020015186602001516125fb565b606086015190915086905f90613ca990806125fb565b90505f613cc7613cc189602001518a606001516125fb565b886125fb565b90505f613ce6613cdf8a60a001518b60400151612616565b8a51612616565b9050613cf561396482886125fb565b9050613d1c613d16613d10613d0a848761262f565b8861262f565b84612616565b83612616565b9050613d44613d39613d2e83876125fb565b6108cc8f6009614ff4565b6108cc60018a61262f565b6101608c015250505050602085015160808601515f91613d6391612616565b90505f613d81613d778860600151886125fb565b886020015161262f565b90505f613da5613d9184876125fb565b6108d16137588b60a001518c5f015161262f565b9050613dcd613dc2613db7838c6125fb565b6108cc8e6009614ff4565b6108cc60018961262f565b6101808b0152505f9150613dee9050613de7836011612616565b87516125fb565b90505f613dfb8384612616565b9050613e078182612616565b90505f613e158360096125fb565b9050613e3e613e38613723613e318b60a001518c5f0151612616565b8b51612616565b8261262f565b60c089018190525f90613e5990613cc190613d2e908d6125fb565b9050613e6c8b600b602002015182612616565b6101608c0152505086515f9250613e939150613de790613e8c9080612616565b8851612616565b90505f613ed3613eae836108cc8a5f01518b60a0015161262f565b60208901516108ef90613ec19080612616565b6108cc8b602001518c60800151612616565b9050613ef089600c60200201516108d1613cc1613d2e858d6125fb565b89600c602002015250505050505050505050565b613f6e604051806101e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613f86613f7c86601e614ff4565b85604001516125fb565b808252613fa5906108d1613f9b88601d614ff4565b87602001516125fb565b808252613fba906108d1613de788601c614ff4565b808252613fcc906108d1876001614ff4565b80825260208201819052613fe5906108ef87601f614ff4565b8152614000613ff5866024614ff4565b6108ef87601c614ff4565b608082015261401e614013866027614ff4565b6108ef87601f614ff4565b60608201526080810151614037906108cc81600161262f565b6101c082015260808101516140779061406d90614066906108cc60015f516020615c8e5f395f51905f526155e0565b6001612616565b82606001516125fb565b60a082018190526140ad9061409f906108cc614094896002614ff4565b6108cc8a6003614ff4565b6108cc61375888600a614ff4565b83600e60200201526101c08101516140d19061409f906108cc614094896002614ff4565b6101e084015280516140f6906108cc6140eb886002614ff4565b6108cc896003614ff4565b6101208201525f61411561410b87601f614ff4565b836020015161262f565b9050614126816108cc83600161262f565b60e0830152614143614139876026614ff4565b86604001516125fb565b60408301819052614166906108d161415c896025614ff4565b88602001516125fb565b60408301819052614186906108d161417f896024614ff4565b88516125fb565b60408301526141a3614199876027614ff4565b836040015161262f565b60408301525f6141c26141b7886026614ff4565b6108ef89601e614ff4565b90506142146141ef613471614066866080015160015f516020615c8e5f395f51905f526108cc91906155e0565b6108cc614066866040015160015f516020615c8e5f395f51905f526108cc91906155e0565b60c084015260408301516142369061422c90806125fb565b846040015161262f565b61010084015260c083015161426290614254906108cc8a6004614ff4565b6108cc6139648a600a614ff4565b6102008601526101c083015161428190614254906108cc8a6004614ff4565b6102208601526101008301516142a090614254906108cc8a6004614ff4565b61024086015260e08301516142ba906108cc896004614ff4565b6101408401526142d96142ce886025614ff4565b6108ef89601d614ff4565b6101608401526080830151614317906141b79061430c90614066906108cc60015f516020615c8e5f395f51905f526155e0565b8561016001516125fb565b61018084018190526101208401516101a0850181905261434e916108d1906108cc6143438c6005614ff4565b6108cc8d6002614ff4565b6101a08401819052835161436e91906108d1906108cc6143438c5f614ff4565b6101a084018190526101408401516143869190612616565b6101a084018190526143a0906108cc6139648a600a614ff4565b6101a0840181905285600d613794565b6143e96040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61441e6144056143fa86601c614ff4565b6108cc876025614ff4565b6108d1614413876024614ff4565b6108cc88601d614ff4565b815261446361445861443f61443487601c614ff4565b6108cc88601f614ff4565b6108d161444d88601d614ff4565b6108cc89601e614ff4565b6108ef866026614ff4565b6040820181905261447890600160441b6125fb565b6040820181905261448e906108ef866027614ff4565b6040820181905281516144a19190612616565b604082018190526144b7906108cc866005614ff4565b604082015280516144cc90600160441b6125fb565b8082526144ec906108d16144e1876024614ff4565b6108cc886025614ff4565b80825260208201819052614513906108ef61450887601e614ff4565b6108d188601f614ff4565b60208201819052614529906108cc866004614ff4565b6020820152805160608201819052614546906108d186601f614ff4565b6060820181905261456a906108ef61455f876026614ff4565b6108d1886027614ff4565b6060820181905261457f906108cc865f614ff4565b8160600181815250505f6145a861459e83602001518460400151612616565b8360600151612616565b90506145b9816108cc876003614ff4565b90506145d16145c9866025614ff4565b6140006125fb565b608083018190526145e7906108d1876024614ff4565b608083018190526145fa906140006125fb565b60808301819052614610906108d187601e614ff4565b60808301819052614623906140006125fb565b60808301819052614639906108d187601d614ff4565b6080830181905261464c906140006125fb565b60808301819052614662906108d187601c614ff4565b60808301819052614678906108ef87601f614ff4565b6080830181905261468e906108cc876005614ff4565b60808301526146a16145c9866026614ff4565b60a083018190526146b7906108d1876025614ff4565b60a083018190526146ca906140006125fb565b60a083018190526146e0906108d1876024614ff4565b60a083018190526146f3906140006125fb565b60a08301819052614709906108d187601f614ff4565b60a0830181905261471c906140006125fb565b60a08301819052614732906108d187601e614ff4565b60a08301819052614748906108ef876027614ff4565b60a0830181905261475d906108cc875f614ff4565b60a0830181905260808301515f916147759190612616565b9050614786816108cc886004614ff4565b90506147928282612616565b60c084018190526147ab906108cc61396489600b614ff4565b60c084018190528560136020020152505050505050565b6148386040518061022001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61485161484685601c614ff4565b6108d1866002614ff4565b815261486c61486185601d614ff4565b6108d1866003614ff4565b602082015261488a61487f85601e614ff4565b6108d1866004614ff4565b60408201526148a861489d85601f614ff4565b6108d1866005614ff4565b606082015280516148da906148d3906148cc906148c590806125fb565b84516125fb565b83516125fb565b82516125fb565b608082015260208101516149189061490e90614904906148fa90806125fb565b84602001516125fb565b83602001516125fb565b82602001516125fb565b60a082015260408101516149569061494c906149429061493890806125fb565b84604001516125fb565b83604001516125fb565b82604001516125fb565b60c0820152606081015161498a9061406d906149809061497690806125fb565b84606001516125fb565b83606001516125fb565b60e0820152608081015160a08201516149a39190612616565b61010082015260c081015160e08201516149bd9190612616565b61012082015260a08101516149e1906149d69080612616565b826101200151612616565b61014082015260e0810151614a05906149fa9080612616565b826101000151612616565b610160820152610120810151614a1b9080612616565b6101e08201819052614a3c90614a319080612616565b826101600151612616565b6101e0820152610100810151614a529080612616565b6101a08201819052614a7390614a689080612616565b826101400151612616565b6101a08201819052610160820151614a8a91612616565b6101808201526101408101516101e0820151614aa69190612616565b6101c0820152614aba61347185600c614ff4565b6102008201819052610280840151610180830151614ae5926108d1916108cc906108ef8a6024614ff4565b8360146020020152614b1583601560200201516108d18361020001516108cc856101a001516108ef8a6025614ff4565b8360156020020152614b4583601660200201516108d18361020001516108cc856101c001516108ef8a6026614ff4565b8360166020020152614b7583601760200201516108d18361020001516108cc856101e001516108ef8a6027614ff4565b836017602002015250505050565b614bd56040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f6040518060800160405280614c0a7f10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e76125e3565b8152602001614c387f0c28145b6a44df3e0149b3d0a30b3bb599df9756d4dd9b84a86b38cfb45a740b6125e3565b8152602001614c657e544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac156125e3565b8152602001614c937f222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428b6125e3565b90529050614cb0614ca586601c614ff4565b6108d1876002614ff4565b6101208301819052614cef90614ce490614cd990614cce90806125fb565b8561012001516125fb565b8461012001516125fb565b8361012001516125fb565b8252614cfc85601d614ff4565b6020830152614d0c85601e614ff4565b6040830152614d1c85601f614ff4565b606083015281516020830151614d449161459e91614d3a9190612616565b8460400151612616565b6080830152614d5761372386600d614ff4565b6101408301528151614d7890614d6e90835f610bce565b8360800151612616565b60a0830152614da484601860200201516108d18461014001516108cc8660a001516108ef8b6024614ff4565b6103008501526020820151614dbf90614d6e90836001610bce565b60c0830152614deb84601960200201516108d18461014001516108cc8660c001516108ef8b6025614ff4565b6103208501526040820151614e0690614d6e90836002610bce565b60e0830152614e3284601a60200201516108d18461014001516108cc8660e001516108ef8b6026614ff4565b6103408501526060820151614e4d90614d6e90836003610bce565b610100830152614e7b84601b60200201516108d18461014001516108cc8661010001516108ef8b6027614ff4565b84601b6135aa565b815160015b601c811015614ed557614ecb826108d18684601c8110614eaa57614eaa615b73565b602002015186614ebb6001876155e0565b601b8110610bce57610bce615b73565b9150600101614e88565b5092915050565b5f5f8390505f60405160208152602080820152602060408201528260608201528460808201525f516020615c8e5f395f51905f5260a082015260205f60c08360055afa80614f28575f5ffd5b505f5160809190910160405295945050505050565b614f45615320565b614f4d615320565b604051835181526020840151602082015284604082015260408160608360075afa80614f77575f5ffd5b5080518252602080820151908301526060016040529392505050565b614f9b615320565b614fa3615320565b6040518451815260208501516020820152835160408201526020840151606082015260408160808360065afa80614fd8575f5ffd5b5080518252602080820151908301526080016040529392505050565b5f8282602881111561500857615008615c59565b6029811061501857615018615b73565b60200201519392505050565b604051806103e001604052805f81526020015f81526020015f815260200161504a615320565b8152602001615057615320565b8152602001615064615320565b8152602001615071615320565b815260200161507e615320565b815260200161508b615320565b8152602001615098615320565b81526020016150a5615320565b81526020016150b2615320565b81526020016150bf615320565b81526020016150cc615320565b81526020016150d9615320565b81526020016150e6615320565b81526020016150f3615320565b8152602001615100615320565b815260200161510d615320565b815260200161511a615320565b8152602001615127615320565b8152602001615134615320565b8152602001615141615320565b815260200161514e615320565b815260200161515b615320565b8152602001615168615320565b8152602001615175615320565b8152602001615182615320565b815260200161518f615320565b815260200161519c615320565b81526020016151a9615320565b905290565b6040518061028001604052806151c26153ec565b81526020016151cf615320565b81526020016151dc615320565b81526020016151e9615320565b81526020016151f6615320565b8152602001615203615320565b8152602001615210615320565b815260200161521d615320565b815260200161522a615320565b8152602001615237615320565b815260200161524461540b565b81526020015f8152602001615257615438565b81526020015f815260200161526a615466565b8152602001615277615485565b815260200161528461536a565b815260200161518f6154b3565b6040518061052001604052806029906020820280368337509192915050565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020016152ee6154b3565b81526020016152fb6154b3565b81526020015f81526020015f81526020015f81526020015f8152602001606081525090565b60405180604001604052805f81526020015f81525090565b604051806040016040528061519c615320565b6040518061012001604052806009906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b6040518060e0016040528061539c6154d1565b81526020015f81526020015f81526020015f81526020015f81526020016153c16154d1565b81526020015f81525090565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b60405180606001604052806003905b615422615320565b81526020019060019003908161541a5790505090565b604051806103800160405280601c905b61545061534b565b8152602001906001900390816154485790505090565b604051806105400160405280602a906020820280368337509192915050565b604051806103600160405280601b905b61549d615320565b8152602001906001900390816154955790505090565b60405180608001604052806004906020820280368337509192915050565b604051806120000160405280610100906020820280368337509192915050565b5f5f5f5f60408587031215615504575f5ffd5b84356001600160401b03811115615519575f5ffd5b8501601f81018713615529575f5ffd5b80356001600160401b0381111561553e575f5ffd5b87602082840101111561554f575f5ffd5b6020918201955093508501356001600160401b0381111561556e575f5ffd5b8501601f8101871361557e575f5ffd5b80356001600160401b03811115615593575f5ffd5b8760208260051b84010111156155a7575f5ffd5b949793965060200194505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417612610576126106155b5565b81810381811115612610576126106155b5565b805f5b60108110156131e15781518452602093840193909101906001016155f6565b805f5b60038110156131e15761563684835180518252602090810151910152565b6040939093019260209190910190600101615618565b805f5b601c8110156131e1578151845f5b600981101561567c57825182526020928301929091019060010161565d565b50505061012093909301926020919091019060010161564f565b805f5b602a8110156131e1578151845260209384019390910190600101615699565b805f5b601b8110156131e1576156d984835180518252602090810151910152565b60409390930192602091909101906001016156bb565b805f5b601c8110156131e15781518452602093840193909101906001016156f2565b805f5b60048110156131e1578151845260209384019390910190600101615714565b8183525f6001600160fb1b0383111561574a575f5ffd5b8260051b80836020870137939093016020019392505050565b61576e8188516155f3565b5f602088015161578c61020084018280518252602090810151910152565b5060408801518051610240840152602090810151610260840152606089015180516102808501528101516102a0840152608089015180516102c08501528101516102e084015260a0890151805161030085015281015161032084015260c0890151805161034085015281015161036084015260e089015180516103808501528101516103a084015261010089015180516103c08501528101516103e084015261012089015180516104008501520151610420830152610140880151615855610440840182615615565b5061016088015161050083015261018088015161587661052084018261564c565b506101a08801516124a08301526101c08801516158976124c0840182615696565b506101e08801516158ac612a008401826156b8565b506102008801516158c16130c08401826156ef565b506102208801516158d6613440840182615711565b5061024088015180516134c08401526020908101516134e0840152610260890151805161350085015201516135208301526135c0613540830181905261591f9083018789615733565b613560830195909552506135808101929092526135a0909101529392505050565b634e487b7160e01b5f52604160045260245ffd5b60405161014081016001600160401b038111828210171561597757615977615940565b60405290565b604051601f8201601f191681016001600160401b03811182821017156159a5576159a5615940565b604052919050565b5f60c082840312156159bd575f5ffd5b60405160c081016001600160401b03811182821017156159df576159df615940565b604090815283518252602080850151908301528381015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b5f82601f830112615a30575f5ffd5b5f610360615a3d8161597d565b915083018185821115615a4e575f5ffd5b845b82811015615a68578051825260209182019101615a50565b509195945050505050565b5f82601f830112615a82575f5ffd5b5f610380615a3d8161597d565b5f610be0828403128015615aa1575f5ffd5b50615aaa615954565b615ab484846159ad565b8152615ac38460c08501615a21565b6020820152615ad6846104208501615a73565b60408201526107a08301516060820152615af4846107c08501615a73565b6080820152610b4083015160a0820152610b6083015160c0820152610b8083015160e0820152610ba0830151610100820152610bc09092015161012083015250919050565b80820180821115612610576126106155b5565b5f5f85851115615b5a575f5ffd5b83861115615b66575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52603260045260245ffd5b5f60018201615b9857615b986155b5565b5060010190565b80356020831015612610575f19602084900360031b1b1692915050565b5f82615bd657634e487b7160e01b5f52601260045260245ffd5b500690565b5f81615be957615be96155b5565b505f190190565b5f8183825b6008811015615c14578151835260209283019290910190600101615bf5565b5050506101008201905092915050565b5f82518060208501845e5f920191825250919050565b5f60208284031215615c4a575f5ffd5b815180151581146103f4575f5ffd5b634e487b7160e01b5f52602160045260245ffdfe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063ea50d0e41461002d575b5f5ffd5b61004061003b3660046154f1565b610054565b604051901515815260200160405180910390f35b5f5f61007f7f00000000000000000000000000000000000000000000000000000000000000006102ee565b905061008c8160206155c9565b85146100ee577f0000000000000000000000000000000000000000000000000000000000000000856100bf8360206155c9565b6040516359895a5360e01b81526004810193909352602483019190915260448201526064015b60405180910390fd5b5f6100f76103fb565b90505f61012588887f0000000000000000000000000000000000000000000000000000000000000000610410565b90506010826040015161013891906155e0565b85146101575760405163fa06659360e01b815260040160405180910390fd5b60405163995bf45760e01b81525f9073__$d0188790065ac172f94fde8676855b6381$__9063995bf457906101fa9085908b908b907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090600401615763565b610be060405180830381865af4158015610216573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061023a9190615a8f565b905061028a8787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855185516060810151608090910151919350915060016108a9565b815160a0015261029a8282610a10565b6102b7576040516313f8744360e31b815260040160405180910390fd5b6102c2828483610c17565b6102df576040516352ec174560e11b815260040160405180910390fd5b50600198975050505050505050565b5f8060026102fe60016008615b39565b61030891906155c9565b9050610316600260036155c9565b6103209082615b39565b9050600161032f6009856155c9565b61033991906155c9565b6103439082615b39565b90506001610352816029615b39565b61035c91906155c9565b6103669082615b39565b9050610374600160026155c9565b61037e9082615b39565b905061038b6001846155c9565b6103959082615b39565b90506103a3600160046155c9565b6103ad9082615b39565b905060026103bc6001856155e0565b6103c691906155c9565b6103d09082615b39565b90506103dd6002806155c9565b6103e79082615b39565b90506103f4601082615b39565b9392505050565b610403615024565b61040b611c14565b905090565b6104186151ae565b5f805b601081101561047a57610447868387610435602083615b39565b9261044293929190615b4c565b61254e565b8351826010811061045a5761045a615b73565b6020020181815250506020826104709190615b39565b915060010161041b565b5061049e85828661048c604083615b39565b9261049993929190615b4c565b612561565b60208301526104ae604082615b39565b90506104c185828661048c604083615b39565b6040808401919091526104d49082615b39565b90506104e785828661048c604083615b39565b60608301526104f7604082615b39565b905061050a85828661048c604083615b39565b608083015261051a604082615b39565b905061052d85828661048c604083615b39565b60c083015261053d604082615b39565b905061055085828661048c604083615b39565b60e0830152610560604082615b39565b905061057385828661048c604083615b39565b60a0830152610583604082615b39565b905061059685828661048c604083615b39565b6101008301526105a7604082615b39565b90506105ba85828661048c604083615b39565b6101208301526105cb604082615b39565b90506105de85828661048c604083615b39565b610140830151526105f0604082615b39565b9050610603858286610435602083615b39565b610160830152610614602082615b39565b90505f5b83811015610692575f5b60098110156106895761063c878488610435602083615b39565b84610180015183601c811061065357610653615b73565b6020020151826009811061066957610669615b73565b60200201818152505060208361067f9190615b39565b9250600101610622565b50600101610618565b505f5b6106a160016029615b39565b8110156106f0576106b9868387610435602083615b39565b836101c0015182602a81106106d0576106d0615b73565b6020020181815250506020826106e69190615b39565b9150600101610695565b50610702858286610435602083615b39565b6101a0830152610713602082615b39565b905061072685828661048c604083615b39565b6101408301516020015261073b604082615b39565b905061074e85828661048c604083615b39565b61014083015160026020020152610766604082615b39565b90505f5b6107756001856155e0565b8110156107be5761078d86838761048c604083615b39565b836101e0015182601b81106107a4576107a4615b73565b60200201526107b4604083615b39565b915060010161076a565b505f5b83811015610811576107da868387610435602083615b39565b83610200015182601c81106107f1576107f1615b73565b6020020181815250506020826108079190615b39565b91506001016107c1565b505f5b60048110156108655761082e868387610435602083615b39565b836102200151826004811061084557610845615b73565b60200201818152505060208261085b9190615b39565b9150600101610814565b5061087785828661048c604083615b39565b610240830152610888604082615b39565b905061089b85828661048c604083615b39565b610260830152509392505050565b5f600180826108d6866108d1896108cc6108c78a6310000000615b39565b6125e3565b6125fb565b612616565b90505f6108f4876108ef8a6108cc6108c78b6001615b39565b61262f565b90505f5b61092360107f00000000000000000000000000000000000000000000000000000000000000006155e0565b811015610990575f61094d8c838151811061094057610940615b73565b6020026020010151612657565b905061095d866108cc8684612616565b955061096d856108cc8584612616565b9450610979848b612616565b9350610985838b61262f565b9250506001016108f8565b505f5b60108110156109f7575f8a82601081106109af576109af615b73565b602002015190506109c4866108cc8684612616565b95506109d4856108cc8584612616565b94506109e0848b612616565b93506109ec838b61262f565b925050600101610993565b50610a02848461266c565b9a9950505050505050505050565b5f5f610a2583606001518561016001516125fb565b905060015f5b7f0000000000000000000000000000000000000000000000000000000000000000811015610b17575f86610180015182601c8110610a6b57610a6b615b73565b602002015180519091505f90610a89908360015b6020020151612616565b9050848114610aab576040516313f8744360e31b815260040160405180910390fd5b5f876080015184601c8110610ac257610ac2615b73565b60200201519050610ad3838261267a565b9550610b07856108cc60016108d1856108cc8e604001518b601c8110610afb57610afb615b73565b6020020151600161262f565b9450505050806001019050610a2b565b50610b20615291565b5f5b6029811015610b70576101c0870151610b3c600183615b39565b602a8110610b4c57610b4c615b73565b6020020151828260298110610b6357610b63615b73565b6020020152600101610b22565b505f610b8582875f0151886020015186612828565b9050600160025b7f0000000000000000000000000000000000000000000000000000000000000000811015610be257610bd882896080015183601c8110610bce57610bce615b73565b60200201516125fb565b9150600101610b8c565b50610c08610bf5836108cc60018561262f565b6108d18a6101a001518a606001516125fb565b94909414979650505050505050565b5f610c206152b0565b5f610c4f8460c001517f00000000000000000000000000000000000000000000000000000000000000006128a1565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b03811115610c8a57610c8a615940565b604051908082528060200260200182016040528015610cb3578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b03811115610cef57610cef615940565b604051908082528060200260200182016040528015610d2857816020015b610d15615320565b815260200190600190039081610d0d5790505b509050610d5b610d56876101000151855f81518110610d4957610d49615b73565b602002602001015161262f565b61296a565b84610120018181525050610d90610d56876101000151855f81518110610d8357610d83615b73565b6020026020010151612616565b610140850181905261012085015160e0880151610db1926108d191906125fb565b845260c0860151610de190610dc59061296a565b6108cc8661012001516108ef8a60e001518961014001516125fb565b6020850152815160019083905f90610dfb57610dfb615b73565b602002602001018181525050876102400151815f81518110610e1f57610e1f615b73565b6020908102919091010152600160a08501525f60c08501528351610e42906129da565b60408501526020840151610e55906129da565b606085015260015b610e6960016024615b39565b8111610f0a57610e8185604001518660a001516125fb565b838281518110610e9357610e93615b73565b602002602001018181525050610edc8560c001516108d18b6101c00151600185610ebd91906155e0565b602a8110610ecd57610ecd615b73565b60200201518860a001516125fb565b60c086015260a08086015190880151610ef591906125fb565b60a0860152610f0381615b87565b9050610e5d565b505f5b6005811015610fe3575f610f22601e83615b39565b90505f610f3160016024615b39565b610f3b9084615b39565b9050610f6c858381518110610f5257610f52615b73565b60200260200101516108d189606001518a60a001516125fb565b858381518110610f7e57610f7e615b73565b602002602001018181525050610fbb8760c001516108d18d6101c0015184602a8110610fac57610fac615b73565b60200201518a60a001516125fb565b60c088015260a080880151908a0151610fd491906125fb565b60a08801525050600101610f0d565b50876020015181600181518110610ffc57610ffc615b73565b602002602001018190525086606001518160028151811061101f5761101f615b73565b602002602001018190525086608001518160038151811061104257611042615b73565b60200260200101819052508660a001518160048151811061106557611065615b73565b60200260200101819052508660c001518160058151811061108857611088615b73565b60200260200101819052508660e00151816006815181106110ab576110ab615b73565b6020026020010181905250866101000151816007815181106110cf576110cf615b73565b6020026020010181905250866101200151816008815181106110f3576110f3615b73565b60200260200101819052508661014001518160098151811061111757611117615b73565b602002602001018190525086610160015181600a8151811061113b5761113b615b73565b6020026020010181905250866101c0015181600b8151811061115f5761115f615b73565b602002602001018190525086610180015181600c8151811061118357611183615b73565b6020026020010181905250866101a0015181600d815181106111a7576111a7615b73565b6020026020010181905250866101e0015181600e815181106111cb576111cb615b73565b602002602001018190525086610200015181600f815181106111ef576111ef615b73565b60200260200101819052508661022001518160108151811061121357611213615b73565b60200260200101819052508661024001518160118151811061123757611237615b73565b60200260200101819052508661026001518160128151811061125b5761125b615b73565b60200260200101819052508661028001518160138151811061127f5761127f615b73565b6020026020010181905250866102a00151816014815181106112a3576112a3615b73565b6020026020010181905250866102c00151816015815181106112c7576112c7615b73565b6020026020010181905250866102e00151816016815181106112eb576112eb615b73565b60200260200101819052508661030001518160178151811061130f5761130f615b73565b60200260200101819052508661032001518160188151811061133357611333615b73565b60200260200101819052508661034001518160198151811061135757611357615b73565b602002602001018190525086610360015181601a8151811061137b5761137b615b73565b602002602001018190525086610380015181601b8151811061139f5761139f615b73565b6020026020010181905250866103a0015181601c815181106113c3576113c3615b73565b6020026020010181905250866103c0015181601d815181106113e7576113e7615b73565b6020026020010181905250876040015181601e8151811061140a5761140a615b73565b6020026020010181905250876060015181601f8151811061142d5761142d615b73565b602002602001018190525087608001518160208151811061145057611450615b73565b60200260200101819052508760a001518160218151811061147357611473615b73565b60200260200101819052508761012001518160228151811061149757611497615b73565b6020026020010181905250876101000151816023815181106114bb576114bb615b73565b60200260200101819052508760c00151816024815181106114de576114de615b73565b60200260200101819052508760e001518160258151811061150157611501615b73565b60200260200101819052505f61154787608001518660c001518b6102000151877f00000000000000000000000000000000000000000000000000000000000000006129ec565b9050611571815f8151811061155e5761155e615b73565b60200260200101518661012001516125fb565b608086018190526102008a01515160e08901516115a292916108d19161159791906125fb565b8861014001516125fb565b608086015260e08701516115b590612b4a565b60a08601525f6115c760016024615b39565b6115d2906001615b39565b90505f5b61160160017f00000000000000000000000000000000000000000000000000000000000000006155e0565b811015611812575f61163460017f00000000000000000000000000000000000000000000000000000000000000006155e0565b8210159050806117a357611668610d568b6101000151898560016116589190615b39565b81518110610d4957610d49615b73565b6101208901526101008a015161169890610d569089611688866001615b39565b81518110610d8357610d83615b73565b61014089015260a08801516101208901516116b391906125fb565b61016089015260a088015160e08b01516116db916116d0916125fb565b8961014001516125fb565b61018089018190526116fe906116f0906129da565b6108d18a61016001516129da565b866117098486615b39565b8151811061171957611719615b73565b6020026020010181815250505f6117528961018001518e61020001518560016117429190615b39565b601c8110610bce57610bce615b73565b905061178c816108d18b61016001518887600161176f9190615b39565b8151811061177f5761177f615b73565b60200260200101516125fb565b905061179c896080015182612616565b60808a0152505b6117c26117b88960a001518c60e001516125fb565b8b60e001516125fb565b60a08901526101e08c015182601b81106117de576117de615b73565b6020020151856117ee8486615b39565b815181106117fe576117fe615b73565b6020908102919091010152506001016115d6565b5061183e60017f00000000000000000000000000000000000000000000000000000000000000006155e0565b6118489082615b39565b90506118686118608961010001518a60c0015161262f565b60019061266c565b60e08701515261010088015160c08901516118ac91611860916108ef907f07b0c561a6148404f086204a9f36ffb0617942546750f230c893619174a57a76906125fb565b60e0878101805160200192909252815180516040909101529051805160609091015260a0870151908901516118ee916118e4916125fb565b8960e001516125fb565b60a08701525f5b600481101561199c575f6119278860e00151836004811061191857611918615b73565b60200201518960a001516125fb565b9050611932816129da565b886101000151836004811061194957611949615b73565b602002015260a088015160e08b015161196291906125fb565b8860a001818152505061198e88608001516108d1838f61022001518660048110610bce57610bce615b73565b6080890152506001016118f5565b506101008601515184518590839081106119b8576119b8615b73565b602090810291909101810191909152610100870151908101516119dc916002610a7f565b846119e8836001615b39565b815181106119f8576119f8615b73565b60209081029190910101526101008601516060015184611a19836002615b39565b81518110611a2957611a29615b73565b60209081029190910101525f5b6003811015611a8b578a61014001518160038110611a5657611a56615b73565b60200201518483611a6681615b87565b945081518110611a7857611a78615b73565b6020908102919091010152600101611a36565b506040518060400160405280600181526020016002815250838281518110611ab557611ab5615b73565b60200260200101819052508560800151848280611ad190615b87565b935081518110611ae357611ae3615b73565b602002602001018181525050611b0d8a61022001518960c001518a608001518d6101a00151612b55565b611b2a5760405163a2a2ac8360e01b815260040160405180910390fd5b5f8a6102600151905080848381518110611b4657611b46615b73565b6020026020010181905250886101000151858381518110611b6957611b69615b73565b602002602001018181525050611b7d615338565b611b878587612eb8565b8152611b9282612fb0565b602082018190528c5182515f92611baa929190612ff6565b90505f5f611bba8f5f0151613087565b91509150611bc782613148565b611bd081613148565b8351611bdd9083856131e7565b84526020840151611bef9082856131e7565b602085018190528451611c0191613216565b9f9e505050505050505050505050505050565b611c1c615024565b50604080516103e08101825262020000815260116020808301919091526101a282840152825180840184527f13637737c33db244a3712ce1f84f4a6400935882acd540419ff5fc19166ea61881527f15e894c35784b66acc688f1d787868569692c5761fa71b84ab52a3b2c1dd41a8818301526060830152825180840184527f16daf8e28d24b787f5a311fc0930d1d495f74cb0eba1780ae0d36610a1ab587081527f220aa4f565987b5544214f4aa9477fd03cbb82e8a57a2aeaa21968038c2af3a5818301526080830152825180840184527f2c0c47eac6980c002be7c5f4633a8bd6d5d0fc9e6651e541b141fc02557ca48d81527f1ca159a1bbe1a8c82eb796fba79bcdff36d3fb98c986996878fdf102d6a12ab98183015260a0830152825180840184527f1c05ee47a359c77501f8bb557929e27f64523630d83a818cd364994cadcaf8c581527f2f8e9947f0eab4542b5e684bbc807466bc192c42d7fce467125769936b4536f58183015260c0830152825180840184527f082a6fc7457baf2a604ae295f701031e54ede6a34d88f93f5e7aaeb2a213312181527f20ecb56a891971bc2cf9bc98cdc00fc8ec720de344999055300f979e749ec93d8183015260e0830152825180840184527f265c425247eed132b40b111b5a7c14d7d9db56aefbf71eeec0b2cc09dd66a6b381527f3054e4ee825da9852d2fc5172b24c4ffbdfd315f13fce4b498379c566604897e81830152610100830152825180840184527f163a3285e23ec78bb34d3c6122f47c770ee1f228ed2dda996542bade7a8bc2e481527f188245f34ba632acb17885f4be308c9551dbfd5095069e7077281d144e55044b81830152610120830152825180840184527f1913712d01550fa30bf15a28a13902738529edfc1ddc730c5bc57c00514fd3b481527f1f125db8f6315e55f2b20ba6863482eac90d77f6c6289efb0d6a6c740be172cd81830152610140830152825180840184527f26ce5fb2dc4d867f0f6957729e6158fe7d6924445514b4c485f0b093195cff4881527f102d0d1aa8a400a6f7e233d512ed7205fcb3eb0ba5c0d54041f23b25f58a4c5781830152610160830152825180840184527f0ff4dd20d4821b5ca6738a69881d693c04c892bade4b929a311c6612d94ffbc281527f19fcce46268bf02b94f4486494e361d2c126372f35e0583d55825134c2ee88cc81830152610180830152825180840184527f018d6d017a26c5c223931a63ee8ad0ef37f9f9f0caba099d8d8482e95b6f46e881527f0ed38b925edf5f9b54e2b5289074d64999010264d2a4eae8fc53b8e38fc10b6b818301526101a0830152825180840184527f1a08892e26c7c33a003d075a86a9edd8cdf253009e26fa7b2ac7f4339ca07ce381527f09383a35fb9f67045a070c939b0d947454f64cd92bcf90838b2163bc0e071b58818301526101c0830152825180840184527f0d2f53319bc2e321ef88e47d0a3a35b0f35728ed7b7790dd357ecda4ea55a57b81527f074497f78eec311b533ca170dc19e81c0cf5a22dce7bdf938841ff71e8cbdc8d818301526101e0830152825180840184527f0cde2682ddd264dcac5b0e5626164271411bca898cd8beb4c98536534ffe3e6981527f20f8bfa3f9ed612f481072d20715601f08415ecbb5092b8dae96a15c583ac77081830152610200830152825180840184527f2dc45f069a801ce507391a5d369024e6c0a8f508426efa10efec079f652943fd81527f0ca193ecd89783532ab900689868dfa9713a57dd313c222bfa2d1ee92c5a1ec981830152610220830152825180840184527f18f0b7ba3135bb08f1e312928b750b6bacb9776a9e8a3d30d1da58873083baa681527f1ed01d844f4aee867147b3eb571130d0e37c0686151a13106aeb40936713c09381830152610240830152825180840184527f2787d437215fba393c1bb6e8bc91cdf1f5c75cb93b1eb8b522819a6cfc71507c81527f027ea99429a3d006c4d01411577bf6ac562f7811b4d64e7ff060351468d63b6b81830152610260830152825180840184527f0d0f4f0fa40d68989657a0feee08deed1f08355b066c778578bfbf430cc2d22b81527f2d9d81c8732bf6991afa6657818d09e17fe8bfb40f59301a7b992fc8f2a9d1e981830152610280830152825180840184527ea673368cf560b1069debee688c082cda349df8fbacc711f845dc7960acdeba81527f0234d1b5f65d17aaf71d51ae744b28b6a024bface3333ea19ef58c8c2fc38595818301526102a0830152825180840184527f29353e7eeeae9d8cf7bc6bac6961a44a69fe7b38396fc4b07d416b226fbecc3d81527f012d0615aad587261d1403ca95322f67b6e64382ac7346503bb61ee8ff465ffd818301526102c0830152825180840184527f0dddb0066cbe44ac884fe3658ad6c24943d3329fd839b8dd47b37e0b334f3efc81527f1a54ecfb49945a189bd28fa28103f9ad98d08107f8d68167d96417d95297903f818301526102e0830152825180840184527f271c4df54fa64ddca42889abf3e4559c2aa59525ea5a1858fadae4b6eb6f140681527f06f10a564e9397fc800ffbb6b4c887df1d1e4eeb6dd8cd4f789916e31836f19781830152610300830152825180840184527f099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d2681527e15b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f81830152610320830152825180840184527f1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e81527f305e8992b148eedb22e6e992077a84482141c7ebe42000a1d58ccb74381f6d1981830152610340830152825180840184527f061f64497996e8915722501e9e367938ed8da2375186b518c7345c60b1134b2d81527f1b84d38339321f405ebaf6a2f830842ad3d7cb59792e11c0d2691f317fd50e6e81830152610360830152825180840184527f043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce81527f261522c4089330646aff96736194949330952ae74c573d1686d9cb4a007338548183015261038083015282518084018452600181526002818301526103a083015282518084019093527f0602bc9d2460bf21b73d27154ff5f8919350545f3cb6dc7f40dae014613bc4c683527f1df576b5b16064433355e8bad62265096027978ab6496527059305dbd8708565908301526103c081019190915290565b5f6103f461255c8385615b9f565b612657565b612569615320565b60408051808201909152805f516020615c6e5f395f51905f5261258f60205f8789615b4c565b61259891615b9f565b6125a29190615bbc565b81526020908101905f516020615c6e5f395f51905f52906125c7906040908789615b4c565b6125d091615b9f565b6125da9190615bbc565b90529392505050565b5f5f516020615c8e5f395f51905f52825b0692915050565b5f5f516020615c8e5f395f51905f5282840990505b92915050565b5f5f516020615c8e5f395f51905f528284089392505050565b5f5f516020615c8e5f395f51905f52825f516020615c8e5f395f51905f520384089392505050565b5f5f516020615c8e5f395f51905f52826125f4565b5f6103f4836108cc8461296a565b5f5f604051806101200160405280619d8081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec5181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd31815260200161024081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd3181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec518152602001619d8081525090505f600190505f5f90505b600981101561277357612769826108cc878461262f565b9150600101612752565b5061277c61534b565b5f5b60098110156127cd576127ae610d5685836009811061279f5761279f615b73565b60200201516108cc898561262f565b8282600981106127c0576127c0615b73565b602002015260010161277e565b505f5b600981101561281357612809856108d18984600981106127f2576127f2615b73565b6020020151858560098110610bce57610bce615b73565b94506001016127d0565b5061281e84836125fb565b9695505050505050565b5f61283161536a565b61283c86828561340a565b612848868683866135b6565b612854868683866137a2565b61285f8682856139c7565b61286a868285613bbb565b61287686868386613f04565b6128818682856143b0565b61288c8682856147c2565b612897868285614b83565b61281e8185614e83565b60605f826001600160401b038111156128bc576128bc615940565b6040519080825280602002602001820160405280156128e5578160200160208202803683370190505b50905083815f815181106128fb576128fb615b73565b602090810291909101015260015b838110156129625761293d826129206001846155e0565b8151811061293057612930615b73565b6020026020010151612b4a565b82828151811061294f5761294f615b73565b6020908102919091010152600101612909565b509392505050565b5f5f8290505f604051602081526020808201526020604082015282606082015260025f516020615c8e5f395f51905f520360808201525f516020615c8e5f395f51905f5260a082015260205f60c08360055afa806129c6575f5ffd5b505f51608091909101604052949350505050565b5f516020615c8e5f395f51905f520390565b60605f826001600160401b03811115612a0757612a07615940565b604051908082528060200260200182016040528015612a30578160200160208202803683370190505b509050825b8015612b3f575f85612a486001846155e0565b81518110612a5857612a58615b73565b602002602001015190505f89600184612a7191906155e0565b601c8110612a8157612a81615b73565b602002015190505f612adc612aa0612a99858d6125fb565b60026125fb565b6108ef8b612aaf6001896155e0565b601c8110612abf57612abf615b73565b60200201516108cc612ad6886108cc60018a61262f565b8761262f565b9050612afd816108cc610d56612af7876108cc60018961262f565b86612616565b99508990508085612b0f6001876155e0565b81518110612b1f57612b1f615b73565b60200260200101818152505050505080612b3890615bdb565b9050612a35565b509695505050505050565b5f61261082836125fb565b5f600181612b6e612b6887610100614edc565b8361262f565b905080612b8e5760405163835eb8f760e01b815260040160405180910390fd5b612b96615389565b80518390525f5b7f0000000000000000000000000000000000000000000000000000000000000000811015612c7f575f612bd18260096155c9565b612bdc906001615b39565b905084835f0151826101008110612bf557612bf5615b73565b60200201525f612c06826001615b39565b90505b612c14600983615b39565b811015612c75578351612c5490612c2c6001846155e0565b6101008110612c3d57612c3d615b73565b60200201518a85601c8110610bce57610bce615b73565b8451826101008110612c6857612c68615b73565b6020020152600101612c09565b5050600101612b9d565b50608081018390525f602082018190525b610100811015612d9057612cb1612cab83608001518a6125fb565b8561262f565b8260a00151826101008110612cc857612cc8615b73565b602002015260a0820151612cf290826101008110612ce857612ce8615b73565b602002015161296a565b8260a00151826101008110612d0957612d09615b73565b602002018181525050612d4f82602001516108d1845f0151846101008110612d3357612d33615b73565b60200201518560a00151856101008110610bce57610bce615b73565b60208301526080820151612d83907f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d66125fb565b6080830152600101612c90565b505f612da1836108cc61010061296a565b9050612db18260200151826125fb565b602083015260a0820151612dcc905f5b6020020151826125fb565b604083015260a0820151612df890612de760016101006155e0565b6101008110612dc157612dc1615b73565b60608301526040820151612e0e908a6002610bce565b60c08301819052612e6e906108d1612e468b7f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d661262f565b60208d015160408e01516108cc91612e5d9161262f565b8e5160208901516108ef91906125fb565b60c083018190526060830151612ea391612e97916108d1906108cc8e600260200201518c61262f565b6108ef858c6003610bce565b60c08301819052159998505050505050505050565b612ec0615320565b7f00000000000000000000000000000000000000000000000000000000000000005f5b81811015612f1557612f0d858281518110612f0057612f00615b73565b6020026020010151613148565b600101612ee3565b50604051600190815b60018401811015612f7a5760208102870160208202870181515160408501528151602001516060850152805160808501525050604080830160606040850160075afa8316925060408260808460065afa90921691600101612f1e565b5080518452602081015160208501525080612fa8576040516352ec174560e11b815260040160405180910390fd5b505092915050565b612fb8615320565b5f516020615c6e5f395f51905f5282602001515f516020615c6e5f395f51905f52612fe391906155e0565b612fed9190615bbc565b60208301525090565b5f5f5f61300286613087565b9150915061300e6153cd565b82518152602080840151818301528251604080840191909152838201516060840152875160808401528782015160a0840152865160c08401528682015160e08401525161307c9161306191849101615bf0565b60405160208183030381529060405280519060200120612657565b979650505050505050565b61308f615320565b613097615320565b82516020808501516040860151606087015160cc90811b608892831b604494851b90961795909517949094178652608087015160a088015160c089015160e08a0151871b90841b91851b9092171717868401526101008701516101208801516101408901516101608a0151871b90841b91851b909217171785526101808701516101a08801516101c08901516101e09099015190951b9790911b9390911b1791909117939093179281019290925291565b805160208201515f5f516020615c6e5f395f51905f528380095f516020615c6e5f395f51905f5260035f516020615c6e5f395f51905f52838709085f516020615c6e5f395f51905f5284850914915050806131e15760405162461bcd60e51b8152602060048201526019602482015278706f696e74206973206e6f74206f6e2074686520637572766560381b60448201526064016100e5565b50505050565b6131ef615320565b6131f7615320565b6132018386614f3d565b905061320d8185614f93565b95945050505050565b81516020808401518351848301516040805194850195909552938301919091527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260608301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60808301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60a08301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60c083015260e08201526101008101919091527f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c16101208201527f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b06101408201527f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe46101608201527f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e556101808201525f9081906101a00160405160208183030381529060405290505f5f60086001600160a01b0316836040516133ac9190615c24565b5f60405180830381855afa9150503d805f81146133e4576040519150601f19603f3d011682016040523d82523d5f602084013e6133e9565b606091505b509150915081801561281e57508080602001905181019061281e9190615c3a565b5f613416846007614ff4565b90507f183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f80000005f61347761347161344b85600361262f565b6108cc61346661345b8b5f614ff4565b6108cc8c601d614ff4565b6108cc8b601c614ff4565b836125fb565b90506134f86134ed6134d46134bb6134a2856108d16134978d6002614ff4565b6108cc8e601c614ff4565b6108d16134b08c6003614ff4565b6108cc8d601d614ff4565b6108d16134c98b6004614ff4565b6108cc8c601e614ff4565b6108d16134e28a6005614ff4565b6108cc8b601f614ff4565b6108d1886001614ff4565b9050613517816108d161350c86600161262f565b6108cc8a6027614ff4565b905061352381846125fb565b905061352f81856125fb565b8552505f905061356961355f61355461354988601c614ff4565b6108d189601f614ff4565b6108ef886024614ff4565b6108d1875f614ff4565b905061357a816108cc84600261262f565b905061358b816108cc84600161262f565b905061359781836125fb565b90506135a381846125fb565b9050808460015b60200201525050505050565b5f5f5f6135ec6135e26135ca89601c614ff4565b6108d16135d88b6012614ff4565b8a606001516125fb565b8760800151612616565b9050613625816108cc61361b6136038b601d614ff4565b6108d16136118d6013614ff4565b8c606001516125fb565b8960800151612616565b905061364a816108cc61361b61363c8b601e614ff4565b6108d16136118d6014614ff4565b905061366f816108cc61361b6136618b601f614ff4565b6108d16136118d6015614ff4565b92505f90506136936135e261368589601c614ff4565b6108d16135d88b600e614ff4565b90506136b8816108cc61361b6136aa8b601d614ff4565b6108d16136118d600f614ff4565b90506136dd816108cc61361b6136cf8b601e614ff4565b6108d16136118d6010614ff4565b9050613702816108cc61361b6136f48b601f614ff4565b6108d16136118d6011614ff4565b91505f9050613729613723613718896020614ff4565b6108d18a601a614ff4565b846125fb565b905061375e816108ef6137586137408b6028614ff4565b6108d161374e8d601b614ff4565b8c60a001516125fb565b856125fb565b905061376a81856125fb565b6040860152505f61378d61375861378289601b614ff4565b6108cc8a6028614ff4565b9050808560035b602002015250505050505050565b5f5f6138006137e86137d06137bb61361b8a6016614ff4565b6108d16137c98b6017614ff4565b8a516125fb565b6108d16137de8a6018614ff4565b89602001516125fb565b6108d16137f6896019614ff4565b88604001516125fb565b91505f61383761381e61381489601c614ff4565b8860800151612616565b6108d161382c8a6003614ff4565b6108cc8b6024614ff4565b90505f61386061384889601d614ff4565b6108d16138558b5f614ff4565b6108cc8c6025614ff4565b90505f61388a6138718a601e614ff4565b6108d161387f8c6001614ff4565b6108cc8d6026614ff4565b90506138c96138b16138a3856108d1868d5f01516125fb565b6108d1848c602001516125fb565b6108d16138bf8c6004614ff4565b8b604001516125fb565b93505050505f6138dd613723886021614ff4565b90505f6138ee613723896021614ff4565b90505f61392661390d6139028b6023614ff4565b6108d18c6006614ff4565b6108ef61391b8c6023614ff4565b6108cc8d6006614ff4565b90505f613944612b6861393987896125fb565b6108cc8d6021614ff4565b905061395081886125fb565b90505f61397861396a6139648d6006614ff4565b876125fb565b6108ef6139648e6022614ff4565b90505f6139868c6023614ff4565b90505f613996612b6883846125fb565b60808c0185905260a08c0184905290506139b0818b6125fb565b8b6006602002015250505050505050505050505050565b5f6139d35f600161262f565b90505f6139e15f600261262f565b90505f6139ef5f600361262f565b90505f613a0b613a0088601d614ff4565b6108ef89601c614ff4565b90505f613a27613a1c89601e614ff4565b6108ef8a601d614ff4565b90505f613a43613a388a601f614ff4565b6108ef8b601e614ff4565b90505f613a5f613a548b6024614ff4565b6108ef8c601f614ff4565b905083613a70816108cc818b612616565b9050613a80816108cc878a612616565b9050613a90816108cc8789612616565b9050613aa1816108cc8d6008614ff4565b9050613aad818a6125fb565b60e08b01525082613ac2816108cc818b612616565b9050613ad2816108cc868a612616565b9050613ae2816108cc8689612616565b9050613af3816108cc8d6008614ff4565b9050613aff818a6125fb565b6101008b01525081613b15816108cc818b612616565b9050613b25816108cc858a612616565b9050613b35816108cc8589612616565b9050613b46816108cc8d6008614ff4565b9050613b52818a6125fb565b6101208b01525080613b68816108cc818b612616565b9050613b78816108cc848a612616565b9050613b88816108cc8489612616565b9050613b99816108cc8d6008614ff4565b9050613ba5818a6125fb565b610140909a019990995250505050505050505050565b613bf46040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613bff84601d614ff4565b8152613c0c84601e614ff4565b6020820152613c1c846024614ff4565b6040820152613c2c846027614ff4565b6060820152613c3c846026614ff4565b6080820152613c4c846025614ff4565b60a08201525f613c5d856002614ff4565b90505f613c6a865f614ff4565b90505f613c7e8460400151855f015161262f565b90505f613c93856020015186602001516125fb565b606086015190915086905f90613ca990806125fb565b90505f613cc7613cc189602001518a606001516125fb565b886125fb565b90505f613ce6613cdf8a60a001518b60400151612616565b8a51612616565b9050613cf561396482886125fb565b9050613d1c613d16613d10613d0a848761262f565b8861262f565b84612616565b83612616565b9050613d44613d39613d2e83876125fb565b6108cc8f6009614ff4565b6108cc60018a61262f565b6101608c015250505050602085015160808601515f91613d6391612616565b90505f613d81613d778860600151886125fb565b886020015161262f565b90505f613da5613d9184876125fb565b6108d16137588b60a001518c5f015161262f565b9050613dcd613dc2613db7838c6125fb565b6108cc8e6009614ff4565b6108cc60018961262f565b6101808b0152505f9150613dee9050613de7836011612616565b87516125fb565b90505f613dfb8384612616565b9050613e078182612616565b90505f613e158360096125fb565b9050613e3e613e38613723613e318b60a001518c5f0151612616565b8b51612616565b8261262f565b60c089018190525f90613e5990613cc190613d2e908d6125fb565b9050613e6c8b600b602002015182612616565b6101608c0152505086515f9250613e939150613de790613e8c9080612616565b8851612616565b90505f613ed3613eae836108cc8a5f01518b60a0015161262f565b60208901516108ef90613ec19080612616565b6108cc8b602001518c60800151612616565b9050613ef089600c60200201516108d1613cc1613d2e858d6125fb565b89600c602002015250505050505050505050565b613f6e604051806101e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613f86613f7c86601e614ff4565b85604001516125fb565b808252613fa5906108d1613f9b88601d614ff4565b87602001516125fb565b808252613fba906108d1613de788601c614ff4565b808252613fcc906108d1876001614ff4565b80825260208201819052613fe5906108ef87601f614ff4565b8152614000613ff5866024614ff4565b6108ef87601c614ff4565b608082015261401e614013866027614ff4565b6108ef87601f614ff4565b60608201526080810151614037906108cc81600161262f565b6101c082015260808101516140779061406d90614066906108cc60015f516020615c8e5f395f51905f526155e0565b6001612616565b82606001516125fb565b60a082018190526140ad9061409f906108cc614094896002614ff4565b6108cc8a6003614ff4565b6108cc61375888600a614ff4565b83600e60200201526101c08101516140d19061409f906108cc614094896002614ff4565b6101e084015280516140f6906108cc6140eb886002614ff4565b6108cc896003614ff4565b6101208201525f61411561410b87601f614ff4565b836020015161262f565b9050614126816108cc83600161262f565b60e0830152614143614139876026614ff4565b86604001516125fb565b60408301819052614166906108d161415c896025614ff4565b88602001516125fb565b60408301819052614186906108d161417f896024614ff4565b88516125fb565b60408301526141a3614199876027614ff4565b836040015161262f565b60408301525f6141c26141b7886026614ff4565b6108ef89601e614ff4565b90506142146141ef613471614066866080015160015f516020615c8e5f395f51905f526108cc91906155e0565b6108cc614066866040015160015f516020615c8e5f395f51905f526108cc91906155e0565b60c084015260408301516142369061422c90806125fb565b846040015161262f565b61010084015260c083015161426290614254906108cc8a6004614ff4565b6108cc6139648a600a614ff4565b6102008601526101c083015161428190614254906108cc8a6004614ff4565b6102208601526101008301516142a090614254906108cc8a6004614ff4565b61024086015260e08301516142ba906108cc896004614ff4565b6101408401526142d96142ce886025614ff4565b6108ef89601d614ff4565b6101608401526080830151614317906141b79061430c90614066906108cc60015f516020615c8e5f395f51905f526155e0565b8561016001516125fb565b61018084018190526101208401516101a0850181905261434e916108d1906108cc6143438c6005614ff4565b6108cc8d6002614ff4565b6101a08401819052835161436e91906108d1906108cc6143438c5f614ff4565b6101a084018190526101408401516143869190612616565b6101a084018190526143a0906108cc6139648a600a614ff4565b6101a0840181905285600d613794565b6143e96040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61441e6144056143fa86601c614ff4565b6108cc876025614ff4565b6108d1614413876024614ff4565b6108cc88601d614ff4565b815261446361445861443f61443487601c614ff4565b6108cc88601f614ff4565b6108d161444d88601d614ff4565b6108cc89601e614ff4565b6108ef866026614ff4565b6040820181905261447890600160441b6125fb565b6040820181905261448e906108ef866027614ff4565b6040820181905281516144a19190612616565b604082018190526144b7906108cc866005614ff4565b604082015280516144cc90600160441b6125fb565b8082526144ec906108d16144e1876024614ff4565b6108cc886025614ff4565b80825260208201819052614513906108ef61450887601e614ff4565b6108d188601f614ff4565b60208201819052614529906108cc866004614ff4565b6020820152805160608201819052614546906108d186601f614ff4565b6060820181905261456a906108ef61455f876026614ff4565b6108d1886027614ff4565b6060820181905261457f906108cc865f614ff4565b8160600181815250505f6145a861459e83602001518460400151612616565b8360600151612616565b90506145b9816108cc876003614ff4565b90506145d16145c9866025614ff4565b6140006125fb565b608083018190526145e7906108d1876024614ff4565b608083018190526145fa906140006125fb565b60808301819052614610906108d187601e614ff4565b60808301819052614623906140006125fb565b60808301819052614639906108d187601d614ff4565b6080830181905261464c906140006125fb565b60808301819052614662906108d187601c614ff4565b60808301819052614678906108ef87601f614ff4565b6080830181905261468e906108cc876005614ff4565b60808301526146a16145c9866026614ff4565b60a083018190526146b7906108d1876025614ff4565b60a083018190526146ca906140006125fb565b60a083018190526146e0906108d1876024614ff4565b60a083018190526146f3906140006125fb565b60a08301819052614709906108d187601f614ff4565b60a0830181905261471c906140006125fb565b60a08301819052614732906108d187601e614ff4565b60a08301819052614748906108ef876027614ff4565b60a0830181905261475d906108cc875f614ff4565b60a0830181905260808301515f916147759190612616565b9050614786816108cc886004614ff4565b90506147928282612616565b60c084018190526147ab906108cc61396489600b614ff4565b60c084018190528560136020020152505050505050565b6148386040518061022001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61485161484685601c614ff4565b6108d1866002614ff4565b815261486c61486185601d614ff4565b6108d1866003614ff4565b602082015261488a61487f85601e614ff4565b6108d1866004614ff4565b60408201526148a861489d85601f614ff4565b6108d1866005614ff4565b606082015280516148da906148d3906148cc906148c590806125fb565b84516125fb565b83516125fb565b82516125fb565b608082015260208101516149189061490e90614904906148fa90806125fb565b84602001516125fb565b83602001516125fb565b82602001516125fb565b60a082015260408101516149569061494c906149429061493890806125fb565b84604001516125fb565b83604001516125fb565b82604001516125fb565b60c0820152606081015161498a9061406d906149809061497690806125fb565b84606001516125fb565b83606001516125fb565b60e0820152608081015160a08201516149a39190612616565b61010082015260c081015160e08201516149bd9190612616565b61012082015260a08101516149e1906149d69080612616565b826101200151612616565b61014082015260e0810151614a05906149fa9080612616565b826101000151612616565b610160820152610120810151614a1b9080612616565b6101e08201819052614a3c90614a319080612616565b826101600151612616565b6101e0820152610100810151614a529080612616565b6101a08201819052614a7390614a689080612616565b826101400151612616565b6101a08201819052610160820151614a8a91612616565b6101808201526101408101516101e0820151614aa69190612616565b6101c0820152614aba61347185600c614ff4565b6102008201819052610280840151610180830151614ae5926108d1916108cc906108ef8a6024614ff4565b8360146020020152614b1583601560200201516108d18361020001516108cc856101a001516108ef8a6025614ff4565b8360156020020152614b4583601660200201516108d18361020001516108cc856101c001516108ef8a6026614ff4565b8360166020020152614b7583601760200201516108d18361020001516108cc856101e001516108ef8a6027614ff4565b836017602002015250505050565b614bd56040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f6040518060800160405280614c0a7f10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e76125e3565b8152602001614c387f0c28145b6a44df3e0149b3d0a30b3bb599df9756d4dd9b84a86b38cfb45a740b6125e3565b8152602001614c657e544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac156125e3565b8152602001614c937f222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428b6125e3565b90529050614cb0614ca586601c614ff4565b6108d1876002614ff4565b6101208301819052614cef90614ce490614cd990614cce90806125fb565b8561012001516125fb565b8461012001516125fb565b8361012001516125fb565b8252614cfc85601d614ff4565b6020830152614d0c85601e614ff4565b6040830152614d1c85601f614ff4565b606083015281516020830151614d449161459e91614d3a9190612616565b8460400151612616565b6080830152614d5761372386600d614ff4565b6101408301528151614d7890614d6e90835f610bce565b8360800151612616565b60a0830152614da484601860200201516108d18461014001516108cc8660a001516108ef8b6024614ff4565b6103008501526020820151614dbf90614d6e90836001610bce565b60c0830152614deb84601960200201516108d18461014001516108cc8660c001516108ef8b6025614ff4565b6103208501526040820151614e0690614d6e90836002610bce565b60e0830152614e3284601a60200201516108d18461014001516108cc8660e001516108ef8b6026614ff4565b6103408501526060820151614e4d90614d6e90836003610bce565b610100830152614e7b84601b60200201516108d18461014001516108cc8661010001516108ef8b6027614ff4565b84601b6135aa565b815160015b601c811015614ed557614ecb826108d18684601c8110614eaa57614eaa615b73565b602002015186614ebb6001876155e0565b601b8110610bce57610bce615b73565b9150600101614e88565b5092915050565b5f5f8390505f60405160208152602080820152602060408201528260608201528460808201525f516020615c8e5f395f51905f5260a082015260205f60c08360055afa80614f28575f5ffd5b505f5160809190910160405295945050505050565b614f45615320565b614f4d615320565b604051835181526020840151602082015284604082015260408160608360075afa80614f77575f5ffd5b5080518252602080820151908301526060016040529392505050565b614f9b615320565b614fa3615320565b6040518451815260208501516020820152835160408201526020840151606082015260408160808360065afa80614fd8575f5ffd5b5080518252602080820151908301526080016040529392505050565b5f8282602881111561500857615008615c59565b6029811061501857615018615b73565b60200201519392505050565b604051806103e001604052805f81526020015f81526020015f815260200161504a615320565b8152602001615057615320565b8152602001615064615320565b8152602001615071615320565b815260200161507e615320565b815260200161508b615320565b8152602001615098615320565b81526020016150a5615320565b81526020016150b2615320565b81526020016150bf615320565b81526020016150cc615320565b81526020016150d9615320565b81526020016150e6615320565b81526020016150f3615320565b8152602001615100615320565b815260200161510d615320565b815260200161511a615320565b8152602001615127615320565b8152602001615134615320565b8152602001615141615320565b815260200161514e615320565b815260200161515b615320565b8152602001615168615320565b8152602001615175615320565b8152602001615182615320565b815260200161518f615320565b815260200161519c615320565b81526020016151a9615320565b905290565b6040518061028001604052806151c26153ec565b81526020016151cf615320565b81526020016151dc615320565b81526020016151e9615320565b81526020016151f6615320565b8152602001615203615320565b8152602001615210615320565b815260200161521d615320565b815260200161522a615320565b8152602001615237615320565b815260200161524461540b565b81526020015f8152602001615257615438565b81526020015f815260200161526a615466565b8152602001615277615485565b815260200161528461536a565b815260200161518f6154b3565b6040518061052001604052806029906020820280368337509192915050565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020016152ee6154b3565b81526020016152fb6154b3565b81526020015f81526020015f81526020015f81526020015f8152602001606081525090565b60405180604001604052805f81526020015f81525090565b604051806040016040528061519c615320565b6040518061012001604052806009906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b6040518060e0016040528061539c6154d1565b81526020015f81526020015f81526020015f81526020015f81526020016153c16154d1565b81526020015f81525090565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b60405180606001604052806003905b615422615320565b81526020019060019003908161541a5790505090565b604051806103800160405280601c905b61545061534b565b8152602001906001900390816154485790505090565b604051806105400160405280602a906020820280368337509192915050565b604051806103600160405280601b905b61549d615320565b8152602001906001900390816154955790505090565b60405180608001604052806004906020820280368337509192915050565b604051806120000160405280610100906020820280368337509192915050565b5f5f5f5f60408587031215615504575f5ffd5b84356001600160401b03811115615519575f5ffd5b8501601f81018713615529575f5ffd5b80356001600160401b0381111561553e575f5ffd5b87602082840101111561554f575f5ffd5b6020918201955093508501356001600160401b0381111561556e575f5ffd5b8501601f8101871361557e575f5ffd5b80356001600160401b03811115615593575f5ffd5b8760208260051b84010111156155a7575f5ffd5b949793965060200194505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417612610576126106155b5565b81810381811115612610576126106155b5565b805f5b60108110156131e15781518452602093840193909101906001016155f6565b805f5b60038110156131e15761563684835180518252602090810151910152565b6040939093019260209190910190600101615618565b805f5b601c8110156131e1578151845f5b600981101561567c57825182526020928301929091019060010161565d565b50505061012093909301926020919091019060010161564f565b805f5b602a8110156131e1578151845260209384019390910190600101615699565b805f5b601b8110156131e1576156d984835180518252602090810151910152565b60409390930192602091909101906001016156bb565b805f5b601c8110156131e15781518452602093840193909101906001016156f2565b805f5b60048110156131e1578151845260209384019390910190600101615714565b8183525f6001600160fb1b0383111561574a575f5ffd5b8260051b80836020870137939093016020019392505050565b61576e8188516155f3565b5f602088015161578c61020084018280518252602090810151910152565b5060408801518051610240840152602090810151610260840152606089015180516102808501528101516102a0840152608089015180516102c08501528101516102e084015260a0890151805161030085015281015161032084015260c0890151805161034085015281015161036084015260e089015180516103808501528101516103a084015261010089015180516103c08501528101516103e084015261012089015180516104008501520151610420830152610140880151615855610440840182615615565b5061016088015161050083015261018088015161587661052084018261564c565b506101a08801516124a08301526101c08801516158976124c0840182615696565b506101e08801516158ac612a008401826156b8565b506102008801516158c16130c08401826156ef565b506102208801516158d6613440840182615711565b5061024088015180516134c08401526020908101516134e0840152610260890151805161350085015201516135208301526135c0613540830181905261591f9083018789615733565b613560830195909552506135808101929092526135a0909101529392505050565b634e487b7160e01b5f52604160045260245ffd5b60405161014081016001600160401b038111828210171561597757615977615940565b60405290565b604051601f8201601f191681016001600160401b03811182821017156159a5576159a5615940565b604052919050565b5f60c082840312156159bd575f5ffd5b60405160c081016001600160401b03811182821017156159df576159df615940565b604090815283518252602080850151908301528381015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b5f82601f830112615a30575f5ffd5b5f610360615a3d8161597d565b915083018185821115615a4e575f5ffd5b845b82811015615a68578051825260209182019101615a50565b509195945050505050565b5f82601f830112615a82575f5ffd5b5f610380615a3d8161597d565b5f610be0828403128015615aa1575f5ffd5b50615aaa615954565b615ab484846159ad565b8152615ac38460c08501615a21565b6020820152615ad6846104208501615a73565b60408201526107a08301516060820152615af4846107c08501615a73565b6080820152610b4083015160a0820152610b6083015160c0820152610b8083015160e0820152610ba0830151610100820152610bc09092015161012083015250919050565b80820180821115612610576126106155b5565b5f5f85851115615b5a575f5ffd5b83861115615b66575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52603260045260245ffd5b5f60018201615b9857615b986155b5565b5060010190565b80356020831015612610575f19602084900360031b1b1692915050565b5f82615bd657634e487b7160e01b5f52601260045260245ffd5b500690565b5f81615be957615be96155b5565b505f190190565b5f8183825b6008811015615c14578151835260209283019290910190600101615bf5565b5050506101008201905092915050565b5f82518060208501845e5f920191825250919050565b5f60208284031215615c4a575f5ffd5b815180151581146103f4575f5ffd5b634e487b7160e01b5f52602160045260245ffdfe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a", - "linkReferences": { - "project/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol": { - "ZKTranscriptLib": [ - { - "length": 20, - "start": 690 - } - ] - } - }, - "deployedLinkReferences": { - "project/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol": { - "ZKTranscriptLib": [ - { - "length": 20, - "start": 360 - } - ] - } - }, - "immutableReferences": { - "17861": [ - { - "length": 32, - "start": 91 - }, - { - "length": 32, - "start": 148 - }, - { - "length": 32, - "start": 257 - }, - { - "length": 32, - "start": 466 - }, - { - "length": 32, - "start": 2605 - }, - { - "length": 32, - "start": 2958 - }, - { - "length": 32, - "start": 3115 - }, - { - "length": 32, - "start": 5411 - }, - { - "length": 32, - "start": 5597 - }, - { - "length": 32, - "start": 5648 - }, - { - "length": 32, - "start": 6170 - }, - { - "length": 32, - "start": 11167 - } - ], - "17863": [ - { - "length": 32, - "start": 398 - } - ], - "17865": [ - { - "length": 32, - "start": 432 - }, - { - "length": 32, - "start": 2303 - } - ], - "17867": [ - { - "length": 32, - "start": 3156 - }, - { - "length": 32, - "start": 3257 - }, - { - "length": 32, - "start": 11970 - } - ] - }, - "inputSourceName": "project/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol", - "buildInfoId": "solc-0_8_28-543ccb35c9b85334df682667ad98480ea27e7555" -} \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol/ZKTranscriptLib.json b/packages/enclave-contracts/artifacts/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol/ZKTranscriptLib.json deleted file mode 100644 index 80f6e10e7d..0000000000 --- a/packages/enclave-contracts/artifacts/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol/ZKTranscriptLib.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "_format": "hh3-artifact-1", - "contractName": "ZKTranscriptLib", - "sourceName": "contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "Fr[16]", - "name": "pairingPointObject", - "type": "uint256[16]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "geminiMaskingPoly", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "w1", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "w2", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "w3", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "w4", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "lookupReadCounts", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "lookupReadTags", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "lookupInverses", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "zPerm", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point[3]", - "name": "libraCommitments", - "type": "tuple[3]" - }, - { - "internalType": "Fr", - "name": "libraSum", - "type": "uint256" - }, - { - "internalType": "Fr[9][28]", - "name": "sumcheckUnivariates", - "type": "uint256[9][28]" - }, - { - "internalType": "Fr", - "name": "libraEvaluation", - "type": "uint256" - }, - { - "internalType": "Fr[42]", - "name": "sumcheckEvaluations", - "type": "uint256[42]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point[27]", - "name": "geminiFoldComms", - "type": "tuple[27]" - }, - { - "internalType": "Fr[28]", - "name": "geminiAEvaluations", - "type": "uint256[28]" - }, - { - "internalType": "Fr[4]", - "name": "libraPolyEvals", - "type": "uint256[4]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "shplonkQ", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "kzgQuotient", - "type": "tuple" - } - ], - "internalType": "struct Honk.ZKProof", - "name": "proof", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "publicInputs", - "type": "bytes32[]" - }, - { - "internalType": "uint256", - "name": "vkHash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicInputsSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "logN", - "type": "uint256" - } - ], - "name": "generateTranscript", - "outputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "Fr", - "name": "eta", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "etaTwo", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "etaThree", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "beta", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "gamma", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "publicInputsDelta", - "type": "uint256" - } - ], - "internalType": "struct Honk.RelationParameters", - "name": "relationParameters", - "type": "tuple" - }, - { - "internalType": "Fr[27]", - "name": "alphas", - "type": "uint256[27]" - }, - { - "internalType": "Fr[28]", - "name": "gateChallenges", - "type": "uint256[28]" - }, - { - "internalType": "Fr", - "name": "libraChallenge", - "type": "uint256" - }, - { - "internalType": "Fr[28]", - "name": "sumCheckUChallenges", - "type": "uint256[28]" - }, - { - "internalType": "Fr", - "name": "rho", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "geminiR", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "shplonkNu", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "shplonkZ", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "publicInputsDelta", - "type": "uint256" - } - ], - "internalType": "struct ZKTranscript", - "name": "t", - "type": "tuple" - } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "bytecode": "0x6116f3610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063995bf45714610038575b5f5ffd5b61004b610046366004611214565b610061565b604051610058919061144a565b60405180910390f35b610069610d76565b5f610078888888888886610128565b9083529050610087818961017c565b6020840191909152905061009b818461026c565b604084019190915290506100af8189610315565b606084019190915290506100c4888285610376565b608084019190915290506100d88882610445565b60a084019190915290506100ed8882856105cb565b60c0840191909152905061010288828561073d565b60e0840191909152905061011688826108bf565b50610100830152509695505050505050565b610130610ddb565b5f61013e88888888886108fc565b60408601919091526020850191909152908352925061015d8389610c6a565b6080850191909152606084019190915291989197509095505050505050565b610184610e0b565b5f61018d610e2a565b8481526101008401805151602080840191909152905181015160408084019190915261012086018051516060850152518201516080840152516101f1916101d69184910161151f565b60405160208183030381529060405280519060200120610cf2565b91505f6101fd83610d18565b50808552905060015b6102126001601c611566565b8110156102625761024385610228600184611566565b601b81106102385761023861150b565b602002015183610d48565b8582601b81106102555761025561150b565b6020020152600101610206565b5050509250929050565b610274610e48565b5f61028b846040516020016101d691815260200190565b935061029684610d18565b50825260015b8381101561030d576102ee836102b3600184611566565b601c81106102c3576102c361150b565b6020020151846102d4600185611566565b601c81106102e4576102e461150b565b6020020151610d48565b8382601c81106103005761030061150b565b602002015260010161029c565b509093915050565b5f5f61031f610e67565b84815261014084018051515160208084019190915290515181015160408084019190915261016086015160608401525161035f916101d691849101611579565b915061036a82610d18565b50959194509092505050565b61037e610e48565b5f805b8381101561043b57610391610e85565b8581525f5b60098110156103fa5787610180015183601c81106103b6576103b661150b565b602002015181600981106103cc576103cc61150b565b6020020151826103dd8360016115ac565b600a81106103ed576103ed61150b565b6020020152600101610396565b5061040f816040516020016101d691906115bf565b955061041a86610d18565b508483601c811061042d5761042d61150b565b602002015250600101610381565b5090949293505050565b5f5f61044f610ea4565b83815260015b610461600160296115ac565b81116104b6576101c0860151610478600183611566565b602a81106104885761048861150b565b602002015182826030811061049f5761049f61150b565b6020020152806104ae816115f3565b915050610455565b856101a001518282603081106104ce576104ce61150b565b60200201526104de6001826115ac565b61014087015160200151519091508282603081106104fe576104fe61150b565b602002015261014086015160016020020151602001518282600161052291906115ac565b603081106105325761053261150b565b60200201526105426002826115ac565b61014087015160400151519091508282603081106105625761056261150b565b602002015261014086015160026020020151602001518282600161058691906115ac565b603081106105965761059661150b565b6020020181815250506105b3826040516020016101d6919061160b565b92506105be83610d18565b5096929550919350505050565b5f80806105d9600185611566565b6105e490600261163f565b6105ef9060016115ac565b6001600160401b0381111561060657610606610eff565b60405190808252806020026020018201604052801561062f578160200160208202803683370190505b50905084815f815181106106455761064561150b565b60209081029190910101525f5b61065d600186611566565b81101561071057866101e0015181601b811061067b5761067b61150b565b6020020151518261068d83600261163f565b6106989060016115ac565b815181106106a8576106a861150b565b602002602001018181525050866101e0015181601b81106106cb576106cb61150b565b602002015160200151828260026106e2919061163f565b6106ed9060026115ac565b815181106106fd576106fd61150b565b6020908102919091010152600101610652565b50610725816040516020016101d69190611656565b915061073082610d18565b5096919550909350505050565b5f808061074b8460016115ac565b6107569060046115ac565b6001600160401b0381111561076d5761076d610eff565b604051908082528060200260200182016040528015610796578160200160208202803683370190505b50905084815f815181106107ac576107ac61150b565b602090810291909101015260015b848111610816576102008701516107d2600183611566565b601c81106107e2576107e261150b565b60200201518282815181106107f9576107f961150b565b60209081029190910101528061080e816115f3565b9150506107ba565b505f806108248660016115ac565b90505b6108328660046115ac565b811161089157876102200151826004811061084f5761084f61150b565b60200201518382815181106108665761086661150b565b60209081029190910101528161087b816115f3565b9250508080610889906115f3565b915050610827565b506108a6826040516020016101d69190611656565b92506108b183610d18565b509792965091945050505050565b5f5f6108c9610ec3565b838152610240850180515160208084019190915290518101516040808401919091525161035f916101d691849101611680565b5f8080808061090c8660016115ac565b6109179060086115ac565b6001600160401b0381111561092e5761092e610eff565b604051908082528060200260200182016040528015610957578160200160208202803683370190505b509050865f1b815f8151811061096f5761096f61150b565b60209081029190910101525f5b610987601088611566565b8110156109d8578989828181106109a0576109a061150b565b90506020020135828260016109b591906115ac565b815181106109c5576109c561150b565b602090810291909101015260010161097c565b505f5b6010811015610a49578a51610a039082601081106109fb576109fb61150b565b602002015190565b82826010610a128b60016115ac565b610a1c9190611566565b610a2691906115ac565b81518110610a3657610a3661150b565b60209081029190910101526001016109db565b5060208a01515181610a5c8860016115ac565b81518110610a6c57610a6c61150b565b6020908102919091018101919091528a810151015181610a8d8860016115ac565b610a989060016115ac565b81518110610aa857610aa861150b565b602090810291909101015260408a01515181610ac58860016115ac565b610ad09060026115ac565b81518110610ae057610ae061150b565b60209081029190910181019190915260408b0151015181610b028860016115ac565b610b0d9060036115ac565b81518110610b1d57610b1d61150b565b602090810291909101015260608a01515181610b3a8860016115ac565b610b459060046115ac565b81518110610b5557610b5561150b565b60209081029190910181019190915260608b0151015181610b778860016115ac565b610b829060056115ac565b81518110610b9257610b9261150b565b602090810291909101015260808a01515181610baf8860016115ac565b610bba9060066115ac565b81518110610bca57610bca61150b565b60209081029190910181019190915260808b0151015181610bec8860016115ac565b610bf79060076115ac565b81518110610c0757610c0761150b565b602002602001018181525050610c27816040516020016101d69190611656565b9150610c3282610d18565b6040805160208101869052929750909550610c4d91016101d6565b9150610c5882610d18565b50809350505095509550955095915050565b5f5f5f610c75610ee1565b85815260c0858101805151602080850191909152905181015160408085019190915260e08801805151606086015251820151608085015260a08089018051519186019190915251820151928401929092529051610cd8916101d6918491016116b3565b9150610ce382610d18565b90979096509194509092505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001900690565b5f808260016001607f1b038116607f82901c610d3382610cf2565b9450610d3e81610cf2565b9350505050915091565b5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840990505b92915050565b604051806101400160405280610d8a610ddb565b8152602001610d97610e0b565b8152602001610da4610e48565b81526020015f8152602001610db7610e48565b81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b604051806103600160405280601b906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101400160405280600a906020820280368337509192915050565b6040518061060001604052806030906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b60405161028081016001600160401b0381118282101715610f3657610f36610eff565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610f6457610f64610eff565b604052919050565b5f82601f830112610f7b575f5ffd5b5f610200610f8881610f3c565b915083018185821115610f99575f5ffd5b845b82811015610fb3578035825260209182019101610f9b565b509195945050505050565b5f60408284031215610fce575f5ffd5b604080519081016001600160401b0381118282101715610ff057610ff0610eff565b604052823581526020928301359281019290925250919050565b5f82601f830112611019575f5ffd5b5f6110246060610f3c565b90508060c0840185811115611037575f5ffd5b845b81811015610fb35761104b8782610fbe565b8352602090920191604001611039565b5f82601f83011261106a575f5ffd5b61038061107681610f3c565b905080611f8084018581111561108a575f5ffd5b845b818110156110ee5786601f8201126110a2575f5ffd5b5f6101206110af81610f3c565b9150820181898211156110c0575f5ffd5b835b828110156110da5780358252602091820191016110c2565b50505084526020909301926101200161108c565b509095945050505050565b5f82601f830112611108575f5ffd5b5f610540610f8881610f3c565b5f82601f830112611124575f5ffd5b5f61036061113181610f3c565b915050806106c0840185811115611146575f5ffd5b845b81811015610fb35761115a8782610fbe565b8352602090920191604001611148565b5f82601f830112611179575f5ffd5b5f610380610f8881610f3c565b5f82601f830112611195575f5ffd5b5f6111a06080610f3c565b90508060808401858111156111b3575f5ffd5b845b81811015610fb35780358352602092830192016111b5565b5f5f83601f8401126111dd575f5ffd5b5081356001600160401b038111156111f3575f5ffd5b6020830191508360208260051b850101111561120d575f5ffd5b9250929050565b5f5f5f5f5f5f8688036135c081121561122b575f5ffd5b613540811215611239575f5ffd5b50611242610f13565b61124c8989610f6c565b815261125c896102008a01610fbe565b602082015261126f896102408a01610fbe565b6040820152611282896102808a01610fbe565b6060820152611295896102c08a01610fbe565b60808201526112a8896103008a01610fbe565b60a08201526112bb896103408a01610fbe565b60c08201526112ce896103808a01610fbe565b60e08201526112e1896103c08a01610fbe565b6101008201526112f5896104008a01610fbe565b610120820152611309896104408a0161100a565b610140820152610500880135610160820152611329896105208a0161105b565b6101808201526124a08801356101a0820152611349896124c08a016110f9565b6101c082015261135d89612a008a01611115565b6101e0820152611371896130c08a0161116a565b610200820152611385896134408a01611186565b610220820152611399896134c08a01610fbe565b6102408201526113ad896135008a01610fbe565b61026082015295506135408701356001600160401b038111156113ce575f5ffd5b6113da89828a016111cd565b979a90995096976135608101359761358082013597506135a09091013595509350505050565b805f5b601b811015611422578151845260209384019390910190600101611403565b50505050565b805f5b601c81101561142257815184526020938401939091019060010161142b565b8151805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a09081015190820152610be08101602083015161149960c0840182611400565b5060408301516114ad610420840182611428565b5060608301516107a083015260808301516114cc6107c0840182611428565b5060a0830151610b4083015260c0830151610b6083015260e0830151610b80830152610100830151610ba083015261012090920151610bc09091015290565b634e487b7160e01b5f52603260045260245ffd5b5f8183825b6005811015611543578151835260209283019290910190600101611524565b50505060a08201905092915050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d7057610d70611552565b5f8183825b600481101561159d57815183526020928301929091019060010161157e565b50505060808201905092915050565b80820180821115610d7057610d70611552565b5f8183825b600a8110156115e35781518352602092830192909101906001016115c4565b5050506101408201905092915050565b5f6001820161160457611604611552565b5060010190565b5f8183825b603081101561162f578151835260209283019290910190600101611610565b5050506106008201905092915050565b8082028115828204841417610d7057610d70611552565b81515f90829060208501835b82811015610fb3578151845260209384019390910190600101611662565b5f8183825b60038110156116a4578151835260209283019290910190600101611685565b50505060608201905092915050565b5f8183825b60078110156116d75781518352602092830192909101906001016116b8565b50505060e0820190509291505056fea164736f6c634300081c000a", - "deployedBytecode": "0x7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063995bf45714610038575b5f5ffd5b61004b610046366004611214565b610061565b604051610058919061144a565b60405180910390f35b610069610d76565b5f610078888888888886610128565b9083529050610087818961017c565b6020840191909152905061009b818461026c565b604084019190915290506100af8189610315565b606084019190915290506100c4888285610376565b608084019190915290506100d88882610445565b60a084019190915290506100ed8882856105cb565b60c0840191909152905061010288828561073d565b60e0840191909152905061011688826108bf565b50610100830152509695505050505050565b610130610ddb565b5f61013e88888888886108fc565b60408601919091526020850191909152908352925061015d8389610c6a565b6080850191909152606084019190915291989197509095505050505050565b610184610e0b565b5f61018d610e2a565b8481526101008401805151602080840191909152905181015160408084019190915261012086018051516060850152518201516080840152516101f1916101d69184910161151f565b60405160208183030381529060405280519060200120610cf2565b91505f6101fd83610d18565b50808552905060015b6102126001601c611566565b8110156102625761024385610228600184611566565b601b81106102385761023861150b565b602002015183610d48565b8582601b81106102555761025561150b565b6020020152600101610206565b5050509250929050565b610274610e48565b5f61028b846040516020016101d691815260200190565b935061029684610d18565b50825260015b8381101561030d576102ee836102b3600184611566565b601c81106102c3576102c361150b565b6020020151846102d4600185611566565b601c81106102e4576102e461150b565b6020020151610d48565b8382601c81106103005761030061150b565b602002015260010161029c565b509093915050565b5f5f61031f610e67565b84815261014084018051515160208084019190915290515181015160408084019190915261016086015160608401525161035f916101d691849101611579565b915061036a82610d18565b50959194509092505050565b61037e610e48565b5f805b8381101561043b57610391610e85565b8581525f5b60098110156103fa5787610180015183601c81106103b6576103b661150b565b602002015181600981106103cc576103cc61150b565b6020020151826103dd8360016115ac565b600a81106103ed576103ed61150b565b6020020152600101610396565b5061040f816040516020016101d691906115bf565b955061041a86610d18565b508483601c811061042d5761042d61150b565b602002015250600101610381565b5090949293505050565b5f5f61044f610ea4565b83815260015b610461600160296115ac565b81116104b6576101c0860151610478600183611566565b602a81106104885761048861150b565b602002015182826030811061049f5761049f61150b565b6020020152806104ae816115f3565b915050610455565b856101a001518282603081106104ce576104ce61150b565b60200201526104de6001826115ac565b61014087015160200151519091508282603081106104fe576104fe61150b565b602002015261014086015160016020020151602001518282600161052291906115ac565b603081106105325761053261150b565b60200201526105426002826115ac565b61014087015160400151519091508282603081106105625761056261150b565b602002015261014086015160026020020151602001518282600161058691906115ac565b603081106105965761059661150b565b6020020181815250506105b3826040516020016101d6919061160b565b92506105be83610d18565b5096929550919350505050565b5f80806105d9600185611566565b6105e490600261163f565b6105ef9060016115ac565b6001600160401b0381111561060657610606610eff565b60405190808252806020026020018201604052801561062f578160200160208202803683370190505b50905084815f815181106106455761064561150b565b60209081029190910101525f5b61065d600186611566565b81101561071057866101e0015181601b811061067b5761067b61150b565b6020020151518261068d83600261163f565b6106989060016115ac565b815181106106a8576106a861150b565b602002602001018181525050866101e0015181601b81106106cb576106cb61150b565b602002015160200151828260026106e2919061163f565b6106ed9060026115ac565b815181106106fd576106fd61150b565b6020908102919091010152600101610652565b50610725816040516020016101d69190611656565b915061073082610d18565b5096919550909350505050565b5f808061074b8460016115ac565b6107569060046115ac565b6001600160401b0381111561076d5761076d610eff565b604051908082528060200260200182016040528015610796578160200160208202803683370190505b50905084815f815181106107ac576107ac61150b565b602090810291909101015260015b848111610816576102008701516107d2600183611566565b601c81106107e2576107e261150b565b60200201518282815181106107f9576107f961150b565b60209081029190910101528061080e816115f3565b9150506107ba565b505f806108248660016115ac565b90505b6108328660046115ac565b811161089157876102200151826004811061084f5761084f61150b565b60200201518382815181106108665761086661150b565b60209081029190910101528161087b816115f3565b9250508080610889906115f3565b915050610827565b506108a6826040516020016101d69190611656565b92506108b183610d18565b509792965091945050505050565b5f5f6108c9610ec3565b838152610240850180515160208084019190915290518101516040808401919091525161035f916101d691849101611680565b5f8080808061090c8660016115ac565b6109179060086115ac565b6001600160401b0381111561092e5761092e610eff565b604051908082528060200260200182016040528015610957578160200160208202803683370190505b509050865f1b815f8151811061096f5761096f61150b565b60209081029190910101525f5b610987601088611566565b8110156109d8578989828181106109a0576109a061150b565b90506020020135828260016109b591906115ac565b815181106109c5576109c561150b565b602090810291909101015260010161097c565b505f5b6010811015610a49578a51610a039082601081106109fb576109fb61150b565b602002015190565b82826010610a128b60016115ac565b610a1c9190611566565b610a2691906115ac565b81518110610a3657610a3661150b565b60209081029190910101526001016109db565b5060208a01515181610a5c8860016115ac565b81518110610a6c57610a6c61150b565b6020908102919091018101919091528a810151015181610a8d8860016115ac565b610a989060016115ac565b81518110610aa857610aa861150b565b602090810291909101015260408a01515181610ac58860016115ac565b610ad09060026115ac565b81518110610ae057610ae061150b565b60209081029190910181019190915260408b0151015181610b028860016115ac565b610b0d9060036115ac565b81518110610b1d57610b1d61150b565b602090810291909101015260608a01515181610b3a8860016115ac565b610b459060046115ac565b81518110610b5557610b5561150b565b60209081029190910181019190915260608b0151015181610b778860016115ac565b610b829060056115ac565b81518110610b9257610b9261150b565b602090810291909101015260808a01515181610baf8860016115ac565b610bba9060066115ac565b81518110610bca57610bca61150b565b60209081029190910181019190915260808b0151015181610bec8860016115ac565b610bf79060076115ac565b81518110610c0757610c0761150b565b602002602001018181525050610c27816040516020016101d69190611656565b9150610c3282610d18565b6040805160208101869052929750909550610c4d91016101d6565b9150610c5882610d18565b50809350505095509550955095915050565b5f5f5f610c75610ee1565b85815260c0858101805151602080850191909152905181015160408085019190915260e08801805151606086015251820151608085015260a08089018051519186019190915251820151928401929092529051610cd8916101d6918491016116b3565b9150610ce382610d18565b90979096509194509092505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001900690565b5f808260016001607f1b038116607f82901c610d3382610cf2565b9450610d3e81610cf2565b9350505050915091565b5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840990505b92915050565b604051806101400160405280610d8a610ddb565b8152602001610d97610e0b565b8152602001610da4610e48565b81526020015f8152602001610db7610e48565b81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b604051806103600160405280601b906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101400160405280600a906020820280368337509192915050565b6040518061060001604052806030906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b60405161028081016001600160401b0381118282101715610f3657610f36610eff565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610f6457610f64610eff565b604052919050565b5f82601f830112610f7b575f5ffd5b5f610200610f8881610f3c565b915083018185821115610f99575f5ffd5b845b82811015610fb3578035825260209182019101610f9b565b509195945050505050565b5f60408284031215610fce575f5ffd5b604080519081016001600160401b0381118282101715610ff057610ff0610eff565b604052823581526020928301359281019290925250919050565b5f82601f830112611019575f5ffd5b5f6110246060610f3c565b90508060c0840185811115611037575f5ffd5b845b81811015610fb35761104b8782610fbe565b8352602090920191604001611039565b5f82601f83011261106a575f5ffd5b61038061107681610f3c565b905080611f8084018581111561108a575f5ffd5b845b818110156110ee5786601f8201126110a2575f5ffd5b5f6101206110af81610f3c565b9150820181898211156110c0575f5ffd5b835b828110156110da5780358252602091820191016110c2565b50505084526020909301926101200161108c565b509095945050505050565b5f82601f830112611108575f5ffd5b5f610540610f8881610f3c565b5f82601f830112611124575f5ffd5b5f61036061113181610f3c565b915050806106c0840185811115611146575f5ffd5b845b81811015610fb35761115a8782610fbe565b8352602090920191604001611148565b5f82601f830112611179575f5ffd5b5f610380610f8881610f3c565b5f82601f830112611195575f5ffd5b5f6111a06080610f3c565b90508060808401858111156111b3575f5ffd5b845b81811015610fb35780358352602092830192016111b5565b5f5f83601f8401126111dd575f5ffd5b5081356001600160401b038111156111f3575f5ffd5b6020830191508360208260051b850101111561120d575f5ffd5b9250929050565b5f5f5f5f5f5f8688036135c081121561122b575f5ffd5b613540811215611239575f5ffd5b50611242610f13565b61124c8989610f6c565b815261125c896102008a01610fbe565b602082015261126f896102408a01610fbe565b6040820152611282896102808a01610fbe565b6060820152611295896102c08a01610fbe565b60808201526112a8896103008a01610fbe565b60a08201526112bb896103408a01610fbe565b60c08201526112ce896103808a01610fbe565b60e08201526112e1896103c08a01610fbe565b6101008201526112f5896104008a01610fbe565b610120820152611309896104408a0161100a565b610140820152610500880135610160820152611329896105208a0161105b565b6101808201526124a08801356101a0820152611349896124c08a016110f9565b6101c082015261135d89612a008a01611115565b6101e0820152611371896130c08a0161116a565b610200820152611385896134408a01611186565b610220820152611399896134c08a01610fbe565b6102408201526113ad896135008a01610fbe565b61026082015295506135408701356001600160401b038111156113ce575f5ffd5b6113da89828a016111cd565b979a90995096976135608101359761358082013597506135a09091013595509350505050565b805f5b601b811015611422578151845260209384019390910190600101611403565b50505050565b805f5b601c81101561142257815184526020938401939091019060010161142b565b8151805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a09081015190820152610be08101602083015161149960c0840182611400565b5060408301516114ad610420840182611428565b5060608301516107a083015260808301516114cc6107c0840182611428565b5060a0830151610b4083015260c0830151610b6083015260e0830151610b80830152610100830151610ba083015261012090920151610bc09091015290565b634e487b7160e01b5f52603260045260245ffd5b5f8183825b6005811015611543578151835260209283019290910190600101611524565b50505060a08201905092915050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d7057610d70611552565b5f8183825b600481101561159d57815183526020928301929091019060010161157e565b50505060808201905092915050565b80820180821115610d7057610d70611552565b5f8183825b600a8110156115e35781518352602092830192909101906001016115c4565b5050506101408201905092915050565b5f6001820161160457611604611552565b5060010190565b5f8183825b603081101561162f578151835260209283019290910190600101611610565b5050506106008201905092915050565b8082028115828204841417610d7057610d70611552565b81515f90829060208501835b82811015610fb3578151845260209384019390910190600101611662565b5f8183825b60038110156116a4578151835260209283019290910190600101611685565b50505060608201905092915050565b5f8183825b60078110156116d75781518352602092830192909101906001016116b8565b50505060e0820190509291505056fea164736f6c634300081c000a", - "linkReferences": {}, - "deployedLinkReferences": {}, - "immutableReferences": {}, - "inputSourceName": "project/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol", - "buildInfoId": "solc-0_8_28-543ccb35c9b85334df682667ad98480ea27e7555" -} \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/verifier/ThresholdPkAggregationVerifier.sol/ThresholdPkAggregationVerifier.json b/packages/enclave-contracts/artifacts/contracts/verifier/ThresholdPkAggregationVerifier.sol/ThresholdPkAggregationVerifier.json deleted file mode 100644 index ad9f38524a..0000000000 --- a/packages/enclave-contracts/artifacts/contracts/verifier/ThresholdPkAggregationVerifier.sol/ThresholdPkAggregationVerifier.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "_format": "hh3-artifact-1", - "contractName": "ThresholdPkAggregationVerifier", - "sourceName": "contracts/verifier/ThresholdPkAggregationVerifier.sol", - "abi": [ - { - "inputs": [], - "name": "ConsistencyCheckFailed", - "type": "error" - }, - { - "inputs": [], - "name": "GeminiChallengeInSubgroup", - "type": "error" - }, - { - "inputs": [], - "name": "ProofLengthWrong", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "logN", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "actualLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expectedLength", - "type": "uint256" - } - ], - "name": "ProofLengthWrongWithLogN", - "type": "error" - }, - { - "inputs": [], - "name": "PublicInputsLengthWrong", - "type": "error" - }, - { - "inputs": [], - "name": "ShpleminiFailed", - "type": "error" - }, - { - "inputs": [], - "name": "SumcheckFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "proof", - "type": "bytes" - }, - { - "internalType": "bytes32[]", - "name": "publicInputs", - "type": "bytes32[]" - } - ], - "name": "verify", - "outputs": [ - { - "internalType": "bool", - "name": "verified", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x610120604052348015610010575f5ffd5b50620400006080819052601260a08190527f02306f0575881d3ddf6f0b9e8dac79af163672a144640cdf2a6ed6942ee4c6aa60c0819052601660e081905260038361005d6001602461008a565b610067919061008a565b610071919061008a565b61007c90600261008a565b61010052506100af92505050565b808201808211156100a957634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c05160e05161010051615cba6101495f395f8181610c5401528181610cb90152612ec201525f81816101b001526108ff01525f61018e01525f8181605b01528181609401528181610101015281816101d201528181610a2d01528181610b8e01528181610c2b01528181611523015281816115dd015281816116100152818161181a0152612b9f01525f5050615cba5ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063ea50d0e41461002d575b5f5ffd5b61004061003b3660046154f1565b610054565b604051901515815260200160405180910390f35b5f5f61007f7f00000000000000000000000000000000000000000000000000000000000000006102ee565b905061008c8160206155c9565b85146100ee577f0000000000000000000000000000000000000000000000000000000000000000856100bf8360206155c9565b6040516359895a5360e01b81526004810193909352602483019190915260448201526064015b60405180910390fd5b5f6100f76103fb565b90505f61012588887f0000000000000000000000000000000000000000000000000000000000000000610410565b90506010826040015161013891906155e0565b85146101575760405163fa06659360e01b815260040160405180910390fd5b60405163995bf45760e01b81525f9073__$63cdeab5e76d5ced0e84f3fc5e357ab766$__9063995bf457906101fa9085908b908b907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090600401615763565b610be060405180830381865af4158015610216573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061023a9190615a8f565b905061028a8787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855185516060810151608090910151919350915060016108a9565b815160a0015261029a8282610a10565b6102b7576040516313f8744360e31b815260040160405180910390fd5b6102c2828483610c17565b6102df576040516352ec174560e11b815260040160405180910390fd5b50600198975050505050505050565b5f8060026102fe60016008615b39565b61030891906155c9565b9050610316600260036155c9565b6103209082615b39565b9050600161032f6009856155c9565b61033991906155c9565b6103439082615b39565b90506001610352816029615b39565b61035c91906155c9565b6103669082615b39565b9050610374600160026155c9565b61037e9082615b39565b905061038b6001846155c9565b6103959082615b39565b90506103a3600160046155c9565b6103ad9082615b39565b905060026103bc6001856155e0565b6103c691906155c9565b6103d09082615b39565b90506103dd6002806155c9565b6103e79082615b39565b90506103f4601082615b39565b9392505050565b610403615024565b61040b611c14565b905090565b6104186151ae565b5f805b601081101561047a57610447868387610435602083615b39565b9261044293929190615b4c565b61254e565b8351826010811061045a5761045a615b73565b6020020181815250506020826104709190615b39565b915060010161041b565b5061049e85828661048c604083615b39565b9261049993929190615b4c565b612561565b60208301526104ae604082615b39565b90506104c185828661048c604083615b39565b6040808401919091526104d49082615b39565b90506104e785828661048c604083615b39565b60608301526104f7604082615b39565b905061050a85828661048c604083615b39565b608083015261051a604082615b39565b905061052d85828661048c604083615b39565b60c083015261053d604082615b39565b905061055085828661048c604083615b39565b60e0830152610560604082615b39565b905061057385828661048c604083615b39565b60a0830152610583604082615b39565b905061059685828661048c604083615b39565b6101008301526105a7604082615b39565b90506105ba85828661048c604083615b39565b6101208301526105cb604082615b39565b90506105de85828661048c604083615b39565b610140830151526105f0604082615b39565b9050610603858286610435602083615b39565b610160830152610614602082615b39565b90505f5b83811015610692575f5b60098110156106895761063c878488610435602083615b39565b84610180015183601c811061065357610653615b73565b6020020151826009811061066957610669615b73565b60200201818152505060208361067f9190615b39565b9250600101610622565b50600101610618565b505f5b6106a160016029615b39565b8110156106f0576106b9868387610435602083615b39565b836101c0015182602a81106106d0576106d0615b73565b6020020181815250506020826106e69190615b39565b9150600101610695565b50610702858286610435602083615b39565b6101a0830152610713602082615b39565b905061072685828661048c604083615b39565b6101408301516020015261073b604082615b39565b905061074e85828661048c604083615b39565b61014083015160026020020152610766604082615b39565b90505f5b6107756001856155e0565b8110156107be5761078d86838761048c604083615b39565b836101e0015182601b81106107a4576107a4615b73565b60200201526107b4604083615b39565b915060010161076a565b505f5b83811015610811576107da868387610435602083615b39565b83610200015182601c81106107f1576107f1615b73565b6020020181815250506020826108079190615b39565b91506001016107c1565b505f5b60048110156108655761082e868387610435602083615b39565b836102200151826004811061084557610845615b73565b60200201818152505060208261085b9190615b39565b9150600101610814565b5061087785828661048c604083615b39565b610240830152610888604082615b39565b905061089b85828661048c604083615b39565b610260830152509392505050565b5f600180826108d6866108d1896108cc6108c78a6310000000615b39565b6125e3565b6125fb565b612616565b90505f6108f4876108ef8a6108cc6108c78b6001615b39565b61262f565b90505f5b61092360107f00000000000000000000000000000000000000000000000000000000000000006155e0565b811015610990575f61094d8c838151811061094057610940615b73565b6020026020010151612657565b905061095d866108cc8684612616565b955061096d856108cc8584612616565b9450610979848b612616565b9350610985838b61262f565b9250506001016108f8565b505f5b60108110156109f7575f8a82601081106109af576109af615b73565b602002015190506109c4866108cc8684612616565b95506109d4856108cc8584612616565b94506109e0848b612616565b93506109ec838b61262f565b925050600101610993565b50610a02848461266c565b9a9950505050505050505050565b5f5f610a2583606001518561016001516125fb565b905060015f5b7f0000000000000000000000000000000000000000000000000000000000000000811015610b17575f86610180015182601c8110610a6b57610a6b615b73565b602002015180519091505f90610a89908360015b6020020151612616565b9050848114610aab576040516313f8744360e31b815260040160405180910390fd5b5f876080015184601c8110610ac257610ac2615b73565b60200201519050610ad3838261267a565b9550610b07856108cc60016108d1856108cc8e604001518b601c8110610afb57610afb615b73565b6020020151600161262f565b9450505050806001019050610a2b565b50610b20615291565b5f5b6029811015610b70576101c0870151610b3c600183615b39565b602a8110610b4c57610b4c615b73565b6020020151828260298110610b6357610b63615b73565b6020020152600101610b22565b505f610b8582875f0151886020015186612828565b9050600160025b7f0000000000000000000000000000000000000000000000000000000000000000811015610be257610bd882896080015183601c8110610bce57610bce615b73565b60200201516125fb565b9150600101610b8c565b50610c08610bf5836108cc60018561262f565b6108d18a6101a001518a606001516125fb565b94909414979650505050505050565b5f610c206152b0565b5f610c4f8460c001517f00000000000000000000000000000000000000000000000000000000000000006128a1565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b03811115610c8a57610c8a615940565b604051908082528060200260200182016040528015610cb3578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b03811115610cef57610cef615940565b604051908082528060200260200182016040528015610d2857816020015b610d15615320565b815260200190600190039081610d0d5790505b509050610d5b610d56876101000151855f81518110610d4957610d49615b73565b602002602001015161262f565b61296a565b84610120018181525050610d90610d56876101000151855f81518110610d8357610d83615b73565b6020026020010151612616565b610140850181905261012085015160e0880151610db1926108d191906125fb565b845260c0860151610de190610dc59061296a565b6108cc8661012001516108ef8a60e001518961014001516125fb565b6020850152815160019083905f90610dfb57610dfb615b73565b602002602001018181525050876102400151815f81518110610e1f57610e1f615b73565b6020908102919091010152600160a08501525f60c08501528351610e42906129da565b60408501526020840151610e55906129da565b606085015260015b610e6960016024615b39565b8111610f0a57610e8185604001518660a001516125fb565b838281518110610e9357610e93615b73565b602002602001018181525050610edc8560c001516108d18b6101c00151600185610ebd91906155e0565b602a8110610ecd57610ecd615b73565b60200201518860a001516125fb565b60c086015260a08086015190880151610ef591906125fb565b60a0860152610f0381615b87565b9050610e5d565b505f5b6005811015610fe3575f610f22601e83615b39565b90505f610f3160016024615b39565b610f3b9084615b39565b9050610f6c858381518110610f5257610f52615b73565b60200260200101516108d189606001518a60a001516125fb565b858381518110610f7e57610f7e615b73565b602002602001018181525050610fbb8760c001516108d18d6101c0015184602a8110610fac57610fac615b73565b60200201518a60a001516125fb565b60c088015260a080880151908a0151610fd491906125fb565b60a08801525050600101610f0d565b50876020015181600181518110610ffc57610ffc615b73565b602002602001018190525086606001518160028151811061101f5761101f615b73565b602002602001018190525086608001518160038151811061104257611042615b73565b60200260200101819052508660a001518160048151811061106557611065615b73565b60200260200101819052508660c001518160058151811061108857611088615b73565b60200260200101819052508660e00151816006815181106110ab576110ab615b73565b6020026020010181905250866101000151816007815181106110cf576110cf615b73565b6020026020010181905250866101200151816008815181106110f3576110f3615b73565b60200260200101819052508661014001518160098151811061111757611117615b73565b602002602001018190525086610160015181600a8151811061113b5761113b615b73565b6020026020010181905250866101c0015181600b8151811061115f5761115f615b73565b602002602001018190525086610180015181600c8151811061118357611183615b73565b6020026020010181905250866101a0015181600d815181106111a7576111a7615b73565b6020026020010181905250866101e0015181600e815181106111cb576111cb615b73565b602002602001018190525086610200015181600f815181106111ef576111ef615b73565b60200260200101819052508661022001518160108151811061121357611213615b73565b60200260200101819052508661024001518160118151811061123757611237615b73565b60200260200101819052508661026001518160128151811061125b5761125b615b73565b60200260200101819052508661028001518160138151811061127f5761127f615b73565b6020026020010181905250866102a00151816014815181106112a3576112a3615b73565b6020026020010181905250866102c00151816015815181106112c7576112c7615b73565b6020026020010181905250866102e00151816016815181106112eb576112eb615b73565b60200260200101819052508661030001518160178151811061130f5761130f615b73565b60200260200101819052508661032001518160188151811061133357611333615b73565b60200260200101819052508661034001518160198151811061135757611357615b73565b602002602001018190525086610360015181601a8151811061137b5761137b615b73565b602002602001018190525086610380015181601b8151811061139f5761139f615b73565b6020026020010181905250866103a0015181601c815181106113c3576113c3615b73565b6020026020010181905250866103c0015181601d815181106113e7576113e7615b73565b6020026020010181905250876040015181601e8151811061140a5761140a615b73565b6020026020010181905250876060015181601f8151811061142d5761142d615b73565b602002602001018190525087608001518160208151811061145057611450615b73565b60200260200101819052508760a001518160218151811061147357611473615b73565b60200260200101819052508761012001518160228151811061149757611497615b73565b6020026020010181905250876101000151816023815181106114bb576114bb615b73565b60200260200101819052508760c00151816024815181106114de576114de615b73565b60200260200101819052508760e001518160258151811061150157611501615b73565b60200260200101819052505f61154787608001518660c001518b6102000151877f00000000000000000000000000000000000000000000000000000000000000006129ec565b9050611571815f8151811061155e5761155e615b73565b60200260200101518661012001516125fb565b608086018190526102008a01515160e08901516115a292916108d19161159791906125fb565b8861014001516125fb565b608086015260e08701516115b590612b4a565b60a08601525f6115c760016024615b39565b6115d2906001615b39565b90505f5b61160160017f00000000000000000000000000000000000000000000000000000000000000006155e0565b811015611812575f61163460017f00000000000000000000000000000000000000000000000000000000000000006155e0565b8210159050806117a357611668610d568b6101000151898560016116589190615b39565b81518110610d4957610d49615b73565b6101208901526101008a015161169890610d569089611688866001615b39565b81518110610d8357610d83615b73565b61014089015260a08801516101208901516116b391906125fb565b61016089015260a088015160e08b01516116db916116d0916125fb565b8961014001516125fb565b61018089018190526116fe906116f0906129da565b6108d18a61016001516129da565b866117098486615b39565b8151811061171957611719615b73565b6020026020010181815250505f6117528961018001518e61020001518560016117429190615b39565b601c8110610bce57610bce615b73565b905061178c816108d18b61016001518887600161176f9190615b39565b8151811061177f5761177f615b73565b60200260200101516125fb565b905061179c896080015182612616565b60808a0152505b6117c26117b88960a001518c60e001516125fb565b8b60e001516125fb565b60a08901526101e08c015182601b81106117de576117de615b73565b6020020151856117ee8486615b39565b815181106117fe576117fe615b73565b6020908102919091010152506001016115d6565b5061183e60017f00000000000000000000000000000000000000000000000000000000000000006155e0565b6118489082615b39565b90506118686118608961010001518a60c0015161262f565b60019061266c565b60e08701515261010088015160c08901516118ac91611860916108ef907f07b0c561a6148404f086204a9f36ffb0617942546750f230c893619174a57a76906125fb565b60e0878101805160200192909252815180516040909101529051805160609091015260a0870151908901516118ee916118e4916125fb565b8960e001516125fb565b60a08701525f5b600481101561199c575f6119278860e00151836004811061191857611918615b73565b60200201518960a001516125fb565b9050611932816129da565b886101000151836004811061194957611949615b73565b602002015260a088015160e08b015161196291906125fb565b8860a001818152505061198e88608001516108d1838f61022001518660048110610bce57610bce615b73565b6080890152506001016118f5565b506101008601515184518590839081106119b8576119b8615b73565b602090810291909101810191909152610100870151908101516119dc916002610a7f565b846119e8836001615b39565b815181106119f8576119f8615b73565b60209081029190910101526101008601516060015184611a19836002615b39565b81518110611a2957611a29615b73565b60209081029190910101525f5b6003811015611a8b578a61014001518160038110611a5657611a56615b73565b60200201518483611a6681615b87565b945081518110611a7857611a78615b73565b6020908102919091010152600101611a36565b506040518060400160405280600181526020016002815250838281518110611ab557611ab5615b73565b60200260200101819052508560800151848280611ad190615b87565b935081518110611ae357611ae3615b73565b602002602001018181525050611b0d8a61022001518960c001518a608001518d6101a00151612b55565b611b2a5760405163a2a2ac8360e01b815260040160405180910390fd5b5f8a6102600151905080848381518110611b4657611b46615b73565b6020026020010181905250886101000151858381518110611b6957611b69615b73565b602002602001018181525050611b7d615338565b611b878587612eb8565b8152611b9282612fb0565b602082018190528c5182515f92611baa929190612ff6565b90505f5f611bba8f5f0151613087565b91509150611bc782613148565b611bd081613148565b8351611bdd9083856131e7565b84526020840151611bef9082856131e7565b602085018190528451611c0191613216565b9f9e505050505050505050505050505050565b611c1c615024565b50604080516103e0810182526204000081526012602080830191909152601682840152825180840184527f1c34241ed7bd1ea35de9fe54f11e3deca92247eda67d756489374539ed08082881527f1fa29ca2f59dfccf9e71342fe789ae8e2aa41079798daf79b8e02d06a510a4b7818301526060830152825180840184527f147ff414795e16dd9d8ad7758205875dcbb2feca77004005326a37295450902e81527f2ce19f89d76fc3a0e68df64342ecb603eb7743838eaab9cad94f597ff49c3d52818301526080830152825180840184527f131fd9af41c938c8b1b6e0086eb4f08ba4075a71288d83449d8d5eac6247099a81527f072066e82cbf467dd3c411fdaf6242d1ca23f1b37710849520bf2cd4b714e7958183015260a0830152825180840184527f02f04c8042c961b5c40c8617efb47c118b71d76c64259724eb802e8efdada48f81527f266704b76a579143a49d75c18ad41e4c8664833a345240b18787c26e832b2c2e8183015260c0830152825180840184527f0efe5ef9accef9728a562f5e9ea4fd60b0957f6e559689936896c9d7e94823ba81527f280a5dfe9d34183e42c5f275391576ae8e2891ab077920340756a44d9131ca708183015260e0830152825180840184527f2ecfda953e756b07faf8e3954fe5012494ee0237dea45538b88e34d949a516f981527f0677e9dcbd562e682c44632da1d4b5ffecdc6c9129adb89089c020384a34d28181830152610100830152825180840184527f15729599ef3888a89db8f52912b65cdfc12205eb78f54bd9f4742df51d35d9d281527f1890a0e4fb04b07215d2034d92fc6ad93cb3670761c8c93df420b3a7d89baefa81830152610120830152825180840184527f2aa5463c894b45d28a4b5ea9bed212fc3dd803ce12033d85358d4432a0655c6a81527f1397cec5342f4f86432b983400c0e56ceb029e78abeba47fc958779df917e1d781830152610140830152825180840184527f1617218df444678e9120d0de7f480a6d0bf6098c6e77009e8cc81a5bb0e820fc81527f1f03683cfa36530952dc9494533856af2e1487bed9e76f07b4afda82f3afb12981830152610160830152825180840184527f161d4f65fef69c1bbc2a671569c92da155e9374fabef1d260eb8776142c73bd881527f268e5909d8cab6c89c8064ee0fc25a7fc541a3238f93dea808d9fda94242113281830152610180830152825180840184527f26be72a59de37228c424b5ffc3149b2489578d0f09ba433097d9c8596473da5f81527f1e1d0abff71ff2bf7e0833e32af3baff87b41a17a2cf187367c04ced7bc5ff7a818301526101a0830152825180840184527f2229994889f103841fc6d5f7a4b209e045992468aec5a30800606e5c1918007c81527f016891f753e67c0d4349565eaeb8c02d828793eb835c20c532e771ec6918702f818301526101c0830152825180840184527f099ba64dd88f156dc06f527c2bac7b2c7c86d903e24ac09e47f833cfd6f903b881527f067f7914c30e0ca5dab695d46a6b6644f048d04e0938eea01c282d7ba0f043cc818301526101e0830152825180840184527f281fd5754fbb77ac2ef58f72fe142cf865a329c0611b38919dd1a36feb99436081527f15f7f262eba8a9b6df7a0928493a1399b33b1f765cb31c934d1cbde777c3bdfd81830152610200830152825180840184527f04ff10ec802daeb081f77ae5a048da6c5695f760c4b705fa2d0ae3cd5e76a9ae81527f1242b0b182171f1a737e13750ff2ff10762a6fcb1d4280ce14b5b3a43295610d81830152610220830152825180840184527f20bb81a1dc9b0c8d3cbcc2761b6f6751e08be09b384efd9b56bd5f81ca29c13681527f10d80cf403b8ff3de754a57331c5dd143cb0ae9e0382550efd8f20b353e274b581830152610240830152825180840184527f047c3bf9b1df8256aa780ba25fac792e3a8de5e460d9cb3e41bf8686653a2b8381527f1f13e4fa50f1ff9430c4f58316e6c3f1ccdcf87540d6a19add847606138d93bf81830152610260830152825180840184527f087819484fd402168d10636c0e1ff16095086cfebb16fa72ecd905faa77611e281527f061b92f2194d55921ff02e4362fe5b4f59eac905edb027e656700a56806a5e8981830152610280830152825180840184527f30302f92d6b476ab0407ba6570e2c869057a534fafc859946c315715fd37397d81527f2bccc49a1f124a8ea4933e1f65cd744c4ef91d17b429bc27f44ed533ff179ad9818301526102a0830152825180840184527f2fa778d2df483e2c7535aa5b015aba244987291fe5d0f78655332f35dbb983a281527f0eaaa6e5c290180d0979a51caf8592f4014402d09f8fdee08e2d2b98596b1743818301526102c0830152825180840184527f035d549bad95f400a2d94f6032216957b08b7ab07ab972d8403663454ecb46e481527f02512a1a401fd0832cea115ea34675373aa09faa59149b8ffd71fe76be90c306818301526102e0830152825180840184527f07377ddbcd535099c7600f69e539e1d41cdfd8705405334687c4f5b741226da881527f06608b7e3be5235cc0368ce844f8c822b118e54f993626431efa578a881b1e0181830152610300830152825180840184527f099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d2681527e15b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f81830152610320830152825180840184527f1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e81527f305e8992b148eedb22e6e992077a84482141c7ebe42000a1d58ccb74381f6d1981830152610340830152825180840184527f061f64497996e8915722501e9e367938ed8da2375186b518c7345c60b1134b2d81527f1b84d38339321f405ebaf6a2f830842ad3d7cb59792e11c0d2691f317fd50e6e81830152610360830152825180840184527f043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce81527f261522c4089330646aff96736194949330952ae74c573d1686d9cb4a007338548183015261038083015282518084018452600181526002818301526103a083015282518084019093527f1280735205fd7e4a58ee8493d273e5afa2f13bfb7879873c4095a5cbfc646a4183527f155c3c102286dfdbfe78f876a3c74b9c36a02bb8197154c7d9fedb371f55b779908301526103c081019190915290565b5f6103f461255c8385615b9f565b612657565b612569615320565b60408051808201909152805f516020615c6e5f395f51905f5261258f60205f8789615b4c565b61259891615b9f565b6125a29190615bbc565b81526020908101905f516020615c6e5f395f51905f52906125c7906040908789615b4c565b6125d091615b9f565b6125da9190615bbc565b90529392505050565b5f5f516020615c8e5f395f51905f52825b0692915050565b5f5f516020615c8e5f395f51905f5282840990505b92915050565b5f5f516020615c8e5f395f51905f528284089392505050565b5f5f516020615c8e5f395f51905f52825f516020615c8e5f395f51905f520384089392505050565b5f5f516020615c8e5f395f51905f52826125f4565b5f6103f4836108cc8461296a565b5f5f604051806101200160405280619d8081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec5181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd31815260200161024081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd3181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec518152602001619d8081525090505f600190505f5f90505b600981101561277357612769826108cc878461262f565b9150600101612752565b5061277c61534b565b5f5b60098110156127cd576127ae610d5685836009811061279f5761279f615b73565b60200201516108cc898561262f565b8282600981106127c0576127c0615b73565b602002015260010161277e565b505f5b600981101561281357612809856108d18984600981106127f2576127f2615b73565b6020020151858560098110610bce57610bce615b73565b94506001016127d0565b5061281e84836125fb565b9695505050505050565b5f61283161536a565b61283c86828561340a565b612848868683866135b6565b612854868683866137a2565b61285f8682856139c7565b61286a868285613bbb565b61287686868386613f04565b6128818682856143b0565b61288c8682856147c2565b612897868285614b83565b61281e8185614e83565b60605f826001600160401b038111156128bc576128bc615940565b6040519080825280602002602001820160405280156128e5578160200160208202803683370190505b50905083815f815181106128fb576128fb615b73565b602090810291909101015260015b838110156129625761293d826129206001846155e0565b8151811061293057612930615b73565b6020026020010151612b4a565b82828151811061294f5761294f615b73565b6020908102919091010152600101612909565b509392505050565b5f5f8290505f604051602081526020808201526020604082015282606082015260025f516020615c8e5f395f51905f520360808201525f516020615c8e5f395f51905f5260a082015260205f60c08360055afa806129c6575f5ffd5b505f51608091909101604052949350505050565b5f516020615c8e5f395f51905f520390565b60605f826001600160401b03811115612a0757612a07615940565b604051908082528060200260200182016040528015612a30578160200160208202803683370190505b509050825b8015612b3f575f85612a486001846155e0565b81518110612a5857612a58615b73565b602002602001015190505f89600184612a7191906155e0565b601c8110612a8157612a81615b73565b602002015190505f612adc612aa0612a99858d6125fb565b60026125fb565b6108ef8b612aaf6001896155e0565b601c8110612abf57612abf615b73565b60200201516108cc612ad6886108cc60018a61262f565b8761262f565b9050612afd816108cc610d56612af7876108cc60018961262f565b86612616565b99508990508085612b0f6001876155e0565b81518110612b1f57612b1f615b73565b60200260200101818152505050505080612b3890615bdb565b9050612a35565b509695505050505050565b5f61261082836125fb565b5f600181612b6e612b6887610100614edc565b8361262f565b905080612b8e5760405163835eb8f760e01b815260040160405180910390fd5b612b96615389565b80518390525f5b7f0000000000000000000000000000000000000000000000000000000000000000811015612c7f575f612bd18260096155c9565b612bdc906001615b39565b905084835f0151826101008110612bf557612bf5615b73565b60200201525f612c06826001615b39565b90505b612c14600983615b39565b811015612c75578351612c5490612c2c6001846155e0565b6101008110612c3d57612c3d615b73565b60200201518a85601c8110610bce57610bce615b73565b8451826101008110612c6857612c68615b73565b6020020152600101612c09565b5050600101612b9d565b50608081018390525f602082018190525b610100811015612d9057612cb1612cab83608001518a6125fb565b8561262f565b8260a00151826101008110612cc857612cc8615b73565b602002015260a0820151612cf290826101008110612ce857612ce8615b73565b602002015161296a565b8260a00151826101008110612d0957612d09615b73565b602002018181525050612d4f82602001516108d1845f0151846101008110612d3357612d33615b73565b60200201518560a00151856101008110610bce57610bce615b73565b60208301526080820151612d83907f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d66125fb565b6080830152600101612c90565b505f612da1836108cc61010061296a565b9050612db18260200151826125fb565b602083015260a0820151612dcc905f5b6020020151826125fb565b604083015260a0820151612df890612de760016101006155e0565b6101008110612dc157612dc1615b73565b60608301526040820151612e0e908a6002610bce565b60c08301819052612e6e906108d1612e468b7f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d661262f565b60208d015160408e01516108cc91612e5d9161262f565b8e5160208901516108ef91906125fb565b60c083018190526060830151612ea391612e97916108d1906108cc8e600260200201518c61262f565b6108ef858c6003610bce565b60c08301819052159998505050505050505050565b612ec0615320565b7f00000000000000000000000000000000000000000000000000000000000000005f5b81811015612f1557612f0d858281518110612f0057612f00615b73565b6020026020010151613148565b600101612ee3565b50604051600190815b60018401811015612f7a5760208102870160208202870181515160408501528151602001516060850152805160808501525050604080830160606040850160075afa8316925060408260808460065afa90921691600101612f1e565b5080518452602081015160208501525080612fa8576040516352ec174560e11b815260040160405180910390fd5b505092915050565b612fb8615320565b5f516020615c6e5f395f51905f5282602001515f516020615c6e5f395f51905f52612fe391906155e0565b612fed9190615bbc565b60208301525090565b5f5f5f61300286613087565b9150915061300e6153cd565b82518152602080840151818301528251604080840191909152838201516060840152875160808401528782015160a0840152865160c08401528682015160e08401525161307c9161306191849101615bf0565b60405160208183030381529060405280519060200120612657565b979650505050505050565b61308f615320565b613097615320565b82516020808501516040860151606087015160cc90811b608892831b604494851b90961795909517949094178652608087015160a088015160c089015160e08a0151871b90841b91851b9092171717868401526101008701516101208801516101408901516101608a0151871b90841b91851b909217171785526101808701516101a08801516101c08901516101e09099015190951b9790911b9390911b1791909117939093179281019290925291565b805160208201515f5f516020615c6e5f395f51905f528380095f516020615c6e5f395f51905f5260035f516020615c6e5f395f51905f52838709085f516020615c6e5f395f51905f5284850914915050806131e15760405162461bcd60e51b8152602060048201526019602482015278706f696e74206973206e6f74206f6e2074686520637572766560381b60448201526064016100e5565b50505050565b6131ef615320565b6131f7615320565b6132018386614f3d565b905061320d8185614f93565b95945050505050565b81516020808401518351848301516040805194850195909552938301919091527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260608301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60808301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60a08301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60c083015260e08201526101008101919091527f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c16101208201527f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b06101408201527f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe46101608201527f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e556101808201525f9081906101a00160405160208183030381529060405290505f5f60086001600160a01b0316836040516133ac9190615c24565b5f60405180830381855afa9150503d805f81146133e4576040519150601f19603f3d011682016040523d82523d5f602084013e6133e9565b606091505b509150915081801561281e57508080602001905181019061281e9190615c3a565b5f613416846007614ff4565b90507f183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f80000005f61347761347161344b85600361262f565b6108cc61346661345b8b5f614ff4565b6108cc8c601d614ff4565b6108cc8b601c614ff4565b836125fb565b90506134f86134ed6134d46134bb6134a2856108d16134978d6002614ff4565b6108cc8e601c614ff4565b6108d16134b08c6003614ff4565b6108cc8d601d614ff4565b6108d16134c98b6004614ff4565b6108cc8c601e614ff4565b6108d16134e28a6005614ff4565b6108cc8b601f614ff4565b6108d1886001614ff4565b9050613517816108d161350c86600161262f565b6108cc8a6027614ff4565b905061352381846125fb565b905061352f81856125fb565b8552505f905061356961355f61355461354988601c614ff4565b6108d189601f614ff4565b6108ef886024614ff4565b6108d1875f614ff4565b905061357a816108cc84600261262f565b905061358b816108cc84600161262f565b905061359781836125fb565b90506135a381846125fb565b9050808460015b60200201525050505050565b5f5f5f6135ec6135e26135ca89601c614ff4565b6108d16135d88b6012614ff4565b8a606001516125fb565b8760800151612616565b9050613625816108cc61361b6136038b601d614ff4565b6108d16136118d6013614ff4565b8c606001516125fb565b8960800151612616565b905061364a816108cc61361b61363c8b601e614ff4565b6108d16136118d6014614ff4565b905061366f816108cc61361b6136618b601f614ff4565b6108d16136118d6015614ff4565b92505f90506136936135e261368589601c614ff4565b6108d16135d88b600e614ff4565b90506136b8816108cc61361b6136aa8b601d614ff4565b6108d16136118d600f614ff4565b90506136dd816108cc61361b6136cf8b601e614ff4565b6108d16136118d6010614ff4565b9050613702816108cc61361b6136f48b601f614ff4565b6108d16136118d6011614ff4565b91505f9050613729613723613718896020614ff4565b6108d18a601a614ff4565b846125fb565b905061375e816108ef6137586137408b6028614ff4565b6108d161374e8d601b614ff4565b8c60a001516125fb565b856125fb565b905061376a81856125fb565b6040860152505f61378d61375861378289601b614ff4565b6108cc8a6028614ff4565b9050808560035b602002015250505050505050565b5f5f6138006137e86137d06137bb61361b8a6016614ff4565b6108d16137c98b6017614ff4565b8a516125fb565b6108d16137de8a6018614ff4565b89602001516125fb565b6108d16137f6896019614ff4565b88604001516125fb565b91505f61383761381e61381489601c614ff4565b8860800151612616565b6108d161382c8a6003614ff4565b6108cc8b6024614ff4565b90505f61386061384889601d614ff4565b6108d16138558b5f614ff4565b6108cc8c6025614ff4565b90505f61388a6138718a601e614ff4565b6108d161387f8c6001614ff4565b6108cc8d6026614ff4565b90506138c96138b16138a3856108d1868d5f01516125fb565b6108d1848c602001516125fb565b6108d16138bf8c6004614ff4565b8b604001516125fb565b93505050505f6138dd613723886021614ff4565b90505f6138ee613723896021614ff4565b90505f61392661390d6139028b6023614ff4565b6108d18c6006614ff4565b6108ef61391b8c6023614ff4565b6108cc8d6006614ff4565b90505f613944612b6861393987896125fb565b6108cc8d6021614ff4565b905061395081886125fb565b90505f61397861396a6139648d6006614ff4565b876125fb565b6108ef6139648e6022614ff4565b90505f6139868c6023614ff4565b90505f613996612b6883846125fb565b60808c0185905260a08c0184905290506139b0818b6125fb565b8b6006602002015250505050505050505050505050565b5f6139d35f600161262f565b90505f6139e15f600261262f565b90505f6139ef5f600361262f565b90505f613a0b613a0088601d614ff4565b6108ef89601c614ff4565b90505f613a27613a1c89601e614ff4565b6108ef8a601d614ff4565b90505f613a43613a388a601f614ff4565b6108ef8b601e614ff4565b90505f613a5f613a548b6024614ff4565b6108ef8c601f614ff4565b905083613a70816108cc818b612616565b9050613a80816108cc878a612616565b9050613a90816108cc8789612616565b9050613aa1816108cc8d6008614ff4565b9050613aad818a6125fb565b60e08b01525082613ac2816108cc818b612616565b9050613ad2816108cc868a612616565b9050613ae2816108cc8689612616565b9050613af3816108cc8d6008614ff4565b9050613aff818a6125fb565b6101008b01525081613b15816108cc818b612616565b9050613b25816108cc858a612616565b9050613b35816108cc8589612616565b9050613b46816108cc8d6008614ff4565b9050613b52818a6125fb565b6101208b01525080613b68816108cc818b612616565b9050613b78816108cc848a612616565b9050613b88816108cc8489612616565b9050613b99816108cc8d6008614ff4565b9050613ba5818a6125fb565b610140909a019990995250505050505050505050565b613bf46040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613bff84601d614ff4565b8152613c0c84601e614ff4565b6020820152613c1c846024614ff4565b6040820152613c2c846027614ff4565b6060820152613c3c846026614ff4565b6080820152613c4c846025614ff4565b60a08201525f613c5d856002614ff4565b90505f613c6a865f614ff4565b90505f613c7e8460400151855f015161262f565b90505f613c93856020015186602001516125fb565b606086015190915086905f90613ca990806125fb565b90505f613cc7613cc189602001518a606001516125fb565b886125fb565b90505f613ce6613cdf8a60a001518b60400151612616565b8a51612616565b9050613cf561396482886125fb565b9050613d1c613d16613d10613d0a848761262f565b8861262f565b84612616565b83612616565b9050613d44613d39613d2e83876125fb565b6108cc8f6009614ff4565b6108cc60018a61262f565b6101608c015250505050602085015160808601515f91613d6391612616565b90505f613d81613d778860600151886125fb565b886020015161262f565b90505f613da5613d9184876125fb565b6108d16137588b60a001518c5f015161262f565b9050613dcd613dc2613db7838c6125fb565b6108cc8e6009614ff4565b6108cc60018961262f565b6101808b0152505f9150613dee9050613de7836011612616565b87516125fb565b90505f613dfb8384612616565b9050613e078182612616565b90505f613e158360096125fb565b9050613e3e613e38613723613e318b60a001518c5f0151612616565b8b51612616565b8261262f565b60c089018190525f90613e5990613cc190613d2e908d6125fb565b9050613e6c8b600b602002015182612616565b6101608c0152505086515f9250613e939150613de790613e8c9080612616565b8851612616565b90505f613ed3613eae836108cc8a5f01518b60a0015161262f565b60208901516108ef90613ec19080612616565b6108cc8b602001518c60800151612616565b9050613ef089600c60200201516108d1613cc1613d2e858d6125fb565b89600c602002015250505050505050505050565b613f6e604051806101e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613f86613f7c86601e614ff4565b85604001516125fb565b808252613fa5906108d1613f9b88601d614ff4565b87602001516125fb565b808252613fba906108d1613de788601c614ff4565b808252613fcc906108d1876001614ff4565b80825260208201819052613fe5906108ef87601f614ff4565b8152614000613ff5866024614ff4565b6108ef87601c614ff4565b608082015261401e614013866027614ff4565b6108ef87601f614ff4565b60608201526080810151614037906108cc81600161262f565b6101c082015260808101516140779061406d90614066906108cc60015f516020615c8e5f395f51905f526155e0565b6001612616565b82606001516125fb565b60a082018190526140ad9061409f906108cc614094896002614ff4565b6108cc8a6003614ff4565b6108cc61375888600a614ff4565b83600e60200201526101c08101516140d19061409f906108cc614094896002614ff4565b6101e084015280516140f6906108cc6140eb886002614ff4565b6108cc896003614ff4565b6101208201525f61411561410b87601f614ff4565b836020015161262f565b9050614126816108cc83600161262f565b60e0830152614143614139876026614ff4565b86604001516125fb565b60408301819052614166906108d161415c896025614ff4565b88602001516125fb565b60408301819052614186906108d161417f896024614ff4565b88516125fb565b60408301526141a3614199876027614ff4565b836040015161262f565b60408301525f6141c26141b7886026614ff4565b6108ef89601e614ff4565b90506142146141ef613471614066866080015160015f516020615c8e5f395f51905f526108cc91906155e0565b6108cc614066866040015160015f516020615c8e5f395f51905f526108cc91906155e0565b60c084015260408301516142369061422c90806125fb565b846040015161262f565b61010084015260c083015161426290614254906108cc8a6004614ff4565b6108cc6139648a600a614ff4565b6102008601526101c083015161428190614254906108cc8a6004614ff4565b6102208601526101008301516142a090614254906108cc8a6004614ff4565b61024086015260e08301516142ba906108cc896004614ff4565b6101408401526142d96142ce886025614ff4565b6108ef89601d614ff4565b6101608401526080830151614317906141b79061430c90614066906108cc60015f516020615c8e5f395f51905f526155e0565b8561016001516125fb565b61018084018190526101208401516101a0850181905261434e916108d1906108cc6143438c6005614ff4565b6108cc8d6002614ff4565b6101a08401819052835161436e91906108d1906108cc6143438c5f614ff4565b6101a084018190526101408401516143869190612616565b6101a084018190526143a0906108cc6139648a600a614ff4565b6101a0840181905285600d613794565b6143e96040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61441e6144056143fa86601c614ff4565b6108cc876025614ff4565b6108d1614413876024614ff4565b6108cc88601d614ff4565b815261446361445861443f61443487601c614ff4565b6108cc88601f614ff4565b6108d161444d88601d614ff4565b6108cc89601e614ff4565b6108ef866026614ff4565b6040820181905261447890600160441b6125fb565b6040820181905261448e906108ef866027614ff4565b6040820181905281516144a19190612616565b604082018190526144b7906108cc866005614ff4565b604082015280516144cc90600160441b6125fb565b8082526144ec906108d16144e1876024614ff4565b6108cc886025614ff4565b80825260208201819052614513906108ef61450887601e614ff4565b6108d188601f614ff4565b60208201819052614529906108cc866004614ff4565b6020820152805160608201819052614546906108d186601f614ff4565b6060820181905261456a906108ef61455f876026614ff4565b6108d1886027614ff4565b6060820181905261457f906108cc865f614ff4565b8160600181815250505f6145a861459e83602001518460400151612616565b8360600151612616565b90506145b9816108cc876003614ff4565b90506145d16145c9866025614ff4565b6140006125fb565b608083018190526145e7906108d1876024614ff4565b608083018190526145fa906140006125fb565b60808301819052614610906108d187601e614ff4565b60808301819052614623906140006125fb565b60808301819052614639906108d187601d614ff4565b6080830181905261464c906140006125fb565b60808301819052614662906108d187601c614ff4565b60808301819052614678906108ef87601f614ff4565b6080830181905261468e906108cc876005614ff4565b60808301526146a16145c9866026614ff4565b60a083018190526146b7906108d1876025614ff4565b60a083018190526146ca906140006125fb565b60a083018190526146e0906108d1876024614ff4565b60a083018190526146f3906140006125fb565b60a08301819052614709906108d187601f614ff4565b60a0830181905261471c906140006125fb565b60a08301819052614732906108d187601e614ff4565b60a08301819052614748906108ef876027614ff4565b60a0830181905261475d906108cc875f614ff4565b60a0830181905260808301515f916147759190612616565b9050614786816108cc886004614ff4565b90506147928282612616565b60c084018190526147ab906108cc61396489600b614ff4565b60c084018190528560136020020152505050505050565b6148386040518061022001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61485161484685601c614ff4565b6108d1866002614ff4565b815261486c61486185601d614ff4565b6108d1866003614ff4565b602082015261488a61487f85601e614ff4565b6108d1866004614ff4565b60408201526148a861489d85601f614ff4565b6108d1866005614ff4565b606082015280516148da906148d3906148cc906148c590806125fb565b84516125fb565b83516125fb565b82516125fb565b608082015260208101516149189061490e90614904906148fa90806125fb565b84602001516125fb565b83602001516125fb565b82602001516125fb565b60a082015260408101516149569061494c906149429061493890806125fb565b84604001516125fb565b83604001516125fb565b82604001516125fb565b60c0820152606081015161498a9061406d906149809061497690806125fb565b84606001516125fb565b83606001516125fb565b60e0820152608081015160a08201516149a39190612616565b61010082015260c081015160e08201516149bd9190612616565b61012082015260a08101516149e1906149d69080612616565b826101200151612616565b61014082015260e0810151614a05906149fa9080612616565b826101000151612616565b610160820152610120810151614a1b9080612616565b6101e08201819052614a3c90614a319080612616565b826101600151612616565b6101e0820152610100810151614a529080612616565b6101a08201819052614a7390614a689080612616565b826101400151612616565b6101a08201819052610160820151614a8a91612616565b6101808201526101408101516101e0820151614aa69190612616565b6101c0820152614aba61347185600c614ff4565b6102008201819052610280840151610180830151614ae5926108d1916108cc906108ef8a6024614ff4565b8360146020020152614b1583601560200201516108d18361020001516108cc856101a001516108ef8a6025614ff4565b8360156020020152614b4583601660200201516108d18361020001516108cc856101c001516108ef8a6026614ff4565b8360166020020152614b7583601760200201516108d18361020001516108cc856101e001516108ef8a6027614ff4565b836017602002015250505050565b614bd56040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f6040518060800160405280614c0a7f10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e76125e3565b8152602001614c387f0c28145b6a44df3e0149b3d0a30b3bb599df9756d4dd9b84a86b38cfb45a740b6125e3565b8152602001614c657e544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac156125e3565b8152602001614c937f222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428b6125e3565b90529050614cb0614ca586601c614ff4565b6108d1876002614ff4565b6101208301819052614cef90614ce490614cd990614cce90806125fb565b8561012001516125fb565b8461012001516125fb565b8361012001516125fb565b8252614cfc85601d614ff4565b6020830152614d0c85601e614ff4565b6040830152614d1c85601f614ff4565b606083015281516020830151614d449161459e91614d3a9190612616565b8460400151612616565b6080830152614d5761372386600d614ff4565b6101408301528151614d7890614d6e90835f610bce565b8360800151612616565b60a0830152614da484601860200201516108d18461014001516108cc8660a001516108ef8b6024614ff4565b6103008501526020820151614dbf90614d6e90836001610bce565b60c0830152614deb84601960200201516108d18461014001516108cc8660c001516108ef8b6025614ff4565b6103208501526040820151614e0690614d6e90836002610bce565b60e0830152614e3284601a60200201516108d18461014001516108cc8660e001516108ef8b6026614ff4565b6103408501526060820151614e4d90614d6e90836003610bce565b610100830152614e7b84601b60200201516108d18461014001516108cc8661010001516108ef8b6027614ff4565b84601b6135aa565b815160015b601c811015614ed557614ecb826108d18684601c8110614eaa57614eaa615b73565b602002015186614ebb6001876155e0565b601b8110610bce57610bce615b73565b9150600101614e88565b5092915050565b5f5f8390505f60405160208152602080820152602060408201528260608201528460808201525f516020615c8e5f395f51905f5260a082015260205f60c08360055afa80614f28575f5ffd5b505f5160809190910160405295945050505050565b614f45615320565b614f4d615320565b604051835181526020840151602082015284604082015260408160608360075afa80614f77575f5ffd5b5080518252602080820151908301526060016040529392505050565b614f9b615320565b614fa3615320565b6040518451815260208501516020820152835160408201526020840151606082015260408160808360065afa80614fd8575f5ffd5b5080518252602080820151908301526080016040529392505050565b5f8282602881111561500857615008615c59565b6029811061501857615018615b73565b60200201519392505050565b604051806103e001604052805f81526020015f81526020015f815260200161504a615320565b8152602001615057615320565b8152602001615064615320565b8152602001615071615320565b815260200161507e615320565b815260200161508b615320565b8152602001615098615320565b81526020016150a5615320565b81526020016150b2615320565b81526020016150bf615320565b81526020016150cc615320565b81526020016150d9615320565b81526020016150e6615320565b81526020016150f3615320565b8152602001615100615320565b815260200161510d615320565b815260200161511a615320565b8152602001615127615320565b8152602001615134615320565b8152602001615141615320565b815260200161514e615320565b815260200161515b615320565b8152602001615168615320565b8152602001615175615320565b8152602001615182615320565b815260200161518f615320565b815260200161519c615320565b81526020016151a9615320565b905290565b6040518061028001604052806151c26153ec565b81526020016151cf615320565b81526020016151dc615320565b81526020016151e9615320565b81526020016151f6615320565b8152602001615203615320565b8152602001615210615320565b815260200161521d615320565b815260200161522a615320565b8152602001615237615320565b815260200161524461540b565b81526020015f8152602001615257615438565b81526020015f815260200161526a615466565b8152602001615277615485565b815260200161528461536a565b815260200161518f6154b3565b6040518061052001604052806029906020820280368337509192915050565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020016152ee6154b3565b81526020016152fb6154b3565b81526020015f81526020015f81526020015f81526020015f8152602001606081525090565b60405180604001604052805f81526020015f81525090565b604051806040016040528061519c615320565b6040518061012001604052806009906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b6040518060e0016040528061539c6154d1565b81526020015f81526020015f81526020015f81526020015f81526020016153c16154d1565b81526020015f81525090565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b60405180606001604052806003905b615422615320565b81526020019060019003908161541a5790505090565b604051806103800160405280601c905b61545061534b565b8152602001906001900390816154485790505090565b604051806105400160405280602a906020820280368337509192915050565b604051806103600160405280601b905b61549d615320565b8152602001906001900390816154955790505090565b60405180608001604052806004906020820280368337509192915050565b604051806120000160405280610100906020820280368337509192915050565b5f5f5f5f60408587031215615504575f5ffd5b84356001600160401b03811115615519575f5ffd5b8501601f81018713615529575f5ffd5b80356001600160401b0381111561553e575f5ffd5b87602082840101111561554f575f5ffd5b6020918201955093508501356001600160401b0381111561556e575f5ffd5b8501601f8101871361557e575f5ffd5b80356001600160401b03811115615593575f5ffd5b8760208260051b84010111156155a7575f5ffd5b949793965060200194505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417612610576126106155b5565b81810381811115612610576126106155b5565b805f5b60108110156131e15781518452602093840193909101906001016155f6565b805f5b60038110156131e15761563684835180518252602090810151910152565b6040939093019260209190910190600101615618565b805f5b601c8110156131e1578151845f5b600981101561567c57825182526020928301929091019060010161565d565b50505061012093909301926020919091019060010161564f565b805f5b602a8110156131e1578151845260209384019390910190600101615699565b805f5b601b8110156131e1576156d984835180518252602090810151910152565b60409390930192602091909101906001016156bb565b805f5b601c8110156131e15781518452602093840193909101906001016156f2565b805f5b60048110156131e1578151845260209384019390910190600101615714565b8183525f6001600160fb1b0383111561574a575f5ffd5b8260051b80836020870137939093016020019392505050565b61576e8188516155f3565b5f602088015161578c61020084018280518252602090810151910152565b5060408801518051610240840152602090810151610260840152606089015180516102808501528101516102a0840152608089015180516102c08501528101516102e084015260a0890151805161030085015281015161032084015260c0890151805161034085015281015161036084015260e089015180516103808501528101516103a084015261010089015180516103c08501528101516103e084015261012089015180516104008501520151610420830152610140880151615855610440840182615615565b5061016088015161050083015261018088015161587661052084018261564c565b506101a08801516124a08301526101c08801516158976124c0840182615696565b506101e08801516158ac612a008401826156b8565b506102008801516158c16130c08401826156ef565b506102208801516158d6613440840182615711565b5061024088015180516134c08401526020908101516134e0840152610260890151805161350085015201516135208301526135c0613540830181905261591f9083018789615733565b613560830195909552506135808101929092526135a0909101529392505050565b634e487b7160e01b5f52604160045260245ffd5b60405161014081016001600160401b038111828210171561597757615977615940565b60405290565b604051601f8201601f191681016001600160401b03811182821017156159a5576159a5615940565b604052919050565b5f60c082840312156159bd575f5ffd5b60405160c081016001600160401b03811182821017156159df576159df615940565b604090815283518252602080850151908301528381015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b5f82601f830112615a30575f5ffd5b5f610360615a3d8161597d565b915083018185821115615a4e575f5ffd5b845b82811015615a68578051825260209182019101615a50565b509195945050505050565b5f82601f830112615a82575f5ffd5b5f610380615a3d8161597d565b5f610be0828403128015615aa1575f5ffd5b50615aaa615954565b615ab484846159ad565b8152615ac38460c08501615a21565b6020820152615ad6846104208501615a73565b60408201526107a08301516060820152615af4846107c08501615a73565b6080820152610b4083015160a0820152610b6083015160c0820152610b8083015160e0820152610ba0830151610100820152610bc09092015161012083015250919050565b80820180821115612610576126106155b5565b5f5f85851115615b5a575f5ffd5b83861115615b66575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52603260045260245ffd5b5f60018201615b9857615b986155b5565b5060010190565b80356020831015612610575f19602084900360031b1b1692915050565b5f82615bd657634e487b7160e01b5f52601260045260245ffd5b500690565b5f81615be957615be96155b5565b505f190190565b5f8183825b6008811015615c14578151835260209283019290910190600101615bf5565b5050506101008201905092915050565b5f82518060208501845e5f920191825250919050565b5f60208284031215615c4a575f5ffd5b815180151581146103f4575f5ffd5b634e487b7160e01b5f52602160045260245ffdfe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a", - "deployedBytecode": "0x608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063ea50d0e41461002d575b5f5ffd5b61004061003b3660046154f1565b610054565b604051901515815260200160405180910390f35b5f5f61007f7f00000000000000000000000000000000000000000000000000000000000000006102ee565b905061008c8160206155c9565b85146100ee577f0000000000000000000000000000000000000000000000000000000000000000856100bf8360206155c9565b6040516359895a5360e01b81526004810193909352602483019190915260448201526064015b60405180910390fd5b5f6100f76103fb565b90505f61012588887f0000000000000000000000000000000000000000000000000000000000000000610410565b90506010826040015161013891906155e0565b85146101575760405163fa06659360e01b815260040160405180910390fd5b60405163995bf45760e01b81525f9073__$63cdeab5e76d5ced0e84f3fc5e357ab766$__9063995bf457906101fa9085908b908b907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090600401615763565b610be060405180830381865af4158015610216573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061023a9190615a8f565b905061028a8787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855185516060810151608090910151919350915060016108a9565b815160a0015261029a8282610a10565b6102b7576040516313f8744360e31b815260040160405180910390fd5b6102c2828483610c17565b6102df576040516352ec174560e11b815260040160405180910390fd5b50600198975050505050505050565b5f8060026102fe60016008615b39565b61030891906155c9565b9050610316600260036155c9565b6103209082615b39565b9050600161032f6009856155c9565b61033991906155c9565b6103439082615b39565b90506001610352816029615b39565b61035c91906155c9565b6103669082615b39565b9050610374600160026155c9565b61037e9082615b39565b905061038b6001846155c9565b6103959082615b39565b90506103a3600160046155c9565b6103ad9082615b39565b905060026103bc6001856155e0565b6103c691906155c9565b6103d09082615b39565b90506103dd6002806155c9565b6103e79082615b39565b90506103f4601082615b39565b9392505050565b610403615024565b61040b611c14565b905090565b6104186151ae565b5f805b601081101561047a57610447868387610435602083615b39565b9261044293929190615b4c565b61254e565b8351826010811061045a5761045a615b73565b6020020181815250506020826104709190615b39565b915060010161041b565b5061049e85828661048c604083615b39565b9261049993929190615b4c565b612561565b60208301526104ae604082615b39565b90506104c185828661048c604083615b39565b6040808401919091526104d49082615b39565b90506104e785828661048c604083615b39565b60608301526104f7604082615b39565b905061050a85828661048c604083615b39565b608083015261051a604082615b39565b905061052d85828661048c604083615b39565b60c083015261053d604082615b39565b905061055085828661048c604083615b39565b60e0830152610560604082615b39565b905061057385828661048c604083615b39565b60a0830152610583604082615b39565b905061059685828661048c604083615b39565b6101008301526105a7604082615b39565b90506105ba85828661048c604083615b39565b6101208301526105cb604082615b39565b90506105de85828661048c604083615b39565b610140830151526105f0604082615b39565b9050610603858286610435602083615b39565b610160830152610614602082615b39565b90505f5b83811015610692575f5b60098110156106895761063c878488610435602083615b39565b84610180015183601c811061065357610653615b73565b6020020151826009811061066957610669615b73565b60200201818152505060208361067f9190615b39565b9250600101610622565b50600101610618565b505f5b6106a160016029615b39565b8110156106f0576106b9868387610435602083615b39565b836101c0015182602a81106106d0576106d0615b73565b6020020181815250506020826106e69190615b39565b9150600101610695565b50610702858286610435602083615b39565b6101a0830152610713602082615b39565b905061072685828661048c604083615b39565b6101408301516020015261073b604082615b39565b905061074e85828661048c604083615b39565b61014083015160026020020152610766604082615b39565b90505f5b6107756001856155e0565b8110156107be5761078d86838761048c604083615b39565b836101e0015182601b81106107a4576107a4615b73565b60200201526107b4604083615b39565b915060010161076a565b505f5b83811015610811576107da868387610435602083615b39565b83610200015182601c81106107f1576107f1615b73565b6020020181815250506020826108079190615b39565b91506001016107c1565b505f5b60048110156108655761082e868387610435602083615b39565b836102200151826004811061084557610845615b73565b60200201818152505060208261085b9190615b39565b9150600101610814565b5061087785828661048c604083615b39565b610240830152610888604082615b39565b905061089b85828661048c604083615b39565b610260830152509392505050565b5f600180826108d6866108d1896108cc6108c78a6310000000615b39565b6125e3565b6125fb565b612616565b90505f6108f4876108ef8a6108cc6108c78b6001615b39565b61262f565b90505f5b61092360107f00000000000000000000000000000000000000000000000000000000000000006155e0565b811015610990575f61094d8c838151811061094057610940615b73565b6020026020010151612657565b905061095d866108cc8684612616565b955061096d856108cc8584612616565b9450610979848b612616565b9350610985838b61262f565b9250506001016108f8565b505f5b60108110156109f7575f8a82601081106109af576109af615b73565b602002015190506109c4866108cc8684612616565b95506109d4856108cc8584612616565b94506109e0848b612616565b93506109ec838b61262f565b925050600101610993565b50610a02848461266c565b9a9950505050505050505050565b5f5f610a2583606001518561016001516125fb565b905060015f5b7f0000000000000000000000000000000000000000000000000000000000000000811015610b17575f86610180015182601c8110610a6b57610a6b615b73565b602002015180519091505f90610a89908360015b6020020151612616565b9050848114610aab576040516313f8744360e31b815260040160405180910390fd5b5f876080015184601c8110610ac257610ac2615b73565b60200201519050610ad3838261267a565b9550610b07856108cc60016108d1856108cc8e604001518b601c8110610afb57610afb615b73565b6020020151600161262f565b9450505050806001019050610a2b565b50610b20615291565b5f5b6029811015610b70576101c0870151610b3c600183615b39565b602a8110610b4c57610b4c615b73565b6020020151828260298110610b6357610b63615b73565b6020020152600101610b22565b505f610b8582875f0151886020015186612828565b9050600160025b7f0000000000000000000000000000000000000000000000000000000000000000811015610be257610bd882896080015183601c8110610bce57610bce615b73565b60200201516125fb565b9150600101610b8c565b50610c08610bf5836108cc60018561262f565b6108d18a6101a001518a606001516125fb565b94909414979650505050505050565b5f610c206152b0565b5f610c4f8460c001517f00000000000000000000000000000000000000000000000000000000000000006128a1565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b03811115610c8a57610c8a615940565b604051908082528060200260200182016040528015610cb3578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b03811115610cef57610cef615940565b604051908082528060200260200182016040528015610d2857816020015b610d15615320565b815260200190600190039081610d0d5790505b509050610d5b610d56876101000151855f81518110610d4957610d49615b73565b602002602001015161262f565b61296a565b84610120018181525050610d90610d56876101000151855f81518110610d8357610d83615b73565b6020026020010151612616565b610140850181905261012085015160e0880151610db1926108d191906125fb565b845260c0860151610de190610dc59061296a565b6108cc8661012001516108ef8a60e001518961014001516125fb565b6020850152815160019083905f90610dfb57610dfb615b73565b602002602001018181525050876102400151815f81518110610e1f57610e1f615b73565b6020908102919091010152600160a08501525f60c08501528351610e42906129da565b60408501526020840151610e55906129da565b606085015260015b610e6960016024615b39565b8111610f0a57610e8185604001518660a001516125fb565b838281518110610e9357610e93615b73565b602002602001018181525050610edc8560c001516108d18b6101c00151600185610ebd91906155e0565b602a8110610ecd57610ecd615b73565b60200201518860a001516125fb565b60c086015260a08086015190880151610ef591906125fb565b60a0860152610f0381615b87565b9050610e5d565b505f5b6005811015610fe3575f610f22601e83615b39565b90505f610f3160016024615b39565b610f3b9084615b39565b9050610f6c858381518110610f5257610f52615b73565b60200260200101516108d189606001518a60a001516125fb565b858381518110610f7e57610f7e615b73565b602002602001018181525050610fbb8760c001516108d18d6101c0015184602a8110610fac57610fac615b73565b60200201518a60a001516125fb565b60c088015260a080880151908a0151610fd491906125fb565b60a08801525050600101610f0d565b50876020015181600181518110610ffc57610ffc615b73565b602002602001018190525086606001518160028151811061101f5761101f615b73565b602002602001018190525086608001518160038151811061104257611042615b73565b60200260200101819052508660a001518160048151811061106557611065615b73565b60200260200101819052508660c001518160058151811061108857611088615b73565b60200260200101819052508660e00151816006815181106110ab576110ab615b73565b6020026020010181905250866101000151816007815181106110cf576110cf615b73565b6020026020010181905250866101200151816008815181106110f3576110f3615b73565b60200260200101819052508661014001518160098151811061111757611117615b73565b602002602001018190525086610160015181600a8151811061113b5761113b615b73565b6020026020010181905250866101c0015181600b8151811061115f5761115f615b73565b602002602001018190525086610180015181600c8151811061118357611183615b73565b6020026020010181905250866101a0015181600d815181106111a7576111a7615b73565b6020026020010181905250866101e0015181600e815181106111cb576111cb615b73565b602002602001018190525086610200015181600f815181106111ef576111ef615b73565b60200260200101819052508661022001518160108151811061121357611213615b73565b60200260200101819052508661024001518160118151811061123757611237615b73565b60200260200101819052508661026001518160128151811061125b5761125b615b73565b60200260200101819052508661028001518160138151811061127f5761127f615b73565b6020026020010181905250866102a00151816014815181106112a3576112a3615b73565b6020026020010181905250866102c00151816015815181106112c7576112c7615b73565b6020026020010181905250866102e00151816016815181106112eb576112eb615b73565b60200260200101819052508661030001518160178151811061130f5761130f615b73565b60200260200101819052508661032001518160188151811061133357611333615b73565b60200260200101819052508661034001518160198151811061135757611357615b73565b602002602001018190525086610360015181601a8151811061137b5761137b615b73565b602002602001018190525086610380015181601b8151811061139f5761139f615b73565b6020026020010181905250866103a0015181601c815181106113c3576113c3615b73565b6020026020010181905250866103c0015181601d815181106113e7576113e7615b73565b6020026020010181905250876040015181601e8151811061140a5761140a615b73565b6020026020010181905250876060015181601f8151811061142d5761142d615b73565b602002602001018190525087608001518160208151811061145057611450615b73565b60200260200101819052508760a001518160218151811061147357611473615b73565b60200260200101819052508761012001518160228151811061149757611497615b73565b6020026020010181905250876101000151816023815181106114bb576114bb615b73565b60200260200101819052508760c00151816024815181106114de576114de615b73565b60200260200101819052508760e001518160258151811061150157611501615b73565b60200260200101819052505f61154787608001518660c001518b6102000151877f00000000000000000000000000000000000000000000000000000000000000006129ec565b9050611571815f8151811061155e5761155e615b73565b60200260200101518661012001516125fb565b608086018190526102008a01515160e08901516115a292916108d19161159791906125fb565b8861014001516125fb565b608086015260e08701516115b590612b4a565b60a08601525f6115c760016024615b39565b6115d2906001615b39565b90505f5b61160160017f00000000000000000000000000000000000000000000000000000000000000006155e0565b811015611812575f61163460017f00000000000000000000000000000000000000000000000000000000000000006155e0565b8210159050806117a357611668610d568b6101000151898560016116589190615b39565b81518110610d4957610d49615b73565b6101208901526101008a015161169890610d569089611688866001615b39565b81518110610d8357610d83615b73565b61014089015260a08801516101208901516116b391906125fb565b61016089015260a088015160e08b01516116db916116d0916125fb565b8961014001516125fb565b61018089018190526116fe906116f0906129da565b6108d18a61016001516129da565b866117098486615b39565b8151811061171957611719615b73565b6020026020010181815250505f6117528961018001518e61020001518560016117429190615b39565b601c8110610bce57610bce615b73565b905061178c816108d18b61016001518887600161176f9190615b39565b8151811061177f5761177f615b73565b60200260200101516125fb565b905061179c896080015182612616565b60808a0152505b6117c26117b88960a001518c60e001516125fb565b8b60e001516125fb565b60a08901526101e08c015182601b81106117de576117de615b73565b6020020151856117ee8486615b39565b815181106117fe576117fe615b73565b6020908102919091010152506001016115d6565b5061183e60017f00000000000000000000000000000000000000000000000000000000000000006155e0565b6118489082615b39565b90506118686118608961010001518a60c0015161262f565b60019061266c565b60e08701515261010088015160c08901516118ac91611860916108ef907f07b0c561a6148404f086204a9f36ffb0617942546750f230c893619174a57a76906125fb565b60e0878101805160200192909252815180516040909101529051805160609091015260a0870151908901516118ee916118e4916125fb565b8960e001516125fb565b60a08701525f5b600481101561199c575f6119278860e00151836004811061191857611918615b73565b60200201518960a001516125fb565b9050611932816129da565b886101000151836004811061194957611949615b73565b602002015260a088015160e08b015161196291906125fb565b8860a001818152505061198e88608001516108d1838f61022001518660048110610bce57610bce615b73565b6080890152506001016118f5565b506101008601515184518590839081106119b8576119b8615b73565b602090810291909101810191909152610100870151908101516119dc916002610a7f565b846119e8836001615b39565b815181106119f8576119f8615b73565b60209081029190910101526101008601516060015184611a19836002615b39565b81518110611a2957611a29615b73565b60209081029190910101525f5b6003811015611a8b578a61014001518160038110611a5657611a56615b73565b60200201518483611a6681615b87565b945081518110611a7857611a78615b73565b6020908102919091010152600101611a36565b506040518060400160405280600181526020016002815250838281518110611ab557611ab5615b73565b60200260200101819052508560800151848280611ad190615b87565b935081518110611ae357611ae3615b73565b602002602001018181525050611b0d8a61022001518960c001518a608001518d6101a00151612b55565b611b2a5760405163a2a2ac8360e01b815260040160405180910390fd5b5f8a6102600151905080848381518110611b4657611b46615b73565b6020026020010181905250886101000151858381518110611b6957611b69615b73565b602002602001018181525050611b7d615338565b611b878587612eb8565b8152611b9282612fb0565b602082018190528c5182515f92611baa929190612ff6565b90505f5f611bba8f5f0151613087565b91509150611bc782613148565b611bd081613148565b8351611bdd9083856131e7565b84526020840151611bef9082856131e7565b602085018190528451611c0191613216565b9f9e505050505050505050505050505050565b611c1c615024565b50604080516103e0810182526204000081526012602080830191909152601682840152825180840184527f1c34241ed7bd1ea35de9fe54f11e3deca92247eda67d756489374539ed08082881527f1fa29ca2f59dfccf9e71342fe789ae8e2aa41079798daf79b8e02d06a510a4b7818301526060830152825180840184527f147ff414795e16dd9d8ad7758205875dcbb2feca77004005326a37295450902e81527f2ce19f89d76fc3a0e68df64342ecb603eb7743838eaab9cad94f597ff49c3d52818301526080830152825180840184527f131fd9af41c938c8b1b6e0086eb4f08ba4075a71288d83449d8d5eac6247099a81527f072066e82cbf467dd3c411fdaf6242d1ca23f1b37710849520bf2cd4b714e7958183015260a0830152825180840184527f02f04c8042c961b5c40c8617efb47c118b71d76c64259724eb802e8efdada48f81527f266704b76a579143a49d75c18ad41e4c8664833a345240b18787c26e832b2c2e8183015260c0830152825180840184527f0efe5ef9accef9728a562f5e9ea4fd60b0957f6e559689936896c9d7e94823ba81527f280a5dfe9d34183e42c5f275391576ae8e2891ab077920340756a44d9131ca708183015260e0830152825180840184527f2ecfda953e756b07faf8e3954fe5012494ee0237dea45538b88e34d949a516f981527f0677e9dcbd562e682c44632da1d4b5ffecdc6c9129adb89089c020384a34d28181830152610100830152825180840184527f15729599ef3888a89db8f52912b65cdfc12205eb78f54bd9f4742df51d35d9d281527f1890a0e4fb04b07215d2034d92fc6ad93cb3670761c8c93df420b3a7d89baefa81830152610120830152825180840184527f2aa5463c894b45d28a4b5ea9bed212fc3dd803ce12033d85358d4432a0655c6a81527f1397cec5342f4f86432b983400c0e56ceb029e78abeba47fc958779df917e1d781830152610140830152825180840184527f1617218df444678e9120d0de7f480a6d0bf6098c6e77009e8cc81a5bb0e820fc81527f1f03683cfa36530952dc9494533856af2e1487bed9e76f07b4afda82f3afb12981830152610160830152825180840184527f161d4f65fef69c1bbc2a671569c92da155e9374fabef1d260eb8776142c73bd881527f268e5909d8cab6c89c8064ee0fc25a7fc541a3238f93dea808d9fda94242113281830152610180830152825180840184527f26be72a59de37228c424b5ffc3149b2489578d0f09ba433097d9c8596473da5f81527f1e1d0abff71ff2bf7e0833e32af3baff87b41a17a2cf187367c04ced7bc5ff7a818301526101a0830152825180840184527f2229994889f103841fc6d5f7a4b209e045992468aec5a30800606e5c1918007c81527f016891f753e67c0d4349565eaeb8c02d828793eb835c20c532e771ec6918702f818301526101c0830152825180840184527f099ba64dd88f156dc06f527c2bac7b2c7c86d903e24ac09e47f833cfd6f903b881527f067f7914c30e0ca5dab695d46a6b6644f048d04e0938eea01c282d7ba0f043cc818301526101e0830152825180840184527f281fd5754fbb77ac2ef58f72fe142cf865a329c0611b38919dd1a36feb99436081527f15f7f262eba8a9b6df7a0928493a1399b33b1f765cb31c934d1cbde777c3bdfd81830152610200830152825180840184527f04ff10ec802daeb081f77ae5a048da6c5695f760c4b705fa2d0ae3cd5e76a9ae81527f1242b0b182171f1a737e13750ff2ff10762a6fcb1d4280ce14b5b3a43295610d81830152610220830152825180840184527f20bb81a1dc9b0c8d3cbcc2761b6f6751e08be09b384efd9b56bd5f81ca29c13681527f10d80cf403b8ff3de754a57331c5dd143cb0ae9e0382550efd8f20b353e274b581830152610240830152825180840184527f047c3bf9b1df8256aa780ba25fac792e3a8de5e460d9cb3e41bf8686653a2b8381527f1f13e4fa50f1ff9430c4f58316e6c3f1ccdcf87540d6a19add847606138d93bf81830152610260830152825180840184527f087819484fd402168d10636c0e1ff16095086cfebb16fa72ecd905faa77611e281527f061b92f2194d55921ff02e4362fe5b4f59eac905edb027e656700a56806a5e8981830152610280830152825180840184527f30302f92d6b476ab0407ba6570e2c869057a534fafc859946c315715fd37397d81527f2bccc49a1f124a8ea4933e1f65cd744c4ef91d17b429bc27f44ed533ff179ad9818301526102a0830152825180840184527f2fa778d2df483e2c7535aa5b015aba244987291fe5d0f78655332f35dbb983a281527f0eaaa6e5c290180d0979a51caf8592f4014402d09f8fdee08e2d2b98596b1743818301526102c0830152825180840184527f035d549bad95f400a2d94f6032216957b08b7ab07ab972d8403663454ecb46e481527f02512a1a401fd0832cea115ea34675373aa09faa59149b8ffd71fe76be90c306818301526102e0830152825180840184527f07377ddbcd535099c7600f69e539e1d41cdfd8705405334687c4f5b741226da881527f06608b7e3be5235cc0368ce844f8c822b118e54f993626431efa578a881b1e0181830152610300830152825180840184527f099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d2681527e15b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f81830152610320830152825180840184527f1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e81527f305e8992b148eedb22e6e992077a84482141c7ebe42000a1d58ccb74381f6d1981830152610340830152825180840184527f061f64497996e8915722501e9e367938ed8da2375186b518c7345c60b1134b2d81527f1b84d38339321f405ebaf6a2f830842ad3d7cb59792e11c0d2691f317fd50e6e81830152610360830152825180840184527f043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce81527f261522c4089330646aff96736194949330952ae74c573d1686d9cb4a007338548183015261038083015282518084018452600181526002818301526103a083015282518084019093527f1280735205fd7e4a58ee8493d273e5afa2f13bfb7879873c4095a5cbfc646a4183527f155c3c102286dfdbfe78f876a3c74b9c36a02bb8197154c7d9fedb371f55b779908301526103c081019190915290565b5f6103f461255c8385615b9f565b612657565b612569615320565b60408051808201909152805f516020615c6e5f395f51905f5261258f60205f8789615b4c565b61259891615b9f565b6125a29190615bbc565b81526020908101905f516020615c6e5f395f51905f52906125c7906040908789615b4c565b6125d091615b9f565b6125da9190615bbc565b90529392505050565b5f5f516020615c8e5f395f51905f52825b0692915050565b5f5f516020615c8e5f395f51905f5282840990505b92915050565b5f5f516020615c8e5f395f51905f528284089392505050565b5f5f516020615c8e5f395f51905f52825f516020615c8e5f395f51905f520384089392505050565b5f5f516020615c8e5f395f51905f52826125f4565b5f6103f4836108cc8461296a565b5f5f604051806101200160405280619d8081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec5181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd31815260200161024081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593effffd3181526020016105a081526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffec518152602001619d8081525090505f600190505f5f90505b600981101561277357612769826108cc878461262f565b9150600101612752565b5061277c61534b565b5f5b60098110156127cd576127ae610d5685836009811061279f5761279f615b73565b60200201516108cc898561262f565b8282600981106127c0576127c0615b73565b602002015260010161277e565b505f5b600981101561281357612809856108d18984600981106127f2576127f2615b73565b6020020151858560098110610bce57610bce615b73565b94506001016127d0565b5061281e84836125fb565b9695505050505050565b5f61283161536a565b61283c86828561340a565b612848868683866135b6565b612854868683866137a2565b61285f8682856139c7565b61286a868285613bbb565b61287686868386613f04565b6128818682856143b0565b61288c8682856147c2565b612897868285614b83565b61281e8185614e83565b60605f826001600160401b038111156128bc576128bc615940565b6040519080825280602002602001820160405280156128e5578160200160208202803683370190505b50905083815f815181106128fb576128fb615b73565b602090810291909101015260015b838110156129625761293d826129206001846155e0565b8151811061293057612930615b73565b6020026020010151612b4a565b82828151811061294f5761294f615b73565b6020908102919091010152600101612909565b509392505050565b5f5f8290505f604051602081526020808201526020604082015282606082015260025f516020615c8e5f395f51905f520360808201525f516020615c8e5f395f51905f5260a082015260205f60c08360055afa806129c6575f5ffd5b505f51608091909101604052949350505050565b5f516020615c8e5f395f51905f520390565b60605f826001600160401b03811115612a0757612a07615940565b604051908082528060200260200182016040528015612a30578160200160208202803683370190505b509050825b8015612b3f575f85612a486001846155e0565b81518110612a5857612a58615b73565b602002602001015190505f89600184612a7191906155e0565b601c8110612a8157612a81615b73565b602002015190505f612adc612aa0612a99858d6125fb565b60026125fb565b6108ef8b612aaf6001896155e0565b601c8110612abf57612abf615b73565b60200201516108cc612ad6886108cc60018a61262f565b8761262f565b9050612afd816108cc610d56612af7876108cc60018961262f565b86612616565b99508990508085612b0f6001876155e0565b81518110612b1f57612b1f615b73565b60200260200101818152505050505080612b3890615bdb565b9050612a35565b509695505050505050565b5f61261082836125fb565b5f600181612b6e612b6887610100614edc565b8361262f565b905080612b8e5760405163835eb8f760e01b815260040160405180910390fd5b612b96615389565b80518390525f5b7f0000000000000000000000000000000000000000000000000000000000000000811015612c7f575f612bd18260096155c9565b612bdc906001615b39565b905084835f0151826101008110612bf557612bf5615b73565b60200201525f612c06826001615b39565b90505b612c14600983615b39565b811015612c75578351612c5490612c2c6001846155e0565b6101008110612c3d57612c3d615b73565b60200201518a85601c8110610bce57610bce615b73565b8451826101008110612c6857612c68615b73565b6020020152600101612c09565b5050600101612b9d565b50608081018390525f602082018190525b610100811015612d9057612cb1612cab83608001518a6125fb565b8561262f565b8260a00151826101008110612cc857612cc8615b73565b602002015260a0820151612cf290826101008110612ce857612ce8615b73565b602002015161296a565b8260a00151826101008110612d0957612d09615b73565b602002018181525050612d4f82602001516108d1845f0151846101008110612d3357612d33615b73565b60200201518560a00151856101008110610bce57610bce615b73565b60208301526080820151612d83907f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d66125fb565b6080830152600101612c90565b505f612da1836108cc61010061296a565b9050612db18260200151826125fb565b602083015260a0820151612dcc905f5b6020020151826125fb565b604083015260a0820151612df890612de760016101006155e0565b6101008110612dc157612dc1615b73565b60608301526040820151612e0e908a6002610bce565b60c08301819052612e6e906108d1612e468b7f204bd3277422fad364751ad938e2b5e6a54cf8c68712848a692c553d0329f5d661262f565b60208d015160408e01516108cc91612e5d9161262f565b8e5160208901516108ef91906125fb565b60c083018190526060830151612ea391612e97916108d1906108cc8e600260200201518c61262f565b6108ef858c6003610bce565b60c08301819052159998505050505050505050565b612ec0615320565b7f00000000000000000000000000000000000000000000000000000000000000005f5b81811015612f1557612f0d858281518110612f0057612f00615b73565b6020026020010151613148565b600101612ee3565b50604051600190815b60018401811015612f7a5760208102870160208202870181515160408501528151602001516060850152805160808501525050604080830160606040850160075afa8316925060408260808460065afa90921691600101612f1e565b5080518452602081015160208501525080612fa8576040516352ec174560e11b815260040160405180910390fd5b505092915050565b612fb8615320565b5f516020615c6e5f395f51905f5282602001515f516020615c6e5f395f51905f52612fe391906155e0565b612fed9190615bbc565b60208301525090565b5f5f5f61300286613087565b9150915061300e6153cd565b82518152602080840151818301528251604080840191909152838201516060840152875160808401528782015160a0840152865160c08401528682015160e08401525161307c9161306191849101615bf0565b60405160208183030381529060405280519060200120612657565b979650505050505050565b61308f615320565b613097615320565b82516020808501516040860151606087015160cc90811b608892831b604494851b90961795909517949094178652608087015160a088015160c089015160e08a0151871b90841b91851b9092171717868401526101008701516101208801516101408901516101608a0151871b90841b91851b909217171785526101808701516101a08801516101c08901516101e09099015190951b9790911b9390911b1791909117939093179281019290925291565b805160208201515f5f516020615c6e5f395f51905f528380095f516020615c6e5f395f51905f5260035f516020615c6e5f395f51905f52838709085f516020615c6e5f395f51905f5284850914915050806131e15760405162461bcd60e51b8152602060048201526019602482015278706f696e74206973206e6f74206f6e2074686520637572766560381b60448201526064016100e5565b50505050565b6131ef615320565b6131f7615320565b6132018386614f3d565b905061320d8185614f93565b95945050505050565b81516020808401518351848301516040805194850195909552938301919091527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c260608301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed60808301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b60a08301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa60c083015260e08201526101008101919091527f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c16101208201527f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b06101408201527f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe46101608201527f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e556101808201525f9081906101a00160405160208183030381529060405290505f5f60086001600160a01b0316836040516133ac9190615c24565b5f60405180830381855afa9150503d805f81146133e4576040519150601f19603f3d011682016040523d82523d5f602084013e6133e9565b606091505b509150915081801561281e57508080602001905181019061281e9190615c3a565b5f613416846007614ff4565b90507f183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f80000005f61347761347161344b85600361262f565b6108cc61346661345b8b5f614ff4565b6108cc8c601d614ff4565b6108cc8b601c614ff4565b836125fb565b90506134f86134ed6134d46134bb6134a2856108d16134978d6002614ff4565b6108cc8e601c614ff4565b6108d16134b08c6003614ff4565b6108cc8d601d614ff4565b6108d16134c98b6004614ff4565b6108cc8c601e614ff4565b6108d16134e28a6005614ff4565b6108cc8b601f614ff4565b6108d1886001614ff4565b9050613517816108d161350c86600161262f565b6108cc8a6027614ff4565b905061352381846125fb565b905061352f81856125fb565b8552505f905061356961355f61355461354988601c614ff4565b6108d189601f614ff4565b6108ef886024614ff4565b6108d1875f614ff4565b905061357a816108cc84600261262f565b905061358b816108cc84600161262f565b905061359781836125fb565b90506135a381846125fb565b9050808460015b60200201525050505050565b5f5f5f6135ec6135e26135ca89601c614ff4565b6108d16135d88b6012614ff4565b8a606001516125fb565b8760800151612616565b9050613625816108cc61361b6136038b601d614ff4565b6108d16136118d6013614ff4565b8c606001516125fb565b8960800151612616565b905061364a816108cc61361b61363c8b601e614ff4565b6108d16136118d6014614ff4565b905061366f816108cc61361b6136618b601f614ff4565b6108d16136118d6015614ff4565b92505f90506136936135e261368589601c614ff4565b6108d16135d88b600e614ff4565b90506136b8816108cc61361b6136aa8b601d614ff4565b6108d16136118d600f614ff4565b90506136dd816108cc61361b6136cf8b601e614ff4565b6108d16136118d6010614ff4565b9050613702816108cc61361b6136f48b601f614ff4565b6108d16136118d6011614ff4565b91505f9050613729613723613718896020614ff4565b6108d18a601a614ff4565b846125fb565b905061375e816108ef6137586137408b6028614ff4565b6108d161374e8d601b614ff4565b8c60a001516125fb565b856125fb565b905061376a81856125fb565b6040860152505f61378d61375861378289601b614ff4565b6108cc8a6028614ff4565b9050808560035b602002015250505050505050565b5f5f6138006137e86137d06137bb61361b8a6016614ff4565b6108d16137c98b6017614ff4565b8a516125fb565b6108d16137de8a6018614ff4565b89602001516125fb565b6108d16137f6896019614ff4565b88604001516125fb565b91505f61383761381e61381489601c614ff4565b8860800151612616565b6108d161382c8a6003614ff4565b6108cc8b6024614ff4565b90505f61386061384889601d614ff4565b6108d16138558b5f614ff4565b6108cc8c6025614ff4565b90505f61388a6138718a601e614ff4565b6108d161387f8c6001614ff4565b6108cc8d6026614ff4565b90506138c96138b16138a3856108d1868d5f01516125fb565b6108d1848c602001516125fb565b6108d16138bf8c6004614ff4565b8b604001516125fb565b93505050505f6138dd613723886021614ff4565b90505f6138ee613723896021614ff4565b90505f61392661390d6139028b6023614ff4565b6108d18c6006614ff4565b6108ef61391b8c6023614ff4565b6108cc8d6006614ff4565b90505f613944612b6861393987896125fb565b6108cc8d6021614ff4565b905061395081886125fb565b90505f61397861396a6139648d6006614ff4565b876125fb565b6108ef6139648e6022614ff4565b90505f6139868c6023614ff4565b90505f613996612b6883846125fb565b60808c0185905260a08c0184905290506139b0818b6125fb565b8b6006602002015250505050505050505050505050565b5f6139d35f600161262f565b90505f6139e15f600261262f565b90505f6139ef5f600361262f565b90505f613a0b613a0088601d614ff4565b6108ef89601c614ff4565b90505f613a27613a1c89601e614ff4565b6108ef8a601d614ff4565b90505f613a43613a388a601f614ff4565b6108ef8b601e614ff4565b90505f613a5f613a548b6024614ff4565b6108ef8c601f614ff4565b905083613a70816108cc818b612616565b9050613a80816108cc878a612616565b9050613a90816108cc8789612616565b9050613aa1816108cc8d6008614ff4565b9050613aad818a6125fb565b60e08b01525082613ac2816108cc818b612616565b9050613ad2816108cc868a612616565b9050613ae2816108cc8689612616565b9050613af3816108cc8d6008614ff4565b9050613aff818a6125fb565b6101008b01525081613b15816108cc818b612616565b9050613b25816108cc858a612616565b9050613b35816108cc8589612616565b9050613b46816108cc8d6008614ff4565b9050613b52818a6125fb565b6101208b01525080613b68816108cc818b612616565b9050613b78816108cc848a612616565b9050613b88816108cc8489612616565b9050613b99816108cc8d6008614ff4565b9050613ba5818a6125fb565b610140909a019990995250505050505050505050565b613bf46040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613bff84601d614ff4565b8152613c0c84601e614ff4565b6020820152613c1c846024614ff4565b6040820152613c2c846027614ff4565b6060820152613c3c846026614ff4565b6080820152613c4c846025614ff4565b60a08201525f613c5d856002614ff4565b90505f613c6a865f614ff4565b90505f613c7e8460400151855f015161262f565b90505f613c93856020015186602001516125fb565b606086015190915086905f90613ca990806125fb565b90505f613cc7613cc189602001518a606001516125fb565b886125fb565b90505f613ce6613cdf8a60a001518b60400151612616565b8a51612616565b9050613cf561396482886125fb565b9050613d1c613d16613d10613d0a848761262f565b8861262f565b84612616565b83612616565b9050613d44613d39613d2e83876125fb565b6108cc8f6009614ff4565b6108cc60018a61262f565b6101608c015250505050602085015160808601515f91613d6391612616565b90505f613d81613d778860600151886125fb565b886020015161262f565b90505f613da5613d9184876125fb565b6108d16137588b60a001518c5f015161262f565b9050613dcd613dc2613db7838c6125fb565b6108cc8e6009614ff4565b6108cc60018961262f565b6101808b0152505f9150613dee9050613de7836011612616565b87516125fb565b90505f613dfb8384612616565b9050613e078182612616565b90505f613e158360096125fb565b9050613e3e613e38613723613e318b60a001518c5f0151612616565b8b51612616565b8261262f565b60c089018190525f90613e5990613cc190613d2e908d6125fb565b9050613e6c8b600b602002015182612616565b6101608c0152505086515f9250613e939150613de790613e8c9080612616565b8851612616565b90505f613ed3613eae836108cc8a5f01518b60a0015161262f565b60208901516108ef90613ec19080612616565b6108cc8b602001518c60800151612616565b9050613ef089600c60200201516108d1613cc1613d2e858d6125fb565b89600c602002015250505050505050505050565b613f6e604051806101e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b613f86613f7c86601e614ff4565b85604001516125fb565b808252613fa5906108d1613f9b88601d614ff4565b87602001516125fb565b808252613fba906108d1613de788601c614ff4565b808252613fcc906108d1876001614ff4565b80825260208201819052613fe5906108ef87601f614ff4565b8152614000613ff5866024614ff4565b6108ef87601c614ff4565b608082015261401e614013866027614ff4565b6108ef87601f614ff4565b60608201526080810151614037906108cc81600161262f565b6101c082015260808101516140779061406d90614066906108cc60015f516020615c8e5f395f51905f526155e0565b6001612616565b82606001516125fb565b60a082018190526140ad9061409f906108cc614094896002614ff4565b6108cc8a6003614ff4565b6108cc61375888600a614ff4565b83600e60200201526101c08101516140d19061409f906108cc614094896002614ff4565b6101e084015280516140f6906108cc6140eb886002614ff4565b6108cc896003614ff4565b6101208201525f61411561410b87601f614ff4565b836020015161262f565b9050614126816108cc83600161262f565b60e0830152614143614139876026614ff4565b86604001516125fb565b60408301819052614166906108d161415c896025614ff4565b88602001516125fb565b60408301819052614186906108d161417f896024614ff4565b88516125fb565b60408301526141a3614199876027614ff4565b836040015161262f565b60408301525f6141c26141b7886026614ff4565b6108ef89601e614ff4565b90506142146141ef613471614066866080015160015f516020615c8e5f395f51905f526108cc91906155e0565b6108cc614066866040015160015f516020615c8e5f395f51905f526108cc91906155e0565b60c084015260408301516142369061422c90806125fb565b846040015161262f565b61010084015260c083015161426290614254906108cc8a6004614ff4565b6108cc6139648a600a614ff4565b6102008601526101c083015161428190614254906108cc8a6004614ff4565b6102208601526101008301516142a090614254906108cc8a6004614ff4565b61024086015260e08301516142ba906108cc896004614ff4565b6101408401526142d96142ce886025614ff4565b6108ef89601d614ff4565b6101608401526080830151614317906141b79061430c90614066906108cc60015f516020615c8e5f395f51905f526155e0565b8561016001516125fb565b61018084018190526101208401516101a0850181905261434e916108d1906108cc6143438c6005614ff4565b6108cc8d6002614ff4565b6101a08401819052835161436e91906108d1906108cc6143438c5f614ff4565b6101a084018190526101408401516143869190612616565b6101a084018190526143a0906108cc6139648a600a614ff4565b6101a0840181905285600d613794565b6143e96040518060e001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61441e6144056143fa86601c614ff4565b6108cc876025614ff4565b6108d1614413876024614ff4565b6108cc88601d614ff4565b815261446361445861443f61443487601c614ff4565b6108cc88601f614ff4565b6108d161444d88601d614ff4565b6108cc89601e614ff4565b6108ef866026614ff4565b6040820181905261447890600160441b6125fb565b6040820181905261448e906108ef866027614ff4565b6040820181905281516144a19190612616565b604082018190526144b7906108cc866005614ff4565b604082015280516144cc90600160441b6125fb565b8082526144ec906108d16144e1876024614ff4565b6108cc886025614ff4565b80825260208201819052614513906108ef61450887601e614ff4565b6108d188601f614ff4565b60208201819052614529906108cc866004614ff4565b6020820152805160608201819052614546906108d186601f614ff4565b6060820181905261456a906108ef61455f876026614ff4565b6108d1886027614ff4565b6060820181905261457f906108cc865f614ff4565b8160600181815250505f6145a861459e83602001518460400151612616565b8360600151612616565b90506145b9816108cc876003614ff4565b90506145d16145c9866025614ff4565b6140006125fb565b608083018190526145e7906108d1876024614ff4565b608083018190526145fa906140006125fb565b60808301819052614610906108d187601e614ff4565b60808301819052614623906140006125fb565b60808301819052614639906108d187601d614ff4565b6080830181905261464c906140006125fb565b60808301819052614662906108d187601c614ff4565b60808301819052614678906108ef87601f614ff4565b6080830181905261468e906108cc876005614ff4565b60808301526146a16145c9866026614ff4565b60a083018190526146b7906108d1876025614ff4565b60a083018190526146ca906140006125fb565b60a083018190526146e0906108d1876024614ff4565b60a083018190526146f3906140006125fb565b60a08301819052614709906108d187601f614ff4565b60a0830181905261471c906140006125fb565b60a08301819052614732906108d187601e614ff4565b60a08301819052614748906108ef876027614ff4565b60a0830181905261475d906108cc875f614ff4565b60a0830181905260808301515f916147759190612616565b9050614786816108cc886004614ff4565b90506147928282612616565b60c084018190526147ab906108cc61396489600b614ff4565b60c084018190528560136020020152505050505050565b6148386040518061022001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b61485161484685601c614ff4565b6108d1866002614ff4565b815261486c61486185601d614ff4565b6108d1866003614ff4565b602082015261488a61487f85601e614ff4565b6108d1866004614ff4565b60408201526148a861489d85601f614ff4565b6108d1866005614ff4565b606082015280516148da906148d3906148cc906148c590806125fb565b84516125fb565b83516125fb565b82516125fb565b608082015260208101516149189061490e90614904906148fa90806125fb565b84602001516125fb565b83602001516125fb565b82602001516125fb565b60a082015260408101516149569061494c906149429061493890806125fb565b84604001516125fb565b83604001516125fb565b82604001516125fb565b60c0820152606081015161498a9061406d906149809061497690806125fb565b84606001516125fb565b83606001516125fb565b60e0820152608081015160a08201516149a39190612616565b61010082015260c081015160e08201516149bd9190612616565b61012082015260a08101516149e1906149d69080612616565b826101200151612616565b61014082015260e0810151614a05906149fa9080612616565b826101000151612616565b610160820152610120810151614a1b9080612616565b6101e08201819052614a3c90614a319080612616565b826101600151612616565b6101e0820152610100810151614a529080612616565b6101a08201819052614a7390614a689080612616565b826101400151612616565b6101a08201819052610160820151614a8a91612616565b6101808201526101408101516101e0820151614aa69190612616565b6101c0820152614aba61347185600c614ff4565b6102008201819052610280840151610180830151614ae5926108d1916108cc906108ef8a6024614ff4565b8360146020020152614b1583601560200201516108d18361020001516108cc856101a001516108ef8a6025614ff4565b8360156020020152614b4583601660200201516108d18361020001516108cc856101c001516108ef8a6026614ff4565b8360166020020152614b7583601760200201516108d18361020001516108cc856101e001516108ef8a6027614ff4565b836017602002015250505050565b614bd56040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f6040518060800160405280614c0a7f10dc6e9c006ea38b04b1e03b4bd9490c0d03f98929ca1d7fb56821fd19d3b6e76125e3565b8152602001614c387f0c28145b6a44df3e0149b3d0a30b3bb599df9756d4dd9b84a86b38cfb45a740b6125e3565b8152602001614c657e544b8338791518b2c7645a50392798b21f75bb60e3596170067d00141cac156125e3565b8152602001614c937f222c01175718386f2e2e82eb122789e352e105a3b8fa852613bc534433ee428b6125e3565b90529050614cb0614ca586601c614ff4565b6108d1876002614ff4565b6101208301819052614cef90614ce490614cd990614cce90806125fb565b8561012001516125fb565b8461012001516125fb565b8361012001516125fb565b8252614cfc85601d614ff4565b6020830152614d0c85601e614ff4565b6040830152614d1c85601f614ff4565b606083015281516020830151614d449161459e91614d3a9190612616565b8460400151612616565b6080830152614d5761372386600d614ff4565b6101408301528151614d7890614d6e90835f610bce565b8360800151612616565b60a0830152614da484601860200201516108d18461014001516108cc8660a001516108ef8b6024614ff4565b6103008501526020820151614dbf90614d6e90836001610bce565b60c0830152614deb84601960200201516108d18461014001516108cc8660c001516108ef8b6025614ff4565b6103208501526040820151614e0690614d6e90836002610bce565b60e0830152614e3284601a60200201516108d18461014001516108cc8660e001516108ef8b6026614ff4565b6103408501526060820151614e4d90614d6e90836003610bce565b610100830152614e7b84601b60200201516108d18461014001516108cc8661010001516108ef8b6027614ff4565b84601b6135aa565b815160015b601c811015614ed557614ecb826108d18684601c8110614eaa57614eaa615b73565b602002015186614ebb6001876155e0565b601b8110610bce57610bce615b73565b9150600101614e88565b5092915050565b5f5f8390505f60405160208152602080820152602060408201528260608201528460808201525f516020615c8e5f395f51905f5260a082015260205f60c08360055afa80614f28575f5ffd5b505f5160809190910160405295945050505050565b614f45615320565b614f4d615320565b604051835181526020840151602082015284604082015260408160608360075afa80614f77575f5ffd5b5080518252602080820151908301526060016040529392505050565b614f9b615320565b614fa3615320565b6040518451815260208501516020820152835160408201526020840151606082015260408160808360065afa80614fd8575f5ffd5b5080518252602080820151908301526080016040529392505050565b5f8282602881111561500857615008615c59565b6029811061501857615018615b73565b60200201519392505050565b604051806103e001604052805f81526020015f81526020015f815260200161504a615320565b8152602001615057615320565b8152602001615064615320565b8152602001615071615320565b815260200161507e615320565b815260200161508b615320565b8152602001615098615320565b81526020016150a5615320565b81526020016150b2615320565b81526020016150bf615320565b81526020016150cc615320565b81526020016150d9615320565b81526020016150e6615320565b81526020016150f3615320565b8152602001615100615320565b815260200161510d615320565b815260200161511a615320565b8152602001615127615320565b8152602001615134615320565b8152602001615141615320565b815260200161514e615320565b815260200161515b615320565b8152602001615168615320565b8152602001615175615320565b8152602001615182615320565b815260200161518f615320565b815260200161519c615320565b81526020016151a9615320565b905290565b6040518061028001604052806151c26153ec565b81526020016151cf615320565b81526020016151dc615320565b81526020016151e9615320565b81526020016151f6615320565b8152602001615203615320565b8152602001615210615320565b815260200161521d615320565b815260200161522a615320565b8152602001615237615320565b815260200161524461540b565b81526020015f8152602001615257615438565b81526020015f815260200161526a615466565b8152602001615277615485565b815260200161528461536a565b815260200161518f6154b3565b6040518061052001604052806029906020820280368337509192915050565b604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020016152ee6154b3565b81526020016152fb6154b3565b81526020015f81526020015f81526020015f81526020015f8152602001606081525090565b60405180604001604052805f81526020015f81525090565b604051806040016040528061519c615320565b6040518061012001604052806009906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b6040518060e0016040528061539c6154d1565b81526020015f81526020015f81526020015f81526020015f81526020016153c16154d1565b81526020015f81525090565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b60405180606001604052806003905b615422615320565b81526020019060019003908161541a5790505090565b604051806103800160405280601c905b61545061534b565b8152602001906001900390816154485790505090565b604051806105400160405280602a906020820280368337509192915050565b604051806103600160405280601b905b61549d615320565b8152602001906001900390816154955790505090565b60405180608001604052806004906020820280368337509192915050565b604051806120000160405280610100906020820280368337509192915050565b5f5f5f5f60408587031215615504575f5ffd5b84356001600160401b03811115615519575f5ffd5b8501601f81018713615529575f5ffd5b80356001600160401b0381111561553e575f5ffd5b87602082840101111561554f575f5ffd5b6020918201955093508501356001600160401b0381111561556e575f5ffd5b8501601f8101871361557e575f5ffd5b80356001600160401b03811115615593575f5ffd5b8760208260051b84010111156155a7575f5ffd5b949793965060200194505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417612610576126106155b5565b81810381811115612610576126106155b5565b805f5b60108110156131e15781518452602093840193909101906001016155f6565b805f5b60038110156131e15761563684835180518252602090810151910152565b6040939093019260209190910190600101615618565b805f5b601c8110156131e1578151845f5b600981101561567c57825182526020928301929091019060010161565d565b50505061012093909301926020919091019060010161564f565b805f5b602a8110156131e1578151845260209384019390910190600101615699565b805f5b601b8110156131e1576156d984835180518252602090810151910152565b60409390930192602091909101906001016156bb565b805f5b601c8110156131e15781518452602093840193909101906001016156f2565b805f5b60048110156131e1578151845260209384019390910190600101615714565b8183525f6001600160fb1b0383111561574a575f5ffd5b8260051b80836020870137939093016020019392505050565b61576e8188516155f3565b5f602088015161578c61020084018280518252602090810151910152565b5060408801518051610240840152602090810151610260840152606089015180516102808501528101516102a0840152608089015180516102c08501528101516102e084015260a0890151805161030085015281015161032084015260c0890151805161034085015281015161036084015260e089015180516103808501528101516103a084015261010089015180516103c08501528101516103e084015261012089015180516104008501520151610420830152610140880151615855610440840182615615565b5061016088015161050083015261018088015161587661052084018261564c565b506101a08801516124a08301526101c08801516158976124c0840182615696565b506101e08801516158ac612a008401826156b8565b506102008801516158c16130c08401826156ef565b506102208801516158d6613440840182615711565b5061024088015180516134c08401526020908101516134e0840152610260890151805161350085015201516135208301526135c0613540830181905261591f9083018789615733565b613560830195909552506135808101929092526135a0909101529392505050565b634e487b7160e01b5f52604160045260245ffd5b60405161014081016001600160401b038111828210171561597757615977615940565b60405290565b604051601f8201601f191681016001600160401b03811182821017156159a5576159a5615940565b604052919050565b5f60c082840312156159bd575f5ffd5b60405160c081016001600160401b03811182821017156159df576159df615940565b604090815283518252602080850151908301528381015190820152606080840151908201526080808401519082015260a0928301519281019290925250919050565b5f82601f830112615a30575f5ffd5b5f610360615a3d8161597d565b915083018185821115615a4e575f5ffd5b845b82811015615a68578051825260209182019101615a50565b509195945050505050565b5f82601f830112615a82575f5ffd5b5f610380615a3d8161597d565b5f610be0828403128015615aa1575f5ffd5b50615aaa615954565b615ab484846159ad565b8152615ac38460c08501615a21565b6020820152615ad6846104208501615a73565b60408201526107a08301516060820152615af4846107c08501615a73565b6080820152610b4083015160a0820152610b6083015160c0820152610b8083015160e0820152610ba0830151610100820152610bc09092015161012083015250919050565b80820180821115612610576126106155b5565b5f5f85851115615b5a575f5ffd5b83861115615b66575f5ffd5b5050820193919092039150565b634e487b7160e01b5f52603260045260245ffd5b5f60018201615b9857615b986155b5565b5060010190565b80356020831015612610575f19602084900360031b1b1692915050565b5f82615bd657634e487b7160e01b5f52601260045260245ffd5b500690565b5f81615be957615be96155b5565b505f190190565b5f8183825b6008811015615c14578151835260209283019290910190600101615bf5565b5050506101008201905092915050565b5f82518060208501845e5f920191825250919050565b5f60208284031215615c4a575f5ffd5b815180151581146103f4575f5ffd5b634e487b7160e01b5f52602160045260245ffdfe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4730644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c634300081c000a", - "linkReferences": { - "project/contracts/verifier/ThresholdPkAggregationVerifier.sol": { - "ZKTranscriptLib": [ - { - "length": 20, - "start": 689 - } - ] - } - }, - "deployedLinkReferences": { - "project/contracts/verifier/ThresholdPkAggregationVerifier.sol": { - "ZKTranscriptLib": [ - { - "length": 20, - "start": 360 - } - ] - } - }, - "immutableReferences": { - "27970": [ - { - "length": 32, - "start": 91 - }, - { - "length": 32, - "start": 148 - }, - { - "length": 32, - "start": 257 - }, - { - "length": 32, - "start": 466 - }, - { - "length": 32, - "start": 2605 - }, - { - "length": 32, - "start": 2958 - }, - { - "length": 32, - "start": 3115 - }, - { - "length": 32, - "start": 5411 - }, - { - "length": 32, - "start": 5597 - }, - { - "length": 32, - "start": 5648 - }, - { - "length": 32, - "start": 6170 - }, - { - "length": 32, - "start": 11167 - } - ], - "27972": [ - { - "length": 32, - "start": 398 - } - ], - "27974": [ - { - "length": 32, - "start": 432 - }, - { - "length": 32, - "start": 2303 - } - ], - "27976": [ - { - "length": 32, - "start": 3156 - }, - { - "length": 32, - "start": 3257 - }, - { - "length": 32, - "start": 11970 - } - ] - }, - "inputSourceName": "project/contracts/verifier/ThresholdPkAggregationVerifier.sol", - "buildInfoId": "solc-0_8_28-543ccb35c9b85334df682667ad98480ea27e7555" -} \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/verifier/ThresholdPkAggregationVerifier.sol/ZKTranscriptLib.json b/packages/enclave-contracts/artifacts/contracts/verifier/ThresholdPkAggregationVerifier.sol/ZKTranscriptLib.json deleted file mode 100644 index ca4afdec17..0000000000 --- a/packages/enclave-contracts/artifacts/contracts/verifier/ThresholdPkAggregationVerifier.sol/ZKTranscriptLib.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "_format": "hh3-artifact-1", - "contractName": "ZKTranscriptLib", - "sourceName": "contracts/verifier/ThresholdPkAggregationVerifier.sol", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "Fr[16]", - "name": "pairingPointObject", - "type": "uint256[16]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "geminiMaskingPoly", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "w1", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "w2", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "w3", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "w4", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "lookupReadCounts", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "lookupReadTags", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "lookupInverses", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "zPerm", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point[3]", - "name": "libraCommitments", - "type": "tuple[3]" - }, - { - "internalType": "Fr", - "name": "libraSum", - "type": "uint256" - }, - { - "internalType": "Fr[9][28]", - "name": "sumcheckUnivariates", - "type": "uint256[9][28]" - }, - { - "internalType": "Fr", - "name": "libraEvaluation", - "type": "uint256" - }, - { - "internalType": "Fr[42]", - "name": "sumcheckEvaluations", - "type": "uint256[42]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point[27]", - "name": "geminiFoldComms", - "type": "tuple[27]" - }, - { - "internalType": "Fr[28]", - "name": "geminiAEvaluations", - "type": "uint256[28]" - }, - { - "internalType": "Fr[4]", - "name": "libraPolyEvals", - "type": "uint256[4]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "shplonkQ", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "y", - "type": "uint256" - } - ], - "internalType": "struct Honk.G1Point", - "name": "kzgQuotient", - "type": "tuple" - } - ], - "internalType": "struct Honk.ZKProof", - "name": "proof", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "publicInputs", - "type": "bytes32[]" - }, - { - "internalType": "uint256", - "name": "vkHash", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicInputsSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "logN", - "type": "uint256" - } - ], - "name": "generateTranscript", - "outputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "Fr", - "name": "eta", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "etaTwo", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "etaThree", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "beta", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "gamma", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "publicInputsDelta", - "type": "uint256" - } - ], - "internalType": "struct Honk.RelationParameters", - "name": "relationParameters", - "type": "tuple" - }, - { - "internalType": "Fr[27]", - "name": "alphas", - "type": "uint256[27]" - }, - { - "internalType": "Fr[28]", - "name": "gateChallenges", - "type": "uint256[28]" - }, - { - "internalType": "Fr", - "name": "libraChallenge", - "type": "uint256" - }, - { - "internalType": "Fr[28]", - "name": "sumCheckUChallenges", - "type": "uint256[28]" - }, - { - "internalType": "Fr", - "name": "rho", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "geminiR", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "shplonkNu", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "shplonkZ", - "type": "uint256" - }, - { - "internalType": "Fr", - "name": "publicInputsDelta", - "type": "uint256" - } - ], - "internalType": "struct ZKTranscript", - "name": "t", - "type": "tuple" - } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "bytecode": "0x6116f3610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063995bf45714610038575b5f5ffd5b61004b610046366004611214565b610061565b604051610058919061144a565b60405180910390f35b610069610d76565b5f610078888888888886610128565b9083529050610087818961017c565b6020840191909152905061009b818461026c565b604084019190915290506100af8189610315565b606084019190915290506100c4888285610376565b608084019190915290506100d88882610445565b60a084019190915290506100ed8882856105cb565b60c0840191909152905061010288828561073d565b60e0840191909152905061011688826108bf565b50610100830152509695505050505050565b610130610ddb565b5f61013e88888888886108fc565b60408601919091526020850191909152908352925061015d8389610c6a565b6080850191909152606084019190915291989197509095505050505050565b610184610e0b565b5f61018d610e2a565b8481526101008401805151602080840191909152905181015160408084019190915261012086018051516060850152518201516080840152516101f1916101d69184910161151f565b60405160208183030381529060405280519060200120610cf2565b91505f6101fd83610d18565b50808552905060015b6102126001601c611566565b8110156102625761024385610228600184611566565b601b81106102385761023861150b565b602002015183610d48565b8582601b81106102555761025561150b565b6020020152600101610206565b5050509250929050565b610274610e48565b5f61028b846040516020016101d691815260200190565b935061029684610d18565b50825260015b8381101561030d576102ee836102b3600184611566565b601c81106102c3576102c361150b565b6020020151846102d4600185611566565b601c81106102e4576102e461150b565b6020020151610d48565b8382601c81106103005761030061150b565b602002015260010161029c565b509093915050565b5f5f61031f610e67565b84815261014084018051515160208084019190915290515181015160408084019190915261016086015160608401525161035f916101d691849101611579565b915061036a82610d18565b50959194509092505050565b61037e610e48565b5f805b8381101561043b57610391610e85565b8581525f5b60098110156103fa5787610180015183601c81106103b6576103b661150b565b602002015181600981106103cc576103cc61150b565b6020020151826103dd8360016115ac565b600a81106103ed576103ed61150b565b6020020152600101610396565b5061040f816040516020016101d691906115bf565b955061041a86610d18565b508483601c811061042d5761042d61150b565b602002015250600101610381565b5090949293505050565b5f5f61044f610ea4565b83815260015b610461600160296115ac565b81116104b6576101c0860151610478600183611566565b602a81106104885761048861150b565b602002015182826030811061049f5761049f61150b565b6020020152806104ae816115f3565b915050610455565b856101a001518282603081106104ce576104ce61150b565b60200201526104de6001826115ac565b61014087015160200151519091508282603081106104fe576104fe61150b565b602002015261014086015160016020020151602001518282600161052291906115ac565b603081106105325761053261150b565b60200201526105426002826115ac565b61014087015160400151519091508282603081106105625761056261150b565b602002015261014086015160026020020151602001518282600161058691906115ac565b603081106105965761059661150b565b6020020181815250506105b3826040516020016101d6919061160b565b92506105be83610d18565b5096929550919350505050565b5f80806105d9600185611566565b6105e490600261163f565b6105ef9060016115ac565b6001600160401b0381111561060657610606610eff565b60405190808252806020026020018201604052801561062f578160200160208202803683370190505b50905084815f815181106106455761064561150b565b60209081029190910101525f5b61065d600186611566565b81101561071057866101e0015181601b811061067b5761067b61150b565b6020020151518261068d83600261163f565b6106989060016115ac565b815181106106a8576106a861150b565b602002602001018181525050866101e0015181601b81106106cb576106cb61150b565b602002015160200151828260026106e2919061163f565b6106ed9060026115ac565b815181106106fd576106fd61150b565b6020908102919091010152600101610652565b50610725816040516020016101d69190611656565b915061073082610d18565b5096919550909350505050565b5f808061074b8460016115ac565b6107569060046115ac565b6001600160401b0381111561076d5761076d610eff565b604051908082528060200260200182016040528015610796578160200160208202803683370190505b50905084815f815181106107ac576107ac61150b565b602090810291909101015260015b848111610816576102008701516107d2600183611566565b601c81106107e2576107e261150b565b60200201518282815181106107f9576107f961150b565b60209081029190910101528061080e816115f3565b9150506107ba565b505f806108248660016115ac565b90505b6108328660046115ac565b811161089157876102200151826004811061084f5761084f61150b565b60200201518382815181106108665761086661150b565b60209081029190910101528161087b816115f3565b9250508080610889906115f3565b915050610827565b506108a6826040516020016101d69190611656565b92506108b183610d18565b509792965091945050505050565b5f5f6108c9610ec3565b838152610240850180515160208084019190915290518101516040808401919091525161035f916101d691849101611680565b5f8080808061090c8660016115ac565b6109179060086115ac565b6001600160401b0381111561092e5761092e610eff565b604051908082528060200260200182016040528015610957578160200160208202803683370190505b509050865f1b815f8151811061096f5761096f61150b565b60209081029190910101525f5b610987601088611566565b8110156109d8578989828181106109a0576109a061150b565b90506020020135828260016109b591906115ac565b815181106109c5576109c561150b565b602090810291909101015260010161097c565b505f5b6010811015610a49578a51610a039082601081106109fb576109fb61150b565b602002015190565b82826010610a128b60016115ac565b610a1c9190611566565b610a2691906115ac565b81518110610a3657610a3661150b565b60209081029190910101526001016109db565b5060208a01515181610a5c8860016115ac565b81518110610a6c57610a6c61150b565b6020908102919091018101919091528a810151015181610a8d8860016115ac565b610a989060016115ac565b81518110610aa857610aa861150b565b602090810291909101015260408a01515181610ac58860016115ac565b610ad09060026115ac565b81518110610ae057610ae061150b565b60209081029190910181019190915260408b0151015181610b028860016115ac565b610b0d9060036115ac565b81518110610b1d57610b1d61150b565b602090810291909101015260608a01515181610b3a8860016115ac565b610b459060046115ac565b81518110610b5557610b5561150b565b60209081029190910181019190915260608b0151015181610b778860016115ac565b610b829060056115ac565b81518110610b9257610b9261150b565b602090810291909101015260808a01515181610baf8860016115ac565b610bba9060066115ac565b81518110610bca57610bca61150b565b60209081029190910181019190915260808b0151015181610bec8860016115ac565b610bf79060076115ac565b81518110610c0757610c0761150b565b602002602001018181525050610c27816040516020016101d69190611656565b9150610c3282610d18565b6040805160208101869052929750909550610c4d91016101d6565b9150610c5882610d18565b50809350505095509550955095915050565b5f5f5f610c75610ee1565b85815260c0858101805151602080850191909152905181015160408085019190915260e08801805151606086015251820151608085015260a08089018051519186019190915251820151928401929092529051610cd8916101d6918491016116b3565b9150610ce382610d18565b90979096509194509092505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001900690565b5f808260016001607f1b038116607f82901c610d3382610cf2565b9450610d3e81610cf2565b9350505050915091565b5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840990505b92915050565b604051806101400160405280610d8a610ddb565b8152602001610d97610e0b565b8152602001610da4610e48565b81526020015f8152602001610db7610e48565b81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b604051806103600160405280601b906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101400160405280600a906020820280368337509192915050565b6040518061060001604052806030906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b60405161028081016001600160401b0381118282101715610f3657610f36610eff565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610f6457610f64610eff565b604052919050565b5f82601f830112610f7b575f5ffd5b5f610200610f8881610f3c565b915083018185821115610f99575f5ffd5b845b82811015610fb3578035825260209182019101610f9b565b509195945050505050565b5f60408284031215610fce575f5ffd5b604080519081016001600160401b0381118282101715610ff057610ff0610eff565b604052823581526020928301359281019290925250919050565b5f82601f830112611019575f5ffd5b5f6110246060610f3c565b90508060c0840185811115611037575f5ffd5b845b81811015610fb35761104b8782610fbe565b8352602090920191604001611039565b5f82601f83011261106a575f5ffd5b61038061107681610f3c565b905080611f8084018581111561108a575f5ffd5b845b818110156110ee5786601f8201126110a2575f5ffd5b5f6101206110af81610f3c565b9150820181898211156110c0575f5ffd5b835b828110156110da5780358252602091820191016110c2565b50505084526020909301926101200161108c565b509095945050505050565b5f82601f830112611108575f5ffd5b5f610540610f8881610f3c565b5f82601f830112611124575f5ffd5b5f61036061113181610f3c565b915050806106c0840185811115611146575f5ffd5b845b81811015610fb35761115a8782610fbe565b8352602090920191604001611148565b5f82601f830112611179575f5ffd5b5f610380610f8881610f3c565b5f82601f830112611195575f5ffd5b5f6111a06080610f3c565b90508060808401858111156111b3575f5ffd5b845b81811015610fb35780358352602092830192016111b5565b5f5f83601f8401126111dd575f5ffd5b5081356001600160401b038111156111f3575f5ffd5b6020830191508360208260051b850101111561120d575f5ffd5b9250929050565b5f5f5f5f5f5f8688036135c081121561122b575f5ffd5b613540811215611239575f5ffd5b50611242610f13565b61124c8989610f6c565b815261125c896102008a01610fbe565b602082015261126f896102408a01610fbe565b6040820152611282896102808a01610fbe565b6060820152611295896102c08a01610fbe565b60808201526112a8896103008a01610fbe565b60a08201526112bb896103408a01610fbe565b60c08201526112ce896103808a01610fbe565b60e08201526112e1896103c08a01610fbe565b6101008201526112f5896104008a01610fbe565b610120820152611309896104408a0161100a565b610140820152610500880135610160820152611329896105208a0161105b565b6101808201526124a08801356101a0820152611349896124c08a016110f9565b6101c082015261135d89612a008a01611115565b6101e0820152611371896130c08a0161116a565b610200820152611385896134408a01611186565b610220820152611399896134c08a01610fbe565b6102408201526113ad896135008a01610fbe565b61026082015295506135408701356001600160401b038111156113ce575f5ffd5b6113da89828a016111cd565b979a90995096976135608101359761358082013597506135a09091013595509350505050565b805f5b601b811015611422578151845260209384019390910190600101611403565b50505050565b805f5b601c81101561142257815184526020938401939091019060010161142b565b8151805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a09081015190820152610be08101602083015161149960c0840182611400565b5060408301516114ad610420840182611428565b5060608301516107a083015260808301516114cc6107c0840182611428565b5060a0830151610b4083015260c0830151610b6083015260e0830151610b80830152610100830151610ba083015261012090920151610bc09091015290565b634e487b7160e01b5f52603260045260245ffd5b5f8183825b6005811015611543578151835260209283019290910190600101611524565b50505060a08201905092915050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d7057610d70611552565b5f8183825b600481101561159d57815183526020928301929091019060010161157e565b50505060808201905092915050565b80820180821115610d7057610d70611552565b5f8183825b600a8110156115e35781518352602092830192909101906001016115c4565b5050506101408201905092915050565b5f6001820161160457611604611552565b5060010190565b5f8183825b603081101561162f578151835260209283019290910190600101611610565b5050506106008201905092915050565b8082028115828204841417610d7057610d70611552565b81515f90829060208501835b82811015610fb3578151845260209384019390910190600101611662565b5f8183825b60038110156116a4578151835260209283019290910190600101611685565b50505060608201905092915050565b5f8183825b60078110156116d75781518352602092830192909101906001016116b8565b50505060e0820190509291505056fea164736f6c634300081c000a", - "deployedBytecode": "0x7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063995bf45714610038575b5f5ffd5b61004b610046366004611214565b610061565b604051610058919061144a565b60405180910390f35b610069610d76565b5f610078888888888886610128565b9083529050610087818961017c565b6020840191909152905061009b818461026c565b604084019190915290506100af8189610315565b606084019190915290506100c4888285610376565b608084019190915290506100d88882610445565b60a084019190915290506100ed8882856105cb565b60c0840191909152905061010288828561073d565b60e0840191909152905061011688826108bf565b50610100830152509695505050505050565b610130610ddb565b5f61013e88888888886108fc565b60408601919091526020850191909152908352925061015d8389610c6a565b6080850191909152606084019190915291989197509095505050505050565b610184610e0b565b5f61018d610e2a565b8481526101008401805151602080840191909152905181015160408084019190915261012086018051516060850152518201516080840152516101f1916101d69184910161151f565b60405160208183030381529060405280519060200120610cf2565b91505f6101fd83610d18565b50808552905060015b6102126001601c611566565b8110156102625761024385610228600184611566565b601b81106102385761023861150b565b602002015183610d48565b8582601b81106102555761025561150b565b6020020152600101610206565b5050509250929050565b610274610e48565b5f61028b846040516020016101d691815260200190565b935061029684610d18565b50825260015b8381101561030d576102ee836102b3600184611566565b601c81106102c3576102c361150b565b6020020151846102d4600185611566565b601c81106102e4576102e461150b565b6020020151610d48565b8382601c81106103005761030061150b565b602002015260010161029c565b509093915050565b5f5f61031f610e67565b84815261014084018051515160208084019190915290515181015160408084019190915261016086015160608401525161035f916101d691849101611579565b915061036a82610d18565b50959194509092505050565b61037e610e48565b5f805b8381101561043b57610391610e85565b8581525f5b60098110156103fa5787610180015183601c81106103b6576103b661150b565b602002015181600981106103cc576103cc61150b565b6020020151826103dd8360016115ac565b600a81106103ed576103ed61150b565b6020020152600101610396565b5061040f816040516020016101d691906115bf565b955061041a86610d18565b508483601c811061042d5761042d61150b565b602002015250600101610381565b5090949293505050565b5f5f61044f610ea4565b83815260015b610461600160296115ac565b81116104b6576101c0860151610478600183611566565b602a81106104885761048861150b565b602002015182826030811061049f5761049f61150b565b6020020152806104ae816115f3565b915050610455565b856101a001518282603081106104ce576104ce61150b565b60200201526104de6001826115ac565b61014087015160200151519091508282603081106104fe576104fe61150b565b602002015261014086015160016020020151602001518282600161052291906115ac565b603081106105325761053261150b565b60200201526105426002826115ac565b61014087015160400151519091508282603081106105625761056261150b565b602002015261014086015160026020020151602001518282600161058691906115ac565b603081106105965761059661150b565b6020020181815250506105b3826040516020016101d6919061160b565b92506105be83610d18565b5096929550919350505050565b5f80806105d9600185611566565b6105e490600261163f565b6105ef9060016115ac565b6001600160401b0381111561060657610606610eff565b60405190808252806020026020018201604052801561062f578160200160208202803683370190505b50905084815f815181106106455761064561150b565b60209081029190910101525f5b61065d600186611566565b81101561071057866101e0015181601b811061067b5761067b61150b565b6020020151518261068d83600261163f565b6106989060016115ac565b815181106106a8576106a861150b565b602002602001018181525050866101e0015181601b81106106cb576106cb61150b565b602002015160200151828260026106e2919061163f565b6106ed9060026115ac565b815181106106fd576106fd61150b565b6020908102919091010152600101610652565b50610725816040516020016101d69190611656565b915061073082610d18565b5096919550909350505050565b5f808061074b8460016115ac565b6107569060046115ac565b6001600160401b0381111561076d5761076d610eff565b604051908082528060200260200182016040528015610796578160200160208202803683370190505b50905084815f815181106107ac576107ac61150b565b602090810291909101015260015b848111610816576102008701516107d2600183611566565b601c81106107e2576107e261150b565b60200201518282815181106107f9576107f961150b565b60209081029190910101528061080e816115f3565b9150506107ba565b505f806108248660016115ac565b90505b6108328660046115ac565b811161089157876102200151826004811061084f5761084f61150b565b60200201518382815181106108665761086661150b565b60209081029190910101528161087b816115f3565b9250508080610889906115f3565b915050610827565b506108a6826040516020016101d69190611656565b92506108b183610d18565b509792965091945050505050565b5f5f6108c9610ec3565b838152610240850180515160208084019190915290518101516040808401919091525161035f916101d691849101611680565b5f8080808061090c8660016115ac565b6109179060086115ac565b6001600160401b0381111561092e5761092e610eff565b604051908082528060200260200182016040528015610957578160200160208202803683370190505b509050865f1b815f8151811061096f5761096f61150b565b60209081029190910101525f5b610987601088611566565b8110156109d8578989828181106109a0576109a061150b565b90506020020135828260016109b591906115ac565b815181106109c5576109c561150b565b602090810291909101015260010161097c565b505f5b6010811015610a49578a51610a039082601081106109fb576109fb61150b565b602002015190565b82826010610a128b60016115ac565b610a1c9190611566565b610a2691906115ac565b81518110610a3657610a3661150b565b60209081029190910101526001016109db565b5060208a01515181610a5c8860016115ac565b81518110610a6c57610a6c61150b565b6020908102919091018101919091528a810151015181610a8d8860016115ac565b610a989060016115ac565b81518110610aa857610aa861150b565b602090810291909101015260408a01515181610ac58860016115ac565b610ad09060026115ac565b81518110610ae057610ae061150b565b60209081029190910181019190915260408b0151015181610b028860016115ac565b610b0d9060036115ac565b81518110610b1d57610b1d61150b565b602090810291909101015260608a01515181610b3a8860016115ac565b610b459060046115ac565b81518110610b5557610b5561150b565b60209081029190910181019190915260608b0151015181610b778860016115ac565b610b829060056115ac565b81518110610b9257610b9261150b565b602090810291909101015260808a01515181610baf8860016115ac565b610bba9060066115ac565b81518110610bca57610bca61150b565b60209081029190910181019190915260808b0151015181610bec8860016115ac565b610bf79060076115ac565b81518110610c0757610c0761150b565b602002602001018181525050610c27816040516020016101d69190611656565b9150610c3282610d18565b6040805160208101869052929750909550610c4d91016101d6565b9150610c5882610d18565b50809350505095509550955095915050565b5f5f5f610c75610ee1565b85815260c0858101805151602080850191909152905181015160408085019190915260e08801805151606086015251820151608085015260a08089018051519186019190915251820151928401929092529051610cd8916101d6918491016116b3565b9150610ce382610d18565b90979096509194509092505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001900690565b5f808260016001607f1b038116607f82901c610d3382610cf2565b9450610d3e81610cf2565b9350505050915091565b5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840990505b92915050565b604051806101400160405280610d8a610ddb565b8152602001610d97610e0b565b8152602001610da4610e48565b81526020015f8152602001610db7610e48565b81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b604051806103600160405280601b906020820280368337509192915050565b6040518060a001604052806005906020820280368337509192915050565b604051806103800160405280601c906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101400160405280600a906020820280368337509192915050565b6040518061060001604052806030906020820280368337509192915050565b60405180606001604052806003906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b60405161028081016001600160401b0381118282101715610f3657610f36610eff565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610f6457610f64610eff565b604052919050565b5f82601f830112610f7b575f5ffd5b5f610200610f8881610f3c565b915083018185821115610f99575f5ffd5b845b82811015610fb3578035825260209182019101610f9b565b509195945050505050565b5f60408284031215610fce575f5ffd5b604080519081016001600160401b0381118282101715610ff057610ff0610eff565b604052823581526020928301359281019290925250919050565b5f82601f830112611019575f5ffd5b5f6110246060610f3c565b90508060c0840185811115611037575f5ffd5b845b81811015610fb35761104b8782610fbe565b8352602090920191604001611039565b5f82601f83011261106a575f5ffd5b61038061107681610f3c565b905080611f8084018581111561108a575f5ffd5b845b818110156110ee5786601f8201126110a2575f5ffd5b5f6101206110af81610f3c565b9150820181898211156110c0575f5ffd5b835b828110156110da5780358252602091820191016110c2565b50505084526020909301926101200161108c565b509095945050505050565b5f82601f830112611108575f5ffd5b5f610540610f8881610f3c565b5f82601f830112611124575f5ffd5b5f61036061113181610f3c565b915050806106c0840185811115611146575f5ffd5b845b81811015610fb35761115a8782610fbe565b8352602090920191604001611148565b5f82601f830112611179575f5ffd5b5f610380610f8881610f3c565b5f82601f830112611195575f5ffd5b5f6111a06080610f3c565b90508060808401858111156111b3575f5ffd5b845b81811015610fb35780358352602092830192016111b5565b5f5f83601f8401126111dd575f5ffd5b5081356001600160401b038111156111f3575f5ffd5b6020830191508360208260051b850101111561120d575f5ffd5b9250929050565b5f5f5f5f5f5f8688036135c081121561122b575f5ffd5b613540811215611239575f5ffd5b50611242610f13565b61124c8989610f6c565b815261125c896102008a01610fbe565b602082015261126f896102408a01610fbe565b6040820152611282896102808a01610fbe565b6060820152611295896102c08a01610fbe565b60808201526112a8896103008a01610fbe565b60a08201526112bb896103408a01610fbe565b60c08201526112ce896103808a01610fbe565b60e08201526112e1896103c08a01610fbe565b6101008201526112f5896104008a01610fbe565b610120820152611309896104408a0161100a565b610140820152610500880135610160820152611329896105208a0161105b565b6101808201526124a08801356101a0820152611349896124c08a016110f9565b6101c082015261135d89612a008a01611115565b6101e0820152611371896130c08a0161116a565b610200820152611385896134408a01611186565b610220820152611399896134c08a01610fbe565b6102408201526113ad896135008a01610fbe565b61026082015295506135408701356001600160401b038111156113ce575f5ffd5b6113da89828a016111cd565b979a90995096976135608101359761358082013597506135a09091013595509350505050565b805f5b601b811015611422578151845260209384019390910190600101611403565b50505050565b805f5b601c81101561142257815184526020938401939091019060010161142b565b8151805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a09081015190820152610be08101602083015161149960c0840182611400565b5060408301516114ad610420840182611428565b5060608301516107a083015260808301516114cc6107c0840182611428565b5060a0830151610b4083015260c0830151610b6083015260e0830151610b80830152610100830151610ba083015261012090920151610bc09091015290565b634e487b7160e01b5f52603260045260245ffd5b5f8183825b6005811015611543578151835260209283019290910190600101611524565b50505060a08201905092915050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610d7057610d70611552565b5f8183825b600481101561159d57815183526020928301929091019060010161157e565b50505060808201905092915050565b80820180821115610d7057610d70611552565b5f8183825b600a8110156115e35781518352602092830192909101906001016115c4565b5050506101408201905092915050565b5f6001820161160457611604611552565b5060010190565b5f8183825b603081101561162f578151835260209283019290910190600101611610565b5050506106008201905092915050565b8082028115828204841417610d7057610d70611552565b81515f90829060208501835b82811015610fb3578151845260209384019390910190600101611662565b5f8183825b60038110156116a4578151835260209283019290910190600101611685565b50505060608201905092915050565b5f8183825b60078110156116d75781518352602092830192909101906001016116b8565b50505060e0820190509291505056fea164736f6c634300081c000a", - "linkReferences": {}, - "deployedLinkReferences": {}, - "immutableReferences": {}, - "inputSourceName": "project/contracts/verifier/ThresholdPkAggregationVerifier.sol", - "buildInfoId": "solc-0_8_28-543ccb35c9b85334df682667ad98480ea27e7555" -} \ No newline at end of file diff --git a/packages/enclave-contracts/contracts/Enclave.sol b/packages/enclave-contracts/contracts/Enclave.sol index 35874c4df9..ed13d1f775 100644 --- a/packages/enclave-contracts/contracts/Enclave.sol +++ b/packages/enclave-contracts/contracts/Enclave.sol @@ -11,6 +11,7 @@ import { IBondingRegistry } from "./interfaces/IBondingRegistry.sol"; import { ISlashingManager } from "./interfaces/ISlashingManager.sol"; import { IE3RefundManager } from "./interfaces/IE3RefundManager.sol"; import { IDecryptionVerifier } from "./interfaces/IDecryptionVerifier.sol"; +import { IPkVerifier } from "./interfaces/IPkVerifier.sol"; import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; @@ -75,6 +76,11 @@ contract Enclave is IEnclave, OwnableUpgradeable { mapping(bytes32 encryptionSchemeId => IDecryptionVerifier decryptionVerifier) public decryptionVerifiers; + /// @notice Mapping of encryption schemes to their C5 (pk_aggregation) proof verifiers. + /// @dev Required per scheme; gates E3 requests like decryptionVerifier. + mapping(bytes32 encryptionSchemeId => IPkVerifier pkVerifier) + public pkVerifiers; + /// @notice Mapping storing valid E3 program ABI encoded parameter sets. /// @dev Stores allowed encryption scheme parameters (e.g., BFV parameters). mapping(bytes e3ProgramParams => bool allowed) public e3ProgramsParams; @@ -345,6 +351,7 @@ contract Enclave is IEnclave, OwnableUpgradeable { e3.e3Program = requestParams.e3Program; e3.e3ProgramParams = requestParams.e3ProgramParams; e3.customParams = requestParams.customParams; + e3.proofAggregationEnabled = requestParams.proofAggregationEnabled; e3.committeePublicKey = hex""; e3.ciphertextOutput = hex""; e3.plaintextOutput = hex""; @@ -369,8 +376,15 @@ contract Enclave is IEnclave, OwnableUpgradeable { InvalidEncryptionScheme(encryptionSchemeId) ); + IPkVerifier pkVerifier = pkVerifiers[encryptionSchemeId]; + require( + address(pkVerifier) != address(0), + InvalidEncryptionScheme(encryptionSchemeId) + ); + e3.encryptionSchemeId = encryptionSchemeId; e3.decryptionVerifier = decryptionVerifier; + e3.pkVerifier = pkVerifier; e3s[e3Id] = e3; require( @@ -462,7 +476,6 @@ contract Enclave is IEnclave, OwnableUpgradeable { _e3Stages[e3Id] = E3Stage.Complete; (success) = e3.decryptionVerifier.verify( - e3Id, keccak256(plaintextOutput), proof ); @@ -654,6 +667,19 @@ contract Enclave is IEnclave, OwnableUpgradeable { emit EncryptionSchemeEnabled(encryptionSchemeId); } + /// @inheritdoc IEnclave + function setPkVerifier( + bytes32 encryptionSchemeId, + IPkVerifier pkVerifier + ) public onlyOwner { + require( + address(pkVerifier) != address(0) && + pkVerifiers[encryptionSchemeId] != pkVerifier, + InvalidEncryptionScheme(encryptionSchemeId) + ); + pkVerifiers[encryptionSchemeId] = pkVerifier; + } + /// @inheritdoc IEnclave function disableEncryptionScheme( bytes32 encryptionSchemeId @@ -779,16 +805,16 @@ contract Enclave is IEnclave, OwnableUpgradeable { /// @inheritdoc IEnclave function onCommitteePublished( uint256 e3Id, - bytes32 committeePublicKeyHash + bytes32 committeePublicKey ) external onlyCiphernodeRegistry { - // DKG complete, key published + E3 storage e3 = e3s[e3Id]; E3Stage current = _e3Stages[e3Id]; if (current != E3Stage.CommitteeFinalized) { revert InvalidStage(e3Id, E3Stage.CommitteeFinalized, current); } - _e3Stages[e3Id] = E3Stage.KeyPublished; - e3s[e3Id].committeePublicKey = committeePublicKeyHash; + _e3Stages[e3Id] = E3Stage.KeyPublished; + e3.committeePublicKey = committeePublicKey; emit CommitteeFormed(e3Id); emit E3StageChanged( @@ -1010,4 +1036,11 @@ contract Enclave is IEnclave, OwnableUpgradeable { ) public view returns (IDecryptionVerifier) { return decryptionVerifiers[encryptionSchemeId]; } + + /// @inheritdoc IEnclave + function getPkVerifier( + bytes32 encryptionSchemeId + ) public view returns (IPkVerifier) { + return pkVerifiers[encryptionSchemeId]; + } } diff --git a/packages/enclave-contracts/contracts/interfaces/ICiphernodeRegistry.sol b/packages/enclave-contracts/contracts/interfaces/ICiphernodeRegistry.sol index 21b0335707..9bedd26d02 100644 --- a/packages/enclave-contracts/contracts/interfaces/ICiphernodeRegistry.sol +++ b/packages/enclave-contracts/contracts/interfaces/ICiphernodeRegistry.sol @@ -202,12 +202,12 @@ interface ICiphernodeRegistry { /// @param e3Id ID of the E3 for which to select the committee. /// @param nodes Array of ciphernode addresses selected for the committee. /// @param publicKey The public key generated by the given committee. - /// @param publicKeyHash The hash of the public key. + /// @param proof C5 proof; ABI-encoded (bytes rawProof, bytes32[] publicInputs). Last input is aggregate commitment. function publishCommittee( uint256 e3Id, address[] calldata nodes, bytes calldata publicKey, - bytes32 publicKeyHash + bytes calldata proof ) external; /// @notice This function should be called by the Enclave contract to get the public key of a committee. diff --git a/packages/enclave-contracts/contracts/interfaces/IDecryptionVerifier.sol b/packages/enclave-contracts/contracts/interfaces/IDecryptionVerifier.sol index e7b727914e..665cf3de0b 100644 --- a/packages/enclave-contracts/contracts/interfaces/IDecryptionVerifier.sol +++ b/packages/enclave-contracts/contracts/interfaces/IDecryptionVerifier.sol @@ -13,12 +13,10 @@ pragma solidity >=0.8.27; interface IDecryptionVerifier { /// @notice Verify the decryption of a computation output /// @dev This function is called by the Enclave contract when plaintext output is published - /// @param e3Id ID of the E3 computation /// @param plaintextOutputHash The keccak256 hash of the plaintext output to be verified /// @param proof ABI encoded proof of the decryption validity /// @return success Whether the plaintextOutputHash was successfully verified function verify( - uint256 e3Id, bytes32 plaintextOutputHash, bytes memory proof ) external view returns (bool success); diff --git a/packages/enclave-contracts/contracts/interfaces/IE3.sol b/packages/enclave-contracts/contracts/interfaces/IE3.sol index 6923c458e1..84510ac8ff 100644 --- a/packages/enclave-contracts/contracts/interfaces/IE3.sol +++ b/packages/enclave-contracts/contracts/interfaces/IE3.sol @@ -7,6 +7,7 @@ pragma solidity >=0.8.27; import { IE3Program } from "./IE3Program.sol"; import { IDecryptionVerifier } from "./IDecryptionVerifier.sol"; +import { IPkVerifier } from "./IPkVerifier.sol"; import { IEnclave } from "./IEnclave.sol"; /** @@ -38,8 +39,10 @@ struct E3 { bytes e3ProgramParams; bytes customParams; IDecryptionVerifier decryptionVerifier; + IPkVerifier pkVerifier; bytes32 committeePublicKey; bytes32 ciphertextOutput; bytes plaintextOutput; address requester; + bool proofAggregationEnabled; } diff --git a/packages/enclave-contracts/contracts/interfaces/IEnclave.sol b/packages/enclave-contracts/contracts/interfaces/IEnclave.sol index 031fd0cfc8..b4edc054ca 100644 --- a/packages/enclave-contracts/contracts/interfaces/IEnclave.sol +++ b/packages/enclave-contracts/contracts/interfaces/IEnclave.sol @@ -9,6 +9,7 @@ import { E3, IE3Program } from "./IE3.sol"; import { ICiphernodeRegistry } from "./ICiphernodeRegistry.sol"; import { IBondingRegistry } from "./IBondingRegistry.sol"; import { IDecryptionVerifier } from "./IDecryptionVerifier.sol"; +import { IPkVerifier } from "./IPkVerifier.sol"; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IEnclave { @@ -240,6 +241,12 @@ interface IEnclave { bytes e3ProgramParams; bytes computeProviderParams; bytes customParams; + /// @notice When true, ciphernodes generate and fold wrapper proofs + /// for DKG proof aggregation (public verifiability). When + /// false, wrapper/fold proofs are skipped to reduce latency. + /// C5 and C7 proofs are always generated and verified on-chain + /// regardless of this flag. + bool proofAggregationEnabled; } //////////////////////////////////////////////////////////// @@ -325,6 +332,14 @@ interface IEnclave { IDecryptionVerifier decryptionVerifier ) external; + /// @notice Sets the C5 (pk_aggregation) proof verifier for an encryption scheme. + /// @param encryptionSchemeId The encryption scheme identifier. + /// @param pkVerifier The pk verifier contract (optional; address(0) to disable). + function setPkVerifier( + bytes32 encryptionSchemeId, + IPkVerifier pkVerifier + ) external; + /// @notice Disables a previously enabled encryption scheme. /// @dev This function MUST revert if the encryption scheme is not currently enabled. /// @param encryptionSchemeId The unique identifier for the encryption scheme to disable. @@ -367,6 +382,13 @@ interface IEnclave { bytes32 encryptionSchemeId ) external view returns (IDecryptionVerifier); + /// @notice Returns the C5 pk verifier for an encryption scheme. + /// @param encryptionSchemeId The encryption scheme identifier. + /// @return The pk verifier contract (address(0) if not set). + function getPkVerifier( + bytes32 encryptionSchemeId + ) external view returns (IPkVerifier); + /// @notice Returns the ERC20 token used to pay for E3 fees. function feeToken() external view returns (IERC20); @@ -381,10 +403,10 @@ interface IEnclave { /// @notice Called by CiphernodeRegistry when committee public key is published (DKG complete). /// @dev Updates E3 lifecycle to KeyPublished stage. /// @param e3Id ID of the E3. - /// @param committeePublicKeyHash Hash of the committee public key. + /// @param committeePublicKey Hash of the committee's aggregated public key. function onCommitteePublished( uint256 e3Id, - bytes32 committeePublicKeyHash + bytes32 committeePublicKey ) external; /// @notice Called by authorized contracts to mark an E3 as failed with a specific reason. diff --git a/packages/enclave-contracts/contracts/interfaces/IPkVerifier.sol b/packages/enclave-contracts/contracts/interfaces/IPkVerifier.sol new file mode 100644 index 0000000000..1eebbc5ebf --- /dev/null +++ b/packages/enclave-contracts/contracts/interfaces/IPkVerifier.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +pragma solidity >=0.8.27; + +/** + * @title IPkVerifier + * @notice Interface for C5 (pk_aggregation) proof verification + * @dev Verifies that the aggregated committee public key was correctly reconstructed from party shares + */ +interface IPkVerifier { + /// @notice Verify a C5 (pk_aggregation) proof and return the aggregate commitment. + /// @param proof ABI-encoded (bytes rawProof, bytes32[] publicInputs) + /// @return pkCommitment The aggregate public key commitment (last public input). + /// @dev Reverts if the proof is invalid. + function verify( + bytes memory proof + ) external view returns (bytes32 pkCommitment); +} diff --git a/packages/enclave-contracts/contracts/registry/CiphernodeRegistryOwnable.sol b/packages/enclave-contracts/contracts/registry/CiphernodeRegistryOwnable.sol index 0903f0e7fc..bb5f8ccb85 100644 --- a/packages/enclave-contracts/contracts/registry/CiphernodeRegistryOwnable.sol +++ b/packages/enclave-contracts/contracts/registry/CiphernodeRegistryOwnable.sol @@ -7,6 +7,7 @@ pragma solidity >=0.8.27; import { ICiphernodeRegistry } from "../interfaces/ICiphernodeRegistry.sol"; import { IBondingRegistry } from "../interfaces/IBondingRegistry.sol"; +import { E3 } from "../interfaces/IE3.sol"; import { IEnclave } from "../interfaces/IEnclave.sol"; import { ISlashingManager } from "../interfaces/ISlashingManager.sol"; import { @@ -273,16 +274,16 @@ contract CiphernodeRegistryOwnable is ICiphernodeRegistry, OwnableUpgradeable { } /// @notice Publishes a committee for an E3 computation - /// @dev Only callable by owner. Verifies committee is finalized and matches provided nodes. + /// @dev Only callable by owner. Verification of C5 proof is done in Enclave.onCommitteePublished. /// @param e3Id ID of the E3 computation /// @param nodes Array of ciphernode addresses selected for the committee /// @param publicKey Aggregated public key of the committee - /// @param publicKeyHash The hash of the public key + /// @param proof C5 proof; aggregate commitment extracted as last public input function publishCommittee( uint256 e3Id, address[] calldata nodes, bytes calldata publicKey, - bytes32 publicKeyHash + bytes calldata proof ) external onlyOwner { Committee storage c = committees[e3Id]; @@ -293,16 +294,21 @@ contract CiphernodeRegistryOwnable is ICiphernodeRegistry, OwnableUpgradeable { require(c.publicKey == bytes32(0), CommitteeAlreadyPublished()); require(nodes.length == c.topNodes.length, "Node count mismatch"); - // TODO: Currently we trust the owner to publish the correct committee. - // TODO: Need a Proof that the public key is generated from the committee - // SECURITY: Without DKG correctness proofs, a malicious owner could publish a key they - // control, enabling decryption of all E3 results. This is a centralization assumption - // accepted for the current phase. DKG proof verification must be added before - // decentralizing the owner role. + (, bytes32[] memory publicInputs) = abi.decode( + proof, + (bytes, bytes32[]) + ); + require(publicInputs.length > 0, "C5: no public inputs"); + bytes32 publicKeyHash = publicInputs[publicInputs.length - 1]; + + E3 memory e3 = enclave.getE3(e3Id); + e3.pkVerifier.verify(proof); + c.publicKey = publicKeyHash; publicKeyHashes[e3Id] = publicKeyHash; - // Progress E3 to KeyPublished stage + enclave.onCommitteePublished(e3Id, publicKeyHash); + emit CommitteePublished(e3Id, nodes, publicKey); } diff --git a/packages/enclave-contracts/contracts/test/MockCiphernodeRegistry.sol b/packages/enclave-contracts/contracts/test/MockCiphernodeRegistry.sol index 8eb1b17c5b..cd8c8e4ca6 100644 --- a/packages/enclave-contracts/contracts/test/MockCiphernodeRegistry.sol +++ b/packages/enclave-contracts/contracts/test/MockCiphernodeRegistry.sol @@ -70,7 +70,7 @@ contract MockCiphernodeRegistry is ICiphernodeRegistry { uint256, address[] calldata, bytes calldata, - bytes32 + bytes calldata ) external pure {} // solhint-disable-line no-empty-blocks function getCommitteeNodes( @@ -207,7 +207,7 @@ contract MockCiphernodeRegistryEmptyKey is ICiphernodeRegistry { uint256, address[] calldata, bytes calldata, - bytes32 + bytes calldata ) external pure {} // solhint-disable-line no-empty-blocks function getCommitteeNodes( diff --git a/packages/enclave-contracts/contracts/test/MockDecryptionVerifier.sol b/packages/enclave-contracts/contracts/test/MockDecryptionVerifier.sol index 3a0d01183c..54873cb636 100644 --- a/packages/enclave-contracts/contracts/test/MockDecryptionVerifier.sol +++ b/packages/enclave-contracts/contracts/test/MockDecryptionVerifier.sol @@ -9,7 +9,6 @@ import { IDecryptionVerifier } from "../interfaces/IDecryptionVerifier.sol"; contract MockDecryptionVerifier is IDecryptionVerifier { function verify( - uint256, bytes32, bytes memory data ) external pure returns (bool success) { diff --git a/packages/enclave-contracts/contracts/test/MockPkVerifier.sol b/packages/enclave-contracts/contracts/test/MockPkVerifier.sol new file mode 100644 index 0000000000..7189c4fbce --- /dev/null +++ b/packages/enclave-contracts/contracts/test/MockPkVerifier.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +pragma solidity >=0.8.27; + +import { IPkVerifier } from "../interfaces/IPkVerifier.sol"; + +contract MockPkVerifier is IPkVerifier { + function verify( + bytes memory proof + ) external pure returns (bytes32 pkCommitment) { + (, bytes32[] memory publicInputs) = abi.decode( + proof, + (bytes, bytes32[]) + ); + require(publicInputs.length > 0, "MockPkVerifier: no public inputs"); + return publicInputs[publicInputs.length - 1]; + } +} diff --git a/packages/enclave-contracts/contracts/verifiers/bfv/BfvDecryptionVerifier.sol b/packages/enclave-contracts/contracts/verifiers/bfv/BfvDecryptionVerifier.sol new file mode 100644 index 0000000000..9168dac996 --- /dev/null +++ b/packages/enclave-contracts/contracts/verifiers/bfv/BfvDecryptionVerifier.sol @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +pragma solidity >=0.8.27; + +import { IDecryptionVerifier } from "../../interfaces/IDecryptionVerifier.sol"; +import { ICircuitVerifier } from "../../interfaces/ICircuitVerifier.sol"; + +/** + * @title BfvDecryptionVerifier + * @notice Decryption verifier for the fhe.rs:BFV encryption scheme. Verifies C7 + * (decrypted_shares_aggregation) proofs on-chain by delegating to the Honk + * ThresholdDecryptedSharesAggregationVerifier and validating that the + * plaintext extracted from public inputs matches the claimed hash. + * @dev Use this verifier when the Enclave is configured with encryptionSchemeId + * keccak256("fhe.rs:BFV"). Other encryption schemes will have their own verifiers. + */ +contract BfvDecryptionVerifier is IDecryptionVerifier { + /// @dev Message is always the last 100 public inputs (100 uint64 coeffs = 800 bytes plaintext). + /// Layout-agnostic: works for prod and insecure circuit configs. + uint256 constant MESSAGE_COEFFS_COUNT = 100; + + ICircuitVerifier public immutable circuitVerifier; + + constructor(address _circuitVerifier) { + circuitVerifier = ICircuitVerifier(_circuitVerifier); + } + + /// @inheritdoc IDecryptionVerifier + function verify( + bytes32 plaintextOutputHash, + bytes memory proof + ) external view override returns (bool success) { + (bytes memory rawProof, bytes32[] memory publicInputs) = abi.decode( + proof, + (bytes, bytes32[]) + ); + + if (publicInputs.length < MESSAGE_COEFFS_COUNT) { + return false; + } + + if (!circuitVerifier.verify(rawProof, publicInputs)) { + return false; + } + + if (!_verifyPlaintextHash(publicInputs, plaintextOutputHash)) { + return false; + } + + return true; + } + + function _verifyPlaintextHash( + bytes32[] memory publicInputs, + bytes32 plaintextOutputHash + ) internal pure returns (bool) { + uint256 offset = publicInputs.length - MESSAGE_COEFFS_COUNT; + bytes memory plaintext = new bytes(MESSAGE_COEFFS_COUNT * 8); + for (uint256 i = 0; i < MESSAGE_COEFFS_COUNT; i++) { + uint64 coeff = uint64(uint256(publicInputs[offset + i])); + for (uint256 j = 0; j < 8; j++) { + plaintext[i * 8 + j] = bytes1(uint8(coeff >> (j * 8))); + } + } + return keccak256(plaintext) == plaintextOutputHash; + } +} diff --git a/packages/enclave-contracts/contracts/verifiers/bfv/BfvPkVerifier.sol b/packages/enclave-contracts/contracts/verifiers/bfv/BfvPkVerifier.sol new file mode 100644 index 0000000000..b9b55fb245 --- /dev/null +++ b/packages/enclave-contracts/contracts/verifiers/bfv/BfvPkVerifier.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +pragma solidity >=0.8.27; + +import { IPkVerifier } from "../../interfaces/IPkVerifier.sol"; +import { ICircuitVerifier } from "../../interfaces/ICircuitVerifier.sol"; + +/** + * @title BfvPkVerifier + * @notice Verifies C5 (pk_aggregation) proofs on-chain. Delegates to the Honk + * ThresholdPkAggregationVerifier and returns the aggregate commitment from public inputs. + * @dev Use with encryptionSchemeId keccak256("fhe.rs:BFV"). Commitment count is enforced by the VK. + */ +contract BfvPkVerifier is IPkVerifier { + ICircuitVerifier public immutable circuitVerifier; + + constructor(address _circuitVerifier) { + circuitVerifier = ICircuitVerifier(_circuitVerifier); + } + + /// @inheritdoc IPkVerifier + function verify( + bytes memory proof + ) external view override returns (bytes32 pkCommitment) { + (bytes memory rawProof, bytes32[] memory publicInputs) = abi.decode( + proof, + (bytes, bytes32[]) + ); + + require(publicInputs.length > 0, "BfvPkVerifier: no public inputs"); + require( + circuitVerifier.verify(rawProof, publicInputs), + "BfvPkVerifier: invalid proof" + ); + + return publicInputs[publicInputs.length - 1]; + } +} diff --git a/packages/enclave-contracts/contracts/verifier/RecursiveAggregationFoldVerifier.sol b/packages/enclave-contracts/contracts/verifiers/bfv/honk/RecursiveAggregationFoldVerifier.sol similarity index 100% rename from packages/enclave-contracts/contracts/verifier/RecursiveAggregationFoldVerifier.sol rename to packages/enclave-contracts/contracts/verifiers/bfv/honk/RecursiveAggregationFoldVerifier.sol diff --git a/packages/enclave-contracts/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol b/packages/enclave-contracts/contracts/verifiers/bfv/honk/ThresholdDecryptedSharesAggregationVerifier.sol similarity index 96% rename from packages/enclave-contracts/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol rename to packages/enclave-contracts/contracts/verifiers/bfv/honk/ThresholdDecryptedSharesAggregationVerifier.sol index ea737d3870..754a1dcc1d 100644 --- a/packages/enclave-contracts/contracts/verifier/ThresholdDecryptedSharesAggregationVerifier.sol +++ b/packages/enclave-contracts/contracts/verifiers/bfv/honk/ThresholdDecryptedSharesAggregationVerifier.sol @@ -7,8 +7,8 @@ pragma solidity >=0.8.21; uint256 constant N = 131072; uint256 constant LOG_N = 17; -uint256 constant NUMBER_OF_PUBLIC_INPUTS = 418; -uint256 constant VK_HASH = 0x1a888222f07de9fba8c8456b3e25b3abe8f5a37ba2fb1cb1e5c24a19dcb8977f; +uint256 constant NUMBER_OF_PUBLIC_INPUTS = 518; +uint256 constant VK_HASH = 0x17c0d03849a78d01533e2a8fb8e58513263cdf932e9a24f803b1c271162e6d4b; library HonkVerificationKey { function loadVerificationKey() internal @@ -18,149 +18,149 @@ library HonkVerificationKey { Honk.VerificationKey memory vk = Honk.VerificationKey({ circuitSize: uint256(131072), logCircuitSize: uint256(17), - publicInputsSize: uint256(418), + publicInputsSize: uint256(518), ql: Honk.G1Point({ x: uint256( - 0x2c0c47eac6980c002be7c5f4633a8bd6d5d0fc9e6651e541b141fc02557ca48d + 0x1c5eec061e8ccbba65d9c019fb9ff76fab3e6b200d7e35bc9268c6ff4ca2cc22 ), y: uint256( - 0x1ca159a1bbe1a8c82eb796fba79bcdff36d3fb98c986996878fdf102d6a12ab9 + 0x18ecc8ca4b2975ebb28f70cacc7ce7ec46461d6bdd4b39a602c5a954a5b5eb03 ) }), qr: Honk.G1Point({ x: uint256( - 0x1c05ee47a359c77501f8bb557929e27f64523630d83a818cd364994cadcaf8c5 + 0x1270406e66ef465ffe418e49074b2bb901cd119b01982e3c87ebc765ddd04d57 ), y: uint256( - 0x2f8e9947f0eab4542b5e684bbc807466bc192c42d7fce467125769936b4536f5 + 0x2aca9fab8720f1f26e71ba77b00a6b1afc6f66e1530ababb5dc4bf518621ab52 ) }), qo: Honk.G1Point({ x: uint256( - 0x082a6fc7457baf2a604ae295f701031e54ede6a34d88f93f5e7aaeb2a2133121 + 0x2314586f65b2c17adbdd9715fd7bdec3d4cf1c4a05c6f5df02c5f21e7b572ae5 ), y: uint256( - 0x20ecb56a891971bc2cf9bc98cdc00fc8ec720de344999055300f979e749ec93d + 0x0b96c5a5dfad267fa9961ffe764d9ca2f6a6dcff554fbc46267d399345be8587 ) }), q4: Honk.G1Point({ x: uint256( - 0x265c425247eed132b40b111b5a7c14d7d9db56aefbf71eeec0b2cc09dd66a6b3 + 0x29c969eb2b0313da87248fccfbc94d064983017dfebd09e0929cd9cc7d0bc59f ), y: uint256( - 0x3054e4ee825da9852d2fc5172b24c4ffbdfd315f13fce4b498379c566604897e + 0x00d85d3f2d967049e5efe8f9df54a88bb5e1e921e54de538b79a6a5021cb8e50 ) }), qm: Honk.G1Point({ x: uint256( - 0x13637737c33db244a3712ce1f84f4a6400935882acd540419ff5fc19166ea618 + 0x14c5ed8dcb3960b8b73adc8ebe3ccbda98985df91b02d3e9aff095c335df97c5 ), y: uint256( - 0x15e894c35784b66acc688f1d787868569692c5761fa71b84ab52a3b2c1dd41a8 + 0x0125d4033d5311d9df6dfb622e11bebb9c9edd392f3f63711caffb7db0000569 ) }), qc: Honk.G1Point({ x: uint256( - 0x16daf8e28d24b787f5a311fc0930d1d495f74cb0eba1780ae0d36610a1ab5870 + 0x1b3c74408e31ef24ca0c0236bb5eaa5df988c9edd1a595ff047f4b33b4059bbf ), y: uint256( - 0x220aa4f565987b5544214f4aa9477fd03cbb82e8a57a2aeaa21968038c2af3a5 + 0x03dc64a8c50e8a52c54a0b6a48e45580310c5f826ddc19a596b93ef1722164e2 ) }), qLookup: Honk.G1Point({ x: uint256( - 0x163a3285e23ec78bb34d3c6122f47c770ee1f228ed2dda996542bade7a8bc2e4 + 0x1bd27fd6f58eb624997370475afcc056da598e0820038b787506755ceafbcf54 ), y: uint256( - 0x188245f34ba632acb17885f4be308c9551dbfd5095069e7077281d144e55044b + 0x0bd4a8ea155885bd7913ef1bd8e05d0545502a2b2d015c79930237fc2d4f8ca9 ) }), qArith: Honk.G1Point({ x: uint256( - 0x1913712d01550fa30bf15a28a13902738529edfc1ddc730c5bc57c00514fd3b4 + 0x28e49bbdcb72aad0dd7fcadde38f5b27ebb48cdd9454ac2984e279ae85184f60 ), y: uint256( - 0x1f125db8f6315e55f2b20ba6863482eac90d77f6c6289efb0d6a6c740be172cd + 0x04c7e1670aa4d8c4654c58725c6f57336bd7f8b084027e5550fa8c8dbe1166dc ) }), qDeltaRange: Honk.G1Point({ x: uint256( - 0x26ce5fb2dc4d867f0f6957729e6158fe7d6924445514b4c485f0b093195cff48 + 0x14eb2324d4a0246f60eaac9f9e85a9846ac9db9a15db012b691c6273191048da ), y: uint256( - 0x102d0d1aa8a400a6f7e233d512ed7205fcb3eb0ba5c0d54041f23b25f58a4c57 + 0x2046ec4792d93e08c622e3b3e0de6582e8f949956077f8a64a12bcf3c00850e4 ) }), qElliptic: Honk.G1Point({ x: uint256( - 0x1a08892e26c7c33a003d075a86a9edd8cdf253009e26fa7b2ac7f4339ca07ce3 + 0x12038609283c4e120be0ad659cc03f93254e6a5f7731215bdb24d748b6a55d93 ), y: uint256( - 0x09383a35fb9f67045a070c939b0d947454f64cd92bcf90838b2163bc0e071b58 + 0x258276855e8b3a9e47c1c1b24f9c95093f792156556bc1474dd4c4ac6104a6cc ) }), qMemory: Honk.G1Point({ x: uint256( - 0x0ff4dd20d4821b5ca6738a69881d693c04c892bade4b929a311c6612d94ffbc2 + 0x1af65d70ef0271dc377448971776618e6388f5327a5a9c586cb5f0d70aa6a3d5 ), y: uint256( - 0x19fcce46268bf02b94f4486494e361d2c126372f35e0583d55825134c2ee88cc + 0x25e67b5515fff332e1236f7497b35fdc100611406cd5bf34d5cc76f56e8480a7 ) }), qNnf: Honk.G1Point({ x: uint256( - 0x018d6d017a26c5c223931a63ee8ad0ef37f9f9f0caba099d8d8482e95b6f46e8 + 0x29c8fa2cde8ef61f6b610cdede7dca060459b504d85a6a1c85566fac26754f78 ), y: uint256( - 0x0ed38b925edf5f9b54e2b5289074d64999010264d2a4eae8fc53b8e38fc10b6b + 0x05b3eca951fa3773fec849603c3ee3e6cb8a47cc1455293834869fba6e3d2e6a ) }), qPoseidon2External: Honk.G1Point({ x: uint256( - 0x0d2f53319bc2e321ef88e47d0a3a35b0f35728ed7b7790dd357ecda4ea55a57b + 0x19946811d5b6434a0457d4da8d1ef29ed59fd1b849cfc45445bcb86a29ad7176 ), y: uint256( - 0x074497f78eec311b533ca170dc19e81c0cf5a22dce7bdf938841ff71e8cbdc8d + 0x05ada75b207892d619089b7ed64ce3b12cb1e4145d18542fdb1ae184e14ff209 ) }), qPoseidon2Internal: Honk.G1Point({ x: uint256( - 0x0cde2682ddd264dcac5b0e5626164271411bca898cd8beb4c98536534ffe3e69 + 0x195382b968c3c55502ea2dcf1a532bd6f1d6ff51f413670d1af094c4a118f0d1 ), y: uint256( - 0x20f8bfa3f9ed612f481072d20715601f08415ecbb5092b8dae96a15c583ac770 + 0x1b6a8c6abc95f815305b57b3492a769b1bde325d2543e49f5de98cae173c4246 ) }), s1: Honk.G1Point({ x: uint256( - 0x2dc45f069a801ce507391a5d369024e6c0a8f508426efa10efec079f652943fd + 0x28e19dbb402bf0e14dbcea1070d07418d93d0032a1bd68b8629ae8bcaae9020d ), y: uint256( - 0x0ca193ecd89783532ab900689868dfa9713a57dd313c222bfa2d1ee92c5a1ec9 + 0x1c0a1f364d0bc7ed731f7bff87a6a2947d1553e078ea1917f18842aacc8bd457 ) }), s2: Honk.G1Point({ x: uint256( - 0x18f0b7ba3135bb08f1e312928b750b6bacb9776a9e8a3d30d1da58873083baa6 + 0x08d54ef2216dbfda753b7f1caf7c0c0d44747116a93187d28922de6f34fd6335 ), y: uint256( - 0x1ed01d844f4aee867147b3eb571130d0e37c0686151a13106aeb40936713c093 + 0x1ef9725767480bf9db24e62eb59eaa22533926b9403abb55cf0df36a4d95cdd6 ) }), s3: Honk.G1Point({ x: uint256( - 0x2787d437215fba393c1bb6e8bc91cdf1f5c75cb93b1eb8b522819a6cfc71507c + 0x18d69d27e2deeb8ae49b8149cb492962580eb6aeb61b082846838b6829fb0fc0 ), y: uint256( - 0x027ea99429a3d006c4d01411577bf6ac562f7811b4d64e7ff060351468d63b6b + 0x2d89f3ddbc6d16c73f8a0bc468d6d25188d041b8a91a2046f4848e25342d88b0 ) }), s4: Honk.G1Point({ x: uint256( - 0x0d0f4f0fa40d68989657a0feee08deed1f08355b066c778578bfbf430cc2d22b + 0x2554076112ac0e3c1c74af827d9f847d51d83e44637a9666fadb5a9031c588f1 ), y: uint256( - 0x2d9d81c8732bf6991afa6657818d09e17fe8bfb40f59301a7b992fc8f2a9d1e9 + 0x040eb620b9342954735f62f87f03a382d2d148c41b20da31c7f376188b128056 ) }), t1: Honk.G1Point({ @@ -197,34 +197,34 @@ library HonkVerificationKey { }), id1: Honk.G1Point({ x: uint256( - 0x00a673368cf560b1069debee688c082cda349df8fbacc711f845dc7960acdeba + 0x1f9372b8700477f1e06a89403cbfa5f758ccbeb1d47938ac70d9b2cedcdcb96b ), y: uint256( - 0x0234d1b5f65d17aaf71d51ae744b28b6a024bface3333ea19ef58c8c2fc38595 + 0x17d5d443c2a251abcf6709776aa889bf60feca62d54b53e669fbfb86c7cc50cb ) }), id2: Honk.G1Point({ x: uint256( - 0x29353e7eeeae9d8cf7bc6bac6961a44a69fe7b38396fc4b07d416b226fbecc3d + 0x1d034fb2e75259ba6352755ec37d0abd7183fd3aadb106d5e4af41f7ddbe18e4 ), y: uint256( - 0x012d0615aad587261d1403ca95322f67b6e64382ac7346503bb61ee8ff465ffd + 0x0f6ffeec518c6c80263e76fa5e2894c4c0f7188f847e552ab25a6d9093055f7c ) }), id3: Honk.G1Point({ x: uint256( - 0x0dddb0066cbe44ac884fe3658ad6c24943d3329fd839b8dd47b37e0b334f3efc + 0x1a4302c045b14065f8ef323cfe5d60a467511784b0f7bdfafe626ff1099e9299 ), y: uint256( - 0x1a54ecfb49945a189bd28fa28103f9ad98d08107f8d68167d96417d95297903f + 0x2918c1621a9f9d747d6c9e815d3dbf1d7fabffbcdc2bc4eff5146e716497f504 ) }), id4: Honk.G1Point({ x: uint256( - 0x271c4df54fa64ddca42889abf3e4559c2aa59525ea5a1858fadae4b6eb6f1406 + 0x0bc100ced8a41835760df48e1c546ce8826216dc34e0f85a038e379bdc0c277c ), y: uint256( - 0x06f10a564e9397fc800ffbb6b4c887df1d1e4eeb6dd8cd4f789916e31836f197 + 0x06f6de62d43820dbed337c43b7beb8d7a9548358d74ad136e90f0b2e094d266a ) }), lagrangeFirst: Honk.G1Point({ @@ -237,10 +237,10 @@ library HonkVerificationKey { }), lagrangeLast: Honk.G1Point({ x: uint256( - 0x0602bc9d2460bf21b73d27154ff5f8919350545f3cb6dc7f40dae014613bc4c6 + 0x273f4e8fcf6e1f733b2dfbb4d864930efc08446205cfc7fbbcb9ad3b9db7d36b ), y: uint256( - 0x1df576b5b16064433355e8bad62265096027978ab6496527059305dbd8708565 + 0x20ff6ed75290c4564a623adc786d2c8abe7f259992076092ac1f68f6ee2207ce ) }) }); diff --git a/packages/enclave-contracts/contracts/verifier/ThresholdPkAggregationVerifier.sol b/packages/enclave-contracts/contracts/verifiers/bfv/honk/ThresholdPkAggregationVerifier.sol similarity index 96% rename from packages/enclave-contracts/contracts/verifier/ThresholdPkAggregationVerifier.sol rename to packages/enclave-contracts/contracts/verifiers/bfv/honk/ThresholdPkAggregationVerifier.sol index 4635c66da2..39ddf0f3bf 100644 --- a/packages/enclave-contracts/contracts/verifier/ThresholdPkAggregationVerifier.sol +++ b/packages/enclave-contracts/contracts/verifiers/bfv/honk/ThresholdPkAggregationVerifier.sol @@ -7,8 +7,8 @@ pragma solidity >=0.8.21; uint256 constant N = 262144; uint256 constant LOG_N = 18; -uint256 constant NUMBER_OF_PUBLIC_INPUTS = 22; -uint256 constant VK_HASH = 0x02306f0575881d3ddf6f0b9e8dac79af163672a144640cdf2a6ed6942ee4c6aa; +uint256 constant NUMBER_OF_PUBLIC_INPUTS = 20; +uint256 constant VK_HASH = 0x02475aeabcd71523e3bab9d9af5b42319b9c330cde7a59df61db5fdfcc341245; library HonkVerificationKey { function loadVerificationKey() internal @@ -18,149 +18,149 @@ library HonkVerificationKey { Honk.VerificationKey memory vk = Honk.VerificationKey({ circuitSize: uint256(262144), logCircuitSize: uint256(18), - publicInputsSize: uint256(22), + publicInputsSize: uint256(20), ql: Honk.G1Point({ x: uint256( - 0x131fd9af41c938c8b1b6e0086eb4f08ba4075a71288d83449d8d5eac6247099a + 0x2d869a3344618ace9c9598845825574d0ca67162e128a50d90489ff3bfadc7dc ), y: uint256( - 0x072066e82cbf467dd3c411fdaf6242d1ca23f1b37710849520bf2cd4b714e795 + 0x0f121d185fb1616ed8afe0c67d7c7decb30bc3a8afcd2a9cf6fe597d8e111eab ) }), qr: Honk.G1Point({ x: uint256( - 0x02f04c8042c961b5c40c8617efb47c118b71d76c64259724eb802e8efdada48f + 0x2386fc6f436231094ea397e43d760c033cee1fff5b54904716beb9a15cd4cd78 ), y: uint256( - 0x266704b76a579143a49d75c18ad41e4c8664833a345240b18787c26e832b2c2e + 0x0e5cee641089a8a4c1804f695a5a5da3eb432208259c892e85644d17e62a4bd9 ) }), qo: Honk.G1Point({ x: uint256( - 0x0efe5ef9accef9728a562f5e9ea4fd60b0957f6e559689936896c9d7e94823ba + 0x1cad84fdbbce60a23b11b322697bfd54a2cdd5fd9b1204f1a9152a5aff931433 ), y: uint256( - 0x280a5dfe9d34183e42c5f275391576ae8e2891ab077920340756a44d9131ca70 + 0x0d830c5055422e01e2e408ce02346b1129631177c5bb0888ad38e8d294434f6a ) }), q4: Honk.G1Point({ x: uint256( - 0x2ecfda953e756b07faf8e3954fe5012494ee0237dea45538b88e34d949a516f9 + 0x26ad16f77c5a3fad1b609a8071e176feaff03ae3300fde4b7da9f08bbd742bf0 ), y: uint256( - 0x0677e9dcbd562e682c44632da1d4b5ffecdc6c9129adb89089c020384a34d281 + 0x03b704cb7d0d70f6825a29e85bb42671ac10ef94ca4c686bc40465c4a3e611d8 ) }), qm: Honk.G1Point({ x: uint256( - 0x1c34241ed7bd1ea35de9fe54f11e3deca92247eda67d756489374539ed080828 + 0x1eb2074702f2dd6b6dfdc1eab1e84152d8b61350a9bdba7e02a4debbf0f5459e ), y: uint256( - 0x1fa29ca2f59dfccf9e71342fe789ae8e2aa41079798daf79b8e02d06a510a4b7 + 0x097e1aaefb983e25c043b0f1f29a422915e164f67fcadfbefc48f49c8c8b9be5 ) }), qc: Honk.G1Point({ x: uint256( - 0x147ff414795e16dd9d8ad7758205875dcbb2feca77004005326a37295450902e + 0x2447015b89854404d6c146c1715ff8628923eb6c1b5308b06ac7d7754704eebd ), y: uint256( - 0x2ce19f89d76fc3a0e68df64342ecb603eb7743838eaab9cad94f597ff49c3d52 + 0x2194d229e612fd76f5f216aba01fedcf434ac2d750d81ef5083003a488770aff ) }), qLookup: Honk.G1Point({ x: uint256( - 0x15729599ef3888a89db8f52912b65cdfc12205eb78f54bd9f4742df51d35d9d2 + 0x038147f7985ab2a8d179a7a764ee622afc5cac5dabeb8f74a2f89ad33f068fe4 ), y: uint256( - 0x1890a0e4fb04b07215d2034d92fc6ad93cb3670761c8c93df420b3a7d89baefa + 0x24095afc77887b20f8293c4a2602c55c7f68b34721dbdaa9d8f2cfc9f432da95 ) }), qArith: Honk.G1Point({ x: uint256( - 0x2aa5463c894b45d28a4b5ea9bed212fc3dd803ce12033d85358d4432a0655c6a + 0x2df760548fec37cbaf3935d6edb2e3d84b4d3ef0828e722219f62d0da6d4bd9f ), y: uint256( - 0x1397cec5342f4f86432b983400c0e56ceb029e78abeba47fc958779df917e1d7 + 0x11410040b7fcd060feeea7aff808cd7f6795d805ea220090627179ebe6a3811d ) }), qDeltaRange: Honk.G1Point({ x: uint256( - 0x1617218df444678e9120d0de7f480a6d0bf6098c6e77009e8cc81a5bb0e820fc + 0x291e71689919516e94ed8e1e57c730c16aeed24dd31c3eb08d912171b25478ca ), y: uint256( - 0x1f03683cfa36530952dc9494533856af2e1487bed9e76f07b4afda82f3afb129 + 0x08336ea9b282b13333a1133aab78c1ae83a5f4a8ccba3474b4a1c01c1d2df5b6 ) }), qElliptic: Honk.G1Point({ x: uint256( - 0x2229994889f103841fc6d5f7a4b209e045992468aec5a30800606e5c1918007c + 0x2da351eb928c1184460bb00f8f39d7404b058ac5ccb9ee6fee4692c00e9d29e1 ), y: uint256( - 0x016891f753e67c0d4349565eaeb8c02d828793eb835c20c532e771ec6918702f + 0x273baed4efa3c0e468d3e92102daf28065c3ac73a123c2ede57513828522068e ) }), qMemory: Honk.G1Point({ x: uint256( - 0x161d4f65fef69c1bbc2a671569c92da155e9374fabef1d260eb8776142c73bd8 + 0x1c07ca861823406afab7a6c9db5d73572c60fb1ccf3baad76c851cb30492e4c2 ), y: uint256( - 0x268e5909d8cab6c89c8064ee0fc25a7fc541a3238f93dea808d9fda942421132 + 0x121fc5260fada2e8cb2c4abbf43f52acaf2ddcc831779e55d3cf6de207c1396e ) }), qNnf: Honk.G1Point({ x: uint256( - 0x26be72a59de37228c424b5ffc3149b2489578d0f09ba433097d9c8596473da5f + 0x0f002b28bee38725fd2ffe98719d1d1be8d94770561f8f145221592e3d602396 ), y: uint256( - 0x1e1d0abff71ff2bf7e0833e32af3baff87b41a17a2cf187367c04ced7bc5ff7a + 0x20c5817fa5abd7deb48227c7f5e9e60f059e83dec9d704e2f7263f4c9453a444 ) }), qPoseidon2External: Honk.G1Point({ x: uint256( - 0x099ba64dd88f156dc06f527c2bac7b2c7c86d903e24ac09e47f833cfd6f903b8 + 0x1c16a05dc078ef69a0ce524166febc25c3295b274672d68011410f97bbc82e5d ), y: uint256( - 0x067f7914c30e0ca5dab695d46a6b6644f048d04e0938eea01c282d7ba0f043cc + 0x19ac5c0bc528b1fe4ac4ead4b32867534ad4a4d622a39349975aaaefe1eda456 ) }), qPoseidon2Internal: Honk.G1Point({ x: uint256( - 0x281fd5754fbb77ac2ef58f72fe142cf865a329c0611b38919dd1a36feb994360 + 0x29c7a46c09346cee558000b76c2d04954d55eea1f852773213d5d46ae26811e1 ), y: uint256( - 0x15f7f262eba8a9b6df7a0928493a1399b33b1f765cb31c934d1cbde777c3bdfd + 0x084b57a1a5189ace69a4f18d1a7207b510add93936450ceba38b2c569f8a5924 ) }), s1: Honk.G1Point({ x: uint256( - 0x04ff10ec802daeb081f77ae5a048da6c5695f760c4b705fa2d0ae3cd5e76a9ae + 0x2a9b0bf63b502f894a26f6888ff70393651bf3b12609385afd6d1f06aca43767 ), y: uint256( - 0x1242b0b182171f1a737e13750ff2ff10762a6fcb1d4280ce14b5b3a43295610d + 0x227a7bcd3481c9497a5ac70200c7d5ce09009c3d9977f3c581172d540f570dc4 ) }), s2: Honk.G1Point({ x: uint256( - 0x20bb81a1dc9b0c8d3cbcc2761b6f6751e08be09b384efd9b56bd5f81ca29c136 + 0x294532f305861aefc7cee7e2764556532c96f9fe6599c1198dcb93a92a3e1583 ), y: uint256( - 0x10d80cf403b8ff3de754a57331c5dd143cb0ae9e0382550efd8f20b353e274b5 + 0x04be125f7bd7d3e1f7e6dcfb0a982223fbc29e009079e94dc1617f1304327a98 ) }), s3: Honk.G1Point({ x: uint256( - 0x047c3bf9b1df8256aa780ba25fac792e3a8de5e460d9cb3e41bf8686653a2b83 + 0x2ea11d664bd771919acfcb3fa4baeaf34cbe3e7415b557cf1ffddafa9eebbfd3 ), y: uint256( - 0x1f13e4fa50f1ff9430c4f58316e6c3f1ccdcf87540d6a19add847606138d93bf + 0x177337343e6360249ac594749319d7fa768597e842fb41888b5fd8603c2c9837 ) }), s4: Honk.G1Point({ x: uint256( - 0x087819484fd402168d10636c0e1ff16095086cfebb16fa72ecd905faa77611e2 + 0x08551a059889ab05dc05edf3562931191874bd8411fd5930c19e35d0b5548e46 ), y: uint256( - 0x061b92f2194d55921ff02e4362fe5b4f59eac905edb027e656700a56806a5e89 + 0x11f157b2b08ea3b5c46897ff840aef3b624bc450d883b8e9aff3a05a4d80f2a3 ) }), t1: Honk.G1Point({ @@ -197,34 +197,34 @@ library HonkVerificationKey { }), id1: Honk.G1Point({ x: uint256( - 0x30302f92d6b476ab0407ba6570e2c869057a534fafc859946c315715fd37397d + 0x0ed0569ddf995d110f6ea9ddc0ad7ef2b89437f9c9b805343b098c3476f38ef9 ), y: uint256( - 0x2bccc49a1f124a8ea4933e1f65cd744c4ef91d17b429bc27f44ed533ff179ad9 + 0x080465d26877747828e59a8d95b32bc291ca44246475579e07510cc9514b0d3f ) }), id2: Honk.G1Point({ x: uint256( - 0x2fa778d2df483e2c7535aa5b015aba244987291fe5d0f78655332f35dbb983a2 + 0x21ad531b6a60ee3905164f5474c18e127f0b75d08d513e7f8b1766013fe48f80 ), y: uint256( - 0x0eaaa6e5c290180d0979a51caf8592f4014402d09f8fdee08e2d2b98596b1743 + 0x19a84735148cb361a618450c1d599e1b8b0cf6e49d16cc5c6f531090c4d81830 ) }), id3: Honk.G1Point({ x: uint256( - 0x035d549bad95f400a2d94f6032216957b08b7ab07ab972d8403663454ecb46e4 + 0x1d8098fd996c0a465a5b0234a599802124fd0a8a27d2994aa80869ce393e2f2c ), y: uint256( - 0x02512a1a401fd0832cea115ea34675373aa09faa59149b8ffd71fe76be90c306 + 0x1d9e7330299673bd25d6c083d3f61b27f7814dd02cf65819eb081347f142e901 ) }), id4: Honk.G1Point({ x: uint256( - 0x07377ddbcd535099c7600f69e539e1d41cdfd8705405334687c4f5b741226da8 + 0x220285f610aa7a8b71275ddbdb87b7a3cd90c9c2a95c800a08354d7ac58a3ff2 ), y: uint256( - 0x06608b7e3be5235cc0368ce844f8c822b118e54f993626431efa578a881b1e01 + 0x0d0e028920bb52b7988e842361c6111554abb86de333606a3b8f96304ee9b755 ) }), lagrangeFirst: Honk.G1Point({ @@ -237,10 +237,10 @@ library HonkVerificationKey { }), lagrangeLast: Honk.G1Point({ x: uint256( - 0x1280735205fd7e4a58ee8493d273e5afa2f13bfb7879873c4095a5cbfc646a41 + 0x02d20232eecd70dae4eb288ff41e3506879cd365cd275c169b0d14c3ee61d2cb ), y: uint256( - 0x155c3c102286dfdbfe78f876a3c74b9c36a02bb8197154c7d9fedb371f55b779 + 0x1a1e682a381fe85231a85862daa051e44ebbe556741cec369a756320af977e7d ) }) }); diff --git a/packages/enclave-contracts/deployed_contracts.json b/packages/enclave-contracts/deployed_contracts.json index 311f2b3b69..1849d9405b 100644 --- a/packages/enclave-contracts/deployed_contracts.json +++ b/packages/enclave-contracts/deployed_contracts.json @@ -127,40 +127,62 @@ "address": "0xBf0A32A7D546944561a8773628e6c0036C16354C" } }, + "undefined": { + "PoseidonT3": { + "blockNumber": 3, + "address": "0x3333333C0A88F9BE4fd23ed0536F9B6c427e3B93" + } + }, + "default": { + "MockUSDC": { + "constructorArgs": { + "initialSupply": "1000000" + }, + "blockNumber": 1, + "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3" + }, + "EnclaveToken": { + "constructorArgs": { + "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + }, + "blockNumber": 1, + "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3" + } + }, "localhost": { "PoseidonT3": { - "blockNumber": 422, + "blockNumber": 1, "address": "0x3333333C0A88F9BE4fd23ed0536F9B6c427e3B93" }, "MockUSDC": { "constructorArgs": { "initialSupply": "1000000" }, - "blockNumber": 423, - "address": "0x21dF544947ba3E8b3c32561399E88B52Dc8b2823" + "blockNumber": 2, + "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" }, "EnclaveToken": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 424, - "address": "0x2E2Ed0Cfd3AD2f1d34481277b3204d807Ca2F8c2" + "blockNumber": 3, + "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" }, "EnclaveTicketToken": { "constructorArgs": { - "baseToken": "0x21dF544947ba3E8b3c32561399E88B52Dc8b2823", + "baseToken": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", "registry": "0x0000000000000000000000000000000000000001", "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 426, - "address": "0xDC11f7E700A4c898AE5CAddB1082cFfa76512aDD" + "blockNumber": 5, + "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9" }, "SlashingManager": { "constructorArgs": { "admin": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 427, - "address": "0x51A1ceB83B83F1985a81C295d1fF28Afef186E02" + "blockNumber": 6, + "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" }, "CiphernodeRegistryOwnable": { "constructorArgs": { @@ -170,19 +192,19 @@ "proxyRecords": { "initData": "0xcd6dc687000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000000000000000000000000000000000000000000a", "initialOwner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "proxyAddress": "0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", - "proxyAdminAddress": "0x5971B98C0066517Bae7D44021f42e50B77cfe1F9", - "implementationAddress": "0x36b58F5C1969B7b6591D752ea6F5486D069010AB" + "proxyAddress": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", + "proxyAdminAddress": "0x9bd03768a7DCc129555dE410FF8E85528A4F88b5", + "implementationAddress": "0x0165878A594ca255338adfa4d48449f69242Eb8F" }, - "blockNumber": 428, - "address": "0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7" + "blockNumber": 7, + "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" }, "BondingRegistry": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "ticketToken": "0xDC11f7E700A4c898AE5CAddB1082cFfa76512aDD", - "licenseToken": "0x2E2Ed0Cfd3AD2f1d34481277b3204d807Ca2F8c2", - "registry": "0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", + "ticketToken": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", + "licenseToken": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", + "registry": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", "slashedFundsTreasury": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "ticketPrice": "10000000", "licenseRequiredBond": "100000000000000000000", @@ -190,22 +212,22 @@ "exitDelay": "604800" }, "proxyRecords": { - "initData": "0x7333fa82000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000dc11f7e700a4c898ae5caddb1082cffa76512add0000000000000000000000002e2ed0cfd3ad2f1d34481277b3204d807ca2f8c20000000000000000000000008198f5d8f8cffe8f9c413d98a0a55aeb8ab9fbb7000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb9226600000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000093a80", + "initData": "0x7333fa82000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c90000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e0000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c853000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb9226600000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000093a80", "initialOwner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "proxyAddress": "0x202CCe504e04bEd6fC0521238dDf04Bc9E8E15aB", - "proxyAdminAddress": "0x6C3d502f1a97d4470b881015b83D9Dd1062172e1", - "implementationAddress": "0x0355B7B8cb128fA5692729Ab3AAa199C1753f726" + "proxyAddress": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", + "proxyAdminAddress": "0x8aCd85898458400f7Db866d53FCFF6f0D49741FF", + "implementationAddress": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6" }, - "blockNumber": 429, - "address": "0x202CCe504e04bEd6fC0521238dDf04Bc9E8E15aB" + "blockNumber": 8, + "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" }, "Enclave": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "registry": "0x8198f5d8F8CfFE8f9C413d98a0A55aEB8ab9FbB7", - "bondingRegistry": "0x202CCe504e04bEd6fC0521238dDf04Bc9E8E15aB", + "registry": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", + "bondingRegistry": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", "e3RefundManager": "0x0000000000000000000000000000000000000001", - "feeToken": "0x21dF544947ba3E8b3c32561399E88B52Dc8b2823", + "feeToken": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", "maxDuration": "2592000", "timeoutConfig": "{\"committeeFormationWindow\":3600,\"dkgWindow\":7200,\"computeWindow\":86400,\"decryptionWindow\":3600}", "params": [ @@ -213,58 +235,58 @@ ] }, "proxyRecords": { - "initData": "0x01d12f1c000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb922660000000000000000000000008198f5d8f8cffe8f9c413d98a0a55aeb8ab9fbb7000000000000000000000000202cce504e04bed6fc0521238ddf04bc9e8e15ab000000000000000000000000000000000000000000000000000000000000000100000000000000000000000021df544947ba3e8b3c32561399e88b52dc8b28230000000000000000000000000000000000000000000000000000000000278d000000000000000000000000000000000000000000000000000000000000001c2000000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000000e100000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000ffffee0010000000000000000000000000000000000000000000000000000000ffffc400100000000000000000000000000000000000000000000000000000000000000013300000000000000000000000000000000000000000000000000000000000000", + "initData": "0x01d12f1c000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8530000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc3180000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e7f1725e7734ce288f8367e1bb143e90bb3f05120000000000000000000000000000000000000000000000000000000000278d000000000000000000000000000000000000000000000000000000000000001c2000000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000000e100000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000ffffee0010000000000000000000000000000000000000000000000000000000ffffc400100000000000000000000000000000000000000000000000000000000000000013300000000000000000000000000000000000000000000000000000000000000", "initialOwner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "proxyAddress": "0x172076E0166D1F9Cc711C77Adf8488051744980C", - "proxyAdminAddress": "0xD3F77aFa1aA264da7Ef6eB4cEfB91a486dd61bA2", - "implementationAddress": "0xf4B146FbA71F41E0592668ffbF264F1D186b2Ca8" + "proxyAddress": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", + "proxyAdminAddress": "0x8dAF17A20c9DBA35f005b6324F493785D239719d", + "implementationAddress": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788" }, - "blockNumber": 432, - "address": "0x172076E0166D1F9Cc711C77Adf8488051744980C" + "blockNumber": 11, + "address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e" }, "E3RefundManager": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "enclave": "0x172076E0166D1F9Cc711C77Adf8488051744980C", + "enclave": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", "treasury": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, "proxyRecords": { - "initData": "0xc0c53b8b000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000172076e0166d1f9cc711c77adf8488051744980c000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "initData": "0xc0c53b8b000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", "initialOwner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "proxyAddress": "0xBEc49fA140aCaA83533fB00A2BB19bDdd0290f25", - "proxyAdminAddress": "0x0CF67A3b6Edd8AC9F13BE276661371Bb699bDBb9", - "implementationAddress": "0x4EE6eCAD1c2Dae9f525404De8555724e3c35d07B" + "proxyAddress": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", + "proxyAdminAddress": "0x32467b43BFa67273FC7dDda0999Ee9A12F2AaA08", + "implementationAddress": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" }, - "blockNumber": 434, - "address": "0xBEc49fA140aCaA83533fB00A2BB19bDdd0290f25" + "blockNumber": 13, + "address": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82" }, "MockComputeProvider": { - "blockNumber": 436, - "address": "0x720472c8ce72c2A2D711333e064ABD3E6BbEAdd3" - }, - "MockDecryptionVerifier": { - "blockNumber": 437, - "address": "0xe8D2A1E88c91DCd5433208d4152Cc4F399a7e91d" + "blockNumber": 31, + "address": "0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E" }, "MockE3Program": { - "blockNumber": 438, - "address": "0x5067457698Fd6Fa1C6964e416b3f42713513B3dD" + "blockNumber": 32, + "address": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690" }, "ZKTranscriptLib": { - "blockNumber": 441, - "address": "0xCace1b78160AE76398F486c8a18044da0d66d86D" + "blockNumber": 34, + "address": "0x9E545E3C0baAB3E08CdfD552C960A1050f373042" }, "RecursiveAggregationFoldVerifier": { - "blockNumber": 442, - "address": "0xD5ac451B0c50B9476107823Af206eD814a2e2580" + "blockNumber": 35, + "address": "0xa82fF9aFd8f496c3d6ac40E2a0F282E47488CFc9" }, "ThresholdDecryptedSharesAggregationVerifier": { - "blockNumber": 443, - "address": "0xF8e31cb472bc70500f08Cd84917E5A1912Ec8397" + "blockNumber": 36, + "address": "0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8" }, "ThresholdPkAggregationVerifier": { - "blockNumber": 444, - "address": "0xc0F115A19107322cFBf1cDBC7ea011C19EbDB4F8" + "blockNumber": 37, + "address": "0x851356ae760d987E095750cCeb3bC6014560891C" + }, + "BfvDecryptionVerifier": { + "blockNumber": 38, + "address": "0xf5059a5D33d5853360D16C683c16e67980206f36" } } } \ No newline at end of file diff --git a/packages/enclave-contracts/ignition/modules/bfvDecryptionVerifier.ts b/packages/enclave-contracts/ignition/modules/bfvDecryptionVerifier.ts new file mode 100644 index 0000000000..79e73d5fd5 --- /dev/null +++ b/packages/enclave-contracts/ignition/modules/bfvDecryptionVerifier.ts @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"; + +import thresholdDecryptedSharesAggregationVerifierModule from "./thresholdDecryptedSharesAggregationVerifier"; + +export default buildModule("BfvDecryptionVerifier", (m) => { + const { thresholdDecryptedSharesAggregationVerifier } = m.useModule( + thresholdDecryptedSharesAggregationVerifierModule, + ); + + const bfvDecryptionVerifier = m.contract("BfvDecryptionVerifier", [ + thresholdDecryptedSharesAggregationVerifier, + ]); + + return { bfvDecryptionVerifier }; +}) as any; diff --git a/packages/enclave-contracts/ignition/modules/bfvPkVerifier.ts b/packages/enclave-contracts/ignition/modules/bfvPkVerifier.ts new file mode 100644 index 0000000000..726bb90431 --- /dev/null +++ b/packages/enclave-contracts/ignition/modules/bfvPkVerifier.ts @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"; + +import thresholdPkAggregationVerifierModule from "./thresholdPkAggregationVerifier"; + +export default buildModule("BfvPkVerifier", (m) => { + const { thresholdPkAggregationVerifier } = m.useModule( + thresholdPkAggregationVerifierModule, + ); + + const bfvPkVerifier = m.contract("BfvPkVerifier", [ + thresholdPkAggregationVerifier, + ]); + + return { bfvPkVerifier }; +}) as any; diff --git a/packages/enclave-contracts/ignition/modules/mockPkVerifier.ts b/packages/enclave-contracts/ignition/modules/mockPkVerifier.ts new file mode 100644 index 0000000000..dc81e51b56 --- /dev/null +++ b/packages/enclave-contracts/ignition/modules/mockPkVerifier.ts @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"; + +export default buildModule("MockPkVerifier", (m) => { + const mockPkVerifier = m.contract("MockPkVerifier"); + + return { mockPkVerifier }; +}) as any; diff --git a/packages/enclave-contracts/scripts/deployAndSave/bfvDecryptionVerifier.ts b/packages/enclave-contracts/scripts/deployAndSave/bfvDecryptionVerifier.ts new file mode 100644 index 0000000000..a338dd9336 --- /dev/null +++ b/packages/enclave-contracts/scripts/deployAndSave/bfvDecryptionVerifier.ts @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +import type { HardhatRuntimeEnvironment } from "hardhat/types/hre"; + +import { + BfvDecryptionVerifier, + BfvDecryptionVerifier__factory as BfvDecryptionVerifierFactory, +} from "../../types"; +import { readDeploymentArgs, storeDeploymentArgs } from "../utils"; + +export const deployAndSaveBfvDecryptionVerifier = async ( + hre: HardhatRuntimeEnvironment, +): Promise<{ + bfvDecryptionVerifier: BfvDecryptionVerifier; +}> => { + const { ethers } = await hre.network.connect(); + const [signer] = await ethers.getSigners(); + const chain = hre.globalOptions.network ?? "localhost"; + + const circuitVerifierArgs = readDeploymentArgs( + "ThresholdDecryptedSharesAggregationVerifier", + chain, + ); + if (!circuitVerifierArgs?.address) { + throw new Error( + "ThresholdDecryptedSharesAggregationVerifier must be deployed first. " + + "Run deployAndSaveAllVerifiers or deploy verifiers.", + ); + } + + const existing = readDeploymentArgs("BfvDecryptionVerifier", chain); + if (existing?.address) { + console.log( + ` BfvDecryptionVerifier already deployed at ${existing.address}`, + ); + const bfvDecryptionVerifier = BfvDecryptionVerifierFactory.connect( + existing.address, + signer, + ); + return { bfvDecryptionVerifier }; + } + + const bfvDecryptionVerifierFactory = await ethers.getContractFactory( + "BfvDecryptionVerifier", + ); + const bfvDecryptionVerifier = await bfvDecryptionVerifierFactory.deploy( + circuitVerifierArgs.address, + ); + + await bfvDecryptionVerifier.waitForDeployment(); + const bfvDecryptionVerifierAddress = await bfvDecryptionVerifier.getAddress(); + + const blockNumber = await ethers.provider.getBlockNumber(); + + storeDeploymentArgs( + { + blockNumber, + address: bfvDecryptionVerifierAddress, + }, + "BfvDecryptionVerifier", + chain, + ); + + console.log( + ` BfvDecryptionVerifier deployed to: ${bfvDecryptionVerifierAddress}`, + ); + + const bfvDecryptionVerifierContract = BfvDecryptionVerifierFactory.connect( + bfvDecryptionVerifierAddress, + signer, + ); + + return { bfvDecryptionVerifier: bfvDecryptionVerifierContract }; +}; diff --git a/packages/enclave-contracts/scripts/deployAndSave/bfvPkVerifier.ts b/packages/enclave-contracts/scripts/deployAndSave/bfvPkVerifier.ts new file mode 100644 index 0000000000..bef01b40bc --- /dev/null +++ b/packages/enclave-contracts/scripts/deployAndSave/bfvPkVerifier.ts @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +import type { HardhatRuntimeEnvironment } from "hardhat/types/hre"; + +import { + BfvPkVerifier, + BfvPkVerifier__factory as BfvPkVerifierFactory, +} from "../../types"; +import { readDeploymentArgs, storeDeploymentArgs } from "../utils"; + +export const deployAndSaveBfvPkVerifier = async ( + hre: HardhatRuntimeEnvironment, +): Promise<{ + bfvPkVerifier: BfvPkVerifier; +}> => { + const { ethers, networkName } = await hre.network.connect(); + const [signer] = await ethers.getSigners(); + const chain = networkName ?? "localhost"; + + const circuitVerifierArgs = readDeploymentArgs( + "ThresholdPkAggregationVerifier", + chain, + ); + if (!circuitVerifierArgs?.address) { + throw new Error( + "ThresholdPkAggregationVerifier must be deployed first. " + + "Run deployAndSaveAllVerifiers or deploy verifiers.", + ); + } + + const existing = readDeploymentArgs("BfvPkVerifier", chain); + if (existing?.address) { + console.log(` BfvPkVerifier already deployed at ${existing.address}`); + const bfvPkVerifier = BfvPkVerifierFactory.connect( + existing.address, + signer, + ); + return { bfvPkVerifier }; + } + + const bfvPkVerifierFactory = await ethers.getContractFactory("BfvPkVerifier"); + const bfvPkVerifier = await bfvPkVerifierFactory.deploy( + circuitVerifierArgs.address, + ); + + await bfvPkVerifier.waitForDeployment(); + const bfvPkVerifierAddress = await bfvPkVerifier.getAddress(); + + const blockNumber = await ethers.provider.getBlockNumber(); + + storeDeploymentArgs( + { + blockNumber, + address: bfvPkVerifierAddress, + }, + "BfvPkVerifier", + chain, + ); + + console.log(` BfvPkVerifier deployed to: ${bfvPkVerifierAddress}`); + + const bfvPkVerifierContract = BfvPkVerifierFactory.connect( + bfvPkVerifierAddress, + signer, + ); + + return { bfvPkVerifier: bfvPkVerifierContract }; +}; diff --git a/packages/enclave-contracts/scripts/deployAndSave/mockPkVerifier.ts b/packages/enclave-contracts/scripts/deployAndSave/mockPkVerifier.ts new file mode 100644 index 0000000000..4be69a4b63 --- /dev/null +++ b/packages/enclave-contracts/scripts/deployAndSave/mockPkVerifier.ts @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +import type { HardhatRuntimeEnvironment } from "hardhat/types/hre"; + +import { + MockPkVerifier, + MockPkVerifier__factory as MockPkVerifierFactory, +} from "../../types"; +import { storeDeploymentArgs } from "../utils"; + +export const deployAndSaveMockPkVerifier = async ( + hre: HardhatRuntimeEnvironment, +): Promise<{ + pkVerifier: MockPkVerifier; +}> => { + const { ethers } = await hre.network.connect(); + const [signer] = await ethers.getSigners(); + const chain = + (await signer.provider?.getNetwork())?.name ?? "localhost"; + + const pkVerifierFactory = await ethers.getContractFactory("MockPkVerifier"); + const pkVerifier = await pkVerifierFactory.deploy(); + + await pkVerifier.waitForDeployment(); + const pkVerifierAddress = await pkVerifier.getAddress(); + + const blockNumber = await ethers.provider.getBlockNumber(); + + storeDeploymentArgs( + { + blockNumber, + address: pkVerifierAddress, + }, + "MockPkVerifier", + chain, + ); + + const pkVerifierContract = MockPkVerifierFactory.connect( + pkVerifierAddress, + signer, + ); + + return { pkVerifier: pkVerifierContract }; +}; diff --git a/packages/enclave-contracts/scripts/deployAndSave/verifiers.ts b/packages/enclave-contracts/scripts/deployAndSave/verifiers.ts index acbbfcf8bf..93be634590 100644 --- a/packages/enclave-contracts/scripts/deployAndSave/verifiers.ts +++ b/packages/enclave-contracts/scripts/deployAndSave/verifiers.ts @@ -3,24 +3,73 @@ // This file is provided WITHOUT ANY WARRANTY; // without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. +import type { Provider } from "ethers"; import fs from "fs"; import type { HardhatRuntimeEnvironment } from "hardhat/types/hre"; import path from "path"; +import { fileURLToPath } from "url"; import { readDeploymentArgs, storeDeploymentArgs } from "../utils"; +const BFV_HONK_VERIFIER_DIR = "contracts/verifiers/bfv/honk"; +const NPM_HONK_SOURCE_PREFIX = + "@enclave-e3/contracts/contracts/verifiers/bfv/honk"; +// Hardhat uses npm/package@version/ for library linking when built from npm deps (pnpm workspace: @local) +const NPM_HONK_LIBRARY_LINK_PREFIX = + "npm/@enclave-e3/contracts@local/contracts/verifiers/bfv/honk"; + +/** + * Deployment bucket key from the connected provider (avoids hre.globalOptions.network). + * Uses network.name when set and not "unknown"; otherwise chainId. + */ +const chainBucketKeyFromProvider = async ( + provider: Provider, +): Promise => { + try { + const network = await provider.getNetwork(); + const name = network.name?.trim(); + if (name && name !== "unknown") { + return name; + } + return `chainId:${network.chainId.toString()}`; + } catch { + return "localhost"; + } +}; + +/** True when Hardhat artifacts use npm paths (consuming project like CRISP). */ +const isNpmArtifactContext = (): boolean => + !fs.existsSync(path.join(process.cwd(), BFV_HONK_VERIFIER_DIR)); + +/** Package root of enclave-contracts. Used when script runs from another project (e.g. CRISP). */ +const getEnclaveContractsRoot = (): string => { + const __dirname = path.dirname(fileURLToPath(import.meta.url)); + // scripts/deployAndSave -> package root (2 levels up) + // dist/scripts/deployAndSave -> package root (3 levels up) + for (const honkDir of [ + path.join(__dirname, "..", "..", BFV_HONK_VERIFIER_DIR), + path.join(__dirname, "..", "..", "..", BFV_HONK_VERIFIER_DIR), + ]) { + if (fs.existsSync(honkDir)) { + return path.join(honkDir, "..", "..", "..", ".."); // honk -> bfv -> verifiers -> contracts -> root + } + } + return path.join(__dirname, "..", ".."); +}; + /** - * Discovers all Solidity verifier contracts in contracts/verifier/ directory. - * Returns an array of contract names (without .sol extension). + * Discovers Honk/BB verifier contracts in contracts/verifiers/bfv/honk/ + * (excluding BfvDecryptionVerifier which lives in bfv/ and does not use ZKTranscriptLib). + * Uses enclave-contracts package root so discovery works when run from consuming projects (e.g. CRISP). */ export const discoverVerifierContracts = (): string[] => { - const verifierDir = path.join(process.cwd(), "contracts/verifier"); - if (!fs.existsSync(verifierDir)) { + const honkDir = path.join(getEnclaveContractsRoot(), BFV_HONK_VERIFIER_DIR); + if (!fs.existsSync(honkDir)) { return []; } return fs - .readdirSync(verifierDir) + .readdirSync(honkDir) .filter((f) => f.endsWith(".sol")) .map((f) => f.replace(".sol", "")); }; @@ -47,8 +96,12 @@ const deployZKTranscriptLib = async ( return existing.address; } - // Deploy the library — use FQN to disambiguate multiple ZKTranscriptLib artifacts - const libFQN = `contracts/verifier/${referenceContract}.sol:ZKTranscriptLib`; + // Deploy the library — use FQN to disambiguate multiple ZKTranscriptLib artifacts. + // Npm context (CRISP): @enclave-e3/contracts/contracts/verifiers/bfv/honk/X.sol + // Project context (enclave-contracts): contracts/verifiers/bfv/honk/X.sol + const libFQN = isNpmArtifactContext() + ? `${NPM_HONK_SOURCE_PREFIX}/${referenceContract}.sol:ZKTranscriptLib` + : `${BFV_HONK_VERIFIER_DIR}/${referenceContract}.sol:ZKTranscriptLib`; console.log(` Deploying ${libName}...`); const { ethers } = await hre.network.connect(); const factory = await ethers.getContractFactory(libFQN); @@ -70,7 +123,7 @@ const deployZKTranscriptLib = async ( * Skips deployment if the contract is already deployed on the target chain. * * Note: The library FQN (fully-qualified name) uses the pattern: - * "contracts/verifier/.sol:ZKTranscriptLib" + * "contracts/verifiers/bfv/honk/.sol:ZKTranscriptLib" * If you get linking errors, check the contract's compiled artifact for the exact FQN. */ export const deployAndSaveVerifier = async ( @@ -79,8 +132,7 @@ export const deployAndSaveVerifier = async ( zkTranscriptLibAddress: string, ): Promise<{ address: string }> => { const { ethers } = await hre.network.connect(); - const [signer] = await ethers.getSigners(); - const chain = (await signer.provider?.getNetwork())?.name ?? "localhost"; + const chain = await chainBucketKeyFromProvider(ethers.provider); // Check if already deployed const existing = readDeploymentArgs(contractName, chain); @@ -89,8 +141,12 @@ export const deployAndSaveVerifier = async ( return { address: existing.address }; } - // Link ZKTranscriptLib - FQN pattern: "contracts/verifier/.sol:ZKTranscriptLib" - const libraryFQN = `project/contracts/verifier/${contractName}.sol:ZKTranscriptLib`; + // Link ZKTranscriptLib — key must match Hardhat's expected format for library linking. + // Npm context: npm/@enclave-e3/contracts@local/contracts/... (pnpm workspace) + // Project context: project/contracts/... + const libraryFQN = isNpmArtifactContext() + ? `${NPM_HONK_LIBRARY_LINK_PREFIX}/${contractName}.sol:ZKTranscriptLib` + : `project/${BFV_HONK_VERIFIER_DIR}/${contractName}.sol:ZKTranscriptLib`; const libraries = { [libraryFQN]: zkTranscriptLibAddress, }; @@ -121,7 +177,7 @@ export interface VerifierDeployments { } /** - * Deploys all verifier contracts found in contracts/verifier/. + * Deploys all Honk verifier contracts found in contracts/verifiers/bfv/honk/. * Skips any that are already deployed on the target chain. * * @returns A mapping of contract names to their deployed addresses. @@ -131,13 +187,12 @@ export const deployAndSaveAllVerifiers = async ( ): Promise => { const contractNames = discoverVerifierContracts(); const { ethers } = await hre.network.connect(); - const [signer] = await ethers.getSigners(); - const chain = (await signer.provider?.getNetwork())?.name ?? "localhost"; + const chain = await chainBucketKeyFromProvider(ethers.provider); console.log(` Deploying to network: ${chain}`); if (contractNames.length === 0) { console.log( - " No verifier contracts found in contracts/verifier/. Skipping.", + " No verifier contracts found in contracts/verifiers/bfv/honk/. Skipping.", ); return {}; } diff --git a/packages/enclave-contracts/scripts/deployEnclave.ts b/packages/enclave-contracts/scripts/deployEnclave.ts index 83ee4b8026..1fd03f4a44 100644 --- a/packages/enclave-contracts/scripts/deployEnclave.ts +++ b/packages/enclave-contracts/scripts/deployEnclave.ts @@ -6,6 +6,8 @@ import hre from "hardhat"; import { autoCleanForLocalhost } from "./cleanIgnitionState"; +import { deployAndSaveBfvDecryptionVerifier } from "./deployAndSave/bfvDecryptionVerifier"; +import { deployAndSaveBfvPkVerifier } from "./deployAndSave/bfvPkVerifier"; import { deployAndSaveBondingRegistry } from "./deployAndSave/bondingRegistry"; import { deployAndSaveCiphernodeRegistryOwnable } from "./deployAndSave/ciphernodeRegistryOwnable"; import { deployAndSaveE3RefundManager } from "./deployAndSave/e3RefundManager"; @@ -28,10 +30,18 @@ const DEFAULT_TIMEOUT_CONFIG = { decryptionWindow: 3600, }; +/** Circuit names required for BFV ZK verification in this script */ +const THRESHOLD_DECRYPTED_SHARES_AGGREGATION_VERIFIER = + "ThresholdDecryptedSharesAggregationVerifier"; +const THRESHOLD_PK_AGGREGATION_VERIFIER = "ThresholdPkAggregationVerifier"; + /** * Deploys the Enclave contracts */ -export const deployEnclave = async (withMocks?: boolean) => { +export const deployEnclave = async ( + withMocks?: boolean, + withZKVerification?: boolean, +) => { const { ethers } = await hre.network.connect(); // Auto-clean state for local networks to prevent stale state issues @@ -63,6 +73,9 @@ export const deployEnclave = async (withMocks?: boolean) => { const poseidonT3 = await deployAndSavePoseidonT3({ hre }); const shouldDeployMocks = process.env.DEPLOY_MOCKS === "true" || withMocks; + const shouldHaveZKVerification = + process.env.ENABLE_ZK_VERIFICATION === "true" || withZKVerification; + let feeTokenAddress: string; if (shouldDeployMocks) { @@ -218,45 +231,118 @@ export const deployEnclave = async (withMocks?: boolean) => { // Medium and Large can be set later as needed console.log("Committee thresholds set (Micro=[1,3], Small=[2,5])"); - if (shouldDeployMocks) { - const { decryptionVerifierAddress, e3ProgramAddress } = await deployMocks(); + const encryptionSchemeId = ethers.keccak256(ethers.toUtf8Bytes("fhe.rs:BFV")); - const encryptionSchemeId = ethers.keccak256( - ethers.toUtf8Bytes("fhe.rs:BFV"), - ); + if (shouldDeployMocks) { + const { + decryptionVerifierAddress: mockDecryptionVerifierAddress, + pkVerifierAddress: mockPkVerifierAddress, + e3ProgramAddress, + } = await deployMocks(); console.log("encryptionSchemeId", encryptionSchemeId); + if (!shouldHaveZKVerification && mockDecryptionVerifierAddress) { + const deployedDecryptionVerifier = + await enclave.decryptionVerifiers(encryptionSchemeId); + if (deployedDecryptionVerifier === mockDecryptionVerifierAddress) { + console.log(`DecryptionVerifier already set in Enclave contract`); + } else { + const tx = await enclave.setDecryptionVerifier( + encryptionSchemeId, + mockDecryptionVerifierAddress, + ); + await tx.wait(); + console.log( + `Successfully set MockDecryptionVerifier in Enclave contract`, + ); + } + } + + if (!shouldHaveZKVerification && mockPkVerifierAddress) { + const deployedPkVerifier = await enclave.pkVerifiers(encryptionSchemeId); + if (deployedPkVerifier === mockPkVerifierAddress) { + console.log(`PkVerifier already set in Enclave contract`); + } else { + const tx = await enclave.setPkVerifier( + encryptionSchemeId, + mockPkVerifierAddress, + ); + await tx.wait(); + console.log(`Successfully set MockPkVerifier in Enclave contract`); + } + } + + const tx = await enclave.enableE3Program(e3ProgramAddress); + await tx.wait(); + console.log(`Successfully enabled E3 Program in Enclave contract`); + } + + let verifierDeployments: Record = {}; + if (shouldHaveZKVerification) { + console.log("Deploying circuit verifiers..."); + verifierDeployments = await deployAndSaveAllVerifiers(hre); + const requiredVerifierNames = [ + THRESHOLD_DECRYPTED_SHARES_AGGREGATION_VERIFIER, + THRESHOLD_PK_AGGREGATION_VERIFIER, + ] as const; + for (const name of requiredVerifierNames) { + const addr = verifierDeployments[name]; + if (!addr?.trim()) { + throw new Error( + `ZK verification enabled but "${name}" is missing from verifier deployments ` + + `(got ${verifierDeployments[name] === undefined ? "undefined" : JSON.stringify(addr)}). ` + + `Ensure deployAndSaveAllVerifiers discovers and deploys this circuit, or fix verifier artifacts.`, + ); + } + } + } else { + console.log("Skipping circuit verifiers (ENABLE_ZK_VERIFICATION not set)"); + } + const verifierEntries = Object.entries(verifierDeployments); + + if (shouldHaveZKVerification) { + console.log("Deploying BfvDecryptionVerifier and registering for prod..."); + const { bfvDecryptionVerifier } = + await deployAndSaveBfvDecryptionVerifier(hre); + const bfvDecryptionVerifierAddress = + await bfvDecryptionVerifier.getAddress(); const deployedDecryptionVerifier = await enclave.decryptionVerifiers(encryptionSchemeId); - if (deployedDecryptionVerifier === decryptionVerifierAddress) { - console.log(`DecryptionVerifier already set in Enclave contract`); - } else { + if (deployedDecryptionVerifier !== bfvDecryptionVerifierAddress) { const tx = await enclave.setDecryptionVerifier( encryptionSchemeId, - decryptionVerifierAddress, + bfvDecryptionVerifierAddress, ); await tx.wait(); - console.log( - `Successfully set MockDecryptionVerifier in Enclave contract`, - ); + console.log("Successfully set BfvDecryptionVerifier in Enclave contract"); } - - const tx = await enclave.enableE3Program(e3ProgramAddress); - await tx.wait(); - console.log(`Successfully enabled E3 Program in Enclave contract`); } - // Deploy circuit verifiers (if any exist in contracts/verifier/) - console.log("Deploying circuit verifiers..."); - const verifierDeployments = await deployAndSaveAllVerifiers(hre); - const verifierEntries = Object.entries(verifierDeployments); + if (shouldHaveZKVerification) { + console.log("Deploying BfvPkVerifier and registering for prod..."); + const { bfvPkVerifier } = await deployAndSaveBfvPkVerifier(hre); + const bfvPkVerifierAddress = await bfvPkVerifier.getAddress(); + const deployedPkVerifier = await enclave.pkVerifiers(encryptionSchemeId); + if (deployedPkVerifier !== bfvPkVerifierAddress) { + const tx = await enclave.setPkVerifier( + encryptionSchemeId, + bfvPkVerifierAddress, + ); + await tx.wait(); + console.log("Successfully set BfvPkVerifier in Enclave contract"); + } + } const verifierLines = verifierEntries.length > 0 ? verifierEntries.map(([name, addr]) => ` ${name}: ${addr}`).join("\n") : " (none)"; + const decryptionVerifierAddress = + await enclave.decryptionVerifiers(encryptionSchemeId); + const pkVerifierAddress = await enclave.pkVerifiers(encryptionSchemeId); + console.log(` ============================================ Deployment Complete! @@ -269,6 +355,8 @@ export const deployEnclave = async (withMocks?: boolean) => { CiphernodeRegistry: ${ciphernodeRegistryAddress} E3RefundManager: ${e3RefundManagerAddress} Enclave: ${enclaveAddress} + DecryptionVerifier (BFV): ${decryptionVerifierAddress} + PkVerifier (BFV): ${pkVerifierAddress} Circuit Verifiers: ${verifierLines} ============================================ diff --git a/packages/enclave-contracts/scripts/deployMocks.ts b/packages/enclave-contracts/scripts/deployMocks.ts index c7d6d6aae2..1d03bc5ff5 100644 --- a/packages/enclave-contracts/scripts/deployMocks.ts +++ b/packages/enclave-contracts/scripts/deployMocks.ts @@ -7,18 +7,22 @@ import hre from "hardhat"; import { deployAndSaveMockComputeProvider } from "./deployAndSave/mockComputeProvider"; import { deployAndSaveMockDecryptionVerifier } from "./deployAndSave/mockDecryptionVerifier"; +import { deployAndSaveMockPkVerifier } from "./deployAndSave/mockPkVerifier"; import { deployAndSaveMockProgram } from "./deployAndSave/mockProgram"; export interface MockDeployments { computeProviderAddress: string; + /** Mock verifier addresses; deployment args are always saved for tooling (e.g. `committee:new` default `computeProviderParams`). */ decryptionVerifierAddress: string; + pkVerifierAddress: string; e3ProgramAddress: string; } /** * Deploys the mock contracts and returns the addresses. - * @param enclaveAddress - The address of the enclave contract. - * @returns The addresses of the mock contracts. + * Mock decryption/pk verifiers are always deployed and saved so deployment artifacts exist for tasks that derive + * default `computeProviderParams` (see `tasks/enclave.ts`). When ZK verification is enabled, `deployEnclave` still + * registers the real BFV verifiers on Enclave instead of these mocks. */ export const deployMocks = async (): Promise => { console.log("Deploying Compute Provider"); @@ -26,10 +30,13 @@ export const deployMocks = async (): Promise => { const computeProviderAddress = await computeProvider.getAddress(); - console.log("Deploying Decryption Verifier"); - const { decryptionVerifier } = await deployAndSaveMockDecryptionVerifier(hre); - + console.log("Deploying Mock Decryption Verifier"); + const { decryptionVerifier } = + await deployAndSaveMockDecryptionVerifier(hre); const decryptionVerifierAddress = await decryptionVerifier.getAddress(); + console.log("Deploying Mock Pk Verifier"); + const { pkVerifier } = await deployAndSaveMockPkVerifier(hre); + const pkVerifierAddress = await pkVerifier.getAddress(); console.log("Deploying E3 Program"); const { e3Program } = await deployAndSaveMockProgram({ @@ -43,12 +50,14 @@ export const deployMocks = async (): Promise => { ---------------------------------------------------------------------- MockComputeProvider:${computeProviderAddress} MockDecryptionVerifier:${decryptionVerifierAddress} + MockPkVerifier:${pkVerifierAddress} MockE3Program:${e3ProgramAddress} `); return { computeProviderAddress, decryptionVerifierAddress, + pkVerifierAddress, e3ProgramAddress, }; }; diff --git a/packages/enclave-contracts/scripts/deployVerifiers.ts b/packages/enclave-contracts/scripts/deployVerifiers.ts index b79210533b..b92bd61cb5 100644 --- a/packages/enclave-contracts/scripts/deployVerifiers.ts +++ b/packages/enclave-contracts/scripts/deployVerifiers.ts @@ -18,7 +18,9 @@ const main = async () => { const entries = Object.entries(verifierDeployments); if (entries.length === 0) { - console.log("No verifier contracts found in contracts/verifier/."); + console.log( + "No verifier contracts found in contracts/verifiers/bfv/honk/.", + ); return; } diff --git a/packages/enclave-contracts/scripts/index.ts b/packages/enclave-contracts/scripts/index.ts index e829982f50..f32d255875 100644 --- a/packages/enclave-contracts/scripts/index.ts +++ b/packages/enclave-contracts/scripts/index.ts @@ -17,6 +17,7 @@ export * from "./deployAndSave/mockStableToken"; export * from "./deployAndSave/slashingManager"; export * from "./deployAndSave/mockComputeProvider"; export * from "./deployAndSave/mockDecryptionVerifier"; +export * from "./deployAndSave/mockPkVerifier"; export * from "./deployAndSave/mockProgram"; export * from "./deployAndSave/verifiers"; export * from "./verify"; diff --git a/packages/enclave-contracts/tasks/enclave.ts b/packages/enclave-contracts/tasks/enclave.ts index 18ecf3c34c..1d6678ed31 100644 --- a/packages/enclave-contracts/tasks/enclave.ts +++ b/packages/enclave-contracts/tasks/enclave.ts @@ -164,6 +164,7 @@ export const requestCommittee = task( e3ProgramParams, computeProviderParams, customParams, + proofAggregationEnabled: true, }; console.log("Request parameters:", requestParams); @@ -250,13 +251,14 @@ export const publishCommittee = task( type: ArgumentType.STRING, }) .addOption({ - name: "publicKeyHash", - description: "hash of the public key (bytes32)", + name: "proof", + description: + "ABI-encoded pk proof (bytes rawProof, bytes32[] publicInputs); commitment is last input", defaultValue: "", type: ArgumentType.STRING, }) .setAction(async () => ({ - default: async ({ e3Id, nodes, publicKey, publicKeyHash }, hre) => { + default: async ({ e3Id, nodes, publicKey, proof }, hre) => { const { deployAndSaveCiphernodeRegistryOwnable } = await import( "../scripts/deployAndSave/ciphernodeRegistryOwnable" ); @@ -281,15 +283,15 @@ export const publishCommittee = task( throw new Error("Invalid nodes format: no valid addresses found"); } - if (!publicKeyHash) { - throw new Error("publicKeyHash is required"); + if (!proof) { + throw new Error("proof is required"); } const tx = await ciphernodeRegistry.publishCommittee( e3Id, nodesToSend, publicKey, - publicKeyHash, + proof, ); console.log("Publishing committee... ", tx.hash); diff --git a/packages/enclave-contracts/test/BfvDecryptionVerifier.spec.ts b/packages/enclave-contracts/test/BfvDecryptionVerifier.spec.ts new file mode 100644 index 0000000000..ccd24c1584 --- /dev/null +++ b/packages/enclave-contracts/test/BfvDecryptionVerifier.spec.ts @@ -0,0 +1,193 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +import { expect } from "chai"; +import { network } from "hardhat"; + +import MockCircuitVerifierModule from "../ignition/modules/mockSlashingVerifier"; +import { + BfvDecryptionVerifier__factory as BfvDecryptionVerifierFactory, + MockCircuitVerifier__factory as MockCircuitVerifierFactory, +} from "../types"; + +const { ethers, ignition, networkHelpers } = await network.connect(); +const { loadFixture } = networkHelpers; + +/** Must match `BfvDecryptionVerifier.MESSAGE_COEFFS_COUNT` / circuit `MAX_MSG_NON_ZERO_COEFFS`. */ +const MESSAGE_COEFFS_COUNT = 100; + +function buildPublicInputsWithMessage( + messageCoeffs: bigint[], + totalInputs = 402, +): string[] { + const arr: string[] = new Array(totalInputs); + for (let i = 0; i < totalInputs; i++) { + arr[i] = "0x" + "00".repeat(32); + } + const offset = totalInputs - MESSAGE_COEFFS_COUNT; + for (let i = 0; i < messageCoeffs.length && i < MESSAGE_COEFFS_COUNT; i++) { + arr[offset + i] = "0x" + messageCoeffs[i].toString(16).padStart(64, "0"); + } + return arr; +} + +function plaintextToHash(messageCoeffs: bigint[]): string { + const buf = new Uint8Array(MESSAGE_COEFFS_COUNT * 8); + for ( + let i = 0; + i < Math.min(messageCoeffs.length, MESSAGE_COEFFS_COUNT); + i++ + ) { + const c = messageCoeffs[i]; + for (let j = 0; j < 8; j++) { + buf[i * 8 + j] = Number((c >> BigInt(j * 8)) & 0xffn); + } + } + const hex = + "0x" + + Array.from(buf) + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); + return ethers.keccak256(hex); +} + +function encodeProof(rawProof: string, publicInputs: string[]): string { + const abiCoder = ethers.AbiCoder.defaultAbiCoder(); + return abiCoder.encode(["bytes", "bytes32[]"], [rawProof, publicInputs]); +} + +describe("BfvDecryptionVerifier", function () { + const deployWithMockCircuit = async () => { + const [owner] = await ethers.getSigners(); + const { mockCircuitVerifier } = await ignition.deploy( + MockCircuitVerifierModule, + ); + const mockAddr = await mockCircuitVerifier.getAddress(); + + const bfvDecryptionVerifier = await ( + await ethers.getContractFactory("BfvDecryptionVerifier") + ).deploy(mockAddr); + + await bfvDecryptionVerifier.waitForDeployment(); + const dv = BfvDecryptionVerifierFactory.connect( + await bfvDecryptionVerifier.getAddress(), + owner, + ); + const mc = MockCircuitVerifierFactory.connect(mockAddr, owner); + return { bfvDecryptionVerifier: dv, mockCircuit: mc }; + }; + + describe("reverts", function () { + it("reverts on invalid proof encoding", async function () { + const { bfvDecryptionVerifier } = await loadFixture( + deployWithMockCircuit, + ); + const plaintextHash = ethers.keccak256("0x1234"); + const invalidProof = "0xdeadbeef"; // not abi.encode(bytes, bytes32[]) + + await expect( + bfvDecryptionVerifier.verify.staticCall(plaintextHash, invalidProof), + ).to.be.revert(ethers); + }); + + it("returns false when publicInputs.length < MESSAGE_COEFFS_COUNT", async function () { + const { bfvDecryptionVerifier, mockCircuit } = await loadFixture( + deployWithMockCircuit, + ); + await mockCircuit.setReturnValue(true); + + const messageCoeffs = [1n, 2n, 3n]; + const publicInputs = buildPublicInputsWithMessage( + messageCoeffs, + 100, + ).slice(0, MESSAGE_COEFFS_COUNT - 1); + const plaintextHash = plaintextToHash(messageCoeffs); + const proof = encodeProof("0x01", publicInputs); + + const result = await bfvDecryptionVerifier.verify.staticCall( + plaintextHash, + proof, + ); + expect(result).to.equal(false); + }); + + it("returns false when plaintext hash mismatch", async function () { + const { bfvDecryptionVerifier, mockCircuit } = await loadFixture( + deployWithMockCircuit, + ); + await mockCircuit.setReturnValue(true); + + const messageCoeffs = [1n, 2n, 3n]; + const publicInputs = buildPublicInputsWithMessage(messageCoeffs); + const wrongHash = ethers.keccak256("0x0000"); // doesn't match message + const proof = encodeProof("0x01", publicInputs); + + const result = await bfvDecryptionVerifier.verify.staticCall( + wrongHash, + proof, + ); + expect(result).to.equal(false); + }); + + it("returns false when circuit verifier returns false", async function () { + const { bfvDecryptionVerifier, mockCircuit } = await loadFixture( + deployWithMockCircuit, + ); + await mockCircuit.setReturnValue(false); + + const messageCoeffs = [1n, 2n, 3n]; + const publicInputs = buildPublicInputsWithMessage(messageCoeffs); + const plaintextHash = plaintextToHash(messageCoeffs); + const proof = encodeProof("0x01", publicInputs); + + const result = await bfvDecryptionVerifier.verify.staticCall( + plaintextHash, + proof, + ); + expect(result).to.equal(false); + }); + }); + + describe("success", function () { + it("returns true with mock ICircuitVerifier and matching plaintext hash", async function () { + const { bfvDecryptionVerifier, mockCircuit } = await loadFixture( + deployWithMockCircuit, + ); + await mockCircuit.setReturnValue(true); + + const messageCoeffs = [1n, 2n, 3n, 42n, 100n]; + const publicInputs = buildPublicInputsWithMessage(messageCoeffs); + const plaintextHash = plaintextToHash(messageCoeffs); + const proof = encodeProof("0x0102", publicInputs); + + const result = await bfvDecryptionVerifier.verify.staticCall( + plaintextHash, + proof, + ); + expect(result).to.equal(true); + }); + + it("returns true with minimal public inputs (message-only vector)", async function () { + const { bfvDecryptionVerifier, mockCircuit } = await loadFixture( + deployWithMockCircuit, + ); + await mockCircuit.setReturnValue(true); + + const messageCoeffs = [1n, 2n, 3n]; + const publicInputs = buildPublicInputsWithMessage( + messageCoeffs, + MESSAGE_COEFFS_COUNT, + ); + const plaintextHash = plaintextToHash(messageCoeffs); + const proof = encodeProof("0x01", publicInputs); + + const result = await bfvDecryptionVerifier.verify.staticCall( + plaintextHash, + proof, + ); + expect(result).to.equal(true); + }); + }); +}); diff --git a/packages/enclave-contracts/test/BfvPkVerifier.spec.ts b/packages/enclave-contracts/test/BfvPkVerifier.spec.ts new file mode 100644 index 0000000000..54a609fa03 --- /dev/null +++ b/packages/enclave-contracts/test/BfvPkVerifier.spec.ts @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +import { expect } from "chai"; +import { network } from "hardhat"; + +import MockCircuitVerifierModule from "../ignition/modules/mockSlashingVerifier"; +import { + BfvPkVerifier__factory as BfvPkVerifierFactory, + MockCircuitVerifier__factory as MockCircuitVerifierFactory, +} from "../types"; + +const { ethers, ignition, networkHelpers } = await network.connect(); +const { loadFixture } = networkHelpers; + +function encodeProof(rawProof: string, publicInputs: string[]): string { + const abiCoder = ethers.AbiCoder.defaultAbiCoder(); + return abiCoder.encode(["bytes", "bytes32[]"], [rawProof, publicInputs]); +} + +describe("BfvPkVerifier", function () { + const deployWithMockCircuit = async () => { + const [owner] = await ethers.getSigners(); + const { mockCircuitVerifier } = await ignition.deploy( + MockCircuitVerifierModule, + ); + const mockAddr = await mockCircuitVerifier.getAddress(); + + const bfvPkVerifier = await ( + await ethers.getContractFactory("BfvPkVerifier") + ).deploy(mockAddr); + + await bfvPkVerifier.waitForDeployment(); + const pk = BfvPkVerifierFactory.connect( + await bfvPkVerifier.getAddress(), + owner, + ); + const mc = MockCircuitVerifierFactory.connect(mockAddr, owner); + return { bfvPkVerifier: pk, mockCircuit: mc }; + }; + + describe("reverts", function () { + it("reverts on invalid proof encoding", async function () { + const { bfvPkVerifier } = await loadFixture(deployWithMockCircuit); + const invalidProof = "0xdeadbeef"; + + await expect(bfvPkVerifier.verify.staticCall(invalidProof)).to.be.revert( + ethers, + ); + }); + + it("reverts when publicInputs is empty", async function () { + const { bfvPkVerifier } = await loadFixture(deployWithMockCircuit); + const proof = encodeProof("0x01", []); + + await expect(bfvPkVerifier.verify.staticCall(proof)).to.be.revert(ethers); + }); + + it("reverts when circuit verifier returns false", async function () { + const { bfvPkVerifier, mockCircuit } = await loadFixture( + deployWithMockCircuit, + ); + await mockCircuit.setReturnValue(false); + + const commitment = ethers.keccak256("0x1234"); + const proof = encodeProof("0x01", [commitment]); + + await expect(bfvPkVerifier.verify.staticCall(proof)).to.be.revert(ethers); + }); + }); + + describe("success", function () { + it("returns publicInputs[last] when circuit verifier returns true", async function () { + const { bfvPkVerifier, mockCircuit } = await loadFixture( + deployWithMockCircuit, + ); + await mockCircuit.setReturnValue(true); + + const commitment = ethers.keccak256("0xabcd"); + const proof = encodeProof("0x0102", [ + "0x" + "00".repeat(32), + "0x" + "00".repeat(32), + commitment, + ]); + + const result = await bfvPkVerifier.verify.staticCall(proof); + expect(result).to.equal(commitment); + }); + + it("returns commitment with single public input", async function () { + const { bfvPkVerifier, mockCircuit } = await loadFixture( + deployWithMockCircuit, + ); + await mockCircuit.setReturnValue(true); + + const commitment = ethers.id("committee-pk"); + const proof = encodeProof("0x", [commitment]); + + const result = await bfvPkVerifier.verify.staticCall(proof); + expect(result).to.equal(commitment); + }); + }); +}); diff --git a/packages/enclave-contracts/test/E3Lifecycle/E3Integration.spec.ts b/packages/enclave-contracts/test/E3Lifecycle/E3Integration.spec.ts index ad25776a34..566251b735 100644 --- a/packages/enclave-contracts/test/E3Lifecycle/E3Integration.spec.ts +++ b/packages/enclave-contracts/test/E3Lifecycle/E3Integration.spec.ts @@ -15,6 +15,7 @@ import EnclaveTicketTokenModule from "../../ignition/modules/enclaveTicketToken" import EnclaveTokenModule from "../../ignition/modules/enclaveToken"; import MockDecryptionVerifierModule from "../../ignition/modules/mockDecryptionVerifier"; import MockE3ProgramModule from "../../ignition/modules/mockE3Program"; +import MockPkVerifierModule from "../../ignition/modules/mockPkVerifier"; import MockCircuitVerifierModule from "../../ignition/modules/mockSlashingVerifier"; import MockStableTokenModule from "../../ignition/modules/mockStableToken"; import SlashingManagerModule from "../../ignition/modules/slashingManager"; @@ -30,7 +31,7 @@ import { MockUSDC__factory as MockUSDCFactory, SlashingManager__factory as SlashingManagerFactory, } from "../../types"; -import { signAndEncodeAttestation } from "../fixtures"; +import { encodePkProof, signAndEncodeAttestation } from "../fixtures"; const { ethers, ignition, networkHelpers } = await network.connect(); const { loadFixture, time } = networkHelpers; @@ -221,6 +222,7 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { const { mockDecryptionVerifier } = await ignition.deploy( MockDecryptionVerifierModule, ); + const { mockPkVerifier } = await ignition.deploy(MockPkVerifierModule); const decryptionVerifier = MockDecryptionVerifierFactory.connect( await mockDecryptionVerifier.getAddress(), owner, @@ -249,6 +251,10 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { encryptionSchemeId, await decryptionVerifier.getAddress(), ); + await enclave.setPkVerifier( + encryptionSchemeId, + await mockPkVerifier.getAddress(), + ); // Set up committee thresholds await enclave.setCommitteeThresholds(0, [1, 3]); // Micro @@ -308,6 +314,7 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { ["address"], ["0x1234567890123456789012345678901234567890"], ), + proofAggregationEnabled: true, }; const fee = await enclave.getE3Quote(requestParams); @@ -437,9 +444,9 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { await operator3.getAddress(), ]; const publicKey = "0x1234567890abcdef1234567890abcdef"; - const publicKeyHash = ethers.keccak256(publicKey); + const pkProof = encodePkProof(ethers.keccak256(publicKey)); - await registry.publishCommittee(0, nodes, publicKey, publicKeyHash); + await registry.publishCommittee(0, nodes, publicKey, pkProof); // Verify stage transitioned to KeyPublished (after publishCommittee which calls onKeyPublished) stage = await enclave.getE3Stage(0); @@ -482,11 +489,9 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { await operator3.getAddress(), ]; const publicKey = "0x1234567890abcdef1234567890abcdef"; - const publicKeyHash = ethers.keccak256(publicKey); + const pkProof = encodePkProof(ethers.keccak256(publicKey)); - await expect( - registry.publishCommittee(0, nodes, publicKey, publicKeyHash), - ) + await expect(registry.publishCommittee(0, nodes, publicKey, pkProof)) .to.emit(enclave, "CommitteeFormed") .withArgs(0); }); @@ -747,8 +752,8 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { await operator3.getAddress(), ]; const publicKey = "0x1234567890abcdef1234567890abcdef"; - const publicKeyHash = ethers.keccak256(publicKey); - await registry.publishCommittee(0, nodes, publicKey, publicKeyHash); + const pkProof = encodePkProof(ethers.keccak256(publicKey)); + await registry.publishCommittee(0, nodes, publicKey, pkProof); // 2. Wait past compute deadline → mark as failed const e3 = await enclave.getE3(0); @@ -851,8 +856,8 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { await operator3.getAddress(), ]; const publicKey = "0x1234567890abcdef1234567890abcdef"; - const publicKeyHash = ethers.keccak256(publicKey); - await registry.publishCommittee(0, nodes, publicKey, publicKeyHash); + const pkProof = encodePkProof(ethers.keccak256(publicKey)); + await registry.publishCommittee(0, nodes, publicKey, pkProof); // 2. Fail via compute timeout const e3 = await enclave.getE3(0); @@ -1103,8 +1108,8 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { await operator3.getAddress(), ]; const publicKey = "0x1234567890abcdef1234567890abcdef"; - const publicKeyHash = ethers.keccak256(publicKey); - await registry.publishCommittee(0, nodes, publicKey, publicKeyHash); + const pkProof = encodePkProof(ethers.keccak256(publicKey)); + await registry.publishCommittee(0, nodes, publicKey, pkProof); stage = await enclave.getE3Stage(0); expect(stage).to.equal(3); // KeyPublished @@ -1182,8 +1187,8 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { await operator3.getAddress(), ]; const publicKey = "0x1234567890abcdef1234567890abcdef"; - const publicKeyHash = ethers.keccak256(publicKey); - await registry.publishCommittee(0, nodes, publicKey, publicKeyHash); + const pkProof = encodePkProof(ethers.keccak256(publicKey)); + await registry.publishCommittee(0, nodes, publicKey, pkProof); stage = await enclave.getE3Stage(0); expect(stage).to.equal(3); // KeyPublished @@ -1268,6 +1273,7 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { ["address"], ["0x1234567890123456789012345678901234567890"], ), + proofAggregationEnabled: false, }; const fee = await enclave.getE3Quote(requestParams); await usdcToken.connect(requester).approve(enclaveAddress, fee); @@ -1350,6 +1356,7 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { ["address"], ["0x1234567890123456789012345678901234567890"], ), + proofAggregationEnabled: false, }; const fee = await enclave.getE3Quote(requestParams); await usdcToken.connect(requester).approve(enclaveAddress, fee); @@ -1423,8 +1430,8 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { await operator3.getAddress(), ]; const publicKey = "0x1234567890abcdef1234567890abcdef"; - const publicKeyHash = ethers.keccak256(publicKey); - await registry.publishCommittee(0, nodes, publicKey, publicKeyHash); + const pkProof = encodePkProof(ethers.keccak256(publicKey)); + await registry.publishCommittee(0, nodes, publicKey, pkProof); expect(await enclave.getE3Stage(0)).to.equal(3); // KeyPublished @@ -1554,8 +1561,8 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { await operator3.getAddress(), ]; const publicKey = "0x1234567890abcdef1234567890abcdef"; - const publicKeyHash = ethers.keccak256(publicKey); - await registry.publishCommittee(0, nodes, publicKey, publicKeyHash); + const pkProof = encodePkProof(ethers.keccak256(publicKey)); + await registry.publishCommittee(0, nodes, publicKey, pkProof); expect(await enclave.getE3Stage(0)).to.equal(3); // KeyPublished @@ -1613,8 +1620,8 @@ describe("E3 Integration - Refund/Timeout Mechanism", function () { await operator3.getAddress(), ]; const publicKey = "0x1234567890abcdef1234567890abcdef"; - const publicKeyHash = ethers.keccak256(publicKey); - await registry.publishCommittee(0, nodes, publicKey, publicKeyHash); + const pkProof = encodePkProof(ethers.keccak256(publicKey)); + await registry.publishCommittee(0, nodes, publicKey, pkProof); // Publish outputs const e3 = await enclave.getE3(0); diff --git a/packages/enclave-contracts/test/Enclave.spec.ts b/packages/enclave-contracts/test/Enclave.spec.ts index 3f6cbca731..5c2999a5e2 100644 --- a/packages/enclave-contracts/test/Enclave.spec.ts +++ b/packages/enclave-contracts/test/Enclave.spec.ts @@ -16,6 +16,7 @@ import EnclaveTokenModule from "../ignition/modules/enclaveToken"; import mockComputeProviderModule from "../ignition/modules/mockComputeProvider"; import MockDecryptionVerifierModule from "../ignition/modules/mockDecryptionVerifier"; import MockE3ProgramModule from "../ignition/modules/mockE3Program"; +import MockPkVerifierModule from "../ignition/modules/mockPkVerifier"; import MockStableTokenModule from "../ignition/modules/mockStableToken"; import SlashingManagerModule from "../ignition/modules/slashingManager"; import { @@ -26,7 +27,7 @@ import { } from "../types"; import type { Enclave } from "../types/contracts/Enclave"; import type { MockUSDC } from "../types/contracts/test/MockStableToken.sol/MockUSDC"; -import { setupOperatorForSortition } from "./fixtures"; +import { encodePkProof, setupOperatorForSortition } from "./fixtures"; const { ethers, ignition, networkHelpers } = await network.connect(); const { loadFixture, time, mine } = networkHelpers; @@ -80,8 +81,8 @@ describe("Enclave", function () { } await time.increase(SORTITION_SUBMISSION_WINDOW + 1); await registry.finalizeCommittee(e3Id); - const publicKeyHash = ethers.id(publicKey); - await registry.publishCommittee(e3Id, nodes, publicKey, publicKeyHash); + const proof = encodePkProof(ethers.keccak256(publicKey)); + await registry.publishCommittee(e3Id, nodes, publicKey, proof); }; // Helper function to approve USDC and make request @@ -237,6 +238,7 @@ describe("Enclave", function () { ); const { mockDecryptionVerifier: decryptionVerifier } = await ignition.deploy(MockDecryptionVerifierModule); + const { mockPkVerifier } = await ignition.deploy(MockPkVerifierModule); const { mockE3Program: e3Program } = await ignition.deploy(MockE3ProgramModule); @@ -246,6 +248,10 @@ describe("Enclave", function () { encryptionSchemeId, await decryptionVerifier.getAddress(), ); + await enclave.setPkVerifier( + encryptionSchemeId, + await mockPkVerifier.getAddress(), + ); // ── Operators ───────────────────────────────────────────────────────────── await licenseToken.setTransferRestriction(false); @@ -288,6 +294,7 @@ describe("Enclave", function () { ["address"], ["0x1234567890123456789012345678901234567890"], ), + proofAggregationEnabled: true, }; // ── Return ──────────────────────────────────────────────────────────────── @@ -463,6 +470,7 @@ describe("Enclave", function () { e3ProgramParams: request.e3ProgramParams, computeProviderParams: request.computeProviderParams, customParams: request.customParams, + proofAggregationEnabled: false, }); const e3 = await enclave.getE3(0); @@ -666,6 +674,7 @@ describe("Enclave", function () { e3ProgramParams: request.e3ProgramParams, computeProviderParams: request.computeProviderParams, customParams: request.customParams, + proofAggregationEnabled: false, }), ).to.be.revertedWithCustomError(usdcToken, "ERC20InsufficientAllowance"); }); @@ -680,6 +689,7 @@ describe("Enclave", function () { e3ProgramParams: request.e3ProgramParams, computeProviderParams: request.computeProviderParams, customParams: request.customParams, + proofAggregationEnabled: false, }), ) .to.be.revertedWithCustomError(enclave, "CommitteeSizeNotConfigured") @@ -699,6 +709,7 @@ describe("Enclave", function () { e3ProgramParams: request.e3ProgramParams, computeProviderParams: request.computeProviderParams, customParams: request.customParams, + proofAggregationEnabled: false, }), ).to.be.revertedWithCustomError(enclave, "InvalidDuration"); }); @@ -713,6 +724,7 @@ describe("Enclave", function () { e3ProgramParams: request.e3ProgramParams, computeProviderParams: request.computeProviderParams, customParams: request.customParams, + proofAggregationEnabled: false, }), ) .to.be.revertedWithCustomError(enclave, "E3ProgramNotAllowed") @@ -729,6 +741,7 @@ describe("Enclave", function () { e3ProgramParams: request.e3ProgramParams, computeProviderParams: request.computeProviderParams, customParams: request.customParams, + proofAggregationEnabled: false, }), ) .to.be.revertedWithCustomError(enclave, "InvalidEncryptionScheme") @@ -744,6 +757,7 @@ describe("Enclave", function () { e3ProgramParams: request.e3ProgramParams, computeProviderParams: request.computeProviderParams, customParams: request.customParams, + proofAggregationEnabled: false, }); const e3 = await enclave.getE3(0); @@ -770,6 +784,7 @@ describe("Enclave", function () { e3ProgramParams: request.e3ProgramParams, computeProviderParams: request.computeProviderParams, customParams: request.customParams, + proofAggregationEnabled: false, }); const e3 = await enclave.getE3(0); @@ -807,6 +822,7 @@ describe("Enclave", function () { e3ProgramParams: request.e3ProgramParams, computeProviderParams: request.computeProviderParams, customParams: request.customParams, + proofAggregationEnabled: false, }); await setupAndPublishCommittee( @@ -881,6 +897,7 @@ describe("Enclave", function () { e3ProgramParams: request.e3ProgramParams, computeProviderParams: request.computeProviderParams, customParams: request.customParams, + proofAggregationEnabled: false, }); await setupAndPublishCommittee( diff --git a/packages/enclave-contracts/test/Registry/CiphernodeRegistryOwnable.spec.ts b/packages/enclave-contracts/test/Registry/CiphernodeRegistryOwnable.spec.ts index e4e56137ac..eec7d661cc 100644 --- a/packages/enclave-contracts/test/Registry/CiphernodeRegistryOwnable.spec.ts +++ b/packages/enclave-contracts/test/Registry/CiphernodeRegistryOwnable.spec.ts @@ -15,6 +15,7 @@ import EnclaveTicketTokenModule from "../../ignition/modules/enclaveTicketToken" import EnclaveTokenModule from "../../ignition/modules/enclaveToken"; import MockDecryptionVerifierModule from "../../ignition/modules/mockDecryptionVerifier"; import MockE3ProgramModule from "../../ignition/modules/mockE3Program"; +import MockPkVerifierModule from "../../ignition/modules/mockPkVerifier"; import MockStableTokenModule from "../../ignition/modules/mockStableToken"; import SlashingManagerModule from "../../ignition/modules/slashingManager"; import { @@ -22,7 +23,7 @@ import { CiphernodeRegistryOwnable__factory as CiphernodeRegistryFactory, Enclave__factory as EnclaveFactory, } from "../../types"; -import { setupOperatorForSortition } from "../fixtures"; +import { encodePkProof, setupOperatorForSortition } from "../fixtures"; const AddressOne = "0x0000000000000000000000000000000000000001"; const AddressTwo = "0x0000000000000000000000000000000000000002"; @@ -32,6 +33,7 @@ const { loadFixture } = networkHelpers; const data = "0xda7a"; const dataHash = ethers.id(data); +const c5Proof = encodePkProof(dataHash); const SORTITION_SUBMISSION_WINDOW = 3; describe("CiphernodeRegistryOwnable", function () { @@ -189,6 +191,7 @@ describe("CiphernodeRegistryOwnable", function () { const { mockDecryptionVerifier } = await ignition.deploy( MockDecryptionVerifierModule, ); + const { mockPkVerifier } = await ignition.deploy(MockPkVerifierModule); await enclave.enableE3Program(await mockE3Program.getAddress()); await enclave.setE3ProgramsParams([encodedE3ProgramParams]); @@ -196,6 +199,10 @@ describe("CiphernodeRegistryOwnable", function () { encryptionSchemeId, await mockDecryptionVerifier.getAddress(), ); + await enclave.setPkVerifier( + encryptionSchemeId, + await mockPkVerifier.getAddress(), + ); // Set up committee thresholds await enclave.setCommitteeThresholds(0, [1, 3]); // Micro @@ -268,6 +275,7 @@ describe("CiphernodeRegistryOwnable", function () { ["address"], ["0x1234567890123456789012345678901234567890"], ), + proofAggregationEnabled: true, }; const fee = await enclave.getE3Quote(requestParams); @@ -435,7 +443,7 @@ describe("CiphernodeRegistryOwnable", function () { await operator3.getAddress(), ], data, - dataHash, + c5Proof, ), ).to.be.revertedWithCustomError(registry, "OwnableUnauthorizedAccount"); }); @@ -470,7 +478,7 @@ describe("CiphernodeRegistryOwnable", function () { await operator3.getAddress(), ], data, - dataHash, + c5Proof, ); expect(await registry.committeePublicKey(0)).to.equal(dataHash); }); @@ -507,7 +515,7 @@ describe("CiphernodeRegistryOwnable", function () { await operator3.getAddress(), ], data, - dataHash, + c5Proof, ), ) .to.emit(registry, "CommitteePublished") @@ -648,7 +656,7 @@ describe("CiphernodeRegistryOwnable", function () { await operator3.getAddress(), ], data, - dataHash, + c5Proof, ); expect(await registry.committeePublicKey(e3Id)).to.equal(dataHash); }); diff --git a/packages/enclave-contracts/test/Slashing/CommitteeExpulsion.spec.ts b/packages/enclave-contracts/test/Slashing/CommitteeExpulsion.spec.ts index 375e476f09..b580c20b79 100644 --- a/packages/enclave-contracts/test/Slashing/CommitteeExpulsion.spec.ts +++ b/packages/enclave-contracts/test/Slashing/CommitteeExpulsion.spec.ts @@ -25,6 +25,7 @@ import EnclaveTicketTokenModule from "../../ignition/modules/enclaveTicketToken" import EnclaveTokenModule from "../../ignition/modules/enclaveToken"; import MockDecryptionVerifierModule from "../../ignition/modules/mockDecryptionVerifier"; import MockE3ProgramModule from "../../ignition/modules/mockE3Program"; +import MockPkVerifierModule from "../../ignition/modules/mockPkVerifier"; import MockCircuitVerifierModule from "../../ignition/modules/mockSlashingVerifier"; import MockStableTokenModule from "../../ignition/modules/mockStableToken"; import SlashingManagerModule from "../../ignition/modules/slashingManager"; @@ -39,7 +40,7 @@ import { MockUSDC__factory as MockUSDCFactory, SlashingManager__factory as SlashingManagerFactory, } from "../../types"; -import { signAndEncodeAttestation } from "../fixtures"; +import { encodePkProof, signAndEncodeAttestation } from "../fixtures"; const { ethers, ignition, networkHelpers } = await network.connect(); const { loadFixture, time } = networkHelpers; @@ -219,6 +220,7 @@ describe("Committee Expulsion & Fault Tolerance", function () { const { mockDecryptionVerifier } = await ignition.deploy( MockDecryptionVerifierModule, ); + const { mockPkVerifier } = await ignition.deploy(MockPkVerifierModule); const decryptionVerifier = MockDecryptionVerifierFactory.connect( await mockDecryptionVerifier.getAddress(), owner, @@ -234,6 +236,10 @@ describe("Committee Expulsion & Fault Tolerance", function () { encryptionSchemeId, await decryptionVerifier.getAddress(), ); + await enclave.setPkVerifier( + encryptionSchemeId, + await mockPkVerifier.getAddress(), + ); await enclave.setSlashingManager(await slashingManager.getAddress()); // Set up committee thresholds @@ -318,6 +324,7 @@ describe("Committee Expulsion & Fault Tolerance", function () { ["address"], ["0x1234567890123456789012345678901234567890"], ), + proofAggregationEnabled: true, }; const fee = await enclave.getE3Quote(requestParams); @@ -337,8 +344,8 @@ describe("Committee Expulsion & Fault Tolerance", function () { const nodes = await Promise.all(operators.map((op) => op.getAddress())); const publicKey = ethers.toUtf8Bytes("fake-public-key"); - const publicKeyHash = ethers.keccak256(publicKey); - await registry.publishCommittee(e3Id, nodes, publicKey, publicKeyHash); + const proof = encodePkProof(ethers.keccak256(publicKey)); + await registry.publishCommittee(e3Id, nodes, publicKey, proof); } // ── Return ───────────────────────────────────────────────────────────────── diff --git a/packages/enclave-contracts/test/fixtures/index.ts b/packages/enclave-contracts/test/fixtures/index.ts index 92e1403f1f..8f174d8138 100644 --- a/packages/enclave-contracts/test/fixtures/index.ts +++ b/packages/enclave-contracts/test/fixtures/index.ts @@ -5,4 +5,5 @@ // or FITNESS FOR A PARTICULAR PURPOSE. export { VOTE_TYPEHASH, signAndEncodeAttestation } from "./attestation"; +export { encodePkProof } from "./pkProof"; export { setupOperatorForSortition } from "./operators"; diff --git a/packages/enclave-contracts/test/fixtures/pkProof.ts b/packages/enclave-contracts/test/fixtures/pkProof.ts new file mode 100644 index 0000000000..b46a66e06e --- /dev/null +++ b/packages/enclave-contracts/test/fixtures/pkProof.ts @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. +import { network } from "hardhat"; + +const { ethers } = await network.connect(); + +/** + * Encodes a fake pk_aggregation proof for testing when no real proof is available. + * Format: abi.encode(bytes rawProof, bytes32[] publicInputs) with commitment as last input. + * @param commitment The aggregate public key commitment (bytes32) as last public input. + * @returns ABI-encoded proof bytes. + */ +export function encodePkProof(commitment: string): string { + const abiCoder = ethers.AbiCoder.defaultAbiCoder(); + return abiCoder.encode(["bytes", "bytes32[]"], ["0x", [commitment]]); +} diff --git a/packages/enclave-sdk/src/contracts/contract-client.ts b/packages/enclave-sdk/src/contracts/contract-client.ts index 6413498792..c8cd8365f3 100644 --- a/packages/enclave-sdk/src/contracts/contract-client.ts +++ b/packages/enclave-sdk/src/contracts/contract-client.ts @@ -155,6 +155,7 @@ export class ContractClient { e3ProgramParams: params.e3ProgramParams, computeProviderParams: params.computeProviderParams, customParams: params.customParams || '0x', + proofAggregationEnabled: params.proofAggregationEnabled ?? true, }, ], account, @@ -227,6 +228,7 @@ export class ContractClient { e3ProgramParams: requestParams.e3ProgramParams, computeProviderParams: requestParams.computeProviderParams, customParams: requestParams.customParams || '0x', + proofAggregationEnabled: requestParams.proofAggregationEnabled ?? true, }, ], }) diff --git a/packages/enclave-sdk/src/contracts/types.ts b/packages/enclave-sdk/src/contracts/types.ts index 10c5ca5601..286042f3a8 100644 --- a/packages/enclave-sdk/src/contracts/types.ts +++ b/packages/enclave-sdk/src/contracts/types.ts @@ -42,6 +42,9 @@ export interface E3RequestParams extends RequestParams { e3ProgramParams: `0x${string}` computeProviderParams: `0x${string}` customParams?: `0x${string}` + /** When true, ciphernodes generate wrapper/fold proofs for DKG proof aggregation. + * When false, proof aggregation is skipped for faster computation. Defaults to true. */ + proofAggregationEnabled?: boolean } export enum E3Stage { diff --git a/packages/enclave-sdk/src/enclave-sdk.ts b/packages/enclave-sdk/src/enclave-sdk.ts index 2c213d9556..08fc78511e 100644 --- a/packages/enclave-sdk/src/enclave-sdk.ts +++ b/packages/enclave-sdk/src/enclave-sdk.ts @@ -140,6 +140,7 @@ export class EnclaveSDK { e3ProgramParams: `0x${string}` computeProviderParams: `0x${string}` customParams?: `0x${string}` + proofAggregationEnabled?: boolean gasLimit?: bigint }): Promise { return this.contractClient.requestE3(params) diff --git a/scripts/README.md b/scripts/README.md index 18bd518205..f1c15ef6b5 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -281,7 +281,7 @@ Automates the full pipeline from Noir circuits to on-chain Solidity verifiers: - Renames contract from `HonkVerifier` to descriptive name (e.g., `ThresholdPkAggregationVerifier`, `ThresholdPkGenerationVerifier`) - Replaces Apache-2.0 license header with LGPL-3.0-only -6. **Outputs** to `packages/enclave-contracts/contracts/verifier/` +6. **Outputs** to `packages/enclave-contracts/contracts/verifiers/bfv/honk/` ### Options @@ -311,7 +311,7 @@ The `generate:verifiers` script in package.json passes `--circuits` with the on- ✓ recursive_aggregation/fold → RecursiveAggregationFoldVerifier.sol ✅ Generated 4 Solidity verifier(s) in: - packages/enclave-contracts/contracts/verifier/ + packages/enclave-contracts/contracts/verifiers/bfv/honk/ ``` ### Integration diff --git a/scripts/generate-verifiers.ts b/scripts/generate-verifiers.ts index 17beb4a71b..3c5e75b5e2 100644 --- a/scripts/generate-verifiers.ts +++ b/scripts/generate-verifiers.ts @@ -64,7 +64,7 @@ class VerifierGenerator { constructor(rootDir?: string, options: GenerateOptions = {}) { this.rootDir = rootDir ?? resolve(__dirname, '..') this.circuitsDir = join(this.rootDir, 'circuits', 'bin') - this.verifierDir = join(this.rootDir, 'packages', 'enclave-contracts', 'contracts', 'verifier') + this.verifierDir = join(this.rootDir, 'packages', 'enclave-contracts', 'contracts', 'verifiers', 'bfv', 'honk') this.options = { groups: ALL_GROUPS, clean: false, @@ -388,7 +388,7 @@ function showHelp() { Usage: generate-verifiers [options] Generates Solidity verifier contracts from compiled Noir circuits -and places them in packages/enclave-contracts/contracts/verifier/. +and places them in packages/enclave-contracts/contracts/verifiers/bfv/honk/. Options: --circuits Circuit names (comma-separated). When omitted, generates all circuits. diff --git a/templates/default/client/src/pages/steps/RequestComputation.tsx b/templates/default/client/src/pages/steps/RequestComputation.tsx index 6f93add909..f506c4601f 100644 --- a/templates/default/client/src/pages/steps/RequestComputation.tsx +++ b/templates/default/client/src/pages/steps/RequestComputation.tsx @@ -117,6 +117,7 @@ const RequestComputation: React.FC = () => { e3Program: contracts.e3Program, e3ProgramParams, computeProviderParams, + proofAggregationEnabled: false, } const fee = await sdk.sdk.getE3Quote(requestParams) diff --git a/templates/default/deployed_contracts.json b/templates/default/deployed_contracts.json index e9bd4324d0..07a0e0e735 100644 --- a/templates/default/deployed_contracts.json +++ b/templates/default/deployed_contracts.json @@ -1,21 +1,21 @@ { "localhost": { "PoseidonT3": { - "blockNumber": 6, + "blockNumber": 4, "address": "0x3333333C0A88F9BE4fd23ed0536F9B6c427e3B93" }, "MockUSDC": { "constructorArgs": { "initialSupply": "1000000" }, - "blockNumber": 7, + "blockNumber": 5, "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" }, "EnclaveToken": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 8, + "blockNumber": 6, "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" }, "EnclaveTicketToken": { @@ -24,14 +24,14 @@ "registry": "0x0000000000000000000000000000000000000001", "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 10, + "blockNumber": 8, "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9" }, "SlashingManager": { "constructorArgs": { "admin": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 11, + "blockNumber": 9, "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" }, "CiphernodeRegistryOwnable": { @@ -46,7 +46,7 @@ "proxyAdminAddress": "0x9bd03768a7DCc129555dE410FF8E85528A4F88b5", "implementationAddress": "0x0165878A594ca255338adfa4d48449f69242Eb8F" }, - "blockNumber": 12, + "blockNumber": 10, "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" }, "BondingRegistry": { @@ -68,7 +68,7 @@ "proxyAdminAddress": "0x8aCd85898458400f7Db866d53FCFF6f0D49741FF", "implementationAddress": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6" }, - "blockNumber": 13, + "blockNumber": 11, "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" }, "Enclave": { @@ -91,7 +91,7 @@ "proxyAdminAddress": "0x8dAF17A20c9DBA35f005b6324F493785D239719d", "implementationAddress": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788" }, - "blockNumber": 16, + "blockNumber": 14, "address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e" }, "E3RefundManager": { @@ -107,28 +107,56 @@ "proxyAdminAddress": "0x32467b43BFa67273FC7dDda0999Ee9A12F2AaA08", "implementationAddress": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" }, - "blockNumber": 18, + "blockNumber": 16, "address": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82" }, "MockComputeProvider": { - "blockNumber": 20, + "blockNumber": 18, "address": "0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E" }, "MockDecryptionVerifier": { - "blockNumber": 21, + "blockNumber": 19, "address": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690" }, - "MockE3Program": { - "blockNumber": 22, + "MockPkVerifier": { + "blockNumber": 20, "address": "0x84eA74d481Ee0A5332c457a4d796187F6Ba67fEB" }, + "MockE3Program": { + "blockNumber": 21, + "address": "0x9E545E3C0baAB3E08CdfD552C960A1050f373042" + }, + "ZKTranscriptLib": { + "blockNumber": 23, + "address": "0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8" + }, + "RecursiveAggregationFoldVerifier": { + "blockNumber": 24, + "address": "0x851356ae760d987E095750cCeb3bC6014560891C" + }, + "ThresholdDecryptedSharesAggregationVerifier": { + "blockNumber": 25, + "address": "0xf5059a5D33d5853360D16C683c16e67980206f36" + }, + "ThresholdPkAggregationVerifier": { + "blockNumber": 26, + "address": "0x95401dc811bb5740090279Ba06cfA8fcF6113778" + }, + "BfvDecryptionVerifier": { + "blockNumber": 27, + "address": "0x998abeb3E57409262aE5b751f60747921B33613E" + }, + "BfvPkVerifier": { + "blockNumber": 29, + "address": "0x4826533B4897376654Bb4d4AD88B7faFD0C98528" + }, "ImageID": { - "address": "0x851356ae760d987E095750cCeb3bC6014560891C", - "blockNumber": 26 + "address": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf", + "blockNumber": 32 }, "MyProgram": { - "address": "0xf5059a5D33d5853360D16C683c16e67980206f36", - "blockNumber": 28 + "address": "0x9d4454B023096f34B160D6B654540c56A1F81688", + "blockNumber": 34 } } } \ No newline at end of file diff --git a/templates/default/enclave.config.yaml b/templates/default/enclave.config.yaml index 0a7d832812..27a411623c 100644 --- a/templates/default/enclave.config.yaml +++ b/templates/default/enclave.config.yaml @@ -4,22 +4,22 @@ chains: contracts: enclave: address: "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e" - deploy_block: 16 + deploy_block: 14 ciphernode_registry: address: "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" - deploy_block: 12 + deploy_block: 10 bonding_registry: address: "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" - deploy_block: 13 + deploy_block: 11 slashing_manager: address: "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" deploy_block: 13 fee_token: address: "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" - deploy_block: 7 + deploy_block: 5 e3_program: - address: "0xf5059a5D33d5853360D16C683c16e67980206f36" - deploy_block: 28 + address: "0x9d4454B023096f34B160D6B654540c56A1F81688" + deploy_block: 34 program: dev: true nodes: diff --git a/templates/default/hardhat.config.ts b/templates/default/hardhat.config.ts index a0ac732ceb..19474e187d 100644 --- a/templates/default/hardhat.config.ts +++ b/templates/default/hardhat.config.ts @@ -110,12 +110,19 @@ const config: HardhatUserConfig = { '@enclave-e3/contracts/contracts/registry/CiphernodeRegistryOwnable.sol', '@enclave-e3/contracts/contracts/registry/BondingRegistry.sol', '@enclave-e3/contracts/contracts/slashing/SlashingManager.sol', + '@enclave-e3/contracts/contracts/E3RefundManager.sol', '@enclave-e3/contracts/contracts/token/EnclaveToken.sol', '@enclave-e3/contracts/contracts/token/EnclaveTicketToken.sol', + '@enclave-e3/contracts/contracts/verifiers/bfv/BfvDecryptionVerifier.sol', + '@enclave-e3/contracts/contracts/verifiers/bfv/BfvPkVerifier.sol', + '@enclave-e3/contracts/contracts/verifiers/bfv/honk/RecursiveAggregationFoldVerifier.sol', + '@enclave-e3/contracts/contracts/verifiers/bfv/honk/ThresholdDecryptedSharesAggregationVerifier.sol', + '@enclave-e3/contracts/contracts/verifiers/bfv/honk/ThresholdPkAggregationVerifier.sol', '@enclave-e3/contracts/contracts/test/MockCiphernodeRegistry.sol', '@enclave-e3/contracts/contracts/test/MockComputeProvider.sol', '@enclave-e3/contracts/contracts/test/MockDecryptionVerifier.sol', '@enclave-e3/contracts/contracts/test/MockE3Program.sol', + '@enclave-e3/contracts/contracts/test/MockPkVerifier.sol', '@enclave-e3/contracts/contracts/test/MockSlashingVerifier.sol', '@enclave-e3/contracts/contracts/test/MockStableToken.sol', ], @@ -125,7 +132,8 @@ const config: HardhatUserConfig = { settings: { optimizer: { enabled: true, - runs: 800, + // Low runs shrinks deployment bytecode (EIP-170); higher runs favor runtime gas. + runs: 100, }, metadata: { bytecodeHash: 'none', diff --git a/templates/default/scripts/deploy-local.ts b/templates/default/scripts/deploy-local.ts index 34b09b57dc..d5ec6e6102 100644 --- a/templates/default/scripts/deploy-local.ts +++ b/templates/default/scripts/deploy-local.ts @@ -21,7 +21,7 @@ async function main() { console.log('Account balance:', ethers.formatEther(await ethers.provider.getBalance(deployer.address))) // Execute the deployment - await deployEnclave(true) + await deployEnclave(true, true) await deployTemplate() } diff --git a/templates/default/tests/integration.spec.ts b/templates/default/tests/integration.spec.ts index 7776c95b93..baec0bb5f6 100644 --- a/templates/default/tests/integration.spec.ts +++ b/templates/default/tests/integration.spec.ts @@ -189,7 +189,7 @@ describe('Integration', () => { const { waitForEvent } = await setupEventListeners(sdk, store) const committeeSize = CommitteeSize.Micro - const duration = 1000 + const duration = 600 const inputWindow = await calculateInputWindow(publicClient, duration) const thresholdBfvParams = await sdk.getThresholdBfvParamsSet() const e3ProgramParams = encodeBfvParams(thresholdBfvParams) @@ -209,6 +209,7 @@ describe('Integration', () => { e3Program: contracts.e3Program, e3ProgramParams, computeProviderParams, + proofAggregationEnabled: false, } const quote = await sdk.getE3Quote(requestParams) console.log('E3 quote:', quote)