summaryrefslogtreecommitdiffstats
path: root/tests/comp128
diff options
context:
space:
mode:
authorMax <max.suraev@fairwaves.ru>2013-12-02 11:30:32 +0100
committerHarald Welte <laforge@gnumonks.org>2013-12-07 18:10:38 +0100
commit4f0abc0e3eb553c94e8e409ea14a1b047efe3028 (patch)
treead3ce264e1640fc0bfa732e08f2f733d4ba76f73 /tests/comp128
parent56cc60dc2079a63e983d746689fd03d9a48ea8f5 (diff)
Refactor COMP128v23 implementation and add test suit
Diffstat (limited to 'tests/comp128')
-rw-r--r--tests/comp128/comp128_test.c2123
-rw-r--r--tests/comp128/comp128_test.ok2050
2 files changed, 4173 insertions, 0 deletions
diff --git a/tests/comp128/comp128_test.c b/tests/comp128/comp128_test.c
new file mode 100644
index 00000000..eb6fb12c
--- /dev/null
+++ b/tests/comp128/comp128_test.c
@@ -0,0 +1,2123 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdbool.h>
+
+#include <osmocom/core/bits.h>
+#include <osmocom/core/utils.h>
+#include <osmocom/gsm/comp128v23.h>
+#include <osmocom/crypt/auth.h>
+
+static struct osmo_sub_auth_data test_aux2 = {
+ .type = OSMO_AUTH_TYPE_GSM,
+ .algo = OSMO_AUTH_ALG_COMP128v2,
+ .u.gsm = {
+ .ki = { 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA },
+ }
+};
+
+static struct osmo_sub_auth_data test_aux3 = {
+ .type = OSMO_AUTH_TYPE_GSM,
+ .algo = OSMO_AUTH_ALG_COMP128v3,
+ .u.gsm = {
+ .ki = { 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA },
+ }
+};
+
+void print_check(int rc, char *res, struct osmo_auth_vector *vec)
+{
+ uint8_t buf[12];
+ osmo_hexparse(res, buf, 12);
+ if (0 != memcmp(buf, vec->sres, 4)) {
+ printf("%d FAIL SRES:\n", rc);
+ printf("OUT: %s\n", osmo_hexdump_nospc(vec->sres, 4));
+ printf("EXP: %s\n", osmo_hexdump_nospc(buf, 4));
+ }
+ if (0 != memcmp(buf+4, vec->kc, 8)) {
+ printf("%d FAIL Kc:\n", rc);
+ printf("OUT: %s\n", osmo_hexdump_nospc(vec->kc, 8));
+ printf("EXP: %s\n", osmo_hexdump_nospc(buf+4, 8));
+ } else
+ printf("%d OK\n", rc);
+}
+
+void test_comp128v3(char *rand, char *res)
+{
+ struct osmo_auth_vector _vec;
+ struct osmo_auth_vector *vec = &_vec;
+ uint8_t _rand[16];
+ osmo_hexparse(rand, _rand, 16);
+ int rc = osmo_auth_gen_vec(vec, &test_aux3, _rand);
+ print_check(rc, res, vec);
+}
+
+void test_comp128v2(char *rand, char *res)
+{
+ struct osmo_auth_vector _vec;
+ struct osmo_auth_vector *vec = &_vec;
+ uint8_t _rand[16];
+ osmo_hexparse(rand, _rand, 16);
+ int rc = osmo_auth_gen_vec(vec, &test_aux2, _rand);
+ print_check(rc, res, vec);
+}
+
+int main(int argc, char **argv)
+{
+ printf("COMP128v2 support: %d\n", osmo_auth_alg_parse("COMP128v2"));
+ printf("COMP128v3 support: %d\n", osmo_auth_alg_parse("COMP128v3"));
+
+test_comp128v2("00000000000000000000000000000000", "34B4225BF16B96E118A85800");
+test_comp128v2("00102030405060708090A0B0C0D0E0F0", "A892A8EFD6D33E3650372C00");
+test_comp128v2("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "F699F0BABA87114F0350BC00");
+test_comp128v2("000102030405060708090A0B0C0D0E0F", "A5B4C7CA0514C4E1B25CBC00");
+test_comp128v2("F918FB140A2D63E10B9B3354C93D5816", "C1AD6FE372383E0D6AAC7C00");
+test_comp128v2("CBFE7E4156F94F1E6ECA59C194A9BED4", "3DEF079216A74B97B4ADC800");
+test_comp128v2("B65CB9DDC667BBDA3F493FB4BA2CA2E9", "A846E7EA48C2E85F1C115800");
+test_comp128v2("23E0F6ED14ED2596A3B11453786E7C2C", "73280CD483E7DCDE26F94400");
+test_comp128v2("CB5CD183A1D26D1CF75D5987D20CAE75", "055DF715899926BD0D6A0400");
+test_comp128v2("1E99C6D07A0914E101FC2094406FB46F", "0A500680A860B1678C749400");
+test_comp128v2("F9213F7452CC291C6B64F990DFC219CE", "6273439D25CA01E321505C00");
+test_comp128v2("21C5CCC4CDDF8D016F82788BF2863718", "404F028B1F31A67A71734400");
+test_comp128v2("1561F279CC3FC8D7FDF7703C3755003B", "7081294CCCF3AF9D87CBBC00");
+test_comp128v2("360EBBC222F116936F55772663FE0131", "D30CD39641B7771E2CDA2800");
+test_comp128v2("D7FDC4BEFF3E172607BCAFD0FFB8414E", "656222C3E481A1AE7B42BC00");
+test_comp128v2("D832114007244CEB3B05AA50F60A1DC3", "EAE9BC2A4D1DD802E9ADF000");
+test_comp128v2("CCB8CAA7DC27AF527F75385BC9CC943A", "2A43B559362A6DDED82E4800");
+test_comp128v2("48BD98472929D5D66FDEF005FD1B67D5", "0EA9FCAF684D3416C187C800");
+test_comp128v2("97A67270ABC7807CF3F7D2D668D9EF2C", "510DA1D26FA933C86D0D2C00");
+test_comp128v2("5CF1FC3916B9631D04E763003CB0AFB1", "EE2E83CF08A00B0A1966C800");
+test_comp128v2("18F91C80B5CDC5A5A95A187EF66AB0C0", "0182E8AFDC4092FEE382F000");
+test_comp128v2("248B68303F09476AE2E72342636E6D9E", "D78DF0808D19FBF8B703D400");
+test_comp128v2("340D4544F8559C61EDF7F4216E70C576", "2480A75BF304AC7AC73F3800");
+test_comp128v2("CCFE030B6436D949082ACA45077C9193", "85A18AEA5B9BC2B7A376F400");
+test_comp128v2("3D0754700F6A1D2C704921EC67AF3ED2", "2D337465329B474F67975800");
+test_comp128v2("9165BF37C63326F8CE9CD03F9A1378BC", "DCAEA3C710D0D67DD5B3F400");
+test_comp128v2("9DCFA432DFC4F1FF19A441F32A5D8597", "F010B99B63B7E6F75DE6C400");
+test_comp128v2("1DE9D2AC71DF86E5A599017A692CB4B8", "EB93C952E8C616D6C2979400");
+test_comp128v2("261326154E44C794F5A91935182CFF40", "B27DE0650A1FC35AB045EC00");
+test_comp128v2("3F299BB3EE46BBB4ADB5493B4A2CBE5E", "67838DEDAA2242B6BB237800");
+test_comp128v2("CFD033BE76FE261250042457B40445A2", "863CA702CF08A47B3CBD5800");
+test_comp128v2("FCCF9EE60A80EC9F7BE413A50CE60869", "14D1B0D8254D474C999CC000");
+test_comp128v2("A966B4A739358CFD6EF22A9A660785DF", "6894BA1EF235BFA46A0E7000");
+test_comp128v2("C1F8AD801A7441908B0597E186EBF2C0", "C4E9F13F0C19A76F7EC9CC00");
+test_comp128v2("ACDF541A969C68703E5DE37ED0B7CA09", "832463CBF662B2A72D4BF400");
+test_comp128v2("274F7ECBD2AF639D9479FF4C73815E1E", "D1D5AA0F491ED442716D4C00");
+test_comp128v2("3E4FC9C886E4E5A8EE89AF61231857CB", "323C4D161E55610BCB0CCC00");
+test_comp128v2("E0F4130624669860131BD80D85A3F1F2", "07DAEF70D14DFB9988C5D800");
+test_comp128v2("DD8C39429A107F263B2A5F596A501905", "1417946345034965053FB000");
+test_comp128v2("A95D7E54A42604BAB557A0BDA4F50CC1", "D1683BA6DF50CAC2508CA400");
+test_comp128v2("140C6662233AD66D5AC825D80A9A8272", "A0FAA92970DC0E98AB406000");
+test_comp128v2("EEA61DDED13D0E0F2DCCB71ADD551B7B", "7240AF352D215FE4B4762C00");
+test_comp128v2("E4C84D1860B03C3DC2010FB6AB3E4C47", "30576C1054878023B505D800");
+test_comp128v2("747AF0FE3B3E903AEB6191EA01DC9F4E", "4CBAD22E8500464CFD7E4800");
+test_comp128v2("E607B88BE14E5CEE43594EF51A0725BB", "1D79DBF69D7E2350225D9C00");
+test_comp128v2("4002BDDC83EF54ABAE5442B0A8E976B9", "6CB6D7673428D2D2E84BC800");
+test_comp128v2("AB8B27FE3F278CFDAE085F236A0A28E5", "06407FCB02EBF61123C57000");
+test_comp128v2("6883B190F8EC18305BAAF6429E817BC4", "C17A6B9AB444C1A9DD448800");
+test_comp128v2("18DC6B25398F64FAA4A740C617E9D591", "F88F9FA28DE0500403AC6400");
+test_comp128v2("2735F287D3AEDDD35C204628322D3899", "00F5692A5F350599985AC400");
+test_comp128v2("5FD7E3F81F3671F547B94D9F6BE7A348", "FC9DCBBB4FD0580F9D196C00");
+test_comp128v2("4A316F08F912FC534D8E204129C78974", "855C814274800A5C45B3B000");
+test_comp128v2("960CB8BE1B5025F3EBBB55EB0D79890E", "E1CAF3B52DDA529D0B694000");
+test_comp128v2("282461C3FEF2ACC7F53E640AAA8279FA", "52F8D1327B2A1B5319025800");
+test_comp128v2("BA4DF10402E2E5956DE8DA1886CF14E3", "DB2D97F66B679B4D12661800");
+test_comp128v2("33B82F56356D44D6A790ADD4F4CE9FDC", "694EF7DB3E35F50726159800");
+test_comp128v2("01FDE145E42A4A0F7CC97B8CF4A216C1", "4391900FCA30173E63A39C00");
+test_comp128v2("61259899F937B7403B2EC70ED9D32384", "F51BAF50F8CE1A64DCD25000");
+test_comp128v2("0E6F0DC32693A7EF677C37BC44CE8600", "C110634B037031745F401800");
+test_comp128v2("1283E739566C46FC1041C2EDF46ACA63", "4C74EFAB8A6522A010F09C00");
+test_comp128v2("CE7B368B575950EE69D82D3CEEF59E7D", "FE9FF88A94F0A490335EFC00");
+test_comp128v2("DB0D3AE84486ED465CFD507F6B321E2F", "76D1679FAABBBF1FD3E79000");
+test_comp128v2("BBA5E23EED1E43EB3AFCE2ABC5FDF71F", "022E2C5CFE2B4C3EBDC41000");
+test_comp128v2("B0B9EDB4BB979E3CA9630F8CCC3FCAA2", "1775CD2F9C4A6DCE9503C400");
+test_comp128v2("4A68C3FBD3A74468D486308DD1412D31", "77249441DF2502778FF3E400");
+test_comp128v2("9AB0D6DCD8251E4BBB78BFACF5823C7A", "E7499452B5C45C1A7D15BC00");
+test_comp128v2("B62C6CD3A87425B29DA8E226B28C3617", "D4A1FC8107EFFD9ABDB01400");
+test_comp128v2("A094A045959D9A589F3BBD28D908CBAE", "A20ADDC80477942E1B390800");
+test_comp128v2("3C76356D4AB3CDEB6AF36AE27653676F", "F192C4B354CFDC97186CD400");
+test_comp128v2("04ADB833E08A91A26BA932A9BE9DC4FE", "A86826C01F6B291290F21C00");
+test_comp128v2("0CD25169C9CE123475F394ED818CDACC", "F0219A28F767E219F029D800");
+test_comp128v2("758F9B775D80F66C2F46F45C13D14EA6", "A20754DA43C43FC4C387D800");
+test_comp128v2("501418ED3CFC481399ABE1522CE9FB1E", "42764FF7641AB6D55C796000");
+test_comp128v2("2D7333EFC9B3DB86C43ED4A440BB02D3", "9AE0F630A52EE42058852C00");
+test_comp128v2("BEE9E64A0165F7EDEDED06BB7AC0D11C", "B436CC2DA8B4E083D0967400");
+test_comp128v2("A342BA3D24D7CE59E44C5F1E6F3F28AB", "47BC33CA9A6D94596C8B0C00");
+test_comp128v2("423580E3B8B42BE68E2FCF0805A369A7", "34A0F45FE614F578B9504400");
+test_comp128v2("C81DF1E755DCA874A97FE2C8A2030A45", "2B5D9AE2B659D2920CAF9800");
+test_comp128v2("00B065F6BBD7142C0D810D81348143E1", "0CB323266C1993A44D335000");
+test_comp128v2("D0DE9876CCA615D16BE541659FD8E0A8", "F313600462BC4C2BC056DC00");
+test_comp128v2("1C02F9836A1C0C334AC68873C1A95DE2", "E913C4B6BEDC8F011042CC00");
+test_comp128v2("CC2686858921BD2A970F3364C1BD8154", "CD6AB5F8BE1967E637F11C00");
+test_comp128v2("EC5A44CE58F654A751AD1F87C7468E22", "E5B372CDD142BA7523ADE800");
+test_comp128v2("F7B93A2ECA12B2F0A7AD2B550781A311", "AC1D56004C3DB4248A2B9800");
+test_comp128v2("95A26343BDAE219F9A77E2D68B8D9715", "B8E2274BA75A01A1B844FC00");
+test_comp128v2("D9EF207AF47750EBF69E81669A0D7168", "90BE7292A33AFF976AF50000");
+test_comp128v2("CB095420C757A88E23E845F90010CE60", "5D5267614E4868BC9019EC00");
+test_comp128v2("43DA2FBE69364674ABE7A67EA1079F7A", "11602A06755795316CC2D000");
+test_comp128v2("9F3145932F5712D7767278650BF038C3", "62F7DA68B860F0EAC85AF000");
+test_comp128v2("6AC7C8825DE45A64EE61E175A4212CA2", "1564273CFC0D44D3AA813000");
+test_comp128v2("A81B3F8E35F3B77A681E581E81992245", "DEE4D4C1C210AD3A88208400");
+test_comp128v2("DA6EDF93A83A4F3390C7A74448F3EA58", "DADEFCC4C903978B5D968000");
+test_comp128v2("FEABCD9A4566FAB5CCC225649A9B51E8", "990248308A158336AD8CB400");
+test_comp128v2("F5A9320721897F9C4010CC26806DCC6C", "4E9483834C11A3258B735400");
+test_comp128v2("6A3BD4D5FC62586DA382EEB13EC5B98B", "C0BC1F742AF062B2C57F6800");
+test_comp128v2("657502B51422A9DF5D02215A3211720D", "ACD94B7C1B42B827ABB4B000");
+test_comp128v2("E601807D685AC33884F10BEE2B0F7155", "8E555A2E5483666FF8E9EC00");
+test_comp128v2("D081597E0807CDCC345E64EE06A656EE", "252F83F942D3CBF225A5BC00");
+test_comp128v2("AE911B26A2AAAE1690541AD7C4AEC12C", "C09DFAD45B847939AA6F5C00");
+test_comp128v2("D32460B8EA2DE870AEEF9591E2B945E0", "415F30A507DFB65D21E92C00");
+test_comp128v2("3EF290EAC6ED5506430691F6652AD256", "BFDA7F8A4AA126AD5D832C00");
+test_comp128v2("96E50BC3013669B9453CECED3379BB9E", "3127EBB45E2170FF88B6B800");
+test_comp128v2("50CD8707C942E07374A604419F328627", "997A146971E7F9F173930000");
+test_comp128v2("F5D436A55F52CF178EC755D9B851C2A5", "526DA1545DB57E300BD2AC00");
+test_comp128v2("59D00634939E1296D628D762D098359B", "29CB71E3C1D6D8F598FCC800");
+test_comp128v2("A50B3BB3252C3C9E16C12396F3894607", "A1107E2B8910AAD9F4098400");
+test_comp128v2("89F8344B973576425ABDFE3466A7C99F", "3335275BFB59F6DD11903C00");
+test_comp128v2("17095FF0861CCDBBE7EC9DDD97CF9FD8", "1952EB05C39002CB2533F800");
+test_comp128v2("00319ECA71633B48AF1CF6050FF612EC", "8DD0BD48A4287D3987225800");
+test_comp128v2("FE2BC8ECEC5406BAD2992A903A516162", "4DF20DADD02875F1F6DB8C00");
+test_comp128v2("2719B57237F55AA6F967EFAFFAB491D3", "E9584869A08303981DDF3000");
+test_comp128v2("E9895484AC5350C6020D47BECFE5FB53", "183CE56373954D52E0BFF000");
+test_comp128v2("2E4CCA78B5FD8FEAE8F593DA046F7D39", "B2EAAA3360B2AABD8923C400");
+test_comp128v2("F3B1A9F9D5F83540037EA0EA78A8DE90", "12147C976D7BB13BFE9BCC00");
+test_comp128v2("DD32C4C62D3CE942B5FFBEB6D4A5F2F8", "45407DABB4B14DDFC8FA5800");
+test_comp128v2("B34F7F0BD6B2D777C0817F82E3052AC3", "FDC03BCD2DBD999561344800");
+test_comp128v2("83780E5C93048E6A2A060346ED2BC544", "6AF2A4F18731A281B75B5C00");
+test_comp128v2("B64A86EE50BB1C02134F11CB431C5069", "36AC5A0B2CB95F686E3F1000");
+test_comp128v2("FCFEB28D9732B937496FE96CD11B24B1", "E23CB44D586FE9FD19FCF000");
+test_comp128v2("61664DE891B324D7C1402E7B80C68B17", "EE3A9940C7A09853F8D9FC00");
+test_comp128v2("8B173E8CA34CF9DA56DBE336196941EA", "F703154C9730C5AA58FBD800");
+test_comp128v2("4D21217A48E9EFE24B4704EC10B85C6D", "D56C16F7F97B8CEC06BEF800");
+test_comp128v2("FFC69A387F0435BD58C13FCB913F60DB", "5F63F9197F0028ABC70F4000");
+test_comp128v2("AEDEB9AEF7408837DD4BE51498ECA4AC", "1216B27EBE081A8B58880000");
+test_comp128v2("14A053B1F95E86448F73D2FFEFC7FE3B", "2B9BD41CABF325CB93BD8C00");
+test_comp128v2("6881901AF0FE3333627FEE84795A70FA", "651BD7D5B6DB33C5D1B0EC00");
+test_comp128v2("196577B50A4C9BF7A208E4533219D468", "5E251C34B40822FCC476C800");
+test_comp128v2("2ED5196DC635F8603196BE9549BED8AF", "BA9B3440ABEF67B108421C00");
+test_comp128v2("FE09F4C92966BA06163AA644D6CE5D7D", "E07AA3D335E25B9303671000");
+test_comp128v2("18A117FDE347F64B3CA01F0F10659596", "4059BD729905578A62A29000");
+test_comp128v2("6877CF2C157251B5A97904F8EB337B8B", "2B1A0A31984ED54C1D3E4C00");
+test_comp128v2("4236F749801A93FE1FD95324A24CE1C8", "2092ADDFF5D50EE60E4ADC00");
+test_comp128v2("B9A4020F7EFDA03BCFB46FE31200708E", "80685309ED5215AD37C5C400");
+test_comp128v2("574B8C41C4594499D037D3BF5084F167", "218AF13232BA26852E95B800");
+test_comp128v2("5D7E99E0D35742E0D80A85F243606F28", "1B54FEDD20031F7C11533000");
+test_comp128v2("40EB7A728783CFB17363744C8960C966", "ABBD5EC9F78951FC73C11C00");
+test_comp128v2("6C7826A1F1B40323CF57C7909A83E2D2", "91C94F666B08EBA4EF7E0C00");
+test_comp128v2("61E2456FB48EFBDB946DF0A3F298BF41", "9E39FFDC1C8573E4DF224800");
+test_comp128v2("0B3BE969A08BF4CE4BE98D6CC0BC7309", "152512315F2CD6A3EC1D3400");
+test_comp128v2("A6C41AB03860DD83608098111AAEB4E9", "57A99A60C2B9DA9E26C85C00");
+test_comp128v2("6CD88694601229E809C13775C4E761E5", "18017C263C41817B9ED6A000");
+test_comp128v2("53F16F6A6B6D2513CBBD0D63CBCFF990", "115CC0B613458C1F17DA3400");
+test_comp128v2("4FAC9C89DEAD012D875350CCCD6DF9B0", "3CA402F00396AE4AE375F000");
+test_comp128v2("61C960DAE03E40FC1F56BC1C71D37E06", "4E5128E99E89BC59D51BE000");
+test_comp128v2("4DD845C43A81DF92E90B83504E159B85", "35C382EFF558E66A0822F400");
+test_comp128v2("2315D98737F65C690EE46743434DC239", "36A2E24DC3B5834D198F2400");
+test_comp128v2("A63680047A7750B42313F2D3B878662A", "C3D10EB4D222A75C63383800");
+test_comp128v2("3934F208F33EB583661F36869C73FBA8", "890536E7B8FEB54E97526400");
+test_comp128v2("4A9F494AE875A5314FC40DEEB9DB9985", "A14AE3B8501B7B5885947800");
+test_comp128v2("E6BC8770CA7ADC109185683CF4666D9F", "69748080DBE0959AACCDBC00");
+test_comp128v2("D2EBF8E248B694CFFD41BA7428668159", "1401C448FD719A421363C800");
+test_comp128v2("A7AF83C2D4448241547B3425A8CD34C0", "5A8B14DBC9E50CD5C3616000");
+test_comp128v2("D95594E46451C524B586913F80965237", "830C1CF57919CF7C3CDC2800");
+test_comp128v2("C00B2713CC2E4E2355DA502E1B521001", "FDDFA77D186A5B4BDBD12400");
+test_comp128v2("0B8D598E6F13F1236DACC84E456F0E01", "B471887B4A040637264DE800");
+test_comp128v2("C652FDF2912983742E177C0EA30F2E61", "C42F84FD9CD6E7FC37536400");
+test_comp128v2("6B655E5F7B56B51D7E254A9AE69E44C8", "48721AE298AF66D7CDCC9000");
+test_comp128v2("5A900B611A5B17D82D4A2EC8E6544090", "F4A51C7F4E896653E5140000");
+test_comp128v2("554C91377E43AD28215056E8AEA5DF4C", "B566C947F785B9B830080400");
+test_comp128v2("54725198690B36F0C6A4DE05B0E79E47", "BBBBDA64D8B739E6D5038C00");
+test_comp128v2("0BF03AF40DED5898A8D1C657846ECDE3", "4EE99919522D100349F9F000");
+test_comp128v2("971B0989CDE6313ACE7690BD2C2BEE09", "590684B1A33F255BB9D40400");
+test_comp128v2("32E1BE35019575931694A33B7B0AA049", "BAA62EC15FCD29F7BCC9A000");
+test_comp128v2("7B601512FB8D061C1B6F7FA423733F8C", "82C1C97CC83A920346C47800");
+test_comp128v2("F0A3B5BDC514E4F20060D83A61A9C711", "684138DD3D04B3B15E11CC00");
+test_comp128v2("4F2F20EEE54D82CBA6FA087B242CA6A8", "7F445E9AF2735B2C29E33000");
+test_comp128v2("8F357399AAD7B59AD790D55C55FBE3CC", "86DB5E7D9F1E83A870067000");
+test_comp128v2("511141F30BE586D039080ECD3822F2EA", "D358B8FFEBE9FF38F0EF6800");
+test_comp128v2("B62E2C043BDCC5A1741ECE60DDE598CC", "D5E1BBBA61272C8E9375E000");
+test_comp128v2("1F0F950D094BF35F9657D68E5018B9A8", "BD37BD448CF9A5DDD7E87000");
+test_comp128v2("DE30802335604EDE8F943169A72E6A68", "EC184C8434883302B00D1400");
+test_comp128v2("3DBB9938C7C4B14E1D5D07DD616B4E0E", "AC5A0D23DA694B6128547C00");
+test_comp128v2("D26257D4C9CE19B09774A9E0C86E335A", "4C8C3DA2D021243593C7EC00");
+test_comp128v2("B7CD31F340EE67C49D651E1C3042D2C1", "A20D985A6C900427C48CB000");
+test_comp128v2("D763E4A31FCD50F595E4666BD91B8EA1", "3BAD6E389FF168688284A000");
+test_comp128v2("41DEF6924472D84434CE2C7D96881F3A", "B0EE0C304599D3AC58018800");
+test_comp128v2("0CDEFB71C93D7B5EBBD6CFD85EDF9C12", "7C225B5EE5301B2F71E1B800");
+test_comp128v2("C2A41CBC63F2F8D34FF1E47FC9B7660C", "DF4D16A7EFB8B8BB68450000");
+test_comp128v2("7F490D52DF1330100CC6D4EEAF8253EF", "C501BF91F2BFF6B811393400");
+test_comp128v2("124A768E3593AF51297D2740AD0200A9", "4CE1215F737876BD5E89C800");
+test_comp128v2("39B8F95D2406756066A53C4E705F5190", "017D2D2F27C605B783B7E800");
+test_comp128v2("1F4511450C91823B333BF3372B1616CB", "7EDE3A2F55D86D2692B00800");
+test_comp128v2("0762815735FF7B22BB73A35F2B98BCF3", "C5F15A6612CE3312682BF400");
+test_comp128v2("3E3A81D6C95B5BE0866EA8E077241131", "0F8E225A21CEE88570BF8800");
+test_comp128v2("CDC633D112AB14B86799836799589EE0", "41D8946A92C3F5DD4D4F5400");
+test_comp128v2("E1655B3EADFAD31AD5A077A22DF28AFC", "16D609AEE5FC4A24CCDD4000");
+test_comp128v2("C73E501E952DD572189853B6BB173A4D", "A9E890D3DC0B1D4A0B295C00");
+test_comp128v2("A1D2F09DF9A48878D0124C469BD7F413", "35DF82BD4899DC7437B6D400");
+test_comp128v2("BE1CA7C52223B34080503DDD9F84FB7E", "8449AFF4E3C8F31BD76DFC00");
+test_comp128v2("44D343E09285E36C1ACC9494753A8584", "624DB556732775366D708C00");
+test_comp128v2("61D91B4E360F4F5C7EA25DFFDB081AA7", "8276AF99F7EF234573014400");
+test_comp128v2("FDC7AD732965351CEC95D5AF89254921", "7E1DB73398B30B957DF8CC00");
+test_comp128v2("1A944BAAFE83C95B9349782F5974B663", "5A51D44FBD0A2BAE38195400");
+test_comp128v2("2941043DC4CD9975CCD5B57B11055787", "5A506CD76E9E008F4141C000");
+test_comp128v2("E5547C0BE6192FDC79A0E77EC8E7D726", "6CCCCB1940F444EBD2FDCC00");
+test_comp128v2("A53F937180266161BEFF102A4AF616C5", "5287128B3152083765EA9C00");
+test_comp128v2("9A15EFCB21BF0E8002FEDADF8542D8B9", "4EFF43E5E4F8FEE77F8FFC00");
+test_comp128v2("99F84D1074D0E4A89AB99E79894D990E", "01A6BEC2FB1491F16AD90800");
+test_comp128v2("7C09FC1D74F44970D826CD75BD76E4C6", "4AB57C72DE6516B54FDFA000");
+test_comp128v2("34C365219A6CB004FFAC21098E9BF4F8", "E8DACB225DA9120AE8B7F800");
+test_comp128v2("64938FBDE2C7C8BD27DE7DE71D936F8F", "EE4AE4535176DB9BF2B7D400");
+test_comp128v2("D6F53EF3D8213BD92E370F9565119A36", "D3F4E0550CA140F329096000");
+test_comp128v2("A3728A2E35B9109737BF41A7CE3BA88E", "AD7857ACE57489FCE8475400");
+test_comp128v2("C5A46566E17F20CBB22ACBA0829B3A35", "53188D1D79B9AC71E12B7C00");
+test_comp128v2("49C327A37B243C502211059ADC2B928E", "92D49AE27BAF11CD61DF3400");
+test_comp128v2("4C013269FB730DD9B4B87867F285692E", "7F977070217337C997B27C00");
+test_comp128v2("C08BDB2794795CFA4AB1626D23AA49EB", "4248294453FCAC270C119400");
+test_comp128v2("6650F32A56DB39C02711D06D361AE5A2", "AC1869DD89ECFC26E19C9800");
+test_comp128v2("DD10CB3DEA808A7D0C1F666AA3FDBED7", "15CBA9F20FCA32D7F03C8400");
+test_comp128v2("C088FC4AABC5D08B3B842E90883EF20C", "B64B2FB41EB4CEA224AAD400");
+test_comp128v2("9C3658205884DDE93389FC595DA95F3F", "A9C1907D30E26D51BA496C00");
+test_comp128v2("D386F98BEC1386870DD353EF8BEFD0EC", "9F2DAB5417E2537C78DF1400");
+test_comp128v2("32D13296BD30E931C2EF187B9C07E676", "099E66F116225F2E5FCA5400");
+test_comp128v2("1B3F10C760DB7647994D6C1AB8B0E27C", "88B59F43AB9F746C3AC3D400");
+test_comp128v2("7F56EFEA97E53ADBD8A28E6784D4454C", "A3A64F72AD0A3D1414876800");
+test_comp128v2("DC15015AF77CA3472D9C722ED2C6765D", "202ECCA412CA0903D2E46C00");
+test_comp128v2("5DF5D4D07734814F50D24C28D4D133D6", "75445158435F68E6138F0800");
+test_comp128v2("0AA8ECCADE7C3DDE1E33CCCA904F87A4", "7C36F6063668D0871E35C400");
+test_comp128v2("D5DA6CFA0EA9C893E0C31EAB8F07C265", "A4B70423146ED051AB678C00");
+test_comp128v2("CA0DAB9743D4641EDA047DDCE7AECCA3", "43B666DCFFAF925608CA3000");
+test_comp128v2("C8B74AC8B6096E5884601F4E1DDBD174", "1E8E15E0F1743837DB3CC000");
+test_comp128v2("5F60A4B2AC4B3FE14259CFF7B9B9B9DA", "6EB7E1212271898211BB8C00");
+test_comp128v2("E3CD19D5573DFFD6E493C4DD7337758F", "13130B7A1E66FF00ADD89C00");
+test_comp128v2("9836A1AD51EE33A05C1AB926D13177F3", "803B815E3D4A015D69AE0800");
+test_comp128v2("2A96EE958A39E9F57FD81B873F32F0C6", "82825219B94D4148364CEC00");
+test_comp128v2("DEF7C00F0ED8BFA5E29FB0316BA10293", "C1599BCEA9E04812F33B3800");
+test_comp128v2("CF8A6B0BCC3285827DB9D471479A515A", "60236043F506676EE874A400");
+test_comp128v2("4332F66E5C8FE9B2A374A807ADD3489C", "E76B4BD39247441C69731800");
+test_comp128v2("B6B1A9D4F4B82AC72D820EF143F52BF1", "BFCE82DD74C8ABF9F4C3F800");
+test_comp128v2("41955313F015B3E391555E7EFD20D94A", "CFAE1992CBAFDC38113E1400");
+test_comp128v2("99F3AF88D90DA2AB226EEDA86816B73C", "385E9AABC4B633422F7F4000");
+test_comp128v2("E497BC27A587261123B53562665A0421", "EA6B9CAF5418DEE2B0C48C00");
+test_comp128v2("A881F3D91DFBBB74427980D76B6331B2", "E1258AFE12F8EFE020B58C00");
+test_comp128v2("8A5FB6205C5BBA89FE76DF2D32C9667D", "04608F77B0B37BC1645E1800");
+test_comp128v2("E282B8E50A4C89F996967FE3C97D4376", "A34FA42A7429F439A09F7C00");
+test_comp128v2("1BEA1A3C719CFF988D49FEB1E66BD4C5", "58095EA3DFF0E4F55C649400");
+test_comp128v2("D21207460046447600836E81933C2987", "5D3B6182D866461F597F5800");
+test_comp128v2("86DC003A1E7352404118C4A6BDF522D2", "522B03EB0142EB27B813C800");
+test_comp128v2("FFF92D1920F3AAAB2ECE380817DB739C", "8D193BADBFAB72BF8AB02800");
+test_comp128v2("6D169D93541BDE4543214B3905A573F9", "3026B85156E7E48078DD4800");
+test_comp128v2("5E8B626C2461A81224E29EE751E578E4", "DCEC75A33337B20D084DB000");
+test_comp128v2("E5DF990790E1F9D245F0840E90C845F9", "5D43D9C00D5DFEEDA9632400");
+test_comp128v2("4F1733D5BDDB0FC3BCFF3A095EA63FAD", "C3190679E66A34EF6A7FB800");
+test_comp128v2("47E6B7544D18B2FE7A6910368080CF69", "8AFAC9EA29F6FD5EF3CBF400");
+test_comp128v2("A015E3BC2CC8B20D1F9BD245BE00D935", "6F8DDCB4C9CECC28493E8000");
+test_comp128v2("850745B3A941130D04F76F07BB7DBD2D", "CE82AA1D16E2D020A1BE0000");
+test_comp128v2("F9EE213796256B136B6503C06FECB90E", "BCB277A4EF1AA561D1341000");
+test_comp128v2("326CD7C58707E7D934772FA1A14E16FA", "B8DE63537B49F9985ACFCC00");
+test_comp128v2("8D495E6E54EEDDDF0EEF870FE4952568", "CC5F16CD030F0E8CD1A58800");
+test_comp128v2("74E8879783B60C994471D29F7D06168B", "376BC13CA72BB41E5C3DDC00");
+test_comp128v2("9EC9382241ED63D96B4D1C32344E1AE0", "D83B4BECB683510AB6948400");
+test_comp128v2("F35E046CB410739F29DDBE66DD5F37D5", "1A5A5308BA48B041DB62D800");
+test_comp128v2("286C8D04A4E136AD2871F6173640D84A", "7A89F034584E9F8550028C00");
+test_comp128v2("A16B18F2C459C143EEFF761842BB578F", "484459E01603A7A52320AC00");
+test_comp128v2("A8188E3D3E1C1BB3193E45E3D300FDE2", "C1B8C534338CF19DE6EC4800");
+test_comp128v2("5C04D2F4663E98094BBF664207CA5AD8", "35187E89549EBFCC31894800");
+test_comp128v2("21637583D2915E0AC78C44BF8D6B8529", "73D4A069B4EBE3A7F9B3C800");
+test_comp128v2("7D30DF857DAED4EBC23AEFF59558B1B1", "1905B164D13A1493F43E7800");
+test_comp128v2("0761A9113C550E71D4A001D6F2651E62", "191662FEB0B15243BAB64000");
+test_comp128v2("1DF95FF090CAF75AC07F888E70F60BCD", "58EB8C5A5CECAAF234DDB800");
+test_comp128v2("2A4E9F6AAE94DE7A282FE59371E75034", "14B519C690ACA88942B1A800");
+test_comp128v2("50A4BA3A673775C82A273690ED2FE960", "92EB9C62BF57A3462A081400");
+test_comp128v2("89E484024EF1C40A108D261A39298AFD", "2F2903D5DC9FFC4AAA17DC00");
+test_comp128v2("10DCA6BDA94F80E7239120EDF9231AC7", "67B830467AA2C76B8A83B400");
+test_comp128v2("70A961DF5CCF1C45D26AF50541C3ECCB", "B19AC7232C7E7ACEDFF6F800");
+test_comp128v2("7B338E1357DBAF14CB0D1AB035928F71", "83EE66B91C1CFAFBE8C5A000");
+test_comp128v2("F68F8CB5C1EAD184564C0B518D2DF608", "35E056CBD8D692CB54555400");
+test_comp128v2("A0B4F049C406ED5FCC1AE8FC690BD520", "9556CEF79B478627D5D4E800");
+test_comp128v2("9E8F808AAC6301867025A4C7B247FBD8", "58950816A5768A4FCCCFFC00");
+test_comp128v2("AC5DAB1E100A506A6114696EDE6A064F", "94A4116760CE7D8897D08400");
+test_comp128v2("8601AA0166D16DBE7320C9158D0700EF", "F4E00766FA137211703F6000");
+test_comp128v2("7D0E95EBA4BD16E3C6B538FB723FAB93", "3D231451211EACBA3DD42800");
+test_comp128v2("EB41290ABEDE397978C898B02219908D", "5EB704A737FD1C97848CC400");
+test_comp128v2("230DAD3A95D90EC20EBC8EC573781B06", "CC0A164A00B54DBF2BA99400");
+test_comp128v2("0769460FA069E0DE021693AF2B923CB3", "4AD863E830BE2F6013FD8C00");
+test_comp128v2("DCF8186B27A4D60588375B514EE8217B", "6BA6F69D924AB5B806C22400");
+test_comp128v2("E17C33D2F1B42CC9CC4BB68C372B86AB", "A315B3B4BBF2AFACF82EB400");
+test_comp128v2("C74127FCD69A7DEDAF3EC080DD794C2B", "A288120EC5E5D774E60EE800");
+test_comp128v2("D148DEDDC094E552A75B362858807E76", "037A7E48A6E230437E1AE400");
+test_comp128v2("91F0824B24B3190318CB89B0758B6821", "D608EA0088C201318F3A4400");
+test_comp128v2("7F5D92535D449D7412E16856C9A9CC83", "8C126E8E0155CAF47607AC00");
+test_comp128v2("22D7AFB76E71CF4AA209B7B5B8711551", "7C7707A33EB1CAC94FE51C00");
+test_comp128v2("8848CEADDCF76EC13D5D5309594E7A58", "7E141BD3C032FAAADDF1C400");
+test_comp128v2("76D1736CF997CBD643A242F805917ADE", "4A422DED87839DE4F8639800");
+test_comp128v2("96B7E7197A05CBDDE68CD566E833F907", "62E205A674974554C7F5A000");
+test_comp128v2("928AFCA1A1DB27340BC5689F9ADCC3FD", "9A7A16C8AAA1A89D28CBAC00");
+test_comp128v2("566561B80926991BC84FF3D782C43533", "4C67249BE59008455BAD8400");
+test_comp128v2("AD7CCE408FE4D908234C4B9B7AD4586F", "54FF6E91AEFCACE32C6B0400");
+test_comp128v2("270BE9B26BFD8E8F399D63CE342C3AD6", "BD3B66DBED973FD195CA9800");
+test_comp128v2("6B09662F3C200C2079B15CCA03EE8550", "BAA793152333F7B78DE07400");
+test_comp128v2("52A0DE611C43E8A2AA08C73B79122EF0", "8B619DFBFDCA21ED3246A800");
+test_comp128v2("089249127245C7364E2DA1F4B12B4174", "1BB9BECD4723DAB665D9B000");
+test_comp128v2("78A4E8D674E7A9BAF1A2EEC2BCA52C83", "1F4A8220DC3B790194AB3000");
+test_comp128v2("D69D8E89A9DB9FDF5008A490DCA35932", "97F23433085310FEF92B0800");
+test_comp128v2("303EC59372B82FEEF9776A77B89AD1EF", "D62B685B0469F2DCB8431000");
+test_comp128v2("BF25B6FBA7D5B955F81A196F603DB6DD", "9EEF5B576A0D5904CFE16400");
+test_comp128v2("A034EDBF71F3789C7AD0B7DD3E2983B7", "F3955289B3B925D317E41C00");
+test_comp128v2("0F64D014BCA2B53B1FB6C5267C6AA869", "176AD9DFEF9FD87C1B26FC00");
+test_comp128v2("E8A8E6665D25A32DEFED1BBFE032178D", "635E89FD4FAAFAEE81A6E800");
+test_comp128v2("D61E52FB7BDDB6B08D79E5727701E327", "1A8FC1CFEAC2D83C73BEE800");
+test_comp128v2("F526D40E8A4791776F76B754BCB6002E", "42230C725900932FEEB32C00");
+test_comp128v2("33274BEAE8FCC71C0547FCD8370F53D1", "A647CFBD2B6015A5071F2800");
+test_comp128v2("71B260044E7818F625536196647D609D", "9F6CAE8F4BA7E18167D1F800");
+test_comp128v2("494D5B1DD29C4CE82825A0DE60D75B28", "747D3A2FD2456A63434BB400");
+test_comp128v2("D57BC3C7180DC541ABFE858D10462A05", "171FA63B591C6B7002CB9C00");
+test_comp128v2("75CDED92F2DA05D5F5A180371FE51F0C", "8D6064E886661C7493535400");
+test_comp128v2("0A188392250D0CDB92FD3E224332F7B0", "788924D7FA3700DBC29A5800");
+test_comp128v2("15D4AC837FC73BA6C4A0FE899D09718F", "7CCF880D84106A31F5F07400");
+test_comp128v2("AC453FA3FDB5BF207156144B24AD1E7B", "F9DEC85BC2B8D3996D094800");
+test_comp128v2("71F2AD4E06BB7F988C5004A0357F6970", "DF76F1CA8D1203DCFB8F5400");
+test_comp128v2("9ACF6CF19BB44FEB4D95541AFC4A14A0", "261B9A333A06FCCEA0D19000");
+test_comp128v2("3E26329310742282F2B9D1E3DC25033A", "15020ADE64D319AA40610000");
+test_comp128v2("A6DDCDBA584140D229FB839D398F78A7", "3073F2C778550F75EC707000");
+test_comp128v2("D3AD058E5268095511BEA6976BA94D02", "6C2CC3C6B0325705D3393800");
+test_comp128v2("E4F0FF1E5296A93BDC84A3B0E03CD043", "5DF3547DC840423AD633F800");
+test_comp128v2("DC5F59D24CD8961B0872CD4264F240E3", "4038666247DF1CBE432D0000");
+test_comp128v2("BC9CE92196AEFEDB4A9C93D9CA8A006C", "3EA4747DE9A8B930EC780C00");
+test_comp128v2("A7FDBBF43164D9C679C09F010ED57120", "A0D97A4D4B329DAC3C1D9400");
+test_comp128v2("885F62DAEC03DC5C7C3B6D2985F1989F", "8E8C3BB5767DEB1A84B8AC00");
+test_comp128v2("2BF7BCEA0DAEEFED5F1B9BF67C59C42F", "3E83E6A4BDA567C0C1C37C00");
+test_comp128v2("9A90204CA9EBEDDB0E8E270C232430F4", "FE65162A4E81EAD4C0FAF000");
+test_comp128v2("983A16E1E9F06C1E16CA66D0024295A8", "A31960B3BCA0409A77D76400");
+test_comp128v2("894A65F0863621F6F4B0F7D2DB52AF61", "EABDE0292515ACBA40C8E800");
+test_comp128v2("F12067DCF27C55BBEE33B0856124CD88", "82F1FFC3EB594F53CDF39400");
+test_comp128v2("81821C13A89580DAEFA775D37D75C58E", "6DE6DC3F4AA7EBCF3BF69400");
+test_comp128v2("296F16BACCB5B66E5316A21A82E603AC", "CC5D42E68A362BC4EB60E400");
+test_comp128v2("5AD7081575AB7E65BA8DF2DE3B6B7909", "CEC011CC38CA5ED64CB93000");
+test_comp128v2("84AB79B6A3A1F005563210592BE8604B", "63D53A5C888A72E5A18E0000");
+test_comp128v2("06DB39540FFAFC31D275F3E56EB15824", "88AEDFAFE13E7632EA7CC000");
+test_comp128v2("9E38292FDB67242052D0A445014910D0", "41BBF707586B1FCCCDE90400");
+test_comp128v2("A371E96FAD96E1545D8E8808A07E07E3", "6A58E0D91F95F6DBB18CCC00");
+test_comp128v2("BB10FDDCFD8C047EB0B51E96048CE459", "2DC85575F29CA4F11FC36C00");
+test_comp128v2("5B4307D70E43F25A9CFFFD56370BBC94", "9F3DD6CE52DAA89234550C00");
+test_comp128v2("42FA4C38D32C541EC2F1AD27DECA6C67", "13D083584650096DF3789C00");
+test_comp128v2("B8FDEDEDCB6E23CF14E6EEA25DC419F7", "09F8ED29BB3C6C40A9196800");
+test_comp128v2("2F83B170565F4977A89E3E09477CA1B3", "E1053E83AD4F056439AF0000");
+test_comp128v2("7C2EC5FEA03C78F65D7D711DE30D76A6", "CC39D08EBE81752FB84A6000");
+test_comp128v2("1EE80FBE225CD938D1800459985B61EA", "688E5F40E8C20BCD7E90AC00");
+test_comp128v2("0F3D06972170FCE7CE9C7511293846D9", "D90B439D68E4F9229AF30000");
+test_comp128v2("B15AAFD4778B30CBEBA6123A2DCF242D", "416073391C2A09D498896000");
+test_comp128v2("F39B05FDE23CD3513FC1F9426CFFF0C0", "C833CCF0BA49B3417F93C800");
+test_comp128v2("D778CA42BBA1BF18D77DFF99BBEC939B", "F3878F86134C23289EFE4C00");
+test_comp128v2("E54F1991A18C175859242DB288BC581D", "589458131E50C6D50B946400");
+test_comp128v2("3C5BEB096F9D117872C665B719EE1477", "C39175020428B806D442F400");
+test_comp128v2("9412AB06825CA3411BBE178480A7D1EB", "70B4716B4A43ADD6217EA400");
+test_comp128v2("06EBAED1B90E8A2D25C3AB1973905D5D", "ECB251D81D64096720ABA800");
+test_comp128v2("FD229FC2ABD4D5CB1E24FD63EA77AD66", "4E74DCC86725C9249311E000");
+test_comp128v2("D87E8FE1157A93AC00DD5D2948ECCAA3", "4EB7C5F4A40577BA424F0C00");
+test_comp128v2("30884DEB37B796F54A3C04F3A86F010D", "3A2F6B2DB3E7387C9B85F400");
+test_comp128v2("1BAC80F40908D0C03313C33CAE26F5DC", "9646ED009469732EC3EBCC00");
+test_comp128v2("CD302E7008E2683A7244AADB9417E501", "7839F2AE68BC906AFC06E800");
+test_comp128v2("1348D0CD2910306D9118E9796E303C1E", "FED0DE5F032BB902E4354C00");
+test_comp128v2("70C3FB8FB3CA6942BD7C1DF5EDB10180", "7E9B37DB18F1AFC4D28BB000");
+test_comp128v2("A4150041B47229B850660FDB84B65828", "D8A37D0FB9B2675AAFB9DC00");
+test_comp128v2("5D67CF90EB0C63FB4951C40B5F91259E", "7CFDC3D570F1E7C38BBE5000");
+test_comp128v2("88017172C4612F91C89EC43868C6FDF8", "4E838FF2E0008654C5CF0000");
+test_comp128v2("23B4A866497F2C4A67353B396936CFC1", "3FA08D495D5063E30EB6F400");
+test_comp128v2("ED2550ACBCC9821894FBDF3DBDC93297", "A45019C0B1E78F60BA837C00");
+test_comp128v2("43C6573D014B23C691BB0DFD2040E9C9", "2901DE457C41F792D77D2C00");
+test_comp128v2("AD204E6AF70B423ED521A4B3AEBF3358", "AF6620C0D42EC71B29135000");
+test_comp128v2("EBF14EDEEC94BE21F6E2521841B71B4F", "C32B0095A611EE1FCF8A0800");
+test_comp128v2("E4354B7F94D37F8974E8912FE63E65ED", "A8844009E0A67032FCB39C00");
+test_comp128v2("5F5F2AD08E071C324A2A0A6FFC77B441", "61BB6EBDFFEA61A3DA29E400");
+test_comp128v2("FAA048F624863639327522D41B31D392", "971B2475B2806A4741497400");
+test_comp128v2("E98C633FB91EE72FC4F0CB18119A67E1", "FBDAE08872C1CCEC77EA8800");
+test_comp128v2("6A8815193A45732FF6CC06AFD49F9316", "F26191BB253A328C7567B400");
+test_comp128v2("FC8FF54ABE8958DB01DBE87E8178A69C", "E691DDCFEF1AB2B6B069A000");
+test_comp128v2("027469E5A3803DC4C2876D95C1C678C6", "2438B8CBCA2A88A931EB9C00");
+test_comp128v2("5159283F05722548C74A737741CD6509", "D46ADFFFCB068AF092F12000");
+test_comp128v2("6AC3B272DD8CC8BB745A8D0B36C211A1", "DDFF97F3223A4B6BC232F800");
+test_comp128v2("8AA83372D1D5EC88F72ED111E27A448E", "2E229F0F997B25213222F000");
+test_comp128v2("3E7608319DCB2A0E65EC9AE2084EA982", "C8B76DFD9A01A240E1B5AC00");
+test_comp128v2("2841232946DE470D2FF755C70C19905E", "DDAA67B52DCB035E9A2CF400");
+test_comp128v2("A944542DF2373E12823C99DEA8DF170B", "0808D4ECBC4D77A0158FD800");
+test_comp128v2("A2138146A6A0E2E642053DFDAA9E16BC", "74EF1291ADB07C95E02E3400");
+test_comp128v2("0DDFDD1D9A82399E61C371CEA1F9CE38", "B58BFCFC24A6D75BCB169800");
+test_comp128v2("9FB3D625B946962B54E2C17B20C42D45", "D7D987D5BF9DEDA710CA8400");
+test_comp128v2("1B55779FB61B29B8BD86771D0BF16D63", "3686F4642D1F419AF0698C00");
+test_comp128v2("39E34A86EC6FFB7055E7FAC2E0C974C4", "D271890EA753A7883B0D3800");
+test_comp128v2("B4A93386400F4CA3FDCA51846BE80335", "457CB81CF3489FE6AE1BA400");
+test_comp128v2("A313371F69544947FCC573B943DD9183", "9F548C3892CFF8A485074C00");
+test_comp128v2("2012EFE25DC9AF67C46C0CBCF2EC7591", "4E80A17F41BD8EA8C55F1000");
+test_comp128v2("486BD31661FFCE74A65CE0D558850D9F", "B613B59771B8352D12C27C00");
+test_comp128v2("2186CAAECA47991101726EC2C6F6E67A", "BEDAEA0EA1943FE1FF221400");
+test_comp128v2("4D42D4D87D70821014D0CD86BC38DA4D", "A2D95578B1FA0E16B0C3B000");
+test_comp128v2("4DA30AC34F7EE91EFBBDC6DF5555B76D", "6937A53FF44D36E61351DC00");
+test_comp128v2("795C15464D421AF29BBA1907DD10F028", "629184CDABC11E3CA0C56400");
+test_comp128v2("B3CE0E7908B649E875005DE7E7FD1FD0", "24C51AEF24FF49A4A4747000");
+test_comp128v2("D957396D9E3C4AF53C89E45C54DC0A5B", "17161024C0F22E10A7430400");
+test_comp128v2("43B416FD921D9BA3CDA47EA123386302", "9810CA384A6F6647E51EEC00");
+test_comp128v2("0B03AE1B7D664FC5B96E2A914C633D89", "DC3FCC1CB0099F7414302C00");
+test_comp128v2("4A6BEE40BA96A40B7CE9E6844DFA73AC", "E9EA864579D55C68B4B9D000");
+test_comp128v2("70FDC71A73F676D9C4EA330754B901C7", "049ECEC4A332DF7B51D98800");
+test_comp128v2("7E61A21AF6B328C26E1D7325DFA25B36", "D7D91E06B4C43EDB795A8400");
+test_comp128v2("C666E78CA92F658FA60C350504BC09C6", "4445B12A7082935CBEF71C00");
+test_comp128v2("55020E9C0982E00235CE187B034B8591", "3B0A8F08523A46377BB9B000");
+test_comp128v2("ED046D0B7B672F496ABF1C835EAA3C84", "64C19D9FA085AE2270B45C00");
+test_comp128v2("175A73A9CA9507BC08465DFFA9B8A496", "59D1449FB47C046EEF89A000");
+test_comp128v2("07C70D392BD451EE506780DFBD5DC83F", "12B436EB13A2F5EE6F3B2400");
+test_comp128v2("F91C460017B34AA789A219167F5224B4", "D4557BAA009D10CF37E70400");
+test_comp128v2("1DA7C45EA6A64514FFA689538ED5ED53", "4C6C7DB8436151A89E15D000");
+test_comp128v2("E87DC47A13D472C5DB246BC2F8D2DB72", "F587FF0ADB6832FBD5257800");
+test_comp128v2("FC7EA44A9CE859DD79E3D01FCFEDE8DF", "7A8E075D75CEC76E2E79D400");
+test_comp128v2("6A03EA7604753B3C008D3DB463A7442B", "47CCC2AB07276A6A9BF0C400");
+test_comp128v2("0017953B084C3B7424D0687D9C02A837", "4A0117D0F840E0A91E2C6000");
+test_comp128v2("EEF338BCB48C15A37795C69AFC7C570E", "EB007C6F30EFF093E499D400");
+test_comp128v2("53A6A76FED38FF6D62777B449E5B548C", "F00CDCCCC10ECB062682A000");
+test_comp128v2("5C70D559D6F8B8DD99751D56C418FA35", "E3C5F362FF9ACACA40A3A400");
+test_comp128v2("9CA9F9FEFE37D57BF633754AF7B3634C", "2534834DE550FC11D9268000");
+test_comp128v2("0C23013C1C3C0954638F9414DF49E0B8", "A51D6BD87F72607CF707E800");
+test_comp128v2("76D341F1D8D1C65514A96277AA457C54", "8900B6FD332891AFE38D5400");
+test_comp128v2("647466BE40774C458ACE1760FB2CBFFC", "EB85994EA6C7F2A785620000");
+test_comp128v2("DB0CC7E41AC5D78A9A09184DF4F90553", "21A4C2684DA076CDC5F05C00");
+test_comp128v2("582C3F28F5E1380932C65D3544B7BDDA", "2006B84F9FD789AB7EF88000");
+test_comp128v2("5F823650EEE1F31CEC3AADEFC452E429", "80C0352D91A88126384F8400");
+test_comp128v2("7D0288577305FB4CF1979056E527E0B2", "F37749459DF1409694865C00");
+test_comp128v2("45566B3BCE18DA92823C95C1D28BC600", "63290D3ABC575FFE70B0E800");
+test_comp128v2("BC54B44285B1123AF6D3EDA43A5446A7", "0787BD187870B36B47403C00");
+test_comp128v2("AFF23EA0922CAA395D87CE8F71E686FF", "EA9A6507116E59F885954800");
+test_comp128v2("81406FA900C3787CEFA83332ECE83ADD", "B9A1B23CF74881FA72F13400");
+test_comp128v2("17ED1CA689D152C83DDE7C21298B1621", "B9DF2AD19F79E00D39BC7800");
+test_comp128v2("BD24FA43CF93AB8F615A2CB55205954E", "8FB777F02793A4A9E96BF800");
+test_comp128v2("6A60A9D4076A4668ABDC434CFF4F4BF1", "3874A5322A30FC61EE2EFC00");
+test_comp128v2("B4A18EC0063E6B403DE774801F83366A", "ED58E3518559614FF3CDC400");
+test_comp128v2("5B4F77B27473E3E9E9F37A270B85AF0C", "3BE0FBEDB313262BC0BFD800");
+test_comp128v2("AB88BAA258597D5459F9B1279809543E", "67E5E4AE690246C0D9E9A000");
+test_comp128v2("A2951495A11BADAC3A91F653349FDB05", "3E6FBD4969707A42327F8C00");
+test_comp128v2("AF7D610513988261234BFDCA9174D852", "7D1721E9A2057DBDFFC78000");
+test_comp128v2("ACC7B916F1D53C75BBB5EAC0C0C9155F", "5B50D39BE87E86DB3FF7C000");
+test_comp128v2("463C7145B20B01098C16142DCD76F3E8", "9D4B45528F381B44F58C8000");
+test_comp128v2("0E5E028DDFA0A3C0C879FA07C9FE0B11", "366B62B32BB6DBA922F9C800");
+test_comp128v2("131524709A0F2C72CF897E34BF7AD533", "8B444B299DE38B10C9931C00");
+test_comp128v2("B2BD87BFF31207E0584989577E010E25", "58798AFBADD4F313CD4E4C00");
+test_comp128v2("878C4B8B7047A04F24B85A039CF1CA08", "134AAC5663497B78E9ED6000");
+test_comp128v2("4372DFCE989ADEAF69B3CE5541F2D44B", "5A4EAC4D5B411199843EC800");
+test_comp128v2("F4FFEF059262212C6A9440F4BBA67303", "2147ADD96FADA5C3B0A82C00");
+test_comp128v2("ECAF923AE9D823A2B5AA234584FA1956", "A7345726E548029DE8C13800");
+test_comp128v2("BF988D41A1D5C109D0706B2068ADFE14", "C3CF7CD2693FFD82DCDF1C00");
+test_comp128v2("449990955002E4111D56E0C20946C6BC", "63437E1008262606709BAC00");
+test_comp128v2("2EE20958580CE4F8A8BFEFFCB1D28D0A", "C5F9DBA0853C4B619979B400");
+test_comp128v2("B6AB470BD27B24DFCE750B3EC08EE38F", "2E4FF932B76DC48617597C00");
+test_comp128v2("8AC1D7BB4F58B97A4973F3BE4AFDE91C", "5E1785F6777316F60EA67400");
+test_comp128v2("495AC23A71E47B790E70823F557301A7", "97A06E87B1351A61E82E4000");
+test_comp128v2("F62F24627A42462892EF3AEDFBD86BCE", "FAAB2671E38D5F25CC2DF000");
+test_comp128v2("60372B92D3EE37510355F7CA2FF1AD89", "248B52F48F946258FEBB3800");
+test_comp128v2("3A6CF14AE01A0CA1562D639A97AE49C7", "31F7D19EAB76B3A4015E7800");
+test_comp128v2("D0FCAFC71D9A145F839F11688295A8C8", "7772C8610A17D87744943400");
+test_comp128v2("842DD75BB5B1E7E201E248663A83CF62", "4C43DDCC9F35ECB2ECBAF800");
+test_comp128v2("45AC11764243D64DFCDF35443F498A11", "CA15ECFAD53D0E487DA51000");
+test_comp128v2("F0A05481CCC3E9759495DDF4D061F7FF", "5284304B591163CF2AA35400");
+test_comp128v2("FCAB0F4F0DC5DDB74F6F45C3DE45A890", "1430B0D94E51B3F0970B2800");
+test_comp128v2("96705A918F3F7DC4779EEE959DF56DDC", "11CD9894491DBACE093D5400");
+test_comp128v2("3324BCE404ABB6FFA1B815FCE3653504", "10B5BF4FAD33E64AA1446400");
+test_comp128v2("69C0EC0F65DB292E47D77861648220C1", "BF307A6E2EAAC31C03ACD000");
+test_comp128v2("2CD92262C563D16CDA7076A3916B025D", "C3DC96C3F8982607CB34F000");
+test_comp128v2("3874E5B8CA16D381A0B33E8846EF7678", "826BF9A7CE95C140A965CC00");
+test_comp128v2("3368842420F16B5476313F02B16B3CDF", "0C34B5F2BBD5B6D336B5A000");
+test_comp128v2("669E584D4DDB2E1EAE7E914C8541F311", "B9246D668912C36EBCD2D400");
+test_comp128v2("8D428F26986A1C746CCA262426C7C0B2", "7BDB274C86342B7068033C00");
+test_comp128v2("02B97CAD06351C5C3CF86D396020026D", "CB2BE5BC456ED73635071C00");
+test_comp128v2("B4696D369884E4941D0E087B32E09D2B", "2BB0A12257D862AAA55E0000");
+test_comp128v2("4EAB87DA796EC3488C342BDF311AEF22", "23A0BCDE4B0DCC2C8D89F800");
+test_comp128v2("DCEBEE5F1C4C7A4E8A83B6D4CB236AEA", "84C90910A45004A63EEA0C00");
+test_comp128v2("55855957EB252F0C59A6B1EC4506B9A3", "9C693CF049FE93DD6D755400");
+test_comp128v2("FDE4AE6CCA16EF7FBC9AFE8067FD4E16", "1E9A9CEDCA101D2193375000");
+test_comp128v2("3600B73545F54A51BFFF6ADF932AEBAE", "7CC316918A7AFFCA973BEC00");
+test_comp128v2("202D67833ED8B105BDF66722B7E64F7F", "540ECE8E6B38E99DF7FBB800");
+test_comp128v2("1868360A46FACED93D287EB937EED141", "EBDFE734375B0DAEE15E8000");
+test_comp128v2("F65A50219A711BA33E5227885C5BD27C", "E87D7741411E095602402400");
+test_comp128v2("FCD82A0A445AC9373D96BB9CE8AF6B61", "517805CE2B3DD5310B6DE000");
+test_comp128v2("AC6AC085B92AB68E52620E350E1BB3F0", "758E969F192A9B2B20B20C00");
+test_comp128v2("E5A32C2C398BE819497923869A8D3316", "97FC978698E4FF67A0F0DC00");
+test_comp128v2("C7BC59BE121995B4AEB0332CED5A1198", "B5CC69159E1C6047190D4400");
+test_comp128v2("827E9C6B80997F053AE704994119544A", "C073B256DE3FBBEB72696400");
+test_comp128v2("7702362250B6F5F6F323230C598F9051", "1BE3AB6CA52CB8A98041E000");
+test_comp128v2("00E5A0BD996A84C310238A05A5AE7495", "A31D2FDB0196FA415CD15000");
+test_comp128v2("8D9CC3F666512DF3DB2056CBE7F62684", "1026ED1657B49F41317A5C00");
+test_comp128v2("BDFA3EF9D36448BAE383A49FD6A977E1", "BB2F552110C1F5872EDD6800");
+test_comp128v2("18D87AA310A0CB9B3CC8EF54439FFCC4", "FC770426413A7100746FCC00");
+test_comp128v2("992813CB979D33BFBAC54D55CEB4B73C", "D0148FCED4882E99B5550C00");
+test_comp128v2("833856A2E8B0EE42A5EFDFE505A2A98E", "C21F2CA3950B24C3D5718000");
+test_comp128v2("D16805B6CFAC637A2A39924114036E5D", "322B554745D2B0DC386FAC00");
+test_comp128v2("2E627A1B378BDD2A3ACC7486963D69C1", "00B201FDFC3C4AB6C6633000");
+test_comp128v2("86F68E8A8FD9FE2457E9E1FE47D2523A", "E4FC49F68FFEF7ECBF3F2400");
+test_comp128v2("F72BF5374387A730D780174FFFCF41EF", "80396F47B01D853208C4E800");
+test_comp128v2("07A2299E7A5F5D56C0070412811B02BB", "EC7B17DB8911F53B2F97BC00");
+test_comp128v2("EE2F57A690134B89D2E4B1C219CD7E03", "F492970E081E648CD3366000");
+test_comp128v2("B2DB578B1D559A2778CBCB0216EE5144", "B3253ED8496B17C05D7B7C00");
+test_comp128v2("6C80254249001719EA40C51F2C4BCD4C", "36E4172968201F89069D3400");
+test_comp128v2("D1C28E94E15762073DBEB812F5F1BEE2", "DBED6738EA5E202530C78800");
+test_comp128v2("0F784B5CAF051C4FE137D2FE59A28C00", "D6008F9F45FB8CC50677F000");
+test_comp128v2("39B71CEAC0104DBA6743E2EC285BF7DE", "01FAF3FD3A79579778F7BC00");
+test_comp128v2("261756F9DB55FDFC1116091B8D6BD58D", "50FCAC1DD42FE079AF7BB000");
+test_comp128v2("57E47170F70AB261FA998017D838199F", "88EE9756212F1BDA4E12BC00");
+test_comp128v2("02DE5B5F4AC153124891E768B5E3A1B6", "B42185D92AAB6A18859F3400");
+test_comp128v2("224E9EEF82B29CF691BC9463D9FFC129", "DB92040E46BAB90675E89800");
+test_comp128v2("524B0B8ED727F299E59957FA271A50B5", "456AE3A856C6FF5A6BFDB000");
+test_comp128v2("242A954E612E1F0194CE8493A4CD1C18", "1F607A7E1DB1212B24A6E400");
+test_comp128v2("A61AA82441B24BDD06AA6BB2CE77CF27", "58FF4B1B3DFBB3E3726E6C00");
+test_comp128v2("E01B82CC43D3D72D8CCD60C92C62EE09", "C00041D883E5BAD0BF03AC00");
+test_comp128v2("3AE3E93F044396DFBB5A529A26DA2553", "DB62C24686FE8014B399EC00");
+test_comp128v2("653A180F0F7C98B94130A5C40BD11EBE", "9B9BCBC09E09E8D559ED1000");
+test_comp128v2("CB92A03B9A262683AA1A39CCF8866BA5", "BA1BDB72BF6C2A94D92E4000");
+test_comp128v2("C79C8FC1619F413BDEDA3F9F8FB7AB19", "2334AFE1C799B9815C7C4C00");
+test_comp128v2("71DC6F9B718457B72CBF948304DF4168", "13230113D8C0A23FD5BA9C00");
+test_comp128v2("A11D3C634DAC5379B5970D401EB6C512", "CF9956024F33B4A965371400");
+test_comp128v2("05B7355A6962EEB393814579339EBC53", "CA1CD0788A724158BC84D400");
+test_comp128v2("D494D03F59245A4FD88A87C4E842F8B3", "C8409116E5BA783DA8B89000");
+test_comp128v2("FA2235589D8182BF643DD68FBD3924B6", "447CC4020F9F87565B5B5800");
+test_comp128v2("3537CDFE59252A2054E7EC1BC16C5061", "9C8D45FB1480BE389112FC00");
+test_comp128v2("D81AC6DF80593B62E4CC6D51EBF682BE", "DF6CAEF62BC536826FCD7800");
+test_comp128v2("EF6FEDBC6F65EC72E71DD457D7F01E39", "545AC9FC051774F6ECD97800");
+test_comp128v2("A926134D19884E0C5DFDFED7E5D43926", "315E8EF19510592D48DE8C00");
+test_comp128v2("D40A68048F84E3C89159DCDC2F6CA432", "4E27DD965DCF6CEB40489000");
+test_comp128v2("E13A16536ABEDC92A087707F6962664B", "F54DF012133B0CC1D91B8400");
+test_comp128v2("443F8F2A487FE8CA0E4E36CB0394FA2F", "FE5A205335BA7EB4F9EB1C00");
+test_comp128v2("4CBDFF21AE06C34FBCF8BCE67A33ECE0", "1A80583C4CDFF82675F59400");
+test_comp128v2("CE08B54548CDE074E31630B0C5F2545E", "47904CB4205016ABEDD7FC00");
+test_comp128v2("16C810823D7C5BF3D5A7DF540BE927BE", "BA3C7853EE826A7FC1E8CC00");
+test_comp128v2("493E34068D98BE1CB0DC488E4215EB44", "A10DFDCC8CF7E13AA9F48000");
+test_comp128v2("2B16221E154B8E737705BFE4EF686EEA", "FBE1504BD0786AB3CE8D5800");
+test_comp128v2("40067BF44F7EBEEC97866D1D2B589C0E", "76C385ABD7A3198D4B2D0800");
+test_comp128v2("AEE48475101B133756C5260C974C3CDC", "B6B159E0B62A3E135CA3E400");
+test_comp128v2("7C337455E7D04CDABF9100A0DCB518C0", "7FEF52780DDF19198AEB3400");
+test_comp128v2("34509DDB0528245C753B34D0A470161E", "79608012018A272CFC4FBC00");
+test_comp128v2("B82EC07003C40E7F69415CFB29090181", "E31D8D19A1038B6F3D25BC00");
+test_comp128v2("101CE5DD0A72E07C3759B23BD07CB713", "13389C0B65706D05753F4C00");
+test_comp128v2("E3508CC1421B61CC1829F1AC5000A3E4", "F3A0E53D7E27598C99901400");
+test_comp128v2("BE906939FEB3D53EE5E3B3F09AF34392", "44F8E711171F64FE3B7A9400");
+test_comp128v2("58AE77015B346DC96112C7463CE44CF5", "217BCBDD9A7A15E4E3B9AC00");
+test_comp128v2("01EB1E42FA9BFECEA63771A8EC8FF608", "128