From 1ed0cd9a74aafee70e7e7d0f0c840f2a6edd96eb Mon Sep 17 00:00:00 2001 From: Artem Yurchenko Date: Wed, 19 Jul 2023 12:06:41 +0200 Subject: [PATCH] builtin: reduce the number of array allocations for consts in all V programs (#18889) --- vlib/math/bits/bits.v | 4 +- vlib/math/bits/bits_tables.v | 8 +- vlib/strconv/atofq.c.v | 4 +- vlib/strconv/f32_str.c.v | 2 +- vlib/strconv/f64_str.c.v | 4 +- vlib/strconv/f64_str.v | 2 +- vlib/strconv/format.v | 2 +- vlib/strconv/tables.v | 1868 +++++++++++------ .../interpreterbuilder/v_interpret_test.v | 2 + vlib/v/eval/expr.v | 45 +- vlib/v/eval/object.v | 16 + vlib/v/gen/c/cgen.v | 4 +- 12 files changed, 1317 insertions(+), 644 deletions(-) diff --git a/vlib/math/bits/bits.v b/vlib/math/bits/bits.v index 3e3db9ebe0..40a94ac4b3 100644 --- a/vlib/math/bits/bits.v +++ b/vlib/math/bits/bits.v @@ -7,11 +7,11 @@ const ( // See http://supertech.csail.mit.edu/papers/debruijn.pdf de_bruijn32 = u32(0x077CB531) de_bruijn32tab = [u8(0), 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, - 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9] + 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9]! de_bruijn64 = u64(0x03f79d71b4ca8b09) de_bruijn64tab = [u8(0), 1, 56, 2, 57, 49, 28, 3, 61, 58, 42, 50, 38, 29, 17, 4, 62, 47, 59, 36, 45, 43, 51, 22, 53, 39, 33, 30, 24, 18, 12, 5, 63, 55, 48, 27, 60, 41, 37, 16, 46, - 35, 44, 21, 52, 32, 23, 11, 54, 26, 40, 15, 34, 20, 31, 10, 25, 14, 19, 9, 13, 8, 7, 6] + 35, 44, 21, 52, 32, 23, 11, 54, 26, 40, 15, 34, 20, 31, 10, 25, 14, 19, 9, 13, 8, 7, 6]! ) const ( diff --git a/vlib/math/bits/bits_tables.v b/vlib/math/bits/bits_tables.v index c4801ac3e1..4378a40dd7 100644 --- a/vlib/math/bits/bits_tables.v +++ b/vlib/math/bits/bits_tables.v @@ -21,7 +21,7 @@ const ( 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x05, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x02, - 0x00, 0x01, 0x00] + 0x00, 0x01, 0x00]! pop_8_tab = [u8(0x00), 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x03, 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, 0x02, 0x03, 0x03, 0x04, 0x03, 0x04, 0x04, 0x05, 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, 0x02, 0x03, 0x03, @@ -39,7 +39,7 @@ const ( 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, 0x03, 0x04, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06, 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, 0x04, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x07, 0x05, 0x06, 0x06, 0x07, 0x06, - 0x07, 0x07, 0x08] + 0x07, 0x07, 0x08]! rev_8_tab = [u8(0x00), 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, 0x14, 0x94, 0x54, @@ -57,7 +57,7 @@ const ( 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, - 0xbf, 0x7f, 0xff] + 0xbf, 0x7f, 0xff]! len_8_tab = [u8(0x00), 0x01, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, @@ -75,5 +75,5 @@ const ( 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08] + 0x08, 0x08, 0x08]! ) diff --git a/vlib/strconv/atofq.c.v b/vlib/strconv/atofq.c.v index d7b2b5e6a0..e3c487cdad 100644 --- a/vlib/strconv/atofq.c.v +++ b/vlib/strconv/atofq.c.v @@ -236,7 +236,7 @@ const ( u64(0x7d987706b0213d0a), u64(0x7dce94c85c298c4c), u64(0x7e031cfd3999f7b0), u64(0x7e37e43c8800759c), u64(0x7e6ddd4baa009303), u64(0x7ea2aa4f4a405be2), u64(0x7ed754e31cd072da), u64(0x7f0d2a1be4048f90), u64(0x7f423a516e82d9ba), - u64(0x7f76c8e5ca239029), u64(0x7fac7b1f3cac7433), u64(0x7fe1ccf385ebc8a0)] + u64(0x7f76c8e5ca239029), u64(0x7fac7b1f3cac7433), u64(0x7fe1ccf385ebc8a0)]! // negative exp of 10 binary form neg_exp = [u64(0x3ff0000000000000), u64(0x3fb999999999999a), u64(0x3f847ae147ae147b), u64(0x3f50624dd2f1a9fc), u64(0x3f1a36e2eb1c432d), u64(0x3ee4f8b588e368f1), @@ -345,5 +345,5 @@ const ( u64(0x0000002f201d49fb), u64(0x00000004b6695433), u64(0x0000000078a42205), u64(0x000000000c1069cd), u64(0x000000000134d761), u64(0x00000000001ee257), u64(0x00000000000316a2), u64(0x0000000000004f10), u64(0x00000000000007e8), - u64(0x00000000000000ca), u64(0x0000000000000014), u64(0x0000000000000002)] + u64(0x00000000000000ca), u64(0x0000000000000014), u64(0x0000000000000002)]! ) diff --git a/vlib/strconv/f32_str.c.v b/vlib/strconv/f32_str.c.v index 84bed43f0f..81ba10351b 100644 --- a/vlib/strconv/f32_str.c.v +++ b/vlib/strconv/f32_str.c.v @@ -35,7 +35,7 @@ const ( u32(1000000000), u32(10000000000), u32(100000000000), - ] + ]! ) //============================================================================= diff --git a/vlib/strconv/f64_str.c.v b/vlib/strconv/f64_str.c.v index 9b3769f87c..1fe730330d 100644 --- a/vlib/strconv/f64_str.c.v +++ b/vlib/strconv/f64_str.c.v @@ -187,7 +187,7 @@ fn f64_to_decimal(mant u64, exp u64) Dec64 { k := pow5_inv_num_bits_64 + pow5_bits(int(q)) - 1 i := -e2 + int(q) + k - mul := pow5_inv_split_64[q] + mul := *(&Uint128(&pow5_inv_split_64_x[q * 2])) vr = mul_shift_64(u64(4) * m2, mul, i) vp = mul_shift_64(u64(4) * m2 + u64(2), mul, i) vm = mul_shift_64(u64(4) * m2 - u64(1) - mm_shift, mul, i) @@ -215,7 +215,7 @@ fn f64_to_decimal(mant u64, exp u64) Dec64 { i := -e2 - int(q) k := pow5_bits(i) - pow5_num_bits_64 j := int(q) - k - mul := pow5_split_64[i] + mul := *(&Uint128(&pow5_split_64_x[i * 2])) vr = mul_shift_64(u64(4) * m2, mul, j) vp = mul_shift_64(u64(4) * m2 + u64(2), mul, j) vm = mul_shift_64(u64(4) * m2 - u64(1) - mm_shift, mul, j) diff --git a/vlib/strconv/f64_str.v b/vlib/strconv/f64_str.v index 00b0a8123a..4a374a543f 100644 --- a/vlib/strconv/f64_str.v +++ b/vlib/strconv/f64_str.v @@ -23,7 +23,7 @@ const ( u64(100000000000000000), u64(1000000000000000000), u64(10000000000000000000), - ] + ]! ) //============================================================================= diff --git a/vlib/strconv/format.v b/vlib/strconv/format.v index f48ad290a1..2d78e25f8b 100644 --- a/vlib/strconv/format.v +++ b/vlib/strconv/format.v @@ -43,7 +43,7 @@ const ( 0.000000000000000005, 0.0000000000000000005, 0.00000000000000000005, - ] + ]! ) /* diff --git a/vlib/strconv/tables.v b/vlib/strconv/tables.v index 1696747abd..06dc91b90c 100644 --- a/vlib/strconv/tables.v +++ b/vlib/strconv/tables.v @@ -26,7 +26,7 @@ const ( u64(1e16), u64(1e17), // We only need to find the length of at most 17 digit numbers. - ] + ]! pow5_split_32 = [ u64(1152921504606846976), @@ -76,7 +76,7 @@ const ( u64(1292469707114105741), u64(1615587133892632177), u64(2019483917365790221), - ] + ]! pow5_inv_split_32 = [ u64(576460752303423489), @@ -110,629 +110,1247 @@ const ( u64(570899077082383953), u64(456719261665907162), u64(365375409332725730), - ] + ]! - pow5_split_64 = [ - Uint128{u64(0x0000000000000000), u64(0x0100000000000000)}, - Uint128{u64(0x0000000000000000), u64(0x0140000000000000)}, - Uint128{u64(0x0000000000000000), u64(0x0190000000000000)}, - Uint128{u64(0x0000000000000000), u64(0x01f4000000000000)}, - Uint128{u64(0x0000000000000000), u64(0x0138800000000000)}, - Uint128{u64(0x0000000000000000), u64(0x0186a00000000000)}, - Uint128{u64(0x0000000000000000), u64(0x01e8480000000000)}, - Uint128{u64(0x0000000000000000), u64(0x01312d0000000000)}, - Uint128{u64(0x0000000000000000), u64(0x017d784000000000)}, - Uint128{u64(0x0000000000000000), u64(0x01dcd65000000000)}, - Uint128{u64(0x0000000000000000), u64(0x012a05f200000000)}, - Uint128{u64(0x0000000000000000), u64(0x0174876e80000000)}, - Uint128{u64(0x0000000000000000), u64(0x01d1a94a20000000)}, - Uint128{u64(0x0000000000000000), u64(0x012309ce54000000)}, - Uint128{u64(0x0000000000000000), u64(0x016bcc41e9000000)}, - Uint128{u64(0x0000000000000000), u64(0x01c6bf5263400000)}, - Uint128{u64(0x0000000000000000), u64(0x011c37937e080000)}, - Uint128{u64(0x0000000000000000), u64(0x016345785d8a0000)}, - Uint128{u64(0x0000000000000000), u64(0x01bc16d674ec8000)}, - Uint128{u64(0x0000000000000000), u64(0x01158e460913d000)}, - Uint128{u64(0x0000000000000000), u64(0x015af1d78b58c400)}, - Uint128{u64(0x0000000000000000), u64(0x01b1ae4d6e2ef500)}, - Uint128{u64(0x0000000000000000), u64(0x010f0cf064dd5920)}, - Uint128{u64(0x0000000000000000), u64(0x0152d02c7e14af68)}, - Uint128{u64(0x0000000000000000), u64(0x01a784379d99db42)}, - Uint128{u64(0x4000000000000000), u64(0x0108b2a2c2802909)}, - Uint128{u64(0x9000000000000000), u64(0x014adf4b7320334b)}, - Uint128{u64(0x7400000000000000), u64(0x019d971e4fe8401e)}, - Uint128{u64(0x0880000000000000), u64(0x01027e72f1f12813)}, - Uint128{u64(0xcaa0000000000000), u64(0x01431e0fae6d7217)}, - Uint128{u64(0xbd48000000000000), u64(0x0193e5939a08ce9d)}, - Uint128{u64(0x2c9a000000000000), u64(0x01f8def8808b0245)}, - Uint128{u64(0x3be0400000000000), u64(0x013b8b5b5056e16b)}, - Uint128{u64(0x0ad8500000000000), u64(0x018a6e32246c99c6)}, - Uint128{u64(0x8d8e640000000000), u64(0x01ed09bead87c037)}, - Uint128{u64(0xb878fe8000000000), u64(0x013426172c74d822)}, - Uint128{u64(0x66973e2000000000), u64(0x01812f9cf7920e2b)}, - Uint128{u64(0x403d0da800000000), u64(0x01e17b84357691b6)}, - Uint128{u64(0xe826288900000000), u64(0x012ced32a16a1b11)}, - Uint128{u64(0x622fb2ab40000000), u64(0x0178287f49c4a1d6)}, - Uint128{u64(0xfabb9f5610000000), u64(0x01d6329f1c35ca4b)}, - Uint128{u64(0x7cb54395ca000000), u64(0x0125dfa371a19e6f)}, - Uint128{u64(0x5be2947b3c800000), u64(0x016f578c4e0a060b)}, - Uint128{u64(0x32db399a0ba00000), u64(0x01cb2d6f618c878e)}, - Uint128{u64(0xdfc9040047440000), u64(0x011efc659cf7d4b8)}, - Uint128{u64(0x17bb450059150000), u64(0x0166bb7f0435c9e7)}, - Uint128{u64(0xddaa16406f5a4000), u64(0x01c06a5ec5433c60)}, - Uint128{u64(0x8a8a4de845986800), u64(0x0118427b3b4a05bc)}, - Uint128{u64(0xad2ce16256fe8200), u64(0x015e531a0a1c872b)}, - Uint128{u64(0x987819baecbe2280), u64(0x01b5e7e08ca3a8f6)}, - Uint128{u64(0x1f4b1014d3f6d590), u64(0x0111b0ec57e6499a)}, - Uint128{u64(0xa71dd41a08f48af4), u64(0x01561d276ddfdc00)}, - Uint128{u64(0xd0e549208b31adb1), u64(0x01aba4714957d300)}, - Uint128{u64(0x828f4db456ff0c8e), u64(0x010b46c6cdd6e3e0)}, - Uint128{u64(0xa33321216cbecfb2), u64(0x014e1878814c9cd8)}, - Uint128{u64(0xcbffe969c7ee839e), u64(0x01a19e96a19fc40e)}, - Uint128{u64(0x3f7ff1e21cf51243), u64(0x0105031e2503da89)}, - Uint128{u64(0x8f5fee5aa43256d4), u64(0x014643e5ae44d12b)}, - Uint128{u64(0x7337e9f14d3eec89), u64(0x0197d4df19d60576)}, - Uint128{u64(0x1005e46da08ea7ab), u64(0x01fdca16e04b86d4)}, - Uint128{u64(0x8a03aec4845928cb), u64(0x013e9e4e4c2f3444)}, - Uint128{u64(0xac849a75a56f72fd), u64(0x018e45e1df3b0155)}, - Uint128{u64(0x17a5c1130ecb4fbd), u64(0x01f1d75a5709c1ab)}, - Uint128{u64(0xeec798abe93f11d6), u64(0x013726987666190a)}, - Uint128{u64(0xaa797ed6e38ed64b), u64(0x0184f03e93ff9f4d)}, - Uint128{u64(0x1517de8c9c728bde), u64(0x01e62c4e38ff8721)}, - Uint128{u64(0xad2eeb17e1c7976b), u64(0x012fdbb0e39fb474)}, - Uint128{u64(0xd87aa5ddda397d46), u64(0x017bd29d1c87a191)}, - Uint128{u64(0x4e994f5550c7dc97), u64(0x01dac74463a989f6)}, - Uint128{u64(0xf11fd195527ce9de), u64(0x0128bc8abe49f639)}, - Uint128{u64(0x6d67c5faa71c2456), u64(0x0172ebad6ddc73c8)}, - Uint128{u64(0x88c1b77950e32d6c), u64(0x01cfa698c95390ba)}, - Uint128{u64(0x957912abd28dfc63), u64(0x0121c81f7dd43a74)}, - Uint128{u64(0xbad75756c7317b7c), u64(0x016a3a275d494911)}, - Uint128{u64(0x298d2d2c78fdda5b), u64(0x01c4c8b1349b9b56)}, - Uint128{u64(0xd9f83c3bcb9ea879), u64(0x011afd6ec0e14115)}, - Uint128{u64(0x50764b4abe865297), u64(0x0161bcca7119915b)}, - Uint128{u64(0x2493de1d6e27e73d), u64(0x01ba2bfd0d5ff5b2)}, - Uint128{u64(0x56dc6ad264d8f086), u64(0x01145b7e285bf98f)}, - Uint128{u64(0x2c938586fe0f2ca8), u64(0x0159725db272f7f3)}, - Uint128{u64(0xf7b866e8bd92f7d2), u64(0x01afcef51f0fb5ef)}, - Uint128{u64(0xfad34051767bdae3), u64(0x010de1593369d1b5)}, - Uint128{u64(0x79881065d41ad19c), u64(0x015159af80444623)}, - Uint128{u64(0x57ea147f49218603), u64(0x01a5b01b605557ac)}, - Uint128{u64(0xb6f24ccf8db4f3c1), u64(0x01078e111c3556cb)}, - Uint128{u64(0xa4aee003712230b2), u64(0x014971956342ac7e)}, - Uint128{u64(0x4dda98044d6abcdf), u64(0x019bcdfabc13579e)}, - Uint128{u64(0xf0a89f02b062b60b), u64(0x010160bcb58c16c2)}, - Uint128{u64(0xacd2c6c35c7b638e), u64(0x0141b8ebe2ef1c73)}, - Uint128{u64(0x98077874339a3c71), u64(0x01922726dbaae390)}, - Uint128{u64(0xbe0956914080cb8e), u64(0x01f6b0f092959c74)}, - Uint128{u64(0xf6c5d61ac8507f38), u64(0x013a2e965b9d81c8)}, - Uint128{u64(0x34774ba17a649f07), u64(0x0188ba3bf284e23b)}, - Uint128{u64(0x01951e89d8fdc6c8), u64(0x01eae8caef261aca)}, - Uint128{u64(0x40fd3316279e9c3d), u64(0x0132d17ed577d0be)}, - Uint128{u64(0xd13c7fdbb186434c), u64(0x017f85de8ad5c4ed)}, - Uint128{u64(0x458b9fd29de7d420), u64(0x01df67562d8b3629)}, - Uint128{u64(0xcb7743e3a2b0e494), u64(0x012ba095dc7701d9)}, - Uint128{u64(0x3e5514dc8b5d1db9), u64(0x017688bb5394c250)}, - Uint128{u64(0x4dea5a13ae346527), u64(0x01d42aea2879f2e4)}, - Uint128{u64(0xb0b2784c4ce0bf38), u64(0x01249ad2594c37ce)}, - Uint128{u64(0x5cdf165f6018ef06), u64(0x016dc186ef9f45c2)}, - Uint128{u64(0xf416dbf7381f2ac8), u64(0x01c931e8ab871732)}, - Uint128{u64(0xd88e497a83137abd), u64(0x011dbf316b346e7f)}, - Uint128{u64(0xceb1dbd923d8596c), u64(0x01652efdc6018a1f)}, - Uint128{u64(0xc25e52cf6cce6fc7), u64(0x01be7abd3781eca7)}, - Uint128{u64(0xd97af3c1a40105dc), u64(0x01170cb642b133e8)}, - Uint128{u64(0x0fd9b0b20d014754), u64(0x015ccfe3d35d80e3)}, - Uint128{u64(0xd3d01cde90419929), u64(0x01b403dcc834e11b)}, - Uint128{u64(0x6462120b1a28ffb9), u64(0x01108269fd210cb1)}, - Uint128{u64(0xbd7a968de0b33fa8), u64(0x0154a3047c694fdd)}, - Uint128{u64(0x2cd93c3158e00f92), u64(0x01a9cbc59b83a3d5)}, - Uint128{u64(0x3c07c59ed78c09bb), u64(0x010a1f5b81324665)}, - Uint128{u64(0x8b09b7068d6f0c2a), u64(0x014ca732617ed7fe)}, - Uint128{u64(0x2dcc24c830cacf34), u64(0x019fd0fef9de8dfe)}, - Uint128{u64(0xdc9f96fd1e7ec180), u64(0x0103e29f5c2b18be)}, - Uint128{u64(0x93c77cbc661e71e1), u64(0x0144db473335deee)}, - Uint128{u64(0x38b95beb7fa60e59), u64(0x01961219000356aa)}, - Uint128{u64(0xc6e7b2e65f8f91ef), u64(0x01fb969f40042c54)}, - Uint128{u64(0xfc50cfcffbb9bb35), u64(0x013d3e2388029bb4)}, - Uint128{u64(0x3b6503c3faa82a03), u64(0x018c8dac6a0342a2)}, - Uint128{u64(0xca3e44b4f9523484), u64(0x01efb1178484134a)}, - Uint128{u64(0xbe66eaf11bd360d2), u64(0x0135ceaeb2d28c0e)}, - Uint128{u64(0x6e00a5ad62c83907), u64(0x0183425a5f872f12)}, - Uint128{u64(0x0980cf18bb7a4749), u64(0x01e412f0f768fad7)}, - Uint128{u64(0x65f0816f752c6c8d), u64(0x012e8bd69aa19cc6)}, - Uint128{u64(0xff6ca1cb527787b1), u64(0x017a2ecc414a03f7)}, - Uint128{u64(0xff47ca3e2715699d), u64(0x01d8ba7f519c84f5)}, - Uint128{u64(0xbf8cde66d86d6202), u64(0x0127748f9301d319)}, - Uint128{u64(0x2f7016008e88ba83), u64(0x017151b377c247e0)}, - Uint128{u64(0x3b4c1b80b22ae923), u64(0x01cda62055b2d9d8)}, - Uint128{u64(0x250f91306f5ad1b6), u64(0x012087d4358fc827)}, - Uint128{u64(0xee53757c8b318623), u64(0x0168a9c942f3ba30)}, - Uint128{u64(0x29e852dbadfde7ac), u64(0x01c2d43b93b0a8bd)}, - Uint128{u64(0x3a3133c94cbeb0cc), u64(0x0119c4a53c4e6976)}, - Uint128{u64(0xc8bd80bb9fee5cff), u64(0x016035ce8b6203d3)}, - Uint128{u64(0xbaece0ea87e9f43e), u64(0x01b843422e3a84c8)}, - Uint128{u64(0x74d40c9294f238a7), u64(0x01132a095ce492fd)}, - Uint128{u64(0xd2090fb73a2ec6d1), u64(0x0157f48bb41db7bc)}, - Uint128{u64(0x068b53a508ba7885), u64(0x01adf1aea12525ac)}, - Uint128{u64(0x8417144725748b53), u64(0x010cb70d24b7378b)}, - Uint128{u64(0x651cd958eed1ae28), u64(0x014fe4d06de5056e)}, - Uint128{u64(0xfe640faf2a8619b2), u64(0x01a3de04895e46c9)}, - Uint128{u64(0x3efe89cd7a93d00f), u64(0x01066ac2d5daec3e)}, - Uint128{u64(0xcebe2c40d938c413), u64(0x014805738b51a74d)}, - Uint128{u64(0x426db7510f86f518), u64(0x019a06d06e261121)}, - Uint128{u64(0xc9849292a9b4592f), u64(0x0100444244d7cab4)}, - Uint128{u64(0xfbe5b73754216f7a), u64(0x01405552d60dbd61)}, - Uint128{u64(0x7adf25052929cb59), u64(0x01906aa78b912cba)}, - Uint128{u64(0x1996ee4673743e2f), u64(0x01f485516e7577e9)}, - Uint128{u64(0xaffe54ec0828a6dd), u64(0x0138d352e5096af1)}, - Uint128{u64(0x1bfdea270a32d095), u64(0x018708279e4bc5ae)}, - Uint128{u64(0xa2fd64b0ccbf84ba), u64(0x01e8ca3185deb719)}, - Uint128{u64(0x05de5eee7ff7b2f4), u64(0x01317e5ef3ab3270)}, - Uint128{u64(0x0755f6aa1ff59fb1), u64(0x017dddf6b095ff0c)}, - Uint128{u64(0x092b7454a7f3079e), u64(0x01dd55745cbb7ecf)}, - Uint128{u64(0x65bb28b4e8f7e4c3), u64(0x012a5568b9f52f41)}, - Uint128{u64(0xbf29f2e22335ddf3), u64(0x0174eac2e8727b11)}, - Uint128{u64(0x2ef46f9aac035570), u64(0x01d22573a28f19d6)}, - Uint128{u64(0xdd58c5c0ab821566), u64(0x0123576845997025)}, - Uint128{u64(0x54aef730d6629ac0), u64(0x016c2d4256ffcc2f)}, - Uint128{u64(0x29dab4fd0bfb4170), u64(0x01c73892ecbfbf3b)}, - Uint128{u64(0xfa28b11e277d08e6), u64(0x011c835bd3f7d784)}, - Uint128{u64(0x38b2dd65b15c4b1f), u64(0x0163a432c8f5cd66)}, - Uint128{u64(0xc6df94bf1db35de7), u64(0x01bc8d3f7b3340bf)}, - Uint128{u64(0xdc4bbcf772901ab0), u64(0x0115d847ad000877)}, - Uint128{u64(0xd35eac354f34215c), u64(0x015b4e5998400a95)}, - Uint128{u64(0x48365742a30129b4), u64(0x01b221effe500d3b)}, - Uint128{u64(0x0d21f689a5e0ba10), u64(0x010f5535fef20845)}, - Uint128{u64(0x506a742c0f58e894), u64(0x01532a837eae8a56)}, - Uint128{u64(0xe4851137132f22b9), u64(0x01a7f5245e5a2ceb)}, - Uint128{u64(0x6ed32ac26bfd75b4), u64(0x0108f936baf85c13)}, - Uint128{u64(0x4a87f57306fcd321), u64(0x014b378469b67318)}, - Uint128{u64(0x5d29f2cfc8bc07e9), u64(0x019e056584240fde)}, - Uint128{u64(0xfa3a37c1dd7584f1), u64(0x0102c35f729689ea)}, - Uint128{u64(0xb8c8c5b254d2e62e), u64(0x014374374f3c2c65)}, - Uint128{u64(0x26faf71eea079fb9), u64(0x01945145230b377f)}, - Uint128{u64(0xf0b9b4e6a48987a8), u64(0x01f965966bce055e)}, - Uint128{u64(0x5674111026d5f4c9), u64(0x013bdf7e0360c35b)}, - Uint128{u64(0x2c111554308b71fb), u64(0x018ad75d8438f432)}, - Uint128{u64(0xb7155aa93cae4e7a), u64(0x01ed8d34e547313e)}, - Uint128{u64(0x326d58a9c5ecf10c), u64(0x013478410f4c7ec7)}, - Uint128{u64(0xff08aed437682d4f), u64(0x01819651531f9e78)}, - Uint128{u64(0x3ecada89454238a3), u64(0x01e1fbe5a7e78617)}, - Uint128{u64(0x873ec895cb496366), u64(0x012d3d6f88f0b3ce)}, - Uint128{u64(0x290e7abb3e1bbc3f), u64(0x01788ccb6b2ce0c2)}, - Uint128{u64(0xb352196a0da2ab4f), u64(0x01d6affe45f818f2)}, - Uint128{u64(0xb0134fe24885ab11), u64(0x01262dfeebbb0f97)}, - Uint128{u64(0x9c1823dadaa715d6), u64(0x016fb97ea6a9d37d)}, - Uint128{u64(0x031e2cd19150db4b), u64(0x01cba7de5054485d)}, - Uint128{u64(0x21f2dc02fad2890f), u64(0x011f48eaf234ad3a)}, - Uint128{u64(0xaa6f9303b9872b53), u64(0x01671b25aec1d888)}, - Uint128{u64(0xd50b77c4a7e8f628), u64(0x01c0e1ef1a724eaa)}, - Uint128{u64(0xc5272adae8f199d9), u64(0x01188d357087712a)}, - Uint128{u64(0x7670f591a32e004f), u64(0x015eb082cca94d75)}, - Uint128{u64(0xd40d32f60bf98063), u64(0x01b65ca37fd3a0d2)}, - Uint128{u64(0xc4883fd9c77bf03e), u64(0x0111f9e62fe44483)}, - Uint128{u64(0xb5aa4fd0395aec4d), u64(0x0156785fbbdd55a4)}, - Uint128{u64(0xe314e3c447b1a760), u64(0x01ac1677aad4ab0d)}, - Uint128{u64(0xaded0e5aaccf089c), u64(0x010b8e0acac4eae8)}, - Uint128{u64(0xd96851f15802cac3), u64(0x014e718d7d7625a2)}, - Uint128{u64(0x8fc2666dae037d74), u64(0x01a20df0dcd3af0b)}, - Uint128{u64(0x39d980048cc22e68), u64(0x010548b68a044d67)}, - Uint128{u64(0x084fe005aff2ba03), u64(0x01469ae42c8560c1)}, - Uint128{u64(0x4a63d8071bef6883), u64(0x0198419d37a6b8f1)}, - Uint128{u64(0x9cfcce08e2eb42a4), u64(0x01fe52048590672d)}, - Uint128{u64(0x821e00c58dd309a7), u64(0x013ef342d37a407c)}, - Uint128{u64(0xa2a580f6f147cc10), u64(0x018eb0138858d09b)}, - Uint128{u64(0x8b4ee134ad99bf15), u64(0x01f25c186a6f04c2)}, - Uint128{u64(0x97114cc0ec80176d), u64(0x0137798f428562f9)}, - Uint128{u64(0xfcd59ff127a01d48), u64(0x018557f31326bbb7)}, - Uint128{u64(0xfc0b07ed7188249a), u64(0x01e6adefd7f06aa5)}, - Uint128{u64(0xbd86e4f466f516e0), u64(0x01302cb5e6f642a7)}, - Uint128{u64(0xace89e3180b25c98), u64(0x017c37e360b3d351)}, - Uint128{u64(0x1822c5bde0def3be), u64(0x01db45dc38e0c826)}, - Uint128{u64(0xcf15bb96ac8b5857), u64(0x01290ba9a38c7d17)}, - Uint128{u64(0xc2db2a7c57ae2e6d), u64(0x01734e940c6f9c5d)}, - Uint128{u64(0x3391f51b6d99ba08), u64(0x01d022390f8b8375)}, - Uint128{u64(0x403b393124801445), u64(0x01221563a9b73229)}, - Uint128{u64(0x904a077d6da01956), u64(0x016a9abc9424feb3)}, - Uint128{u64(0x745c895cc9081fac), u64(0x01c5416bb92e3e60)}, - Uint128{u64(0x48b9d5d9fda513cb), u64(0x011b48e353bce6fc)}, - Uint128{u64(0x5ae84b507d0e58be), u64(0x01621b1c28ac20bb)}, - Uint128{u64(0x31a25e249c51eeee), u64(0x01baa1e332d728ea)}, - Uint128{u64(0x5f057ad6e1b33554), u64(0x0114a52dffc67992)}, - Uint128{u64(0xf6c6d98c9a2002aa), u64(0x0159ce797fb817f6)}, - Uint128{u64(0xb4788fefc0a80354), u64(0x01b04217dfa61df4)}, - Uint128{u64(0xf0cb59f5d8690214), u64(0x010e294eebc7d2b8)}, - Uint128{u64(0x2cfe30734e83429a), u64(0x0151b3a2a6b9c767)}, - Uint128{u64(0xf83dbc9022241340), u64(0x01a6208b50683940)}, - Uint128{u64(0x9b2695da15568c08), u64(0x0107d457124123c8)}, - Uint128{u64(0xc1f03b509aac2f0a), u64(0x0149c96cd6d16cba)}, - Uint128{u64(0x726c4a24c1573acd), u64(0x019c3bc80c85c7e9)}, - Uint128{u64(0xe783ae56f8d684c0), u64(0x0101a55d07d39cf1)}, - Uint128{u64(0x616499ecb70c25f0), u64(0x01420eb449c8842e)}, - Uint128{u64(0xf9bdc067e4cf2f6c), u64(0x019292615c3aa539)}, - Uint128{u64(0x782d3081de02fb47), u64(0x01f736f9b3494e88)}, - Uint128{u64(0x4b1c3e512ac1dd0c), u64(0x013a825c100dd115)}, - Uint128{u64(0x9de34de57572544f), u64(0x018922f31411455a)}, - Uint128{u64(0x455c215ed2cee963), u64(0x01eb6bafd91596b1)}, - Uint128{u64(0xcb5994db43c151de), u64(0x0133234de7ad7e2e)}, - Uint128{u64(0x7e2ffa1214b1a655), u64(0x017fec216198ddba)}, - Uint128{u64(0x1dbbf89699de0feb), u64(0x01dfe729b9ff1529)}, - Uint128{u64(0xb2957b5e202ac9f3), u64(0x012bf07a143f6d39)}, - Uint128{u64(0x1f3ada35a8357c6f), u64(0x0176ec98994f4888)}, - Uint128{u64(0x270990c31242db8b), u64(0x01d4a7bebfa31aaa)}, - Uint128{u64(0x5865fa79eb69c937), u64(0x0124e8d737c5f0aa)}, - Uint128{u64(0xee7f791866443b85), u64(0x016e230d05b76cd4)}, - Uint128{u64(0x2a1f575e7fd54a66), u64(0x01c9abd04725480a)}, - Uint128{u64(0x5a53969b0fe54e80), u64(0x011e0b622c774d06)}, - Uint128{u64(0xf0e87c41d3dea220), u64(0x01658e3ab7952047)}, - Uint128{u64(0xed229b5248d64aa8), u64(0x01bef1c9657a6859)}, - Uint128{u64(0x3435a1136d85eea9), u64(0x0117571ddf6c8138)}, - Uint128{u64(0x4143095848e76a53), u64(0x015d2ce55747a186)}, - Uint128{u64(0xd193cbae5b2144e8), u64(0x01b4781ead1989e7)}, - Uint128{u64(0xe2fc5f4cf8f4cb11), u64(0x0110cb132c2ff630)}, - Uint128{u64(0x1bbb77203731fdd5), u64(0x0154fdd7f73bf3bd)}, - Uint128{u64(0x62aa54e844fe7d4a), u64(0x01aa3d4df50af0ac)}, - Uint128{u64(0xbdaa75112b1f0e4e), u64(0x010a6650b926d66b)}, - Uint128{u64(0xad15125575e6d1e2), u64(0x014cffe4e7708c06)}, - Uint128{u64(0x585a56ead360865b), u64(0x01a03fde214caf08)}, - Uint128{u64(0x37387652c41c53f8), u64(0x010427ead4cfed65)}, - Uint128{u64(0x850693e7752368f7), u64(0x014531e58a03e8be)}, - Uint128{u64(0x264838e1526c4334), u64(0x01967e5eec84e2ee)}, - Uint128{u64(0xafda4719a7075402), u64(0x01fc1df6a7a61ba9)}, - Uint128{u64(0x0de86c7008649481), u64(0x013d92ba28c7d14a)}, - Uint128{u64(0x9162878c0a7db9a1), u64(0x018cf768b2f9c59c)}, - Uint128{u64(0xb5bb296f0d1d280a), u64(0x01f03542dfb83703)}, - Uint128{u64(0x5194f9e568323906), u64(0x01362149cbd32262)}, - Uint128{u64(0xe5fa385ec23ec747), u64(0x0183a99c3ec7eafa)}, - Uint128{u64(0x9f78c67672ce7919), u64(0x01e494034e79e5b9)}, - Uint128{u64(0x03ab7c0a07c10bb0), u64(0x012edc82110c2f94)}, - Uint128{u64(0x04965b0c89b14e9c), u64(0x017a93a2954f3b79)}, - Uint128{u64(0x45bbf1cfac1da243), u64(0x01d9388b3aa30a57)}, - Uint128{u64(0x8b957721cb92856a), u64(0x0127c35704a5e676)}, - Uint128{u64(0x2e7ad4ea3e7726c4), u64(0x0171b42cc5cf6014)}, - Uint128{u64(0x3a198a24ce14f075), u64(0x01ce2137f7433819)}, - Uint128{u64(0xc44ff65700cd1649), u64(0x0120d4c2fa8a030f)}, - Uint128{u64(0xb563f3ecc1005bdb), u64(0x016909f3b92c83d3)}, - Uint128{u64(0xa2bcf0e7f14072d2), u64(0x01c34c70a777a4c8)}, - Uint128{u64(0x65b61690f6c847c3), u64(0x011a0fc668aac6fd)}, - Uint128{u64(0xbf239c35347a59b4), u64(0x016093b802d578bc)}, - Uint128{u64(0xeeec83428198f021), u64(0x01b8b8a6038ad6eb)}, - Uint128{u64(0x7553d20990ff9615), u64(0x01137367c236c653)}, - Uint128{u64(0x52a8c68bf53f7b9a), u64(0x01585041b2c477e8)}, - Uint128{u64(0x6752f82ef28f5a81), u64(0x01ae64521f7595e2)}, - Uint128{u64(0x8093db1d57999890), u64(0x010cfeb353a97dad)}, - Uint128{u64(0xe0b8d1e4ad7ffeb4), u64(0x01503e602893dd18)}, - Uint128{u64(0x18e7065dd8dffe62), u64(0x01a44df832b8d45f)}, - Uint128{u64(0x6f9063faa78bfefd), u64(0x0106b0bb1fb384bb)}, - Uint128{u64(0x4b747cf9516efebc), u64(0x01485ce9e7a065ea)}, - Uint128{u64(0xde519c37a5cabe6b), u64(0x019a742461887f64)}, - Uint128{u64(0x0af301a2c79eb703), u64(0x01008896bcf54f9f)}, - Uint128{u64(0xcdafc20b798664c4), u64(0x0140aabc6c32a386)}, - Uint128{u64(0x811bb28e57e7fdf5), u64(0x0190d56b873f4c68)}, - Uint128{u64(0xa1629f31ede1fd72), u64(0x01f50ac6690f1f82)}, - Uint128{u64(0xa4dda37f34ad3e67), u64(0x013926bc01a973b1)}, - Uint128{u64(0x0e150c5f01d88e01), u64(0x0187706b0213d09e)}, - Uint128{u64(0x919a4f76c24eb181), u64(0x01e94c85c298c4c5)}, - Uint128{u64(0x7b0071aa39712ef1), u64(0x0131cfd3999f7afb)}, - Uint128{u64(0x59c08e14c7cd7aad), u64(0x017e43c8800759ba)}, - Uint128{u64(0xf030b199f9c0d958), u64(0x01ddd4baa0093028)}, - Uint128{u64(0x961e6f003c1887d7), u64(0x012aa4f4a405be19)}, - Uint128{u64(0xfba60ac04b1ea9cd), u64(0x01754e31cd072d9f)}, - Uint128{u64(0xfa8f8d705de65440), u64(0x01d2a1be4048f907)}, - Uint128{u64(0xfc99b8663aaff4a8), u64(0x0123a516e82d9ba4)}, - Uint128{u64(0x3bc0267fc95bf1d2), u64(0x016c8e5ca239028e)}, - Uint128{u64(0xcab0301fbbb2ee47), u64(0x01c7b1f3cac74331)}, - Uint128{u64(0x1eae1e13d54fd4ec), u64(0x011ccf385ebc89ff)}, - Uint128{u64(0xe659a598caa3ca27), u64(0x01640306766bac7e)}, - Uint128{u64(0x9ff00efefd4cbcb1), u64(0x01bd03c81406979e)}, - Uint128{u64(0x23f6095f5e4ff5ef), u64(0x0116225d0c841ec3)}, - Uint128{u64(0xecf38bb735e3f36a), u64(0x015baaf44fa52673)}, - Uint128{u64(0xe8306ea5035cf045), u64(0x01b295b1638e7010)}, - Uint128{u64(0x911e4527221a162b), u64(0x010f9d8ede39060a)}, - Uint128{u64(0x3565d670eaa09bb6), u64(0x015384f295c7478d)}, - Uint128{u64(0x82bf4c0d2548c2a3), u64(0x01a8662f3b391970)}, - Uint128{u64(0x51b78f88374d79a6), u64(0x01093fdd8503afe6)}, - Uint128{u64(0xe625736a4520d810), u64(0x014b8fd4e6449bdf)}, - Uint128{u64(0xdfaed044d6690e14), u64(0x019e73ca1fd5c2d7)}, - Uint128{u64(0xebcd422b0601a8cc), u64(0x0103085e53e599c6)}, - Uint128{u64(0xa6c092b5c78212ff), u64(0x0143ca75e8df0038)}, - Uint128{u64(0xd070b763396297bf), u64(0x0194bd136316c046)}, - Uint128{u64(0x848ce53c07bb3daf), u64(0x01f9ec583bdc7058)}, - Uint128{u64(0x52d80f4584d5068d), u64(0x013c33b72569c637)}, - Uint128{u64(0x278e1316e60a4831), u64(0x018b40a4eec437c5)}, - ] + pow5_split_64_x = [ + u64(0x0000000000000000), + u64(0x0100000000000000), + u64(0x0000000000000000), + u64(0x0140000000000000), + u64(0x0000000000000000), + u64(0x0190000000000000), + u64(0x0000000000000000), + u64(0x01f4000000000000), + u64(0x0000000000000000), + u64(0x0138800000000000), + u64(0x0000000000000000), + u64(0x0186a00000000000), + u64(0x0000000000000000), + u64(0x01e8480000000000), + u64(0x0000000000000000), + u64(0x01312d0000000000), + u64(0x0000000000000000), + u64(0x017d784000000000), + u64(0x0000000000000000), + u64(0x01dcd65000000000), + u64(0x0000000000000000), + u64(0x012a05f200000000), + u64(0x0000000000000000), + u64(0x0174876e80000000), + u64(0x0000000000000000), + u64(0x01d1a94a20000000), + u64(0x0000000000000000), + u64(0x012309ce54000000), + u64(0x0000000000000000), + u64(0x016bcc41e9000000), + u64(0x0000000000000000), + u64(0x01c6bf5263400000), + u64(0x0000000000000000), + u64(0x011c37937e080000), + u64(0x0000000000000000), + u64(0x016345785d8a0000), + u64(0x0000000000000000), + u64(0x01bc16d674ec8000), + u64(0x0000000000000000), + u64(0x01158e460913d000), + u64(0x0000000000000000), + u64(0x015af1d78b58c400), + u64(0x0000000000000000), + u64(0x01b1ae4d6e2ef500), + u64(0x0000000000000000), + u64(0x010f0cf064dd5920), + u64(0x0000000000000000), + u64(0x0152d02c7e14af68), + u64(0x0000000000000000), + u64(0x01a784379d99db42), + u64(0x4000000000000000), + u64(0x0108b2a2c2802909), + u64(0x9000000000000000), + u64(0x014adf4b7320334b), + u64(0x7400000000000000), + u64(0x019d971e4fe8401e), + u64(0x0880000000000000), + u64(0x01027e72f1f12813), + u64(0xcaa0000000000000), + u64(0x01431e0fae6d7217), + u64(0xbd48000000000000), + u64(0x0193e5939a08ce9d), + u64(0x2c9a000000000000), + u64(0x01f8def8808b0245), + u64(0x3be0400000000000), + u64(0x013b8b5b5056e16b), + u64(0x0ad8500000000000), + u64(0x018a6e32246c99c6), + u64(0x8d8e640000000000), + u64(0x01ed09bead87c037), + u64(0xb878fe8000000000), + u64(0x013426172c74d822), + u64(0x66973e2000000000), + u64(0x01812f9cf7920e2b), + u64(0x403d0da800000000), + u64(0x01e17b84357691b6), + u64(0xe826288900000000), + u64(0x012ced32a16a1b11), + u64(0x622fb2ab40000000), + u64(0x0178287f49c4a1d6), + u64(0xfabb9f5610000000), + u64(0x01d6329f1c35ca4b), + u64(0x7cb54395ca000000), + u64(0x0125dfa371a19e6f), + u64(0x5be2947b3c800000), + u64(0x016f578c4e0a060b), + u64(0x32db399a0ba00000), + u64(0x01cb2d6f618c878e), + u64(0xdfc9040047440000), + u64(0x011efc659cf7d4b8), + u64(0x17bb450059150000), + u64(0x0166bb7f0435c9e7), + u64(0xddaa16406f5a4000), + u64(0x01c06a5ec5433c60), + u64(0x8a8a4de845986800), + u64(0x0118427b3b4a05bc), + u64(0xad2ce16256fe8200), + u64(0x015e531a0a1c872b), + u64(0x987819baecbe2280), + u64(0x01b5e7e08ca3a8f6), + u64(0x1f4b1014d3f6d590), + u64(0x0111b0ec57e6499a), + u64(0xa71dd41a08f48af4), + u64(0x01561d276ddfdc00), + u64(0xd0e549208b31adb1), + u64(0x01aba4714957d300), + u64(0x828f4db456ff0c8e), + u64(0x010b46c6cdd6e3e0), + u64(0xa33321216cbecfb2), + u64(0x014e1878814c9cd8), + u64(0xcbffe969c7ee839e), + u64(0x01a19e96a19fc40e), + u64(0x3f7ff1e21cf51243), + u64(0x0105031e2503da89), + u64(0x8f5fee5aa43256d4), + u64(0x014643e5ae44d12b), + u64(0x7337e9f14d3eec89), + u64(0x0197d4df19d60576), + u64(0x1005e46da08ea7ab), + u64(0x01fdca16e04b86d4), + u64(0x8a03aec4845928cb), + u64(0x013e9e4e4c2f3444), + u64(0xac849a75a56f72fd), + u64(0x018e45e1df3b0155), + u64(0x17a5c1130ecb4fbd), + u64(0x01f1d75a5709c1ab), + u64(0xeec798abe93f11d6), + u64(0x013726987666190a), + u64(0xaa797ed6e38ed64b), + u64(0x0184f03e93ff9f4d), + u64(0x1517de8c9c728bde), + u64(0x01e62c4e38ff8721), + u64(0xad2eeb17e1c7976b), + u64(0x012fdbb0e39fb474), + u64(0xd87aa5ddda397d46), + u64(0x017bd29d1c87a191), + u64(0x4e994f5550c7dc97), + u64(0x01dac74463a989f6), + u64(0xf11fd195527ce9de), + u64(0x0128bc8abe49f639), + u64(0x6d67c5faa71c2456), + u64(0x0172ebad6ddc73c8), + u64(0x88c1b77950e32d6c), + u64(0x01cfa698c95390ba), + u64(0x957912abd28dfc63), + u64(0x0121c81f7dd43a74), + u64(0xbad75756c7317b7c), + u64(0x016a3a275d494911), + u64(0x298d2d2c78fdda5b), + u64(0x01c4c8b1349b9b56), + u64(0xd9f83c3bcb9ea879), + u64(0x011afd6ec0e14115), + u64(0x50764b4abe865297), + u64(0x0161bcca7119915b), + u64(0x2493de1d6e27e73d), + u64(0x01ba2bfd0d5ff5b2), + u64(0x56dc6ad264d8f086), + u64(0x01145b7e285bf98f), + u64(0x2c938586fe0f2ca8), + u64(0x0159725db272f7f3), + u64(0xf7b866e8bd92f7d2), + u64(0x01afcef51f0fb5ef), + u64(0xfad34051767bdae3), + u64(0x010de1593369d1b5), + u64(0x79881065d41ad19c), + u64(0x015159af80444623), + u64(0x57ea147f49218603), + u64(0x01a5b01b605557ac), + u64(0xb6f24ccf8db4f3c1), + u64(0x01078e111c3556cb), + u64(0xa4aee003712230b2), + u64(0x014971956342ac7e), + u64(0x4dda98044d6abcdf), + u64(0x019bcdfabc13579e), + u64(0xf0a89f02b062b60b), + u64(0x010160bcb58c16c2), + u64(0xacd2c6c35c7b638e), + u64(0x0141b8ebe2ef1c73), + u64(0x98077874339a3c71), + u64(0x01922726dbaae390), + u64(0xbe0956914080cb8e), + u64(0x01f6b0f092959c74), + u64(0xf6c5d61ac8507f38), + u64(0x013a2e965b9d81c8), + u64(0x34774ba17a649f07), + u64(0x0188ba3bf284e23b), + u64(0x01951e89d8fdc6c8), + u64(0x01eae8caef261aca), + u64(0x40fd3316279e9c3d), + u64(0x0132d17ed577d0be), + u64(0xd13c7fdbb186434c), + u64(0x017f85de8ad5c4ed), + u64(0x458b9fd29de7d420), + u64(0x01df67562d8b3629), + u64(0xcb7743e3a2b0e494), + u64(0x012ba095dc7701d9), + u64(0x3e5514dc8b5d1db9), + u64(0x017688bb5394c250), + u64(0x4dea5a13ae346527), + u64(0x01d42aea2879f2e4), + u64(0xb0b2784c4ce0bf38), + u64(0x01249ad2594c37ce), + u64(0x5cdf165f6018ef06), + u64(0x016dc186ef9f45c2), + u64(0xf416dbf7381f2ac8), + u64(0x01c931e8ab871732), + u64(0xd88e497a83137abd), + u64(0x011dbf316b346e7f), + u64(0xceb1dbd923d8596c), + u64(0x01652efdc6018a1f), + u64(0xc25e52cf6cce6fc7), + u64(0x01be7abd3781eca7), + u64(0xd97af3c1a40105dc), + u64(0x01170cb642b133e8), + u64(0x0fd9b0b20d014754), + u64(0x015ccfe3d35d80e3), + u64(0xd3d01cde90419929), + u64(0x01b403dcc834e11b), + u64(0x6462120b1a28ffb9), + u64(0x01108269fd210cb1), + u64(0xbd7a968de0b33fa8), + u64(0x0154a3047c694fdd), + u64(0x2cd93c3158e00f92), + u64(0x01a9cbc59b83a3d5), + u64(0x3c07c59ed78c09bb), + u64(0x010a1f5b81324665), + u64(0x8b09b7068d6f0c2a), + u64(0x014ca732617ed7fe), + u64(0x2dcc24c830cacf34), + u64(0x019fd0fef9de8dfe), + u64(0xdc9f96fd1e7ec180), + u64(0x0103e29f5c2b18be), + u64(0x93c77cbc661e71e1), + u64(0x0144db473335deee), + u64(0x38b95beb7fa60e59), + u64(0x01961219000356aa), + u64(0xc6e7b2e65f8f91ef), + u64(0x01fb969f40042c54), + u64(0xfc50cfcffbb9bb35), + u64(0x013d3e2388029bb4), + u64(0x3b6503c3faa82a03), + u64(0x018c8dac6a0342a2), + u64(0xca3e44b4f9523484), + u64(0x01efb1178484134a), + u64(0xbe66eaf11bd360d2), + u64(0x0135ceaeb2d28c0e), + u64(0x6e00a5ad62c83907), + u64(0x0183425a5f872f12), + u64(0x0980cf18bb7a4749), + u64(0x01e412f0f768fad7), + u64(0x65f0816f752c6c8d), + u64(0x012e8bd69aa19cc6), + u64(0xff6ca1cb527787b1), + u64(0x017a2ecc414a03f7), + u64(0xff47ca3e2715699d), + u64(0x01d8ba7f519c84f5), + u64(0xbf8cde66d86d6202), + u64(0x0127748f9301d319), + u64(0x2f7016008e88ba83), + u64(0x017151b377c247e0), + u64(0x3b4c1b80b22ae923), + u64(0x01cda62055b2d9d8), + u64(0x250f91306f5ad1b6), + u64(0x012087d4358fc827), + u64(0xee53757c8b318623), + u64(0x0168a9c942f3ba30), + u64(0x29e852dbadfde7ac), + u64(0x01c2d43b93b0a8bd), + u64(0x3a3133c94cbeb0cc), + u64(0x0119c4a53c4e6976), + u64(0xc8bd80bb9fee5cff), + u64(0x016035ce8b6203d3), + u64(0xbaece0ea87e9f43e), + u64(0x01b843422e3a84c8), + u64(0x74d40c9294f238a7), + u64(0x01132a095ce492fd), + u64(0xd2090fb73a2ec6d1), + u64(0x0157f48bb41db7bc), + u64(0x068b53a508ba7885), + u64(0x01adf1aea12525ac), + u64(0x8417144725748b53), + u64(0x010cb70d24b7378b), + u64(0x651cd958eed1ae28), + u64(0x014fe4d06de5056e), + u64(0xfe640faf2a8619b2), + u64(0x01a3de04895e46c9), + u64(0x3efe89cd7a93d00f), + u64(0x01066ac2d5daec3e), + u64(0xcebe2c40d938c413), + u64(0x014805738b51a74d), + u64(0x426db7510f86f518), + u64(0x019a06d06e261121), + u64(0xc9849292a9b4592f), + u64(0x0100444244d7cab4), + u64(0xfbe5b73754216f7a), + u64(0x01405552d60dbd61), + u64(0x7adf25052929cb59), + u64(0x01906aa78b912cba), + u64(0x1996ee4673743e2f), + u64(0x01f485516e7577e9), + u64(0xaffe54ec0828a6dd), + u64(0x0138d352e5096af1), + u64(0x1bfdea270a32d095), + u64(0x018708279e4bc5ae), + u64(0xa2fd64b0ccbf84ba), + u64(0x01e8ca3185deb719), + u64(0x05de5eee7ff7b2f4), + u64(0x01317e5ef3ab3270), + u64(0x0755f6aa1ff59fb1), + u64(0x017dddf6b095ff0c), + u64(0x092b7454a7f3079e), + u64(0x01dd55745cbb7ecf), + u64(0x65bb28b4e8f7e4c3), + u64(0x012a5568b9f52f41), + u64(0xbf29f2e22335ddf3), + u64(0x0174eac2e8727b11), + u64(0x2ef46f9aac035570), + u64(0x01d22573a28f19d6), + u64(0xdd58c5c0ab821566), + u64(0x0123576845997025), + u64(0x54aef730d6629ac0), + u64(0x016c2d4256ffcc2f), + u64(0x29dab4fd0bfb4170), + u64(0x01c73892ecbfbf3b), + u64(0xfa28b11e277d08e6), + u64(0x011c835bd3f7d784), + u64(0x38b2dd65b15c4b1f), + u64(0x0163a432c8f5cd66), + u64(0xc6df94bf1db35de7), + u64(0x01bc8d3f7b3340bf), + u64(0xdc4bbcf772901ab0), + u64(0x0115d847ad000877), + u64(0xd35eac354f34215c), + u64(0x015b4e5998400a95), + u64(0x48365742a30129b4), + u64(0x01b221effe500d3b), + u64(0x0d21f689a5e0ba10), + u64(0x010f5535fef20845), + u64(0x506a742c0f58e894), + u64(0x01532a837eae8a56), + u64(0xe4851137132f22b9), + u64(0x01a7f5245e5a2ceb), + u64(0x6ed32ac26bfd75b4), + u64(0x0108f936baf85c13), + u64(0x4a87f57306fcd321), + u64(0x014b378469b67318), + u64(0x5d29f2cfc8bc07e9), + u64(0x019e056584240fde), + u64(0xfa3a37c1dd7584f1), + u64(0x0102c35f729689ea), + u64(0xb8c8c5b254d2e62e), + u64(0x014374374f3c2c65), + u64(0x26faf71eea079fb9), + u64(0x01945145230b377f), + u64(0xf0b9b4e6a48987a8), + u64(0x01f965966bce055e), + u64(0x5674111026d5f4c9), + u64(0x013bdf7e0360c35b), + u64(0x2c111554308b71fb), + u64(0x018ad75d8438f432), + u64(0xb7155aa93cae4e7a), + u64(0x01ed8d34e547313e), + u64(0x326d58a9c5ecf10c), + u64(0x013478410f4c7ec7), + u64(0xff08aed437682d4f), + u64(0x01819651531f9e78), + u64(0x3ecada89454238a3), + u64(0x01e1fbe5a7e78617), + u64(0x873ec895cb496366), + u64(0x012d3d6f88f0b3ce), + u64(0x290e7abb3e1bbc3f), + u64(0x01788ccb6b2ce0c2), + u64(0xb352196a0da2ab4f), + u64(0x01d6affe45f818f2), + u64(0xb0134fe24885ab11), + u64(0x01262dfeebbb0f97), + u64(0x9c1823dadaa715d6), + u64(0x016fb97ea6a9d37d), + u64(0x031e2cd19150db4b), + u64(0x01cba7de5054485d), + u64(0x21f2dc02fad2890f), + u64(0x011f48eaf234ad3a), + u64(0xaa6f9303b9872b53), + u64(0x01671b25aec1d888), + u64(0xd50b77c4a7e8f628), + u64(0x01c0e1ef1a724eaa), + u64(0xc5272adae8f199d9), + u64(0x01188d357087712a), + u64(0x7670f591a32e004f), + u64(0x015eb082cca94d75), + u64(0xd40d32f60bf98063), + u64(0x01b65ca37fd3a0d2), + u64(0xc4883fd9c77bf03e), + u64(0x0111f9e62fe44483), + u64(0xb5aa4fd0395aec4d), + u64(0x0156785fbbdd55a4), + u64(0xe314e3c447b1a760), + u64(0x01ac1677aad4ab0d), + u64(0xaded0e5aaccf089c), + u64(0x010b8e0acac4eae8), + u64(0xd96851f15802cac3), + u64(0x014e718d7d7625a2), + u64(0x8fc2666dae037d74), + u64(0x01a20df0dcd3af0b), + u64(0x39d980048cc22e68), + u64(0x010548b68a044d67), + u64(0x084fe005aff2ba03), + u64(0x01469ae42c8560c1), + u64(0x4a63d8071bef6883), + u64(0x0198419d37a6b8f1), + u64(0x9cfcce08e2eb42a4), + u64(0x01fe52048590672d), + u64(0x821e00c58dd309a7), + u64(0x013ef342d37a407c), + u64(0xa2a580f6f147cc10), + u64(0x018eb0138858d09b), + u64(0x8b4ee134ad99bf15), + u64(0x01f25c186a6f04c2), + u64(0x97114cc0ec80176d), + u64(0x0137798f428562f9), + u64(0xfcd59ff127a01d48), + u64(0x018557f31326bbb7), + u64(0xfc0b07ed7188249a), + u64(0x01e6adefd7f06aa5), + u64(0xbd86e4f466f516e0), + u64(0x01302cb5e6f642a7), + u64(0xace89e3180b25c98), + u64(0x017c37e360b3d351), + u64(0x1822c5bde0def3be), + u64(0x01db45dc38e0c826), + u64(0xcf15bb96ac8b5857), + u64(0x01290ba9a38c7d17), + u64(0xc2db2a7c57ae2e6d), + u64(0x01734e940c6f9c5d), + u64(0x3391f51b6d99ba08), + u64(0x01d022390f8b8375), + u64(0x403b393124801445), + u64(0x01221563a9b73229), + u64(0x904a077d6da01956), + u64(0x016a9abc9424feb3), + u64(0x745c895cc9081fac), + u64(0x01c5416bb92e3e60), + u64(0x48b9d5d9fda513cb), + u64(0x011b48e353bce6fc), + u64(0x5ae84b507d0e58be), + u64(0x01621b1c28ac20bb), + u64(0x31a25e249c51eeee), + u64(0x01baa1e332d728ea), + u64(0x5f057ad6e1b33554), + u64(0x0114a52dffc67992), + u64(0xf6c6d98c9a2002aa), + u64(0x0159ce797fb817f6), + u64(0xb4788fefc0a80354), + u64(0x01b04217dfa61df4), + u64(0xf0cb59f5d8690214), + u64(0x010e294eebc7d2b8), + u64(0x2cfe30734e83429a), + u64(0x0151b3a2a6b9c767), + u64(0xf83dbc9022241340), + u64(0x01a6208b50683940), + u64(0x9b2695da15568c08), + u64(0x0107d457124123c8), + u64(0xc1f03b509aac2f0a), + u64(0x0149c96cd6d16cba), + u64(0x726c4a24c1573acd), + u64(0x019c3bc80c85c7e9), + u64(0xe783ae56f8d684c0), + u64(0x0101a55d07d39cf1), + u64(0x616499ecb70c25f0), + u64(0x01420eb449c8842e), + u64(0xf9bdc067e4cf2f6c), + u64(0x019292615c3aa539), + u64(0x782d3081de02fb47), + u64(0x01f736f9b3494e88), + u64(0x4b1c3e512ac1dd0c), + u64(0x013a825c100dd115), + u64(0x9de34de57572544f), + u64(0x018922f31411455a), + u64(0x455c215ed2cee963), + u64(0x01eb6bafd91596b1), + u64(0xcb5994db43c151de), + u64(0x0133234de7ad7e2e), + u64(0x7e2ffa1214b1a655), + u64(0x017fec216198ddba), + u64(0x1dbbf89699de0feb), + u64(0x01dfe729b9ff1529), + u64(0xb2957b5e202ac9f3), + u64(0x012bf07a143f6d39), + u64(0x1f3ada35a8357c6f), + u64(0x0176ec98994f4888), + u64(0x270990c31242db8b), + u64(0x01d4a7bebfa31aaa), + u64(0x5865fa79eb69c937), + u64(0x0124e8d737c5f0aa), + u64(0xee7f791866443b85), + u64(0x016e230d05b76cd4), + u64(0x2a1f575e7fd54a66), + u64(0x01c9abd04725480a), + u64(0x5a53969b0fe54e80), + u64(0x011e0b622c774d06), + u64(0xf0e87c41d3dea220), + u64(0x01658e3ab7952047), + u64(0xed229b5248d64aa8), + u64(0x01bef1c9657a6859), + u64(0x3435a1136d85eea9), + u64(0x0117571ddf6c8138), + u64(0x4143095848e76a53), + u64(0x015d2ce55747a186), + u64(0xd193cbae5b2144e8), + u64(0x01b4781ead1989e7), + u64(0xe2fc5f4cf8f4cb11), + u64(0x0110cb132c2ff630), + u64(0x1bbb77203731fdd5), + u64(0x0154fdd7f73bf3bd), + u64(0x62aa54e844fe7d4a), + u64(0x01aa3d4df50af0ac), + u64(0xbdaa75112b1f0e4e), + u64(0x010a6650b926d66b), + u64(0xad15125575e6d1e2), + u64(0x014cffe4e7708c06), + u64(0x585a56ead360865b), + u64(0x01a03fde214caf08), + u64(0x37387652c41c53f8), + u64(0x010427ead4cfed65), + u64(0x850693e7752368f7), + u64(0x014531e58a03e8be), + u64(0x264838e1526c4334), + u64(0x01967e5eec84e2ee), + u64(0xafda4719a7075402), + u64(0x01fc1df6a7a61ba9), + u64(0x0de86c7008649481), + u64(0x013d92ba28c7d14a), + u64(0x9162878c0a7db9a1), + u64(0x018cf768b2f9c59c), + u64(0xb5bb296f0d1d280a), + u64(0x01f03542dfb83703), + u64(0x5194f9e568323906), + u64(0x01362149cbd32262), + u64(0xe5fa385ec23ec747), + u64(0x0183a99c3ec7eafa), + u64(0x9f78c67672ce7919), + u64(0x01e494034e79e5b9), + u64(0x03ab7c0a07c10bb0), + u64(0x012edc82110c2f94), + u64(0x04965b0c89b14e9c), + u64(0x017a93a2954f3b79), + u64(0x45bbf1cfac1da243), + u64(0x01d9388b3aa30a57), + u64(0x8b957721cb92856a), + u64(0x0127c35704a5e676), + u64(0x2e7ad4ea3e7726c4), + u64(0x0171b42cc5cf6014), + u64(0x3a198a24ce14f075), + u64(0x01ce2137f7433819), + u64(0xc44ff65700cd1649), + u64(0x0120d4c2fa8a030f), + u64(0xb563f3ecc1005bdb), + u64(0x016909f3b92c83d3), + u64(0xa2bcf0e7f14072d2), + u64(0x01c34c70a777a4c8), + u64(0x65b61690f6c847c3), + u64(0x011a0fc668aac6fd), + u64(0xbf239c35347a59b4), + u64(0x016093b802d578bc), + u64(0xeeec83428198f021), + u64(0x01b8b8a6038ad6eb), + u64(0x7553d20990ff9615), + u64(0x01137367c236c653), + u64(0x52a8c68bf53f7b9a), + u64(0x01585041b2c477e8), + u64(0x6752f82ef28f5a81), + u64(0x01ae64521f7595e2), + u64(0x8093db1d57999890), + u64(0x010cfeb353a97dad), + u64(0xe0b8d1e4ad7ffeb4), + u64(0x01503e602893dd18), + u64(0x18e7065dd8dffe62), + u64(0x01a44df832b8d45f), + u64(0x6f9063faa78bfefd), + u64(0x0106b0bb1fb384bb), + u64(0x4b747cf9516efebc), + u64(0x01485ce9e7a065ea), + u64(0xde519c37a5cabe6b), + u64(0x019a742461887f64), + u64(0x0af301a2c79eb703), + u64(0x01008896bcf54f9f), + u64(0xcdafc20b798664c4), + u64(0x0140aabc6c32a386), + u64(0x811bb28e57e7fdf5), + u64(0x0190d56b873f4c68), + u64(0xa1629f31ede1fd72), + u64(0x01f50ac6690f1f82), + u64(0xa4dda37f34ad3e67), + u64(0x013926bc01a973b1), + u64(0x0e150c5f01d88e01), + u64(0x0187706b0213d09e), + u64(0x919a4f76c24eb181), + u64(0x01e94c85c298c4c5), + u64(0x7b0071aa39712ef1), + u64(0x0131cfd3999f7afb), + u64(0x59c08e14c7cd7aad), + u64(0x017e43c8800759ba), + u64(0xf030b199f9c0d958), + u64(0x01ddd4baa0093028), + u64(0x961e6f003c1887d7), + u64(0x012aa4f4a405be19), + u64(0xfba60ac04b1ea9cd), + u64(0x01754e31cd072d9f), + u64(0xfa8f8d705de65440), + u64(0x01d2a1be4048f907), + u64(0xfc99b8663aaff4a8), + u64(0x0123a516e82d9ba4), + u64(0x3bc0267fc95bf1d2), + u64(0x016c8e5ca239028e), + u64(0xcab0301fbbb2ee47), + u64(0x01c7b1f3cac74331), + u64(0x1eae1e13d54fd4ec), + u64(0x011ccf385ebc89ff), + u64(0xe659a598caa3ca27), + u64(0x01640306766bac7e), + u64(0x9ff00efefd4cbcb1), + u64(0x01bd03c81406979e), + u64(0x23f6095f5e4ff5ef), + u64(0x0116225d0c841ec3), + u64(0xecf38bb735e3f36a), + u64(0x015baaf44fa52673), + u64(0xe8306ea5035cf045), + u64(0x01b295b1638e7010), + u64(0x911e4527221a162b), + u64(0x010f9d8ede39060a), + u64(0x3565d670eaa09bb6), + u64(0x015384f295c7478d), + u64(0x82bf4c0d2548c2a3), + u64(0x01a8662f3b391970), + u64(0x51b78f88374d79a6), + u64(0x01093fdd8503afe6), + u64(0xe625736a4520d810), + u64(0x014b8fd4e6449bdf), + u64(0xdfaed044d6690e14), + u64(0x019e73ca1fd5c2d7), + u64(0xebcd422b0601a8cc), + u64(0x0103085e53e599c6), + u64(0xa6c092b5c78212ff), + u64(0x0143ca75e8df0038), + u64(0xd070b763396297bf), + u64(0x0194bd136316c046), + u64(0x848ce53c07bb3daf), + u64(0x01f9ec583bdc7058), + u64(0x52d80f4584d5068d), + u64(0x013c33b72569c637), + u64(0x278e1316e60a4831), + u64(0x018b40a4eec437c5), + ]! - pow5_inv_split_64 = [ - Uint128{u64(0x0000000000000001), u64(0x0400000000000000)}, - Uint128{u64(0x3333333333333334), u64(0x0333333333333333)}, - Uint128{u64(0x28f5c28f5c28f5c3), u64(0x028f5c28f5c28f5c)}, - Uint128{u64(0xed916872b020c49c), u64(0x020c49ba5e353f7c)}, - Uint128{u64(0xaf4f0d844d013a93), u64(0x0346dc5d63886594)}, - Uint128{u64(0x8c3f3e0370cdc876), u64(0x029f16b11c6d1e10)}, - Uint128{u64(0xd698fe69270b06c5), u64(0x0218def416bdb1a6)}, - Uint128{u64(0xf0f4ca41d811a46e), u64(0x035afe535795e90a)}, - Uint128{u64(0xf3f70834acdae9f1), u64(0x02af31dc4611873b)}, - Uint128{u64(0x5cc5a02a23e254c1), u64(0x0225c17d04dad296)}, - Uint128{u64(0xfad5cd10396a2135), u64(0x036f9bfb3af7b756)}, - Uint128{u64(0xfbde3da69454e75e), u64(0x02bfaffc2f2c92ab)}, - Uint128{u64(0x2fe4fe1edd10b918), u64(0x0232f33025bd4223)}, - Uint128{u64(0x4ca19697c81ac1bf), u64(0x0384b84d092ed038)}, - Uint128{u64(0x3d4e1213067bce33), u64(0x02d09370d4257360)}, - Uint128{u64(0x643e74dc052fd829), u64(0x024075f3dceac2b3)}, - Uint128{u64(0x6d30baf9a1e626a7), u64(0x039a5652fb113785)}, - Uint128{u64(0x2426fbfae7eb5220), u64(0x02e1dea8c8da92d1)}, - Uint128{u64(0x1cebfcc8b9890e80), u64(0x024e4bba3a487574)}, - Uint128{u64(0x94acc7a78f41b0cc), u64(0x03b07929f6da5586)}, - Uint128{u64(0xaa23d2ec729af3d7), u64(0x02f394219248446b)}, - Uint128{u64(0xbb4fdbf05baf2979), u64(0x025c768141d369ef)}, - Uint128{u64(0xc54c931a2c4b758d), u64(0x03c7240202ebdcb2)}, - Uint128{u64(0x9dd6dc14f03c5e0b), u64(0x0305b66802564a28)}, - Uint128{u64(0x4b1249aa59c9e4d6), u64(0x026af8533511d4ed)}, - Uint128{u64(0x44ea0f76f60fd489), u64(0x03de5a1ebb4fbb15)}, - Uint128{u64(0x6a54d92bf80caa07), u64(0x0318481895d96277)}, - Uint128{u64(0x21dd7a89933d54d2), u64(0x0279d346de4781f9)}, - Uint128{u64(0x362f2a75b8622150), u64(0x03f61ed7ca0c0328)}, - Uint128{u64(0xf825bb91604e810d), u64(0x032b4bdfd4d668ec)}, - Uint128{u64(0xc684960de6a5340b), u64(0x0289097fdd7853f0)}, - Uint128{u64(0xd203ab3e521dc33c), u64(0x02073accb12d0ff3)}, - Uint128{u64(0xe99f7863b696052c), u64(0x033ec47ab514e652)}, - Uint128{u64(0x87b2c6b62bab3757), u64(0x02989d2ef743eb75)}, - Uint128{u64(0xd2f56bc4efbc2c45), u64(0x0213b0f25f69892a)}, - Uint128{u64(0x1e55793b192d13a2), u64(0x0352b4b6ff0f41de)}, - Uint128{u64(0x4b77942f475742e8), u64(0x02a8909265a5ce4b)}, - Uint128{u64(0xd5f9435905df68ba), u64(0x022073a8515171d5)}, - Uint128{u64(0x565b9ef4d6324129), u64(0x03671f73b54f1c89)}, - Uint128{u64(0xdeafb25d78283421), u64(0x02b8e5f62aa5b06d)}, - Uint128{u64(0x188c8eb12cecf681), u64(0x022d84c4eeeaf38b)}, - Uint128{u64(0x8dadb11b7b14bd9b), u64(0x037c07a17e44b8de)}, - Uint128{u64(0x7157c0e2c8dd647c), u64(0x02c99fb46503c718)}, - Uint128{u64(0x8ddfcd823a4ab6ca), u64(0x023ae629ea696c13)}, - Uint128{u64(0x1632e269f6ddf142), u64(0x0391704310a8acec)}, - Uint128{u64(0x44f581ee5f17f435), u64(0x02dac035a6ed5723)}, - Uint128{u64(0x372ace584c1329c4), u64(0x024899c4858aac1c)}, - Uint128{u64(0xbeaae3c079b842d3), u64(0x03a75c6da27779c6)}, - Uint128{u64(0x6555830061603576), u64(0x02ec49f14ec5fb05)}, - Uint128{u64(0xb7779c004de6912b), u64(0x0256a18dd89e626a)}, - Uint128{u64(0xf258f99a163db512), u64(0x03bdcf495a9703dd)}, - Uint128{u64(0x5b7a614811caf741), u64(0x02fe3f6de212697e)}, - Uint128{u64(0xaf951aa00e3bf901), u64(0x0264ff8b1b41edfe)}, - Uint128{u64(0x7f54f7667d2cc19b), u64(0x03d4cc11c5364997)}, - Uint128{u64(0x32aa5f8530f09ae3), u64(0x0310a3416a91d479)}, - Uint128{u64(0xf55519375a5a1582), u64(0x0273b5cdeedb1060)}, - Uint128{u64(0xbbbb5b8bc3c3559d), u64(0x03ec56164af81a34)}, - Uint128{u64(0x2fc916096969114a), u64(0x03237811d593482a)}, - Uint128{u64(0x596dab3ababa743c), u64(0x0282c674aadc39bb)}, - Uint128{u64(0x478aef622efb9030), u64(0x0202385d557cfafc)}, - Uint128{u64(0xd8de4bd04b2c19e6), u64(0x0336c0955594c4c6)}, - Uint128{u64(0xad7ea30d08f014b8), u64(0x029233aaaadd6a38)}, - Uint128{u64(0x24654f3da0c01093), u64(0x020e8fbbbbe454fa)}, - Uint128{u64(0x3a3bb1fc346680eb), u64(0x034a7f92c63a2190)}, - Uint128{u64(0x94fc8e635d1ecd89), u64(0x02a1ffa89e94e7a6)}, - Uint128{u64(0xaa63a51c4a7f0ad4), u64(0x021b32ed4baa52eb)}, - Uint128{u64(0xdd6c3b607731aaed), u64(0x035eb7e212aa1e45)}, - Uint128{u64(0x1789c919f8f488bd), u64(0x02b22cb4dbbb4b6b)}, - Uint128{u64(0xac6e3a7b2d906d64), u64(0x022823c3e2fc3c55)}, - Uint128{u64(0x13e390c515b3e23a), u64(0x03736c6c9e606089)}, - Uint128{u64(0xdcb60d6a77c31b62), u64(0x02c2bd23b1e6b3a0)}, - Uint128{u64(0x7d5e7121f968e2b5), u64(0x0235641c8e52294d)}, - Uint128{u64(0xc8971b698f0e3787), u64(0x0388a02db0837548)}, - Uint128{u64(0xa078e2bad8d82c6c), u64(0x02d3b357c0692aa0)}, - Uint128{u64(0xe6c71bc8ad79bd24), u64(0x0242f5dfcd20eee6)}, - Uint128{u64(0x0ad82c7448c2c839), u64(0x039e5632e1ce4b0b)}, - Uint128{u64(0x3be023903a356cfa), u64(0x02e511c24e3ea26f)}, - Uint128{u64(0x2fe682d9c82abd95), u64(0x0250db01d8321b8c)}, - Uint128{u64(0x4ca4048fa6aac8ee), u64(0x03b4919c8d1cf8e0)}, - Uint128{u64(0x3d5003a61eef0725), u64(0x02f6dae3a4172d80)}, - Uint128{u64(0x9773361e7f259f51), u64(0x025f1582e9ac2466)}, - Uint128{u64(0x8beb89ca6508fee8), u64(0x03cb559e42ad070a)}, - Uint128{u64(0x6fefa16eb73a6586), u64(0x0309114b688a6c08)}, - Uint128{u64(0xf3261abef8fb846b), u64(0x026da76f86d52339)}, - Uint128{u64(0x51d691318e5f3a45), u64(0x03e2a57f3e21d1f6)}, - Uint128{u64(0x0e4540f471e5c837), u64(0x031bb798fe8174c5)}, - Uint128{u64(0xd8376729f4b7d360), u64(0x027c92e0cb9ac3d0)}, - Uint128{u64(0xf38bd84321261eff), u64(0x03fa849adf5e061a)}, - Uint128{u64(0x293cad0280eb4bff), u64(0x032ed07be5e4d1af)}, - Uint128{u64(0xedca240200bc3ccc), u64(0x028bd9fcb7ea4158)}, - Uint128{u64(0xbe3b50019a3030a4), u64(0x02097b309321cde0)}, - Uint128{u64(0xc9f88002904d1a9f), u64(0x03425eb41e9c7c9a)}, - Uint128{u64(0x3b2d3335403daee6), u64(0x029b7ef67ee396e2)}, - Uint128{u64(0x95bdc291003158b8), u64(0x0215ff2b98b6124e)}, - Uint128{u64(0x892f9db4cd1bc126), u64(0x035665128df01d4a)}, - Uint128{u64(0x07594af70a7c9a85), u64(0x02ab840ed7f34aa2)}, - Uint128{u64(0x6c476f2c0863aed1), u64(0x0222d00bdff5d54e)}, - Uint128{u64(0x13a57eacda3917b4), u64(0x036ae67966562217)}, - Uint128{u64(0x0fb7988a482dac90), u64(0x02bbeb9451de81ac)}, - Uint128{u64(0xd95fad3b6cf156da), u64(0x022fefa9db1867bc)}, - Uint128{u64(0xf565e1f8ae4ef15c), u64(0x037fe5dc91c0a5fa)}, - Uint128{u64(0x911e4e608b725ab0), u64(0x02ccb7e3a7cd5195)}, - Uint128{u64(0xda7ea51a0928488d), u64(0x023d5fe9530aa7aa)}, - Uint128{u64(0xf7310829a8407415), u64(0x039566421e7772aa)}, - Uint128{u64(0x2c2739baed005cde), u64(0x02ddeb68185f8eef)}, - Uint128{u64(0xbcec2e2f24004a4b), u64(0x024b22b9ad193f25)}, - Uint128{u64(0x94ad16b1d333aa11), u64(0x03ab6ac2ae8ecb6f)}, - Uint128{u64(0xaa241227dc2954db), u64(0x02ef889bbed8a2bf)}, - Uint128{u64(0x54e9a81fe35443e2), u64(0x02593a163246e899)}, - Uint128{u64(0x2175d9cc9eed396a), u64(0x03c1f689ea0b0dc2)}, - Uint128{u64(0xe7917b0a18bdc788), u64(0x03019207ee6f3e34)}, - Uint128{u64(0xb9412f3b46fe393a), u64(0x0267a8065858fe90)}, - Uint128{u64(0xf535185ed7fd285c), u64(0x03d90cd6f3c1974d)}, - Uint128{u64(0xc42a79e57997537d), u64(0x03140a458fce12a4)}, - Uint128{u64(0x03552e512e12a931), u64(0x02766e9e0ca4dbb7)}, - Uint128{u64(0x9eeeb081e3510eb4), u64(0x03f0b0fce107c5f1)}, - Uint128{u64(0x4bf226ce4f740bc3), u64(0x0326f3fd80d304c1)}, - Uint128{u64(0xa3281f0b72c33c9c), u64(0x02858ffe00a8d09a)}, - Uint128{u64(0x1c2018d5f568fd4a), u64(0x020473319a20a6e2)}, - Uint128{u64(0xf9ccf48988a7fba9), u64(0x033a51e8f69aa49c)}, - Uint128{u64(0xfb0a5d3ad3b99621), u64(0x02950e53f87bb6e3)}, - Uint128{u64(0x2f3b7dc8a96144e7), u64(0x0210d8432d2fc583)}, - Uint128{u64(0xe52bfc7442353b0c), u64(0x034e26d1e1e608d1)}, - Uint128{u64(0xb756639034f76270), u64(0x02a4ebdb1b1e6d74)}, - Uint128{u64(0x2c451c735d92b526), u64(0x021d897c15b1f12a)}, - Uint128{u64(0x13a1c71efc1deea3), u64(0x0362759355e981dd)}, - Uint128{u64(0x761b05b2634b2550), u64(0x02b52adc44bace4a)}, - Uint128{u64(0x91af37c1e908eaa6), u64(0x022a88b036fbd83b)}, - Uint128{u64(0x82b1f2cfdb417770), u64(0x03774119f192f392)}, - Uint128{u64(0xcef4c23fe29ac5f3), u64(0x02c5cdae5adbf60e)}, - Uint128{u64(0x3f2a34ffe87bd190), u64(0x0237d7beaf165e72)}, - Uint128{u64(0x984387ffda5fb5b2), u64(0x038c8c644b56fd83)}, - Uint128{u64(0xe0360666484c915b), u64(0x02d6d6b6a2abfe02)}, - Uint128{u64(0x802b3851d3707449), u64(0x024578921bbccb35)}, - Uint128{u64(0x99dec082ebe72075), u64(0x03a25a835f947855)}, - Uint128{u64(0xae4bcd358985b391), u64(0x02e8486919439377)}, - Uint128{u64(0xbea30a913ad15c74), u64(0x02536d20e102dc5f)}, - Uint128{u64(0xfdd1aa81f7b560b9), u64(0x03b8ae9b019e2d65)}, - Uint128{u64(0x97daeece5fc44d61), u64(0x02fa2548ce182451)}, - Uint128{u64(0xdfe258a51969d781), u64(0x0261b76d71ace9da)}, - Uint128{u64(0x996a276e8f0fbf34), u64(0x03cf8be24f7b0fc4)}, - Uint128{u64(0xe121b9253f3fcc2a), u64(0x030c6fe83f95a636)}, - Uint128{u64(0xb41afa8432997022), u64(0x02705986994484f8)}, - Uint128{u64(0xecf7f739ea8f19cf), u64(0x03e6f5a4286da18d)}, - Uint128{u64(0x23f99294bba5ae40), u64(0x031f2ae9b9f14e0b)}, - Uint128{u64(0x4ffadbaa2fb7be99), u64(0x027f5587c7f43e6f)}, - Uint128{u64(0x7ff7c5dd1925fdc2), u64(0x03feef3fa6539718)}, - Uint128{u64(0xccc637e4141e649b), u64(0x033258ffb842df46)}, - Uint128{u64(0xd704f983434b83af), u64(0x028ead9960357f6b)}, - Uint128{u64(0x126a6135cf6f9c8c), u64(0x020bbe144cf79923)}, - Uint128{u64(0x83dd685618b29414), u64(0x0345fced47f28e9e)}, - Uint128{u64(0x9cb12044e08edcdd), u64(0x029e63f1065ba54b)}, - Uint128{u64(0x16f419d0b3a57d7d), u64(0x02184ff405161dd6)}, - Uint128{u64(0x8b20294dec3bfbfb), u64(0x035a19866e89c956)}, - Uint128{u64(0x3c19baa4bcfcc996), u64(0x02ae7ad1f207d445)}, - Uint128{u64(0xc9ae2eea30ca3adf), u64(0x02252f0e5b39769d)}, - Uint128{u64(0x0f7d17dd1add2afd), u64(0x036eb1b091f58a96)}, - Uint128{u64(0x3f97464a7be42264), u64(0x02bef48d41913bab)}, - Uint128{u64(0xcc790508631ce850), u64(0x02325d3dce0dc955)}, - Uint128{u64(0xe0c1a1a704fb0d4d), u64(0x0383c862e3494222)}, - Uint128{u64(0x4d67b4859d95a43e), u64(0x02cfd3824f6dce82)}, - Uint128{u64(0x711fc39e17aae9cb), u64(0x023fdc683f8b0b9b)}, - Uint128{u64(0xe832d2968c44a945), u64(0x039960a6cc11ac2b)}, - Uint128{u64(0xecf575453d03ba9e), u64(0x02e11a1f09a7bcef)}, - Uint128{u64(0x572ac4376402fbb1), u64(0x024dae7f3aec9726)}, - Uint128{u64(0x58446d256cd192b5), u64(0x03af7d985e47583d)}, - Uint128{u64(0x79d0575123dadbc4), u64(0x02f2cae04b6c4697)}, - Uint128{u64(0x94a6ac40e97be303), u64(0x025bd5803c569edf)}, - Uint128{u64(0x8771139b0f2c9e6c), u64(0x03c62266c6f0fe32)}, - Uint128{u64(0x9f8da948d8f07ebd), u64(0x0304e85238c0cb5b)}, - Uint128{u64(0xe60aedd3e0c06564), u64(0x026a5374fa33d5e2)}, - Uint128{u64(0xa344afb9679a3bd2), u64(0x03dd5254c3862304)}, - Uint128{u64(0xe903bfc78614fca8), u64(0x031775109c6b4f36)}, - Uint128{u64(0xba6966393810ca20), u64(0x02792a73b055d8f8)}, - Uint128{u64(0x2a423d2859b4769a), u64(0x03f510b91a22f4c1)}, - Uint128{u64(0xee9b642047c39215), u64(0x032a73c7481bf700)}, - Uint128{u64(0xbee2b680396941aa), u64(0x02885c9f6ce32c00)}, - Uint128{u64(0xff1bc53361210155), u64(0x0206b07f8a4f5666)}, - Uint128{u64(0x31c6085235019bbb), u64(0x033de73276e5570b)}, - Uint128{u64(0x27d1a041c4014963), u64(0x0297ec285f1ddf3c)}, - Uint128{u64(0xeca7b367d0010782), u64(0x021323537f4b18fc)}, - Uint128{u64(0xadd91f0c8001a59d), u64(0x0351d21f3211c194)}, - Uint128{u64(0xf17a7f3d3334847e), u64(0x02a7db4c280e3476)}, - Uint128{u64(0x279532975c2a0398), u64(0x021fe2a3533e905f)}, - Uint128{u64(0xd8eeb75893766c26), u64(0x0366376bb8641a31)}, - Uint128{u64(0x7a5892ad42c52352), u64(0x02b82c562d1ce1c1)}, - Uint128{u64(0xfb7a0ef102374f75), u64(0x022cf044f0e3e7cd)}, - Uint128{u64(0xc59017e8038bb254), u64(0x037b1a07e7d30c7c)}, - Uint128{u64(0x37a67986693c8eaa), u64(0x02c8e19feca8d6ca)}, - Uint128{u64(0xf951fad1edca0bbb), u64(0x023a4e198a20abd4)}, - Uint128{u64(0x28832ae97c76792b), u64(0x03907cf5a9cddfbb)}, - Uint128{u64(0x2068ef21305ec756), u64(0x02d9fd9154a4b2fc)}, - Uint128{u64(0x19ed8c1a8d189f78), u64(0x0247fe0ddd508f30)}, - Uint128{u64(0x5caf4690e1c0ff26), u64(0x03a66349621a7eb3)}, - Uint128{u64(0x4a25d20d81673285), u64(0x02eb82a11b48655c)}, - Uint128{u64(0x3b5174d79ab8f537), u64(0x0256021a7c39eab0)}, - Uint128{u64(0x921bee25c45b21f1), u64(0x03bcd02a605caab3)}, - Uint128{u64(0xdb498b5169e2818e), u64(0x02fd735519e3bbc2)}, - Uint128{u64(0x15d46f7454b53472), u64(0x02645c4414b62fcf)}, - Uint128{u64(0xefba4bed545520b6), u64(0x03d3c6d35456b2e4)}, - Uint128{u64(0xf2fb6ff110441a2b), u64(0x030fd242a9def583)}, - Uint128{u64(0x8f2f8cc0d9d014ef), u64(0x02730e9bbb18c469)}, - Uint128{u64(0xb1e5ae015c80217f), u64(0x03eb4a92c4f46d75)}, - Uint128{u64(0xc1848b344a001acc), u64(0x0322a20f03f6bdf7)}, - Uint128{u64(0xce03a2903b3348a3), u64(0x02821b3f365efe5f)}, - Uint128{u64(0xd802e873628f6d4f), u64(0x0201af65c518cb7f)}, - Uint128{u64(0x599e40b89db2487f), u64(0x0335e56fa1c14599)}, - Uint128{u64(0xe14b66fa17c1d399), u64(0x029184594e3437ad)}, - Uint128{u64(0x81091f2e7967dc7a), u64(0x020e037aa4f692f1)}, - Uint128{u64(0x9b41cb7d8f0c93f6), u64(0x03499f2aa18a84b5)}, - Uint128{u64(0xaf67d5fe0c0a0ff8), u64(0x02a14c221ad536f7)}, - Uint128{u64(0xf2b977fe70080cc7), u64(0x021aa34e7bddc592)}, - Uint128{u64(0x1df58cca4cd9ae0b), u64(0x035dd2172c9608eb)}, - Uint128{u64(0xe4c470a1d7148b3c), u64(0x02b174df56de6d88)}, - Uint128{u64(0x83d05a1b1276d5ca), u64(0x022790b2abe5246d)}, - Uint128{u64(0x9fb3c35e83f1560f), u64(0x0372811ddfd50715)}, - Uint128{u64(0xb2f635e5365aab3f), u64(0x02c200e4b310d277)}, - Uint128{u64(0xf591c4b75eaeef66), u64(0x0234cd83c273db92)}, - Uint128{u64(0xef4fa125644b18a3), u64(0x0387af39371fc5b7)}, - Uint128{u64(0x8c3fb41de9d5ad4f), u64(0x02d2f2942c196af9)}, - Uint128{u64(0x3cffc34b2177bdd9), u64(0x02425ba9bce12261)}, - Uint128{u64(0x94cc6bab68bf9628), u64(0x039d5f75fb01d09b)}, - Uint128{u64(0x10a38955ed6611b9), u64(0x02e44c5e6267da16)}, - Uint128{u64(0xda1c6dde5784dafb), u64(0x02503d184eb97b44)}, - Uint128{u64(0xf693e2fd58d49191), u64(0x03b394f3b128c53a)}, - Uint128{u64(0xc5431bfde0aa0e0e), u64(0x02f610c2f4209dc8)}, - Uint128{u64(0x6a9c1664b3bb3e72), u64(0x025e73cf29b3b16d)}, - Uint128{u64(0x10f9bd6dec5eca4f), u64(0x03ca52e50f85e8af)}, - Uint128{u64(0xda616457f04bd50c), u64(0x03084250d937ed58)}, - Uint128{u64(0xe1e783798d09773d), u64(0x026d01da475ff113)}, - Uint128{u64(0x030c058f480f252e), u64(0x03e19c9072331b53)}, - Uint128{u64(0x68d66ad906728425), u64(0x031ae3a6c1c27c42)}, - Uint128{u64(0x8711ef14052869b7), u64(0x027be952349b969b)}, - Uint128{u64(0x0b4fe4ecd50d75f2), u64(0x03f97550542c242c)}, - Uint128{u64(0xa2a650bd773df7f5), u64(0x032df7737689b689)}, - Uint128{u64(0xb551da312c31932a), u64(0x028b2c5c5ed49207)}, - Uint128{u64(0x5ddb14f4235adc22), u64(0x0208f049e576db39)}, - Uint128{u64(0x2fc4ee536bc49369), u64(0x034180763bf15ec2)}, - Uint128{u64(0xbfd0bea92303a921), u64(0x029acd2b63277f01)}, - Uint128{u64(0x9973cbba8269541a), u64(0x021570ef8285ff34)}, - Uint128{u64(0x5bec792a6a42202a), u64(0x0355817f373ccb87)}, - Uint128{u64(0xe3239421ee9b4cef), u64(0x02aacdff5f63d605)}, - Uint128{u64(0xb5b6101b25490a59), u64(0x02223e65e5e97804)}, - Uint128{u64(0x22bce691d541aa27), u64(0x0369fd6fd64259a1)}, - Uint128{u64(0xb563eba7ddce21b9), u64(0x02bb31264501e14d)}, - Uint128{u64(0xf78322ecb171b494), u64(0x022f5a850401810a)}, - Uint128{u64(0x259e9e47824f8753), u64(0x037ef73b399c01ab)}, - Uint128{u64(0x1e187e9f9b72d2a9), u64(0x02cbf8fc2e1667bc)}, - Uint128{u64(0x4b46cbb2e2c24221), u64(0x023cc73024deb963)}, - Uint128{u64(0x120adf849e039d01), u64(0x039471e6a1645bd2)}, - Uint128{u64(0xdb3be603b19c7d9a), u64(0x02dd27ebb4504974)}, - Uint128{u64(0x7c2feb3627b0647c), u64(0x024a865629d9d45d)}, - Uint128{u64(0x2d197856a5e7072c), u64(0x03aa7089dc8fba2f)}, - Uint128{u64(0x8a7ac6abb7ec05bd), u64(0x02eec06e4a0c94f2)}, - Uint128{u64(0xd52f05562cbcd164), u64(0x025899f1d4d6dd8e)}, - Uint128{u64(0x21e4d556adfae8a0), u64(0x03c0f64fbaf1627e)}, - Uint128{u64(0xe7ea444557fbed4d), u64(0x0300c50c958de864)}, - Uint128{u64(0xecbb69d1132ff10a), u64(0x0267040a113e5383)}, - Uint128{u64(0xadf8a94e851981aa), u64(0x03d8067681fd526c)}, - Uint128{u64(0x8b2d543ed0e13488), u64(0x0313385ece6441f0)}, - Uint128{u64(0xd5bddcff0d80f6d3), u64(0x0275c6b23eb69b26)}, - Uint128{u64(0x892fc7fe7c018aeb), u64(0x03efa45064575ea4)}, - Uint128{u64(0x3a8c9ffec99ad589), u64(0x03261d0d1d12b21d)}, - Uint128{u64(0xc8707fff07af113b), u64(0x0284e40a7da88e7d)}, - Uint128{u64(0x39f39998d2f2742f), u64(0x0203e9a1fe2071fe)}, - Uint128{u64(0x8fec28f484b7204b), u64(0x033975cffd00b663)}, - Uint128{u64(0xd989ba5d36f8e6a2), u64(0x02945e3ffd9a2b82)}, - Uint128{u64(0x47a161e42bfa521c), u64(0x02104b66647b5602)}, - Uint128{u64(0x0c35696d132a1cf9), u64(0x034d4570a0c5566a)}, - Uint128{u64(0x09c454574288172d), u64(0x02a4378d4d6aab88)}, - Uint128{u64(0xa169dd129ba0128b), u64(0x021cf93dd7888939)}, - Uint128{u64(0x0242fb50f9001dab), u64(0x03618ec958da7529)}, - Uint128{u64(0x9b68c90d940017bc), u64(0x02b4723aad7b90ed)}, - Uint128{u64(0x4920a0d7a999ac96), u64(0x0229f4fbbdfc73f1)}, - Uint128{u64(0x750101590f5c4757), u64(0x037654c5fcc71fe8)}, - Uint128{u64(0x2a6734473f7d05df), u64(0x02c5109e63d27fed)}, - Uint128{u64(0xeeb8f69f65fd9e4c), u64(0x0237407eb641fff0)}, - Uint128{u64(0xe45b24323cc8fd46), u64(0x038b9a6456cfffe7)}, - Uint128{u64(0xb6af502830a0ca9f), u64(0x02d6151d123fffec)}, - Uint128{u64(0xf88c402026e7087f), u64(0x0244ddb0db666656)}, - Uint128{u64(0x2746cd003e3e73fe), u64(0x03a162b4923d708b)}, - Uint128{u64(0x1f6bd73364fec332), u64(0x02e7822a0e978d3c)}, - Uint128{u64(0xe5efdf5c50cbcf5b), u64(0x0252ce880bac70fc)}, - Uint128{u64(0x3cb2fefa1adfb22b), u64(0x03b7b0d9ac471b2e)}, - Uint128{u64(0x308f3261af195b56), u64(0x02f95a47bd05af58)}, - Uint128{u64(0x5a0c284e25ade2ab), u64(0x0261150630d15913)}, - Uint128{u64(0x29ad0d49d5e30445), u64(0x03ce8809e7b55b52)}, - Uint128{u64(0x548a7107de4f369d), u64(0x030ba007ec9115db)}, - Uint128{u64(0xdd3b8d9fe50c2bb1), u64(0x026fb3398a0dab15)}, - Uint128{u64(0x952c15cca1ad12b5), u64(0x03e5eb8f434911bc)}, - Uint128{u64(0x775677d6e7bda891), u64(0x031e560c35d40e30)}, - Uint128{u64(0xc5dec645863153a7), u64(0x027eab3cf7dcd826)}, - ] + pow5_inv_split_64_x = [ + u64(0x0000000000000001), + u64(0x0400000000000000), + u64(0x3333333333333334), + u64(0x0333333333333333), + u64(0x28f5c28f5c28f5c3), + u64(0x028f5c28f5c28f5c), + u64(0xed916872b020c49c), + u64(0x020c49ba5e353f7c), + u64(0xaf4f0d844d013a93), + u64(0x0346dc5d63886594), + u64(0x8c3f3e0370cdc876), + u64(0x029f16b11c6d1e10), + u64(0xd698fe69270b06c5), + u64(0x0218def416bdb1a6), + u64(0xf0f4ca41d811a46e), + u64(0x035afe535795e90a), + u64(0xf3f70834acdae9f1), + u64(0x02af31dc4611873b), + u64(0x5cc5a02a23e254c1), + u64(0x0225c17d04dad296), + u64(0xfad5cd10396a2135), + u64(0x036f9bfb3af7b756), + u64(0xfbde3da69454e75e), + u64(0x02bfaffc2f2c92ab), + u64(0x2fe4fe1edd10b918), + u64(0x0232f33025bd4223), + u64(0x4ca19697c81ac1bf), + u64(0x0384b84d092ed038), + u64(0x3d4e1213067bce33), + u64(0x02d09370d4257360), + u64(0x643e74dc052fd829), + u64(0x024075f3dceac2b3), + u64(0x6d30baf9a1e626a7), + u64(0x039a5652fb113785), + u64(0x2426fbfae7eb5220), + u64(0x02e1dea8c8da92d1), + u64(0x1cebfcc8b9890e80), + u64(0x024e4bba3a487574), + u64(0x94acc7a78f41b0cc), + u64(0x03b07929f6da5586), + u64(0xaa23d2ec729af3d7), + u64(0x02f394219248446b), + u64(0xbb4fdbf05baf2979), + u64(0x025c768141d369ef), + u64(0xc54c931a2c4b758d), + u64(0x03c7240202ebdcb2), + u64(0x9dd6dc14f03c5e0b), + u64(0x0305b66802564a28), + u64(0x4b1249aa59c9e4d6), + u64(0x026af8533511d4ed), + u64(0x44ea0f76f60fd489), + u64(0x03de5a1ebb4fbb15), + u64(0x6a54d92bf80caa07), + u64(0x0318481895d96277), + u64(0x21dd7a89933d54d2), + u64(0x0279d346de4781f9), + u64(0x362f2a75b8622150), + u64(0x03f61ed7ca0c0328), + u64(0xf825bb91604e810d), + u64(0x032b4bdfd4d668ec), + u64(0xc684960de6a5340b), + u64(0x0289097fdd7853f0), + u64(0xd203ab3e521dc33c), + u64(0x02073accb12d0ff3), + u64(0xe99f7863b696052c), + u64(0x033ec47ab514e652), + u64(0x87b2c6b62bab3757), + u64(0x02989d2ef743eb75), + u64(0xd2f56bc4efbc2c45), + u64(0x0213b0f25f69892a), + u64(0x1e55793b192d13a2), + u64(0x0352b4b6ff0f41de), + u64(0x4b77942f475742e8), + u64(0x02a8909265a5ce4b), + u64(0xd5f9435905df68ba), + u64(0x022073a8515171d5), + u64(0x565b9ef4d6324129), + u64(0x03671f73b54f1c89), + u64(0xdeafb25d78283421), + u64(0x02b8e5f62aa5b06d), + u64(0x188c8eb12cecf681), + u64(0x022d84c4eeeaf38b), + u64(0x8dadb11b7b14bd9b), + u64(0x037c07a17e44b8de), + u64(0x7157c0e2c8dd647c), + u64(0x02c99fb46503c718), + u64(0x8ddfcd823a4ab6ca), + u64(0x023ae629ea696c13), + u64(0x1632e269f6ddf142), + u64(0x0391704310a8acec), + u64(0x44f581ee5f17f435), + u64(0x02dac035a6ed5723), + u64(0x372ace584c1329c4), + u64(0x024899c4858aac1c), + u64(0xbeaae3c079b842d3), + u64(0x03a75c6da27779c6), + u64(0x6555830061603576), + u64(0x02ec49f14ec5fb05), + u64(0xb7779c004de6912b), + u64(0x0256a18dd89e626a), + u64(0xf258f99a163db512), + u64(0x03bdcf495a9703dd), + u64(0x5b7a614811caf741), + u64(0x02fe3f6de212697e), + u64(0xaf951aa00e3bf901), + u64(0x0264ff8b1b41edfe), + u64(0x7f54f7667d2cc19b), + u64(0x03d4cc11c5364997), + u64(0x32aa5f8530f09ae3), + u64(0x0310a3416a91d479), + u64(0xf55519375a5a1582), + u64(0x0273b5cdeedb1060), + u64(0xbbbb5b8bc3c3559d), + u64(0x03ec56164af81a34), + u64(0x2fc916096969114a), + u64(0x03237811d593482a), + u64(0x596dab3ababa743c), + u64(0x0282c674aadc39bb), + u64(0x478aef622efb9030), + u64(0x0202385d557cfafc), + u64(0xd8de4bd04b2c19e6), + u64(0x0336c0955594c4c6), + u64(0xad7ea30d08f014b8), + u64(0x029233aaaadd6a38), + u64(0x24654f3da0c01093), + u64(0x020e8fbbbbe454fa), + u64(0x3a3bb1fc346680eb), + u64(0x034a7f92c63a2190), + u64(0x94fc8e635d1ecd89), + u64(0x02a1ffa89e94e7a6), + u64(0xaa63a51c4a7f0ad4), + u64(0x021b32ed4baa52eb), + u64(0xdd6c3b607731aaed), + u64(0x035eb7e212aa1e45), + u64(0x1789c919f8f488bd), + u64(0x02b22cb4dbbb4b6b), + u64(0xac6e3a7b2d906d64), + u64(0x022823c3e2fc3c55), + u64(0x13e390c515b3e23a), + u64(0x03736c6c9e606089), + u64(0xdcb60d6a77c31b62), + u64(0x02c2bd23b1e6b3a0), + u64(0x7d5e7121f968e2b5), + u64(0x0235641c8e52294d), + u64(0xc8971b698f0e3787), + u64(0x0388a02db0837548), + u64(0xa078e2bad8d82c6c), + u64(0x02d3b357c0692aa0), + u64(0xe6c71bc8ad79bd24), + u64(0x0242f5dfcd20eee6), + u64(0x0ad82c7448c2c839), + u64(0x039e5632e1ce4b0b), + u64(0x3be023903a356cfa), + u64(0x02e511c24e3ea26f), + u64(0x2fe682d9c82abd95), + u64(0x0250db01d8321b8c), + u64(0x4ca4048fa6aac8ee), + u64(0x03b4919c8d1cf8e0), + u64(0x3d5003a61eef0725), + u64(0x02f6dae3a4172d80), + u64(0x9773361e7f259f51), + u64(0x025f1582e9ac2466), + u64(0x8beb89ca6508fee8), + u64(0x03cb559e42ad070a), + u64(0x6fefa16eb73a6586), + u64(0x0309114b688a6c08), + u64(0xf3261abef8fb846b), + u64(0x026da76f86d52339), + u64(0x51d691318e5f3a45), + u64(0x03e2a57f3e21d1f6), + u64(0x0e4540f471e5c837), + u64(0x031bb798fe8174c5), + u64(0xd8376729f4b7d360), + u64(0x027c92e0cb9ac3d0), + u64(0xf38bd84321261eff), + u64(0x03fa849adf5e061a), + u64(0x293cad0280eb4bff), + u64(0x032ed07be5e4d1af), + u64(0xedca240200bc3ccc), + u64(0x028bd9fcb7ea4158), + u64(0xbe3b50019a3030a4), + u64(0x02097b309321cde0), + u64(0xc9f88002904d1a9f), + u64(0x03425eb41e9c7c9a), + u64(0x3b2d3335403daee6), + u64(0x029b7ef67ee396e2), + u64(0x95bdc291003158b8), + u64(0x0215ff2b98b6124e), + u64(0x892f9db4cd1bc126), + u64(0x035665128df01d4a), + u64(0x07594af70a7c9a85), + u64(0x02ab840ed7f34aa2), + u64(0x6c476f2c0863aed1), + u64(0x0222d00bdff5d54e), + u64(0x13a57eacda3917b4), + u64(0x036ae67966562217), + u64(0x0fb7988a482dac90), + u64(0x02bbeb9451de81ac), + u64(0xd95fad3b6cf156da), + u64(0x022fefa9db1867bc), + u64(0xf565e1f8ae4ef15c), + u64(0x037fe5dc91c0a5fa), + u64(0x911e4e608b725ab0), + u64(0x02ccb7e3a7cd5195), + u64(0xda7ea51a0928488d), + u64(0x023d5fe9530aa7aa), + u64(0xf7310829a8407415), + u64(0x039566421e7772aa), + u64(0x2c2739baed005cde), + u64(0x02ddeb68185f8eef), + u64(0xbcec2e2f24004a4b), + u64(0x024b22b9ad193f25), + u64(0x94ad16b1d333aa11), + u64(0x03ab6ac2ae8ecb6f), + u64(0xaa241227dc2954db), + u64(0x02ef889bbed8a2bf), + u64(0x54e9a81fe35443e2), + u64(0x02593a163246e899), + u64(0x2175d9cc9eed396a), + u64(0x03c1f689ea0b0dc2), + u64(0xe7917b0a18bdc788), + u64(0x03019207ee6f3e34), + u64(0xb9412f3b46fe393a), + u64(0x0267a8065858fe90), + u64(0xf535185ed7fd285c), + u64(0x03d90cd6f3c1974d), + u64(0xc42a79e57997537d), + u64(0x03140a458fce12a4), + u64(0x03552e512e12a931), + u64(0x02766e9e0ca4dbb7), + u64(0x9eeeb081e3510eb4), + u64(0x03f0b0fce107c5f1), + u64(0x4bf226ce4f740bc3), + u64(0x0326f3fd80d304c1), + u64(0xa3281f0b72c33c9c), + u64(0x02858ffe00a8d09a), + u64(0x1c2018d5f568fd4a), + u64(0x020473319a20a6e2), + u64(0xf9ccf48988a7fba9), + u64(0x033a51e8f69aa49c), + u64(0xfb0a5d3ad3b99621), + u64(0x02950e53f87bb6e3), + u64(0x2f3b7dc8a96144e7), + u64(0x0210d8432d2fc583), + u64(0xe52bfc7442353b0c), + u64(0x034e26d1e1e608d1), + u64(0xb756639034f76270), + u64(0x02a4ebdb1b1e6d74), + u64(0x2c451c735d92b526), + u64(0x021d897c15b1f12a), + u64(0x13a1c71efc1deea3), + u64(0x0362759355e981dd), + u64(0x761b05b2634b2550), + u64(0x02b52adc44bace4a), + u64(0x91af37c1e908eaa6), + u64(0x022a88b036fbd83b), + u64(0x82b1f2cfdb417770), + u64(0x03774119f192f392), + u64(0xcef4c23fe29ac5f3), + u64(0x02c5cdae5adbf60e), + u64(0x3f2a34ffe87bd190), + u64(0x0237d7beaf165e72), + u64(0x984387ffda5fb5b2), + u64(0x038c8c644b56fd83), + u64(0xe0360666484c915b), + u64(0x02d6d6b6a2abfe02), + u64(0x802b3851d3707449), + u64(0x024578921bbccb35), + u64(0x99dec082ebe72075), + u64(0x03a25a835f947855), + u64(0xae4bcd358985b391), + u64(0x02e8486919439377), + u64(0xbea30a913ad15c74), + u64(0x02536d20e102dc5f), + u64(0xfdd1aa81f7b560b9), + u64(0x03b8ae9b019e2d65), + u64(0x97daeece5fc44d61), + u64(0x02fa2548ce182451), + u64(0xdfe258a51969d781), + u64(0x0261b76d71ace9da), + u64(0x996a276e8f0fbf34), + u64(0x03cf8be24f7b0fc4), + u64(0xe121b9253f3fcc2a), + u64(0x030c6fe83f95a636), + u64(0xb41afa8432997022), + u64(0x02705986994484f8), + u64(0xecf7f739ea8f19cf), + u64(0x03e6f5a4286da18d), + u64(0x23f99294bba5ae40), + u64(0x031f2ae9b9f14e0b), + u64(0x4ffadbaa2fb7be99), + u64(0x027f5587c7f43e6f), + u64(0x7ff7c5dd1925fdc2), + u64(0x03feef3fa6539718), + u64(0xccc637e4141e649b), + u64(0x033258ffb842df46), + u64(0xd704f983434b83af), + u64(0x028ead9960357f6b), + u64(0x126a6135cf6f9c8c), + u64(0x020bbe144cf79923), + u64(0x83dd685618b29414), + u64(0x0345fced47f28e9e), + u64(0x9cb12044e08edcdd), + u64(0x029e63f1065ba54b), + u64(0x16f419d0b3a57d7d), + u64(0x02184ff405161dd6), + u64(0x8b20294dec3bfbfb), + u64(0x035a19866e89c956), + u64(0x3c19baa4bcfcc996), + u64(0x02ae7ad1f207d445), + u64(0xc9ae2eea30ca3adf), + u64(0x02252f0e5b39769d), + u64(0x0f7d17dd1add2afd), + u64(0x036eb1b091f58a96), + u64(0x3f97464a7be42264), + u64(0x02bef48d41913bab), + u64(0xcc790508631ce850), + u64(0x02325d3dce0dc955), + u64(0xe0c1a1a704fb0d4d), + u64(0x0383c862e3494222), + u64(0x4d67b4859d95a43e), + u64(0x02cfd3824f6dce82), + u64(0x711fc39e17aae9cb), + u64(0x023fdc683f8b0b9b), + u64(0xe832d2968c44a945), + u64(0x039960a6cc11ac2b), + u64(0xecf575453d03ba9e), + u64(0x02e11a1f09a7bcef), + u64(0x572ac4376402fbb1), + u64(0x024dae7f3aec9726), + u64(0x58446d256cd192b5), + u64(0x03af7d985e47583d), + u64(0x79d0575123dadbc4), + u64(0x02f2cae04b6c4697), + u64(0x94a6ac40e97be303), + u64(0x025bd5803c569edf), + u64(0x8771139b0f2c9e6c), + u64(0x03c62266c6f0fe32), + u64(0x9f8da948d8f07ebd), + u64(0x0304e85238c0cb5b), + u64(0xe60aedd3e0c06564), + u64(0x026a5374fa33d5e2), + u64(0xa344afb9679a3bd2), + u64(0x03dd5254c3862304), + u64(0xe903bfc78614fca8), + u64(0x031775109c6b4f36), + u64(0xba6966393810ca20), + u64(0x02792a73b055d8f8), + u64(0x2a423d2859b4769a), + u64(0x03f510b91a22f4c1), + u64(0xee9b642047c39215), + u64(0x032a73c7481bf700), + u64(0xbee2b680396941aa), + u64(0x02885c9f6ce32c00), + u64(0xff1bc53361210155), + u64(0x0206b07f8a4f5666), + u64(0x31c6085235019bbb), + u64(0x033de73276e5570b), + u64(0x27d1a041c4014963), + u64(0x0297ec285f1ddf3c), + u64(0xeca7b367d0010782), + u64(0x021323537f4b18fc), + u64(0xadd91f0c8001a59d), + u64(0x0351d21f3211c194), + u64(0xf17a7f3d3334847e), + u64(0x02a7db4c280e3476), + u64(0x279532975c2a0398), + u64(0x021fe2a3533e905f), + u64(0xd8eeb75893766c26), + u64(0x0366376bb8641a31), + u64(0x7a5892ad42c52352), + u64(0x02b82c562d1ce1c1), + u64(0xfb7a0ef102374f75), + u64(0x022cf044f0e3e7cd), + u64(0xc59017e8038bb254), + u64(0x037b1a07e7d30c7c), + u64(0x37a67986693c8eaa), + u64(0x02c8e19feca8d6ca), + u64(0xf951fad1edca0bbb), + u64(0x023a4e198a20abd4), + u64(0x28832ae97c76792b), + u64(0x03907cf5a9cddfbb), + u64(0x2068ef21305ec756), + u64(0x02d9fd9154a4b2fc), + u64(0x19ed8c1a8d189f78), + u64(0x0247fe0ddd508f30), + u64(0x5caf4690e1c0ff26), + u64(0x03a66349621a7eb3), + u64(0x4a25d20d81673285), + u64(0x02eb82a11b48655c), + u64(0x3b5174d79ab8f537), + u64(0x0256021a7c39eab0), + u64(0x921bee25c45b21f1), + u64(0x03bcd02a605caab3), + u64(0xdb498b5169e2818e), + u64(0x02fd735519e3bbc2), + u64(0x15d46f7454b53472), + u64(0x02645c4414b62fcf), + u64(0xefba4bed545520b6), + u64(0x03d3c6d35456b2e4), + u64(0xf2fb6ff110441a2b), + u64(0x030fd242a9def583), + u64(0x8f2f8cc0d9d014ef), + u64(0x02730e9bbb18c469), + u64(0xb1e5ae015c80217f), + u64(0x03eb4a92c4f46d75), + u64(0xc1848b344a001acc), + u64(0x0322a20f03f6bdf7), + u64(0xce03a2903b3348a3), + u64(0x02821b3f365efe5f), + u64(0xd802e873628f6d4f), + u64(0x0201af65c518cb7f), + u64(0x599e40b89db2487f), + u64(0x0335e56fa1c14599), + u64(0xe14b66fa17c1d399), + u64(0x029184594e3437ad), + u64(0x81091f2e7967dc7a), + u64(0x020e037aa4f692f1), + u64(0x9b41cb7d8f0c93f6), + u64(0x03499f2aa18a84b5), + u64(0xaf67d5fe0c0a0ff8), + u64(0x02a14c221ad536f7), + u64(0xf2b977fe70080cc7), + u64(0x021aa34e7bddc592), + u64(0x1df58cca4cd9ae0b), + u64(0x035dd2172c9608eb), + u64(0xe4c470a1d7148b3c), + u64(0x02b174df56de6d88), + u64(0x83d05a1b1276d5ca), + u64(0x022790b2abe5246d), + u64(0x9fb3c35e83f1560f), + u64(0x0372811ddfd50715), + u64(0xb2f635e5365aab3f), + u64(0x02c200e4b310d277), + u64(0xf591c4b75eaeef66), + u64(0x0234cd83c273db92), + u64(0xef4fa125644b18a3), + u64(0x0387af39371fc5b7), + u64(0x8c3fb41de9d5ad4f), + u64(0x02d2f2942c196af9), + u64(0x3cffc34b2177bdd9), + u64(0x02425ba9bce12261), + u64(0x94cc6bab68bf9628), + u64(0x039d5f75fb01d09b), + u64(0x10a38955ed6611b9), + u64(0x02e44c5e6267da16), + u64(0xda1c6dde5784dafb), + u64(0x02503d184eb97b44), + u64(0xf693e2fd58d49191), + u64(0x03b394f3b128c53a), + u64(0xc5431bfde0aa0e0e), + u64(0x02f610c2f4209dc8), + u64(0x6a9c1664b3bb3e72), + u64(0x025e73cf29b3b16d), + u64(0x10f9bd6dec5eca4f), + u64(0x03ca52e50f85e8af), + u64(0xda616457f04bd50c), + u64(0x03084250d937ed58), + u64(0xe1e783798d09773d), + u64(0x026d01da475ff113), + u64(0x030c058f480f252e), + u64(0x03e19c9072331b53), + u64(0x68d66ad906728425), + u64(0x031ae3a6c1c27c42), + u64(0x8711ef14052869b7), + u64(0x027be952349b969b), + u64(0x0b4fe4ecd50d75f2), + u64(0x03f97550542c242c), + u64(0xa2a650bd773df7f5), + u64(0x032df7737689b689), + u64(0xb551da312c31932a), + u64(0x028b2c5c5ed49207), + u64(0x5ddb14f4235adc22), + u64(0x0208f049e576db39), + u64(0x2fc4ee536bc49369), + u64(0x034180763bf15ec2), + u64(0xbfd0bea92303a921), + u64(0x029acd2b63277f01), + u64(0x9973cbba8269541a), + u64(0x021570ef8285ff34), + u64(0x5bec792a6a42202a), + u64(0x0355817f373ccb87), + u64(0xe3239421ee9b4cef), + u64(0x02aacdff5f63d605), + u64(0xb5b6101b25490a59), + u64(0x02223e65e5e97804), + u64(0x22bce691d541aa27), + u64(0x0369fd6fd64259a1), + u64(0xb563eba7ddce21b9), + u64(0x02bb31264501e14d), + u64(0xf78322ecb171b494), + u64(0x022f5a850401810a), + u64(0x259e9e47824f8753), + u64(0x037ef73b399c01ab), + u64(0x1e187e9f9b72d2a9), + u64(0x02cbf8fc2e1667bc), + u64(0x4b46cbb2e2c24221), + u64(0x023cc73024deb963), + u64(0x120adf849e039d01), + u64(0x039471e6a1645bd2), + u64(0xdb3be603b19c7d9a), + u64(0x02dd27ebb4504974), + u64(0x7c2feb3627b0647c), + u64(0x024a865629d9d45d), + u64(0x2d197856a5e7072c), + u64(0x03aa7089dc8fba2f), + u64(0x8a7ac6abb7ec05bd), + u64(0x02eec06e4a0c94f2), + u64(0xd52f05562cbcd164), + u64(0x025899f1d4d6dd8e), + u64(0x21e4d556adfae8a0), + u64(0x03c0f64fbaf1627e), + u64(0xe7ea444557fbed4d), + u64(0x0300c50c958de864), + u64(0xecbb69d1132ff10a), + u64(0x0267040a113e5383), + u64(0xadf8a94e851981aa), + u64(0x03d8067681fd526c), + u64(0x8b2d543ed0e13488), + u64(0x0313385ece6441f0), + u64(0xd5bddcff0d80f6d3), + u64(0x0275c6b23eb69b26), + u64(0x892fc7fe7c018aeb), + u64(0x03efa45064575ea4), + u64(0x3a8c9ffec99ad589), + u64(0x03261d0d1d12b21d), + u64(0xc8707fff07af113b), + u64(0x0284e40a7da88e7d), + u64(0x39f39998d2f2742f), + u64(0x0203e9a1fe2071fe), + u64(0x8fec28f484b7204b), + u64(0x033975cffd00b663), + u64(0xd989ba5d36f8e6a2), + u64(0x02945e3ffd9a2b82), + u64(0x47a161e42bfa521c), + u64(0x02104b66647b5602), + u64(0x0c35696d132a1cf9), + u64(0x034d4570a0c5566a), + u64(0x09c454574288172d), + u64(0x02a4378d4d6aab88), + u64(0xa169dd129ba0128b), + u64(0x021cf93dd7888939), + u64(0x0242fb50f9001dab), + u64(0x03618ec958da7529), + u64(0x9b68c90d940017bc), + u64(0x02b4723aad7b90ed), + u64(0x4920a0d7a999ac96), + u64(0x0229f4fbbdfc73f1), + u64(0x750101590f5c4757), + u64(0x037654c5fcc71fe8), + u64(0x2a6734473f7d05df), + u64(0x02c5109e63d27fed), + u64(0xeeb8f69f65fd9e4c), + u64(0x0237407eb641fff0), + u64(0xe45b24323cc8fd46), + u64(0x038b9a6456cfffe7), + u64(0xb6af502830a0ca9f), + u64(0x02d6151d123fffec), + u64(0xf88c402026e7087f), + u64(0x0244ddb0db666656), + u64(0x2746cd003e3e73fe), + u64(0x03a162b4923d708b), + u64(0x1f6bd73364fec332), + u64(0x02e7822a0e978d3c), + u64(0xe5efdf5c50cbcf5b), + u64(0x0252ce880bac70fc), + u64(0x3cb2fefa1adfb22b), + u64(0x03b7b0d9ac471b2e), + u64(0x308f3261af195b56), + u64(0x02f95a47bd05af58), + u64(0x5a0c284e25ade2ab), + u64(0x0261150630d15913), + u64(0x29ad0d49d5e30445), + u64(0x03ce8809e7b55b52), + u64(0x548a7107de4f369d), + u64(0x030ba007ec9115db), + u64(0xdd3b8d9fe50c2bb1), + u64(0x026fb3398a0dab15), + u64(0x952c15cca1ad12b5), + u64(0x03e5eb8f434911bc), + u64(0x775677d6e7bda891), + u64(0x031e560c35d40e30), + u64(0xc5dec645863153a7), + u64(0x027eab3cf7dcd826), + ]! ) diff --git a/vlib/v/builder/interpreterbuilder/v_interpret_test.v b/vlib/v/builder/interpreterbuilder/v_interpret_test.v index f0950466c5..33bd3953e2 100644 --- a/vlib/v/builder/interpreterbuilder/v_interpret_test.v +++ b/vlib/v/builder/interpreterbuilder/v_interpret_test.v @@ -48,6 +48,8 @@ fn test_interpreter() { tests << InterpTest{'println(3-4)', '-1'} tests << InterpTest{'println(3*3)', '9'} tests << InterpTest{'a := 3\nprintln(a*3)', '9'} + tests << InterpTest{'arr := [10,20,30]\nprintln(arr[1])', '20'} + tests << InterpTest{'fa := [10,20,30]!\nprintln(fa[2])', '30'} for test in tests { interp_test(test.input, test.output)! assert true diff --git a/vlib/v/eval/expr.v b/vlib/v/eval/expr.v index 76796e46c7..2017c30209 100644 --- a/vlib/v/eval/expr.v +++ b/vlib/v/eval/expr.v @@ -21,6 +21,7 @@ fn (o Object) as_i64() !i64 { } pub fn (mut e Eval) expr(expr ast.Expr, expecting ast.Type) Object { + // eprintln('>>>>>>> expr: ${typeof(expr)}') match expr { ast.CallExpr { // println(expr.is_method) @@ -434,6 +435,16 @@ pub fn (mut e Eval) expr(expr ast.Expr, expecting ast.Type) Object { } } } + FixedArray { + match expr.field_name { + 'len' { + return Int{exp.val.len, 32} + } + else { + e.error('unknown selector to fixed array[${exp.val.len}]: ${expr.field_name}') + } + } + } else { e.error('unknown selector expression: ${exp.type_name()}') } @@ -460,7 +471,14 @@ pub fn (mut e Eval) expr(expr ast.Expr, expecting ast.Type) Object { } } if expr.is_fixed || expr.has_val { - e.error('fixed arrays are not supported') + mut res := FixedArray{ + val: []Object{cap: expr.exprs.len} + } + elem_type := if expr.exprs.len > 0 { expr.expr_types[0] } else { 0 } + for exp in expr.exprs { + res.val << e.expr(exp, elem_type) + } + return res } mut res := Array{ val: []Object{cap: expr.exprs.len} @@ -532,12 +550,31 @@ pub fn (mut e Eval) expr(expr ast.Expr, expecting ast.Type) Object { ast.UnsafeExpr { return e.expr(expr.expr, expecting) } + ast.IndexExpr { + left := e.expr(expr.left, expr.left_type) + index := e.expr(expr.index, ast.int_type_idx) + if expr.is_farray { + if left is FixedArray { + if index is i64 { + return left.val[index] + } + } + } + if expr.is_array { + if left is Array { + if index is i64 { + return left.val[index] + } + } + } + e.error('unhandled index expression ${left}[ ${index} ]') + } ast.AnonFn, ast.ArrayDecompose, ast.AsCast, ast.Assoc, ast.AtExpr, ast.CTempVar, ast.ChanInit, ast.Comment, ast.ComptimeCall, ast.ComptimeSelector, ast.ComptimeType, ast.ConcatExpr, ast.DumpExpr, ast.EmptyExpr, ast.EnumVal, ast.GoExpr, ast.SpawnExpr, - ast.IfGuardExpr, ast.IndexExpr, ast.IsRefType, ast.Likely, ast.LockExpr, ast.MapInit, - ast.MatchExpr, ast.Nil, ast.NodeError, ast.None, ast.OffsetOf, ast.OrExpr, ast.RangeExpr, - ast.SelectExpr, ast.SqlExpr, ast.TypeNode, ast.TypeOf { + ast.IfGuardExpr, ast.IsRefType, ast.Likely, ast.LockExpr, ast.MapInit, ast.MatchExpr, + ast.Nil, ast.NodeError, ast.None, ast.OffsetOf, ast.OrExpr, ast.RangeExpr, ast.SelectExpr, + ast.SqlExpr, ast.TypeNode, ast.TypeOf { e.error('unhandled expression ${typeof(expr).name}') } } diff --git a/vlib/v/eval/object.v b/vlib/v/eval/object.v index d0934fc9cd..2951a4b644 100644 --- a/vlib/v/eval/object.v +++ b/vlib/v/eval/object.v @@ -4,6 +4,7 @@ const empty = Void{} // Note: i64 is an int_literal, NOT an i64 (same with f64) type Object = Array + | FixedArray | Float | Int | Ptr @@ -78,6 +79,16 @@ pub fn (o Object) string() string { } return res + ']' } + FixedArray { + mut res := '[' + for i, val in o.val { + res += val.string() + if i + 1 != o.val.len { + res += ', ' + } + } + return res + ']!' + } Ptr { return o.val.str() } @@ -135,6 +146,11 @@ pub mut: size i8 // 8/16/32/64 } +pub struct FixedArray { +pub mut: + val []Object +} + pub struct Array { pub mut: val []Object diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 5efb4f0364..4b7e915f86 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -5162,7 +5162,7 @@ fn (mut g Gen) const_decl(node ast.ConstDecl) { field_expr := field.expr match field.expr { ast.ArrayInit { - if field.expr.is_fixed { + if field.expr.is_fixed && g.pref.build_mode != .build_module { styp := g.typ(field.expr.typ) val := g.expr_string(field.expr) g.global_const_defs[util.no_dots(field.name)] = GlobalConstDef{ @@ -5221,7 +5221,7 @@ fn (mut g Gen) const_decl(node ast.ConstDecl) { g.const_decl_simple_define(field.mod, field.name, g.expr_string(field_expr)) } else if field.expr is ast.CastExpr { if field.expr.expr is ast.ArrayInit { - if field.expr.expr.is_fixed { + if field.expr.expr.is_fixed && g.pref.build_mode != .build_module { styp := g.typ(field.expr.typ) val := g.expr_string(field.expr.expr) g.global_const_defs[util.no_dots(field.name)] = GlobalConstDef{