From wtfdoing at yahoo.com Wed Dec 25 06:53:13 2013 From: wtfdoing at yahoo.com (Wdoing) Date: Tue, 24 Dec 2013 22:53:13 -0800 (PST) Subject: Cannot open serial device /dev/ttyUSB0 In-Reply-To: References: Message-ID: <1387954393473-4026268.post@n3.nabble.com> Experiencing the same problem with "cannot open serial device". LSUSB list group of USB devices, my T191 cable even has it's own name as UART ... when connected (by the way other cable looks like thin USB-jack does not appear in lsusb), but still every time getting "cannot open". What is it that I am doing wrong? -- View this message in context: http://baseband-devel.722152.n3.nabble.com/Cannot-open-serial-device-dev-ttyUSB0-tp4026053p4026268.html Sent from the baseband-devel mailing list archive at Nabble.com. From laforge at gnumonks.org Tue Dec 31 14:28:05 2013 From: laforge at gnumonks.org (Harald Welte) Date: Tue, 31 Dec 2013 15:28:05 +0100 Subject: OsmoDevCon 2014 / Date / Venue In-Reply-To: <20131130135720.GI3133@nataraja.gnumonks.org> References: <20131105155825.GK12353@nataraja.gnumonks.org> <20131130135720.GI3133@nataraja.gnumonks.org> Message-ID: <20131231142805.GM13435@nataraja.gnumonks.org> Dear all, just a quick reminder: On Sat, Nov 30, 2013 at 02:57:20PM +0100, Harald Welte wrote: > Please make sure to add your name to the list at > https://openbsc.osmocom.org/trac/wiki/OsmoDevCon2014 until December > 31st (latest). If you don't have a wiki account, ask somebody who has > one, apply for a wiki account or send an e-mail to me. so today is the last chance to indicate your intrest in attending OsmoDevCon. I'm surprised to not have seen the following names in the list: pablo, peter, nion, steve-m, dmitry, kaber. It would be great to have you around again this year. Looking forward to meeting all of you again! Regards, Harald -- - Harald Welte http://laforge.gnumonks.org/ ============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6) From kaber at trash.net Tue Dec 31 14:50:03 2013 From: kaber at trash.net (Patrick McHardy) Date: Tue, 31 Dec 2013 14:50:03 +0000 Subject: OsmoDevCon 2014 / Date / Venue In-Reply-To: <20131231142805.GM13435@nataraja.gnumonks.org> References: <20131105155825.GK12353@nataraja.gnumonks.org> <20131130135720.GI3133@nataraja.gnumonks.org> <20131231142805.GM13435@nataraja.gnumonks.org> Message-ID: <134d1fe1-302d-4782-974f-477a8762f27f@email.android.com> Hi, Sorry I didn't see the invitation before. I'm happy to come. Cheers & happy New year, Patrick Harald Welte schrieb: >Dear all, > >just a quick reminder: > >On Sat, Nov 30, 2013 at 02:57:20PM +0100, Harald Welte wrote: >> Please make sure to add your name to the list at >> https://openbsc.osmocom.org/trac/wiki/OsmoDevCon2014 until December >> 31st (latest). If you don't have a wiki account, ask somebody who >has >> one, apply for a wiki account or send an e-mail to me. > >so today is the last chance to indicate your intrest in attending >OsmoDevCon. > >I'm surprised to not have seen the following names in the list: pablo, >peter, nion, steve-m, dmitry, kaber. It would be great to have you >around again this year. > >Looking forward to meeting all of you again! > >Regards, > Harald >-- >- Harald Welte >http://laforge.gnumonks.org/ >============================================================================ >"Privacy in residential applications is a desirable marketing option." > (ETSI EN 300 175-7 Ch. A6) -- Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail gesendet. -------------- next part -------------- An HTML attachment was scrubbed... URL: From peter at stuge.se Sun Dec 1 18:41:12 2013 From: peter at stuge.se (Peter Stuge) Date: Sun, 1 Dec 2013 19:41:12 +0100 Subject: [PATCH] COMP128v23 improvements In-Reply-To: <528F90FF.5060909@fairwaves.ru> References: <528A52AA.1060109@fairwaves.ru> <20131119111618.1475.qmail@stuge.se> <528B4AC0.7060906@fairwaves.ru> <20131122154426.GI18191@nataraja.gnumonks.org> <528F90FF.5060909@fairwaves.ru> Message-ID: <20131201184112.26360.qmail@stuge.se> ? wrote: > > Why not just fix it since this is a community effort? It takes longer > > to complain about it and reject it than it does to perform the actual > > work. (Sans the merge problem on Master). > > I second that. Complaining and rejecting might take longer but also sends a clear message that actually the development in this project has to follow style. Trust me, wiping the floor after other people, as Harald expressed it, is not sustainable and becomes much more frustrating for everyone. > I mean I do understand that nobody wants to do the boring work Right, so it seems reasonable that style is the responsibility of the original patch author, don't you think? Pro tip: Use the correct style already when creating the patch, that way there is no extra step of boring reformatting/cleanup work. > But that's also discouraging - and that's why those patches are > stalled since spring: I use patched version locally To me it says that you were too unattentive or too lazy to follow the coding style when originally creating those changes, and that now you don't care to fix the changes so that others can benefit from them. There are lots of valid reasons for not immediately using the correct style, but never fixing old commits makes me go: Sad face. :\ > Because it's research project .. no maintenance burden for me in > this setup, while with pushing stuff upstream - there is. Probably the upstream code has helped you save some time in the research project, so I think it is a fair tradeoff for you to spend time also giving back to the codebase - and you do! I think you're doing a great job, you're certainly contributing to the project, it's just unfortunate for everybody that you haven't tidied those old patches. If the project was developing at a higher pace they could have bitrotted already. :\ > Hence the efforts to mainline things are not as ideal as they could be. In the end that's always up to each individual contributor. > Of course I would try to fix the patches anyway, so that they will > please upstream, but not today - Friday evening, and so on :) For me it's not about pleasing upstream, but about recognizing the importance of following style in order to increase maintainability of the source code as a whole, and to decrease load on maintainers, so that development progress is as smooth as possible. > I hope I do not sound complaining I don't think you sound like you are complaining but I do think that the responsibility to format contributions according to project style lies firmly with each individual contributor and never anywhere else. Kind regards //Peter From peter at stuge.se Sun Dec 1 18:17:07 2013 From: peter at stuge.se (Peter Stuge) Date: Sun, 1 Dec 2013 19:17:07 +0100 Subject: [PATCH] COMP128v23 improvements In-Reply-To: References: <528A52AA.1060109@fairwaves.ru> <20131119111618.1475.qmail@stuge.se> <528B4AC0.7060906@fairwaves.ru> <20131122154426.GI18191@nataraja.gnumonks.org> <20131122173524.GS18191@nataraja.gnumonks.org> Message-ID: <20131201181707.23592.qmail@stuge.se> Jeffrey Walton wrote: > Thanks Harald. I think there are a lot of good points here. If these > things matter that much, why not use a commit hook that enforces > policy by applying formatting without prejudice? Because we'd like to have developers share a cohesive culture around the code and code style rather than have developers that are unable to do better than agree to disagree about something so simple as style, and resign to have a computer fix up the differences. If not even agreement about style can be accomplished then it's not very likely that much other agreement can be had either. (Unfortunately I know that all too well from experience.) > developers don't waste their time learning yet another set of > standards and idiosyncrasies. I think that statement is quite intolerant of you. Learning a culture by slowly immersing oneself in it is never a waste of time, I think it enriches life in more ways than we can know. If developers do not want to work together then they shouldn't pretend; it would be much better to go separate ways. //Peter From laforge at gnumonks.org Sun Dec 1 13:39:22 2013 From: laforge at gnumonks.org (Harald Welte) Date: Sun, 1 Dec 2013 14:39:22 +0100 Subject: [PATCH] COMP128v23 improvements In-Reply-To: <52933281.5000908@fairwaves.ru> References: <528A52AA.1060109@fairwaves.ru> <20131119111618.1475.qmail@stuge.se> <528B4AC0.7060906@fairwaves.ru> <20131122154426.GI18191@nataraja.gnumonks.org> <52933281.5000908@fairwaves.ru> Message-ID: <20131201133922.GM3133@nataraja.gnumonks.org> Hi Max, On Mon, Nov 25, 2013 at 12:20:33PM +0100, ? wrote: > All fixed. Let me know if I've overlooked something. thanks. it looks fine to me, and if it was applying to libosmocore/master, I would have merged it today :) Just for sake of completeness, the linux kernel checkpatch.pl script finds the following issues (which I would ignore, but just as a general rule, it is a good way to catch coding style issues): ------------ WARNING: line over 80 characters #45: FILE: include/osmocom/gsm/comp128v23.h:20: +int comp128v2(const uint8_t *ki, const uint8_t *rand, uint8_t *sres, uint8_t *kc); WARNING: line over 80 characters #46: FILE: include/osmocom/gsm/comp128v23.h:21: +int comp128v3(const uint8_t *ki, const uint8_t *rand, uint8_t *sres, uint8_t *kc); WARNING: please, no spaces at the start of a line #225: FILE: tests/comp128/comp128_test.c:18: + }$ WARNING: please, no spaces at the start of a line #234: FILE: tests/comp128/comp128_test.c:27: + }$ ERROR: "foo * bar" should be "foo *bar" #237: FILE: tests/comp128/comp128_test.c:30: +void print_check(int rc, char * res, struct osmo_auth_vector *vec) ERROR: trailing statements should be on next line #251: FILE: tests/comp128/comp128_test.c:44: + else printf("%d OK\n", rc); ERROR: else should follow close brace '}' #251: FILE: tests/comp128/comp128_test.c:44: + } + else printf("%d OK\n", rc); ERROR: "foo * bar" should be "foo *bar" #254: FILE: tests/comp128/comp128_test.c:47: +void test_comp128v3(char * rand, char * res) ERROR: "foo * bar" should be "foo *bar" #254: FILE: tests/comp128/comp128_test.c:47: +void test_comp128v3(char * rand, char * res) ERROR: "foo * bar" should be "foo *bar" #264: FILE: tests/comp128/comp128_test.c:57: +void test_comp128v2(char * rand, char * res) ERROR: "foo * bar" should be "foo *bar" #264: FILE: tests/comp128/comp128_test.c:57: +void test_comp128v2(char * rand, char * res) ------------ Regards, -- - Harald Welte http://laforge.gnumonks.org/ ============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6) From Max.Suraev at fairwaves.ru Mon Dec 2 10:36:08 2013 From: Max.Suraev at fairwaves.ru (=?UTF-8?B?4piO?=) Date: Mon, 02 Dec 2013 11:36:08 +0100 Subject: [PATCH] COMP128v23 improvements In-Reply-To: <20131201133922.GM3133@nataraja.gnumonks.org> References: <528A52AA.1060109@fairwaves.ru> <20131119111618.1475.qmail@stuge.se> <528B4AC0.7060906@fairwaves.ru> <20131122154426.GI18191@nataraja.gnumonks.org> <52933281.5000908@fairwaves.ru> <20131201133922.GM3133@nataraja.gnumonks.org> Message-ID: <529C6298.7090602@fairwaves.ru> 01.12.2013 14:39, Harald Welte ?????: > Hi Max, > > On Mon, Nov 25, 2013 at 12:20:33PM +0100, ? wrote: >> All fixed. Let me know if I've overlooked something. > > thanks. it looks fine to me, and if it was applying to > libosmocore/master, I would have merged it today :) Hmm... it applies with patch --dry-run -p1 < 0001-Refactor-COMP128v23-implementation-and-add-test-suit-v5.patch just fine. What exactly is wrong and how do I fix it? I've made a patch using "git format-patch" - is there some better way? > > Just for sake of completeness, the linux kernel checkpatch.pl script > finds the following issues (which I would ignore, but just as a general > rule, it is a good way to catch coding style issues): > > ------------ > WARNING: line over 80 characters > #45: FILE: include/osmocom/gsm/comp128v23.h:20: > +int comp128v2(const uint8_t *ki, const uint8_t *rand, uint8_t *sres, uint8_t *kc); > > WARNING: line over 80 characters > #46: FILE: include/osmocom/gsm/comp128v23.h:21: > +int comp128v3(const uint8_t *ki, const uint8_t *rand, uint8_t *sres, uint8_t *kc); > With all due respect - those are shorter than the line they are replacing which is already committed to the git. The rest I have corrected. -- best regards, Max, http://fairwaves.ru From max.suraev at fairwaves.ru Mon Dec 2 10:30:32 2013 From: max.suraev at fairwaves.ru (Max) Date: Mon, 2 Dec 2013 11:30:32 +0100 Subject: [PATCH] Refactor COMP128v23 implementation and add test suit Message-ID: --- .gitignore | 1 + include/osmocom/gsm/comp128v23.h | 4 +- src/gsm/auth_comp128v23.c | 4 +- src/gsm/comp128v23.c | 63 +- tests/Makefile.am | 7 +- tests/comp128/comp128_test.c | 2123 ++++++++++++++++++++++++++++++++++++++ tests/comp128/comp128_test.ok | 2050 ++++++++++++++++++++++++++++++++++++ tests/testsuite.at | 6 + 8 files changed, 4216 insertions(+), 42 deletions(-) create mode 100644 tests/comp128/comp128_test.c create mode 100644 tests/comp128/comp128_test.ok diff --git a/.gitignore b/.gitignore index 28392b5..71b27f2 100644 --- a/.gitignore +++ b/.gitignore @@ -62,6 +62,7 @@ tests/ussd/ussd_test tests/smscb/smscb_test tests/bits/bitrev_test tests/a5/a5_test +tests/comp128/comp128_test tests/auth/milenage_test tests/conv/conv_test tests/lapd/lapd_test diff --git a/include/osmocom/gsm/comp128v23.h b/include/osmocom/gsm/comp128v23.h index aa26e56..bebeb59 100644 --- a/include/osmocom/gsm/comp128v23.h +++ b/include/osmocom/gsm/comp128v23.h @@ -13,11 +13,11 @@ * Performs the COMP128 version 2 and 3 algorithm (used as A3/A8) * ki : uint8_t [16] * srand : uint8_t [16] - * version : uint8_t (2 or 3) * sres : uint8_t [4] * kc : uint8_t [8] * returns 1 if not version 2 or 3 specified */ -int comp128v23(const uint8_t *ki, const uint8_t *rand, uint8_t version, uint8_t *sres, uint8_t *kc); +int comp128v2(const uint8_t *ki, const uint8_t *rand, uint8_t *sres, uint8_t *kc); +int comp128v3(const uint8_t *ki, const uint8_t *rand, uint8_t *sres, uint8_t *kc); #endif /* __COMP128V23_H__ */ diff --git a/src/gsm/auth_comp128v23.c b/src/gsm/auth_comp128v23.c index 36383d9..168f886 100644 --- a/src/gsm/auth_comp128v23.c +++ b/src/gsm/auth_comp128v23.c @@ -31,7 +31,7 @@ static int c128v2_gen_vec(struct osmo_auth_vector *vec, struct osmo_sub_auth_data *aud, const uint8_t *_rand) { - comp128v23(aud->u.gsm.ki, _rand, 2, vec->sres, vec->kc); + comp128v2(aud->u.gsm.ki, _rand, vec->sres, vec->kc); vec->auth_types = OSMO_AUTH_TYPE_GSM; return 0; @@ -48,7 +48,7 @@ static int c128v3_gen_vec(struct osmo_auth_vector *vec, struct osmo_sub_auth_data *aud, const uint8_t *_rand) { - comp128v23(aud->u.gsm.ki, _rand, 3, vec->sres, vec->kc); + comp128v3(aud->u.gsm.ki, _rand, vec->sres, vec->kc); vec->auth_types = OSMO_AUTH_TYPE_GSM; return 0; diff --git a/src/gsm/comp128v23.c b/src/gsm/comp128v23.c index 9004208..e21b718 100644 --- a/src/gsm/comp128v23.c +++ b/src/gsm/comp128v23.c @@ -64,21 +64,17 @@ static const uint8_t table0[256] = { 218, 160, 187, 106, 35, 87, 105, 96, 145, 199, 159, 12, 121, 103, 112 }; -#define RAND_SIZE 16 -#define KI_SIZE 16 -#define SRES_SIZE 4 -#define KC_SIZE 8 static void _comp128v23_internal(uint8_t *output, const uint8_t *kxor, const uint8_t *rand) { - uint8_t temp[RAND_SIZE]; - uint8_t km_rm[RAND_SIZE+KI_SIZE]; + uint8_t temp[16]; + uint8_t km_rm[32]; uint8_t i,j,k,z; - memset(temp,0,sizeof(temp)/sizeof(uint8_t)); - memcpy(km_rm,rand,RAND_SIZE); - memcpy(km_rm+RAND_SIZE,kxor,KI_SIZE); + memset(temp, 0, sizeof(temp)); + memcpy(km_rm, rand, 16); + memcpy(km_rm + 16, kxor, 16); for (i=0; i<5; i++) { for (z=0; z<16; z++) { @@ -106,21 +102,18 @@ _comp128v23_internal(uint8_t *output, const uint8_t *kxor, const uint8_t *rand) } int -comp128v23(const uint8_t *ki, const uint8_t *rand, uint8_t version, uint8_t *sres, uint8_t *kc) +comp128v3(const uint8_t *ki, const uint8_t *rand, uint8_t *sres, uint8_t *kc) { - uint8_t k_mix[KI_SIZE]; - uint8_t rand_mix[RAND_SIZE]; - uint8_t katyvasz[KI_SIZE]; - uint8_t output[KI_SIZE]; - uint8_t i,s; + uint8_t k_mix[16]; + uint8_t rand_mix[16]; + uint8_t katyvasz[16]; + uint8_t output[16]; + uint8_t i; - if (!(version==2 || version==3)) - return 1; - - memset(k_mix,0,sizeof(k_mix)/sizeof(uint8_t)); - memset(rand_mix,0,sizeof(rand_mix)/sizeof(uint8_t)); - memset(katyvasz,0,sizeof(katyvasz)/sizeof(uint8_t)); - memset(output,0,sizeof(output)/sizeof(uint8_t)); + memset(k_mix, 0, sizeof(k_mix)); + memset(rand_mix, 0, sizeof(rand_mix)); + memset(katyvasz, 0, sizeof(katyvasz)); + memset(output, 0, sizeof(output)); for (i=0; i<8; i++) { k_mix[i] = ki[15 - i]; @@ -144,23 +137,21 @@ comp128v23(const uint8_t *ki, const uint8_t *rand, uint8_t version, uint8_t *sre output[i] = rand_mix[15-i]; } - if (version==2) { - output[15] = 0; - output[14] = 4*(output[14]>>2); - } - - s = 8; - i = 0; - while (i<4) { - output[s+i-4] = output[s+i]; - output[s+i] = output[s+i+4]; - i++; - } + memmove(output + 4, output + 8, 8); /* ignore bytes 4..7 */ /* the algorithm uses 16 bytes until this point, but only 12 bytes are effective * also 12 bytes coming out from the SIM card */ - memcpy(sres,output,SRES_SIZE*sizeof(uint8_t)); - memcpy(kc,&output[SRES_SIZE],KC_SIZE*sizeof(uint8_t)); + memcpy(sres, output, 4); + memcpy(kc, output + 4, 8); return 0; } + +int +comp128v2(const uint8_t *ki, const uint8_t *rand, uint8_t *sres, uint8_t *kc) +{ + int r = comp128v3(ki, rand, sres, kc); + kc[7] = 0; /* 10 last bits of Kc forced to 0 */ + kc[6] &= 0xfc; + return r; +} diff --git a/tests/Makefile.am b/tests/Makefile.am index 1bb26ce..98ede3b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -7,7 +7,7 @@ check_PROGRAMS = timer/timer_test sms/sms_test ussd/ussd_test \ gb/bssgp_fc_test gb/gprs_ns_test \ logging/logging_test fr/fr_test \ loggingrb/loggingrb_test strrb/strrb_test \ - vty/vty_test + vty/vty_test comp128/comp128_test if ENABLE_MSGFILE check_PROGRAMS += msgfile/msgfile_test @@ -16,6 +16,9 @@ endif a5_a5_test_SOURCES = a5/a5_test.c a5_a5_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la +comp128_comp128_test_SOURCES = comp128/comp128_test.c +comp128_comp128_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la + auth_milenage_test_SOURCES = auth/milenage_test.c auth_milenage_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la @@ -101,7 +104,7 @@ EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE) \ logging/logging_test.ok logging/logging_test.err \ fr/fr_test.ok loggingrb/logging_test.ok \ loggingrb/logging_test.err strrb/strrb_test.ok \ - vty/vty_test.ok + vty/vty_test.ok comp128/comp128_test.ok DISTCLEANFILES = atconfig diff --git a/tests/comp128/comp128_test.c b/tests/comp128/comp128_test.c new file mode 100644 index 0000000..eb6fb12 --- /dev/null +++ b/tests/comp128/comp128_test.c @@ -0,0 +1,2123 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +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", "1282EA813670CDA82B028800"); +test_comp128v2("0287CC4F44011FFB7BFC45C753A7E764", "EDC47B4AD2F99E044B773000"); +test_comp128v2("FFAC099B033FA5CE08C1E10751436B0D", "774EB65C534D5C554A4E8800"); +test_comp128v2("AB57C444B024972E3CF20C2F885D7211", "8C6F76D58DB1181A94989400"); +test_comp128v2("66B10CEDC32FC796527D98A4B9052E0E", "48BDC529943EC0D5E66CF000"); +test_comp128v2("9D4FC614B4A5ECBF84C40E3F2B7B3B0D", "BAD7D26D697368A3931A5C00"); +test_comp128v2("7529E5C6269C75FCABA03362FFAF0BA8", "4428CA3F074553B7CD193C00"); +test_comp128v2("290F258C9AE1A88D5DB89D1C963ED8CB", "49A6A7D3EE75322C985B5800"); +test_comp128v2("4A635EEB118CF0401AA539B3E78D9BC2", "E75EB6229EBFCD7651869C00"); +test_comp128v2("A0A8CC5650A8C449C27358D13F5D149D", "33D344289813FD1762951400"); +test_comp128v2("00347953F59FEE734FA747B5BBB492EC", "163D84E824A58AEA21C45400"); +test_comp128v2("9C1DB2550ABDC1D83D3C6234C1F7216D", "DA743AF98691235ADBCB9400"); +test_comp128v2("566FFA71F19564E0334521F522D247A9", "E40AB25D08CEB2A2E2961000"); +test_comp128v2("2BE2558950270CE4EA4F041311B700B0", "9D3B8DC6DF02EE2215575000"); +test_comp128v2("2C7CF5A9C76A34069A0086D67162CAE8", "C7C27DFBC668647941BFB800"); +test_comp128v2("C6704C0DA2E47E546BF089365FBB7EEF", "3EB8772558CE07528DAFBC00"); +test_comp128v2("A4789958665D25892122D9B7838A7665", "E3AEA74A7E4487671C72B000"); +test_comp128v2("0359DF86F25D1EF335EDECE2F1300D89", "62C3FD4450596914203B4400"); +test_comp128v2("34BC3AAB3035AAAA631514F56C19D85C", "9C6C6F2C7BF109B71BC24000"); +test_comp128v2("2AE6301993E8679EE9783099EE4B74C4", "5827D1C48907242EC9693000"); +test_comp128v2("8E688E8C19E4842AC61D673A47502BD8", "E937B1C11E000FE617CD9400"); +test_comp128v2("635D70F76E8DD5A60C93E636555643A3", "1FC3F91D21ABDB110560D000"); +test_comp128v2("CFBD75A9EF7C590502CB305E255B32B7", "5AA46577C4A19E56222EAC00"); +test_comp128v2("52017B0F5A735EB4B4195B41C5ECDDAF", "141288BAA0C78E43A21F8800"); +test_comp128v2("9B7F9780EE1DB174EB3DE3E0DCB4430B", "67DFFA9CDC3456FD0ACB4400"); +test_comp128v2("CCB9CCC90211E81ED80A3663FE9520DD", "B296494F844BE19BD0BA5800"); +test_comp128v2("094C25D5E5F556578FEC3D09E1F18FBE", "2ACF6FC60CE2E75D0A26C800"); +test_comp128v2("8EC3B41444043CA925036ED10D358A08", "5026E7548AE49E190927A000"); +test_comp128v2("90E7DF0DE887D9A66C7481D56918E113", "4B84AF649EA0CD5F0840D000"); +test_comp128v2("968EE15F77994D3215AD0B3B830C8022", "353867C1CAEC7F26927B1800"); +test_comp128v2("1DB07381378EFF68414A6DF0B19CFA74", "2DA3CF74819513D2FA280C00"); +test_comp128v2("905553A290DD902F230AB5334EC3463A", "013A682A7041996B08865C00"); +test_comp128v2("6C61792C1391DCBEA18157DA3A5383F7", "61BE5406A149B4FF8B5E9400"); +test_comp128v2("8C1D6A7204459D8394710449B1D13BCE", "CEFE606815A3CE4E25379400"); +test_comp128v2("52A2764A059CED2CC46E04FACAE047AB", "B9ED555DE46B9F27FA452800"); +test_comp128v2("583303EC3575D11BF8340CC10F6FB42A", "DA213F2F44A4DF52BFE50C00"); +test_comp128v2("ABDB49A4B210381D9622AD5822150096", "F3672C97FEFC462BDB03BC00"); +test_comp128v2("711639E35CA2CA66EE65C4A45CDD6380", "536057FBB46AA0D25803FC00"); +test_comp128v2("0C8DB765506BFF298F89022E51C308B0", "89EA94F579D333C66670CC00"); +test_comp128v2("EE21F43BC9268966A546FDD100C3D841", "D4593228E6274177E5750000"); +test_comp128v2("EA1A2B1A515C72C4F4097AA555C93705", "E1DDDB18724B2B66A8D08400"); +test_comp128v2("0C9B8393D38BDF1065B162DF707D3009", "B878385FDB1AFC41854B6C00"); +test_comp128v2("EC0493D80DA33AF6FF5FC42D62870052", "4ADA9E7AF7F353A9D9EC5800"); +test_comp128v2("E41565124D918E28E7ED57AE770D7633", "C8C8CAEB0DF9667A2D34D400"); +test_comp128v2("6F4B3D805D5DCB5672FA617066A4B2BB", "346EA70E1588E99C88A47800"); +test_comp128v2("8A66D7FC4CF30B989EE579AA08872713", "4BE79F8A52FF99AE1C710000"); +test_comp128v2("8C901D0043F0660C0A9BC60171ABDAB8", "148A92FF28DBB5CB7012DC00"); +test_comp128v2("B80E227C8575C331DA9AE0F4050D218D", "4CE2F914C3EB439A03393C00"); +test_comp128v2("9ECF1E38C9B9103C6185B00F3C4D93BD", "CB38318E5B3CF543530D4C00"); +test_comp128v2("BAC15FB21C609560794F4C965685E290", "46B7D216BCBA27E2A4085000"); +test_comp128v2("C4AA0670C7B8A667728DA0D594069C99", "12D51B9D3C7909002613F000"); +test_comp128v2("D099EF68D7E3D1D47F23AD15AEE4B5F3", "93622C70D1D635CCF84E7800"); +test_comp128v2("B33945EE00E962EEEBDE6A8FF4742E4B", "509F4F51D9BEB63CF9B59000"); +test_comp128v2("0D473BB0B5BD4DEB25DEE36BB376C10E", "3FD579DB817D8A510BAF6400"); +test_comp128v2("A14218445FC5A8E72C96B1F27D73AB52", "A3BEF92801B0252DF5DB1C00"); +test_comp128v2("494C095A54E5CDB1A1F6095C42D760E4", "15A68280AEB04086C3638400"); +test_comp128v2("8F90256E47BE4678036609D34B89544E", "2396E34F472750F9D3524000"); +test_comp128v2("5C0927F8F0FD2307F2C6FECE9243F06A", "87AFF076277855F812670400"); +test_comp128v2("C636207195E46AE24C49F4F9D0B786F0", "86C6671A2A8BA28EC6918400"); +test_comp128v2("A7AD2E1B41F3761C59B29F0BFC5890F0", "10574CB3947EDCD7E9595400"); +test_comp128v2("C9FE56B04AC1EDDB9E04E352E8199A3A", "5C1ABFC9A21F5D95E1DA0C00"); +test_comp128v2("C3974645E95D98E4F9274CF62B0D885E", "ACCE97C26AA1DD1BB9340800"); +test_comp128v2("82D095C92DF409D3473ECA08A5A81B65", "30BA06CE2F1AD2A3EAE8D000"); +test_comp128v2("BFAA576B9A290496C47C3D498F8D4FE6", "B43D9C5448CC3F754EA0A800"); +test_comp128v2("040B228CF2C6002BE385DEFD7DB55725", "62D7DDCF277DDBBB84289400"); +test_comp128v2("F1E565C0B52EB2B1E24C17AA3848652A", "9F8A216B9C64DC5A03833400"); +test_comp128v2("2E8A846052A19AF00098BF1AE1FDA9EB", "2C5BF370EA47936AE4802C00"); +test_comp128v2("ACE3EC57D2DBFF11B9B8A81B4406FCB9", "6689168B45E7E9084283D000"); +test_comp128v2("7414C5D415AB5574A82668573BB04166", "AFA7009AE75A5B6E1C8AF000"); +test_comp128v2("A986D44920217FD956E7C4CBC3DE0527", "F9BF62C6B3C722659717AC00"); +test_comp128v2("A08A9B02F531CB9D580DF8176A3A994E", "D379914524C2ED1D1B693000"); +test_comp128v2("4C0F9E924F063A6243865DE1123CA045", "D7F6FEB5091DA38F0D1F9800"); +test_comp128v2("D55B8C7718CF349F906071C76555C986", "564E13F008AA9129A319E400"); +test_comp128v2("0613FF46EFDEB6A663D915B86A9D6C0B", "E75538CAD55D599EC6718C00"); +test_comp128v2("B00D4FA90CD2DA85E1E220AEEFE2C5EC", "ADE280F0C17C8BF566451C00"); +test_comp128v2("FD380C653CBF3A927A769324D9E00324", "3DD21D2EA170DDDFD5E16000"); +test_comp128v2("A9172812C62A2FB789825C71C23BE469", "765EA88CBA94AA15DD3BB800"); +test_comp128v2("59FA5C6FA03F2BD23E35CAFCAF58FD46", "546D5EE3655E43632DD94C00"); +test_comp128v2("F6A4D79BF1DA9F46E41241CD2CD723FF", "74ADD5456F2CD3059AAF3400"); +test_comp128v2("46077741E91463DCBB61F3BA88599848", "24D72BDB319C6EA927B37400"); +test_comp128v2("46E2AFDEF73C2242C2EDA4C690C91E1A", "23B988C1308602402A4FC000"); +test_comp128v2("C240BF323A1B10CF791397D47340B26B", "F13F3AD8A00FF908FC6BD800"); +test_comp128v2("87839B0D4AB1B531495D00751BDCB435", "ADAD6944C3392006CC85E800"); +test_comp128v2("635EFEF876F6318332BE61BE6B4B83E5", "4E763956FC5B9B2C37C09C00"); +test_comp128v2("4A4A4AAFB83EC7B93840A3DADA92F1E9", "7032880172E7BCFB8C72E000"); +test_comp128v2("915C8330D241274251BD71B7E6D37699", "E2003179F7CB405965011000"); +test_comp128v2("E20E7DC2DF7BAE037EC7D880B3C26E90", "992AADDC12E81003488C9800"); +test_comp128v2("EEB75A96C92304E40C2E0E806E918E9A", "BCA49B63865490E279409800"); +test_comp128v2("BB1806312EF173FB73897A3D0BE6A053", "F731BB08A833760754AE0800"); +test_comp128v2("64E576287B81C3442F95345C078D22DB", "B5DEBC603B1ECE7161C95000"); +test_comp128v2("DCB334F708467997480B458DB66356E3", "CFBD2049D829D9C42D26E800"); +test_comp128v2("39EC58A24300E932FF9258EBA374ED62", "A489F81E6E16D0F436977C00"); +test_comp128v2("52FE65AB5569A4DDC91DB5EB747AD872", "712CF42C24F212EE4B80B000"); +test_comp128v2("9401DD3CF0C494B91A3CB28A677A6F9F", "6958E170DB5879834C90AC00"); +test_comp128v2("A7A70C832ACD99447B4DA063BB40A249", "8C4337552EC9121D9C0CB000"); +test_comp128v2("F777485D595BCDAED8AA529E91A161F1", "97DE44F1E89882C3A91A5000"); +test_comp128v2("8D25D899D7458F37D0F26C7D5FD3C0C9", "1E9604A46215B01EE4C11400"); +test_comp128v2("2C75E9C40BBE9AC71B03E2B1A4FD8F77", "BA6F3343BB0A50DFC9F54800"); +test_comp128v2("5E2FBA59B74C51357D5944849B5D5B01", "D5312B4F4774EF49E9318400"); +test_comp128v2("B48D0294C24464CC796F7665C639A3A5", "DEF4ECF98FBCE2A4DF450000"); +test_comp128v2("E1EE10EFABD753F49C13D0B6FFE567F1", "C6CF830856A1AAB6750F1C00"); +test_comp128v2("328BE773AB9ACABE5EBDB67A72DAB593", "1246E6852A5B78EFC63F1400"); +test_comp128v2("C6FA835395102B135A0DF22ED100A30C", "F7EC6507B3D8882E9F86E800"); +test_comp128v2("42BA23DC01CE115FEE284E30D93C2EE1", "85061F767191A64FB6DF3800"); +test_comp128v2("590C81F77828CC50FAE2322F88F2FF72", "4428F98DAC165B709AF39000"); +test_comp128v2("DD5A394D5AF47943FFFCEED795E55131", "7BF03394EA112244A2E53000"); +test_comp128v2("E4B350364A61282E9C7E109C200BB59D", "22A39338B073F44ACC3A7400"); +test_comp128v2("2EC97054F229452094AB6E95713E2B73", "C7DC6BC4D8586FD0A278A400"); +test_comp128v2("9949BBF69464815BBADB53732B830972", "221299171F63C0DF3AEF7800"); +test_comp128v2("AE7021704039DB7C25139864145D2BD2", "1945B987B54CB70E5D718C00"); +test_comp128v2("31E7C45E5C16698DB87FDC4414521085", "68EE8B49C4E327CD7EFF1000"); +test_comp128v2("2C9301A7630A80058E6016DF1E61F67C", "22E69372E777618A21335800"); +test_comp128v2("8BA8B91866F892579CF8EB18BFBCD4E9", "F3E2B573F70A66FB55C23C00"); +test_comp128v2("312372D0F65B447765758D9CAF2434D9", "93609D380DFF429A870F0C00"); +test_comp128v2("CA787B420C4399138BE2317A0DC94249", "9D8372124BE92CCA0D06B000"); +test_comp128v2("27DAE7C8BAE72D001FC9002353E9B64E", "4E15629B933D694F68733C00"); +test_comp128v2("26BAA1215821CA9F90E4CD0690C10F2E", "58103A993006A0C200359000"); +test_comp128v2("A3D6F246FB435A7FF58E1E88B434AD71", "685673795E247655A1B4A800"); +test_comp128v2("FF468FF55671C17282B41DD246D2792D", "26BDB78D824FF8CDBA768800"); +test_comp128v2("600272165F44AF4C0E537AB5D8E66736", "3C79315DB6DAAEF9EA724400"); +test_comp128v2("508F035C9376D9FCC41AAA7D1CC764A8", "41FD7AF4639235E4A02C1800"); +test_comp128v2("F4D22B29DE342EEA7CD8E4E3F43A4943", "CD833E80A4BF33DF3CFA2000"); +test_comp128v2("58843C6F5856B56CA9198695EFE17CF0", "5676CE8A0AE61F33C3ABF400"); +test_comp128v2("6E3C73DB4F5CC678DCC7BFDEE568E826", "A247316EF8F882D42FCCBC00"); +test_comp128v2("D37AE74AD0489776723124F6CE81D42D", "78355AEA1296483A3CBE8800"); +test_comp128v2("F43BA41AD0DB41DA4F54FF5D6FEE4771", "DC1D9BAFDDD5EE83C1B8AC00"); +test_comp128v2("B65FB4E50DD0050E79BAF78FD2F4B9BF", "B0E291BAF797A8275AD71400"); +test_comp128v2("8DC778A2ADA661942266E0B86CD7DA91", "B9D294C0291018F04A09E400"); +test_comp128v2("B6E293ECCA4A56F1D93C8242D5E6756C", "25ED1EE23A3C11FCE7D57000"); +test_comp128v2("4B5B86CCE2090F22424EDA2C512197C8", "A365A6A867B02EE9343CD800"); +test_comp128v2("9F250AC936FDA89F1966C3D3812BFBF4", "3A4AB781109515A1139EE800"); +test_comp128v2("87CF86E273A7A8BE687D1802005D2A5E", "8ED03BDAA9E92833A6727000"); +test_comp128v2("98CA9A659D2C4DB1A235DD54BA36EB77", "0AECFC5BE2B7C1DC6D0BC400"); +test_comp128v2("53EA0452158CD2DF5F5AE2DCAAC86BFF", "29A163B42A2D557A70974400"); +test_comp128v2("74B58541693349756299EE79D408C415", "56D28DFB499FDB30B87CA400"); +test_comp128v2("16E25268D3F1498A42525626C2440505", "39FCE1A8505CD73BA1DAB400"); +test_comp128v2("737D32452FEC46C026B249E7D77B9A80", "9D515ADFCD93432FE73A8800"); +test_comp128v2("ADD0543912E4A632AC4C0814294751F9", "59D694C394485E65DADDBC00"); +test_comp128v2("0F30160AF9D726612C00476DA06F2FD1", "6EEBE451744257F9435F6400"); +test_comp128v2("0198B362FF964F890256674B225AE2EF", "DAB5FF67D8925B0DADD74C00"); +test_comp128v2("F99975FC4D5AD6FDA57655CF1DC35FB3", "8396623C8B44C2904815EC00"); +test_comp128v2("762CD396934B5E7916EB48D07E3D8383", "D597556F2C650DCDAB686800"); +test_comp128v2("ACFD433259569169FEE586564F056F31", "CE6C1FC52C2CC10E886B6400"); +test_comp128v2("C0C3AA12D8EFA599621B8219AEDDB39D", "F46A4FF31C0FB6ADA7FC3000"); +test_comp128v2("88964441874790C6B1AD12C6BB907060", "CC9729FDA25819796E90D000"); +test_comp128v2("BF65C58D03260691C1267E992128F675", "BC7F343F69A3B6C09C114000"); +test_comp128v2("B13CE2B597DA27FB9DE4B9ADFF717495", "87BE699F1748597BCFA46800"); +test_comp128v2("A2680E79DC76B80EE268FEE9C1EC945D", "18E19922978E90020F353800"); +test_comp128v2("0B31B79AB27925553119466A3C845C49", "041D5919C3CA2542AE91AC00"); +test_comp128v2("FFCA938AC5DDF97C526941838527CE9E", "FF7CAB0E892D9AD987AE2800"); +test_comp128v2("36D5B7252A7B57BE2D4E06879E6975C4", "427F72A3254D4BA24C1E6000"); +test_comp128v2("E4FEB6B8FB01025D6C479852FEA000C1", "825845CFF96383778D0ED800"); +test_comp128v2("E138E7CD58527B7022BD1553C4E493F4", "71AE9F089F8B970EA986F400"); +test_comp128v2("F0FD7F38EC52265FC33D60DC9553A5D7", "140CEF85332BCDDBC3B26400"); +test_comp128v2("4F0BDF1C4BE4A35C065EAAEFAE646A01", "96E64BBB007D4761869BF000"); +test_comp128v2("03706861BAEEF0DC1CEA996C3EA93D92", "C2CF16AE93CB94D5A85FB400"); +test_comp128v2("B1259AB7C681443C290E0C1BF5224DC1", "DAD36B50AA8455AD5D6F8C00"); +test_comp128v2("E225F155FA5CA852E151B7AD3BC40394", "9F480C67DF663A51B91C5000"); +test_comp128v2("30098EF69DBBDD25FB9C87315D3020F1", "51D39392BCF956FF0F34F000"); +test_comp128v2("749E0FD7B6ECD4B45E80C6E54A14BD0D", "44F77EF7111682F411EA7800"); +test_comp128v2("5A5444F0E7E7C61CFB031F86E62EAFF6", "2F65BCBA94C07D4346DF7C00"); +test_comp128v2("C9C7A48094A579C8A989B28848DED187", "CB88C47F30FAB985582B0800"); +test_comp128v2("50449C950CE2DB6E0DF22609E005E175", "64EB723CBF43873DD2320000"); +test_comp128v2("9DEEC383005D68C05C665CF484E371FE", "F941903FC1062E6FB20AFC00"); +test_comp128v2("FB3BB14E175FA9172A2741E04F139B5C", "4E9CD42E9C244AB3690E8000"); +test_comp128v2("24C01EBBC6B68F9BD4850D1BC360FEBF", "BDFFBF809BA31A516463A400"); +test_comp128v2("FBF4841145F14A97DDE18D3ADE4CA794", "5CF60E45C59FAEAC54A66C00"); +test_comp128v2("B3AD72EE04894CB4B446CCB338E31656", "39C9B3FA3B84200BD76B8C00"); +test_comp128v2("3BFD7004020C1DE138BB6C78F2042D89", "5BB03480D9B6CA5180F82000"); +test_comp128v2("024D288A0F95E4633BD0B05CD5B700FA", "39DFD93B2CBEBD1CBE42F400"); +test_comp128v2("1AEC0EE2B2E999AB36583974C7668FDC", "68FA512A754892098A4F7800"); +test_comp128v2("6BE0D7EC8A11ED5969386ED31F2AC1A0", "37161F968FC6655AFE02E000"); +test_comp128v2("FD087BD12284E354ADA00FBD47EA0B99", "B1E477DCAE13CA518EEB7800"); +test_comp128v2("5E342819ED86F7026BF73B76227A8CEE", "B002DE9D67667700161BEC00"); +test_comp128v2("75D09A20C3586EC73944AB4C216D44F5", "8AD9F7E3FD40F9637AA0E400"); +test_comp128v2("0E360DD744AA863F6E0341840510AA1B", "478446EF066F048C82A65800"); +test_comp128v2("C048603EDA30D4858F8F6C48A9563B41", "4D53E54088CA31C0AD9A6400"); +test_comp128v2("759445A6138231604DF7C13CCAE4BDEB", "5CB44BCCD6460A0950CAB000"); +test_comp128v2("A91CF2204877ED8903E7B1AC9348BB22", "915775CBBD20EE58C44B0C00"); +test_comp128v2("E21BA0D598D2FC61442E32449589112F", "4A83081F3332DCC326F5DC00"); +test_comp128v2("04F3AA9BA2A1D95E8CDEA6FC34308017", "D6082B73B98D161CBD653800"); +test_comp128v2("594A2A8792456A71705BDC4E89E2521E", "65929B7C79B8DEF106487000"); +test_comp128v2("446D9EEB6FA4D645BB682CB86B8277B0", "5AC860D938A44B12E17F0000"); +test_comp128v2("C951406FF94B294E9276024B879B0661", "AC12B1BC46CBCB5AF2B0DC00"); +test_comp128v2("4E542E0D75649646B084DE8FB0285C77", "65BB3D00B13D1EF9E5173800"); +test_comp128v2("A1268CF4BAF41B5D12BB865F0E3D8B22", "3BE83D7A359D3597AB3B2800"); +test_comp128v2("36C3C451F2325C18FCDD73CC0FF21B18", "4B6718390394E16180E97000"); +test_comp128v2("CE257F14B53AC96792EA2CE8B4A4E58E", "A519EDEB91EFC18B1256F000"); +test_comp128v2("3F14F22F59C516912AF25CA62FA8F053", "F3BA543B2C728E3FA4D30800"); +test_comp128v2("3A4F5220261EAD5516E8C517BD2ED831", "DD66EE67A690B8633E51E800"); +test_comp128v2("495C634F6667460C254D97B35445707A", "C6F29CFA4B9CAED36E270800"); +test_comp128v2("66EB5313B0C83A64FD376BE02E03166C", "5E895656A03CE5C83A4DC000"); +test_comp128v2("35889435A0DCD4B799BE7695320B69CD", "ABFE28829FE27DE9E31B3000"); +test_comp128v2("183B1F81EE25E31AB5DAAA33D015CBA6", "E80C570BEF8028830FB68000"); +test_comp128v2("F92B33E2BF63BF05291C09F0213FF72D", "9FC5D30A549A662B0278A400"); +test_comp128v2("E12E30F732A3A2A206467BB3F174FF2D", "FBF985953AC4308EC8678000"); +test_comp128v2("E66C7ADE2AB71A9DDF8BA3A18F9C1302", "E2F0A7D8972CA55D5873E800"); +test_comp128v2("59DF68C04CB938BB9CAFF8EBBB6C6CA5", "A12CE62E9B86E592D647C800"); +test_comp128v2("5688229644E7F91AD75B47BAAE320C27", "445E1ACDA1CEB5490A7B5400"); +test_comp128v2("8B26CFC065CE0BC44A97E33A5A07345C", "75F0660EB010AB40421F8C00"); +test_comp128v2("77BE38B4815AF6DFBE17DD48BA9AB1C9", "A8F61F6D8CF832A592B4B800"); +test_comp128v2("5E73AD699EEE8DE8460F2C01C2077CD6", "CA6BFA4A79B9104550A07C00"); +test_comp128v2("1B546F3B274639D31AE0ECF3C378D180", "5A668DBD6AE23D628EBD1800"); +test_comp128v2("57887332BE21016DAA2200E69A5E850C", "937CBB32F8A08E24E9550800"); +test_comp128v2("F11C61AB9A2DCF1D73D2566C07F2F90B", "70BA40635D38BC070B1A0C00"); +test_comp128v2("2DFE7BFB3589E3EB3E77895EDF0130C3", "7C0BF94042656E559D11C800"); +test_comp128v2("C7F9F26B1CB9C77524810B97C649137B", "CC9F502181117A6015AEBC00"); +test_comp128v2("E3579A2F7B2267295B14F6A2B2F09937", "FE52FA20DF09C6BAD47E9800"); +test_comp128v2("7A2C147FF0868F41FF61BD482C7E21BA", "81B79CC89B3DC23A023F5800"); +test_comp128v2("ED5E4033949163C5AB820CA16C51AFF6", "A82B3722F3589AC19CFA9C00"); +test_comp128v2("22AB205407EF30ECCDDA49B779ADA405", "9B570A9C9E89BB11D1C04C00"); +test_comp128v2("BD5EFBC04BE376CADFE0207ACD8AF095", "AB4D42353B1DA514E410AC00"); +test_comp128v2("785180CB3BC2FE8792E424C407F12437", "03BF1E622929CAA732929000"); +test_comp128v2("7E1DBB304169F6DE4F12151FDEA7B4E4", "F74A4BA566896445694F0000"); +test_comp128v2("6A1668D9BF09C4B9087F7640A835AE9C", "C467FA442E9052B1A1944400"); +test_comp128v2("096E3A437ED6A342BBA60D4484EB348C", "AF5684AA97791DB5F4F04000"); +test_comp128v2("218223AE24CF97E6BFFFFF1F646ED3AC", "912BAC5C763BAFB866356800"); +test_comp128v2("32E34FC02745575D7844046B5EC92297", "753BA5F36C33B0A8FF19C800"); +test_comp128v2("78193A44A12EF231CA47659678D49122", "B812FB79D7769618FB98D400"); +test_comp128v2("4C79BDF37D02F924936515FA9191535C", "3A3EAA1A02A8770D634AC400"); +test_comp128v2("9149129D54A114706A17C92268E95788", "4BAE933AF24AC862AA02C400"); +test_comp128v2("827123B8A0AFFF76512B9A4247F18263", "4E176C62EF8993DC49BCC000"); +test_comp128v2("B7D362E0CAB7936076570676D3B00926", "F7142C9528BDE0C3410DDC00"); +test_comp128v2("C4835D3873B027F4A04E01E09F10B567", "6CBDDC9F268BB2523D371400"); +test_comp128v2("2C71B6B495E2280B5ADA4882926012E6", "6608CAED6ECE6BBF4E4C6C00"); +test_comp128v2("4DFAD94ADEFED514A8336CF78DF291E3", "BC9E3927D64A5AE83FD09400"); +test_comp128v2("39E9E060A7A89B40951170834EB358D0", "882709FBBF4C15A53ACAA800"); +test_comp128v2("93FA22B2882936519A894C83FB71D7CA", "10CBC4E60938FF6E02BF9C00"); +test_comp128v2("6D3054E4F523088E4672B051B4830D87", "8C235DDFDC54AC96423FD000"); +test_comp128v2("9A9AD3AE912E007D1B7A773CE5995F5A", "C7440E0B278459AAA5452000"); +test_comp128v2("5DE6E922819457D8A17A4495C432CC78", "346894BB2BB3E5396360F000"); +test_comp128v2("CA9D461DE4EFE173DD0F70B21F0EF2E4", "897F09AACA45A443DF046400"); +test_comp128v2("6CC4A0AD6363AA75173ECDDEF1867500", "5E1369255B428A3CAFE91000"); +test_comp128v2("A83B7718967EC4E71FF17A13E504979D", "8ED613C3B5EFDCADB43EA800"); +test_comp128v2("920D2CB5A77A118740641007D01050DA", "5CA75E88F9DDE10943C2E800"); +test_comp128v2("A25AA14FAC524225CF34796E3B48D4E1", "486C8EC0519E9CF7BE04BC00"); +test_comp128v2("079234F699B3D4F4E10E81A6F6CB4AF2", "953C821F1B60AFA612147400"); +test_comp128v2("2C0FA3B7884EC1F49A1FD64D25D918CF", "66B1BE35A97A35B552B54000"); +test_comp128v2("4809694A853437CEBC1430403F2C0AC1", "8B52048DACE2B2426E64D400"); +test_comp128v2("CA0B1E50C790195CF83E867BBBA1B11F", "8A7B4F4A857CBB91D743FC00"); +test_comp128v2("750AD2FEB9321E8161BDCC3737F294CA", "3AFA341A9F80B2C6DECFA400"); +test_comp128v2("EFA25251D61F8DED93F2DD2F5C773DF0", "B05617847AAD49659499E000"); +test_comp128v2("4372D23AD9D5985A321D47FF3B94311E", "2F0458EEAE7C37C9B0D28C00"); +test_comp128v2("0E4D5FFBCC246C0B694D0BAD0C6E01AB", "BB9E49591CDEA7B38E42C400"); +test_comp128v2("C2AF47D04C203797F5EC2CC841A3CEC5", "58EFB4158198FF36194F6400"); +test_comp128v2("5A7F52669369320D3CD5883FA4EA3F2B", "6CCC2ECD466D42B7A4305400"); +test_comp128v2("C50ED70A1FCF421FE6D3E68BAF7D90A8", "DB98CC5763982C52885DEC00"); +test_comp128v2("09483A1EED2CF60CCE0DF670E077459C", "17C5625B1E4B638831C73800"); +test_comp128v2("9E8BE0C3DF99181656D71A665B2F6E78", "8930954F0BEE0ECCE8FF7800"); +test_comp128v2("2E1A3948DF968DACB8B50C7BE01F7457", "1AFC087AF7C3DFB650B5BC00"); +test_comp128v2("DC70952E477B9CC06C507BEE1B1D0DF5", "2CD73DFE8A454951F8F5B000"); +test_comp128v2("20C31EC84115A792269692DD24318D5E", "710E521A571C20908E4FDC00"); +test_comp128v2("57EDCE38D0847365DDC3E2476AC3E1F2", "9C8BA4C70BFFA8D374427800"); +test_comp128v2("2FE14DF7EC89DCFC40F4532DA4CD8FBF", "E929007EF952A2CBCAA1E800"); +test_comp128v2("C891106C395E6FE27CB057717252D1D0", "426667B142F5B2C6DA154800"); +test_comp128v2("E00C2B6A32C78A39943C5C47F2662676", "DFF8A3A85B25DC99325CEC00"); +test_comp128v2("FEC57F0F123AD7D36B4B6F35703F64F2", "0E5DD6F7FDA06422FF0C2C00"); +test_comp128v2("7EA718A0C7FA4D3C942BEDBFF0E8C27F", "0494E06696570FBC07B20800"); +test_comp128v2("5202C1B460DF93CFC147F50DF0DB8AD2", "909CBBBB1234814F20B94C00"); +test_comp128v2("A5BEC24FA1715EE2A004AA64ADB891D8", "79D301F620BB0AF9F434D800"); +test_comp128v2("FE558B21568C8EC4F96ED18492327DD4", "20D3E5E9D2FD6C7B33644400"); +test_comp128v2("72CD73EC048C026C289501852295D8AE", "A7BE173CBA66C90364D90C00"); +test_comp128v2("68359A95139538BDFDA335F9766CB52F", "D9153BE65D53CA5E79DFF800"); +test_comp128v2("FEED7553983FBBD1D9758393FDD5F1B7", "B8CEF24E0140134FCA4E4000"); +test_comp128v2("0A07B08315437682AFB159924B0686BD", "4CAFF446C895B91BE7A06800"); +test_comp128v2("3C326933EE7F409FF467A907DF0036F3", "F80FA736C483EA30DF9A7000"); +test_comp128v2("95F16978198BE120A3080E7339C4DC16", "61B588B440110F1176018C00"); +test_comp128v2("4FB88DCEA84BEC2D61D59D26AAB1E5B2", "63B99FB3D4828DF14A632400"); +test_comp128v2("99052813B4FE1DE320C9D18250D7EC0A", "99B838E84079665C7AE32C00"); +test_comp128v2("58B92356701F585C5DEF34A1867E1164", "6E4C4F64265374992B89F000"); +test_comp128v2("D4730E1A155968372A2796C007DB61C2", "F24DBC3188928DD7F6DEB400"); +test_comp128v2("31F061BE095DD8F0CB9B12915F677513", "432999E45E51F50F160E8000"); +test_comp128v2("A8FA54FD77B174B01419DEC483C3BCFD", "960214386FC602BD0B634800"); +test_comp128v2("B69C34EB57A1E9BAFEA2FC8BDDDACB97", "D31496A364D337F21BA43400"); +test_comp128v2("E3DEFCCF108C176B427C6D558DAB2257", "FD4F744BDFF1BD5408F63400"); +test_comp128v2("634413A6F936B67FB937E47831BA1744", "3D2045CEBCE10C5E3945FC00"); +test_comp128v2("761FDBAD45F01BB614C990C5DE842A48", "7A29FE2AAB86F4F7BC520800"); +test_comp128v2("EC9ED9B997C283EDFAD1D86D2B4A7164", "058544343376B8BE3F87B000"); +test_comp128v2("81627CD5C956F5B71A9C0ED4E521420D", "4E313907E89F9F9B55398000"); +test_comp128v2("3DCD0B3984C8247B8562EF6237E9545F", "17BB7D71DC7324EE7C747400"); +test_comp128v2("6F27674CBCD953B4059F3B55F78E8795", "14900F7EC6BC6B801CF05400"); +test_comp128v2("ABCE668D4532111068E0094A3A100E4D", "A18AF444D2BDC12B60B2F400"); +test_comp128v2("280E9EBF56FAAD5DB2C5CF73CE296DEB", "20055334D6BD65B69284B000"); +test_comp128v2("84608515AAF1D869F9EE47B6EF48EF0C", "78BA397766592C4E05A7E400"); +test_comp128v2("1692DA2B7086E7AA8D3F3035C7107359", "87194D864264ABD4CB900400"); +test_comp128v2("07DE064FA13210922ED16199034CA965", "2ADF1D09B4ADD164B76D1000"); +test_comp128v2("75EF82FBCC14256470722FADF3776AE5", "CD3DDE9AA2529DD7A8C8F800"); +test_comp128v2("B99DC3A08EB5341A32F8C62E4BFEE43D", "F417AB93249FE05D579B5800"); +test_comp128v2("A4183E5E094E733AE11BDD7F6331043C", "90655E9480FB2602C4D18000"); +test_comp128v2("28D40D70C58A581E2BA5DB2D8312BA8B", "535906A3650D559BBC8DB800"); +test_comp128v2("13B5B284571B20D9EE9799C96BD40FC4", "B71466E5B1F11AD6B8AFA400"); +test_comp128v2("0029C96AEEAE094A86983794BD582AF6", "836AAE69B149DD54877A2000"); +test_comp128v2("DBF2EC98F31ABBA2722DBCF89EC6A44E", "68343042FC4F198337C3BC00"); +test_comp128v2("083D0ED162BF1A80574B5906CC1F4AAA", "FA3ECFC6779C1AB430E4BC00"); +test_comp128v2("4E1D795034EC45B8F9821D6CA8203BDB", "E816931A5308C59819AC2C00"); +test_comp128v2("4EE4972E7F60987243A9799E63D662A3", "B16939018348AF781859E000"); +test_comp128v2("849CF4F89D3233F3E584CE0C129D4BFA", "D9C2178D63D98597ADCA8C00"); +test_comp128v2("57EDC728BCC2B30DA9B7BED3393C3CF9", "CE8A219B97FC38CF8EB29400"); +test_comp128v2("9A3E2A0D88F960CBB1808EE7211C6362", "B4753C1822EE5832EAC3D800"); +test_comp128v2("032219016ED376CF2D9CD997FB3ED6A6", "9D99910AFB22549BFA59CC00"); +test_comp128v2("6465F4B9C6DBA457BE7EB0580642E4EA", "349CEB847C741124EECD5400"); +test_comp128v2("EC5EAFC6E0CA5C7811E4DBE5188454D0", "FF3B8B9C7E49CAEB00BA7400"); +test_comp128v2("FC779DF1C75EC65275971CA4DDA54445", "BDF0ACA83F71F5795FF91400"); +test_comp128v2("97167B93AEAC688D65F5CCA5AA540628", "A8934C20176826D8E9210C00"); +test_comp128v2("D6FFDE9C6396DBADD186625777F0EB1C", "25D38BAB18E0B1A4561EC400"); +test_comp128v2("BBABE99B5DA9F492794D1B33F2E69306", "A2F9EB555D1860FCEB90D400"); +test_comp128v2("31336FEC645D23BFBDB2F17A7D051ACD", "DFE297E427C7EBBB85125800"); +test_comp128v2("F4CEA98E6B5D08FFDDEF9E83F02EFF76", "0793F349B87CE001C3D24000"); +test_comp128v2("03C233F35A8980F0167C9C01FD381026", "1B936C46CFBC6210208A5C00"); +test_comp128v2("83937A0CE40B24304B9FD30B2ADE62C8", "81449A34B68F541FC0D26800"); +test_comp128v2("CF885925FF754C3D2E0F17FEAD4AB540", "FB623A02D722E99948756C00"); +test_comp128v2("B263174AD8926BDBDEEC5E9A9E92424E", "4F2D03FD412BB66F8FB45000"); +test_comp128v2("3493E0EE360CCA3459BAD5F44C23E804", "0C327FCEC6FCD5C9BD410400"); +test_comp128v2("1CBE4486B6754A05800548C706835524", "A5B423FCA3BC87386CBCEC00"); +test_comp128v2("96057C428E150BBCBD9AAA18405BC04A", "0683236771BBE74B4A2E1800"); +test_comp128v2("F2B319F79573629E56759FF5BAC67303", "C89F69CBFCAFB5CB5F5BE400"); +test_comp128v2("1DB5E2D4F572F50D2DC637921E46D270", "8B09544DFDD6BA2F6D8F8400"); +test_comp128v2("8EAB71FD2C9F62866607E317946B8515", "7B0C4057E9CF10535B275800"); +test_comp128v2("9033CFBD34995F33F7530BF78C207EB2", "34D5E0DF065F9CD9373DB800"); +test_comp128v2("55B56528FE385672E006DF3E5F15593C", "71D3C14D2EEA2465AD0FC400"); +test_comp128v2("52A4AFF178091E85625C39583A935096", "7EAA20BD18083FAE1FED9800"); +test_comp128v2("7F3F6A273A8A75EEEA484F270209DE61", "695C9E3DE158905DB1B9B400"); +test_comp128v2("B607EFEFC1959FA8B32E0979F241CD7F", "C3B8B80D01C9390D837DD000"); +test_comp128v2("B5D74887A6DC4F652ADC13A10D4CDD9B", "19CC8430EDFC5FC268973800"); +test_comp128v2("A09F045DD589B5223037DFEE3519A376", "E60E7F22341E66A3F3EE1C00"); +test_comp128v2("F3E0ABB2B1E4F00647F2D5C236A1B26F", "7A776258F5C5649E5E201800"); +test_comp128v2("C47160A0897A8422C528D7BFC8D20188", "D1D32C73E3DCA58B70BB3400"); +test_comp128v2("F779D231ADDA823C8F9EE13C5CFF8327", "F1D9065561B6D0591BDAF000"); +test_comp128v2("BAA3CD7BE838696F2F8F7161D6C8BC07", "2F4835836D00DE30A77A2800"); +test_comp128v2("29D8058453F0FB8777E0116247D1624B", "D626DCE8C83BBCAEB1E60C00"); +test_comp128v2("962F26AB8CC6CFE7004EBB98219F6E46", "3114E64D5E558C1CBBCC4400"); +test_comp128v2("B4C608BC11A358456FD44A38ABECD461", "1EF6FD55FB22D74591F2DC00"); +test_comp128v2("DBC87B90E5CC736D89A063C8E7EA12C0", "69A047C836101660FA0EE800"); +test_comp128v2("E2FB2C67E647416BF2A58284677FACC5", "6995DFA7822EFFB01826D400"); +test_comp128v2("6D2FF6CD3C9A5038B9B33755C6DDB410", "4A047503796C5AF0A83D7800"); +test_comp128v2("3D20566CFBFCBED16DF8D3A0284A85E6", "835C3F58AE388B93F74E4400"); +test_comp128v2("88F65F3F649962491D3E0FA045EE23EC", "9612855A987ADDA693BCCC00"); +test_comp128v2("C6ABB80355AD24C621F34965507BDBB3", "98603A29610E403253C30C00"); +test_comp128v2("C37280108B16E450EEED07BA7575FEEC", "2B1FC2879493BEAB8BA75C00"); +test_comp128v2("F637E1EFDD8A8F577040337DE4817A7D", "00E125367FED4AAD7277E000"); +test_comp128v2("EDE6AF5E598389D9BA050D5527405DE6", "904AA4D51E003AD87D170400"); +test_comp128v2("AAEAA56781A803C19F7FD64ED2ED2DB8", "EFA8298CB630D5D9C3325000"); +test_comp128v2("1B7AC6EB7CFE9DB7CBD20B3AC8BE73F2", "46DE7FDFC06B8AE2F3A4C000"); +test_comp128v2("E6A8681B7B066BA7CBC43139B22C3DDA", "BA6F5DCB9895FFD2509C6C00"); +test_comp128v2("A12237D9124C39E638D56647E6A86452", "D25F86768AA3E961C69C0400"); +test_comp128v2("07066B004388D3DFB3B04A64AD83B7F7", "7650268E5DDA7BD220CF0800"); +test_comp128v2("55A2BA46DE50A3C16EDF3100416146F0", "5FA039D0354C912D161E5000"); +test_comp128v2("6109A82102094EA00C2DC1F5D1458EEF", "8D84E7F5DF9FBA1102E23C00"); +test_comp128v2("F37ED30ED80B697C3C71DC8CF41CB486", "AFA2019028CBC07C803FF800"); +test_comp128v2("80D00951B03829654F56D8577B2319DD", "259B7737DEA5AC6586C9CC00"); +test_comp128v2("4ADE88B1C1450BD2C04DB298627E794D", "11F7BD5CD2F0457A912F5C00"); +test_comp128v2("6B8CDA8600BB3D20418AC2D6AB2BE0FB", "6CB450249C7A80539ECCC400"); +test_comp128v2("AF5D6A632867A1AED9B0591504B6C52A", "8976868E00E168C2BFCBD000"); +test_comp128v2("D7881B90D486C90EFF4389A071039F0D", "F652A1C5A41ABBF0AF09BC00"); +test_comp128v2("31744AC378C3A56E2E599A052133E3A1", "990811B8536A91B40FDF3000"); +test_comp128v2("DB828FC7E2BA095663B1CAC857B1C882", "991E252E53D405FA7584CC00"); +test_comp128v2("7789790E921E29D8CB10D2E90A6CFAD7", "C0615EBDF99A548693DB0400"); +test_comp128v2("631510BEDF7A2CF31DA6E69F9AC78378", "6D875FDC78C70F8BCF206000"); +test_comp128v2("41D1BA21CE28CB116716247CD1567A1D", "94903B7659431E454569A800"); +test_comp128v2("0F98273C34B90E685BD7873383CB3BC7", "0C738DC3E630AC6FDAE9C400"); +test_comp128v2("75BCBDB5B2E23F46B6366229281E5487", "68E6EF3AD2A857847D050C00"); +test_comp128v2("A2293CC54F3395A790F86AA56A95E357", "B2FCBED0F540FB5ECEC9AC00"); +test_comp128v2("6E92707ADB71C3808BA4E241DF3EDCF2", "D45945189B01B92C0ECBCC00"); +test_comp128v2("4B469FF0DD32AC00928D4770977EA271", "C20B5CC8B92FF28E449FD400"); +test_comp128v2("A0FC84522EECA927DFA68F9D07C70B0C", "451A254F4DEDE634F514D400"); +test_comp128v2("FE996981505A918727D5BD232B0E157C", "646E03E626B160D204C3B000"); +test_comp128v2("4F388F8FFBDA93A421167BD44F368647", "5F6F12C381E2E75AE300A000"); +test_comp128v2("0086CFA9CA7E7AFE28C4497FD19AE133", "928AEEB2868BEDA13F275000"); +test_comp128v2("4359ACB771F941FB8F52513D01CED563", "393130BF04B3D914DBCFF800"); +test_comp128v2("A19C58E94C9EF7C363A627A72EE4C57C", "B1A84094A806E28A43B57800"); +test_comp128v2("C165902B95C0CB08ED5DC0FAF3580F2D", "6CCB395862241FA3661D6800"); +test_comp128v2("26BC352460FD073FE015A410A7CFA935", "61E88484BB88EB782141E400"); +test_comp128v2("4C3F3A58186A0DB703180BE8E4AD5387", "EB8671AD139925539E964400"); +test_comp128v2("E9CC86936DF7AECCA2B86736689DF416", "ED230A13BF046D8507B77C00"); +test_comp128v2("2D90CEDC4BB18209C39572AC480BA46A", "E011AF24697A323D4CD4D400"); +test_comp128v2("D769D834E79706D9D620286FD60B1882", "35943940C4DA30A49167C400"); +test_comp128v2("FDAD1FA63E891B0D3BF81D8629FCEF99", "1C2DC750B9127257FC288800"); +test_comp128v2("825721F453B177BFEF0BAE758AF1AD2A", "77052E1CE9499B1B7867F400"); +test_comp128v2("2F3D588F1FE8E4CA01533D4A0DD9B4DA", "141618BC5D4E72E62A9F7400"); +test_comp128v2("1B8A0B4D6916EF18BAD7CADCE39D2833", "AEF6463AB65B838A5109A800"); +test_comp128v2("B32247244EC86BEEFC52D7C2491E9D74", "116F80B9090964FD599D3800"); +test_comp128v2("3BE4339301C93DED261879486C6A8D90", "8E23D0F627E7802D1A3CD800"); +test_comp128v2("C903F42E92B38595CE04FD53910EA6A1", "7E92DE635B26DC6051E8F400"); +test_comp128v2("A24E8A73014E79FA74FBC2CF1CBAC711", "0989A5AB4FA9CBD9AD0D3C00"); +test_comp128v2("2F3F558FA77482A4CC9922AFFC7802BE", "281A9A26975E9C768A7E1C00"); +test_comp128v2("82910421BEFAACBAEBB5EB41DC83208C", "A2D604FA378CF8119DB73800"); +test_comp128v2("53E78DBF2B389F15A2371DCCEE1E1DA2", "8ACB8E30CDBF4AF3839FFC00"); +test_comp128v2("559E459FD9ECE082963014F6055E0E36", "436F9DDD7F7E58599A5ABC00"); +test_comp128v2("719BF029031FC8D8650BC2699D5DDD18", "A66649CF28F4FCEC3C4E4C00"); +test_comp128v2("723B50440DE3F461C4E5BB5BC9CCB5F0", "B8686043FB0F1413AA938400"); +test_comp128v2("17D769E91662028370034FEFD2876A25", "635E411815C51636EF944400"); +test_comp128v2("0C102DA3F7A14B3A85B2A92A31CA4789", "0EC89144BABEF0E7095C5C00"); +test_comp128v2("AADB189813213B480EC68B9678281753", "AB74FA76105F492560E98800"); +test_comp128v2("5919335F3F34EB77A0D13D8790E78DE2", "8B1EAD6A1613CB2D66A6E400"); +test_comp128v2("6822677E661136749615304BC7FE951A", "5C94BA4C4C4C6A1A15AB8800"); +test_comp128v2("2CC83DC6F20C2A7CF26E091238784A90", "9AFF51719A5284B6CD051400"); +test_comp128v2("5729A297D31DCA3C80C1AC10AC176B22", "D00E1485CBA3A95D55FE6C00"); +test_comp128v2("8C93C54A70BC96C53D439450A3FF9807", "FEC899718D29F53351630400"); +test_comp128v2("85CDF4DB93CC4C8317EB38D365154735", "091A1DD86B98DC9CC88E7C00"); +test_comp128v2("2ECDC19D1D190EE4E6AEF05FF23EEDE5", "5CBE8BB86ADDEF96A8CCB000"); +test_comp128v2("0797E696BB2890ED056F4EB0528AE0CA", "793D86F92A994DFB06BC1C00"); +test_comp128v2("C066293DCF36C84E6B3CFE96F94F9C47", "5F12425ECEF96D7AD1DE2800"); +test_comp128v2("BBF3B6F26357F2D1079ACE9DFDFC5ACF", "1BBE191A388CC485ACC73C00"); +test_comp128v2("B4A0038D686FBA95824576415B778DCC", "AC22616B710B0813F74BF400"); +test_comp128v2("23D7856727E8712982B14CF92F15BEA3", "C5FBA55A7DE5D2383803B400"); +test_comp128v2("56CA39A1C3CBFD2B69F2655FC24FE648", "C483786DD70F46392ECFF400"); +test_comp128v2("06EB61F4D242712C3DF57BEFD0CDEFE1", "3F1ACAC22225021770211C00"); +test_comp128v2("36C3122A765088E042535DD98BC9ED18", "4AFE30D76B2A655E030ECC00"); +test_comp128v2("DF71036C59630C04C024ACD193606F4E", "C69F93BC5CD672FA60646400"); +test_comp128v2("0A52F96B6B364526C5A69E166586D25A", "CCB7F20B61EBFAF3A43D1400"); +test_comp128v2("C945FFBA58D767D0D10D9F782CEE0187", "C9843051992470B4CE005400"); +test_comp128v2("FDFA26664DEC8A4924CB13A5FC20EE17", "6CD559CDDB082F8DA4352800"); +test_comp128v2("12A863FDE1C0EE9B6D16DE221CFCB61A", "F78ABDD98DCA48EF73190C00"); +test_comp128v2("3A5F7A1CB88C2C9956749106395F96F4", "34BC4920C153F06D3B7E3400"); +test_comp128v2("604BDD6E1FFA40CF8C6F96DFCDD62DA8", "4984353CD8F24EEF1B6D7400"); +test_comp128v2("9587947D970D63EBFE4AD39D0E82F512", "339EAC3E342374FC2A164C00"); +test_comp128v2("1A6CD41A12ADD4531D8296CECDB12374", "3790B825CC997DA4B7A7D000"); +test_comp128v2("D6E632FAEB35738451AD453137E9F3BE", "5EE75C98E3F881BE277A8400"); +test_comp128v2("DD3FDEFF3C7F70BD04683F6DB3418F41", "BD09AC2921A2DB430D86F000"); +test_comp128v2("527D3DC8958F7E48800A4061F1B4C52D", "616B6E288F8484D1C5FC3400"); +test_comp128v2("49C88A8C09113B1B20755F2BD890084F", "4939E9DE1A45020E61931C00"); +test_comp128v2("F8028EC02D6E7E00021452C58B0B60C7", "E5D8BED53BFDDC5D32820400"); +test_comp128v2("205E4C48735F32916A0E1D3F3A0B6B21", "4AD530D94EA8D498044B4800"); +test_comp128v2("B8690268A6F86560B3C5359C6BF6FA3A", "6A92D7E521805F27C5E67000"); +test_comp128v2("5ACCD297E16C479EF11A21BFE70358D7", "FCF7BD1B1EA29CF4373EA400"); +test_comp128v2("74B8193542AE198C23C6031F08FF43CA", "780DBFC6135777BDF9F79000"); +test_comp128v2("CA25D7D6F552A94C5481386366D1A0F5", "99547CBD65A09C3CA2985C00"); +test_comp128v2("DA5C2F5CF869E6D16ED05925CDD78840", "4934C178087623626F070C00"); +test_comp128v2("B1851E619BA5D0A36461F6267B6A9413", "90A284CA11E5A5AC86EFC400"); +test_comp128v2("994A371B63FE48129BCB11984A2604D9", "5BDF08835EEF4D01CBE41800"); +test_comp128v2("0AE26AB49E6158225D94BF39FDB29EBA", "83B81B517E7C54D578B5B400"); +test_comp128v2("E64B2E37042CB00C5C9624BA2EBB6DB1", "F059311F4B7EE022146C8400"); +test_comp128v2("FCD24B6C00C5FBAAD39224D54B3FE4D2", "C8B1E798A5299804F9F06C00"); +test_comp128v2("FEA2A9307DBD872BEA7C42B4517FF856", "FCDB2B1870F46D34F2BD9000"); +test_comp128v2("D6F8D8379339F4B9B6C6C7EA4941880D", "B02031965E6AAD7912746800"); +test_comp128v2("6C7D5314CD07485E80A9CBC3536E8E3C", "F625C41964CFF56A0CB92800"); +test_comp128v2("7B1B09636A93D1D6089F3E8C45939ECF", "AB411511CC23630BB1068C00"); +test_comp128v2("60BC3B66ACCB2FD8FBA2D180C345DDD4", "66ADE7E8DD5FD245FE67D000"); +test_comp128v2("080B4DA8017F1C8076BEAEC2ED4C23D7", "67219CE095584AB1F3CE0400"); +test_comp128v2("36B9E1DD94CE2C7D5C50B4F4782666D7", "837763889C34FFB59C0BF400"); +test_comp128v2("7426357487507712D1544AF62DDE03DD", "E272A3916D75F94A9D18E800"); +test_comp128v2("E3EC5110BF23B8292F7440D236070240", "F98D822F01565E3F776C1400"); +test_comp128v2("1E12B4E8AF0B527E971E7B0F1912E6AD", "8092FAAEF7EF58F4B96CE400"); +test_comp128v2("FF63EF8928F00762BD9204F407F224A2", "8954E660D5557692BF693400"); +test_comp128v2("E6063EE906F69B00C636C2FEAC781869", "56EB75B9916E5DE0192A5C00"); +test_comp128v2("967DD337ADAE9A73E570CDCA4BDF866E", "0A5806A9778A0B3E031BB800"); +test_comp128v2("98D1CA43D4C21509F98120B0D6A1E7DF", "4CC4B4C66ABD3A5DA0638400"); +test_comp128v2("1D97DF816F20FF7ADD1E41D01138B49F", "625867D3F8DC80B255FB2000"); +test_comp128v2("E3946EEF6DAFEB57B967823218D603C2", "9FBD7D5310778C193D99B400"); +test_comp128v2("8E81C1A706E1C873CF8AA371322021D3", "C588BF56F7CC23581225BC00"); +test_comp128v2("20DA7808951EF3A9429114C3462F5747", "30DF8359FE34CE5C0374F800"); +test_comp128v2("B0E6E1CA7B8C4E025636F5A66D09D29E", "D45B3366E8740A43367BC800"); +test_comp128v2("60003F3AD24A644CD2D69EE03C01EF0E", "DAE6302331046B94B6741800"); +test_comp128v2("A6E7C6E2615E1D7C356737AC52EE514F", "FE3A2765EAEAFC0F938D2C00"); +test_comp128v2("DB1A6886B5DC43DD77A0261E1AFF8B2F", "B98EF65CC4BA464524735400"); +test_comp128v2("C0A0C0D4B354E14F2ABF41F602630AA1", "18A96D6E34F8FD4798DA3800"); +test_comp128v2("62BE756646EB90390EC21E6D21BB587D", "10401EE31F4A5BF98EDA6000"); +test_comp128v2("7F2B44B17C9EC961778E1255E9B688A1", "C272B7FD9ACF088ADA573800"); +test_comp128v2("C433B7A9DD753EDE601E7FCA21334158", "3B189C41DDFE0D439C0F3400"); +test_comp128v2("5D998A557E253D40A32DA7CF97D5A29E", "EEC272A2BAD8F690B5F4CC00"); +test_comp128v2("8D1B821D9FCF2BE276D723A435F9954F", "85004EEC5849D04F018DF800"); +test_comp128v2("C8A5404B37F54719B284515CFB9B4001", "4AB5D01ABC448CF3105C6800"); +test_comp128v2("9D3B27999D28125B877274228906EE0D", "DA8C14CD5CFD377A8376BC00"); +test_comp128v2("E5F666FAE14359D65D2F6EB5EA45961E", "94AA2EB983B386BCF21B2800"); +test_comp128v2("06F16C45CE7ED4E6201646F0C750D419", "1593E4E1BCCEC056923B9C00"); +test_comp128v2("82FABF6D7B45CE4C64EB0C6E9DC502E8", "F6487E29D164CAC32D86D000"); +test_comp128v2("541F1AC3AFD74DC7C70D6575555AD55D", "86D04EC42CAE37F01ACF6000"); +test_comp128v2("C597908361D898A0413B7A66354A6065", "14AD14240E876852E6226800"); +test_comp128v2("200438F0979DB724420285D43B2179AD", "F293B889DABDE43C1BE6B400"); +test_comp128v2("739E0F37032ED78A0913D042A8C3FE4A", "8DD8DBC7F999094FD4F0E400"); +test_comp128v2("16A8AD7D1C5631CFE5F4CB9CB9ED9163", "6D3F95B914469F0ABBB81800"); +test_comp128v2("AC81B47EAB5649E55A9F6E0B93B4BF49", "2BA8B6AD2E1E2B4902330C00"); +test_comp128v2("6B0267728AD6B956D254EAD2B770FB37", "C03BE3BC733D51F61B1C7C00"); +test_comp128v2("10B1A550E224F719E76D98ACCC2C85D5", "7FC28C88085940FB0C555400"); +test_comp128v2("E71F7EBF5F6D8804D1C223EB722BB46C", "58742C27AD8676AF08918000"); +test_comp128v2("4C3F8FDDD8FCE4D20174F6286CDF71F1", "7CFD68608E450A2D7D20A000"); +test_comp128v2("99F18874776E15A839C2A3E7C321EDB3", "58B30EF52C693A4B40BB0000"); +test_comp128v2("8AC814B518EE9ED843E35E8EE9C25409", "C0FDDF957DE317A4FF92FC00"); +test_comp128v2("17768D68621DA8385EF1348B274F372C", "44E1FDBBAB1D9EC1E358C000"); +test_comp128v2("AB55D41FCAA07EC8E8C94315F698D793", "5A2F087594F2156AF1DE9800"); +test_comp128v2("6CB52163A5B7FFE27654B0310B572B6E", "98AD77BE4612570C68FD3C00"); +test_comp128v2("CAC07183EEB34F38E70334AB594FC570", "5927855548220C340D283800"); +test_comp128v2("71B14D3013D7651AB586A96FDB2C55C4", "CC9BF8358407E57A3B448800"); +test_comp128v2("6081353FC28741F50C7B103D6B2907C6", "AEB5F267FC32315C39DF4400"); +test_comp128v2("6AF53DD62899A5F9336C3A52898EB0CE", "9BA4DB7E121A278A11EAD800"); +test_comp128v2("2B746DC2022342A402ED432B27F6B243", "13305D58C682BFF823F3C400"); +test_comp128v2("B16EAB6CF2E07F8A3AD61D2DAC6496C6", "4B890108A901763F0ABB1000"); +test_comp128v2("20E2CEA085C2CF1B0C4706E4F8CE9196", "21EA802F554471BAE0D64400"); +test_comp128v2("D1CE68C2764772B1264B93A71E305D3A", "297C675B8A2A277866A7F800"); +test_comp128v2("504B4718D7CD40663A3FA48E87AD07EC", "ADAB984B10C1A3D0A14A1000"); +test_comp128v2("C964C6996F55F06AE5320FDE2406007E", "A023AD3226510F472CCE6000"); +test_comp128v2("BB308E478D79556474FA4E4B53FC151D", "5CD9540DC7AC8A3566D90C00"); +test_comp128v2("29EA1AC88BB26824AE83CF126990FD0A", "69E85D6AD0832BEF5629A000"); +test_comp128v2("873D1B21E6080852EC53F65086D30974", "0F17A7DC95E6E47C6ED51400"); + +test_comp128v3("00000000000000000000000000000000", "34B4225BF16B96E118A85986"); +test_comp128v3("00102030405060708090A0B0C0D0E0F0", "A892A8EFD6D33E3650372F78"); +test_comp128v3("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "F699F0BABA87114F0350BD8B"); +test_comp128v3("000102030405060708090A0B0C0D0E0F", "A5B4C7CA0514C4E1B25CBFED"); +test_comp128v3("C2FD8EB45A807D375CEC72D3599C1E04", "F123A4B0D526DA2AEB199FCC"); +test_comp128v3("059BD4242157FEE159683C03B1530CF1", "8CD58D5C05D24653C730F1B4"); +test_comp128v3("6A00543B7F4AA6F5938E3915F1A04F61", "9CB62587973B8079FFDDAA68"); +test_comp128v3("B022CB9F45B6F2E05986825EB60ED3A2", "DD465462764C701D8E07230B"); +test_comp128v3("9C36DFE0444A53EA8D64666EEF095829", "68DB77768CFA36F5D9584C2F"); +test_comp128v3("65EB5166053C36EBE4149CA8E032F85B", "8236AA79048BF9FD23F22CC4"); +test_comp128v3("FE7F96A0CA6743F4FB43725B65C98CEF", "C3D19C91C0BE1A8A80866991"); +test_comp128v3("CA93097AC1F7FAD6AB300291D7378320", "47D77CC1AAAFF848FD02EBB6"); +test_comp128v3("7ECCE6BCB6A960BE9F347FA4BAFF9806", "3F9CE85AFB1B11B747E41A1C"); +test_comp128v3("537CECFE605EF84CEC6AACC26748D8DB", "23AD4EFE3BBD5437ACD58FEC"); +test_comp128v3("77DA6AAB1D63954F7EB121F69939F087", "3782AA51C410DF352D5BA4C6"); +test_comp128v3("6E6989BE6CEE7154543770AE80B1EF0D", "E3EA331104D11B0340EF41C5"); +test_comp128v3("FA3C9311948C43A88A81F9F151218628", "DCAA5F8ABAE6FD1FE3D994A9"); +test_comp128v3("CBAB8FBD3E6268579024BBE465A085AB", "7A08AD916948AC88F285F679"); +test_comp128v3("D9E9545BBAB220B79C11B4268E4AF22E", "76F8883C06A19A0F3AA0FD70"); +test_comp128v3("1F0260A9AE9FEE9D4463888C7E2B58DB", "08EE26FD13A86CD1AAD5B368"); +test_comp128v3("9A3451F2C657E4BEDC052AC7E42A731E", "A8279A6015E5935099372857"); +test_comp128v3("F1B858F9D05C34D05BD5D0483B037071", "F31AD0315CC5E86B76B97ECD"); +test_comp128v3("67E29E6639A94DE8CF774F21D5FCD211", "6ACFB2184DD373148D5D582C"); +test_comp128v3("66287B28DA9E5A4A3674842A416580E3", "0EAEDE610EB9744B2B95913A"); +test_comp128v3("06CB6DE4CF812D00C494C2CC088D7FA8", "D41C2FB8F696C84D882DCF6E"); +test_comp128v3("06A7F31DE8BC76B51A3D43968930B60C", "9CEA8DC24E04224753B9D218"); +test_comp128v3("29D36234576AD8395163D1CC9826167C", "16D467073F5958EA424A09F5"); +test_comp128v3("0A41667DE9BA1AC860500C4ECB359EE3", "22AC7CEFE26F3A4CB98E4B23"); +test_comp128v3("15999866101B177430FE614EB17E76D9", "A1332C1FCE97402B4A743D8F"); +test_comp128v3("C02AB81126B1990F77F810B82B797475", "3CA34AC67EAAB7048DEC15B3"); +test_comp128v3("47061308D6D2A8B4DAEE2AC7A44D6842", "0282A3DF9C9A981A22572231"); +test_comp128v3("8BB120BF99F7F51DBF66B7CBEF239874", "3B915FC6905D571E0244A15B"); +test_comp128v3("2BA369767520B8C1E2CA69166546D1CF", "D9FA973CBA46C79E08993ED8"); +test_comp128v3("E867952D2484B31C4DE74554B8CFD8DA", "D2C4A14D3FF5550E776E783C"); +test_comp128v3("51A70B24DB7DFC4DABC254C6CD9BA81D", "FF770276E357757BF17B6A03"); +test_comp128v3("D79459E2FE6E8E17510C4649E5EBBD43", "DD587C63DA11D7A39B0E51AB"); +test_comp128v3("992511517261548767BC3A5EA0269459", "3123ADD2EBF5C4D7B3F4197C"); +test_comp128v3("38112A87B58DB889B06F70A35B2BB039", "EA4365FEED09E1A34304A763"); +test_comp128v3("4DC4F985E69146A65C0A853EF5C307D6", "57B9BE9FB46D951171CF1DBB"); +test_comp128v3("F08DFB812F799107F8A817C6A93504B5", "5F67F38F8F729A1A34468A50"); +test_comp128v3("2E7AD4225A84CAF9662B79D8AA4EC60B", "9CE2261C86FEC23836F8C25C"); +test_comp128v3("904503A6A4B61660F24330E74C49183C", "8D434E4F0B2518ABAF9C92FF"); +test_comp128v3("FC0B25783A74FE16F97AF6EEC84799C7", "E4869E47D43D385ADD6FED7B"); +test_comp128v3("B351F09F9FC46188103A266FA50BC54F", "DA4E687A478A4C3EB77EA5EA"); +test_comp128v3("453DE3EDBBC72BC9C65335B47536EB38", "2CC578A40472AD4C336D3880"); +test_comp128v3("250133698D0068AAD95A2E0FA356FE47", "F7BDAD3677641DC625C40A3A"); +test_comp128v3("482A117B4A39F9DD842E67F376E4AC8A", "C7C280868DFE252421111382"); +test_comp128v3("B7B435E33F800DEC7881A5AA6DC7795B", "68ECFEF6FBCE86F0145B2710"); +test_comp128v3("5528C93204329236879A8D0EB66EEDF6", "5A3B116AD3A228DF0C148E35"); +test_comp128v3("2BD00A4ABA3837E76379B9C0257CE95B", "DBAE1F2F91E090C7F250A576"); +test_comp128v3("897FAEE5AD4A10D443E1E581E1FADD2A", "5E0FAC279B3DB617F1D79E74"); +test_comp128v3("50C13D10436296F6511294F0659346B4", "6774D9611D81D2B28EF62CB8"); +test_comp128v3("42F5D66DDC05442E1B394FC346AFB794", "AE323C87CC24BB8816555868"); +test_comp128v3("23978478FFFB8DFFA9160898AA04E67B", "F9E28ACDC3FEF9C732506146"); +test_comp128v3("0C736BC43FA36DDE8B66F9E5F5F38468", "836E479A4C3F9060A5048129"); +test_comp128v3("3D0F54C3DF060F76A908CE871B5A15CA", "2C8672011E95771FB6A01EC8"); +test_comp128v3("F300DF8463DCCB4D8222A7021B005E92", "19243A7269EB1F75402A01DC"); +test_comp128v3("7177B3EC6658F41C7245E773138A0F8E", "3790D6633E9FCB095F1D823B"); +test_comp128v3("1A2FE0B12CB713888781DCE0E90B4776", "CB65E9845237344F55D7AE1A"); +test_comp128v3("1BCB63AF37AC2DF53B077E413B588001", "00DB17E0FE288237A333C4A9"); +test_comp128v3("F0A650FE37B236732D4B889CA6A6C835", "7FC46A51EC2B7BE0C66E1A6F"); +test_comp128v3("68B09A32A5459C6F6E5472109FC164E1", "C8F1AF34F21E61D9CD2E6839"); +test_comp128v3("1B57DD3CCEFE0F33E04EF164B25A124E", "A8486968444DAFB51C552932"); +test_comp128v3("3CA34C720BEB4E2FEFEA6D04BA4FD876", "2B1C5B57D1249DACE613F90D"); +test_comp128v3("CAF61E2E3773AC8891E12638871595C9", "4E03646AB273D7835417418A"); +test_comp128v3("B1433F3F651E0E478A12AD2163681E48", "0204AEAE7AA03ED2B87985A6"); +test_comp128v3("907DB9ADC521BEAA511AE36FE1A8084F", "96E8BC8BFA3054AE764A8BC2"); +test_comp128v3("BBD2E95BE518C72529FC67918EF9AC4C", "9461716327C1CA6ECD8E3DD5"); +test_comp128v3("5EFA59CB1257BCEBD7C52842485B1A7C", "FA69B871271C6D3BBE9C2C0F"); +test_comp128v3("1B170AF028368F19F26CBEE3EA04B69C", "9801411E3847223CF3F6F5DF"); +test_comp128v3("8A03489DB2DA7957AC574307457C539F", "18265685F3F9FDE17DF568E9"); +test_comp128v3("9DE46F89BE1AEEE7E08E6E6C96136B4B", "948500624AA36F84F8A9144D"); +test_comp128v3("3502F3348EF421C546A22C60F73D82BB", "3EB807C5B084B783A6ABEAA4"); +test_comp128v3("266F0F71417652FDA262E209ABA9813A", "1AD344CCB780727F29F539A2"); +test_comp128v3("F89ED91B773DB362E3B535ADE806309E", "6154B2555DAA2536747C8C00"); +test_comp128v3("95898AC8F59AE30AE6C131F433609984", "F4231FEE2955D325C6358E8E"); +test_comp128v3("FCF177BED3855914164948383A7BFCD3", "B013BDAFD7B01F6D12635E71"); +test_comp128v3("A41287144BE0462B64F3BF9FC79AFA28", "11FF56DE220314FC01D2F427"); +test_comp128v3("C37A6607EB0CC90AAE0E805987BA2BFF", "96AA9F8F1B82C816479F6F30"); +test_comp128v3("B30688EDF5883129A3EEE07EFBD716CF", "2484F97D0E207448CFFCCABC"); +test_comp128v3("F49EC19D30C40E62ED346BB1E973B3C5", "7F3DB7AD4F1E679D1C1BA290"); +test_comp128v3("AA60565959700AFA4E24383A7852F98E", "40CA139963F8B07D82F93631"); +test_comp128v3("72673BD9D3ECF3BC9948B6F96D44000B", "A29BDBCBAA7C7DFB9ADF7DDB"); +test_comp128v3("F764D588E2AF04E183D9DC2008E54159", "892163F30BD023B629FEEBFC"); +test_comp128v3("6225365E542C73635002C5D0F49D79E8", "9ABE4CC8526046189A15E8DE"); +test_comp128v3("578FCABE430EB1F154DB178035C87340", "A08DCD277DAFEDDE2CF34B7F"); +test_comp128v3("90D2277F8E73308C9FF488C22C64A371", "BDC38FC4489A714E45D465AD"); +test_comp128v3("CCF9D01093489E9322A92CC5B45EDAF4", "524D9D6323724755C3A58301"); +test_comp128v3("DC7AA07884338A1CA74A149C920B7113", "804DF3B4AF8F2EC1EFD23E30"); +test_comp128v3("B49C7B29E5DC67EE200FC77742DDEE5E", "5A6B21FD6EF3D215C82D7033"); +test_comp128v3("943410D203597F271EB914B045471F9A", "243BAB53856F7401082F722B"); +test_comp128v3("A66F889E48C971C19BB1ACE8BA14C7D1", "53BC19A4C99196271B6DDCDC"); +test_comp128v3("2C1987A822D55252A53F4C5165A9A6E0", "695CA9F5FE4FB59944E42198"); +test_comp128v3("6E2A72A29D3E40CF17720A2EB2729F54", "277189F03E8DCE092840239B"); +test_comp128v3("5756340ED21CCF06BD9CAB1B1B6B1F83", "F514DEB77B49396051473F97"); +test_comp128v3("8F4D4E3BD46C79E859EA6C4B1707115A", "FA8DFF24FDDC28232DC7A86F"); +test_comp128v3("6133F53D525646BAEE9303FD23A6A957", "4A1797DFA2F0382CE2C8A691"); +test_comp128v3("E4079E18FBB564363AD12F51E06CE783", "367F320EA19755B931A57645"); +test_comp128v3("7DE5A96E6249F511894B554941711A59", "B9D48BA0539A31A9532462A8"); +test_comp128v3("AFD50CEBA82EC1FD6EE45FF2ABE23BBE", "3A1327E46668F8A9C4F703B0"); +test_comp128v3("0106CFA6F81EAD4369327F7064B87D16", "3F432307ED0F3C057C5F2712"); +test_comp128v3("CE3DB3EC969DAA637C83C99083F1F8A0", "7CED22DC3DC07E253C978C97"); +test_comp128v3("C3392F85F96A21B777F33EFD11A832A9", "247BF07ADD6941713F40A327"); +test_comp128v3("5A815EC556143C56EA7CB787305F8EC8", "BFF611BF4369FB38215FAF6A"); +test_comp128v3("49ABB28EBD9106B5F204CC1AA2EEAE97", "0A9E54DD9C485068CCFD153F"); +test_comp128v3("DEACE7DEE61E242671C0EF0E441C1B6B", "B6FD390C7404DAD7D4359416"); +test_comp128v3("9A327503C873F7679DBC3271382093C7", "189B498F1D693458BD79489C"); +test_comp128v3("6546D5569FDAA7E85217D87DC34C7E0C", "16FE55376BD68D78B6161E58"); +test_comp128v3("0B695FEA192283985799C9CBD614C37A", "8D71BFD1C8A1559770C77689"); +test_comp128v3("11E2A6E032B79DC02CCA50CDF257FEF1", "C8E97ED1703AE1CA0CFD14B4"); +test_comp128v3("15C788FB019580F2EAEC04B3F074D96F", "F83FCEA965FE9D0A141EE058"); +test_comp128v3("24463A9F5279C2F684EB2F17B9C0B793", "10E3C959293B21D9B4293BBC"); +test_comp128v3("A5C0D212FD189818BED2B980CD771710", "21777B0F52239D696F7BEE2F"); +test_comp128v3("6B38A49118E0A121DF29B8781E71C89F", "F922FE3B5C9A2826818B51E0"); +test_comp128v3("100F07B6881EA8482EEAB29E695630D2", "A70F52D10C35A99831518DD0"); +test_comp128v3("5478D20CB06C9D9EE3E5B159BAE6EFBC", "CBA83BF92463F9B14A6882AA"); +test_comp128v3("2B1EAEED654AE3FDDC35BAA926D45B0F", "B2AE2D718F554D6855936C83"); +test_comp128v3("827512AB9C1C73CCB8AE1A292233C563", "0B512886B3CED2AF94A54153"); +test_comp128v3("312063D0754C824DA712B64D2A6B33A2", "8C3C7D5EAE0CC1BC2141AEF1"); +test_comp128v3("C41B044B098F5D6773229480C84D66EF", "36A53378F71AA1014DDDE622"); +test_comp128v3("06CA7A392F7FB360BE218ABE86020D80", "0D7C440E7D4D7C36077390E9"); +test_comp128v3("E8F4DAFA1CF388ED27662B6F234BF3B2", "D755DE9D6A83D78A02EEBD2D"); +test_comp128v3("7451425964131EA8FDEEDC3D51ECCF9E", "4FAB527C28B1F4BDB34158FC"); +test_comp128v3("BA511CCBC0A07FFC45233241E1224340", "13683A5A03D2A1927F0ACDD8"); +test_comp128v3("8CB04EA4DB020D5D4EE3812B38AB84CB", "26648E563AB2075E2B5C7281"); +test_comp128v3("04A2631D325386F77579CDEAA967C37A", "C1DD35C987CA7918F4044197"); +test_comp128v3("A5BE4CC4A516147408183FDEE9DA1D65", "696A0827A2FFA3C73A10404C"); +test_comp128v3("36C43B5BCE7BECE6FB2DE03F4BE709E7", "FFD099DE6A2C089BED7D35D2"); +test_comp128v3("35EA9D9C382CB460467F8B8D1145917F", "40D9401342FE480A8A009E2E"); +test_comp128v3("E00D2EB361732C08E2C3125DB7D2E3F2", "491710E39159DBC5ADE0DBAB"); +test_comp128v3("F587457CAEF8E5BAFBC129641BF8EC69", "CE15ACA01CD0077FDAA76A87"); +test_comp128v3("BFE148C7255EAADCE3753A7CB3E1FDB2", "46BF49FEB914AB4ED667E4E0"); +test_comp128v3("A8452A0CF7A80F80C4D4EB5C7E7969DC", "C04AB5C52A9B1C5964B0B86B"); +test_comp128v3("BF289490E673C0B56DB6E768B3CC0A48", "856BD7044AF5997C29FC5138"); +test_comp128v3("1DA9BF8EABE527222D4B7301F5F6E14A", "3D61A9F9DB5C452DD7C26F95"); +test_comp128v3("036DBC1FC7537E77FA4CBDF33DFF927F", "44CC56A1DC3A5408286C3EBF"); +test_comp128v3("A26A8816BC2735427354CD88742487B6", "BBCCC740C5571A4653805B58"); +test_comp128v3("FB57CEE47FB84A4CF354FFB02BD7F27E", "CC74DB56925160F24B998789"); +test_comp128v3("6B7D14B36BEFA7AFD23BED5C89274817", "7FE28DAB2C64E290FE8D8CD1"); +test_comp128v3("783B2B4B5D240551B0D1C5073C86EAE3", "BF879E67B031772A214137FC"); +test_comp128v3("A5C5D0E238A3C63E36ABE8CBB8D3A755", "C637492282DDADF2344C5F12"); +test_comp128v3("F60AFBED2788482DCE9012B308F91018", "A6D07EDAD84C22F55D578795"); +test_comp128v3("FF29BAAE83F0D4BDAEDF57439B240E2E", "C88A6075AE55B48C41413694"); +test_comp128v3("BD2EE48803F736F741F7BC539143B6B7", "6AF648295D9D5BB30994F0DF"); +test_comp128v3("8759E7150969DE74EA60E6DC6B0605FE", "DCECE445325ADB93295C208C"); +test_comp128v3("E8A3873E185A8130171809B1C670E466", "A52DC25C7BA9A8B5D35A3447"); +test_comp128v3("CFE9F56C387AF2EECB6C16BD73100E84", "9F0AAF87BBE52A0D82B0F79C"); +test_comp128v3("504D313E64F204B950E1FCBA766E6A10", "2A6E346A487840A9FDC91C91"); +test_comp128v3("BB973244B0AB827B73463C26EABEDFF4", "CAA52660E1D03128283903BB"); +test_comp128v3("099D40CC50BECB4943D5417116A02A43", "184B3CD556245A75AC3B2E95"); +test_comp128v3("6F936FB2AEF98A81E78E4D190DF9D876", "591FF4491319AE943B7E3F5A"); +test_comp128v3("ED889EE0177981FB3054558A3D93F5D9", "C3A3682BE186AC971EAE5B96"); +test_comp128v3("D610FF2C9B5E26A58C3852B1CF968675", "CAA5295895B7A4167F1FAE69"); +test_comp128v3("60608D5017ADBEC3DCEC4F36DC2CCADB", "3850062836D6D9C342A5754F"); +test_comp128v3("1607142E96C20A6D55887D473E1C1ABA", "57B3B068E892BCC25B81BAD0"); +test_comp128v3("0173C6DB9751FC3246158C2F1082842F", "D24D9DE4DFF90F1862A202AB"); +test_comp128v3("15A4DFEECD687B26B2398404FE651E26", "124DB27D43E78C9E1F22329B"); +test_comp128v3("8C04FCE7248101CA8434190F8F3F18E7", "DEDA9836E027014878678B27"); +test_comp128v3("A1F308C74C95344CDA356907739190DC", "34E78710601E8D992F9AF14F"); +test_comp128v3("6CB50D780B92072B37F757ED6E63B0C6", "A2AA5D1A550999067BB69BA3"); +test_comp128v3("5E2BFEC3FEE9ACE4CBF6B5441346F5DA", "18617E4E20754E060463F495"); +test_comp128v3("B28D0F02AFCB8CC20235898B355CF3A1", "E1A687503828B8AF3C8EC33A"); +test_comp128v3("E7A8045111133E9BD905248B3E3D9E8A", "98B3E202A3A5A3FA76358768"); +test_comp128v3("CD33375D0823C4C5B6CEB0F6B4E39F8D", "92FB4EB73E56C32476604CDB"); +test_comp128v3("4D8318B9642BAE26C791643DF0F53080", "BE8371F5FB7CEEA806AA292C"); +test_comp128v3("9DABE054F9D33BCE9795748681EE640C", "CDEBCCD1A2CA52EE3907F9AB"); +test_comp128v3("16AE48F67D14618AD12F93B7D5E3A74B", "29D03897577684C1CC2C1A60"); +test_comp128v3("1D544B9110BAE6EBB3FB9BF625DC725D", "4309E6F048FF37D9D21E7EDC"); +test_comp128v3("563E947E114D9A470A52F05745B59B58", "9EAE363902AD89A2EA744C7B"); +test_comp128v3("0804E1F159B228C2B549965B0628B600", "7874B39866D29960E6A4EA9E"); +test_comp128v3("AED48B489D0D2C9E81AC8D5E6A15084A", "45FAA83D1F868D1E1509A444"); +test_comp128v3("FACBAF33A3409556CD177817673BBE7E", "396965C351C7668CD26E734C"); +test_comp128v3("A9919EFE9BEEC2374E74FCA514442152", "9116234214E63C5C488B384B"); +test_comp128v3("870EDD564454CB858A51E67D360D217E", "6A159AF76162DABBD6D0DF63"); +test_comp128v3("E66FBF9271A50B84A5D7AB53E7373176", "30ACE630BED634AF6D1DD338"); +test_comp128v3("1B561ED7F3EEC916D48BE068611A49FB", "47AE71282F48B4F5892F49F7"); +test_comp128v3("400472731C0366CF0BE540DBFA745BD3", "12EFAB1FA8A873483C53F0CA"); +test_comp128v3("DAE6DFAD532BABC40BB959C970D8814B", "40ECC9C908605D2AD7C04044"); +test_comp128v3("61F1FDE5DA854053A07508662FD5198B", "56DE93DEBF9302DA18649DE2"); +test_comp128v3("BFF8B0D12F533A3E3C9C46BB8B73D4E3", "8DB85E1EC6AF6F2720F44165"); +test_comp128v3("172A3E21168D80ECFAD1E4E122C0B1A9", "60CD03545AA93CF3EE8B9A5E"); +test_comp128v3("F304D41493FEC89AECE06C355269D24F", "BDA5728AF5174BFE8A1DE7A6"); +test_comp128v3("7223C3B61097610DB9D86BE0E5C7425A", "EF3B366F60DB819EA4CE3CC8"); +test_comp128v3("73D79A145D0F20AACCFCE879398A14D9", "6B90D4161C02C37583E93EC4"); +test_comp128v3("D2A3297B864EA9FABB396211FB8D7DC5", "43BC011FDDB44128F061841D"); +test_comp128v3("FBF84C03307C92DBF77E819748CA693A", "562EFBF4DB6078A949AFF824"); +test_comp128v3("70D8437A9120D5F1EECC400CB8F009F7", "A3585AC211D316CA9BAF8349"); +test_comp128v3("AD70A2CFA9289909520AC3E442066E95", "4DE9364411A3D22E18E05EA9"); +test_comp128v3("200DF7FF1CA3C90B9CE7BA3E1622C243", "87C54F689FAF75861A864E36"); +test_comp128v3("3558987AA0E60869CCD2AAB41000171D", "F88E5005DDA6A32A86B46323"); +test_comp128v3("76C03334BEECF8488345EFE09AFEBA8F", "7A8B21E14808D8FDE12DEC82"); +test_comp128v3("6C34C7E0F992FFD107CB3C21AFD8FCF2", "7223C34459BE33199E397C97"); +test_comp128v3("F567B76CC9075EADFD5B1F5BB995DAD8", "3A4D7CAE9189475274EB3A26"); +test_comp128v3("FE553460124B7240AD5927F199968901", "66628D72D37687E345B5B80A"); +test_comp128v3("20A361BE827F77F8752324D0DF0191B7", "7BF2B29BD955EE9DF8A0A462"); +test_comp128v3("89E668A5719753E733E483449D26FC35", "59E64E6FFA910A75BA6BBA60"); +test_comp128v3("EC23E756AD6C5A8EB93FE43FD1743407", "296AD8FCB4BE13EB61403D22"); +test_comp128v3("4C78D75FAC41A829171137A924C008FD", "B5B12D7F28E1C3CF0BBA182B"); +test_comp128v3("1582B13A55A441793F24364F4E79D70A", "4FD6AA11A62B3DAEE7AD9B01"); +test_comp128v3("F83F6CF2845E6049268A98937165CF46", "90C14A957BDC4877443E00E8"); +test_comp128v3("89A39A6F6D0EFC34FB44B9D94E1FF998", "B42B60ABBBC80A57030893E0"); +test_comp128v3("506069010FBBD8FB9B621E1E2499CFDB", "E143B413238339E5F1691BA7"); +test_comp128v3("F05CDF287428D1F8A82F8D2B90AD2D45", "97F6CA366943F4B6CE9FF71B"); +test_comp128v3("250C4E224C7EEED75B5C47E9B281F038", "22468D1F2D1F8BF1D39859FA"); +test_comp128v3("D8C1F4CEDF1F26B67CE6AED5CF27346B", "652F8F8149F1819CA8C863CA"); +test_comp128v3("821DCF113144A74A0696107A511BDA50", "3D8BB5E6B9C0F05E46D96D75"); +test_comp128v3("21BB340C501240AC021FFAE616ADA466", "876909CD1586AC2DF5FC7AE6"); +test_comp128v3("F877A1C9FD4DA1F3E375314677BD07CD", "F373090EBB599E4E9EF9F429"); +test_comp128v3("26845DAB23924FD243CE4BA118AFC18F", "039F20C260E2A343D36182FF"); +test_comp128v3("0C74932F7693F4D4F7E0418E41879F5B", "B7C468AD4CD5728DC6565CFA"); +test_comp128v3("9AF335A2CC31464188BD38CF75937FA2", "1D1A99E64812A75CEF4596A9"); +test_comp128v3("A9F5E25ECAA22CC54A2637CB8DC01FFF", "A756214C3895B523FB63A378"); +test_comp128v3("42FB25801DC657140C86C1C7F18F2F01", "590D9B13514090C19B0000BB"); +test_comp128v3("CFA06688034DC8F1A474C5CB230FF52B", "5937F4916B9D698E3FABE3DE"); +test_comp128v3("C711B7789802A2E87BD9C892ADF37666", "B885298A5DBA44735E11AC17"); +test_comp128v3("0754A2EB8464B56CD205F6956C88869D", "CE314473BF4B1E1B6C7BF179"); +test_comp128v3("4EF0E8BE04D929C3AF6BF71852A72A30", "E14518550A295F9866046EFE"); +test_comp128v3("E845124E430E41B9F7AAD910F93DC6C8", "B478A5A1128ABBE224610BC3"); +test_comp128v3("7FB474511BD214140C90B521798743A9", "E8BE27301A6EF0E481A68DDC"); +test_comp128v3("C727D9EFB0A70769934515C95015E3FD", "C33D3FBA7B6B71F7F5B1E18E"); +test_comp128v3("64ED08124194B3590CAF7263A77E688E", "58FB6C2A5678A5FE49C6DF04"); +test_comp128v3("3384D1E460CDBA2E9306042D35C2DAF8", "53249E60E0137005D6C0582F"); +test_comp128v3("4E4E2DAA21826A569BEB3E89C3F75954", "0B51B269D2EF17CC2AC97F8C"); +test_comp128v3("7783A5B5BBCCF29C2AD09070882EDDAA", "F0365CC0D5656AB7C9EEC1D0"); +test_comp128v3("362BC8026D00F70FAC9406ED186655D4", "261C2E9B772917B953719AFC"); +test_comp128v3("DA0E8368EEE2F2946AB1D284CFB58D75", "2AFF64A0A7796A645F8F6569"); +test_comp128v3("1C3F461143F2E728E463F6AA04835328", "98F8FB6C03A8F04E5DA6BD80"); +test_comp128v3("1BFD760F78B82698E764E2F009E83A10", "ADB4E618176A154B4077D28B"); +test_comp128v3("BD4833A790171E25A3FBB40DFCA805CD", "BCA4151338D53087CE12FEA2"); +test_comp128v3("012135788F5DE698BA7865313D838D1F", "B6E7203A49F125E0EF781021"); +test_comp128v3("CE3713587AD50A75828DBD3B27C4227E", "F1E1EC13C4DD8F300801DFA0"); +test_comp128v3("8CA1F5693F9485DA47665289F9B7994C", "820A5683642DC787C4E86A46"); +test_comp128v3("412A89798D2ACDFFE18E5C1E4D7316A7", "D93057561BBC893843682759"); +test_comp128v3("00CD5CE9424EC374FC60FB76B70EECBF", "88A74D19F682E1A255932C53"); +test_comp128v3("038994C83ADEB2F74D8C8839F53437F0", "A3F15A3800700FBF4036A9B6"); +test_comp128v3("5378C9DF92AAF716A3E3479FC93F9B6B", "A1FA256354C249210CE3F4A6"); +test_comp128v3("3201667073288CAACF46F3BEBAE0367A", "345D24DCF43872214332792E"); +test_comp128v3("7C88491C3A4AF5934C112299476F96F2", "DDA8299BAFAE19127326C0E4"); +test_comp128v3("A09EA9002485129676578DBC2D29970E", "19E2856AA1822D8C382BFCE6"); +test_comp128v3("0249D8409D94C899CB3211101F44E706", "34F666DF84C3F4861F031B70"); +test_comp128v3("393735BBB4F295F78875118F2282FEFD", "1172696A8F3AD17FF4CDC32D"); +test_comp128v3("880A34A01DB11B02983984409F474598", "78E946DE142861000EA71378"); +test_comp128v3("8D2D885D4E8D0FEDF57329B9CA684481", "5C839ED7586932AF9267D4EE"); +test_comp128v3("D9A319465292440E4EC40AD4311412BD", "34C4833EAB737BB515DC3E29"); +test_comp128v3("03928DA8EE9E6EF58F8BDD25383BD746", "FBD0B65369592420F4AC13E7"); +test_comp128v3("871B76BCCE398DA305C05583328F3D0B", "10070DBD7C735D468E99FEFC"); +test_comp128v3("2D8329DFF082425E4865ED82BEB77D2B", "6891E87151FABC787888D502"); +test_comp128v3("1AD6B061F1E920431D52B7C4D7A6814A", "1ABA71E6777298078DC34E9A"); +test_comp128v3("6A3113748345C8D03408EC03C67AA757", "C073219B699FF4EFE6BD7F20"); +test_comp128v3("E78DEA79071AE8EBB147A5BA7530F6C2", "7F90BBB9710C26C21B7B306D"); +test_comp128v3("10A9BD1DF9BC3D57CE9878D0AFA3171C", "8BA97E65B5C543E81A0968E9"); +test_comp128v3("691DA2346C6D0FDB814C07F9A243DF31", "14331E4947AD140A7C1A6ECB"); +test_comp128v3("CE6961F7424C872568BB6FFA0D7C00EA", "05543EA7314FB4A0012243D9"); +test_comp128v3("BEF85F199B780AEC2D7E75FECD14F54D", "DBED42B3388D1DCB8FCCE224"); +test_comp128v3("B08AF472657A3742598FB1BC3E3DC702", "776AE1440D3ECC1771317076"); +test_comp128v3("1F585700F880CE42F2C10AA2B2D9F743", "CB2B3444973841C5300DC71B"); +test_comp128v3("25E7C4BF79991617715EA342FDD16E9F", "A4360B1247A7112B4525966F"); +test_comp128v3("EE3964F72F1F85062AF2AE995B43A511", "672886691D327820EA6639D6"); +test_comp128v3("0F4DA216B41A2ED1777CBA97B4674B1B", "B4A8EA97BED0613AF1C51AB8"); +test_comp128v3("66A36F7EC04C45F3948403E381E3D5AA", "9782454E51F13175CE23C4C6"); +test_comp128v3("E88D31F0EB83D24F7D26371129763FBC", "18DB2B166C64F39868EE8D97"); +test_comp128v3("8C13DE138071D1F51FCB8D6FE388E038", "662291FFC942AF9D67AECE01"); +test_comp128v3("F05DCF03504184FDA2616467DF5795A0", "BD52678F949A9FB2B389E5E2"); +test_comp128v3("4F4F788BEC2EE583ACF059B0ADE014CC", "747EAF9274A438F5AC993B1A"); +test_comp128v3("C37A8A7C38765AC31CDA16786D732F1E", "D3411AE9A8133D3577EB52E0"); +test_comp128v3("E4B2DC6D7322CC108231C199330860B1", "0B8183CDB4774373E772B3AB"); +test_comp128v3("642BA8B13B3A34684C6D526A5FD2D752", "902123CAFC2DCF346D63151B"); +test_comp128v3("EDB994505213703314C42A325D55A40C", "83D68942220B5A33CD61FB1F"); +test_comp128v3("4D1399046DA2D653405F1F1940E875C8", "4750475855BE7402E5D1C5C1"); +test_comp128v3("5C435B4BC5E2F9651ECE8EE13D6E25A2", "D8876ABEFACB10BC3AC52E34"); +test_comp128v3("8D9A5A7C9CBA7A07DCFAEA0E4DAB2725", "C58EB014A932C3116E65DE5D"); +test_comp128v3("09A2B5AECF349CB2D56B7A39872E4163", "C1FC34A7A8D16531914737B4"); +test_comp128v3("28EC2B7795CD5FD29D0D88A33D0E107C", "C4254A6DC983AC85BFDCC948"); +test_comp128v3("3BD04EB44E9025675CEEA1EE80A4EFD6", "CD3F1B6EA3FDD0DE0EC87DC2"); +test_comp128v3("B8FE9194D8EDD327E9D5EC30E09CE619", "C2D257CA005B12DAB1C57E99"); +test_comp128v3("9FF0A2CE81526677BECE7093E03F40B7", "F639DA208C14F5D5E9B9155B"); +test_comp128v3("D8523C03A2DE75F6421D0BC91F02359C", "4E3BD1349917A5406A619CF1"); +test_comp128v3("860466FE29D625755A732EF72620BF12", "DB53D349D3D90BFD6C7B5097"); +test_comp128v3("96DCD22792D5381A5B33392650D8FE83", "64C9D371D87E92B9BAFF2BFD"); +test_comp128v3("4482BCC96F8D8E5FD6EE2A3A302316C2", "15D4F790CE455848506F6917"); +test_comp128v3("A53C321889AD33DE74846729AD0482B5", "6819059E37B8BCB2CD3BB056"); +test_comp128v3("CB6FBE7ACE4F1F336B7535F43CE3FCE3", "36FEB6CC91753307137675E5"); +test_comp128v3("32323174AE66387A960E21E3E48A36C2", "7941EB9CFAAF2FCF2D9D4F9D"); +test_comp128v3("A2F01BB704E0A56C51D985BC170C2516", "2DBFDD6D224B73B8E3BA0F93"); +test_comp128v3("B2FD8D3C4135A5F53C9E9CB2E857C3B0", "783971383699EAAB8A969788"); +test_comp128v3("FBFE997F54C815A9769C576DC5557918", "A6EFB070C41375FA9077AD0B"); +test_comp128v3("A04DE27D214F2BAE0AED7427D2D57228", "74A3F90EF7E7E5F9535ACB23"); +test_comp128v3("6E47EF035F98F3D57BC9C1CB574D6799", "FCF439F7297B000610E5BC95"); +test_comp128v3("9F7C7310B4AE3FBEA22077FE53884CD4", "D2D20CA60E5D657DF4AC1A57"); +test_comp128v3("2B5456E3EDE3A798519D70DA24FDC14E", "8786A30EB8DFDE39EF411441"); +test_comp128v3("3EB8F29B8FFCE34CFE924A4C8B412BEB", "FBF694C68239868881135AB5"); +test_comp128v3("9112F7C42E8F86ADC612FFEF62BCF031", "A9A0EC605E0B7D959D94F3C9"); +test_comp128v3("3B9E8C729F6BD2A647103C87B50084FF", "C7C6B0CA4CF9067D70D50450"); +test_comp128v3("721720697921EEF72389D70412DC9BD2", "2E3A7C1632E8038E1DF4710D"); +test_comp128v3("F4B192A4752141D528FDFE57403D1D29", "7EC20B5FFD6D4F380EED6885"); +test_comp128v3("96ABB2AD544F3B40B2302317A00AE6C9", "3AACD18243723B98834DE29E"); +test_comp128v3("475BC853DB0993F15E4DDA017849EAA3", "E356B15F48DE8C2A841CF3DF"); +test_comp128v3("DB6E877FDF36CD13D291111A2A52706A", "20685B9CA28B27D1B267808B"); +test_comp128v3("AF844AFF605D6CA75D32C8D76911FA5F", "05FAD3B3B7DF158D73F68D46"); +test_comp128v3("B7BD6D23A35ADAA7A24698768989CCBB", "2D4B6CE203755ED6DE54D1BD"); +test_comp128v3("F22358724D39699DC5F3CE252E5CB388", "1362F31DED7766967CDF75FD"); +test_comp128v3("8DEED8937A8635D058E1D3B2937C1F14", "FED61D4167F6721F3D42A96A"); +test_comp128v3("C8F471A85DF24F8694B66679B8F3AA05", "0C53F26A0AA68A554F02BFDF"); +test_comp128v3("FBFFD9900A7DEFA9FFAAAC445CEB9FC8", "3A77E657D27C1AB33CC527EF"); +test_comp128v3("57D09B46F380628DC5529A22E6CBB191", "FF53F69D116A083581928053"); +test_comp128v3("2EC3BC236DABD021D37F1777AADD9678", "AC7EB38011974A02ABEAB3F9"); +test_comp128v3("B79834352EA64EB93D000257045EE658", "F9EAA0D8DC11FF29D6B516E9"); +test_comp128v3("655B9375AC8864762424A4A0D47B7BD3", "4646C2ED5F21B2EE15379E4D"); +test_comp128v3("6E022D6981D611DB9C6E1D71BC5F3829", "E9421D6DA7103E98C42BC348"); +test_comp128v3("E82BC59288987CC4900809B3F93A258C", "765C26D3449490E464D3A68E"); +test_comp128v3("D88E96E65B3E75EBEC71A167FC745022", "9CE53769A506228A186ADB5D"); +test_comp128v3("DE5DEBB9E0A8676C9AFD507CC4584B13", "4011F610990EEA93D7CE122A"); +test_comp128v3("4285D4CFB1769D1A24E50EA2E22E9897", "981AF6169C7B6C2F9D35EBBD"); +test_comp128v3("662AA01C92C099B9F1E6202E196893FC", "A18AC40821D530216226AF89"); +test_comp128v3("02AC385F2414C82B3471B647689AB849", "E94F1A9A2178C9FF103B0844"); +test_comp128v3("0F51172514E1CD57F69EF867599C3DC8", "3982621C739ED323AAAA7C37"); +test_comp128v3("F3525F3F535F4E6DF13BECC1D8FB1455", "F62AFDBE83135B71413D79D3"); +test_comp128v3("F92792BC56E1E01FF0E02D970FAFFC4E", "7BA8768FC9DE99379058D8F7"); +test_comp128v3("2B52F1DCB4966196D138C68DD54E5919", "E461FD2030A5BF5D6EE94D1D"); +test_comp128v3("2A185CE97AFEBF1571FE5D75D3BD575C", "97C86A5C1573579F9C21F2A3"); +test_comp128v3("B41B160321225CE25C4E33E040056747", "F571B0467D59F5B9CCF118D6"); +test_comp128v3("F670778BBA33B3995EABDF9CE23E1F2F", "7EC8E7AEB2F5F754DBF3E2C8"); +test_comp128v3("9F01509B4208F00FE9AC5F302E913FD0", "57EC36681223C3B6D4926342"); +test_comp128v3("FA147D70166C6DDE3DF84175679D182B", "10BBA85D4FEAD1DD02D2A997"); +test_comp128v3("CC0F7F90199AA8DC130452DD284E1472", "1A02ED61BFF438D4C5CA0141"); +test_comp128v3("76ED3C6965EDE96C8D4E1E8ECD9F56DC", "6F3A549C817F60E6DAA3EDC9"); +test_comp128v3("4B337D2FDC0E5FE89A8E552DC45CD4C5", "ECED242B4B6A1D78DE53A425"); +test_comp128v3("C2E1E0773A8030D18A18B9D272425875", "BA7CB02898761CDC4873BFD3"); +test_comp128v3("A0B7D58F803E71297F445D449F7D692C", "7D106558576E6F817F16B949"); +test_comp128v3("F9E967729FA158B2BBADB67F03F24077", "6909F02053F635627288732B"); +test_comp128v3("E11EE60D5050CE4C9D0B03410C5ECAE6", "71C3F54E1E05B0F7DAD5C400"); +test_comp128v3("02F33A269A8DC9F28CA3C370A15E8844", "F1947CDB239461CA161485F5"); +test_comp128v3("3EAB022CAE7D0FF5171CCF46470D2B1A", "EC68B69C5D6B56DB8009520A"); +test_comp128v3("D8D4A183A00EE3AE6342CD895CC722FE", "1AA84577A5A893B64CE59077"); +test_comp128v3("8C4AFE74025F7228BEC7F0F338143284", "7D0F91326ED356A09110688B"); +test_comp128v3("0A42C179A055958B374DDB41CCB29EEE", "0D2943530809487742DFA541"); +test_comp128v3("D7ED82A3EE21516F5B5E9AC6F7C461A5", "6366910A49AAAEA42C9030D7"); +test_comp128v3("86D87077BC84F98E3937097EEAB02ED5", "2A9ABE810CF32B7A58CA3F3C"); +test_comp128v3("880C564BBCEFC7442CE047715FF7D734", "0CFCFAC0132393C12C1604E3"); +test_comp128v3("DC31B4989AD996F310386615015ACE5E", "5CC175EAB000EA51A1FFE224"); +test_comp128v3("392104223345E1D18364CBEA4BC3BFD3", "E264A4072A07CD9B6680274E"); +test_comp128v3("5F7D8CD69434C38C21342F0AA1BA95B2", "A6054BD785E94219C6B13676"); +test_comp128v3("0583E23F330357A0ED6C19F4B1170687", "D4420333B9B73E98C9CDBEBD"); +test_comp128v3("BEBA72E43E8B849A8AB7DE5E384F4FFF", "5C8E69DDEDACC0A2E2C53C49"); +test_comp128v3("E924217A8D6DC3349F1227E479B75ED3", "EE4F62ED04137D5789593131"); +test_comp128v3("D816518AD87D4EFCE7596BF5CB44F4E7", "05064CA57A799CC2BE53F4DA"); +test_comp128v3("915D72694C6A437D7B0F426F09E052D6", "D424688D264C9C6C4DF27328"); +test_comp128v3("A670F35E061E9939F3BCDC59FE3713BD", "6D01F2C7E14F078D905D0CC5"); +test_comp128v3("5C4F891E7FA9033123808EA080057854", "CC073D07C363B207B01E7A92"); +test_comp128v3("18179F59C553186751D81E19B525844B", "5A85AB9293AA28FF5FAB717E"); +test_comp128v3("C2B28E2A5F646D7C1D8CD149FC5CFCBC", "C92B159FBE27D67E60BC4979"); +test_comp128v3("B4359F02926FB5CFE5CA5A8D1CA4DD9A", "3F3BE16228D0E16613464E71"); +test_comp128v3("DEE387A6D3DE2596552C22CC63DE4C51", "0C00FAC805524991C3279C9D"); +test_comp128v3("D51C0E2C76902EF329A51E1F0D7BCCD2", "2B22C1C141C8048A35731F8F"); +test_comp128v3("D5E486BEEB5F24C1DA0E8845A9B7A814", "EFC378D93A3973CC122E8D4B"); +test_comp128v3("5854C608946E292D53C10BB4217FFCFE", "1C9F8CC7D50860B4B3A0D942"); +test_comp128v3("B7AF5AC0E19E193F7D8E6F39A574735B", "548B1F53379D01046A6A56CC"); +test_comp128v3("34E91F46730F97BB9FB5EB234FD1F8EA", "63AA742D508678B048EA9C39"); +test_comp128v3("341BA1C17F4B3404873D4FAA11360CFE", "72FB0649FA0BF6BB586BD4D8"); +test_comp128v3("9E3FB44A03A77C0CE5A61A6A1401D171", "6CC44D57F3A12BF4EFD1A8EE"); +test_comp128v3("6F736586A0EEF3449DF0B60D94FDF437", "9CD22D8E908B8604E50AEB38"); +test_comp128v3("3DD7BBAA9219A684937E01ED3C4BB765", "979F4315ADAEEFEB2FA425A8"); +test_comp128v3("14DA6A52901E8307A0A670AE479F86CA", "2BCB1F00A750C44FD8796227"); +test_comp128v3("0CCFC8E22D343F1F742109B298C70B6D", "8A2774F0FCA16945E112A963"); +test_comp128v3("6EFFA300E7B42409B6C0AB2F7702DE10", "03775D043B0E74A09DD3C682"); +test_comp128v3("6E32DD9C06363D3861E0CA8757F6F1E6", "7A93227B2D9D42E1E9BC575D"); +test_comp128v3("EA9C1AE547A7A703FB9927071741BBDE", "E21A228CBE7A6CB571B048A3"); +test_comp128v3("9C02C6007B9520A2C91AD461F0D036B0", "1152183D03228FA0824CB02B"); +test_comp128v3("D05F647A9D52588A8080FABC23C8FBE2", "081E7E132E7FA762FEC9615A"); +test_comp128v3("C69B4F862714E7DE0F164AFB86FA749A", "A6EA4793326C53FCDD068BFE"); +test_comp128v3("8AAA18EA7C2BF9AA2CF2FEBC67A2D237", "A844FDC8F08B88FA76203076"); +test_comp128v3("99EB982A955878D476D0DCF26F4F2549", "4CEFC03D8877AE5A4948132D"); +test_comp128v3("E67E1D6202D1579CB6CE1019C356365C", "359F17EFCEBBAF1871BB23B0"); +test_comp128v3("51E24C6EAE298E24032801B915284529", "A4D4A479C4A563C887CDAB23"); +test_comp128v3("A680BBE906B789E8EABF3A2105F729BD", "003D877DB7245BD9494FAA4F"); +test_comp128v3("B8C0B91B3E4D721C64AB693D3661F0A8", "E6BD97DF792D7247ED7470A6"); +test_comp128v3("C209970974C5FB03F13CC37DC5AB14D9", "CE35FF0D37FA85538CE400E0"); +test_comp128v3("AA776ED1EDA8F6365E7B6C309C2D14C0", "44363E12F52D707C3A603CFC"); +test_comp128v3("63B00CC8C764D6349953A48FA7C9257A", "926B6CD0BA38598834ED10B0"); +test_comp128v3("DCADDE2690C1A93C5E2726A62AAE2C7D", "FBE1015B5DA87469EFC57492"); +test_comp128v3("37EAF2D85AFD72C0262AA7DCD7429557", "33EB97675FC486E25CA4015D"); +test_comp128v3("AD2B37FCBFF34E2A3E298C4D0E889335", "F1FB1A310DE2FDF67C14D823"); +test_comp128v3("21E5FC1E51A73A330400ACE4C4620506", "D5C7DEF1981B1E4777A03D0A"); +test_comp128v3("5715725A11F18EAF719F33AD86259A07", "51A55915E4606D4BB5293F18"); +test_comp128v3("C3F809C472F506B2B1E857DC01069423", "05206E64B7887F0DC6496ECE"); +test_comp128v3("93F2E9C05B6A1C6BDC847F30C173335F", "59A69CA2FF24C63F4081368D"); +test_comp128v3("BE45C95A8747E9AB6CA17343FCBE1EA9", "2584335E68BAE8EA10F0218E"); +test_comp128v3("680BA0B4E836CB3878E5D0DEF1C2E896", "E62B658EEA7A6D7A43D59686"); +test_comp128v3("2D3653DC920D22B620131542E79336C0", "F95FC2F730472BB634C51FE0"); +test_comp128v3("C5519276EB1657216B1EC10FB4A93F56", "3C425689A01D4D8029631CBD"); +test_comp128v3("20BCB9E98C1415A8EDF358D37539315B", "BE8FC33FE00171B5785F850D"); +test_comp128v3("444B9544EE15034F9B8C15E25488BBDC", "192A693DB42C3C1A80AE4D59"); +test_comp128v3("74838C600CAB9BED85163A7DEA529D7C", "45BE629E6266098B2637BABB"); +test_comp128v3("BA67F869BE79821954A4C23546F5A620", "8B1D92C591984DF390B34396"); +test_comp128v3("BAE1A926B0C4C0F224D15BF6480BBB57", "B47B558C9333834B06901440"); +test_comp128v3("3C5A480FBEC0C7DB36FFE0A4D0714EFE", "6324B2C4EC3557EFBB6F0A3A"); +test_comp128v3("79D99D9DAD7E91564058816E40216884", "AE065CF21B8617F8206DF134"); +test_comp128v3("652F5B2A342B02A44BF35CE9BD99B1F1", "27530B5DFE9656356422E110"); +test_comp128v3("298878C7092089346E99538E4B530732", "1E99C17F976097BF59727225"); +test_comp128v3("FCE036213AA9AE0890D6B4C4BBE1B819", "2F406CE178B194BA4223F014"); +test_comp128v3("7CFB133F107F8FAAF1105550EE7153B2", "E9219A1A70AF922F7F6335C0"); +test_comp128v3("2E5CAE7355EC3D5082C3AC9D2D4C1D74", "111F2E0C0435C381F5F0443D"); +test_comp128v3("A432251736F441174D9BF11302FC8A0B", "6D85327CBC7D05E5B498061D"); +test_comp128v3("864C3D7719506623594FD357343FAB3A", "99E9C7CE8A73118896FDFA73"); +test_comp128v3("8060C76EA57A22E835FC003E36FBE134", "5237739EF805E1A8B0175638"); +test_comp128v3("39B499359679F3DF5F20EC816087037F", "EED3A9367C317D2C93F7350F"); +test_comp128v3("3B125A61F19898D982A68D4747F3AB27", "E4565B4CD803A7E706F7648C"); +test_comp128v3("59E0CA0FC910ED47CE9541E983256AB5", "86D49D08A5CF0A80AD3D5471"); +test_comp128v3("1509F82B32C4D1CBD190289F2ABE2A4F", "181C407D8EB4F6228F3829D2"); +test_comp128v3("A5A1461145641E786BEBD6A7216DE8DC", "94431F516F754C875F978737"); +test_comp128v3("059B3DA9442AB954CAF99206B5BE89AD", "651C10359109860AF1718475"); +test_comp128v3("AA9D00B5EE743F509F23AFB30D2DC459", "FDB81785C720C703A71500C9"); +test_comp128v3("55D1E3F5EA6945E329135BE531AE5AA2", "EE17C77D4FFFCC83060A77A6"); +test_comp128v3("6874E0DAA246D283EEBA23D56647A2D1", "E7018B195236562B25504B68"); +test_comp128v3("B97E607938AB98651325079D9873FC2F", "7264AB0E73B77C3BCD9C59E2"); +test_comp128v3("97242D0FFC2DDC9D58DCB99F47FDB54D", "FFA3866BD5962ED89FEA8F43"); +test_comp128v3("7105A4274D2BB5F3964D306E0B84BC00", "362122F98251B36C8D265AE7"); +test_comp128v3("85A013070F50C8F318EA9D2C297B32B8", "2DC9C0B8598E482E3419CADF"); +test_comp128v3("7F9D1A3A528BF1503E0659C4599BAF4D", "426C7085EA709094FB9E9737"); +test_comp128v3("E40D0BF9B1BDB25BB8CEF5F2C6E42EEE", "0A24F4C8561666FACEB3FA68"); +test_comp128v3("99F0E31E63033B10C013EBBEB5A38F25", "D04FDC9CE5590DAEEC9D2071"); +test_comp128v3("ACED4722C9A93AA8653984D1F748AAF3", "F24EA9777C8BA77D01531F9E"); +test_comp128v3("C24AD9258F77CD859AAD2E9929D0F86B", "BCEDF6F871E3EA3157A11783"); +test_comp128v3("C3F2BFEAD419E0677BCCC0BBBA0F0526", "B5677CC99B8ECE1CC3E6A8E5"); +test_comp128v3("754FECEB3814DD16FCCB048240C569F8", "DEFDCB968FE746EF38F62121"); +test_comp128v3("858D87A91898E0E017AE65A8E96E009B", "13239CEC1BBA2B7080B21A45"); +test_comp128v3("5420B3F002F35796CD870C9EF308E305", "2AD04D7F4DEB18EBFC6380E2"); +test_comp128v3("75B4876D6E2469EEAD26C4CBF4AA3A74", "BC66DF1BFE59D3EA4B51056E"); +test_comp128v3("68BAC8C22D18BBAFA5746D8BAF3919D9", "E125668BA81A618FAD0A626E"); +test_comp128v3("61A5CB8A7FE9124A50581DE1F88B4CE3", "4713490084F1061AC0D01E61"); +test_comp128v3("48A114454ECCCD8F73B798AC77397379", "D69DC6F8710A5DDC1C097681"); +test_comp128v3("7295FAE9C0FB3EF6DCCD703EA74BFA6C", "0EAC8CD8DC71849E3C8D11D7"); +test_comp128v3("41EFD59DFD1E7A03F6608E0E7BD475C6", "9276BF8FD0EFE2CEC453E0CD"); +test_comp128v3("C5D1CB28DEAFD2DE2D83F9670C193867", "F8C00545BEA262A59508A28F"); +test_comp128v3("F1341091B0AAD50914EC51A0DA1E8DB6", "0C1CCCA9988F7891593B5B3D"); +test_comp128v3("15B47603920EDDE3B34B7842547DDF58", "75E90A950B489CF1B3FF84E0"); +test_comp128v3("AE9B3B9176219A4A8AC1AFEC7C152267", "54212EDF5C06DD53A5360B30"); +test_comp128v3("640A58C1432588AA65E3B88E8A66326E", "1864A1790FA618FC9AB896C0"); +test_comp128v3("BBDB0C7B620366A7E9F3BB5AD634CA0F", "A059B19B2641F578227C1F99"); +test_comp128v3("FF31F65075488B3C9C4271D31087052A", "B81CD905D39B5FDA2E4A454E"); +test_comp128v3("33D44783AD83F85CEC49E9710B8230E7", "68085BE1594AF4350BB72575"); +test_comp128v3("DB70BDF5382D01D9F38D868298BBB2D4", "E67ABBB646268CA0DD275928"); +test_comp128v3("1ABA1A66B8F22CF69576CE375FAB4EA0", "182F2FB770A7F636B2B97AAA"); +test_comp128v3("2CCC1B002E74532B12BFCE0F75F080EF", "1F298C218193E0F3ED2959D6"); +test_comp128v3("A2E879EB6F21E729463FF02A5367088F", "CCEA2AB95BC3214EAC9E627E"); +test_comp128v3("5325A7BD8CD28B4C8009AFF45E545987", "5BF39891DE27F5C1D971D6A6"); +test_comp128v3("E422ACCAFEBBA23C330372593E0EDCE5", "EFBD096CA871AE04B041A3FA"); +test_comp128v3("AF4F883267B43FB627A6CED4D39D3297", "3F3DE74071C3A880C23A2B12"); +test_comp128v3("FD49F0326311DC823D757F635197572E", "907E8D9EA29C29D0DD4FAB21"); +test_comp128v3("FCE21FB08EF39CBE431CBE3023C4DB27", "73ACE1A839774DEA18A34375"); +test_comp128v3("A0BAE1DF873FE7A7D9048D635F1F14EF", "F3074BBA4F277FBF5A7F91D9"); +test_comp128v3("B37C38BB80328F3C97A977F2ED254174", "AC6039F5FC06E302415DDC31"); +test_comp128v3("665CE0C255C84288F7A75A5F81926F6A", "55234AC615BB3356CD0E41A1"); +test_comp128v3("8E7AA9F32253F42EF7F2D68EFBEB21AC", "04762BF970D1F2DECF22252D"); +test_comp128v3("A1BE05726059C3F312787A379F585DE2", "094D1F7842C129B549BCEE85"); +test_comp128v3("58B1B3DC7636E88130647FD67B68B08E", "8486978922E8D4D23A075885"); +test_comp128v3("01DF6BC1C5CEE8C177C59CFFB4370F8E", "B71D112215E3D942CC8B156B"); +test_comp128v3("E21294A89D9132C2DAA27BE40B719293", "00DBB154E82102ECAAE060A4"); +test_comp128v3("35B192D8BF541EB6EE622972AF7A640C", "4137A9C7D970F4A79B0C0826"); +test_comp128v3("457C3690BCC9955B543D2147A98B8BEF", "1E6860FC647A0AAB87131B5B"); +test_comp128v3("7CBCAFB6658EDF3F504659B024251EFF", "D0BE0503E3D82D3545C0FF71"); +test_comp128v3("247DA9A5A1C41600098D805C941BD8EF", "0B620D456A380440F69C42B0"); +test_comp128v3("96C7ADF6EB63AE953A9AD69CFDEC2ECD", "7B0035A1982AEECC937A9463"); +test_comp128v3("4998CF82AA9184C7AAC721A14EDE612A", "8B953D21C3805FCBDB26DC03"); +test_comp128v3("6D6C2397F816501C1C2A54026A87A891", "5E4E4DA6DF8439447F40AB24"); +test_comp128v3("9296C69A474A588CAA17E769F09E650E", "F2454421E40AF0469806ED3F"); +test_comp128v3("B5E72F91519E8C1676DE816B80E8ADCD", "A3A9B91A7FC134B9D01551BD"); +test_comp128v3("7BCBBFBE158DC5930C71CA5752DB2993", "20AEED525F372D089FA1A1C8"); +test_comp128v3("9F5DAE81ABAFEB880B768EC43240DECC", "AD83E8DD85824241E62C971F"); +test_comp128v3("9A0E44698E7CFA4A85C50490D45B5D52", "B10B5377EDB51812B6F29C8B"); +test_comp128v3("57248389353A263554EB4D9980CCC158", "D1881105398CD380A6B43608"); +test_comp128v3("276F117BDD45E2A3B9E8A034CCBFAD36", "31C05360EC269EDAEF5B60CF"); +test_comp128v3("58B44C471348805E3472F3B3CFCDF804", "C6C8C30D56B10D1D9BB0C187"); +test_comp128v3("7B6B3A243E90EE58132A0C4E648BA8D9", "741851B256F0927411A5E180"); +test_comp128v3("48B2B680CDD3420DA07D8043834FFA25", "8A4DE29E3AD6AFFCA0B4D62D"); +test_comp128v3("9AB7967D54AA825C370EB756206BD293", "3F9C0A891963C81E9C98532E"); +test_comp128v3("05415E6C0388DBD47BA5B90075C80AD1", "FDFBB592A74BB2B7DC06605D"); +test_comp128v3("A16149E3963E97DE8616C5B2D5C69BCD", "28A88DB95E7F29561D90AD81"); +test_comp128v3("B440410CE552432A8CD1C8CFB44D4E17", "9A8DC4CD1584016C16C71170"); +test_comp128v3("282F5FC1F1DB7045E95C4D2CEF993331", "278540F1D12DA5AACCCCA5F2"); +test_comp128v3("69CB46C66FEC0563177C54A92389B55C", "266B6C7FEB0A70ED61325A02"); +test_comp128v3("8A996783B3ED992261F42900F14EEDE0", "E09AC5B6CB1C5D8919A65CF1"); +test_comp128v3("A0D7319B6F633463D5D2678D9535DE6A", "96CF081192B489B4942226CC"); +test_comp128v3("A9163934E4B6F027E9D1B897089E5B8E", "7C33CF678EAC9D79A4B8DF71"); +test_comp128v3("7FA59B5C3098D6A4EA607ACE8EBDFCF6", "09E20383EF90CD41BCFB9E3C"); +test_comp128v3("545266A2AC95D9DC7523D9CC26811772", "76E1DD1B438A449674311F7F"); +test_comp128v3("AD404E88DD3ABACDC4B15C02F41F9DE9", "2EFC6B2B406E29D1E947AF1C"); +test_comp128v3("92CED35256204E31EC3549F58B15C7B0", "1E212698E114E761E5B663C5"); +test_comp128v3("EB1F247E0D56A25EF5718ED36380EEBD", "01BBF677F47C754FF502EBAC"); +test_comp128v3("32083C4DBFF7FE1FA500529BEC94F689", "587DE353144F1B3BA54447E0"); +test_comp128v3("3C6742A6E91A429CC202BB838BB717B8", "CA7694D92FD84F2F45AA6613"); +test_comp128v3("4C6A5D02313B182340FEECDB0A9CB3B2", "416B5C878D90B6481EF1DDBE"); +test_comp128v3("04C814633D2B0BF3B03D3B2F5CFB9C43", "A9E3C68FD77D1B30D415180C"); +test_comp128v3("E6908C7AEFB2819798F070BF57354A8C", "EEAE98FAF4225799B577D6B5"); +test_comp128v3("D8B8B932852D90A70F245B3E01E0623E", "E978D99AE21FA544E0FF7750"); +test_comp128v3("B2B1C9AA587FFAA004D2DE4743EB7DB6", "BEA2D1F69952283D80F4CBCC"); +test_comp128v3("C891C1DDE6D0688136A82B79CB8DD541", "E6E6CBF549BAC1BCC230DC82"); +test_comp128v3("E5619F847A4005AE32AA9751EB407CF8", "F9AA6BB21CE75E21372A5ABB"); +test_comp128v3("E6FE23F42B4B5FE8B333A1428E7EC789", "A84BC66F58C540B8BDA0CC71"); +test_comp128v3("0B784416AEABB2135791774CA7FF04FD", "9AB68C5F642C64C82567E299"); +test_comp128v3("42AFC9A45375E548CE1EF6E49C907FF3", "A756D8B5D20EFF34C4C5D18E"); +test_comp128v3("61334E0DB09793458FF1E7874BD5BB56", "FF1EB9D76FF1B2E49564419D"); +test_comp128v3("471A3B7B06D76797970D836EF664519D", "C51C2ADB60D331AE5AA94282"); +test_comp128v3("26D42F7E2DCB2C1FEB76511033C7D986", "A28858C9C4E7FA2CC6F99576"); +test_comp128v3("8FA6CCDCD58890BCBEDBC29EE019A002", "B394C74C41F3FCA60AD2ED04"); +test_comp128v3("FE6B666AA3EF9CBA6094007E3F1B4F24", "9246AE183103570DBB6E1AE3"); +test_comp128v3("7A18F941E8B893C7D27D63F5F4E14985", "345E27AC263C7C0585F25D06"); +test_comp128v3("C3E4A515BF1C087D1F3AEE498D3C9F4A", "B3A6BBEAB3459BD607310A3F"); +test_comp128v3("DE2024BDD217B94AA602EB502C9FAF4A", "9104CB600FEDEFA6365F34D2"); +test_comp128v3("61636EA7E19138D4BBEA213AD61543AE", "90992C68472147762B9FEEE8"); +test_comp128v3("FAB3BFF88D340A5423E32C9596BC8B57", "7FA6B3679298BB21B282A350"); +test_comp128v3("4D37D80ED1C7F445F73A66F59C11FCF0", "110889228DE97F9AFE93A1BE"); +test_comp128v3("A6D10F7561451F50B85255AD5BD912D3", "668622414C3922D25727F3C7"); +test_comp128v3("E6A2AC428310CAF276CB6035CB8EB9BD", "8F3E6B6B0E0485B69F011B6D"); +test_comp128v3("68204E1B48BDB4F5D89F8A970B2CCACD", "D404A42390D66EB423F42554"); +test_comp128v3("98CFEE98EDA627B7680EF7EDBB4CE14C", "A3B4D01986D64F0AD563F7EB"); +test_comp128v3("D06325445759A1D117B09B2E8F4C94C2", "F5F33FCC60A8E84325C3CF5E"); +test_comp128v3("92A8B5DC09AC530E8A5CF2F38AFF22F9", "2DDC1FB79A084C64EA4BE75A"); +test_comp128v3("B5521DC9BCD55EC9CFB2158A120BAE06", "D30F832834176C330CC43514"); +test_comp128v3("C14B9437622D990C05C3FFCB734DA52A", "D0CA95116EBF7A6261CCF2EB"); +test_comp128v3("75E4718349BE6677212F218679338FD8", "837DC56CE8A0EB5D01903DB0"); +test_comp128v3("937F3F6779B2D4EBD5B7A35E3DC89D57", "A86B1F588435C042D6C7642C"); +test_comp128v3("352D597B542F025B4D18A42C9B50E426", "AF86E90EB92C60A7B0B942E5"); +test_comp128v3("195505E0551B87975CCE1A27F0B1DE1A", "7960D8F66F1D52C8623223DF"); +test_comp128v3("23AD7E24D5C114B17F629337C20B2267", "430761488833363E43CCF38D"); +test_comp128v3("258C233904FE9E5DF8E21E6F5AE217F7", "5A03D16A770893B19751D022"); +test_comp128v3("CB9F5D69C3189F895C6D541588F6F6B1", "AD173ABFA217584CF3E33648"); +test_comp128v3("1D41DB0E40598D7AFD4500E3B3B1934A", "884D68E5EE36AA82FC277648"); +test_comp128v3("A825B23D799E59BF6AC02ECEC986D308", "16731DAC8BC5B9FFE165452F"); +test_comp128v3("5A02958E967EFB560ADFAA471FBE545E", "CD455E83E810D06DAC2DA40A"); +test_comp128v3("E0BA11F212EFD783B1B2D7C1D94CFB02", "BB3D1F7CF901443C564AF018"); +test_comp128v3("6D2B6B980D7A84ABC255FD36D78F73C9", "9A9EB3E89127EC8C59F2F219"); +test_comp128v3("29F7F3DD366FD417FB27FF070C6C64D9", "90A88C2971EF2519A9286ED5"); +test_comp128v3("398096054AAE11F1466EC25C31EB488B", "FE8C1282B3EC0BCC245DC0D4"); +test_comp128v3("4727E5FA42CC306C94BF5BC60BA5D04B", "0979930740A16964D4E8DC9D"); +test_comp128v3("00FA2643930D4CAB0B437D4538A9A5CC", "D7199ABE41A62FA9A21C940D"); +test_comp128v3("4BA3FC019B73B6D50671AA008136D42F", "632173C95CFD3E845734F21A"); +test_comp128v3("DCF66A88B4E29275FEAD88B7FA30432E", "CAFCCD143CAE517ECED695CE"); +test_comp128v3("65945975D5C9C172830BA2C9E82FBCEE", "C124C3DB68DAC92C77D9D77B"); +test_comp128v3("88F1F56B2114A44495DD4758A27DEE2D", "8AE73C7FE5A4D3AFBA04735C"); +test_comp128v3("98D15F929E3C088915CF014704953670", "D40859F7D1B9B0BE218DF3A0"); +test_comp128v3("2A5CE1BDCB03D4A716F94FA058AA4A8D", "3C52E2C038B420B1148FFE5A"); +test_comp128v3("06E140F81908655D7EB5CAB5BA500EAB", "EB33656525860992973EC912"); +test_comp128v3("CA5F889F82FF6D1BC8A37EE7F4CBCD8C", "5A05C0D894B353837EA89DCB"); +test_comp128v3("18EF57BF7CE6A833096851B002085B85", "836B27AE1ACCFB7E70705D78"); +test_comp128v3("03C91A567AA4F70F8FAE96090B1735EB", "6A9AFF2DEF414785C740FA96"); +test_comp128v3("87A6F4595E81766503F3A69ED488CF30", "1CEDAC452A7E2A8F0C6F0898"); +test_comp128v3("A6D2C603B63B9C2DB78C7603FBBA2E56", "4D87573C92C742AD679C5F47"); +test_comp128v3("38F20E83B0B6B0ADECCD8AEEBFA0D699", "174B64864AB6D9ACB49E9974"); +test_comp128v3("FAC8FECBB568C411B8A026E8101EAFCB", "DD1C6136805B948F8A752F88"); +test_comp128v3("444530537C31B55D744B3ECDAE7351F8", "79452F3E1F9D9CAD82B87F8C"); +test_comp128v3("857CC0770DCA36D9022EDAB273E28663", "83392240C1AF37AE62A628EF"); +test_comp128v3("57E9FAD98FEDEE806AF218277C3C5D41", "7CCCC317E62BA74A9C76D519"); +test_comp128v3("B5824EEB55DCD5A494FF1A90587A823B", "286597939FE17FB2632AC770"); +test_comp128v3("2B279D4E24EB13A17401CACFEE936E04", "5218F1BB472334ED7E1638FA"); +test_comp128v3("1EC44F30AD61EFB4E0DAF670C3B2AB70", "9996814A92FCDB239CE26937"); +test_comp128v3("4FCF2FCBA29AB5869EA97742E1B84F36", "4C4AEBEFFF5F38B19E115879"); +test_comp128v3("12690AD6A685FC5E12F9F2C8BC3B0EBC", "4E637991268BBECEB730DCB7"); +test_comp128v3("D9F82CD33E3B58A7A12CCD5CE0263795", "60B29E63DDB9E1662CAB28AA"); +test_comp128v3("9338545BE3BC0BEBB1147A60A901D050", "87A06D1628D7F632AA0B09FE"); +test_comp128v3("430A9DDFFBFDCDB35CF25C2FBD5FE048", "3CFDE615E8709673BBF5F81D"); +test_comp128v3("9142B3536CBC753D11927BE8106E06BF", "7AA594617CF61D637A708F6C"); +test_comp128v3("3035ECECE2B602952946B25C768FFF52", "790963DE796E2AD0F5609414"); +test_comp128v3("238844A8C5D4EE87E1E3DBB9730AF9E1", "EBADA4E0EB87ACAE64160331"); +test_comp128v3("2EE2ECCD9C8353F0DDDB3DE1FB564845", "9639CD9CB0B49815D3CEBDA5"); +test_comp128v3("4CCF70032015B8E5DC13EE6DF5D9766C", "4199007AFF50F079DD974CC9"); +test_comp128v3("940EC0E6CC164B97CE7A620569BAF28D", "8F4FDA8480B3DB9879680E17"); +test_comp128v3("E9AE188BDDE66B3F5854C3EF4B039A52", "E2C4FA22AE53E117546C6A9D"); +test_comp128v3("77933DBD0A5BEC33112F9984918AE86B", "3BFF6F18700B52ECCE2C84C7"); +test_comp128v3("18B1D51FAEAD1B22B013DEACB696F70C", "A60CA3558AF36179BB73000A"); +test_comp128v3("AC8C43FFCA7B3BE74B75C4FE2161DDD2", "0A94334EA63F06450687F5A2"); +test_comp128v3("A1F89ECC18A10A50802BDA9425C04646", "04D28F46E4CB41BF9A42A595"); +test_comp128v3("E1EF29848E8859D78699F0BC084FFBBF", "FAAD7FD942FA72B031577F66"); +test_comp128v3("1A6E390B309FFE210B5F08E60C9A38C6", "AEB7315860F4D0720BB9F041"); +test_comp128v3("B574C2AA7D8F662B40A8B32502003397", "1DF4B893D380E8976DD338E3"); +test_comp128v3("92D42585A0375621E0CE7624BC8A9EB0", "A5806E604AF5D548D7680484"); +test_comp128v3("EDF884875394558E62621E8017BC4F2A", "4716D1CBC44A8B3EFEAF67A9"); +test_comp128v3("B7E1B515FE3CDC08B58C5A9954DEAC7C", "4D639CF494DDFD648BB5AD8E"); +test_comp128v3("7B7E1FD35769F032A5253E103D39C9F1", "ECE54620684332950785D8BE"); +test_comp128v3("0679BCD97C8EEA6B4E3A6D9A6DE33835", "CF055324EBBAB90814F42FBF"); +test_comp128v3("2DC3110C86D5C7E1D4D3D545EE24FC2C", "07938CAEBE1712F5AE1E3ACD"); +test_comp128v3("AE1B1164BDBBEAAB83ABE0C419DDE545", "9A5C9BA8D8F26A7CF64AF101"); +test_comp128v3("B0754B5A1DD4B70D6668EC8EB4B39C10", "52FB1BF1CE5FC6A231F0F05E"); +test_comp128v3("EC45EBD7DD6E36E070B10B353CCF9D5C", "B729AF7EA1195B39374B58E7"); +test_comp128v3("F61666A78A70D5FB48828AF5EF5AA2E7", "D27EC7914E016A7FCFF71C54"); +test_comp128v3("50BD44366D78AF6A69F20093BBD5E0A3", "17A8D6BF04FD4962D8E160BE"); +test_comp128v3("29C0FA93802FAB90949F502AF5E3F2FF", "A8061D733AE08D36228A60C6"); +test_comp128v3("CDF57CEB499D1531687C8E6BEC30F2AD", "2FE50295265CB2EE759C723D"); +test_comp128v3("CBE08B4E5F61E801F929658192748795", "6616AA22DB8D0F9B383553F7"); +test_comp128v3("AF1E33D1EB2364CC5EE33ACB28D96BF1", "7A57FA9E969374C8E3C47BB3"); +test_comp128v3("A836E1719AE7E54F8A98ECAF902F587C", "80938563139ED354B2C3FFA8"); +test_comp128v3("39BEEBBC77D4CC9FB568B738E7D02F71", "34087FA85A9AAC1586847BE1"); +test_comp128v3("EC546393DD23CF2F2862384E8C3B146B", "BB153B83A3908B4E64712AD1"); +test_comp128v3("96BD017521C07684145B6F8C6A001308", "854845992A4DF09576663A15"); +test_comp128v3("F60B146739D623E691FFE695283958A2", "D4E66CF06941040DCACA85CF"); +test_comp128v3("881FF49FE99FF0FBA2ADB26C9E27276D", "0ACAF775BB38337A1E344200"); +test_comp128v3("3714AF1C4056F4F1A0334428E70EAE31", "675C9D5C711980E4568EF851"); +test_comp128v3("76ADE089A96DC337F6DF5AA2AD9B9379", "A4BB7572C86755C40F67668C"); +test_comp128v3("FC2E67BF2FDB79D53509A1B712C3338F", "A08FDFE14B6377B9593425DC"); +test_comp128v3("9B1BF9D0A2191C33F6D3119A057E9ECF", "A40A99883EC4D2F5E66F135F"); +test_comp128v3("8D2D20EA10C7B5E377E110CC2C471298", "D771870E3342A158CF5BC565"); +test_comp128v3("20DBA5BA5C7364DAF94894FA2E3133EB", "D5ED6537C0B3343D2E3DB575"); +test_comp128v3("5B045A56105D5FB8E568F5A18107F339", "DB2DB2118ED8A75AEC9F17EE"); +test_comp128v3("6A6EC373C993C65460F60D5C2F1E2C42", "AFC9C8DBB8D37070636E8A83"); +test_comp128v3("78D42F93ACCE494C7C48F8B3FEB833BC", "56C4A07071992807A24873FD"); +test_comp128v3("877087DBDE0778182AEDF1835188A17A", "A5AEBA67FD0C0053573562D1"); +test_comp128v3("C5D36C7B00BC21E37EE7C8BD2344A2B1", "9B87A0E5CD0F142730217AAB"); +test_comp128v3("2848480D8E779C0190C1FAE7572E7A4A", "8F1512191748CB0A91FDB205"); +test_comp128v3("C3863CD1CBCB481366B8B1C1F6FF8530", "0766720770BE1247317F7B64"); +test_comp128v3("BB71FAB97A20ED16A391A519A9EC193F", "486EC0A9E17EE343578837C0"); +test_comp128v3("052E5A2C31CEF3E3695A1397853D45D5", "936CA82F9FE6A435C4EE4DE2"); +test_comp128v3("7B6306FDF353E730770E66604F8466CF", "4121273261A8C8394BCE6FD5"); +test_comp128v3("9A6FC4AFFD8C84F8818AF4AF49FDD53D", "5763599BEEC27160A6AF64BD"); +test_comp128v3("D61D855CEBE64691EB99EB73E3758FA7", "E5D9845F2515E2BD741E912C"); +test_comp128v3("6982C1E0C933006920542445974B0459", "AD5EBEEDACF13A80488D11FB"); +test_comp128v3("8D36A5A66DD0059C76B2C0510EC41E25", "4AF22EF5C1DB27880E8F1B1F"); +test_comp128v3("CD58C379E73A4923555FF88714E16CF4", "D30AE0937D8729472D0FC3C0"); +test_comp128v3("E04F522692CBEE4B7F0315AD9C51D72D", "D96F380954E06B17783E0391"); +test_comp128v3("BBE2C80970B92F6ADC1AE1525A197DAF", "9FCEBC453C0C2F496D2B7B0B"); +test_comp128v3("D8CC3E92B9C35D22B2FBB94706521276", "BBF9E042F4E5EEDDC95EBA85"); +test_comp128v3("30B4398C6A943E1FE0C3C512BD4BC788", "8503AC4FEB9FDF7CAB207F62"); +test_comp128v3("42176E40D3F1446A15D9AF3BAEAA97D1", "FBB1A09D0DC843BAA4151147"); +test_comp128v3("2D9269B04D899888C4DFD9D18A14EC62", "9319967214C5E69AF7CC83A5"); +test_comp128v3("577A7773EDAF8B1A958F7786EAEF9777", "F32957EF68CF821FE3C4C844"); +test_comp128v3("62BD892681623A3893599E5EDC068BF7", "52B4A34186CA802DC7650385"); +test_comp128v3("A8FF2DED49942BCF15D92184DB625AEC", "2B7ECBDD13D65F645A1D71BC"); +test_comp128v3("2A375F080809C959288ECBE28177B8FE", "A15C38E02FF392874C2477F3"); +test_comp128v3("F24A400691C85CFA11801DB8358EDB28", "AED4274B44DA2CE47C646927"); +test_comp128v3("2A605DD2D6CD2532034962B7B341C92F", "90C1FE26F8FE8BFAA6CCDBD4"); +test_comp128v3("4A0EE729A82478AB404AF83758EABB77", "9FB249FB258CC32EA8C2CE1A"); +test_comp128v3("77E87DCD362B3011042A2D50DA174118", "50FEB8FE43E76FBD9FA6DB41"); +test_comp128v3("05099369CBEF98698783BA40403A34A2", "D6F60A72FB0E5B8B693A2191"); +test_comp128v3("33817E9D63C8FE1DDE0025FDE7DB2FEC", "2CB474A91467A18E2A9CC760"); +test_comp128v3("D237DCCFF06B1DB84E8D2BE3554FCAE9", "8501DE0D5ACF9E38D7363AFB"); +test_comp128v3("377F98A0C49FB4150128986DCE4E7359", "25D8CAAA3EFEE5D7102D6039"); +test_comp128v3("B00DBA3CC58C9C7ABF27447431B16300", "9221FB5259BE9C96B161459F"); +test_comp128v3("20E5A41ACB1B3853D6A31C52DB5DD12E", "67928229F5693E291B98E732"); +test_comp128v3("DF9CCAEC4EAEA10523ACF122D4224B0F", "D6912B17D1ED650EDBFA5DA6"); +test_comp128v3("030C9B40FF53EDDB9097EACF7DE5030A", "931B4F1E46FD35AB1E5B0F58"); +test_comp128v3("977A5F4C3C961719DB5EB52D0B38B1FB", "F8E13B7190E28876833BF22E"); +test_comp128v3("D726AFD1E009A57B50C7751EBCF50A3A", "455B65855ACAB653892103D3"); +test_comp128v3("0066B204988D12934052DD78451B3C38", "7A14D3B1095D6E7778043C48"); +test_comp128v3("310344BE7D063F69CE10EEE11B3D3325", "D9D916E2A9E0EB1D884F8817"); +test_comp128v3("BE1E399FDAC7463EC2AE1BE7CC281C15", "761BD212E485B0C0FB45CD19"); +test_comp128v3("3BCA508E2BBE57BC3F0373052B3BC3D9", "8EFE95BCDA4BD9EDB5DF843C"); +test_comp128v3("F2FDDB7EC0126349130702C354D9FF5C", "212B7A28EBB7D9F43B25FF93"); +test_comp128v3("476582F5421F58306A3C57C8F6CDED9A", "1A591D59BCEA8D9B7D10A2B8"); +test_comp128v3("AC58FDECC86B561D6A148B4074872BE5", "4BA6D4EFC468467C570168BE"); +test_comp128v3("CFE2C743B197342B2C6E33058DCEADF5", "D683B57875B63428A0523913"); +test_comp128v3("D0921D159B743A3E644DD3787FC767F6", "5729DB51AA3905FCF6D11CF5"); +test_comp128v3("22A292888CA8C313B785F970B490C261", "7AB4DC3F26954848629108E5"); +test_comp128v3("996E7453208FCE8F62601B741B187880", "129FA10FA3D67ECE7A49E8E2"); +test_comp128v3("B3915B7F245EE8CA2613C5DBFA40B36B", "AC6CF8265CA6021E6D28F477"); +test_comp128v3("4865C31CE54C3BB99E53591AC8979198", "2650D862DA70A85B9FB4503A"); +test_comp128v3("FC16BFBF1FADDB8A3DED51D1ADD8C391", "F3CD6C256753896320EC4D9A"); +test_comp128v3("1D27C082749B362A9E079528CE462144", "49BBBBF8AB5CFF59005105E9"); +test_comp128v3("19308C8E873FE8D050BDDD797A029CCD", "476AF62908F1421B62E0E334"); +test_comp128v3("1426F94934BB10E6B4EBAD64D2A54A2B", "02C6B814B58120E5F96B4107"); +test_comp128v3("AF1E5C627A5533D575A8CECA5B1117BB", "9304DD11B97DB619F303A9C8"); +test_comp128v3("58547645FA672D474940279877918D62", "BA40A424762D75DD60C52373"); +test_comp128v3("3A56DCC21C13902FC625643FB25C987B", "57E685340A4A237414207C48"); +test_comp128v3("B851E274F9E1E7545ADDEDE0DBA5D2BD", "AE14288C0BD0877319194E8A"); +test_comp128v3("7627A495FF15D16F5DFC3BA784DCC243", "5772AAE27CAB453D3F6EC374"); +test_comp128v3("34CCAF8288808B8281740C29BE6E71B7", "C8CC08C9299FC6A61C92B17A"); +test_comp128v3("17795498DFB7074869664325E892F88E", "E0319808163DA661053AEE0D"); +test_comp128v3("7A4338E4C6CAED253D81CA943F266933", "12FD13AE57F3492999AC0020"); +test_comp128v3("9C70DA6910BEDF88184ED2CC8A630A64", "D13FA04CA1CEE854310D2469"); +test_comp128v3("51C87035E8757BE513382458A614D592", "6643B6F05BD94565D7292AE0"); +test_comp128v3("890B1AB6B918B6FB910A874F1774097E", "5E8292F81CFC8D81DEC5C71E"); +test_comp128v3("093495E9E1A906FF8A02BE13F27EBCAC", "E4700F7002C7311ADFDD0AD3"); +test_comp128v3("18534EA254A6E58AD279F2E75ECD1A2A", "F7CA1F8D9D942211356F15AD"); +test_comp128v3("E1B25EA19D9FE6E6C075DD10D7178DA9", "DAF3C83EE49AA9C795967BA3"); +test_comp128v3("3919CCE828CAA532B0D12734DE55C183", "F9FCA32B5411A7A5802D8953"); +test_comp128v3("056CA833057E0B16285F753AD6FC4925", "D99B2F3AEDD8CB9229BBEC0D"); +test_comp128v3("4E900241483908832374039E44B365DD", "CFCD7BF4E9C80C302555C5E6"); +test_comp128v3("434E2A4081A6AAA495F6324A27A2BEE6", "546C2AE028F7324B31EAD660"); +test_comp128v3("542BB3F650D3FD2197D651F2AA3B4CB8", "779CCC12B9A81203BF6E64E0"); +test_comp128v3("85C002B4D3C22F62CA29B5A200016AEF", "DBFE7A507BF3581FDBC223B3"); +test_comp128v3("A0D62D296D3DE757A2B97313CDFDBF28", "F6A883DBB001D5A06FA56A18"); +test_comp128v3("758F8139CC9EDB9E1046D5D71AC6ACFB", "A11C1322F33B0C7147ACF210"); +test_comp128v3("9854BB439AC95310546DDCD6AF8C9EE4", "75DFC039FC4A5AC6541750D7"); +test_comp128v3("162B05A3D90E4F691CF4FDA964F9D08D", "BD38EC87D8FBA954372B5C2C"); +test_comp128v3("3B870DC087FFF1CFE1FF0E7A3E5809FF", "D8926C4CE7F8A1B73803DEB8"); +test_comp128v3("74DC9116A986A4C5623CCFFE99151940", "E384D58528BA6593998B47F8"); +test_comp128v3("4F0AE2A1169E2C0CA32D76222F82AFDA", "D0D1CF2A17E32F33E0BC5D85"); +test_comp128v3("6E401FA58FAFE8C370CDD180384503D4", "410C2B70E0AF9ED19AD1A655"); +test_comp128v3("B600D795E20D5072AAEC3F12FED9831C", "8B195E4EDDFFBEA4FD2078CD"); +test_comp128v3("84F03AD81AC842234924AEACBFD9E007", "C4841B6926907A9ACE38F692"); +test_comp128v3("A9BB6DD52A6131A6324B2200A94A4C37", "6135DD345339D952D055778D"); +test_comp128v3("8C76285968EE5CE3C5BC053389320472", "483B0678643EC1B079587398"); +test_comp128v3("85CE181363376F133C27395F546810A6", "9942C4C95A9803060EF4E9C5"); +test_comp128v3("0EF7F03976FD4F35877D81E51773F788", "E07E11CCD12DECB4ECFD52F4"); +test_comp128v3("9E051CE8CD789364F3D4514664637125", "37016F051186B84AB6C0017C"); +test_comp128v3("3B969219C864C6EBC0E28E998E723EFD", "06FDA82FD788237C82EFC648"); +test_comp128v3("941D4CA3583D84AD49E8B36043A26B3B", "711A06F246EFD1CB875555EC"); +test_comp128v3("42452AB4BBA8816B642A7A2B2CB32746", "4963261C47864C816D91D757"); +test_comp128v3("EFDC72ECFC87BAF583836B28CD402AEB", "8FFA4E3012A7358F04C87DDC"); +test_comp128v3("6A4A1F77C1F84217AD574B06BADA8D8D", "7C615CB1B0C19C1B5108B2D0"); +test_comp128v3("612B7A4023CE381E2DA777DB5670EF19", "0F3C0B32C0CFA19A1E371569"); +test_comp128v3("F2FE60B316249CFC37FC844738B6776D", "094BD3DFB26EE7787C67A768"); +test_comp128v3("F16427D34518986545D6C34CE3DE0F25", "E61CAA8E90A56C33E64B314E"); +test_comp128v3("8CC551123C8D0E5F06CE4CCC4C5CD2D6", "4A12AC7EC803DE9CCE4F5BD2"); +test_comp128v3("0CAF4FCF0116F09688F70DB5BAC4FCF7", "7BB52ED93C9753BCD663B3CB"); +test_comp128v3("570A449DE9CF697AD0F857BA3B4ED10A", "F4D5A26EB7CFE1DB99F235B9"); +test_comp128v3("E7492BB6C9641FDC442007FADEE378C2", "47BB8A378D5FD4618BAAD3FC"); +test_comp128v3("4BF5A78BEB85E6EE45587980AA8997D1", "856007831C77BAEED3FB74B7"); +test_comp128v3("C467D3AA1E425853300115E2852A2C22", "79D0A87198628A4DD0715A81"); +test_comp128v3("166E20A0937416E40585C4725A2639A9", "E60A8BF1DE5F8FEF98FCAD74"); +test_comp128v3("FF60302DDA32C9B15B810FDFF066C3A8", "066BACD0B62EE1F2DFF67E5C"); +test_comp128v3("0CF0CC0B334C5FD676AA5ABD29DB391C", "A8C1FF13A05A3C2AFADF07B7"); +test_comp128v3("3C6F0B6C1F4145802A9B4DAFF7595919", "B21DEA3B36A10ADE95DFDA5E"); +test_comp128v3("59E49926C0291B47EBAF1E08B8FC2E6A", "29CB0AAFC26985131F99553C"); +test_comp128v3("24A9969D2A435B8E8B8F425AAA089862", "6358ED4DD9679D461F39870B"); +test_comp128v3("CEBF9A54B65EE526C4F5962B744BC8E9", "CFBD78D18CE385CD80AE77D4"); +test_comp128v3("766D7612E2649493E42E8729651E3915", "B543D6DF887B827AFE7A49C4"); +test_comp128v3("8D9C226BDE5412DD4CDC3B82143A831D", "18C01DD500E50DC6BF028E93"); +test_comp128v3("AC89833635DA629FB52A15D4603AED87", "5865D89B38AC00FC8277D3AF"); +test_comp128v3("75C5B6B1886B874B64A935443CB167A4", "B71CEE0596FBA77B740403C9"); +test_comp128v3("A154255A2AFF8779A6E0396E3FAE226D", "CCD287D9A032F1D350D3EDEC"); +test_comp128v3("3493696275EBF6764767DD177EBA8F68", "9D0F44BEFE7C57E7A342E055"); +test_comp128v3("48B4168389CC95EF4EA289767AA4CBDF", "77DC39A48A7C1944B4AFD3AD"); +test_comp128v3("9F1EE8FC7A3886E78B1A21338B64837D", "419BC21C840CA23E21C29EC9"); +test_comp128v3("B1EA444B1E3E7A548FDDA7FF64D2E602", "4977A7DE73FD33B1D97D58FE"); +test_comp128v3("68F8AE28016004B285403B23E021BB2B", "CA330C40333234E36F460166"); +test_comp128v3("7F4F1775A34BE9711260B1F977E152EC", "7BC572ED3D38FFBA5488732D"); +test_comp128v3("3901121148BCE143BD22B87CB212EF88", "5D3212E5298C99705B7AC932"); +test_comp128v3("DC61F4169C4BC0B3C54437F622977834", "D4506840401DF6554635D857"); +test_comp128v3("5A051696E25C5B4852D48331780441CB", "BA534B6CA3EBAF8CF044826F"); +test_comp128v3("841B5804EAB0F86CDE97139A2C6B180F", "278FBF615BF11F7FE79EAF23"); +test_comp128v3("F1488D2026FE51161531EB1966D59BAC", "A3CDC43DD0FAC00FD463B36E"); +test_comp128v3("13913340133F4E555B5BFFADDB325BF2", "6E07FFB5F8E5DFE6FF97BC2E"); +test_comp128v3("9111742825025FF594EFF2F058048BF2", "BD0896C75C8E80FD28C0C583"); +test_comp128v3("BD1CB3D3F4E34057AF30029403CA3E54", "3EDF25FC2A8068B3EB1DB74C"); +test_comp128v3("C054E12BAFDF2452238738A499CC283D", "B7212228FAD9A97F935AB498"); +test_comp128v3("F52B105E60C0CB09793BC8CD7AEEE955", "323153E1E96C18F34AC12A74"); +test_comp128v3("2FD896ADBD204A8EC457DD6AE4446DCA", "78DA31F53A33D4BEA3F7A1E6"); +test_comp128v3("03C67D7FB9F90F3B8416249FEDE60208", "3C625218B4B96297314882EC"); +test_comp128v3("FD0C8286A0EC5A245BBCCED275905A72", "FAD0C4B702D988EF237D72DB"); +test_comp128v3("A93176818C64D31AE11DB44936738D59", "665AE6D0A8E0E0FCF7FE4204"); +test_comp128v3("7801F9B77C8EA23586FF132942D674A9", "C6E394BDAEEB9F1797D9A6EA"); +test_comp128v3("4FA3B9E855330723B00CE8E3B7FD0F2D", "6C615F2A5E6E5BB3E3F4E496"); +test_comp128v3("F3AAEFD08C1A3711672606593FBB55DC", "916E07B07A2BECC7D73C5C7B"); +test_comp128v3("A8A2B83CC57E49E38B3116FB032AB7C2", "A4264C771ABF08AB7B9BF457"); +test_comp128v3("B169A6F3D14D65AB435A411580C72BE0", "91EC0B1EBCB8F77237ECE573"); +test_comp128v3("0D43F218A959414940569C4F80B5F9F1", "A2FCC9A9F23685617EA963CE"); +test_comp128v3("AD5A7D67CBA2D953A064FA3F0C7B426E", "9D2F2AF67DF7016C4078365B"); +test_comp128v3("A1F412EC7A762D4D86B524DB41A03CC5", "B46893F2D972D64E0C56595D"); +test_comp128v3("4FEE01CAB67DB39FE9E67E62D1EAF9FC", "B84477FBD1FD9217E64D21F5"); +test_comp128v3("2C557D29B854DC9F895D95B3D9A71C83", "5FC57C5E4DDD05E6D4125643"); +test_comp128v3("78BAA554D65A8E13CC4AE5F244FDFA65", "05C6EC3E2A5CB9469981D932"); +test_comp128v3("8026E9D238C5ABB9F3453D505358379B", "0A1D29C53AC98815E7A834A5"); +test_comp128v3("3960A9455AAB630A81F8379CB8254B81", "3ED3FD6E9716E4CD21F791D9"); +test_comp128v3("E9D5E86088C4798AAE8EC68FF93B8B6A", "1BCD6B153FBB8C98DCFE2BB8"); +test_comp128v3("E27A3FAEE5ED88DB4184F48A312A955A", "C0A83F05F7F5D8718FE8A810"); +test_comp128v3("3ABF186BF4A9EE6DE4BDD164A9EB3CEA", "0B85C14D123EB7FBEB22BC64"); +test_comp128v3("2B4FEDF3F46178F97BBCB8DC4B6A7AEF", "9B47E11E0BA56D68AE00ABD6"); +test_comp128v3("DF9DB131DD1927D7523C996A8CCC7956", "AFA7F27615E6AABD484B3750"); +test_comp128v3("3151C7838F64ACE68776C88E23DC26F1", "7A18AA3641D5750C64165993"); +test_comp128v3("AFACB079853517002305BA6CB7D7876F", "09851BB26A04A16B792B284C"); +test_comp128v3("620666076D2D088AD2F61F4B4DEC00DB", "63D6377AE4D5077130A3D5FD"); +test_comp128v3("81181C3B04A2FB3E90A2ECB3A09DF44F", "CB46C3E3ADC28DA7A9F12CBE"); +test_comp128v3("9B485FC8D34D39B84D619B0FA0B91DF1", "0366966D53CB7BDE4BF394C1"); +test_comp128v3("DE43D7FFAF046211613FAA0672781DDE", "653E1665CF9679361F428A57"); +test_comp128v3("78C2DFA82F4520991FD3507A142AABD2", "4FBE0E4158E403B8D8AA3269"); +test_comp128v3("6E11061572E6C5755F897773043DB7D4", "7E654E600CEAFE38C6337807"); +test_comp128v3("3FB2EF05BD30839A1F11EEA2BC4C3ACC", "CAF07B3BBA6A5CD6757F0C5E"); +test_comp128v3("6D2557CB6B0ABDAC48E074C3CF3EEA55", "909EEF3E8014ABD0C3141328"); +test_comp128v3("ED451E3A8E2618FAE17CF8C9C544EA12", "D43D8B75C4370BD8DA08289E"); +test_comp128v3("1A7EF4A0F0C6F89DFA9020D69425B363", "BFA698344E2EC5C260D3A3CA"); +test_comp128v3("39FF53E64F2B4B8E445981EC8B04DE8F", "926623ACF4217A7D4DE94C15"); +test_comp128v3("7FB4E8BCE634F763D8FE2CD361057705", "3001951E5CDE9C320AABCBA6"); +test_comp128v3("744DE4EF2893C68A63D340FE40E2C1CE", "420982D52145AB5A54B5EADE"); +test_comp128v3("C8ECBED4C9D3639D3F1E5F4F34F682A1", "24865C4F6792107A3365B515"); +test_comp128v3("D00ED1D1D9CF74C256AB08C8621FA824", "665B7FA2B71AEB7C2DFF7724"); +test_comp128v3("83745C78C893B3F786C728DEF6A48A57", "6872F7917E0FEF0F22D5EA61"); +test_comp128v3("7FBB66885417679E5970AE6B72C5BE4A", "84E39E1931E4CA690551F64D"); +test_comp128v3("AF9D46D06E926C66835517B0155C8ECD", "150A4C90CF275DA03AA0A342"); +test_comp128v3("236722E40A7FE9AF48008DA60028B057", "28C9E79D9B3B9433BA2C8AE8"); +test_comp128v3("374143C31BF20F54B0300181515ECCEF", "028C56AE7D60DB723E0A4983"); +test_comp128v3("A84BEB57AB7EFA419243F145D7B81623", "4E00F03F82C080039BD00EF5"); +test_comp128v3("078CFA828AAC69931B30F86E3451B81E", "AE382636F9F94C763B8070A8"); +test_comp128v3("1F9476007304E4C4A3C1F14A27CB2EEA", "476B9D26577B59CB3E1C3C16"); +test_comp128v3("9DBAF388DAE2EB27B76759C2CCACBE8B", "263C08E1450EAEDF987EDCE7"); +test_comp128v3("9C2BF5F3EFC3DEA34B4EC3F633280B03", "41B8D9727A5E8469EDB661F0"); +test_comp128v3("AC7D476A7CD104A4C4B152FE82899E39", "A3B40003A9FD7894C517C8E3"); +test_comp128v3("178B204DF182A0560778E5B90D1EE170", "E77BF4BCA640C82BD2665C9B"); +test_comp128v3("9AEF8B5694B926BC4A55DED5259163A2", "55A731EF32A6CA3E833F50B4"); +test_comp128v3("6B8D7482E2E1A96F6B776DBE6F7E5661", "CC7E378D8C7AF20E8FCFA0A2"); +test_comp128v3("2AC44A80A5FE1003DD24AA4C6864BC61", "EF7AAE0833F9C3888473EC56"); +test_comp128v3("C260EAC6C71D7B7D35C5BE1CCB34212A", "716DC830699958E175632ABD"); +test_comp128v3("5946CA2D7232076E2DBEC266E794D1A4", "338283CB5CD91817A465438B"); +test_comp128v3("210EAA6C850967ACCF3325487329849F", "29D05D8C1655A641764CEAF0"); +test_comp128v3("393C4E5602EF6301890D599C7766CA53", "85EF9BF7A469BF0005D5AB2D"); +test_comp128v3("5ADE7491694A75A5CE0959996473031A", "78A42538B39E12BED126DD63"); +test_comp128v3("670A72D60EC6606E4E798EBB1D4AEA45", "3EB374EDE44B276A0B05F01D"); +test_comp128v3("23916D367C0E00CF13B2BA5849293281", "3BCEC47F6FF94E05EB2756D7"); +test_comp128v3("3D37E626165E8CFDA7F3503EE96D78AF", "7DB25F0039486AA1C17DEEBC"); +test_comp128v3("730EC7F1A1334D7A9FA161ECB8FE839D", "4DFCF9EDFE4056DAFBFDEDCC"); +test_comp128v3("BF7A806A9945108833CB3C136032A33D", "68CB935008CA401B29CDFE2C"); +test_comp128v3("148D1ADC6281ED1ECEEB4C61A5D5974B", "6611E49991CA4CCC35CA4BBC"); +test_comp128v3("5D941E9A26889E243CC7BA63356B8769", "B2F69A7288ED0794C8D8F3BB"); +test_comp128v3("52176D9C830733245657C8866CB3FD34", "07D624B781E45E1AB2885D43"); +test_comp128v3("B6677C3BD296A6AF1E3D08CB803D9F29", "6DA6E7C25EEFC908BC9CF2ED"); +test_comp128v3("35BC2C889362E17CC46F1DC4C69DE5AE", "9B632BFDC79828C2EAE40ACD"); +test_comp128v3("A8FE6732AC535DB718039CBB7FA0B0A1", "CED6008EBFC492271022666F"); +test_comp128v3("9CCB764C102F715FA8F6A77B9C681A29", "E63D04D6553D5A1272EC93FF"); +test_comp128v3("F430C9CCD6AC2C5448DFC20AEAC26B78", "A268C88D3C4AAC5C3C40B971"); +test_comp128v3("CD2A3D23F134BCD78AD204776884DF1D", "09C2DF4686D239A55FECF7C2"); +test_comp128v3("C6CA21CE9B44435BB2DA88DD15B1E1A6", "23E6DAB765FA303816298AC7"); +test_comp128v3("7F7A993FDE676BE6063A83BCCA2F4CA7", "A0C1BD80DBE3CDDF9157ED84"); +test_comp128v3("84D99115B8B2820C52546580B5A71517", "EF30D73FC9C7712BC1F4E834"); +test_comp128v3("8F104901412EE55AD48EC8A70C0D920A", "F9758C4357FCDDCFF5D7878C"); +test_comp128v3("B6E970122768A8B60D6ECF3590256587", "449F36D3222CBF4262F7052F"); +test_comp128v3("9456329E3E51725FF4306C1BF1FC84C5", "47E7AF27620A89B4F646FB8D"); +test_comp128v3("A320F5AB902AB2DA39A19819EC3DAE64", "F6BBE92D2F19DEE5593071F4"); +test_comp128v3("ACF41B8B0345BB7C0611BAA2F78CE719", "1FBC5EAEE93BD973D6AA6F6F"); +test_comp128v3("511765C125FBEE4D4E5BA1B339214FEA", "6B1389AE53C01A07793BE30D"); +test_comp128v3("960398E8F44A9F26F51694BDE61DE6E8", "1EBE854FECE2AB72356FF067"); +test_comp128v3("43172468FF0E5D538B047E89D9FAF128", "968204B1B443C19E2E861632"); +test_comp128v3("EA690D56A40B0E4810CAA7C3F48ACD9B", "2B46CF65F8EE650856000B67"); +test_comp128v3("CB2728D1C06FA1653325838B6786ED19", "C757A09F686434C6D2AF8FBB"); +test_comp128v3("4ED8EFD706EC13D2D8ADB73E922BDB96", "F188C54E0B4FADFEEEDA9E98"); +test_comp128v3("DE4E12D86637EC29DAF8366BE5A17078", "927929B7DC0C251D1B2BB0B7"); +test_comp128v3("2E241E86614830FC4AFBC8A9B994BC11", "37D46D82906800EA6197658F"); +test_comp128v3("FE24429FB354D1BE7F27D1220D7801EF", "A3D69BDD8EB8C24A6A19BC09"); +test_comp128v3("C1C835697AF1C95B77CB5D09ECBF402F", "684525124857136F39ADE1DD"); +test_comp128v3("AE8AD487E7DD8B1D8CABB82C4B3183CB", "EDED085BBF5084415D4E0205"); +test_comp128v3("70BD0DB40F3D976E4907DCBA3E40FEE1", "EFE6A6F67370348AE283ECCF"); +test_comp128v3("5B1072BA60B98806208700F6BBCB338F", "4C374E86BEBA04BAF4A2E11C"); +test_comp128v3("536C7B7A6D773299B839416916D78B6D", "1F09C90AD9654A66EDEC86C2"); +test_comp128v3("024FF49B1CA2AC1056801B2B9FF0BDF1", "3CB058ECA6914AD9AB4E58F9"); +test_comp128v3("3F73F9C6FD5F80388DE7CD0D447E34C0", "9D4EEE0478937DC2D7EFAC6E"); +test_comp128v3("56C45BC9B76D6D98B674258314ABD03F", "9307A97F0128F4A8A062C418"); +test_comp128v3("6EEDC53430538D16AEE578433AC82C87", "6BFE03DA1A89F83253866536"); +test_comp128v3("15526C4A50256C554663A59AFA31E799", "33F71C34F358D46AD9618212"); +test_comp128v3("31FFA6A17A8A7537CCF03A58E7F32A28", "52F193B5D4238BCBA227B4C7"); +test_comp128v3("C7EEE147EE90896BD4375E96B11D467D", "712F540C52D2B47177F8087D"); +test_comp128v3("218825B240C7C411F7A140834E3C6439", "7659E16CBE00DBEE2C89CA18"); +test_comp128v3("8A61111A6B336543BF5ECCEB68F7D15C", "2E895DC6ED3A9C291F169FA4"); +test_comp128v3("05582B24643BF38B4F0B95044533098F", "484D01822E1106E27D0DF3C4"); +test_comp128v3("A209067823F038C99E35FBBCA3BDE95A", "0DCD65DF9F21B41F6A1E5C8E"); +test_comp128v3("62EE981575D6A3250E3BA64DC029F078", "C7A87C7FA9F0372FE89BF1C4"); +test_comp128v3("062C73ABD56F61A3A42DAEE0F8EFD09D", "F5660C6FFCDA6350574A887B"); +test_comp128v3("2F4F96A5A4062B572F7BBE311ECF6492", "3F67F5A619A34CE49DC41D7E"); +test_comp128v3("B360977080E47CD9B3ED66ED22091F4C", "23822C6017E8BA385838AD0A"); +test_comp128v3("E6E7FBD7603CD52AC2EC8CE72041DD0A", "F76BC82C5FF94A2F0B411FD0"); +test_comp128v3("F53314B138E7CCAFB2F7131185918AEA", "7788F96D0ACEA0A2645D52A7"); +test_comp128v3("D6B452B402B2851C2012C30029645FBA", "311CA2C5A76C27E8C7A58685"); +test_comp128v3("AFDAF1BA6EF954C620B12F16762B35AE", "189701B5967B2D96457EC247"); +test_comp128v3("642D3D046F4F1EBD0C775B06592CDB27", "D054138B51038F23BD0171D8"); +test_comp128v3("CDB86368F91E71CE0FC34A70F6FD65C2", "74D76011A1912FA279AD1CC8"); +test_comp128v3("9FEDAF38BA24A6C82BBA68DA95B71176", "7FE4FCFBF42536F899ED7360"); +test_comp128v3("FEF1D522E84CB983A5090B4151780376", "1489794A18B7CBD81B3E6E57"); +test_comp128v3("861435ACCB03FB2D1BFCA69782DC469D", "4B4D585395AD649C89FE6139"); +test_comp128v3("995AD2985AD4E5A1F8802B90B7F8ECA2", "993C1F391FBAEDF577E144E0"); +test_comp128v3("742263AF7482CE41D4EF0B03A3AD9B7E", "ADB826CAEF2799A7A88DC866"); +test_comp128v3("479337DF35E98C67741FAD81CF3365B9", "FCD508F6FC1ABBE522E0B691"); +test_comp128v3("C7B92DE42D76D646284A2C2039F584B7", "C541B2C7568E4817DFF95FAB"); +test_comp128v3("D0C3DDC48EC35DA67B369A9DE0CCFFCC", "8AA975041C6BD0DA7586DF38"); +test_comp128v3("599B31C8C3852C1C23DD19A7ACD55C11", "07D62DF63575B19B89DA071F"); +test_comp128v3("0F269A0EA3E8EFEF5C3C52D43D002225", "A34DB9124623C3271061BAA6"); +test_comp128v3("6AD44C3FDCF70DD91323CC62CFB02D4E", "D17293017E5E46B0F054C9F7"); +test_comp128v3("BFE112DD9EBF7E917C561F72750B8912", "8825188DA2B08941B8089631"); +test_comp128v3("B87A63D3DCAB1BAA9A185650D52F98BA", "781E9ED97865B4EAEB24F256"); +test_comp128v3("15F374A04F54435C4986C3CEADE49078", "3803413B6A6B7D342431E19B"); +test_comp128v3("9597CEB0C4C1DE570C408C732C4AAEFF", "FFFCC0E7778720989F5D207B"); +test_comp128v3("9EA551BB7EEAB54B2CB0B7D5A4B46984", "12670590F5569DF36255182B"); +test_comp128v3("E0A14DD9D10CA02AAB400CDD6D4CC8DF", "3B8D453873F43514FBFD6E61"); +test_comp128v3("6D7D889972B4415B2C4BB94147A8B0C3", "9AB50F45E012C1C13DC0C123"); +test_comp128v3("BD143BC0B969AB78A4C77AEF75DF577B", "46BA7B2AACE2BE1EAE041BAA"); +test_comp128v3("AFA3644F3A1B2E3C949409CD1A9FD9EE", "4784E15B8459FC8C31BC5A09"); +test_comp128v3("F68A2E4BC14FF93B6E8AED6603681E44", "08C81D5D7ACCE6421A3A83C8"); +test_comp128v3("8958835A3177994FD9E234A64E8DD402", "4AB52CC30160C00D0CB8149E"); +test_comp128v3("FC5A744BCC4C3A64731A56568F1824CD", "7691B4A850CC3F520A27CAED"); +test_comp128v3("A0BC0414793FD7CD91C4901ED37CEFEE", "50387A5169C4BEF0DFABA169"); +test_comp128v3("CECD899ECEEA771F48B27ADAE869A0FA", "AC47989CED4D7ECC858B3316"); +test_comp128v3("227AE04F7CD994EC2C5028C28EB91C60", "2CF79C8535D09CBE08C99BC4"); +test_comp128v3("E1EFAED76F88CB13D36D6FA9341E6F72", "D0939986C168DF7A71F8692B"); +test_comp128v3("0BB39C124E6009D6F192BE076CE0B912", "07ECF9210CD0BA6CB7D0A331"); +test_comp128v3("66B94A56E5ED1CA6D8D13B716C826EFD", "AB586CD5C53D9B44AC9CF827"); +test_comp128v3("74BA0547304F65181E09067ADE3944A8", "1BC03458AF15F80379307560"); +test_comp128v3("E5BDCE39E73DED6127D19DC0D2B07509", "2AA15E6321BC75606E161299"); +test_comp128v3("5FA9FB4F33B5931DFD0B608D3673CD8B", "2EF8B7A870C0B16E2A2E0771"); +test_comp128v3("591C4B52914FD9906794F9B437297932", "57D657E1F9EE91A75BAA281C"); +test_comp128v3("88A97F10BDFC5900CE69B02CD4927D5F", "49B141185B37C4BFE45770A6"); +test_comp128v3("B699392799957BDD5F7578F616FE052D", "E9FAD536A1195A43049FD4FB"); +test_comp128v3("CFDE65C7EEAB7B468E5EB53B59560E56", "EBDD36D040A23090DD2B7C8C"); +test_comp128v3("7DD1288548E9EE0F59C7AB71ED93F458", "570BEE5B5B720E1C71CC4188"); +test_comp128v3("F8A953657955164A202FD05D61ADDF18", "ADB41A9171F3B9EE64CDA252"); +test_comp128v3("8496897F262DB3DA5B1492BD910EE533", "A116D7BB8E39511500CBB3C9"); +test_comp128v3("3143866A1BFF58CB64A6AAD00A8B98A0", "88A823BB6C87C33D326F89E5"); +test_comp128v3("BF2FA6BFFB949B5EF935D4A70A1AD000", "059EB7C4093E12A3D67AF43B"); +test_comp128v3("22D61E9979690AE0F70A2097CF75617A", "4CEA847615CAAB386441D6D3"); +test_comp128v3("8BA2EEFC875953E279A0BBFF3E40D8EF", "EEB30C7A21BF5CFF8C016E76"); +test_comp128v3("0054786656570CAF86CDA3E2658CBC4A", "A8D77AF4C0D2968BF86F7EBC"); +test_comp128v3("CD789413163D67BEB5A8B4B2041AC8C3", "1E8EFC2C49634EF3D3A76663"); +test_comp128v3("D5C2E3294F8E3F7EDDB41D8038E8AE4F", "DFB267CA183A97071445EBCD"); +test_comp128v3("4547BAA42EC0A2AAA5E4A51A40F508C7", "D726295FDD1F03CC38C0D510"); +test_comp128v3("30675DADA51DD427E74150DAA3D08E47", "D98EC07B336FF2636664CEDA"); +test_comp128v3("E2049EFBF5A6B4DBFC1D827F7B6F4F79", "8A5E61E9C25DABB569047DBB"); +test_comp128v3("4DAEAD6EFAFC7B2D5B7599CB572D966A", "3C7F91652C4F50ECAE96E31C"); +test_comp128v3("421C75DAE44E53BF661EC64716C3315F", "B7C0ECAAD15C95E5A230B0BC"); +test_comp128v3("3DB086094870B8992C429827A41388CE", "932A80FADA930997A72E765B"); +test_comp128v3("1AED87BACBA9546CEFD7577149B343CF", "37496BAE7BAB169805B8A404"); +test_comp128v3("1D4C0838314C7B2E969CA01BE86628E8", "FDA25570F91EE000DF4A462D"); +test_comp128v3("E2CFEBC9DF035EED50D61010B97114DF", "507A0EE2F0E2377E9617D79A"); +test_comp128v3("B7C41BDBCB3DC0D686FB4F2A246F1EBE", "9A8B1932BE12002117B66C60"); +test_comp128v3("7F3C6DDFAAB07F2655835AD684C1EAF8", "84F746F4206E7B9D70DCE400"); +test_comp128v3("4BE5B436297DD7EFE78F43B50E9D83AE", "6A7351376DEBD0C0045287F5"); +test_comp128v3("810A6D4C4BCC9B442FCC2D17302ABD52", "BE8DFEFD0040A9171DFD1028"); +test_comp128v3("70BCCBE54FA56D6C760B2A30F12DFE3C", "D066D8EAE15177FB53E82557"); +test_comp128v3("685C7FF8585763703654DA98CA2ADD46", "E3AA8A4EEFF90AE719F7C9A1"); +test_comp128v3("70EF0027B67540B854A5678C2FFDC575", "58B0CE51BE4916D04D84D042"); +test_comp128v3("AA3ED4404B99F8C48BC481239F470693", "C7184C0EC24D703FE74FE294"); +test_comp128v3("9E5EF17C6BEAA0E6B65199ED365DDAB3", "9EE43A1ED3DBFD931A317464"); +test_comp128v3("2E9403A2E3000BA5C4E0D27C2EC64E4C", "813E15EBE8D0B17B5823E4BE"); +test_comp128v3("0173781A0EB21F505712948BE75B8458", "1E3CA90D5A9E8A6464C8E36D"); +test_comp128v3("3C088C10489234D6328F501EDBC98C00", "9D7C6B66C8630DC1F3F5312D"); +test_comp128v3("A6EE02A9C039B2D0FC48FD8A345F1892", "0A822A5118F13C0B8734AF15"); +test_comp128v3("BE8C4CBEAF4F1F1A9A3695894F9F2A99", "CE0FCD1BC48933F43895E002"); +test_comp128v3("128432DC7C3146F692965FB0D0A3308D", "770FB50A91CC47B0382B00E0"); +test_comp128v3("C88C48F3C4D3EC720F01BF9C6A65265C", "8F6DF2A2261D41952A2C382A"); +test_comp128v3("B971116F61EB90F27D34457F37AD39D9", "2D33847A8C32844FDD307D51"); +test_comp128v3("227551D0863419A949DD59F36CC83C5D", "829E83017A42C31FB195868D"); +test_comp128v3("03234F66F921406777377B0DF204A6DE", "C43127089A8D4F7250387C9D"); +test_comp128v3("D88DF421C6DE2284789ED5D54F45F03D", "3495E7918C60F295548DB637"); +test_comp128v3("C3FA2BC662694EEBEE4781F73CBB18C4", "F691B5C42013705DE1C5AE33"); +test_comp128v3("2DDA9DD56CF3E1FA5BC6B9118623A733", "469BDF4A8704D356A9A14B2F"); +test_comp128v3("C6A403AE0667AF03479DA7D96BC52127", "4996261F8E580F85B515239D"); +test_comp128v3("9B2F270E808E89FE9FBF7910D371A99A", "7904A08879D7368E8D28AB78"); +test_comp128v3("346CF33E3A1CB2ECCBB0293B22718FE0", "4A381CFA638346B0AF50A973"); +test_comp128v3("9DBDF0D1632047D2E033CD99585D4EF4", "8D52FC66020546B7F4C0AA7D"); +test_comp128v3("C0C92335F55CAFA75C8F32ECC8A8382E", "AAFF1231A4FF3657E2A2F050"); +test_comp128v3("F98D69B9C10B8180D8CCEB6F8512EFC8", "ECBAA8308702D56AB4B8042E"); +test_comp128v3("D18711BD38803D6528A0ACC4A2D13F44", "FE40B2A809ED1B288A23EFED"); +test_comp128v3("B45EB08D49D283FE8D5CD8736CFBB0BA", "2DC3543A5FC96E5D77C6A8C6"); +test_comp128v3("E5A19F4E5A95B41A6B467A4BB61FAF6D", "FDDE48FF9ABA9E1772A997F1"); +test_comp128v3("DEC185B0F7E9E915A245BCDFAA61B9EE", "B4E8B8317BB9B202C1216D39"); +test_comp128v3("7CF79DD706BB5431EA0505C5A9FD02DD", "B25B155F0F33758DA3E34314"); +test_comp128v3("D7FB84CABA49F0DCDA6CF9BD8DC7706E", "47350A6046056A36028A17EB"); +test_comp128v3("1552B8D34DA464D3306574792B48A3D9", "E941C62F7B37C94DA75700C7"); +test_comp128v3("BC7D021BCD887C891AD03F35E0A15BAF", "BE126713B56707925500E8FB"); +test_comp128v3("9134777CBFF4D521A3BFA344F7A0B437", "FDBDA66AC1D9ADAD8755DFE7"); +test_comp128v3("7C5F8F8A6BCE5887333A3CAD627717E6", "31F970EEF6CD0EB0A2CF4916"); +test_comp128v3("DF8CB343C509A1AD4F2EA7115FCCDB06", "693FC7E51AEE34C25011590B"); +test_comp128v3("A91315BD7A33231FD527B607D84FC46E", "1830B3DC10BDF6965B2C9228"); +test_comp128v3("AD2E8EE1869FF0D47F58E63BC83318BE", "5FC704AB4A24BB4EE7D4E116"); +test_comp128v3("6DEAB545F792A82A34768E828C52895D", "2C2573C04319579657238F81"); +test_comp128v3("002EE13DDD62BB00513824409FCC1E3C", "714637C12FBC3464601C51B9"); +test_comp128v3("1B7F26BDA08083628375BEF7D154A39D", "70863DE4A86FFCBEB170F92D"); +test_comp128v3("50260BE0CBC61779A3974F29E8F759AA", "0977C5842CB846C0F9B7C801"); +test_comp128v3("7CBE72435D57253A7F17B38DBDC91592", "FE586E3BB775847DD4D53896"); +test_comp128v3("AD828B0B2057DC6664ED791C5D07B0F0", "2DA0521A402DB87C23EAA90F"); +test_comp128v3("4D15F0C7057F79CA95112266A0EC2372", "C8E87F6A99CD77F1E6C52BDB"); +test_comp128v3("2603498B980BB24F3CE98CDCE7132DEC", "3D120C7D2A0626188F107796"); +test_comp128v3("7D3F0B786427ACCC65036320D6A87E0D", "90EB68AFCE491FF4FC1B935C"); +test_comp128v3("CEF85C041E9B497E104280592B4E20A5", "D7088EDD39E9441B42FA5425"); +test_comp128v3("28423C88529A282FEB63168012C7C9CA", "8541314D155ED02F6180F8C4"); +test_comp128v3("3D00F94DF50F19EB4FABAEABCFD6D2D0", "CBDC0CBBA58873A08254EBBB"); +test_comp128v3("2770701DD269B0577098A27093E4CBEA", "D433D01C27279F7871B8CFBE"); +test_comp128v3("A6196F4218B78A98B4744669E89272A4", "6D9355226838299D764B92FD"); +test_comp128v3("C2746977B2BDFC92BFBD7B108E31888F", "13349E628F46C2871403E8BD"); +test_comp128v3("EEC4692F450CC83E13E2B71D59B3A3A6", "8373F07A23AA5A770F09475E"); +test_comp128v3("C6016D020BC4C0FFB135065862E023E1", "C65DD883032F002242741716"); +test_comp128v3("7EC7083310F0065F3B96E8472A3B13D1", "1023CB8704E3F094C4254B40"); +test_comp128v3("CF0F35022BD195F113924F7FE3170685", "F91BEF9CEBB0E62E17D189F1"); +test_comp128v3("13B6AB833AA9181A0D0589C321E1D641", "B2393292651E5C5FAC10EEA2"); +test_comp128v3("78E0922DFDD9664537CA30DE31608273", "2BB017C76BEC45864CE8B5DA"); +test_comp128v3("92D6133ADB98116A1A8D5233C0D82798", "A638E5FB37FD99BDAE373B67"); +test_comp128v3("E63DD02079DC3B5E6EB39366B31C321B", "6F90B73C6489D8259C852982"); +test_comp128v3("18A08A6C828005707749B55A9B372486", "D5EB1D8073248AD37B8F239D"); +test_comp128v3("D27A6AFDA367D22533F4A41A08E728D6", "C0C1517C33F09E91EAC4779A"); +test_comp128v3("9DB473E798478DA64AF4ED702F4BC9F2", "3022D423A1C7629E82A5A24E"); +test_comp128v3("D9B45909B8FB54224223494EEA6E2E30", "032151B6AB3213BB7DDFD85D"); +test_comp128v3("8031C87FC0B6482EE41FDAE9452ECB50", "B6944CB7B74EAB9C478F1C52"); +test_comp128v3("D75BDA282D511A8FDA9D2A668C9C8DAF", "2C95EC0DD014289FFB35213F"); +test_comp128v3("CEF23CA86FACB24BC87C7A6F8E3B1C88", "18A4524E271A78D2DE5E7499"); +test_comp128v3("FF647B9CC719F05B6FC23549E39B1357", "0C865AB29E48C3C797B021D6"); +test_comp128v3("27F8DA6420EAD9D9577BB23FBC8505DF", "C3C5015754C0AFA87182B618"); +test_comp128v3("FF8354FB4DF2F4DCAD9810E6D6BE2701", "82C123077C870F46B60D29BD"); +test_comp128v3("036E56648887DBAA96FFA30E83D8AD82", "B8DCA4880CAD8DB0E51FD51C"); +test_comp128v3("86E00865EFAA86388A9005B52F005717", "9241332752219C7BB5A5D3CD"); +test_comp128v3("C9629A55E7894963AD2EEC2468FE7DBB", "E1136ACDFFD9517A555B0F27"); +test_comp128v3("E09B731993F83B3F5B3870A764951ABE", "9BF47B15A4384C738487A24B"); +test_comp128v3("2378E55D7C30DFC2977F4B1DC4F9F5E8", "48EB70F03A3CCB87CD82A158"); +test_comp128v3("6184EA341945118E0646CBA5D58384B4", "77675FA63C5BD4A41AC05381"); +test_comp128v3("3BFDF98A86FD921FB72992EC14F7BB45", "F538CEDE6978E01EAACBB45B"); +test_comp128v3("4456A5A28E7312B13115462951C92AFC", "72A818CF0DC16D1CF61AAB95"); +test_comp128v3("FDD3E2786D4F2CFD9480D66573BCFC9C", "2841008AEF343BB28D103C8D"); +test_comp128v3("6DD6D61B2289A9410CFD9714CCECD4C8", "F59AB2D1B59D311242978F3F"); +test_comp128v3("F167C9441706277D09DDCDD7F7E52A64", "126858DE4A4F5819448B7834"); +test_comp128v3("980FF11DA5B60F457D8AD89A85974578", "379707AA8D96C5D76FA14C03"); +test_comp128v3("70AAC833D245454AE89349A7446EE506", "5D79BA0B6FFD9631AF1CB4C7"); +test_comp128v3("927181350C74438DE3B9E8098A617E9B", "F763FBD8F7F514F54B18A736"); +test_comp128v3("CE2FC9FE401D5EEDE241E70202A918BB", "6D93D8C321F8333F0AEA5D7D"); +test_comp128v3("D0052E34EB985536E784846E9328E485", "4AE323A62EEF67882838712A"); +test_comp128v3("F0258B4E9282FCC224A3D6CD3B03CBD9", "91BE1348792DB54DB4CE8DED"); +test_comp128v3("D14CDA342B363D1D643CA37F69459559", "9B5263789B687DA01AD2408F"); +test_comp128v3("3D1B125A5450D9985C1FEB85BBC60A50", "36BEC97C697AA64958AC0150"); +test_comp128v3("89F95D62593A08D9C22E451C7FB8C5BA", "D57A8B45E9EAA8AB3A514325"); +test_comp128v3("5B1FD080E4A66D7057CFADEF6FED9146", "1BCDA51E01D6A6BD34B4447F"); +test_comp128v3("AFA91C8D534BF172752D8A5A1E5ABF18", "1171B4FE506D4A96CDDEC1A3"); +test_comp128v3("928BCB824199B826E519EADA61A4C251", "EB2F19E5D73C846D8C714D3E"); +test_comp128v3("F53692F3FB3982697190167751544A29", "7AD742D7360FA6C3D379B2B7"); +test_comp128v3("35E981691DFC03F3594134BBB7666048", "E80AAB73B59F47BF4EE3ACA2"); +test_comp128v3("E1C591DED46E4151A2758DEE40739154", "46FE19CD4CFFB3A2A20C2DED"); +test_comp128v3("FDDF6A5BB92A46D2E62A4D892D62DA3E", "91A0067C6F79DCDD23291EB7"); +test_comp128v3("2D57BDF8192CA18115B7D8475314A217", "9714FD544700667211D17C04"); +test_comp128v3("9B362EB227A8F692CBCAAE2A35126D4A", "6A9616C6A43C428F826A47F7"); +test_comp128v3("AFA7288D0D58EADB8C9786402A6E64D8", "997C242B49CB8E562D648454"); +test_comp128v3("DC52408D8CA5204B565EDC5A0FC1F62A", "EE9CB66B77A507D22BF44138"); +test_comp128v3("FCF61DE9035595B243208EC41671C65A", "2FF077600EA3FA5A0D767078"); +test_comp128v3("9A583D3FDD3982A15876623AA3030000", "19A047A8A76A867653D4911C"); +test_comp128v3("2DCFD0800243D3D0D713A0FE4B1C41C9", "C64FC0E63E24B5990B10208E"); +test_comp128v3("72213EB6319FADAE5FFE5DBD4FD3F03E", "8BB15C1A20487D9F61DCBB2A"); +test_comp128v3("2895AC8B667126F52244CEC0831D2C11", "179EC0708E768B387560A03E"); +test_comp128v3("7091C9ABA945FF32B3CD9818DE84AEE5", "2107211D6BC2DC36418D81EC"); +test_comp128v3("219370CB0713962417F979DED2342075", "BF57FBAF865A8BADEA9AABE7"); +test_comp128v3("F836740255B8ECB99BA7AEE2CE8C53BB", "A3A5D83BA6B66D2EC39B4035"); +test_comp128v3("E31DC4205A93AC332F96CA5E7BC9FCA7", "73483A4971376226A7D00F88"); +test_comp128v3("A5128C271F394B9FF303E9D169451808", "E189B4B86326531262853FCB"); +test_comp128v3("7F8AB312C58E36A6FF9B80D9FA784D4F", "77BEDAC4AF6EBD00DDCA8663"); +test_comp128v3("DD6FAC2574A4358D54BF123B5B2E4D47", "29D903403B472B3968A0D511"); +test_comp128v3("85CAE759E11DCD58B02C500C539C1FD2", "EA65F4805AED4E612A71FB27"); + + return 0; +} diff --git a/tests/comp128/comp128_test.ok b/tests/comp128/comp128_test.ok new file mode 100644 index 0000000..f9ba7ce --- /dev/null +++ b/tests/comp128/comp128_test.ok @@ -0,0 +1,2050 @@ +COMP128v2 support: 2 +COMP128v3 support: 3 +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK +0 OK diff --git a/tests/testsuite.at b/tests/testsuite.at index 0685832..59d660a 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -54,6 +54,12 @@ cat $abs_srcdir/auth/milenage_test.ok > expout AT_CHECK([$abs_top_builddir/tests/auth/milenage_test], [0], [expout], [ignore]) AT_CLEANUP +AT_SETUP([comp128]) +AT_KEYWORDS([comp128]) +cat $abs_srcdir/comp128/comp128_test.ok > expout +AT_CHECK([$abs_top_builddir/tests/comp128/comp128_test], [0], [expout]) +AT_CLEANUP + AT_SETUP([lapd]) AT_KEYWORDS([lapd]) cat $abs_srcdir/lapd/lapd_test.ok > expout -- 1.8.3.2 --------------050400080209080603040204-- From holger at freyther.de Mon Dec 2 11:04:49 2013 From: holger at freyther.de (Holger Hans Peter Freyther) Date: Mon, 2 Dec 2013 12:04:49 +0100 Subject: [PATCH] COMP128v23 improvements In-Reply-To: <529C6298.7090602@fairwaves.ru> References: <528A52AA.1060109@fairwaves.ru> <20131119111618.1475.qmail@stuge.se> <528B4AC0.7060906@fairwaves.ru> <20131122154426.GI18191@nataraja.gnumonks.org> <52933281.5000908@fairwaves.ru> <20131201133922.GM3133@nataraja.gnumonks.org> <529C6298.7090602@fairwaves.ru> Message-ID: <20131202110449.GF2877@xiaoyu.lan> On Mon, Dec 02, 2013 at 11:36:08AM +0100, ? wrote: > > With all due respect - those are shorter than the line they are replacing which is > already committed to the git. Yes, that is why this is a warning. It can be okay to overflow the line. From laforge at gnumonks.org Sat Dec 7 17:13:17 2013 From: laforge at gnumonks.org (Harald Welte) Date: Sat, 7 Dec 2013 18:13:17 +0100 Subject: [PATCH] COMP128v23 improvements In-Reply-To: <529C6298.7090602@fairwaves.ru> References: <528A52AA.1060109@fairwaves.ru> <20131119111618.1475.qmail@stuge.se> <528B4AC0.7060906@fairwaves.ru> <20131122154426.GI18191@nataraja.gnumonks.org> <52933281.5000908@fairwaves.ru> <20131201133922.GM3133@nataraja.gnumonks.org> <529C6298.7090602@fairwaves.ru> Message-ID: <20131207171317.GB8435@nataraja.gnumonks.org> Hi Max, On Mon, Dec 02, 2013 at 11:36:08AM +0100, ? wrote: > Hmm... it applies with > patch --dry-run -p1 < 0001-Refactor-COMP128v23-implementation-and-add-test-suit-v5.patch > just fine. What exactly is wrong and how do I fix it? > I've made a patch using "git format-patch" - is there some better way? my apologies. It was a broken setup on my side. 'git format-patch' (on top of master branch) is the best way, of course. > With all due respect - those are shorter than the line they are > replacing which is already committed to the git. Yes. The original code is not perfect, and sometimes we bend the rules accidentially or intentionally. Also, the code normally doesn't go through the kernels checkpatch.pl - we simply write it with the coding style in mind. Also, as holger has indicated, those are warnings and not errors. Thanks for taking the extra time to clean it up, even if you are personally not convinced it would be neccessary. Please continue to do so with any other patches that you may have pending. We do want to get things merged and avoid fragmentation. Regards, Harald -- - Harald Welte http://laforge.gnumonks.org/ ============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6) From laforge at gnumonks.org Sun Dec 1 13:35:01 2013 From: laforge at gnumonks.org (Harald Welte) Date: Sun, 1 Dec 2013 14:35:01 +0100 Subject: [PATCH] RFC - change GPRS cipher API In-Reply-To: <52961EF6.4060107@fairwaves.ru> References: <52961EF6.4060107@fairwaves.ru> Message-ID: <20131201133501.GL3133@nataraja.gnumonks.org> Hi Max, On Wed, Nov 27, 2013 at 05:33:58PM +0100, ? wrote: > Attached is a trivial patch which breaks existing GPRS cipher API of > libosmocore by switching from fixed 64-bit length Kc to > variable-length. I like it. > There are several justifications for that: Agreed. > - nobody uses this API anyway (except my other patches with GEA) Well, there is libosmo-crypt-a53, which impements also GEA3 and which registers a cipher. That would need to change, too. > That's why I think next libosmocore version should apply this patch > and change unused API before someone actually start using it and makes > transition more difficult. There may very well be existing code that you or I don't know about. We will have to change LIBVERSION to announce ABI breakage, but that's not a problem... Regards, Harald -- - Harald Welte http://laforge.gnumonks.org/ ============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6) From Max.Suraev at fairwaves.ru Mon Dec 2 10:08:07 2013 From: Max.Suraev at fairwaves.ru (=?UTF-8?B?4piO?=) Date: Mon, 02 Dec 2013 11:08:07 +0100 Subject: [PATCH] RFC - change GPRS cipher API In-Reply-To: <20131201133501.GL3133@nataraja.gnumonks.org> References: <52961EF6.4060107@fairwaves.ru> <20131201133501.GL3133@nataraja.gnumonks.org> Message-ID: <529C5C07.1060404@fairwaves.ru> 01.12.2013 14:35, Harald Welte ?????: > Well, there is libosmo-crypt-a53, which impements also GEA3 and which > registers a cipher. That would need to change, too. > Speaking of which - as far as I recall it's based on sample implementation with license incompatible with (L)GPL. Could we just discontinue it once Sylvain massage my a5/3,4 gea3,4 patches into libosmocore? -- best regards, Max, http://fairwaves.ru From laforge at gnumonks.org Sat Dec 7 17:21:22 2013 From: laforge at gnumonks.org (Harald Welte) Date: Sat, 7 Dec 2013 18:21:22 +0100 Subject: [PATCH] RFC - change GPRS cipher API In-Reply-To: <529C5C07.1060404@fairwaves.ru> References: <52961EF6.4060107@fairwaves.ru> <20131201133501.GL3133@nataraja.gnumonks.org> <529C5C07.1060404@fairwaves.ru> Message-ID: <20131207172122.GC8435@nataraja.gnumonks.org> Hi Max, On Mon, Dec 02, 2013 at 11:08:07AM +0100, ? wrote: > Speaking of which - as far as I recall it's based on sample > implementation with license incompatible with (L)GPL. Could we just > discontinue it once Sylvain massage my a5/3,4 gea3,4 patches into > libosmocore? yes, if those are a feature-complete replacement, there is no need for the old library. -- - Harald Welte http://laforge.gnumonks.org/ ============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6) From Max.Suraev at fairwaves.ru Thu Dec 26 17:34:35 2013 From: Max.Suraev at fairwaves.ru (=?UTF-8?B?4piO?=) Date: Thu, 26 Dec 2013 18:34:35 +0100 Subject: [PATCH] RFC - change GPRS cipher API In-Reply-To: <20131207172122.GC8435@nataraja.gnumonks.org> References: <52961EF6.4060107@fairwaves.ru> <20131201133501.GL3133@nataraja.gnumonks.org> <529C5C07.1060404@fairwaves.ru> <20131207172122.GC8435@nataraja.gnumonks.org> Message-ID: <52BC68AB.7060201@fairwaves.ru> 07.12.2013 18:21, Harald Welte ?????: > Hi Max, > > On Mon, Dec 02, 2013 at 11:08:07AM +0100, ? wrote: >> Speaking of which - as far as I recall it's based on sample >> implementation with license incompatible with (L)GPL. Could we just >> discontinue it once Sylvain massage my a5/3,4 gea3,4 patches into >> libosmocore? > yes, if those are a feature-complete replacement, there is no need for > the old library. > It is plus a5/4 and gea4. -- best regards, Max, http://fairwaves.ru From Max.Suraev at fairwaves.ru Fri Dec 27 22:32:13 2013 From: Max.Suraev at fairwaves.ru (=?UTF-8?B?4piO?=) Date: Fri, 27 Dec 2013 23:32:13 +0100 Subject: [PATCH] RFC - change GPRS cipher API In-Reply-To: <20131201133501.GL3133@nataraja.gnumonks.org> References: <52961EF6.4060107@fairwaves.ru> <20131201133501.GL3133@nataraja.gnumonks.org> Message-ID: <52BDFFED.6080602@fairwaves.ru> Attached is another version of this patch - I like this more because instead of additional parameter for Kc length there is now dedicated function. When I tried to use updated API I quickly realized that we rarely need to have key length explicitly: algorithm implementations know it already for obvious reasons. Hence I think function is better than parameter. Looking forward to the LIBVERSION update. We can also merge cipher implementation a5/3 a5/4, gea3, gea4 at the same time which would use this new API. This way we would have more features to warrant such update. cheers, Max. From max.suraev at fairwaves.ru Fri Dec 27 22:24:42 2013 From: max.suraev at fairwaves.ru (Max) Date: Fri, 27 Dec 2013 23:24:42 +0100 Subject: [PATCH] Update GPRS API to comply with ETSI TS 155.22 Message-ID: --- include/osmocom/crypt/gprs_cipher.h | 8 ++++++-- src/gsm/gprs_cipher_core.c | 20 +++++++++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/include/osmocom/crypt/gprs_cipher.h b/include/osmocom/crypt/gprs_cipher.h index 3051071..b6b8e93 100644 --- a/include/osmocom/crypt/gprs_cipher.h +++ b/include/osmocom/crypt/gprs_cipher.h @@ -10,6 +10,7 @@ enum gprs_ciph_algo { GPRS_ALGO_GEA1, GPRS_ALGO_GEA2, GPRS_ALGO_GEA3, + GPRS_ALGO_GEA4, _GPRS_ALGO_NUM }; @@ -28,7 +29,7 @@ struct gprs_cipher_impl { /* As specified in 04.64 Annex A. Uses Kc, IV and direction * to generate the 1523 bytes cipher stream that need to be * XORed wit the plaintext for encrypt / ciphertext for decrypt */ - int (*run)(uint8_t *out, uint16_t len, uint64_t kc, uint32_t iv, + int (*run)(uint8_t *out, uint16_t len, uint8_t *kc, uint32_t iv, enum gprs_cipher_direction direction); }; @@ -40,11 +41,14 @@ int gprs_cipher_load(const char *path); /* function to be called by core code */ int gprs_cipher_run(uint8_t *out, uint16_t len, enum gprs_ciph_algo algo, - uint64_t kc, uint32_t iv, enum gprs_cipher_direction dir); + uint8_t *kc, uint32_t iv, enum gprs_cipher_direction dir); /* Do we have an implementation for this cipher? */ int gprs_cipher_supported(enum gprs_ciph_algo algo); +/* Return key length for supported cipher, in bytes */ +unsigned gprs_cipher_key_length(enum gprs_ciph_algo algo); + /* GSM TS 04.64 / Section A.2.1 : Generation of 'input' */ uint32_t gprs_cipher_gen_input_ui(uint32_t iov_ui, uint8_t sapi, uint32_t lfn, uint32_t oc); diff --git a/src/gsm/gprs_cipher_core.c b/src/gsm/gprs_cipher_core.c index b9a22a1..450272b 100644 --- a/src/gsm/gprs_cipher_core.c +++ b/src/gsm/gprs_cipher_core.c @@ -26,8 +26,8 @@ #include #include #include - #include +#include static LLIST_HEAD(gprs_ciphers); @@ -53,12 +53,14 @@ int gprs_cipher_register(struct gprs_cipher_impl *ciph) int gprs_cipher_load(const char *path) { /* load all plugins available from path */ - return osmo_plugin_load_all(path); + if (path) + return osmo_plugin_load_all(path); + return 0; } /* function to be called by core code */ int gprs_cipher_run(uint8_t *out, uint16_t len, enum gprs_ciph_algo algo, - uint64_t kc, uint32_t iv, enum gprs_cipher_direction dir) + uint8_t *kc, uint32_t iv, enum gprs_cipher_direction dir) { if (algo >= ARRAY_SIZE(selected_ciphers)) return -ERANGE; @@ -73,6 +75,18 @@ int gprs_cipher_run(uint8_t *out, uint16_t len, enum gprs_ciph_algo algo, return selected_ciphers[algo]->run(out, len, kc, iv, dir); } +unsigned gprs_cipher_key_length(enum gprs_ciph_algo algo) +{ + switch (algo) { + case GPRS_ALGO_GEA0: return 0; + case GPRS_ALGO_GEA1: return 8; + case GPRS_ALGO_GEA2: return 8; + case GPRS_ALGO_GEA3: return 8; + case GPRS_ALGO_GEA4: return 16; + default: return 0; + } +} + int gprs_cipher_supported(enum gprs_ciph_algo algo) { if (algo >= ARRAY_SIZE(selected_ciphers)) -- 1.8.3.2 --------------060107070706010409090108-- From Max.Suraev at fairwaves.ru Fri Dec 27 22:44:48 2013 From: Max.Suraev at fairwaves.ru (=?UTF-8?B?4piO?=) Date: Fri, 27 Dec 2013 23:44:48 +0100 Subject: [PATCH] RFC - change GPRS cipher API In-Reply-To: <52BDFFED.6080602@fairwaves.ru> References: <52961EF6.4060107@fairwaves.ru> <20131201133501.GL3133@nataraja.gnumonks.org> <52BDFFED.6080602@fairwaves.ru> Message-ID: <52BE02E0.2040801@fairwaves.ru> Pardon, forgot to patch .map file. -- best regards, Max, http://fairwaves.ru From max.suraev at fairwaves.ru Fri Dec 27 22:43:22 2013 From: max.suraev at fairwaves.ru (Max) Date: Fri, 27 Dec 2013 23:43:22 +0100 Subject: [PATCH] Update GPRS API to comply with ETSI TS 155.22 Message-ID: --- include/osmocom/crypt/gprs_cipher.h | 8 ++++++-- src/gsm/gprs_cipher_core.c | 20 +++++++++++++++++--- src/gsm/libosmogsm.map | 1 + 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/include/osmocom/crypt/gprs_cipher.h b/include/osmocom/crypt/gprs_cipher.h index 3051071..b6b8e93 100644 --- a/include/osmocom/crypt/gprs_cipher.h +++ b/include/osmocom/crypt/gprs_cipher.h @@ -10,6 +10,7 @@ enum gprs_ciph_algo { GPRS_ALGO_GEA1, GPRS_ALGO_GEA2, GPRS_ALGO_GEA3, + GPRS_ALGO_GEA4, _GPRS_ALGO_NUM }; @@ -28,7 +29,7 @@ struct gprs_cipher_impl { /* As specified in 04.64 Annex A. Uses Kc, IV and direction * to generate the 1523 bytes cipher stream that need to be * XORed wit the plaintext for encrypt / ciphertext for decrypt */ - int (*run)(uint8_t *out, uint16_t len, uint64_t kc, uint32_t iv, + int (*run)(uint8_t *out, uint16_t len, uint8_t *kc, uint32_t iv, enum gprs_cipher_direction direction); }; @@ -40,11 +41,14 @@ int gprs_cipher_load(const char *path); /* function to be called by core code */ int gprs_cipher_run(uint8_t *out, uint16_t len, enum gprs_ciph_algo algo, - uint64_t kc, uint32_t iv, enum gprs_cipher_direction dir); + uint8_t *kc, uint32_t iv, enum gprs_cipher_direction dir); /* Do we have an implementation for this cipher? */ int gprs_cipher_supported(enum gprs_ciph_algo algo); +/* Return key length for supported cipher, in bytes */ +unsigned gprs_cipher_key_length(enum gprs_ciph_algo algo); + /* GSM TS 04.64 / Section A.2.1 : Generation of 'input' */ uint32_t gprs_cipher_gen_input_ui(uint32_t iov_ui, uint8_t sapi, uint32_t lfn, uint32_t oc); diff --git a/src/gsm/gprs_cipher_core.c b/src/gsm/gprs_cipher_core.c index b9a22a1..450272b 100644 --- a/src/gsm/gprs_cipher_core.c +++ b/src/gsm/gprs_cipher_core.c @@ -26,8 +26,8 @@ #include #include #include - #include +#include static LLIST_HEAD(gprs_ciphers); @@ -53,12 +53,14 @@ int gprs_cipher_register(struct gprs_cipher_impl *ciph) int gprs_cipher_load(const char *path) { /* load all plugins available from path */ - return osmo_plugin_load_all(path); + if (path) + return osmo_plugin_load_all(path); + return 0; } /* function to be called by core code */ int gprs_cipher_run(uint8_t *out, uint16_t len, enum gprs_ciph_algo algo, - uint64_t kc, uint32_t iv, enum gprs_cipher_direction dir) + uint8_t *kc, uint32_t iv, enum gprs_cipher_direction dir) { if (algo >= ARRAY_SIZE(selected_ciphers)) return -ERANGE; @@ -73,6 +75,18 @@ int gprs_cipher_run(uint8_t *out, uint16_t len, enum gprs_ciph_algo algo, return selected_ciphers[algo]->run(out, len, kc, iv, dir); } +unsigned gprs_cipher_key_length(enum gprs_ciph_algo algo) +{ + switch (algo) { + case GPRS_ALGO_GEA0: return 0; + case GPRS_ALGO_GEA1: return 8; + case GPRS_ALGO_GEA2: return 8; + case GPRS_ALGO_GEA3: return 8; + case GPRS_ALGO_GEA4: return 16; + default: return 0; + } +} + int gprs_cipher_supported(enum gprs_ciph_algo algo) { if (algo >= ARRAY_SIZE(selected_ciphers)) diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map index 9d15d66..65e4b99 100644 --- a/src/gsm/libosmogsm.map +++ b/src/gsm/libosmogsm.map @@ -31,6 +31,7 @@ gprs_cipher_load; gprs_cipher_register; gprs_cipher_run; gprs_cipher_supported; +gprs_cipher_key_length; gprs_tlli_type; gprs_tmsi2tlli; -- 1.8.3.2 --------------060801090307070208080106-- From laforge at gnumonks.org Sun Dec 1 13:31:21 2013 From: laforge at gnumonks.org (Harald Welte) Date: Sun, 1 Dec 2013 14:31:21 +0100 Subject: format-security In-Reply-To: <5297303B.5080802@fairwaves.ru> References: <5297303B.5080802@fairwaves.ru> Message-ID: <20131201133121.GK3133@nataraja.gnumonks.org> Hi Max, On Thu, Nov 28, 2013 at 12:59:55PM +0100, ? wrote: > Should we do this as well for libosmocore? openbsc? other > (sub)projects as well? Yes, I would consider that a useful change. But please also fix any of the current warnings in the same patchset, so we don't end up with code that doesn't compile anymore... -- - Harald Welte http://laforge.gnumonks.org/ ============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6) From holger at freyther.de Mon Dec 2 07:29:17 2013 From: holger at freyther.de (Holger Hans Peter Freyther) Date: Mon, 2 Dec 2013 08:29:17 +0100 Subject: format-security In-Reply-To: <20131201133121.GK3133@nataraja.gnumonks.org> References: <5297303B.5080802@fairwaves.ru> <20131201133121.GK3133@nataraja.gnumonks.org> Message-ID: <20131202072917.GB2877@xiaoyu.lan> On Sun, Dec 01, 2013 at 02:31:21PM +0100, Harald Welte wrote: > Hi Max, > > On Thu, Nov 28, 2013 at 12:59:55PM +0100, ? wrote: > > Should we do this as well for libosmocore? openbsc? other > > (sub)projects as well? > > Yes, I would consider that a useful change. But please also fix any of > the current warnings in the same patchset, so we don't end up with code > that doesn't compile anymore... Please have a look here[1] for some warnings and how to write tests for checking if the compiler supports them. In the long run I want the jenkins compile the code with -Werror. We introduce compiler warnings more quickly than the rest of us can fix them. holger [1] https://git.gnome.org/browse/folks/tree/configure.ac?id=18c629cf1d40a72c5f9f04a31dbdf4a265306cd9#n496 From noloader at gmail.com Mon Dec 2 08:13:46 2013 From: noloader at gmail.com (Jeffrey Walton) Date: Mon, 2 Dec 2013 03:13:46 -0500 Subject: format-security In-Reply-To: <20131202072917.GB2877@xiaoyu.lan> References: <5297303B.5080802@fairwaves.ru> <20131201133121.GK3133@nataraja.gnumonks.org> <20131202072917.GB2877@xiaoyu.lan> Message-ID: On Mon, Dec 2, 2013 at 2:29 AM, Holger Hans Peter Freyther wrote: > On Sun, Dec 01, 2013 at 02:31:21PM +0100, Harald Welte wrote: >> Hi Max, >> >> On Thu, Nov 28, 2013 at 12:59:55PM +0100, ? wrote: >> > Should we do this as well for libosmocore? openbsc? other >> > (sub)projects as well? >> >> Yes, I would consider that a useful change. But please also fix any of >> the current warnings in the same patchset, so we don't end up with code >> that doesn't compile anymore... > > Please have a look here[1] for some warnings and how to write tests for > checking if the compiler supports them. In the long run I want the jenkins > compile the code with -Werror. We introduce compiler warnings more quickly > than the rest of us can fix them. > > [1] https://git.gnome.org/browse/folks/tree/configure.ac?id=18c629cf1d40a72c5f9f04a31dbdf4a265306cd9#n496 The list is missing a number of useful flags. -Wconversion: its always a surprise when -1 > 1. -Wcast-align: save you from violating alignment and bricking your process on a processor that can't perform fixups -Wtrampolines: executable code on the stack -Woverloaded-virtual: relevant to C++ code Plus, you have the standard security options like PIC/PIE, stack protectors, nx stacks, nx heaps, fortify sources, relro (GOT hardening), now (PLT hardening), etc. I'm not sure how much is available to the project due to hardware and implementation restrictions, though. Jeff From wsmd78 at gmail.com Sun Dec 8 13:30:09 2013 From: wsmd78 at gmail.com (shrek wu) Date: Sun, 8 Dec 2013 21:30:09 +0800 Subject: how i can send voice from PC to osmocom-bb, and recv traffic voice from osmocom-bb to PC Message-ID: hello everybody I want to use LCR send voice from PC to osmocom-bb, and recv traffic voice from osmocom-bb to PC. So at osmocom-bb/src/host/layer23/src/mobile/gsm48_rr.c int gsm48_rr_init(struct osmocom_ms *ms) I change From baseband at infodn.rmi.de Mon Dec 9 13:34:32 2013 From: baseband at infodn.rmi.de (Walter Doerr) Date: Mon, 09 Dec 2013 14:34:32 +0100 Subject: Problem uploading .bin files on Raspberry Pi Message-ID: Hello, I am running osmocom-bb on a Ubuntu x86 machine with a Motorola C121. Everything works (as far as I can tell). Now I would like to move the host programs to a Raspberry Pi. So, I did a "make nofirmware" on the Rpi and copied the *.compalram.bin files from the x86 Ubuntu box over to the Rpi. When I use osmocon on the pi to upload the bin file to the phone, the transfer stops after the "finished" line and then, after a while, the phone sends a DOWNLOAD NAK, instead of the usual "DOWNLOAD ACK your code is running now". Has anybody seen this behaviour and knows how to fix it? I have tried two USB/serial adapters (both FTDI based) just in case its a hw problem, but the result is always the same: the upload to the phone works on the Ubuntu/x86 box but not on the pi. Any help is greatly appreciated. Kind Regards, -Walter From Max.Suraev at fairwaves.ru Mon Dec 16 15:18:42 2013 From: Max.Suraev at fairwaves.ru (=?UTF-8?B?4piO?=) Date: Mon, 16 Dec 2013 16:18:42 +0100 Subject: [PATCH] warnings cleanup Message-ID: <52AF19D2.9060603@fairwaves.ru> Hi all. I'd like to see osmocom-bb builds less cluttered by compiler warnings - attached is (far from complete) attempt to do so. It's tested which means it builds on my machine and resulting mobile app seems to run fine - no in-depth testing were made. However I'd like to get some feedback before going further: there seems to be some evil hackery happening around src/target/firmware/apps/loader/main.c: Why do we have external "unsigned char _start" which later used as msgb_put_u32(msg, &_start); Do we make some assumptions on the size of unsigned char? Is this documented somewhere by any chance? Also there are plenty of warnings regarding alignment: some things are marked as "__attribute__ ((packed))" and some are not which seems to make compiler unhappy. Is there rule of thumb to decide when we should care about alignment? -- best regards, Max, http://fairwaves.ru From max.suraev at fairwaves.ru Mon Dec 16 15:02:46 2013 From: max.suraev at fairwaves.ru (Max) Date: Mon, 16 Dec 2013 16:02:46 +0100 Subject: [PATCH] cleanup some compile warnings Message-ID: --- src/target/firmware/apps/loader/main.c | 15 +++++++-------- src/target/firmware/layer1/l23_api.c | 1 - src/target/firmware/layer1/prim_fbsb.c | 19 ++++++++----------- src/target/firmware/layer1/prim_freq.c | 4 ++-- src/target/firmware/layer1/prim_rach.c | 1 - src/target/firmware/layer1/prim_tx_nb.c | 1 - 6 files changed, 17 insertions(+), 24 deletions(-) diff --git a/src/target/firmware/apps/loader/main.c b/src/target/firmware/apps/loader/main.c index 39b8998..9b7a1b5 100644 --- a/src/target/firmware/apps/loader/main.c +++ b/src/target/firmware/apps/loader/main.c @@ -115,7 +115,7 @@ static void loader_send_init(uint8_t dlci) struct msgb *msg = sercomm_alloc_msgb(9); msgb_put_u8(msg, LOADER_INIT); msgb_put_u32(msg, 0); - msgb_put_u32(msg, &_start); + msgb_put_u32(msg, (uint32_t)&_start); sercomm_sendmsg(dlci, msg); } @@ -128,7 +128,7 @@ static const uint8_t phone_ack[] = { 0x1b, 0xf6, 0x02, 0x00, 0x41, 0x03, 0x42 }; int main(void) { /* Simulate a compal loader saying "ACK" */ - int i = 0; + unsigned i = 0; for (i = 0; i < sizeof(phone_ack); i++) { putchar_asm(phone_ack[i]); } @@ -171,13 +171,12 @@ int main(void) if (flash_init(&the_flash, 0)) { puts("Failed to initialize flash!\n"); } else { - printf("Found flash of %d bytes at 0x%x with %d regions\n", + printf("Found flash of %zu bytes at 0x%p with %zu regions\n", the_flash.f_size, the_flash.f_base, the_flash.f_nregions); - int i; for (i = 0; i < the_flash.f_nregions; i++) { - printf(" Region %d of %d pages with %d bytes each.\n", + printf(" Region %d of %zu pages with %zu bytes each.\n", i, the_flash.f_regions[i].fr_bnum, the_flash.f_regions[i].fr_bsize); @@ -213,7 +212,7 @@ static void cmd_handler(uint8_t dlci, struct msgb *msg) uint8_t command = msgb_pull_u8(msg); - int res; + int res = 0; flash_lock_t lock; @@ -317,11 +316,11 @@ static void cmd_handler(uint8_t dlci, struct msgb *msg) msgb_put_u8(reply, 1); // nchips // chip 1 - msgb_put_u32(reply, the_flash.f_base); + msgb_put_u32(reply, (uint32_t)the_flash.f_base); msgb_put_u32(reply, the_flash.f_size); msgb_put_u8(reply, the_flash.f_nregions); - int i; + unsigned i; for (i = 0; i < the_flash.f_nregions; i++) { msgb_put_u32(reply, the_flash.f_regions[i].fr_bnum); msgb_put_u32(reply, the_flash.f_regions[i].fr_bsize); diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c index ae39e63..0b2bc6c 100644 --- a/src/target/firmware/layer1/l23_api.c +++ b/src/target/firmware/layer1/l23_api.c @@ -316,7 +316,6 @@ static void l1ctl_rx_crypto_req(struct msgb *msg) static void l1ctl_rx_dm_rel_req(struct msgb *msg) { struct l1ctl_hdr *l1h = (struct l1ctl_hdr *) msg->data; - struct l1ctl_info_ul *ul = (struct l1ctl_info_ul *) l1h->data; printd("L1CTL_DM_REL_REQ\n"); l1a_mftask_set(0); diff --git a/src/target/firmware/layer1/prim_fbsb.c b/src/target/firmware/layer1/prim_fbsb.c index 19b0e0d..9eb56c6 100644 --- a/src/target/firmware/layer1/prim_fbsb.c +++ b/src/target/firmware/layer1/prim_fbsb.c @@ -25,7 +25,7 @@ #include #include #include - +#include #include #include #include @@ -88,14 +88,14 @@ static struct mon_state *last_fb = &fbs.mon; static void dump_mon_state(struct mon_state *fb) { #if 0 - printf("(%u:%u): TOA=%5u, Power=%4ddBm, Angle=%5dHz, " + printf("(%"PRIu32":%u): TOA=%5u, Power=%4ddBm, Angle=%5dHz, " "SNR=%04x(%d.%u) OFFSET=%u SYNCHRO=%u\n", fb->fnr_report, fb->attempt, fb->toa, agc_inp_dbm8_by_pm(fb->pm)/8, ANGLE_TO_FREQ(fb->angle), fb->snr, l1s_snr_int(fb->snr), l1s_snr_fract(fb->snr), tpu_get_offset(), tpu_get_synchro()); #else - printf("(%u:%u): TOA=%5u, Power=%4ddBm, Angle=%5dHz\n", + printf("(%"PRIu32":%u): TOA=%5u, Power=%4ddBm, Angle=%5dHz\n", fb->fnr_report, fb->attempt, fb->toa, agc_inp_dbm8_by_pm(fb->pm)/8, ANGLE_TO_FREQ(fb->angle)); #endif @@ -179,8 +179,6 @@ static int l1s_sbdet_resp(__unused uint8_t p1, uint8_t attempt, int qbits, fn_offset; struct l1_cell_info *cinfo = &l1s.serving_cell; int fnr_delta, bits_delta; - struct l1ctl_sync_new_ccch_resp *l1; - struct msgb *msg; putchart('s'); @@ -203,7 +201,7 @@ static int l1s_sbdet_resp(__unused uint8_t p1, uint8_t attempt, sb = dsp_api.db_r->a_sch[3] | dsp_api.db_r->a_sch[4] << 16; fbs.mon.bsic = l1s_decode_sb(&fbs.mon.time, sb); - printf("=> SB 0x%08x: BSIC=%u ", sb, fbs.mon.bsic); + printf("=> SB 0x%08"PRIx32": BSIC=%u ", sb, fbs.mon.bsic); l1s_time_dump(&fbs.mon.time); l1s.serving_cell.bsic = fbs.mon.bsic; @@ -482,9 +480,9 @@ static int l1s_fbdet_resp(__unused uint8_t p1, uint8_t attempt, int fn_offset = l1s.current_time.fn - last_fb->attempt + ntdma; int delay = fn_offset + 11 - l1s.current_time.fn - 1; - printf(" fn_offset=%d (fn=%u + attempt=%u + ntdma = %d)\n", + printf(" fn_offset=%d (fn=%"PRIu32" + attempt=%u + ntdma = %d)\n", fn_offset, l1s.current_time.fn, last_fb->attempt, ntdma); - printf(" delay=%d (fn_offset=%d + 11 - fn=%u - 1\n", delay, + printf(" delay=%d (fn_offset=%d + 11 - fn=%"PRIu32" - 1\n", delay, fn_offset, l1s.current_time.fn); printf(" scheduling next FB/SB detection task with delay %u\n", delay); if (abs(last_fb->freq_diff) < fbs.req.freq_err_thresh2 && @@ -524,11 +522,10 @@ static const struct tdma_sched_item fb_sched_set[] = { /* Asynchronous completion handler for FB detection */ static void l1a_fb_compl(__unused enum l1_compl c) { - struct l1_cell_info *cinfo = &l1s.serving_cell; - if (last_fb->attempt >= 13) { /* FB detection failed, signal this via L1CTL */ - return l1ctl_fbsb_resp(255); + l1ctl_fbsb_resp(255); + return; } /* FIME: use l1s.neigh_cell[fbs.cinfo_idx] */ diff --git a/src/target/firmware/layer1/prim_freq.c b/src/target/firmware/layer1/prim_freq.c index ca6dc9e..01f39d4 100644 --- a/src/target/firmware/layer1/prim_freq.c +++ b/src/target/firmware/layer1/prim_freq.c @@ -24,7 +24,7 @@ #include #include #include - +#include #include #include #include @@ -103,7 +103,7 @@ void l1a_freq_req(uint32_t fn_sched) fn_sched = l1s.current_time.fn + diff; if (fn_sched >= GSM_MAX_FN) fn_sched -= GSM_MAX_FN; - printf("Scheduling frequency change at fn=%u, currently fn=%u\n", + printf("Scheduling frequency change at fn=%"PRIu32", currently fn=%"PRIu32"\n", fn_sched, l1s.current_time.fn); local_firq_save(flags); diff --git a/src/target/firmware/layer1/prim_rach.c b/src/target/firmware/layer1/prim_rach.c index 08353ef..e6ea656 100644 --- a/src/target/firmware/layer1/prim_rach.c +++ b/src/target/firmware/layer1/prim_rach.c @@ -58,7 +58,6 @@ struct { /* p1: type of operation (0: one NB, 1: one RACH burst, 2: four NB */ static int l1s_tx_rach_cmd(__unused uint8_t p1, __unused uint8_t p2, __unused uint16_t p3) { - int i; uint16_t *info_ptr; uint16_t arfcn; uint8_t data[2]; diff --git a/src/target/firmware/layer1/prim_tx_nb.c b/src/target/firmware/layer1/prim_tx_nb.c index 71b32eb..86e8224 100644 --- a/src/target/firmware/layer1/prim_tx_nb.c +++ b/src/target/firmware/layer1/prim_tx_nb.c @@ -75,7 +75,6 @@ static int l1s_tx_cmd(uint8_t p1, uint8_t burst_id, uint16_t p3) { uint16_t arfcn; uint8_t tsc, tn; - uint8_t mf_task_id = p3 & 0xff; uint8_t mf_task_flags = p3 >> 8; putchart('T'); -- 1.8.3.2 --------------010704040601010603020704-- From lukash at backstep.net Mon Dec 16 15:56:59 2013 From: lukash at backstep.net (Lukas Kuzmiak) Date: Mon, 16 Dec 2013 16:56:59 +0100 Subject: patches for SIM in the firmware Message-ID: <64B37ED8-69BF-4C99-A141-6C346B8A5FEA@backstep.net> Hello guys, attached is a patch that fixes a few issues regarding SIM reader in Motorola phones (tested on C123), description: if there?s a lot of reading from SIM it happens a FIFO gets full, IMHO the right way is to read until the FIFO is empty (while-loop added) FETCH APDU has to be handled in the same way as GET RESPONSE (added) once REG_SIM_IT_SIM_NATR is triggered it should set the rxDoneFlag to 1 because otherwise there?s trouble recognising NO SIM state on L1 if SIM isn?t present in calypso_sim_powerup() and calypso_sim_reset() should set state to IDLE and put sim_len to 0 because if you do powerdown/powerup the state machine gets messed up unsetting CONFBYPASS should make the CONFSVCCLEV and CONFSRSTLEV irrelevant but it doesn?t, calypso_sim_powerdown() fixed based on calypso spec both calypso_sim_powerup() and calypso_sim_powerup() now return ATR as it should be when you poweron/reset the card some minor debug messages fixed to keep all the messages consistent Patch is apply-able on the current master. Cheers! Lukas -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: sim_fw_fixes.patch Type: application/octet-stream Size: 6133 bytes Desc: not available URL: -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 3562 bytes Desc: not available URL: From Max.Suraev at fairwaves.ru Mon Dec 16 16:11:58 2013 From: Max.Suraev at fairwaves.ru (=?UTF-8?B?4piO?=) Date: Mon, 16 Dec 2013 17:11:58 +0100 Subject: [PATCH] adjust msgb api Message-ID: <52AF264E.1020903@fairwaves.ru> Hi. While looking at osmocom-bb compilation warnings I've noticed that there are plenty of those cause by signed-unsigned comparison with msgb-related functions. Attached is a trivial patch which fixes that by changing int -> uint16_t. For the sake of completeness I've also changed other functions to explicitly use uint16_t - this is used for length fields in "struct msgb" anyway. Although technically it's API change I do not expect any sane code to break. If you still think it's potentially insecure, this could be applied during next api version bump alongside with gprs api change. -- best regards, Max, http://fairwaves.ru From max.suraev at fairwaves.ru Mon Dec 16 15:59:27 2013 From: max.suraev at fairwaves.ru (Max) Date: Mon, 16 Dec 2013 16:59:27 +0100 Subject: [PATCH] change length-related return values to unsigned Message-ID: --- include/osmocom/core/msgb.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/include/osmocom/core/msgb.h b/include/osmocom/core/msgb.h index fe2733b..9221fda 100644 --- a/include/osmocom/core/msgb.h +++ b/include/osmocom/core/msgb.h @@ -99,7 +99,7 @@ uint16_t msgb_length(const struct msgb *msg); * This function computes the number of bytes between the tail of the * message and the layer 1 header. */ -static inline unsigned int msgb_l1len(const struct msgb *msgb) +static inline uint16_t msgb_l1len(const struct msgb *msgb) { return msgb->tail - (uint8_t *)msgb_l1(msgb); } @@ -111,7 +111,7 @@ static inline unsigned int msgb_l1len(const struct msgb *msgb) * This function computes the number of bytes between the tail of the * message and the layer 2 header. */ -static inline unsigned int msgb_l2len(const struct msgb *msgb) +static inline uint16_t msgb_l2len(const struct msgb *msgb) { return msgb->tail - (uint8_t *)msgb_l2(msgb); } @@ -123,7 +123,7 @@ static inline unsigned int msgb_l2len(const struct msgb *msgb) * This function computes the number of bytes between the tail of the * message and the layer 3 header. */ -static inline unsigned int msgb_l3len(const struct msgb *msgb) +static inline uint16_t msgb_l3len(const struct msgb *msgb) { return msgb->tail - (uint8_t *)msgb_l3(msgb); } @@ -135,7 +135,7 @@ static inline unsigned int msgb_l3len(const struct msgb *msgb) * This function computes the length difference between the underlying * data buffer and the used section of the \a msgb. */ -static inline unsigned int msgb_headlen(const struct msgb *msgb) +static inline uint16_t msgb_headlen(const struct msgb *msgb) { return msgb->len - msgb->data_len; } @@ -147,7 +147,7 @@ static inline unsigned int msgb_headlen(const struct msgb *msgb) * This function computes the amount of octets left in the underlying * data buffer after the end of the message. */ -static inline int msgb_tailroom(const struct msgb *msgb) +static inline uint16_t msgb_tailroom(const struct msgb *msgb) { return (msgb->head + msgb->data_len) - msgb->tail; } @@ -159,7 +159,7 @@ static inline int msgb_tailroom(const struct msgb *msgb) * This function computes the amount of bytes left in the underlying * data buffer before the start of the actual message. */ -static inline int msgb_headroom(const struct msgb *msgb) +static inline uint16_t msgb_headroom(const struct msgb *msgb) { return (msgb->data - msgb->head); } -- 1.8.3.2 --------------060007020105010906090408-- From saxenaneetesh061 at rediffmail.com Wed Dec 18 13:43:21 2013 From: saxenaneetesh061 at rediffmail.com (neetesh saxena) Date: 18 Dec 2013 13:43:21 -0000 Subject: =?utf-8?B?TmVlZCBoZWxwOiByYWRpbyBpcyBub3Qgc3RhcnRlZA==?= Message-ID: <1387373729.S.4172.RU.sfs17, sfs17, 706, 930.25301.f4mail-235-148.rediffmail.com.old.1387374201.1242@webmail.rediffmail.com> Hi, I am a new user to osmocom. I am getting the following error: OsmocomBB# show ms 1 MS '1' is down, radio is not started IMEI: 000000000000000 IMEISV: 0000000000000000 IMEI generation: fixed automatic network selection state: A0 null cell selection state: C0 null radio ressource layer state: idle mobility management layer state: MM idle, PLMN search OsmocomBB# show subscriber 1 Mobile Subscriber of MS '1': IMSI: Status: U2_NOT_UPDATED IMSI detached LAI: invalid Access barred cells: no Access classes: can anyone tell me the solution what is the exact problem. I have also tried this one: "enable" -> "conf t" -> "ms 1" -> "no shutdown" and make "write" the config. Please help me. I am also using C118 phone in Germany. regards, Neetesh Get your own FREE website, FREE domain & FREE mobile app with Company email.  Know More > -------------- next part -------------- An HTML attachment was scrubbed... URL: From andreas at eversberg.eu Wed Dec 18 14:56:47 2013 From: andreas at eversberg.eu (Andreas Eversberg) Date: Wed, 18 Dec 2013 15:56:47 +0100 Subject: Need help: radio is not started In-Reply-To: <1387373729.S.4172.RU.sfs17, sfs17, 706, 930.25301.f4mail-235-148.rediffmail.com.old.1387374201.1242@webmail.rediffmail.com> References: <1387373729.S.4172.RU.sfs17, sfs17, 706, 930.25301.f4mail-235-148.rediffmail.com.old.1387374201.1242@webmail.rediffmail.com> Message-ID: <52B1B7AF.7000509@eversberg.eu> neetesh saxena wrote: > MS '1' is down, radio is not started hi neetesh, did you start your phone? what does "osmocon" (debugging ouput) show? does it load the layer1 binary when pressing the red button? best regards, andreas From saxenaneetesh061 at rediffmail.com Fri Dec 20 15:26:20 2013 From: saxenaneetesh061 at rediffmail.com (neetesh saxena) Date: 20 Dec 2013 15:26:20 -0000 Subject: =?utf-8?B?cHJvYmxlbSBpbiBsb2FkaW5nIGxheWVyMSBvbnRvIHBob25l?= Message-ID: <1387552849.S.4947.RU.sfs17, sfs17, 627, 111.2261.f4mail-235-235.rediffmail.com.old.1387553180.30883@webmail.rediffmail.com> Hi everyone, I am facing a new problem. When i am trying to load layer1 on to mobile phone, getting the following error:   saxena at cosec-ug-vm1-04:/opt/osmocom-bb/src/host/osmocon$ sudo -E ./osmocon -p /dev/ttyUSB0 -m c123xor ../..target/firmware/board/compal_e88/layer1.compalram.bin got 1 bytes from modem, data looks like: 2e  . got 1 bytes from modem, data looks like: c8  . got 1 bytes from modem, data looks like: 1b  . got 4 bytes from modem, data looks like: f6 02 00 41  ...A got 1 bytes from modem, data looks like: 01  . got 1 bytes from modem, data looks like: 40  @ Received PROMPT1 from phone, responding with CMD opening file: No such file or directory Next time when I am trying, it does not show anything and just hang like as: saxena at cosec-ug-vm1-04:/opt/osmocom-bb/src/host/osmocon$ sudo -E ./osmocon -p /dev/ttyUSB0 -m c123xor ../..target/firmware/board/compal_e88/layer1.compalram.bin (no display) Now, the phone is not able to switch on. I pressed red button many times but it doesn't work. can anyone tell me what is wrong in it? With regards Neetesh Saxena... Get your own FREE website, FREE domain & FREE mobile app with Company email.  Know More > -------------- next part -------------- An HTML attachment was scrubbed... URL: From andreas at eversberg.eu Fri Dec 20 20:42:43 2013 From: andreas at eversberg.eu (Andreas Eversberg) Date: Fri, 20 Dec 2013 21:42:43 +0100 Subject: problem in loading layer1 onto phone In-Reply-To: <1387552849.S.4947.RU.sfs17, sfs17, 627, 111.2261.f4mail-235-235.rediffmail.com.old.1387553180.30883@webmail.rediffmail.com> References: <1387552849.S.4947.RU.sfs17, sfs17, 627, 111.2261.f4mail-235-235.rediffmail.com.old.1387553180.30883@webmail.rediffmail.com> Message-ID: <52B4ABC3.8060209@eversberg.eu> neetesh saxena wrote: > saxena at cosec-ug-vm1-04:/opt/osmocom-bb/src/host/osmocon$ sudo -E > ./osmocon -p /dev/ttyUSB0 -m c123xor > ../..target/firmware/board/compal_e88/layer1.compalram.bin seems that you are missing a "/" before "target": sudo -E ./osmocon -p /dev/ttyUSB0 -m c123xor ../../target/firmware/board/compal_e88/layer1.compalram.bin -------------- next part -------------- An HTML attachment was scrubbed... URL: From mbrewers at web.de Sun Dec 22 09:23:34 2013 From: mbrewers at web.de (osmoman13) Date: Sun, 22 Dec 2013 01:23:34 -0800 (PST) Subject: osmocom error at compiing Message-ID: <1387704213958-4026267.post@n3.nabble.com> Hello, at the compiling/installiation of osmocombb I get follow error: e checking dependency style of gcc... gcc3 ../configure: line 3786: syntax error near unexpected token pic-only' ../configure: line 3786: LT_INIT(pic-only)' make: *** [shared/libosmocore/build-target/Makefile] error 2 I made follow: $ git clone git://git.osmocom.org/osmocom-bb.git $ cd osmocom-bb $ git pull -rebase $ cd src $ make after make there are this error! I have the Ubuntu-version 12.04 LTS in a VBox von oracel (64bit) anyone an Idea? best regards -- View this message in context: http://baseband-devel.722152.n3.nabble.com/osmocom-error-at-compiing-tp4026267.html Sent from the baseband-devel mailing list archive at Nabble.com. From saxenaneetesh061 at rediffmail.com Fri Dec 27 11:59:09 2013 From: saxenaneetesh061 at rediffmail.com (neetesh saxena) Date: 27 Dec 2013 11:59:09 -0000 Subject: =?utf-8?B?R1NNIGZyZXF1ZW5jeSBiYW5kIGZvciBFdXJvcGU=?= Message-ID: <1387552849.S.4947.RU.sfs17, sfs17, 627, 111.2261.f4mail-235-235.rediffmail.com.old.forward.1388145549.23353@webmail.rediffmail.com> Hi everyone, Can anyone please tell me what is the GSM frequency band for Europe (Germany)? Do I need to enable such band before working on OsmocomBB ? I have uploaded the mobile layer1 onto phone but I am still not able to read the SIM. The message I got is ms 1 is down and radio is not started. Can someone comment on this ? With regards Neetesh -------------- next part -------------- An HTML attachment was scrubbed... URL: From miguelrios35 at yahoo.com Sat Dec 28 12:56:11 2013 From: miguelrios35 at yahoo.com (Miguel Rios) Date: Sat, 28 Dec 2013 04:56:11 -0800 (PST) Subject: GSM frequency band for Europe In-Reply-To: <1387552849.S.4947.RU.sfs17, sfs17, 627, 111.2261.f4mail-235-235.rediffmail.com.old.forward.1388145549.23353@webmail.rediffmail.com> References: <1387552849.S.4947.RU.sfs17, sfs17, 627, 111.2261.f4mail-235-235.rediffmail.com.old.forward.1388145549.23353@webmail.rediffmail.com> Message-ID: <1388235371.59195.YahooMailNeo@web161604.mail.bf1.yahoo.com> Hi, A simple google search would give you this link where you can see what frequencies are used in which countries. http://www.worldtimezone.com/gsm.html On Friday, December 27, 2013 12:01 PM, neetesh saxena wrote: Hi everyone, Can anyone please tell me what is the GSM frequency band for Europe (Germany)? Do I need to enable such band before working on OsmocomBB ? I have uploaded the mobile layer1 onto phone but I am still not able to read the SIM. The message I got is ms 1 is down and radio is not started. Can someone comment on this ? With regards Neetesh Get your own FREE website, FREE domain & FREE mobile app with Company email. ? Know More > -------------- next part -------------- An HTML attachment was scrubbed... URL: From luca at srlabs.de Sat Dec 28 13:15:02 2013 From: luca at srlabs.de (Luca Melette) Date: Sat, 28 Dec 2013 14:15:02 +0100 Subject: GSM frequency band for Europe In-Reply-To: <3d2a7241-cd6a-41a4-aaa7-f997dc420bc6@lists.osmocom.org> References: <3d2a7241-cd6a-41a4-aaa7-f997dc420bc6@lists.osmocom.org> Message-ID: <20131228141502.012b5831@c7h5n3o6.sofago.net> Hi Neetesh, > Can anyone please tell me what is the GSM frequency band for Europe > (Germany)? GSM 900 and DCS 1800. > Do I need to enable such band before working on OsmocomBB ? In the mobile configuration (mobile.cfg) you should see these lines "p-gsm", "e-gsm", "dcs", in the support section without the "no" in front of them. > I have uploaded the mobile layer1 onto phone but I am still not able > to read the SIM. The message I got is ms 1 is down and radio is not > started. This seems to be the real problem. Your SIM is not responding to the firmware and the mobile cannot connect to any network. You can try to apply the patch created by Lukas. It was attached to the post "patches for SIM in the firmware" in list. Cheers, LM From galersekali at gmail.com Tue Dec 31 18:45:03 2013 From: galersekali at gmail.com (Anak Galer) Date: Wed, 1 Jan 2014 01:45:03 +0700 Subject: GSM frequency band for Europe In-Reply-To: <52bd6c0a.ea58c20a.30fc.ffff96ebSMTPIN_ADDED_BROKEN@mx.google.com> References: <52bd6c0a.ea58c20a.30fc.ffff96ebSMTPIN_ADDED_BROKEN@mx.google.com> Message-ID: On 12/27/13, neetesh saxena wrote: > Hi everyone, > > Can anyone please tell me what is the GSM frequency band for Europe > (Germany)? > > Do I need to enable such band before working on OsmocomBB ? > > I have uploaded the mobile layer1 onto phone but I am still not able to read > the SIM. > The message I got is ms 1 is down and radio is not started. > > Can someone comment on this ? > > > > With regards > > Neetesh > > your sim not connect to network . or maybe you can try use Blackberry engineer mode for other options http://ngerepotin.blogspot.com/2013/12/bbem-blackberry-engineer-mode.html Cheers! From mailman-bounces at lists.osmocom.org Sat Dec 28 08:00:02 2013 From: mailman-bounces at lists.osmocom.org (mailman-bounces at lists.osmocom.org) Date: Sat, 28 Dec 2013 09:00:02 +0100 Subject: baseband-devel unsubscribe notification Message-ID: rainbow at irh.it has been removed from baseband-devel. From Max.Suraev at fairwaves.ru Sat Dec 28 20:27:55 2013 From: Max.Suraev at fairwaves.ru (=?UTF-8?B?4piO?=) Date: Sat, 28 Dec 2013 21:27:55 +0100 Subject: [PATCH] Add generic LE/BE load/store uint type convertors and use them in msgb Message-ID: <52BF344B.1020001@fairwaves.ru> Attached is simple patch which adds little-endian & big-endian macro to move bytes to and from multibyte integer types like uint16_t, uint32_t etc. Some of this code is used right away in msgb.h but it will also be used in kasumi implementation later on. -- best regards, Max, http://fairwaves.ru From max.suraev at fairwaves.ru Sat Dec 28 20:23:03 2013 From: max.suraev at fairwaves.ru (Max) Date: Sat, 28 Dec 2013 21:23:03 +0100 Subject: [PATCH] Add generic LE/BE load/store uint type convertors and use them in msgb Message-ID: --- include/osmocom/core/bits.h | 62 ++++++++++++++++++++++++++++++++++++++++++++- include/osmocom/core/msgb.h | 23 +++++++++-------- tests/bits/bitrev_test.c | 19 ++++++++++++-- tests/bits/bitrev_test.ok | 1 + 4 files changed, 92 insertions(+), 13 deletions(-) diff --git a/include/osmocom/core/bits.h b/include/osmocom/core/bits.h index 4c68532..7954489 100644 --- a/include/osmocom/core/bits.h +++ b/include/osmocom/core/bits.h @@ -2,7 +2,7 @@ #define _OSMO_BITS_H #include - +#include /*! \defgroup bits soft, unpacked and packed bits * @{ */ @@ -15,6 +15,59 @@ typedef int8_t sbit_t; /*!< \brief soft bit (-127...127) */ typedef uint8_t ubit_t; /*!< \brief unpacked bit (0 or 1) */ typedef uint8_t pbit_t; /*!< \brief packed bis (8 bits in a byte) */ + +// load/store macro taken from GPL code by Oryx Embedded. + +//Load unaligned 16-bit integer (little-endian encoding) +#define LOAD16LE(p) ((uint16_t) (((uint8_t *)(p))[0] | (((uint8_t *)(p))[1] << 8))) + +//Load unaligned 16-bit integer (big-endian encoding) +#define LOAD16BE(p) ((uint16_t) ((((uint8_t *)(p))[0] << 8) | ((uint8_t *)(p))[1])) + +//Load unaligned 24-bit integer (little-endian encoding) +#define LOAD24LE(p) ((uint32_t) (((uint8_t *)(p))[0] | (((uint8_t *)(p))[1] << 8) | (((uint8_t *)(p))[2] << 16))) + +//Load unaligned 24-bit integer (big-endian encoding) +#define LOAD24BE(p) ((uint32_t) ((((uint8_t *)(p))[0] << 16) | (((uint8_t *)(p))[1] << 8) | ((uint8_t *)(p))[2])) + +//Load unaligned 32-bit integer (little-endian encoding) +#define LOAD32LE(p) ((uint32_t) (((uint8_t *)(p))[0] | (((uint8_t *)(p))[1] << 8) | (((uint8_t *)(p))[2] << 16) | (((uint8_t *)(p))[3] << 24))) + +//Load unaligned 32-bit integer (big-endian encoding) +#define LOAD32BE(p) ((uint32_t) ((((uint8_t *)(p))[0] << 24) | (((uint8_t *)(p))[1] << 16) | (((uint8_t *)(p))[2] << 8) | ((uint8_t *)(p))[3])) + +//Load unaligned 64-bit integer (little-endian encoding) +#define LOAD64LE(p) ((uint64_t) (((uint8_t *)(p))[0] | (((uint8_t *)(p))[1] << 8) | (((uint8_t *)(p))[2] << 16) | (((uint8_t *)(p))[3] << 24) | (((uint8_t *)(p))[4] << 32) | (((uint8_t *)(p))[5] << 40) | (((uint8_t *)(p))[6] << 48) | (((uint8_t *)(p))[7] << 56))) + +//Load unaligned 64-bit integer (big-endian encoding) +#define LOAD64BE(p) ((uint64_t) ((((uint8_t *)(p))[0] << 56) | (((uint8_t *)(p))[1] << 48) | (((uint8_t *)(p))[2] << 40) | ((uint8_t *)(p))[3] << 32) | (((uint8_t *)(p))[4] << 24) | (((uint8_t *)(p))[5] << 16) | (((uint8_t *)(p))[6] << 8) | (((uint8_t *)(p))[7])) + +//Store unaligned 16-bit integer (little-endian encoding) +#define STORE16LE(a, p) ((uint8_t *)(p))[0] = (a) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 8) & 0xFF + +//Store unaligned 32-bit integer (big-endian encoding) +#define STORE16BE(a, p) ((uint8_t *)(p))[0] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[1] = (a) & 0xFF + +//Store unaligned 24-bit integer (little-endian encoding) +#define STORE24LE(a, p) ((uint8_t *)(p))[0] = (a) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[2] = ((a) >> 16) & 0xFF + +//Store unaligned 24-bit integer (big-endian encoding) +#define STORE24BE(a, p) ((uint8_t *)(p))[0] = ((a) >> 16) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[2] = (a) & 0xFF + +//Store unaligned 32-bit integer (little-endian encoding) +#define STORE32LE(a, p) ((uint8_t *)(p))[0] = (a) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[2] = ((a) >> 16) & 0xFF, ((uint8_t *)(p))[3] = ((a) >> 24) & 0xFF + +//Store unaligned 32-bit integer (big-endian encoding) +#define STORE32BE(a, p) ((uint8_t *)(p))[0] = ((a) >> 24) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 16) & 0xFF, ((uint8_t *)(p))[2] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[3] = (a) & 0xFF + +//Store unaligned 64-bit integer (little-endian encoding) +#define STORE64LE(a, p) ((uint8_t *)(p))[0] = (a) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[2] = ((a) >> 16) & 0xFF, ((uint8_t *)(p))[3] = ((a) >> 24) & 0xFF, ((uint8_t *)(p))[4] = ((a) >> 32) & 0xFF, ((uint8_t *)(p))[5] = ((a) >> 40) & 0xFF, ((uint8_t *)(p))[6] = ((a) >> 48) & 0xFF, ((uint8_t *)(p))[7] = ((a) >> 56) & 0xFF + +//Store unaligned 64-bit integer (big-endian encoding) +#define STORE64BE(a, p) ((uint8_t *)(p))[0] = ((a) >> 56) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 48) & 0xFF, ((uint8_t *)(p))[2] = ((a) >> 40) & 0xFF, ((uint8_t *)(p))[3] = ((a) >> 32) & 0xFF, ((uint8_t *)(p))[4] = ((a) >> 24) & 0xFF, ((uint8_t *)(p))[5] = ((a) >> 16) & 0xFF, ((uint8_t *)(p))[6] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[7] = (a) & 0xFF + + + /* NOTE on the endianess of pbit_t: Bits in a pbit_t are ordered MSB first, i.e. 0x80 is the first bit. @@ -73,6 +126,13 @@ uint32_t osmo_revbytebits_8(uint8_t x); /* \brief reverse the bits of each byte in a given buffer */ void osmo_revbytebits_buf(uint8_t *buf, int len); +/* \brief reverse the order of the bytes in a given buffer */ +void osmo_revbytes_buf(uint8_t *buf, size_t len); + +/* \brief left circular shift */ +uint16_t rol16(uint16_t in, unsigned shift); + + /*! @} */ #endif /* _OSMO_BITS_H */ diff --git a/include/osmocom/core/msgb.h b/include/osmocom/core/msgb.h index fe2733b..d82c678 100644 --- a/include/osmocom/core/msgb.h +++ b/include/osmocom/core/msgb.h @@ -23,6 +23,7 @@ #include #include #include +#include /*! \defgroup msgb Message buffers * @{ @@ -204,8 +205,7 @@ static inline void msgb_put_u8(struct msgb *msgb, uint8_t word) static inline void msgb_put_u16(struct msgb *msgb, uint16_t word) { uint8_t *space = msgb_put(msgb, 2); - space[0] = word >> 8 & 0xFF; - space[1] = word & 0xFF; + STORE16BE(word, space); } /*! \brief append a uint32 value to the end of the message @@ -215,10 +215,7 @@ static inline void msgb_put_u16(struct msgb *msgb, uint16_t word) static inline void msgb_put_u32(struct msgb *msgb, uint32_t word) { uint8_t *space = msgb_put(msgb, 4); - space[0] = word >> 24 & 0xFF; - space[1] = word >> 16 & 0xFF; - space[2] = word >> 8 & 0xFF; - space[3] = word & 0xFF; + STORE32BE(word, space); } /*! \brief remove data from end of message @@ -235,6 +232,7 @@ static inline unsigned char *msgb_get(struct msgb *msgb, unsigned int len) msgb->len -= len; return tmp; } + /*! \brief remove uint8 from end of message * \param[in] msgb message buffer * \returns 8bit value taken from end of msgb @@ -244,6 +242,7 @@ static inline uint8_t msgb_get_u8(struct msgb *msgb) uint8_t *space = msgb_get(msgb, 1); return space[0]; } + /*! \brief remove uint16 from end of message * \param[in] msgb message buffer * \returns 16bit value taken from end of msgb @@ -251,8 +250,9 @@ static inline uint8_t msgb_get_u8(struct msgb *msgb) static inline uint16_t msgb_get_u16(struct msgb *msgb) { uint8_t *space = msgb_get(msgb, 2); - return space[0] << 8 | space[1]; + return LOAD16BE(space); } + /*! \brief remove uint32 from end of message * \param[in] msgb message buffer * \returns 32bit value taken from end of msgb @@ -260,7 +260,7 @@ static inline uint16_t msgb_get_u16(struct msgb *msgb) static inline uint32_t msgb_get_u32(struct msgb *msgb) { uint8_t *space = msgb_get(msgb, 4); - return space[0] << 24 | space[1] << 16 | space[2] << 8 | space[3]; + return LOAD32BE(space); } /*! \brief prepend (push) some data to start of message @@ -284,6 +284,7 @@ static inline unsigned char *msgb_push(struct msgb *msgb, unsigned int len) msgb->len += len; return msgb->data; } + /*! \brief remove (pull) a header from the front of the message buffer * \param[in] msgb message buffer * \param[in] len number of octets to be pulled @@ -308,6 +309,7 @@ static inline uint8_t msgb_pull_u8(struct msgb *msgb) uint8_t *space = msgb_pull(msgb, 1) - 1; return space[0]; } + /*! \brief remove uint16 from front of message * \param[in] msgb message buffer * \returns 16bit value taken from end of msgb @@ -315,8 +317,9 @@ static inline uint8_t msgb_pull_u8(struct msgb *msgb) static inline uint16_t msgb_pull_u16(struct msgb *msgb) { uint8_t *space = msgb_pull(msgb, 2) - 2; - return space[0] << 8 | space[1]; + return LOAD16BE(space); } + /*! \brief remove uint32 from front of message * \param[in] msgb message buffer * \returns 32bit value taken from end of msgb @@ -324,7 +327,7 @@ static inline uint16_t msgb_pull_u16(struct msgb *msgb) static inline uint32_t msgb_pull_u32(struct msgb *msgb) { uint8_t *space = msgb_pull(msgb, 4) - 4; - return space[0] << 24 | space[1] << 16 | space[2] << 8 | space[3]; + return LOAD32BE(space); } /*! \brief Increase headroom of empty msgb, reducing the tailroom diff --git a/tests/bits/bitrev_test.c b/tests/bits/bitrev_test.c index 5eca990..8c82dce 100644 --- a/tests/bits/bitrev_test.c +++ b/tests/bits/bitrev_test.c @@ -1,4 +1,4 @@ - +#include #include #include #include @@ -12,7 +12,7 @@ static const uint8_t exp_out[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x0 int main(int argc, char **argv) { - uint8_t out[ARRAY_SIZE(input)]; + uint8_t out[ARRAY_SIZE(input)], test[8]; unsigned int offs; for (offs = 0; offs < sizeof(out); offs++) { @@ -32,5 +32,20 @@ int main(int argc, char **argv) printf("\n"); } + printf("checking bit packer... "); + uint64_t _test = ((uint64_t)rand() << 32) + rand(); + STORE64BE(_test, test); + + char s[18], *p; + snprintf(s, 17, "%.16" PRIx64, _test); + p = osmo_hexdump_nospc(test, 8); + if (0 != memcmp(s, p, 8)) { + printf ("%s\t", s); + printf ("%s\t", p); + printf("FAILED!\n"); + return 2; + } + printf("OK\n"); + return 0; } diff --git a/tests/bits/bitrev_test.ok b/tests/bits/bitrev_test.ok index 47f402f..8a5fc6e 100644 --- a/tests/bits/bitrev_test.ok +++ b/tests/bits/bitrev_test.ok @@ -22,3 +22,4 @@ REVERSED: 02 01 INORDER: 80 REVERSED: 01 +checking bit packer... OK -- 1.8.3.2 --------------030100030101020908080209-- From Max.Suraev at fairwaves.ru Sat Dec 28 21:02:10 2013 From: Max.Suraev at fairwaves.ru (=?UTF-8?B?4piO?=) Date: Sat, 28 Dec 2013 22:02:10 +0100 Subject: [PATCH] Add generic LE/BE load/store uint type convertors and use them in msgb In-Reply-To: <52BF344B.1020001@fairwaves.ru> References: <52BF344B.1020001@fairwaves.ru> Message-ID: <52BF3C52.40207@fairwaves.ru> Improved version of 1st patch (rol16 implementation were missing) and actual kasumi implementation which uses macro from 1st patch. This is from the scratch GPL implementation, correctness verified using test vectors from 3GPP - see tests/kasumi/* -- best regards, Max, http://fairwaves.ru From max.suraev at fairwaves.ru Sat Dec 28 20:57:28 2013 From: max.suraev at fairwaves.ru (Max) Date: Sat, 28 Dec 2013 21:57:28 +0100 Subject: [PATCH 1/2] Add generic LE/BE load/store uint type convertors and use them in msgb Message-ID: --- include/osmocom/core/bits.h | 65 ++++++++++++++++++++++++++++++++++++++++++++- include/osmocom/core/msgb.h | 23 +++++++++------- tests/bits/bitrev_test.c | 19 +++++++++++-- tests/bits/bitrev_test.ok | 1 + 4 files changed, 95 insertions(+), 13 deletions(-) diff --git a/include/osmocom/core/bits.h b/include/osmocom/core/bits.h index 4c68532..ade6113 100644 --- a/include/osmocom/core/bits.h +++ b/include/osmocom/core/bits.h @@ -2,7 +2,7 @@ #define _OSMO_BITS_H #include - +#include /*! \defgroup bits soft, unpacked and packed bits * @{ */ @@ -15,6 +15,59 @@ typedef int8_t sbit_t; /*!< \brief soft bit (-127...127) */ typedef uint8_t ubit_t; /*!< \brief unpacked bit (0 or 1) */ typedef uint8_t pbit_t; /*!< \brief packed bis (8 bits in a byte) */ + +// load/store macro taken from GPL code by Oryx Embedded. + +//Load unaligned 16-bit integer (little-endian encoding) +#define LOAD16LE(p) ((uint16_t) (((uint8_t *)(p))[0] | (((uint8_t *)(p))[1] << 8))) + +//Load unaligned 16-bit integer (big-endian encoding) +#define LOAD16BE(p) ((uint16_t) ((((uint8_t *)(p))[0] << 8) | ((uint8_t *)(p))[1])) + +//Load unaligned 24-bit integer (little-endian encoding) +#define LOAD24LE(p) ((uint32_t) (((uint8_t *)(p))[0] | (((uint8_t *)(p))[1] << 8) | (((uint8_t *)(p))[2] << 16))) + +//Load unaligned 24-bit integer (big-endian encoding) +#define LOAD24BE(p) ((uint32_t) ((((uint8_t *)(p))[0] << 16) | (((uint8_t *)(p))[1] << 8) | ((uint8_t *)(p))[2])) + +//Load unaligned 32-bit integer (little-endian encoding) +#define LOAD32LE(p) ((uint32_t) (((uint8_t *)(p))[0] | (((uint8_t *)(p))[1] << 8) | (((uint8_t *)(p))[2] << 16) | (((uint8_t *)(p))[3] << 24))) + +//Load unaligned 32-bit integer (big-endian encoding) +#define LOAD32BE(p) ((uint32_t) ((((uint8_t *)(p))[0] << 24) | (((uint8_t *)(p))[1] << 16) | (((uint8_t *)(p))[2] << 8) | ((uint8_t *)(p))[3])) + +//Load unaligned 64-bit integer (little-endian encoding) +#define LOAD64LE(p) ((uint64_t) (((uint8_t *)(p))[0] | (((uint8_t *)(p))[1] << 8) | (((uint8_t *)(p))[2] << 16) | (((uint8_t *)(p))[3] << 24) | (((uint8_t *)(p))[4] << 32) | (((uint8_t *)(p))[5] << 40) | (((uint8_t *)(p))[6] << 48) | (((uint8_t *)(p))[7] << 56))) + +//Load unaligned 64-bit integer (big-endian encoding) +#define LOAD64BE(p) ((uint64_t) ((((uint8_t *)(p))[0] << 56) | (((uint8_t *)(p))[1] << 48) | (((uint8_t *)(p))[2] << 40) | ((uint8_t *)(p))[3] << 32) | (((uint8_t *)(p))[4] << 24) | (((uint8_t *)(p))[5] << 16) | (((uint8_t *)(p))[6] << 8) | (((uint8_t *)(p))[7])) + +//Store unaligned 16-bit integer (little-endian encoding) +#define STORE16LE(a, p) ((uint8_t *)(p))[0] = (a) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 8) & 0xFF + +//Store unaligned 32-bit integer (big-endian encoding) +#define STORE16BE(a, p) ((uint8_t *)(p))[0] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[1] = (a) & 0xFF + +//Store unaligned 24-bit integer (little-endian encoding) +#define STORE24LE(a, p) ((uint8_t *)(p))[0] = (a) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[2] = ((a) >> 16) & 0xFF + +//Store unaligned 24-bit integer (big-endian encoding) +#define STORE24BE(a, p) ((uint8_t *)(p))[0] = ((a) >> 16) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[2] = (a) & 0xFF + +//Store unaligned 32-bit integer (little-endian encoding) +#define STORE32LE(a, p) ((uint8_t *)(p))[0] = (a) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[2] = ((a) >> 16) & 0xFF, ((uint8_t *)(p))[3] = ((a) >> 24) & 0xFF + +//Store unaligned 32-bit integer (big-endian encoding) +#define STORE32BE(a, p) ((uint8_t *)(p))[0] = ((a) >> 24) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 16) & 0xFF, ((uint8_t *)(p))[2] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[3] = (a) & 0xFF + +//Store unaligned 64-bit integer (little-endian encoding) +#define STORE64LE(a, p) ((uint8_t *)(p))[0] = (a) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[2] = ((a) >> 16) & 0xFF, ((uint8_t *)(p))[3] = ((a) >> 24) & 0xFF, ((uint8_t *)(p))[4] = ((a) >> 32) & 0xFF, ((uint8_t *)(p))[5] = ((a) >> 40) & 0xFF, ((uint8_t *)(p))[6] = ((a) >> 48) & 0xFF, ((uint8_t *)(p))[7] = ((a) >> 56) & 0xFF + +//Store unaligned 64-bit integer (big-endian encoding) +#define STORE64BE(a, p) ((uint8_t *)(p))[0] = ((a) >> 56) & 0xFF, ((uint8_t *)(p))[1] = ((a) >> 48) & 0xFF, ((uint8_t *)(p))[2] = ((a) >> 40) & 0xFF, ((uint8_t *)(p))[3] = ((a) >> 32) & 0xFF, ((uint8_t *)(p))[4] = ((a) >> 24) & 0xFF, ((uint8_t *)(p))[5] = ((a) >> 16) & 0xFF, ((uint8_t *)(p))[6] = ((a) >> 8) & 0xFF, ((uint8_t *)(p))[7] = (a) & 0xFF + + + /* NOTE on the endianess of pbit_t: Bits in a pbit_t are ordered MSB first, i.e. 0x80 is the first bit. @@ -73,6 +126,16 @@ uint32_t osmo_revbytebits_8(uint8_t x); /* \brief reverse the bits of each byte in a given buffer */ void osmo_revbytebits_buf(uint8_t *buf, int len); +/* \brief reverse the order of the bytes in a given buffer */ +void osmo_revbytes_buf(uint8_t *buf, size_t len); + +/* \brief left circular shift */ +static inline uint16_t rol16(uint16_t in, unsigned shift) +{ + return (in << shift) | (in >> (16 - shift)); +} + + /*! @} */ #endif /* _OSMO_BITS_H */ diff --git a/include/osmocom/core/msgb.h b/include/osmocom/core/msgb.h index fe2733b..d82c678 100644 --- a/include/osmocom/core/msgb.h +++ b/include/osmocom/core/msgb.h @@ -23,6 +23,7 @@ #include #include #include +#include /*! \defgroup msgb Message buffers * @{ @@ -204,8 +205,7 @@ static inline void msgb_put_u8(struct msgb *msgb, uint8_t word) static inline void msgb_put_u16(struct msgb *msgb, uint16_t word) { uint8_t *space = msgb_put(msgb, 2); - space[0] = word >> 8 & 0xFF; - space[1] = word & 0xFF; + STORE16BE(word, space); } /*! \brief append a uint32 value to the end of the message @@ -215,10 +215,7 @@ static inline void msgb_put_u16(struct msgb *msgb, uint16_t word) static inline void msgb_put_u32(struct msgb *msgb, uint32_t word) { uint8_t *space = msgb_put(msgb, 4); - space[0] = word >> 24 & 0xFF; - space[1] = word >> 16 & 0xFF; - space[2] = word >> 8 & 0xFF; - space[3] = word & 0xFF; + STORE32BE(word, space); } /*! \brief remove data from end of message @@ -235,6 +232,7 @@ static inline unsigned char *msgb_get(struct msgb *msgb, unsigned int len) msgb->len -= len; return tmp; } + /*! \brief remove uint8 from end of message * \param[in] msgb message buffer * \returns 8bit value taken from end of msgb @@ -244,6 +242,7 @@ static inline uint8_t msgb_get_u8(struct msgb *msgb) uint8_t *space = msgb_get(msgb, 1); return space[0]; } + /*! \brief remove uint16 from end of message * \param[in] msgb message buffer * \returns 16bit value taken from end of msgb @@ -251,8 +250,9 @@ static inline uint8_t msgb_get_u8(struct msgb *msgb) static inline uint16_t msgb_get_u16(struct msgb *msgb) { uint8_t *space = msgb_get(msgb, 2); - return space[0] << 8 | space[1]; + return LOAD16BE(space); } + /*! \brief remove uint32 from end of message * \param[in] msgb message buffer * \returns 32bit value taken from end of msgb @@ -260,7 +260,7 @@ static inline uint16_t msgb_get_u16(struct msgb *msgb) static inline uint32_t msgb_get_u32(struct msgb *msgb) { uint8_t *space = msgb_get(msgb, 4); - return space[0] << 24 | space[1] << 16 | space[2] << 8 | space[3]; + return LOAD32BE(space); } /*! \brief prepend (push) some data to start of message @@ -284,6 +284,7 @@ static inline unsigned char *msgb_push(struct msgb *msgb, unsigned int len) msgb->len += len; return msgb->data; } + /*! \brief remove (pull) a header from the front of the message buffer * \param[in] msgb message buffer * \param[in] len number of octets to be pulled @@ -308,6 +309,7 @@ static inline uint8_t msgb_pull_u8(struct msgb *msgb) uint8_t *space = msgb_pull(msgb, 1) - 1; return space[0]; } + /*! \brief remove uint16 from front of message * \param[in] msgb message buffer * \returns 16bit value taken from end of msgb @@ -315,8 +317,9 @@ static inline uint8_t msgb_pull_u8(struct msgb *msgb) static inline uint16_t msgb_pull_u16(struct msgb *msgb) { uint8_t *space = msgb_pull(msgb, 2) - 2; - return space[0] << 8 | space[1]; + return LOAD16BE(space); } + /*! \brief remove uint32 from front of message * \param[in] msgb message buffer * \returns 32bit value taken from end of msgb @@ -324,7 +327,7 @@ static inline uint16_t msgb_pull_u16(struct msgb *msgb) static inline uint32_t msgb_pull_u32(struct msgb *msgb) { uint8_t *space = msgb_pull(msgb, 4) - 4; - return space[0] << 24 | space[1] << 16 | space[2] << 8 | space[3]; + return LOAD32BE(space); } /*! \brief Increase headroom of empty msgb, reducing the tailroom diff --git a/tests/bits/bitrev_test.c b/tests/bits/bitrev_test.c index 5eca990..8c82dce 100644 --- a/tests/bits/bitrev_test.c +++ b/tests/bits/bitrev_test.c @@ -1,4 +1,4 @@ - +#include #include #include #include @@ -12,7 +12,7 @@ static const uint8_t exp_out[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x0 int main(int argc, char **argv) { - uint8_t out[ARRAY_SIZE(input)]; + uint8_t out[ARRAY_SIZE(input)], test[8]; unsigned int offs; for (offs = 0; offs < sizeof(out); offs++) { @@ -32,5 +32,20 @@ int main(int argc, char **argv) printf("\n"); } + printf("checking bit packer... "); + uint64_t _test = ((uint64_t)rand() << 32) + rand(); + STORE64BE(_test, test); + + char s[18], *p; + snprintf(s, 17, "%.16" PRIx64, _test); + p = osmo_hexdump_nospc(test, 8); + if (0 != memcmp(s, p, 8)) { + printf ("%s\t", s); + printf ("%s\t", p); + printf("FAILED!\n"); + return 2; + } + printf("OK\n"); + return 0; } diff --git a/tests/bits/bitrev_test.ok b/tests/bits/bitrev_test.ok index 47f402f..8a5fc6e 100644 --- a/tests/bits/bitrev_test.ok +++ b/tests/bits/bitrev_test.ok @@ -22,3 +22,4 @@ REVERSED: 02 01 INORDER: 80 REVERSED: 01 +checking bit packer... OK -- 1.8.3.2 --------------020601090900020101060502 Content-Type: text/x-patch; name="0002-Add-Kasumi-cipher-implementation.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0002-Add-Kasumi-cipher-implementation.patch" From max.suraev at fairwaves.ru Sat Dec 28 20:58:05 2013 From: max.suraev at fairwaves.ru (Max) Date: Sat, 28 Dec 2013 21:58:05 +0100 Subject: [PATCH 2/2] Add Kasumi cipher implementation Message-ID: --- .gitignore | 1 + include/osmocom/gsm/kasumi.h | 36 ++++++++ src/gsm/Makefile.am | 2 +- src/gsm/kasumi.c | 193 +++++++++++++++++++++++++++++++++++++++++++ src/gsm/libosmogsm.map | 4 + tests/Makefile.am | 7 +- tests/kasumi/kasumi_test.c | 128 ++++++++++++++++++++++++++++ tests/kasumi/kasumi_test.ok | 10 +++ 8 files changed, 378 insertions(+), 3 deletions(-) create mode 100644 include/osmocom/gsm/kasumi.h create mode 100644 src/gsm/kasumi.c create mode 100644 tests/kasumi/kasumi_test.c create mode 100644 tests/kasumi/kasumi_test.ok diff --git a/.gitignore b/.gitignore index 71b27f2..e735dd0 100644 --- a/.gitignore +++ b/.gitignore @@ -55,6 +55,7 @@ tests/testsuite tests/testsuite.dir/ tests/testsuite.log +tests/kasumi/kasumi_test tests/sms/sms_test tests/timer/timer_test tests/msgfile/msgfile_test diff --git a/include/osmocom/gsm/kasumi.h b/include/osmocom/gsm/kasumi.h new file mode 100644 index 0000000..8479968 --- /dev/null +++ b/include/osmocom/gsm/kasumi.h @@ -0,0 +1,36 @@ +/* + * KASUMI header + * + * See kasumi.c for details + */ + +#ifndef __KASUMI_H__ +#define __KASUMI_H__ + +#include + +/* + * Single iteration of KASUMI cipher +*/ +uint64_t _kasumi(uint64_t P, uint16_t *KLi1, uint16_t *KLi2, uint16_t *KOi1, uint16_t *KOi2, uint16_t *KOi3, uint16_t *KIi1, uint16_t *KIi2, uint16_t *KIi3); + +/* + * Implementation of the KGCORE algorithm (used by A5/3, A5/4, GEA3, GEA4 and ECSD) + * + * CA : uint8_t + * cb : uint8_t + * cc : uint32_t + * cd : uint8_t + * ck : uint8_t [8] + * co : uint8_t [output, cl-dependent] + * cl : uint16_t + */ +void _kasumi_kgcore(uint8_t CA, uint8_t cb, uint32_t cc, uint8_t cd, const uint8_t *ck, uint8_t *co, uint16_t cl); + +/*! \brief Expand key into set of subkeys + * \param[in] key (128 bits) as array of bytes + * \param[out] arrays of round-specific subkeys - see TS 135 202 for details + */ +void _kasumi_key_expand(const uint8_t *key, uint16_t *KLi1, uint16_t *KLi2, uint16_t *KOi1, uint16_t *KOi2, uint16_t *KOi3, uint16_t *KIi1, uint16_t *KIi2, uint16_t *KIi3); + +#endif /* __KASUMI_H__ */ diff --git a/src/gsm/Makefile.am b/src/gsm/Makefile.am index 3162a7f..8ccbaec 100644 --- a/src/gsm/Makefile.am +++ b/src/gsm/Makefile.am @@ -15,7 +15,7 @@ libosmogsm_la_SOURCES = a5.c rxlev_stat.c tlv_parser.c comp128.c comp128v23.c \ gsm_utils.c rsl.c gsm48.c gsm48_ie.c gsm0808.c sysinfo.c \ gprs_cipher_core.c gsm0480.c abis_nm.c gsm0502.c \ gsm0411_utils.c gsm0411_smc.c gsm0411_smr.c \ - lapd_core.c lapdm.c \ + lapd_core.c lapdm.c kasumi.c \ auth_core.c auth_comp128v1.c auth_comp128v23.c \ auth_milenage.c milenage/aes-encblock.c \ milenage/aes-internal.c milenage/aes-internal-enc.c \ diff --git a/src/gsm/kasumi.c b/src/gsm/kasumi.c new file mode 100644 index 0000000..7019cb3 --- /dev/null +++ b/src/gsm/kasumi.c @@ -0,0 +1,193 @@ +/* Kasumi cipher and KGcore functions */ + +/* (C) 2013 by Max + * + * All Rights Reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#include +#include +#include + +static uint16_t +_kasumi_FI(uint16_t I, uint16_t skey) +{ + static uint16_t S7[] = { + 54, 50, 62, 56, 22, 34, 94, 96, 38, 6, 63, 93, 2, 18, 123, 33, + 55, 113, 39, 114, 21, 67, 65, 12, 47, 73, 46, 27, 25, 111, 124, 81, + 53, 9, 121, 79, 52, 60, 58, 48, 101, 127, 40, 120, 104, 70, 71, 43, + 20, 122, 72, 61, 23, 109, 13, 100, 77, 1, 16, 7, 82, 10, 105, 98, + 117, 116, 76, 11, 89, 106, 0,125,118, 99, 86, 69, 30, 57, 126, 87, + 112, 51, 17, 5, 95, 14, 90, 84, 91, 8, 35,103, 32, 97, 28, 66, + 102, 31, 26, 45, 75, 4, 85, 92, 37, 74, 80, 49, 68, 29, 115, 44, + 64, 107, 108, 24, 110, 83, 36, 78, 42, 19, 15, 41, 88, 119, 59, 3 + }; + static uint16_t S9[] = { + 167, 239, 161, 379, 391, 334, 9, 338, 38, 226, 48, 358, 452, 385, 90, 397, + 183, 253, 147, 331, 415, 340, 51, 362, 306, 500, 262, 82, 216, 159, 356, 177, + 175, 241, 489, 37, 206, 17, 0, 333, 44, 254, 378, 58, 143, 220, 81, 400, + 95, 3, 315, 245, 54, 235, 218, 405, 472, 264, 172, 494, 371, 290, 399, 76, + 165, 197, 395, 121, 257, 480, 423, 212, 240, 28, 462, 176, 406, 507, 288, 223, + 501, 407, 249, 265, 89, 186, 221, 428,164, 74, 440, 196, 458, 421, 350, 163, + 232, 158, 134, 354, 13, 250, 491, 142,191, 69, 193, 425, 152, 227, 366, 135, + 344, 300, 276, 242, 437, 320, 113, 278, 11, 243, 87, 317, 36, 93, 496, 27, + 487, 446, 482, 41, 68, 156, 457, 131, 326, 403, 339, 20, 39, 115, 442, 124, + 475, 384, 508, 53, 112, 170, 479, 151, 126, 169, 73, 268, 279, 321, 168, 364, + 363, 292, 46, 499, 393, 327, 324, 24, 456, 267, 157, 460, 488, 426, 309, 229, + 439, 506, 208, 271, 349, 401, 434, 236, 16, 209, 359, 52, 56, 120, 199, 277, + 465, 416, 252, 287, 246, 6, 83, 305, 420, 345, 153,502, 65, 61, 244, 282, + 173, 222, 418, 67, 386, 368, 261, 101, 476, 291, 195,430, 49, 79, 166, 330, + 280, 383, 373, 128, 382, 408, 155, 495, 367, 388, 274, 107, 459, 417, 62, 454, + 132, 225, 203, 316, 234, 14, 301, 91, 503, 286, 424, 211, 347, 307, 140, 374, + 35, 103, 125, 427, 19, 214, 453, 146, 498, 314, 444, 230, 256, 329, 198, 285, + 50, 116, 78, 410, 10, 205, 510, 171, 231, 45, 139, 467, 29, 86, 505, 32, + 72, 26, 342, 150, 313, 490, 431, 238, 411, 325, 149, 473, 40, 119, 174, 355, + 185, 233, 389, 71, 448, 273, 372, 55, 110, 178, 322, 12, 469, 392, 369, 190, + 1, 109, 375, 137, 181, 88, 75, 308, 260, 484, 98, 272, 370, 275, 412, 111, + 336, 318, 4, 504, 492, 259, 304, 77, 337, 435, 21, 357, 303, 332, 483, 18, + 47, 85, 25, 497, 474, 289, 100, 269, 296, 478, 270, 106, 31, 104, 433, 84, + 414, 486, 394, 96, 99, 154, 511, 148, 413, 361, 409, 255, 162, 215, 302, 201, + 266, 351, 343, 144, 441, 365, 108, 298, 251, 34, 182, 509, 138, 210, 335, 133, + 311, 352, 328, 141, 396, 346, 123, 319, 450, 281, 429, 228, 443, 481, 92, 404, + 485, 422, 248, 297, 23, 213, 130, 466, 22, 217, 283, 70, 294, 360, 419, 127, + 312, 377, 7, 468, 194, 2, 117, 295, 463, 258, 224, 447, 247, 187, 80, 398, + 284, 353, 105, 390, 299, 471, 470, 184, 57, 200, 348, 63, 204, 188, 33, 451, + 97, 30, 310, 219, 94, 160, 129, 493, 64, 179, 263, 102, 189, 207, 114, 402, + 438, 477, 387, 122, 192, 42, 381, 5, 145, 118, 180, 449, 293, 323, 136, 380, + 43, 66, 60, 455, 341, 445, 202, 432, 8, 237, 15, 376, 436, 464, 59, 461 + }; + uint16_t L, R; + + /* Split 16 bit input into two unequal halves: 9 and 7 bits, same for subkey */ + L = I >> 7; /* take 9 bits */ + R = I & 0x7F; /* take 7 bits */ + + L = S9[L] ^ R; + R = S7[R] ^ (L & 0x7F); + + L ^= (skey & 0x1FF); + R ^= (skey >> 9); + + L = S9[L] ^ R; + R = S7[R] ^ (L & 0x7F); + + return (R << 9) + L; +} + +static uint32_t +_kasumi_FO(uint32_t I, uint16_t *KOi1, uint16_t *KOi2, uint16_t *KOi3, uint16_t *KIi1, uint16_t *KIi2, uint16_t *KIi3, unsigned i) +{ + uint16_t L = I >> 16, R = I; /* Split 32 bit input into Left and Right parts */ + + L ^= KOi1[i]; + L = _kasumi_FI(L, KIi1[i]); + L ^= R; + + R ^= KOi2[i]; + R = _kasumi_FI(R, KIi2[i]); + R ^= L; + + L ^= KOi3[i]; + L = _kasumi_FI(L, KIi3[i]); + L ^= R; + + return (((uint32_t)R) << 16) + L; +} + +static uint32_t +_kasumi_FL(uint32_t I, uint16_t *KLi1, uint16_t *KLi2, unsigned i) +{ + uint16_t L = I >> 16, R = I, tmp; /* Split 32 bit input into Left and Right parts */ + + tmp = L & KLi1[i]; + R ^= rol16(tmp, 1); + + tmp = R | KLi2[i]; + L ^= rol16(tmp, 1); + + return (((uint32_t)L) << 16) + R; +} + +uint64_t +_kasumi(uint64_t P, uint16_t *KLi1, uint16_t *KLi2, uint16_t *KOi1, uint16_t *KOi2, uint16_t *KOi3, uint16_t *KIi1, uint16_t *KIi2, uint16_t *KIi3) +{ + uint32_t i, L = P >> 32, R = P; /* Split 64 bit input into Left and Right parts */ + + for (i = 0; i < 8; i++) + { + R ^= _kasumi_FO(_kasumi_FL(L, KLi1, KLi2, i), KOi1, KOi2, KOi3, KIi1, KIi2, KIi3, i); /* odd round */ + i++; + L ^= _kasumi_FL(_kasumi_FO(R, KOi1, KOi2, KOi3, KIi1, KIi2, KIi3, i), KLi1, KLi2, i); /* even round */ + } + return (((uint64_t)L) << 32) + R; /* Concatenate Left and Right 32 bits into 64 bit ciphertext */ +} + +/*! \brief Expand key into set of subkeys + * \param[in] key (128 bits) as array of bytes + * \param[out] arrays of round-specific subkeys - see TS 135 202 for details + */ +void +_kasumi_key_expand(const uint8_t *key, uint16_t *KLi1, uint16_t *KLi2, uint16_t *KOi1, uint16_t *KOi2, uint16_t *KOi3, uint16_t *KIi1, uint16_t *KIi2, uint16_t *KIi3) +{ + uint16_t i, C[] = { 0x0123, 0x4567, 0x89AB, 0xCDEF, 0xFEDC, 0xBA98, 0x7654, 0x3210 }; + + for (i = 0; i < 8; i++) /* Work with 16 bit subkeys and create prime subkeys */ + { + C[i] ^= LOAD16BE(key + i * 2); + } + /* C[] now stores K-prime[] */ + for (i = 0; i < 8; i++) /* Create round-specific subkeys */ + { + KLi1[i] = rol16(LOAD16BE(key + i * 2), 1); + KLi2[i] = C[(i + 2) & 0x7]; + + KOi1[i] = rol16(LOAD16BE(key + ((2 * (i + 1)) & 0xE)), 5); + KOi2[i] = rol16(LOAD16BE(key + ((2 * (i + 5)) & 0xE)), 8); + KOi3[i] = rol16(LOAD16BE(key + ((2 * (i + 6)) & 0xE)), 13); + + KIi1[i] = C[(i + 4) & 0x7]; + KIi2[i] = C[(i + 3) & 0x7]; + KIi3[i] = C[(i + 7) & 0x7]; + } +} + +void +_kasumi_kgcore(uint8_t CA, uint8_t cb, uint32_t cc, uint8_t cd, const uint8_t *ck, uint8_t *co, uint16_t cl) +{ + uint16_t KLi1[8], KLi2[8], KOi1[8], KOi2[8], KOi3[8], KIi1[8], KIi2[8], KIi3[8], i; + uint64_t A = ((uint64_t)cc) << 32, BLK = 0, _ca = ((uint64_t)CA << 16) ; + A |= _ca; + _ca = (uint64_t)((cb << 3) | (cd << 2)) << 24; + A |= _ca; + /* Register loading complete: see TR 55.919 8.2 and TS 55.216 3.2 */ + + uint8_t ck_km[16]; + for (i = 0; i < 16; i++) ck_km[i] = ck[i] ^ 0x55; /* Modified key established */ + + /* preliminary round with modified key */ + _kasumi_key_expand(ck_km, KLi1, KLi2, KOi1, KOi2, KOi3, KIi1, KIi2, KIi3); + A = _kasumi(A, KLi1, KLi2, KOi1, KOi2, KOi3, KIi1, KIi2, KIi3); + + /* Run Kasumi in OFB to obtain enough data for gamma. */ + _kasumi_key_expand(ck, KLi1, KLi2, KOi1, KOi2, KOi3, KIi1, KIi2, KIi3); + for (i = 0; i < cl / 64 + 1; i++) /* i is a block counter */ + { + BLK = _kasumi(A ^ i ^ BLK, KLi1, KLi2, KOi1, KOi2, KOi3, KIi1, KIi2, KIi3); + STORE64BE(BLK, co + (i * 8)); + } +} diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map index 9d15d66..3a4a643 100644 --- a/src/gsm/libosmogsm.map +++ b/src/gsm/libosmogsm.map @@ -196,6 +196,10 @@ osmo_a5; osmo_a5_1; osmo_a5_2; +_kasumi; +_kasumi_key_expand; +_kasumi_kgcore; + osmo_auth_alg_name; osmo_auth_alg_parse; osmo_auth_gen_vec; diff --git a/tests/Makefile.am b/tests/Makefile.am index 98ede3b..a6cc8d9 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -4,7 +4,7 @@ check_PROGRAMS = timer/timer_test sms/sms_test ussd/ussd_test \ smscb/smscb_test bits/bitrev_test a5/a5_test \ conv/conv_test auth/milenage_test lapd/lapd_test \ gsm0808/gsm0808_test gsm0408/gsm0408_test \ - gb/bssgp_fc_test gb/gprs_ns_test \ + gb/bssgp_fc_test gb/gprs_ns_test kasumi/kasumi_test \ logging/logging_test fr/fr_test \ loggingrb/loggingrb_test strrb/strrb_test \ vty/vty_test comp128/comp128_test @@ -16,6 +16,9 @@ endif a5_a5_test_SOURCES = a5/a5_test.c a5_a5_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la +kasumi_kasumi_test_SOURCES = kasumi/kasumi_test.c +kasumi_kasumi_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la + comp128_comp128_test_SOURCES = comp128/comp128_test.c comp128_comp128_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la @@ -99,7 +102,7 @@ EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE) \ lapd/lapd_test.ok gsm0408/gsm0408_test.ok \ gsm0808/gsm0808_test.ok gb/bssgp_fc_tests.err \ gb/bssgp_fc_tests.ok gb/bssgp_fc_tests.sh \ - gb/gprs_ns_test.ok \ + gb/gprs_ns_test.ok kasumi/kasumi_test.ok \ msgfile/msgfile_test.ok msgfile/msgconfig.cfg \ logging/logging_test.ok logging/logging_test.err \ fr/fr_test.ok loggingrb/logging_test.ok \ diff --git a/tests/kasumi/kasumi_test.c b/tests/kasumi/kasumi_test.c new file mode 100644 index 0000000..5504905 --- /dev/null +++ b/tests/kasumi/kasumi_test.c @@ -0,0 +1,128 @@ +#include +#include +#include +#include +#include + +#include +#include +#include // for testing internal A5/3 functions + + +inline int _compare_mem(uint8_t * x, uint8_t * y, size_t len) { + if (0 != memcmp(x, y, len)) { + printf ("X: %s\t", osmo_hexdump_nospc(x, len)); + printf ("Y: %s\n", osmo_hexdump_nospc(y, len)); + return 0; + } + return 1; +} + +inline static void test_expansion(uint8_t * test_key, uint16_t * _KLi1, uint16_t * _KLi2, uint16_t * _KOi1, uint16_t * _KOi2, uint16_t * _KOi3, uint16_t * _KIi1, uint16_t * _KIi2, uint16_t * _KIi3, uint16_t * _KLi1_r, uint16_t * _KLi2_r, uint16_t * _KOi1_r, uint16_t * _KOi2_r, uint16_t * _KOi3_r, uint16_t * _KIi1_r, uint16_t * _KIi2_r, uint16_t * _KIi3_r) +{ + _kasumi_key_expand(test_key, _KLi1, _KLi2, _KOi1, _KOi2, _KOi3, _KIi1, _KIi2, _KIi3); + int passed = 1; + passed = _compare_mem((uint8_t *)_KLi1, (uint8_t *)_KLi1_r, 16); + passed = _compare_mem((uint8_t *)_KLi2, (uint8_t *)_KLi2_r, 16); + passed = _compare_mem((uint8_t *)_KOi1, (uint8_t *)_KOi1_r, 16); + passed = _compare_mem((uint8_t *)_KOi2, (uint8_t *)_KOi2_r, 16); + passed = _compare_mem((uint8_t *)_KOi3, (uint8_t *)_KOi3_r, 16); + passed = _compare_mem((uint8_t *)_KIi1, (uint8_t *)_KIi1_r, 16); + passed = _compare_mem((uint8_t *)_KIi2, (uint8_t *)_KIi2_r, 16); + passed = _compare_mem((uint8_t *)_KIi3, (uint8_t *)_KIi3_r, 16); + if (passed) printf(" OK. "); else printf("FAILED!"); +} + +int main(int argc, char **argv) +{ + uint16_t _KLi1[8], _KLi2[8], _KOi1[8], _KOi2[8], _KOi3[8], _KIi1[8], _KIi2[8], _KIi3[8], _KLi1_r[8], _KLi2_r[8], _KOi1_r[8], _KOi2_r[8], _KOi3_r[8], _KIi1_r[8], _KIi2_r[8], _KIi3_r[8]; + + printf("testing KASUMI key expansion and encryption (ETSI TS 135 203):\n"); + printf("KASUMI Test Set 1..."); + +uint8_t _test_key1[] = {0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00, 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48}; +_KLi1_r[0] = 0x57AC; _KLi1_r[1] = 0x8B3E; _KLi1_r[2] = 0x058B; _KLi1_r[3] = 0x6601; _KLi1_r[4] = 0x2A59; _KLi1_r[5] = 0x9220; _KLi1_r[6] = 0x9102; _KLi1_r[7] = 0xFE91; +_KLi2_r[0] = 0x0B6E; _KLi2_r[1] = 0x7EEF; _KLi2_r[2] = 0x6BF0; _KLi2_r[3] = 0xF388; _KLi2_r[4] = 0x3ED5; _KLi2_r[5] = 0xCD58; _KLi2_r[6] = 0x2AF5; _KLi2_r[7] = 0x00F8; +_KOi1_r[0] = 0xB3E8; _KOi1_r[1] = 0x58B0; _KOi1_r[2] = 0x6016; _KOi1_r[3] = 0xA592; _KOi1_r[4] = 0x2209; _KOi1_r[5] = 0x1029; _KOi1_r[6] = 0xE91F; _KOi1_r[7] = 0x7AC5; +_KOi2_r[0] = 0x1049; _KOi2_r[1] = 0x8148; _KOi2_r[2] = 0x48FF; _KOi2_r[3] = 0xD62B; _KOi2_r[4] = 0x9F45; _KOi2_r[5] = 0xC582; _KOi2_r[6] = 0x00B3; _KOi2_r[7] = 0x2C95; +_KOi3_r[0] = 0x2910; _KOi3_r[1] = 0x1FE9; _KOi3_r[2] = 0xC57A; _KOi3_r[3] = 0xE8B3; _KOi3_r[4] = 0xB058; _KOi3_r[5] = 0x1660; _KOi3_r[6] = 0x92A5; _KOi3_r[7] = 0x0922; +_KIi1_r[0] = 0x6BF0; _KIi1_r[1] = 0xF388; _KIi1_r[2] = 0x3ED5; _KIi1_r[3] = 0xCD58; _KIi1_r[4] = 0x2AF5; _KIi1_r[5] = 0x00F8; _KIi1_r[6] = 0x0B6E; _KIi1_r[7] = 0x7EEF; +_KIi2_r[0] = 0x7EEF; _KIi2_r[1] = 0x6BF0; _KIi2_r[2] = 0xF388; _KIi2_r[3] = 0x3ED5; _KIi2_r[4] = 0xCD58; _KIi2_r[5] = 0x2AF5; _KIi2_r[6] = 0x00F8; _KIi2_r[7] = 0x0B6E; +_KIi3_r[0] = 0xCD58; _KIi3_r[1] = 0x2AF5; _KIi3_r[2] = 0x00F8; _KIi3_r[3] = 0x0B6E; _KIi3_r[4] = 0x7EEF; _KIi3_r[5] = 0x6BF0; _KIi3_r[6] = 0xF388; _KIi3_r[7] = 0x3ED5; +test_expansion(_test_key1, _KLi1, _KLi2, _KOi1, _KOi2, _KOi3, _KIi1, _KIi2, _KIi3, _KLi1_r, _KLi2_r, _KOi1_r, _KOi2_r, _KOi3_r, _KIi1_r, _KIi2_r, _KIi3_r); + +if (0xDF1F9B251C0BF45F == _kasumi(0xEA024714AD5C4D84, _KLi1, _KLi2, _KOi1, _KOi2, _KOi3, _KIi1, _KIi2, _KIi3)) + printf("OK."); else printf("FAILED!"); + +printf("\nKASUMI Test Set 2..."); + +uint8_t _test_key2[] = {0x8C, 0xE3, 0x3E, 0x2C, 0xC3, 0xC0, 0xB5, 0xFC, 0x1F, 0x3D, 0xE8, 0xA6, 0xDC, 0x66, 0xB1, 0xF3}; +_KLi1_r[0] = 0x19C7; _KLi1_r[1] = 0x7C58; _KLi1_r[2] = 0x8781; _KLi1_r[3] = 0x6BF9; _KLi1_r[4] = 0x3E7A; _KLi1_r[5] = 0xD14D; _KLi1_r[6] = 0xB8CD; _KLi1_r[7] = 0x63E7; +_KLi2_r[0] = 0x4A6B; _KLi2_r[1] = 0x7813; _KLi2_r[2] = 0xE1E1; _KLi2_r[3] = 0x523E; _KLi2_r[4] = 0xAA32; _KLi2_r[5] = 0x83E3; _KLi2_r[6] = 0x8DC0; _KLi2_r[7] = 0x7B4B; +_KOi1_r[0] = 0xC587; _KOi1_r[1] = 0x7818; _KOi1_r[2] = 0xBF96; _KOi1_r[3] = 0xE7A3; _KOi1_r[4] = 0x14DD; _KOi1_r[5] = 0x8CDB; _KOi1_r[6] = 0x3E76; _KOi1_r[7] = 0x9C71; +_KOi2_r[0] = 0xA6E8; _KOi2_r[1] = 0x66DC; _KOi2_r[2] = 0xF3B1; _KOi2_r[3] = 0xE38C; _KOi2_r[4] = 0x2C3E; _KOi2_r[5] = 0xC0C3; _KOi2_r[6] = 0xFCB5; _KOi2_r[7] = 0x3D1F; +_KOi3_r[0] = 0xDB8C; _KOi3_r[1] = 0x763E; _KOi3_r[2] = 0x719C; _KOi3_r[3] = 0x87C5; _KOi3_r[4] = 0x1878; _KOi3_r[5] = 0x96BF; _KOi3_r[6] = 0xA3E7; _KOi3_r[7] = 0xDD14; +_KIi1_r[0] = 0xE1E1; _KIi1_r[1] = 0x523E; _KIi1_r[2] = 0xAA32; _KIi1_r[3] = 0x83E3; _KIi1_r[4] = 0x8DC0; _KIi1_r[5] = 0x7B4B; _KIi1_r[6] = 0x4A6B; _KIi1_r[7] = 0x7813; +_KIi2_r[0] = 0x7813; _KIi2_r[1] = 0xE1E1; _KIi2_r[2] = 0x523E; _KIi2_r[3] = 0xAA32; _KIi2_r[4] = 0x83E3; _KIi2_r[5] = 0x8DC0; _KIi2_r[6] = 0x7B4B; _KIi2_r[7] = 0x4A6B; +_KIi3_r[0] = 0x83E3; _KIi3_r[1] = 0x8DC0; _KIi3_r[2] = 0x7B4B; _KIi3_r[3] = 0x4A6B; _KIi3_r[4] = 0x7813; _KIi3_r[5] = 0xE1E1; _KIi3_r[6] = 0x523E; _KIi3_r[7] = 0xAA32; +test_expansion(_test_key2, _KLi1, _KLi2, _KOi1, _KOi2, _KOi3, _KIi1, _KIi2, _KIi3, _KLi1_r, _KLi2_r, _KOi1_r, _KOi2_r, _KOi3_r, _KIi1_r, _KIi2_r, _KIi3_r); + +if (0xDE551988CEB2F9B7 == _kasumi(0xD3C5D592327FB11C, _KLi1, _KLi2, _KOi1, _KOi2, _KOi3, _KIi1, _KIi2, _KIi3)) + printf("OK."); else printf("FAILED!"); + +printf("\nKASUMI Test Set 3..."); + +uint8_t _test_key3[] = {0x40, 0x35, 0xC6, 0x68, 0x0A, 0xF8, 0xC6, 0xD1, 0xA8, 0xFF, 0x86, 0x67, 0xB1, 0x71, 0x40, 0x13}; +_KLi1_r[0] = 0x806A; _KLi1_r[1] = 0x8CD1; _KLi1_r[2] = 0x15F0; _KLi1_r[3] = 0x8DA3; _KLi1_r[4] = 0x51FF; _KLi1_r[5] = 0x0CCF; _KLi1_r[6] = 0x62E3; _KLi1_r[7] = 0x8026; +_KLi2_r[0] = 0x8353; _KLi2_r[1] = 0x0B3E; _KLi2_r[2] = 0x5623; _KLi2_r[3] = 0x3CFF; _KLi2_r[4] = 0xC725; _KLi2_r[5] = 0x7203; _KLi2_r[6] = 0x4116; _KLi2_r[7] = 0x830F; +_KOi1_r[0] = 0xCD18; _KOi1_r[1] = 0x5F01; _KOi1_r[2] = 0xDA38; _KOi1_r[3] = 0x1FF5; _KOi1_r[4] = 0xCCF0; _KOi1_r[5] = 0x2E36; _KOi1_r[6] = 0x0268; _KOi1_r[7] = 0x06A8; +_KOi2_r[0] = 0x6786; _KOi2_r[1] = 0x71B1; _KOi2_r[2] = 0x1340; _KOi2_r[3] = 0x3540; _KOi2_r[4] = 0x68C6; _KOi2_r[5] = 0xF80A; _KOi2_r[6] = 0xD1C6; _KOi2_r[7] = 0xFFA8; +_KOi3_r[0] = 0x362E; _KOi3_r[1] = 0x6802; _KOi3_r[2] = 0xA806; _KOi3_r[3] = 0x18CD; _KOi3_r[4] = 0x015F; _KOi3_r[5] = 0x38DA; _KOi3_r[6] = 0xF51F; _KOi3_r[7] = 0xF0CC; +_KIi1_r[0] = 0x5623; _KIi1_r[1] = 0x3CFF; _KIi1_r[2] = 0xC725; _KIi1_r[3] = 0x7203; _KIi1_r[4] = 0x4116; _KIi1_r[5] = 0x830F; _KIi1_r[6] = 0x8353; _KIi1_r[7] = 0x0B3E; +_KIi2_r[0] = 0x0B3E; _KIi2_r[1] = 0x5623; _KIi2_r[2] = 0x3CFF; _KIi2_r[3] = 0xC725; _KIi2_r[4] = 0x7203; _KIi2_r[5] = 0x4116; _KIi2_r[6] = 0x830F; _KIi2_r[7] = 0x8353; +_KIi3_r[0] = 0x7203; _KIi3_r[1] = 0x4116; _KIi3_r[2] = 0x830F; _KIi3_r[3] = 0x8353; _KIi3_r[4] = 0x0B3E; _KIi3_r[5] = 0x5623; _KIi3_r[6] = 0x3CFF; _KIi3_r[7] = 0xC725; +test_expansion(_test_key3, _KLi1, _KLi2, _KOi1, _KOi2, _KOi3, _KIi1, _KIi2, _KIi3, _KLi1_r, _KLi2_r, _KOi1_r, _KOi2_r, _KOi3_r, _KIi1_r, _KIi2_r, _KIi3_r); + +if (0x4592B0E78690F71B == _kasumi(0x62A540981BA6F9B7, _KLi1, _KLi2, _KOi1, _KOi2, _KOi3, _KIi1, _KIi2, _KIi3)) + printf("OK."); else printf("FAILED!"); + +printf("\nKASUMI Test Set 4..."); +uint8_t _test_key4[] = {0x3A, 0x3B, 0x39, 0xB5, 0xC3, 0xF2, 0x37, 0x6D, 0x69, 0xF7, 0xD5, 0x46, 0xE5, 0xF8, 0x5D, 0x43}; +uint64_t I4 = 0xCA49C1C75771AB0B, i; +_kasumi_key_expand(_test_key4, _KLi1, _KLi2, _KOi1, _KOi2, _KOi3, _KIi1, _KIi2, _KIi3); + +for (i = 0; i < 50; i++) + I4 = _kasumi(I4, _KLi1, _KLi2, _KOi1, _KOi2, _KOi3, _KIi1, _KIi2, _KIi3); + +if (0x738BAD4C4A690802 == I4) printf(" OK.\n"); else printf("FAILED!"); + + +uint8_t gamma[32]; + +uint8_t _Key1[] = {0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xBC, 0x00, 0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xBC, 0x00}, +_gamma1[] = {0x88, 0x9E, 0xEA, 0xAF, 0x9E, 0xD1, 0xBA, 0x1A, 0xBB, 0xD8, 0x43, 0x62, 0x32, 0xE4, 0x57, 0x28, 0xD0, 0x1A, 0xA8, 0x91, 0x33, 0xDA, 0x73, 0xC1, 0x1E, 0xAB, 0x68, 0xB7, 0xD8, 0x9B, 0xC8, 0x41}; +_kasumi_kgcore(0xF, 0, 0x0024F20F, 0, _Key1, gamma, 228); +printf ("KGCORE Test Set 1: %d\n", _compare_mem(gamma, _gamma1, 32)); + +uint8_t _Key2[] = {0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48, 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48}, +_gamma2[] = {0xFB, 0x4D, 0x5F, 0xBC, 0xEE, 0x13, 0xA3, 0x33, 0x89, 0x28, 0x56, 0x86, 0xE9, 0xA5, 0xC9, 0x42, 0x40, 0xDE, 0x38, 0x15, 0x01, 0x15, 0xF1, 0x5F, 0x8D, 0x9D, 0x98, 0xB9, 0x1A, 0x94, 0xB2, 0x96}; +_kasumi_kgcore(0xF, 0, 0x00061272, 0, _Key2, gamma, 228); +printf ("KGCORE Test Set 2: %d\n", _compare_mem(gamma, _gamma2, 32)); + +uint8_t _Key3[] = {0xEF, 0xA8, 0xB2, 0x22, 0x9E, 0x72, 0x0C, 0x2A, 0xEF, 0xA8, 0xB2, 0x22, 0x9E, 0x72, 0x0C, 0x2A}, +_gamma3[] = {0x0E, 0x40, 0x15, 0x75, 0x5A, 0x33, 0x64, 0x69, 0xC3, 0xDD, 0x86, 0x80, 0xE3, 0x03, 0x5B, 0xC4, 0x19, 0xA7, 0x8A, 0xD3, 0x86, 0x2C, 0x10, 0x90, 0xC6, 0x8A, 0x39, 0x1F, 0xE8, 0xA6, 0xAD, 0xEB}; +_kasumi_kgcore(0xF, 0, 0x0033FD3F, 0, _Key3, gamma, 228); +printf ("KGCORE Test Set 3: %d\n", _compare_mem(gamma, _gamma3, 32)); + +uint8_t _Key4[] = {0x5A, 0xCB, 0x1D, 0x64, 0x4C, 0x0D, 0x51, 0x20, 0x4E, 0xA5, 0x5A, 0xCB, 0x1D, 0x64, 0x4C, 0x0D}, +_gamma4[] = {0xE0, 0x95, 0x30, 0x6A, 0xD5, 0x08, 0x6E, 0x2E, 0xAC, 0x7F, 0x31, 0x07, 0xDE, 0x4F, 0xA2, 0x2D, 0xC1, 0xDF, 0xC9, 0x7D, 0x5B, 0xC5, 0x66, 0x1D, 0xD6, 0x09, 0x6F, 0x47, 0x6A, 0xED, 0xC6, 0x4B}; +_kasumi_kgcore(0xF, 0, 0x00156B26, 0, _Key4, gamma, 228); +printf ("KGCORE Test Set 4: %d\n", _compare_mem(gamma, _gamma4, 32)); + +uint8_t _Key5[] = {0xD3, 0xC5, 0xD5, 0x92, 0x32, 0x7F, 0xB1, 0x1C, 0x40, 0x35, 0xC6, 0x68, 0x0A, 0xF8, 0xC6, 0xD1}, +_gamma5[] = {0xDC, 0xE6, 0x43, 0x62, 0xAB, 0x5F, 0x89, 0xC1, 0x1E, 0xF0, 0xB3, 0x05, 0x16, 0x65, 0x70, 0xF4, 0x88, 0x9D, 0x55, 0x11, 0xE9, 0xE3, 0x57, 0x5D, 0x06, 0x2B, 0x5C, 0xED, 0x60, 0x39, 0x50, 0x6A}; +_kasumi_kgcore(0xF, 0, 0x000A59B4, 0, _Key5, gamma, 228); +printf ("KGCORE Test Set 5: %d\n", _compare_mem(gamma, _gamma5, 32)); + + return 0; +} diff --git a/tests/kasumi/kasumi_test.ok b/tests/kasumi/kasumi_test.ok new file mode 100644 index 0000000..2c2af4c --- /dev/null +++ b/tests/kasumi/kasumi_test.ok @@ -0,0 +1,10 @@ +testing KASUMI key expansion and encryption (ETSI TS 135 203): +KASUMI Test Set 1... OK. OK. +KASUMI Test Set 2... OK. OK. +KASUMI Test Set 3... OK. OK. +KASUMI Test Set 4... OK. +KGCORE Test Set 1: 1 +KGCORE Test Set 2: 1 +KGCORE Test Set 3: 1 +KGCORE Test Set 4: 1 +KGCORE Test Set 5: 1 -- 1.8.3.2 --------------020601090900020101060502-- From admin at lishixin.net Sun Dec 29 16:02:53 2013 From: admin at lishixin.net (warriornew) Date: Sun, 29 Dec 2013 08:02:53 -0800 (PST) Subject: what menu.e88loader.bin: No such file or directory Message-ID: <1388332973973-4026277.post@n3.nabble.com> what menu.e88loader.bin: No such file or directoryI refer to this article :http://bb.osmocom.org/trac/wiki/flashing_newBut why can't find menu.e88loader.bin??Does anyone know?thanks -- View this message in context: http://baseband-devel.722152.n3.nabble.com/what-menu-e88loader-bin-No-such-file-or-directory-tp4026277.html Sent from the baseband-devel mailing list archive at Nabble.com. -------------- next part -------------- An HTML attachment was scrubbed... URL: From milinkoi at gmail.com Mon Dec 30 21:47:47 2013 From: milinkoi at gmail.com (Milinko Isakovic) Date: Mon, 30 Dec 2013 22:47:47 +0100 Subject: OsmoComBB Message-ID: Hello, I need some help and maybe you are able to help me. Before I made any decision I need confirm some of things I do not fully understand. First of all I have some tests to preform and to make some report: I need to receive CCCH or part of CCCH like PCH and to store results. After this results are stored I need to analyze them with following: 1) How many paging requests came from 3 different operators at one LAC (I know each of them will have separate LAC) 2) Than I need to confirm how many paging requests came calling IMSI how much with TMSI 3) If it is possible to be done on one computer with 3 devices, or I will need more computers ? Question is because I need to do some reports. I do not need to monitor or intercept any encrypted data, to monitor SMS or any call.7 My question is is this possible ? And is there anybody who can help me to do this ? I found that some TEST equipment is capable to give me this results, but it is to expensive to me. Also if there is anybody in region of Balkan who was doing something like this please contact me. Project I need to finish is to monitor some number of days with Paging requests, and to make Prediction on what way and what speed GSM network will grow . Regards Milinko Isakovic -------------- next part -------------- An HTML attachment was scrubbed... URL: