1 // validat0.cpp - written and placed in the public domain by Wei Dai and Jeffrey Walton
2 // Routines in this source file are only tested in Debug builds
3
4 #include "pch.h"
5
6 #include "secblock.h"
7 #include "integer.h"
8 #include "zdeflate.h"
9 #include "filters.h"
10 #include "hex.h"
11 #include "asn.h"
12
13 #include <iostream>
14 #include <iomanip>
15
16 #include "validate.h"
17
18 // Aggressive stack checking with VS2005 SP1 and above.
19 #if (CRYPTOPP_MSC_VERSION >= 1410)
20 # pragma strict_gs_check (on)
21 #endif
22
23 #if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE
24 # pragma GCC diagnostic ignored "-Wdeprecated-declarations"
25 #endif
26
27 USING_NAMESPACE(CryptoPP)
28
29 #if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_IMPORTS)
30 struct ASN1_TestTuple
31 {
32 int disposition;
33 int identifier;
34 const char* name;
35 const char* data;
36 size_t len;
37 };
38
RunASN1TestSet(const ASN1_TestTuple asnTuples[],size_t count)39 bool RunASN1TestSet(const ASN1_TestTuple asnTuples[], size_t count)
40 {
41 bool pass=true, fail;
42
43 // Disposition
44 enum {REJECT=3, ACCEPT=4};
45
46 for(size_t i=0; i<count; i++)
47 {
48 const ASN1_TestTuple & thisTest = asnTuples[i];
49 ArraySource as1((const byte*)thisTest.data, thisTest.len, true);
50 ArraySource as2((const byte*)thisTest.data, thisTest.len, true);
51
52 SecByteBlock unused1;
53 std::string unused2;
54 unsigned int unused3;
55 word32 unused4;
56 word64 unused5;
57
58 // Reporting
59 std::string val;
60 HexEncoder encoder(new StringSink(val));
61 encoder.Put((const byte*)thisTest.data, thisTest.len);
62 encoder.MessageEnd();
63
64 try
65 {
66 int tag = thisTest.identifier;
67 switch (tag)
68 {
69 case BIT_STRING:
70 BERDecodeBitString(as1, unused1, unused3);
71 break;
72
73 case OCTET_STRING:
74 BERDecodeOctetString(as1, unused1);
75 break;
76
77 case INTEGER:
78 BERDecodeUnsigned(as1, unused4);
79 BERDecodeUnsigned<word64>(as2, unused5, byte(INTEGER), 0, W64LIT(0xffffffffffffffff));
80 break;
81
82 case UTF8_STRING: case PRINTABLE_STRING: case IA5_STRING:
83 BERDecodeTextString(as1, unused2, (byte)tag);
84 break;
85
86 default:
87 BERGeneralDecoder(as1, (byte)tag);
88 break;
89 }
90
91 fail = !(thisTest.disposition == ACCEPT);
92 }
93 catch(const Exception&)
94 {
95 fail = !(thisTest.disposition == REJECT);
96 }
97
98 std::cout << (fail ? "FAILED: " : "passed: ") << (thisTest.disposition == ACCEPT ? "accept " : "reject ");
99 std::cout << asnTuples[i].name << " " << val << "\n";
100 pass = !fail && pass;
101 }
102
103 return pass;
104 }
105
TestASN1Parse()106 bool TestASN1Parse()
107 {
108 std::cout << "\nTesting ASN.1 parser...\n\n";
109
110 bool pass = true;
111
112 // Disposition
113 enum {REJECT=3, ACCEPT=4};
114
115 // All the types Crypto++ recognizes.
116 // "C" is one content octet with value 0x43.
117 static const ASN1_TestTuple bitStrings[] =
118 {
119 // The first "\x00" content octet is the "initial octet" representing unused bits. In the
120 // primitive encoding form, there may be zero, one or more contents after the initial octet.
121 {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x01" "\x00", 3}, // definite length, short form, initial octet, zero subsequent octets
122 {REJECT, BIT_STRING, "BIT_STRING", "\x03\x01" "\x08", 3}, // definite length, short form, initial octet, zero subsequent octets
123 {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x02" "\x00" "C", 4}, // definite length, short form, expected subsequent octets
124 {REJECT, BIT_STRING, "BIT_STRING", "\x03\x02" "\x08" "C", 4}, // too many unused bits
125 {REJECT, BIT_STRING, "BIT_STRING", "\x03\x7F" "\x00" "C", 4}, // runt or underrun
126 {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x81\x01" "\x00", 4}, // definite length, long form, initial octet, zero subsequent octets
127 {REJECT, BIT_STRING, "BIT_STRING", "\x03\x81\x01" "\x08", 4}, // definite length, long form, initial octet, zero subsequent octets
128 {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x81\x02" "\x00" "C", 5}, // definite length, long form
129 {REJECT, BIT_STRING, "BIT_STRING", "\x03\x81\x02" "\x08" "C", 5}, // too many unused bits
130 {REJECT, BIT_STRING, "BIT_STRING", "\x03\x81\xff" "\x00" "C", 5}, // runt or underrun
131 {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x82\x00\x02" "\x00" "C", 6}, // definite length, long form
132 {REJECT, BIT_STRING, "BIT_STRING", "\x03\x82\x00\x02" "\x08" "C", 6}, // too many unused bits
133 {REJECT, BIT_STRING, "BIT_STRING", "\x03\x82\xff\xff" "\x00" "C", 6}, // runt or underrun
134 {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x83\x00\x00\x02" "\x00" "C", 7}, // definite length, long form
135 {REJECT, BIT_STRING, "BIT_STRING", "\x03\x83\x00\x00\x02" "\x08" "C", 7}, // too many unused bits
136 {REJECT, BIT_STRING, "BIT_STRING", "\x03\x83\xff\xff\xff" "\x00" "C", 7}, // runt or underrun
137 {ACCEPT, BIT_STRING, "BIT_STRING", "\x03\x84\x00\x00\x00\x02" "\x00" "C", 8}, // definite length, long form
138 {REJECT, BIT_STRING, "BIT_STRING", "\x03\x84\x00\x00\x00\x02" "\x08" "C", 8}, // too many unused bits
139 {REJECT, BIT_STRING, "BIT_STRING", "\x03\x84\xff\xff\xff\xff" "\x00" "C", 8}, // <== Issue 346; requires large allocation
140 };
141
142 pass = RunASN1TestSet(bitStrings, COUNTOF(bitStrings)) && pass;
143
144 static const ASN1_TestTuple octetStrings[] =
145 {
146 // In the primitive encoding form, there may be zero, one or more contents.
147 {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x00", 2}, // definite length, short form, zero content octets
148 {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x01" "C", 3}, // definite length, short form, expected content octets
149 {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x02" "C", 3}, // runt or underrun
150 {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x7F" "C", 3}, // runt or underrun
151 {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x81\x00", 3}, // definite length, long form, zero content octets
152 {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x81\x01" "C", 4}, // definite length, long form, expected content octets
153 {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x81\x02" "C", 4}, // runt or underrun
154 {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x81\xff" "C", 4}, // runt or underrun
155 {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x82\x00\x00", 4}, // definite length, long form, zero content octets
156 {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x82\x00\x01" "C", 5}, // definite length, long form, expected content octets
157 {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x82\x00\x02" "C", 5}, // runt or underrun
158 {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x82\xff\xff" "C", 5}, // runt or underrun
159 {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x83\x00\x00\x00", 5}, // definite length, long form, zero content octets
160 {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x83\x00\x00\x01" "C", 6}, // definite length, long form, expected content octets
161 {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x83\x00\x00\x02" "C", 6}, // runt or underrun
162 {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x83\xff\xff\xff" "C", 6}, // runt or underrun
163 {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x84\x00\x00\x00\x00", 6}, // definite length, long form, zero content octets
164 {ACCEPT, OCTET_STRING, "OCTET_STRING", "\x04\x84\x00\x00\x00\x01" "C", 7}, // definite length, long form, expected content octets
165 {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x84\x00\x00\x00\x02" "C", 7}, // runt or underrun
166 {REJECT, OCTET_STRING, "OCTET_STRING", "\x04\x84\xff\xff\xff\xff" "C", 7}, // <== Issue 346; requires large allocation
167 };
168
169 pass = RunASN1TestSet(octetStrings, COUNTOF(octetStrings)) && pass;
170
171 static const ASN1_TestTuple utf8Strings[] =
172 {
173 {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x00", 2}, // definite length, short form, zero content octets
174 {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x01" "C", 3}, // definite length, short form, expected content octets
175 {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x02" "C", 3}, // runt or underrun
176 {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x7F" "C", 3}, // runt or underrun
177 {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x81\x00", 3}, // definite length, long form, zero content octets
178 {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x81\x01" "C", 4}, // definite length, long form, expected content octets
179 {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x81\x02" "C", 4}, // runt or underrun
180 {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x81\xff" "C", 4}, // runt or underrun
181 {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x82\x00\x00", 4}, // definite length, long form, zero content octets
182 {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x82\x00\x01" "C", 5}, // definite length, long form, expected content octets
183 {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x82\x00\x02" "C", 5}, // runt or underrun
184 {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x82\xff\xff" "C", 5}, // runt or underrun
185 {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x83\x00\x00\x00", 5}, // definite length, long form, zero content octets
186 {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x83\x00\x00\x01" "C", 6}, // definite length, long form, expected content octets
187 {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x83\x00\x00\x02" "C", 6}, // runt or underrun
188 {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x83\xff\xff\xff" "C", 6}, // runt or underrun
189 {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x84\x00\x00\x00\x00", 6}, // definite length, long form, zero content octets
190 {ACCEPT, UTF8_STRING, "UTF8_STRING", "\x0c\x84\x00\x00\x00\x01" "C", 7}, // definite length, long form, expected content octets
191 {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x84\x00\x00\x00\x02" "C", 7}, // runt or underrun
192 {REJECT, UTF8_STRING, "UTF8_STRING", "\x0c\x84\xff\xff\xff\xff" "C", 7}, // <== Issue 346; requires large allocation
193 };
194
195 pass = RunASN1TestSet(utf8Strings, COUNTOF(utf8Strings)) && pass;
196
197 static const ASN1_TestTuple printableStrings[] =
198 {
199 {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x00", 2}, // definite length, short form, zero content octets
200 {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x01" "C", 3}, // definite length, short form, expected content octets
201 {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x02" "C", 3}, // runt or underrun
202 {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x7F" "C", 3}, // runt or underrun
203 {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x81\x00", 3}, // definite length, long form, zero content octets
204 {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x81\x01" "C", 4}, // definite length, long form, expected content octets
205 {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x81\x02" "C", 4}, // runt or underrun
206 {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x81\xff" "C", 4}, // runt or underrun
207 {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x82\x00\x00", 4}, // definite length, long form, zero content octets
208 {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x82\x00\x01" "C", 5}, // definite length, long form, expected content octets
209 {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x82\x00\x02" "C", 5}, // runt or underrun
210 {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x82\xff\xff" "C", 5}, // runt or underrun
211 {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x83\x00\x00\x00", 5}, // definite length, long form, zero content octets
212 {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x83\x00\x00\x01" "C", 6}, // definite length, long form, expected content octets
213 {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x83\x00\x00\x02" "C", 6}, // runt or underrun
214 {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x83\xff\xff\xff" "C", 6}, // runt or underrun
215 {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x84\x00\x00\x00\x00", 6}, // definite length, long form, zero content octets
216 {ACCEPT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x84\x00\x00\x00\x01" "C", 7}, // definite length, long form, expected content octets
217 {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x84\x00\x00\x00\x02" "C", 7}, // runt or underrun
218 {REJECT, PRINTABLE_STRING, "PRINTABLE_STRING", "\x13\x84\xff\xff\xff\xff" "C", 7}, // <== Issue 346; requires large allocation
219 };
220
221 pass = RunASN1TestSet(printableStrings, COUNTOF(printableStrings)) && pass;
222
223 static const ASN1_TestTuple ia5Strings[] =
224 {
225 {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x00", 2}, // definite length, short form, zero content octets
226 {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x01" "C", 3}, // definite length, short form, expected content octets
227 {REJECT, IA5_STRING, "IA5_STRING", "\x16\x02" "C", 3}, // runt or underrun
228 {REJECT, IA5_STRING, "IA5_STRING", "\x16\x7F" "C", 3}, // runt or underrun
229 {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x81\x00", 3}, // definite length, long form, zero content octets
230 {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x81\x01" "C", 4}, // definite length, long form, expected content octets
231 {REJECT, IA5_STRING, "IA5_STRING", "\x16\x81\x02" "C", 4}, // runt or underrun
232 {REJECT, IA5_STRING, "IA5_STRING", "\x16\x81\xff" "C", 4}, // runt or underrun
233 {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x82\x00\x00", 4}, // definite length, long form, zero content octets
234 {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x82\x00\x01" "C", 5}, // definite length, long form, expected content octets
235 {REJECT, IA5_STRING, "IA5_STRING", "\x16\x82\x00\x02" "C", 5}, // runt or underrun
236 {REJECT, IA5_STRING, "IA5_STRING", "\x16\x82\xff\xff" "C", 5}, // runt or underrun
237 {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x83\x00\x00\x00", 5}, // definite length, long form, zero content octets
238 {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x83\x00\x00\x01" "C", 6}, // definite length, long form, expected content octets
239 {REJECT, IA5_STRING, "IA5_STRING", "\x16\x83\x00\x00\x02" "C", 6}, // runt or underrun
240 {REJECT, IA5_STRING, "IA5_STRING", "\x16\x83\xff\xff\xff" "C", 6}, // runt or underrun
241 {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x84\x00\x00\x00\x00", 6}, // definite length, long form, zero content octets
242 {ACCEPT, IA5_STRING, "IA5_STRING", "\x16\x84\x00\x00\x00\x01" "C", 7}, // definite length, long form, expected content octets
243 {REJECT, IA5_STRING, "IA5_STRING", "\x16\x84\x00\x00\x00\x02" "C", 7}, // runt or underrun
244 {REJECT, IA5_STRING, "IA5_STRING", "\x16\x84\xff\xff\xff\xff" "C", 7}, // <== Issue 346; requires large allocation
245 };
246
247 pass = RunASN1TestSet(ia5Strings, COUNTOF(ia5Strings)) && pass;
248
249 static const ASN1_TestTuple integerValues[] =
250 {
251 // 8.3.1 The encoding of an integer value shall be primitive. The contents octets shall consist of one or more octets.
252 {REJECT, INTEGER, "INTEGER", "\x02\x00", 2}, // definite length, short form, zero content octets
253 {ACCEPT, INTEGER, "INTEGER", "\x02\x01" "C", 3}, // definite length, short form, expected content octets
254 {REJECT, INTEGER, "INTEGER", "\x02\x02" "C", 3}, // runt or underrun
255 {REJECT, INTEGER, "INTEGER", "\x02\x7F" "C", 3}, // runt or underrun
256 {REJECT, INTEGER, "INTEGER", "\x02\x81\x00", 3}, // definite length, long form, zero content octets
257 {ACCEPT, INTEGER, "INTEGER", "\x02\x81\x01" "C", 4}, // definite length, long form, expected content octets
258 {REJECT, INTEGER, "INTEGER", "\x02\x81\x02" "C", 4}, // runt or underrun
259 {REJECT, INTEGER, "INTEGER", "\x02\x81\xff" "C", 4}, // runt or underrun
260 {REJECT, INTEGER, "INTEGER", "\x02\x82\x00\x00", 4}, // definite length, long form, zero content octets
261 {ACCEPT, INTEGER, "INTEGER", "\x02\x82\x00\x01" "C", 5}, // definite length, long form, expected content octets
262 {REJECT, INTEGER, "INTEGER", "\x02\x82\x00\x02" "C", 5}, // runt or underrun
263 {REJECT, INTEGER, "INTEGER", "\x02\x82\xff\xff" "C", 5}, // runt or underrun
264 {REJECT, INTEGER, "INTEGER", "\x02\x83\x00\x00\x00", 5}, // definite length, long form, zero content octets
265 {ACCEPT, INTEGER, "INTEGER", "\x02\x83\x00\x00\x01" "C", 6}, // definite length, long form, expected content octets
266 {REJECT, INTEGER, "INTEGER", "\x02\x83\x00\x00\x02" "C", 6}, // runt or underrun
267 {REJECT, INTEGER, "INTEGER", "\x02\x83\xff\xff\xff" "C", 6}, // runt or underrun
268 {REJECT, INTEGER, "INTEGER", "\x02\x84\x00\x00\x00\x00", 6}, // definite length, long form, zero content octets
269 {ACCEPT, INTEGER, "INTEGER", "\x02\x84\x00\x00\x00\x01" "C", 7}, // definite length, long form, expected content octets
270 {REJECT, INTEGER, "INTEGER", "\x02\x84\x00\x00\x00\x02" "C", 7}, // runt or underrun
271 {REJECT, INTEGER, "INTEGER", "\x02\x84\xff\xff\xff\xff" "C", 7}, // <== Issue 346; requires large allocation
272 };
273
274 pass = RunASN1TestSet(integerValues, COUNTOF(integerValues)) && pass;
275
276 return pass;
277 }
278 #endif
279
280 #if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_IMPORTS)
TestSecBlock()281 bool TestSecBlock()
282 {
283 std::cout << "\nTesting SecBlock...\n\n";
284
285 bool pass1=true, pass2=true, pass3=true, pass4=true, pass5=true, pass6=true, pass7=true, temp=false;
286
287 //********** Zeroized block **********//
288
289 {
290 // NULL ptr with a size means to create a new SecBlock with all elements zero'd
291 SecByteBlock z1(NULL, 256);
292 temp = true;
293
294 for (size_t i = 0; i < z1.size(); i++)
295 temp &= (z1[i] == 0);
296
297 pass1 &= temp;
298 if (!temp)
299 std::cout << "FAILED:";
300 else
301 std::cout << "passed:";
302 std::cout << " Zeroized byte array" << std::endl;
303
304 SecBlock<word32> z2(NULL, 256);
305 temp = true;
306
307 for (size_t i = 0; i < z2.size(); i++)
308 temp &= (z2[i] == 0);
309
310 pass1 &= temp;
311 if (!temp)
312 std::cout << "FAILED:";
313 else
314 std::cout << "passed:";
315 std::cout << " Zeroized word32 array" << std::endl;
316
317 SecBlock<word64> z3(NULL, 256);
318 temp = true;
319
320 for (size_t i = 0; i < z3.size(); i++)
321 temp &= (z3[i] == 0);
322
323 pass1 &= temp;
324 if (!temp)
325 std::cout << "FAILED:";
326 else
327 std::cout << "passed:";
328 std::cout << " Zeroized word64 array" << std::endl;
329
330 #if defined(CRYPTOPP_WORD128_AVAILABLE)
331 SecBlock<word128> z4(NULL, 256);
332 temp = true;
333
334 for (size_t i = 0; i < z4.size(); i++)
335 temp &= (z4[i] == 0);
336
337 pass1 &= temp;
338 if (!temp)
339 std::cout << "FAILED:";
340 else
341 std::cout << "passed:";
342 std::cout << " Zeroized word128 array" << std::endl;
343 #endif
344 }
345
346 //********** Assign **********//
347
348 try
349 {
350 SecByteBlock a, b;
351 temp = true;
352
353 a.Assign((const byte*)"a", 1);
354 b.Assign((const byte*)"b", 1);
355
356 temp &= (a.SizeInBytes() == 1);
357 temp &= (b.SizeInBytes() == 1);
358 temp &= (a[0] == 'a');
359 temp &= (b[0] == 'b');
360
361 a.Assign((const byte*)"ab", 2);
362 b.Assign((const byte*)"cd", 2);
363
364 temp &= (a.SizeInBytes() == 2);
365 temp &= (b.SizeInBytes() == 2);
366 temp &= (a[0] == 'a' && a[1] == 'b');
367 temp &= (b[0] == 'c' && b[1] == 'd');
368 }
369 catch(const Exception& /*ex*/)
370 {
371 temp = false;
372 }
373
374 pass2 &= temp;
375 if (!temp)
376 std::cout << "FAILED:";
377 else
378 std::cout << "passed:";
379 std::cout << " Assign byte" << std::endl;
380
381 try
382 {
383 SecBlock<word32> a, b;
384 temp = true;
385
386 word32 one[1] = {1}, two[1] = {2};
387 a.Assign(one, 1);
388 b.Assign(two, 1);
389
390 temp &= (a.SizeInBytes() == 4);
391 temp &= (b.SizeInBytes() == 4);
392 temp &= (a[0] == 1);
393 temp &= (b[0] == 2);
394
395 word32 three[2] = {1,2}, four[2] = {3,4};
396 a.Assign(three, 2);
397 b.Assign(four, 2);
398
399 temp &= (a.SizeInBytes() == 8);
400 temp &= (b.SizeInBytes() == 8);
401 temp &= (a[0] == 1 && a[1] == 2);
402 temp &= (b[0] == 3 && b[1] == 4);
403 }
404 catch(const Exception& /*ex*/)
405 {
406 temp = false;
407 }
408
409 pass2 &= temp;
410 if (!temp)
411 std::cout << "FAILED:";
412 else
413 std::cout << "passed:";
414 std::cout << " Assign word32" << std::endl;
415
416 try
417 {
418 SecBlock<word64> a, b;
419 temp = true;
420
421 word64 one[1] = {1}, two[1] = {2};
422 a.Assign(one, 1);
423 b.Assign(two, 1);
424
425 temp &= (a.SizeInBytes() == 8);
426 temp &= (b.SizeInBytes() == 8);
427 temp &= (a[0] == 1);
428 temp &= (b[0] == 2);
429
430 word64 three[2] = {1,2}, four[2] = {3,4};
431 a.Assign(three, 2);
432 b.Assign(four, 2);
433
434 temp &= (a.SizeInBytes() == 16);
435 temp &= (b.SizeInBytes() == 16);
436 temp &= (a[0] == 1 && a[1] == 2);
437 temp &= (b[0] == 3 && b[1] == 4);
438 }
439 catch(const Exception& /*ex*/)
440 {
441 temp = false;
442 }
443
444 pass2 &= temp;
445 if (!temp)
446 std::cout << "FAILED:";
447 else
448 std::cout << "passed:";
449 std::cout << " Assign word64" << std::endl;
450
451 #if defined(CRYPTOPP_WORD128_AVAILABLE)
452 try
453 {
454 SecBlock<word128> a, b;
455 temp = true;
456
457 word128 one[1] = {1}, two[1] = {2};
458 a.Assign(one, 1);
459 b.Assign(two, 1);
460
461 temp &= (a.SizeInBytes() == 16);
462 temp &= (b.SizeInBytes() == 16);
463 temp &= (a[0] == 1);
464 temp &= (b[0] == 2);
465
466 word128 three[2] = {1,2}, four[2] = {3,4};
467 a.Assign(three, 2);
468 b.Assign(four, 2);
469
470 temp &= (a.SizeInBytes() == 32);
471 temp &= (b.SizeInBytes() == 32);
472 temp &= (a[0] == 1 && a[1] == 2);
473 temp &= (b[0] == 3 && b[1] == 4);
474 }
475 catch(const Exception& /*ex*/)
476 {
477 temp = false;
478 }
479
480 pass2 &= temp;
481 if (!temp)
482 std::cout << "FAILED:";
483 else
484 std::cout << "passed:";
485 std::cout << " Assign word128" << std::endl;
486 #endif
487
488 //********** Append **********//
489
490 try
491 {
492 SecByteBlock a, b;
493 temp = true;
494
495 a.Assign((const byte*)"a", 1);
496 b.Assign((const byte*)"b", 1);
497
498 a += b;
499 temp &= (a.SizeInBytes() == 2);
500 temp &= (a[0] == 'a' && a[1] == 'b');
501
502 a.Assign((const byte*)"ab", 2);
503 b.Assign((const byte*)"cd", 2);
504
505 a += b;
506 temp &= (a.SizeInBytes() == 4);
507 temp &= (a[0] == 'a' && a[1] == 'b' && a[2] == 'c' && a[3] == 'd');
508
509 a.Assign((const byte*)"a", 1);
510
511 a += a;
512 temp &= (a.SizeInBytes() == 2);
513 temp &= (a[0] == 'a' && a[1] == 'a');
514
515 a.Assign((const byte*)"ab", 2);
516
517 a += a;
518 temp &= (a.SizeInBytes() == 4);
519 temp &= (a[0] == 'a' && a[1] == 'b' && a[2] == 'a' && a[3] == 'b');
520 }
521 catch(const Exception& /*ex*/)
522 {
523 temp = false;
524 }
525
526 pass3 &= temp;
527 if (!temp)
528 std::cout << "FAILED:";
529 else
530 std::cout << "passed:";
531 std::cout << " Append byte" << std::endl;
532
533 try
534 {
535 SecBlock<word32> a, b;
536 temp = true;
537
538 const word32 one[1] = {1}, two[1] = {2};
539 a.Assign(one, 1);
540 b.Assign(two, 1);
541
542 a += b;
543 temp &= (a.SizeInBytes() == 8);
544 temp &= (a[0] == 1 && a[1] == 2);
545
546 const word32 three[2] = {1,2}, four[2] = {3,4};
547 a.Assign(three, 2);
548 b.Assign(four, 2);
549
550 a += b;
551 temp &= (a.SizeInBytes() == 16);
552 temp &= (a[0] == 1 && a[1] == 2 && a[2] == 3 && a[3] == 4);
553
554 a.Assign(one, 1);
555
556 a += a;
557 temp &= (a.SizeInBytes() == 8);
558 temp &= (a[0] == 1 && a[1] == 1);
559
560 a.Assign(three, 2);
561
562 a += a;
563 temp &= (a.SizeInBytes() == 16);
564 temp &= (a[0] == 1 && a[1] == 2 && a[2] == 1 && a[3] == 2);
565 }
566 catch(const Exception& /*ex*/)
567 {
568 temp = false;
569 }
570
571 pass3 &= temp;
572 if (!temp)
573 std::cout << "FAILED:";
574 else
575 std::cout << "passed:";
576 std::cout << " Append word32" << std::endl;
577
578 try
579 {
580 SecBlock<word64> a, b;
581 temp = true;
582
583 const word64 one[1] = {1}, two[1] = {2};
584 a.Assign(one, 1);
585 b.Assign(two, 1);
586
587 a += b;
588 temp &= (a.SizeInBytes() == 16);
589 temp &= (a[0] == 1 && a[1] == 2);
590
591 const word64 three[2] = {1,2}, four[2] = {3,4};
592 a.Assign(three, 2);
593 b.Assign(four, 2);
594
595 a += b;
596 temp &= (a.SizeInBytes() == 32);
597 temp &= (a[0] == 1 && a[1] == 2 && a[2] == 3 && a[3] == 4);
598
599 a.Assign(one, 1);
600
601 a += a;
602 temp &= (a.SizeInBytes() == 16);
603 temp &= (a[0] == 1 && a[1] == 1);
604
605 a.Assign(three, 2);
606
607 a += a;
608 temp &= (a.SizeInBytes() == 32);
609 temp &= (a[0] == 1 && a[1] == 2 && a[2] == 1 && a[3] == 2);
610 }
611 catch(const Exception& /*ex*/)
612 {
613 temp = false;
614 }
615
616 pass3 &= temp;
617 if (!temp)
618 std::cout << "FAILED:";
619 else
620 std::cout << "passed:";
621 std::cout << " Append word64" << std::endl;
622
623 #if defined(CRYPTOPP_WORD128_AVAILABLE)
624 try
625 {
626 SecBlock<word128> a, b;
627 temp = true;
628
629 const word128 one[1] = {1}, two[1] = {2};
630 a.Assign(one, 1);
631 b.Assign(two, 1);
632
633 a += b;
634 temp &= (a.SizeInBytes() == 32);
635 temp &= (a[0] == 1 && a[1] == 2);
636
637 const word128 three[2] = {1,2}, four[2] = {3,4};
638 a.Assign(three, 2);
639 b.Assign(four, 2);
640
641 a += b;
642 temp &= (a.SizeInBytes() == 64);
643 temp &= (a[0] == 1 && a[1] == 2 && a[2] == 3 && a[3] == 4);
644
645 a.Assign(one, 1);
646
647 a += a;
648 temp &= (a.SizeInBytes() == 32);
649 temp &= (a[0] == 1 && a[1] == 1);
650
651 a.Assign(three, 2);
652
653 a += a;
654 temp &= (a.SizeInBytes() == 64);
655 temp &= (a[0] == 1 && a[1] == 2 && a[2] == 1 && a[3] == 2);
656 }
657 catch(const Exception& /*ex*/)
658 {
659 temp = false;
660 }
661
662 pass3 &= temp;
663 if (!temp)
664 std::cout << "FAILED:";
665 else
666 std::cout << "passed:";
667 std::cout << " Append word128" << std::endl;
668 #endif
669
670 //********** Concatenate **********//
671
672 // byte
673 try
674 {
675 SecByteBlock a, b, c;
676 temp = true;
677
678 a.Assign((const byte*)"a", 1);
679 b.Assign((const byte*)"b", 1);
680
681 c = a + b;
682 temp &= (a[0] == 'a');
683 temp &= (b[0] == 'b');
684 temp &= (c.SizeInBytes() == 2);
685 temp &= (c[0] == 'a' && c[1] == 'b');
686
687 a.Assign((const byte*)"ab", 2);
688 b.Assign((const byte*)"cd", 2);
689
690 c = a + b;
691 temp &= (a[0] == 'a' && a[1] == 'b');
692 temp &= (b[0] == 'c' && b[1] == 'd');
693 temp &= (c.SizeInBytes() == 4);
694 temp &= (c[0] == 'a' && c[1] == 'b' && c[2] == 'c' && c[3] == 'd');
695 }
696 catch(const Exception& /*ex*/)
697 {
698 temp = false;
699 }
700
701 pass4 &= temp;
702 if (!temp)
703 std::cout << "FAILED:";
704 else
705 std::cout << "passed:";
706 std::cout << " Concatenate byte" << std::endl;
707
708 // word32
709 try
710 {
711 SecBlock<word32> a, b, c;
712 temp = true;
713
714 const word32 one[1] = {1}, two[1] = {2};
715 a.Assign(one, 1);
716 b.Assign(two, 1);
717
718 c = a + b;
719 temp &= (a[0] == 1);
720 temp &= (b[0] == 2);
721 temp &= (c.SizeInBytes() == 8);
722 temp &= (c[0] == 1 && c[1] == 2);
723
724 const word32 three[2] = {1,2}, four[2] = {3,4};
725 a.Assign(three, 2);
726 b.Assign(four, 2);
727
728 c = a + b;
729 temp &= (a[0] == 1 && a[1] == 2);
730 temp &= (b[0] == 3 && b[1] == 4);
731 temp &= (c.SizeInBytes() == 16);
732 temp &= (c[0] == 1 && c[1] == 2 && c[2] == 3 && c[3] == 4);
733 }
734 catch(const Exception& /*ex*/)
735 {
736 temp = false;
737 }
738
739 pass4 &= temp;
740 if (!temp)
741 std::cout << "FAILED:";
742 else
743 std::cout << "passed:";
744 std::cout << " Concatenate word32" << std::endl;
745
746 // word64
747 try
748 {
749 SecBlock<word64> a, b, c;
750 temp = true;
751
752 const word64 one[1] = {1}, two[1] = {2};
753 a.Assign(one, 1);
754 b.Assign(two, 1);
755
756 c = a + b;
757 temp &= (a[0] == 1);
758 temp &= (b[0] == 2);
759 temp &= (c.SizeInBytes() == 16);
760 temp &= (c[0] == 1 && c[1] == 2);
761
762 const word64 three[2] = {1,2}, four[2] = {3,4};
763 a.Assign(three, 2);
764 b.Assign(four, 2);
765
766 c = a + b;
767 temp &= (a[0] == 1 && a[1] == 2);
768 temp &= (b[0] == 3 && b[1] == 4);
769 temp &= (c.SizeInBytes() == 32);
770 temp &= (c[0] == 1 && c[1] == 2 && c[2] == 3 && c[3] == 4);
771 }
772 catch(const Exception& /*ex*/)
773 {
774 temp = false;
775 }
776
777 pass4 &= temp;
778 if (!temp)
779 std::cout << "FAILED:";
780 else
781 std::cout << "passed:";
782 std::cout << " Concatenate word64" << std::endl;
783
784 #if defined(CRYPTOPP_WORD128_AVAILABLE)
785 try
786 {
787 SecBlock<word128> a, b, c;
788 temp = true;
789
790 const word128 one[1] = {1}, two[1] = {2};
791 a.Assign(one, 1);
792 b.Assign(two, 1);
793
794 c = a + b;
795 temp &= (a[0] == 1);
796 temp &= (b[0] == 2);
797 temp &= (c.SizeInBytes() == 32);
798 temp &= (c[0] == 1 && c[1] == 2);
799
800 const word128 three[2] = {1,2}, four[2] = {3,4};
801 a.Assign(three, 2);
802 b.Assign(four, 2);
803
804 c = a + b;
805 temp &= (a[0] == 1 && a[1] == 2);
806 temp &= (b[0] == 3 && b[1] == 4);
807 temp &= (c.SizeInBytes() == 64);
808 temp &= (c[0] == 1 && c[1] == 2 && c[2] == 3 && c[3] == 4);
809 }
810 catch(const Exception& /*ex*/)
811 {
812 temp = false;
813 }
814
815 pass4 &= temp;
816 if (!temp)
817 std::cout << "FAILED:";
818 else
819 std::cout << "passed:";
820 std::cout << " Concatenate word128" << std::endl;
821 #endif
822
823 //********** Equality **********//
824
825 // byte
826 try
827 {
828 static const byte str1[] = "abcdefghijklmnopqrstuvwxyz";
829 static const byte str2[] = "zyxwvutsrqponmlkjihgfedcba";
830 static const byte str3[] = "0123456789";
831
832 temp = true;
833 SecByteBlock a,b;
834
835 a.Assign(str1, COUNTOF(str1));
836 b.Assign(str1, COUNTOF(str1));
837 temp &= (a.operator==(b));
838
839 a.Assign(str3, COUNTOF(str3));
840 b.Assign(str3, COUNTOF(str3));
841 temp &= (a == b);
842
843 a.Assign(str1, COUNTOF(str1));
844 b.Assign(str2, COUNTOF(str2));
845 temp &= (a.operator!=(b));
846
847 a.Assign(str1, COUNTOF(str1));
848 b.Assign(str3, COUNTOF(str3));
849 temp &= (a != b);
850 }
851 catch(const Exception& /*ex*/)
852 {
853 temp = false;
854 }
855
856 pass5 &= temp;
857 if (!temp)
858 std::cout << "FAILED:";
859 else
860 std::cout << "passed:";
861 std::cout << " Equality byte" << std::endl;
862
863 // word32
864 try
865 {
866 static const word32 str1[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
867 static const word32 str2[] = {97,89,83,79,73,71,67,61,59,53,47,43,41,37,31,29,23,19,17,13,11,7,5,3,2};
868 static const word32 str3[] = {0,1,2,3,4,5,6,7,8,9};
869
870 temp = true;
871 SecBlock<word32> a,b;
872
873 a.Assign(str1, COUNTOF(str1));
874 b.Assign(str1, COUNTOF(str1));
875 temp &= (a.operator==(b));
876
877 a.Assign(str3, COUNTOF(str3));
878 b.Assign(str3, COUNTOF(str3));
879 temp &= (a == b);
880
881 a.Assign(str1, COUNTOF(str1));
882 b.Assign(str2, COUNTOF(str2));
883 temp &= (a.operator!=(b));
884
885 a.Assign(str1, COUNTOF(str1));
886 b.Assign(str3, COUNTOF(str3));
887 temp &= (a != b);
888 }
889 catch(const Exception& /*ex*/)
890 {
891 temp = false;
892 }
893
894 pass5 &= temp;
895 if (!temp)
896 std::cout << "FAILED:";
897 else
898 std::cout << "passed:";
899 std::cout << " Equality word32" << std::endl;
900
901 // word64
902 try
903 {
904 static const word64 str1[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
905 static const word64 str2[] = {97,89,83,79,73,71,67,61,59,53,47,43,41,37,31,29,23,19,17,13,11,7,5,3,2};
906 static const word64 str3[] = {0,1,2,3,4,5,6,7,8,9};
907
908 temp = true;
909 SecBlock<word64> a,b;
910
911 a.Assign(str1, COUNTOF(str1));
912 b.Assign(str1, COUNTOF(str1));
913 temp &= (a.operator==(b));
914
915 a.Assign(str3, COUNTOF(str3));
916 b.Assign(str3, COUNTOF(str3));
917 temp &= (a == b);
918
919 a.Assign(str1, COUNTOF(str1));
920 b.Assign(str2, COUNTOF(str2));
921 temp &= (a.operator!=(b));
922
923 a.Assign(str1, COUNTOF(str1));
924 b.Assign(str3, COUNTOF(str3));
925 temp &= (a != b);
926 }
927 catch(const Exception& /*ex*/)
928 {
929 temp = false;
930 }
931
932 pass5 &= temp;
933 if (!temp)
934 std::cout << "FAILED:";
935 else
936 std::cout << "passed:";
937 std::cout << " Equality word64" << std::endl;
938
939 #if defined(CRYPTOPP_WORD128_AVAILABLE)
940 // word128
941 try
942 {
943 static const word128 str1[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
944 static const word128 str2[] = {97,89,83,79,73,71,67,61,59,53,47,43,41,37,31,29,23,19,17,13,11,7,5,3,2};
945 static const word128 str3[] = {0,1,2,3,4,5,6,7,8,9};
946
947 temp = true;
948 SecBlock<word128> a,b;
949
950 a.Assign(str1, COUNTOF(str1));
951 b.Assign(str1, COUNTOF(str1));
952 temp &= (a.operator==(b));
953
954 a.Assign(str3, COUNTOF(str3));
955 b.Assign(str3, COUNTOF(str3));
956 temp &= (a == b);
957
958 a.Assign(str1, COUNTOF(str1));
959 b.Assign(str2, COUNTOF(str2));
960 temp &= (a.operator!=(b));
961
962 a.Assign(str1, COUNTOF(str1));
963 b.Assign(str3, COUNTOF(str3));
964 temp &= (a != b);
965 }
966 catch(const Exception& /*ex*/)
967 {
968 temp = false;
969 }
970
971 pass5 &= temp;
972 if (!temp)
973 std::cout << "FAILED:";
974 else
975 std::cout << "passed:";
976 std::cout << " Equality word128" << std::endl;
977 #endif
978
979 //********** Allocator Size/Overflow **********//
980
981 try
982 {
983 temp = false;
984
985 AllocatorBase<word32> A;
986 const size_t max = A.max_size();
987 SecBlock<word32> t(max+1);
988 }
989 catch(const Exception& /*ex*/)
990 {
991 temp = true;
992 }
993 catch(const std::exception& /*ex*/)
994 {
995 temp = true;
996 }
997
998 pass6 &= temp;
999 if (!temp)
1000 std::cout << "FAILED:";
1001 else
1002 std::cout << "passed:";
1003 std::cout << " Overflow word32" << std::endl;
1004
1005 try
1006 {
1007 temp = false;
1008
1009 AllocatorBase<word64> A;
1010 const size_t max = A.max_size();
1011 SecBlock<word64> t(max+1);
1012 }
1013 catch(const Exception& /*ex*/)
1014 {
1015 temp = true;
1016 }
1017 catch(const std::exception& /*ex*/)
1018 {
1019 temp = true;
1020 }
1021
1022 pass6 &= temp;
1023 if (!temp)
1024 std::cout << "FAILED:";
1025 else
1026 std::cout << "passed:";
1027 std::cout << " Overflow word64" << std::endl;
1028
1029 #if defined(CRYPTOPP_WORD128_AVAILABLE)
1030 try
1031 {
1032 temp = false;
1033
1034 AllocatorBase<word128> A;
1035 const size_t max = A.max_size();
1036 SecBlock<word128> t(max+1);
1037 }
1038 catch(const Exception& /*ex*/)
1039 {
1040 temp = true;
1041 }
1042 catch(const std::exception& /*ex*/)
1043 {
1044 temp = true;
1045 }
1046
1047 pass6 &= temp;
1048 if (!temp)
1049 std::cout << "FAILED:";
1050 else
1051 std::cout << "passed:";
1052 std::cout << " Overflow word128" << std::endl;
1053 #endif
1054
1055 //********** FixedSizeAllocatorWithCleanup and Grow **********//
1056
1057 // byte
1058 try
1059 {
1060 static const unsigned int SIZE = 8;
1061 SecBlockWithHint<byte, SIZE> block(SIZE);
1062 memset(block, 0xaa, block.SizeInBytes());
1063
1064 temp = true;
1065 block.CleanGrow(SIZE*2);
1066 temp &= (block.size() == SIZE*2);
1067
1068 for (size_t i = 0; i < block.size()/2; i++)
1069 temp &= (block[i] == 0xaa);
1070 for (size_t i = block.size()/2; i < block.size(); i++)
1071 temp &= (block[i] == 0);
1072
1073 block.CleanNew(SIZE*4);
1074 temp &= (block.size() == SIZE*4);
1075 for (size_t i = 0; i < block.size(); i++)
1076 temp &= (block[i] == 0);
1077 }
1078 catch(const Exception& /*ex*/)
1079 {
1080 temp = false;
1081 }
1082 catch(const std::exception& /*ex*/)
1083 {
1084 temp = false;
1085 }
1086
1087 pass7 &= temp;
1088 if (!temp)
1089 std::cout << "FAILED:";
1090 else
1091 std::cout << "passed:";
1092 std::cout << " FixedSizeAllocator Grow with byte" << std::endl;
1093
1094 // word32
1095 try
1096 {
1097 static const unsigned int SIZE = 8;
1098 SecBlockWithHint<word32, SIZE> block(SIZE);
1099 memset(block, 0xaa, block.SizeInBytes());
1100
1101 temp = true;
1102 block.CleanGrow(SIZE*2);
1103 temp &= (block.size() == SIZE*2);
1104
1105 for (size_t i = 0; i < block.size()/2; i++)
1106 temp &= (block[i] == 0xaaaaaaaa);
1107
1108 for (size_t i = block.size()/2; i < block.size(); i++)
1109 temp &= (block[i] == 0);
1110
1111 block.CleanNew(SIZE*4);
1112 temp &= (block.size() == SIZE*4);
1113 for (size_t i = 0; i < block.size(); i++)
1114 temp &= (block[i] == 0);
1115 }
1116 catch(const Exception& /*ex*/)
1117 {
1118 temp = false;
1119 }
1120 catch(const std::exception& /*ex*/)
1121 {
1122 temp = false;
1123 }
1124
1125 pass7 &= temp;
1126 if (!temp)
1127 std::cout << "FAILED:";
1128 else
1129 std::cout << "passed:";
1130 std::cout << " FixedSizeAllocator Grow with word32" << std::endl;
1131
1132 // word64
1133 try
1134 {
1135 static const unsigned int SIZE = 8;
1136 SecBlockWithHint<word64, SIZE> block(SIZE);
1137 memset(block, 0xaa, block.SizeInBytes());
1138
1139 temp = true;
1140 block.CleanGrow(SIZE*2);
1141 temp &= (block.size() == SIZE*2);
1142
1143 for (size_t i = 0; i < block.size()/2; i++)
1144 temp &= (block[i] == W64LIT(0xaaaaaaaaaaaaaaaa));
1145
1146 for (size_t i = block.size()/2; i < block.size(); i++)
1147 temp &= (block[i] == 0);
1148
1149 block.CleanNew(SIZE*4);
1150 temp &= (block.size() == SIZE*4);
1151 for (size_t i = 0; i < block.size(); i++)
1152 temp &= (block[i] == 0);
1153 }
1154 catch(const Exception& /*ex*/)
1155 {
1156 temp = false;
1157 }
1158 catch(const std::exception& /*ex*/)
1159 {
1160 temp = false;
1161 }
1162
1163 pass7 &= temp;
1164 if (!temp)
1165 std::cout << "FAILED:";
1166 else
1167 std::cout << "passed:";
1168 std::cout << " FixedSizeAllocator Grow with word64" << std::endl;
1169
1170 #if defined(CRYPTOPP_WORD128_AVAILABLE)
1171 // word128
1172 try
1173 {
1174 static const unsigned int SIZE = 8;
1175 SecBlock<word128, AllocatorWithCleanup<word128, true> > block(SIZE);
1176 memset(block, 0xaa, block.SizeInBytes());
1177
1178 temp = true;
1179 block.CleanGrow(SIZE*2);
1180 temp &= (block.size() == SIZE*2);
1181
1182 for (size_t i = 0; i < block.size()/2; i++)
1183 temp &= (block[i] == (((word128)W64LIT(0xaaaaaaaaaaaaaaaa) << 64U) | W64LIT(0xaaaaaaaaaaaaaaaa)));
1184
1185 for (size_t i = block.size()/2; i < block.size(); i++)
1186 temp &= (block[i] == 0);
1187
1188 block.CleanNew(SIZE*4);
1189 temp &= (block.size() == SIZE*4);
1190 for (size_t i = 0; i < block.size(); i++)
1191 temp &= (block[i] == 0);
1192 }
1193 catch(const Exception& /*ex*/)
1194 {
1195 temp = false;
1196 }
1197 catch(const std::exception& /*ex*/)
1198 {
1199 temp = false;
1200 }
1201
1202 pass7 &= temp;
1203 if (!temp)
1204 std::cout << "FAILED:";
1205 else
1206 std::cout << "passed:";
1207 std::cout << " FixedSizeAllocator Grow with word128" << std::endl;
1208 #endif
1209
1210 return pass1 && pass2 && pass3 && pass4 && pass5 && pass6 && pass7;
1211 }
1212 #endif
1213
1214 #if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_IMPORTS)
TestHuffmanCodes()1215 bool TestHuffmanCodes()
1216 {
1217 std::cout << "\nTesting Huffman codes...\n\n";
1218 bool pass=true;
1219
1220 static const size_t nCodes = 30;
1221 const unsigned int codeCounts[nCodes] = {
1222 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1223 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1224 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1225
1226 static const unsigned int maxCodeBits = nCodes >> 1;
1227 unsigned int codeBits[nCodes] = {
1228 ~0u, ~0u, ~0u, ~0u, ~0u,
1229 ~0u, ~0u, ~0u, ~0u, ~0u,
1230 ~0u, ~0u, ~0u, ~0u, ~0u,
1231 };
1232
1233 try
1234 {
1235 HuffmanEncoder::GenerateCodeLengths(codeBits, maxCodeBits, codeCounts, nCodes);
1236 }
1237 catch(const Exception& /*ex*/)
1238 {
1239 pass=false;
1240 }
1241
1242 if (!pass)
1243 std::cout << "FAILED:";
1244 else
1245 std::cout << "passed:";
1246 std::cout << " GenerateCodeLengths" << std::endl;
1247
1248 return pass;
1249 }
1250 #endif
1251
1252 #if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_IMPORTS)
TestIntegerBitops()1253 bool TestIntegerBitops()
1254 {
1255 std::cout << "\nTesting Integer bitops...\n\n";
1256
1257 struct Bitops_TestTuple
1258 {
1259 // m,n are operands; a,o,x are and,or,xor results
1260 const char *m, *n, *a, *o, *x;
1261 };
1262 static const Bitops_TestTuple tests[] = {
1263 {
1264 "0xc2cea8a4", "0xb36e5794", "0x824e0084", "0xf3eeffb4", "0x71a0ff30"
1265 },
1266 {
1267 "0x436eb828", "0x1b375cb4", "0x3261820", "0x5b7ffcbc", "0x5859e49c"
1268 },
1269 {
1270 "0x1e5c0b28", "0x4fded465", "0xe5c0020", "0x5fdedf6d", "0x5182df4d"
1271 },
1272 {
1273 "0xeb71fde7", "0xf7bb47cf", "0xe33145c7", "0xfffbffef", "0x1ccaba28"
1274 },
1275 {
1276 "0xa6b0f01f", "0x8a8ca98", "0xa0c018", "0xaeb8fa9f", "0xae183a87"
1277 },
1278 {
1279 "0xa70bd8b7", "0x5c758cf5", "0x40188b5", "0xff7fdcf7", "0xfb7e5442"
1280 },
1281 {
1282 "0xf91af382", "0x718a9995", "0x710a9180", "0xf99afb97", "0x88906a17"
1283 },
1284 {
1285 "0xbd2a76ad", "0xddd8dfeb", "0x9d0856a9", "0xfdfaffef", "0x60f2a946"
1286 },
1287 {
1288 "0xd4b559cc", "0x91a53295", "0x90a51084", "0xd5b57bdd", "0x45106b59"
1289 },
1290 {
1291 "0x89434e9e", "0xa42fdaf9", "0x80034a98", "0xad6fdeff", "0x2d6c9467"
1292 },
1293 {
1294 "0xb947ac04", "0xd4201e52", "0x90000c00", "0xfd67be56", "0x6d67b256"
1295 },
1296 {
1297 "0xa83945c1", "0x3a9c5dba", "0x28184580", "0xbabd5dfb", "0x92a5187b"
1298 },
1299 {
1300 "0xbca38ffa", "0x881ba9fd", "0x880389f8", "0xbcbbafff", "0x34b82607"
1301 },
1302 {
1303 "0xfcd0b92", "0xeaad8534", "0xa8d0110", "0xefed8fb6", "0xe5608ea6"
1304 },
1305 {
1306 "0x50d160d0", "0x64646f75", "0x40406050", "0x74f56ff5", "0x34b50fa5"
1307 },
1308 {
1309 "0x165ccff8", "0x67d49127", "0x6548120", "0x77dcdfff", "0x71885edf"
1310 },
1311 {
1312 "0x8c4f4bbb7adaacb5", "0x2566b7a909b24aa9", "0x44603a9089208a1", "0xad6fffbb7bfaeebd", "0xa929fc127368e61c"
1313 },
1314 {
1315 "0x6f9ef50aafb31e8d", "0x7a93b2ccd1bbbff2", "0x6a92b00881b31e80", "0x7f9ff7ceffbbbfff", "0x150d47c67e08a17f"
1316 },
1317 {
1318 "0x4c99e967f8de5294", "0x1f4699e0c14e6974", "0xc008960c04e4014", "0x5fdff9e7f9de7bf4", "0x53df708739903be0"
1319 },
1320 {
1321 "0xcc55f5d6d3ea45c", "0x6805b4ddb6390c2f", "0x805145d2438040c", "0x6cc5ffddff3fac7f", "0x64c0eb80db07a873"
1322 },
1323 {
1324 "0x90620d1a012459e7", "0x89d31098ce3fed42", "0x8042001800244942", "0x99f31d9acf3ffde7", "0x19b11d82cf1bb4a5"
1325 },
1326 {
1327 "0xb87d1674e90a935a", "0x75ea466cbb782ac4", "0x30680664a9080240", "0xfdff567cfb7abbde", "0xcd9750185272b99e"
1328 },
1329 {
1330 "0x1f135732240701f0", "0x6aa09a1614bf4dd4", "0xa001212040701d0", "0x7fb3df3634bf4df4", "0x75b3cd2430b84c24"
1331 },
1332 {
1333 "0xc9a88d8300099a31", "0xdc8e91df745169ee", "0xc888818300010820", "0xddae9ddf7459fbff", "0x15261c5c7458f3df"
1334 },
1335 {
1336 "0xc8c828d15228b562", "0x43f86cffa3d15d80", "0x40c828d102001500", "0xcbf86cfff3f9fde2", "0x8b30442ef1f9e8e2"
1337 },
1338 {
1339 "0x41fdc0bc2009563f", "0x59dd1c417e3c07bc", "0x41dd00002008063c", "0x59fddcfd7e3d57bf", "0x1820dcfd5e355183"
1340 },
1341 {
1342 "0x9e2f78600c3a84e7", "0xac69a0e1fe7887b0", "0x8c2920600c3884a0", "0xbe6ff8e1fe7a87f7", "0x3246d881f2420357"
1343 },
1344 {
1345 "0xd424d1d9a955f617", "0x9608f5bde1c4d893", "0x9400d199a144d013", "0xd62cf5fde9d5fe97", "0x422c246448912e84"
1346 },
1347 {
1348 "0x1aa8b60a0627719a", "0x5b26e6aca95f5f60", "0x1a20a60800075100", "0x5baef6aeaf7f7ffa", "0x418e50a6af782efa"
1349 },
1350 {
1351 "0xcf5db499233fac00", "0xf33e7a29c3c33da8", "0xc31c300903032c00", "0xff7ffeb9e3ffbda8", "0x3c63ceb0e0fc91a8"
1352 },
1353 {
1354 "0x6b47c03d576e878d", "0x2032d13574d67da4", "0x2002c03554460584", "0x6b77d13d77feffad", "0x4b75110823b8fa29"
1355 },
1356 {
1357 "0xd47eeb3aefebf074", "0x6d7ba17a42c66b89", "0x447aa13a42c26000", "0xfd7feb7aefeffbfd", "0xb9054a40ad2d9bfd"
1358 },
1359 {
1360 "0x33ad9c5d20b03f5c05535f20a2941c8f4ae0f1f19500759151060dce39e5dfed41ec4f",
1361 "0x277401dc000fde7eda4d60a5698935f7febd8fbe49e5d6f56ca2e7f6118380d3cd655da392df3ba6c1b13dc0119af34cfa1d18a65",
1362 "0x10a9841c002016480453410020041c8640c0312191006411110401082924cfa1418845",
1363 "0x277401dc000fde7eda4d60a5698935f7febfbfffcdf7dff7fde2f7f7f38ba9d3cdf5ffaf9fdf7ba7d9b53de0ddfbff5dfedd1ee6f",
1364 "0x277401dc000fde7eda4d60a5698935f7febeb5678c37ddf69962b2c3e389a9920591f3ac8dc66ba198a42da0cd796d1104c90662a"
1365 },
1366 {
1367 "0xb6ea335c13111216862e370d12fb9c761a6266617f62a1904b0d7944ab3cddc71f11752ad9424b0",
1368 "0xa6b380f048a9cbe45ff4ea824064c831eb03ff875e1e3e",
1369 "0xa62200104028090410d480020044c831e1035285140430",
1370 "0xb6ea335c13111216862e370d12fb9c761a6b7e6f7feabdbe4fff7fecaf3eddc71fb17ffafde3ebe",
1371 "0xb6ea335c13111216862e370d12fb9c7610095e6e7be83d2e0ef237ec8f3a914401a14ad2aca3a8e"
1372 },
1373 {
1374 "0x8fb9486ad1f89ca5b3f6da9f0d5ef9ec328b8cc3e5122afbd8a67bd1b2b4ab5c548b90cf9fe1933a0362922f1e84ef0",
1375 "0x10615f963dffc13718ed1ecdb9cfbef33148befeb91b190dc7e7d28d8821ff248ab26a34e1b89885c643e447c72",
1376 "0x6051901ca58136188d0c4cb9cc32830040a412281b180443c192848800540080820a208138000082030404c70",
1377 "0x8fb9586bdffebdfff3f7daff1fdff9efbefbbdcbfffebbfbd9affff7f2bdab7dffaf9afffff5f3ba9be7d66ffec7ef2",
1378 "0x8fb9580b8e6ea15a72c1c272139340238c78bd8b5bec93e0c1abbc366039237dabaf1a7df5d572829be7546cfac3282"
1379 },
1380 {
1381 "0x10af96443b186faf790279bf3bbe0517d56ffc01e7fec8c88e765d48cc32333390224f4d762d1ba788c50801cba02524cb49",
1382 "0x95d44e7344fb1701bace3ae83affbb6290bf282f7565b9a82c386823f5f213a53eccb2cfe5deb4dd040067a64ada8c1b6828599b96cc70647e7d19dc7dfba393addabe689ffbe1a36642bc9844b81c6c4c2e178",
1383 "0x2c96442b084000000260ad288004028509b800c70640c080144548883032118022094d3608122408c1000181800400c148",
1384 "0x95d44e7344fb1701bace3ae83affbb6290bf282f7565b9a82c386823f5f213a53ecdbaffe5dfb5dffef7f7a7dbfbbffb797d5fffd6de7fecfefdfffdfdffe3b3bffbbe6cffffe3f3fe7abcd8c4bcbe6e5e6eb79",
1385 "0x95d44e7344fb1701bace3ae83affbb6290bf282f7565b9a82c386823f5f213a53ecdb836819d055bfef7f781d12937fb39550f6456d20f88f2f5feb9a97760b09ee3bc4c6b2c8372dc3a30c8c4a4a66e1e62a31"
1386 },
1387 {
1388 "0x5fc77dab8cd9c1da8c91eb7ba9c23ce85375b61bf3b9a8c4e4df7bc917aa8a14e747888c9756a2be2fd2e256e44194ce093a0185594de0dcf8340c45b6af7dbdc7682fbef6313f9f1cb234689d9f1ff603e1273faad89d0fe1ab57fbc7c32d29dce125fafc973754464b55ae5de58a8a5661c2065b95c2c94d7ec34",
1389 "0xd4a9158961d4c11258cd047eda13d6804c16c3a374b7f4115bd835bde0b5",
1390 "0x1080158800548100504504649012c480480081221420641158081495e034",
1391 "0x5fc77dab8cd9c1da8c91eb7ba9c23ce85375b61bf3b9a8c4e4df7bc917aa8a14e747888c9756a2be2fd2e256e44194ce093a0185594de0dcf8340c45b6af7dbdc7682fbef6313f9f1cb234689d9f1ff603e1273faad89d0fe1ab57fbc7cf6fb9dcf73dfefdb7bfd447eff5bf7de5cbee7e77cb7f5b95ffcb5ffecb5",
1392 "0x5fc77dab8cd9c1da8c91eb7ba9c23ce85375b61bf3b9a8c4e4df7bc917aa8a14e747888c9756a2be2fd2e256e44194ce093a0185594de0dcf8340c45b6af7dbdc7682fbef6313f9f1cb234689d9f1ff603e1273faad89d0fe1ab57fbc7ce67b8847738b6edb2bb8401a6f49335e14be66c5689791a807f4a16a0c81"
1393 },
1394 {
1395 "0x52cbea1f4d78445fb8f9267203f0f04bddf65b69b1acb0877143e77317f2d9679cb",
1396 "0x331e156a1e1daa0039926a08ec80c2d7c1500bc435a53ebfc32fa398a3304fcd79d90725528e320add050da666b9de42b8307b",
1397 "0x88421a41684412b839023200f0d00990725128a120a0805042666315e0090304b",
1398 "0x331e156a1e1daa0039926a08ec80c2d7c1552ffeb5f5ffbfc7ffaf9ae7307fcf7dfddf65f69f3acbdd771dbe77b9ff6fbe79fb",
1399 "0x331e156a1e1daa0039926a08ec80c2d7c155277a9451e93b86d42c0ac41070c27d64d840e41528c1d57219981188a16f2e49b0"
1400 },
1401 {
1402 "0xbde7e20f37c3ed822555d36050240dcfb5a9a3867d149cffe78e92b95573cbdde33a8c9495148e04cafa1325aae058b4a98c50f7019de1345de6dce12436bed4b86eca2d",
1403 "0xee480b4096f0c1ac565d623dd53b62dba81c507d3c8e15372396fa49de0ecf074fb0ed1785f00f8094022ff50fc436a7cbd18de8ff317c33ea9bdbd8814a7658fcd1fd10b2ed10eaf7e4c2b8f409df3c36f1f0c986a49805a9ed08bbcd603e2eec9e18",
1404 "0x547a00d1781e0020014022050040406a58981846814107c238a929950014a544038809410108c00caf20000a8e00894280450f00184a01005a0cc0020042014286c8a08",
1405 "0xee480b4096f0c1ac565d623dd53b62dba81c507d3c8e15372396fa49de0ecfbfeff2ef37c7fd8fa5d5d36ff52fcdffb7ebf38ffdffbdfff7ee9bfbddf3cbfffbfeddfd95b6ef14eafff7e7baf459ffbdbef1f7c99fe5bc5deffde9bffffefebeeede3d",
1406 "0xee480b4096f0c1ac565d623dd53b62dba81c507d3c8e15372396fa49de0ecfbaa852e220461d8da5c1d14fa52bc9f91262720b95ebad83d46409628df281abbbc65d6985a66314200df7e71214516b95baa107c81b45ac584f31e99ffbdeea96825435"
1407 },
1408 {
1409 "0x17ed0a1aa80542396e82ab79f6d4dda731d10f9487467fcfa5c8b501fa86488fbe268605c01beb257c9e301a42833d22965ea2ff0eda5f18427481a300a8f9aa81e76d774ea1dbed40268eca094bef627d2c206f6885fc12f71557bfda836",
1410 "0x422340e8ff3b4177efa5f58111fe306aa602d8020164fa34c12acdb3de81e",
1411 "0x2340604e21416540248480014a2062240000020004f810c10045b3da816",
1412 "0x17ed0a1aa80542396e82ab79f6d4dda731d10f9487467fcfa5c8b501fa86488fbe268605c01beb257c9e301a42833d22965ea2ff0eda5f18427481a300a8f9aac3e76dffffbbdbffefa7ffcb19ffff6aff2ef86f69e5fe36f73fdfbfde83e",
1413 "0x17ed0a1aa80542396e82ab79f6d4dda731d10f9487467fcfa5c8b501fa86488fbe268605c01beb257c9e301a42833d22965ea2ff0eda5f18427481a300a8f9aac3c42d9fb19a9a9aaf837b4b18b5df08db2ef86d69e10626363f9a0c04028"
1414 },
1415 {
1416 "0x290796408a0b8baa742b9d466afc4958528f7976fdce50caa83ed63285f58d200e4c65842ea24c3d4a3850a1824b61d25af9d3b41b9e64407a5262a75d9efd08481cfbc339ae26b0755438894b9e2298a35ed9",
1417 "0x4cb6f7935f5cc586320c6ce957f82cff774cde7d4201735a5acd22190fcb1c9c16d1887a",
1418 "0x4012f193141884040008406007580cfd00481c794201220210450018094b1c0010810858",
1419 "0x290796408a0b8baa742b9d466afc4958528f7976fdce50caa83ed63285f58d200e4c65842ea24c3d4a3850a1824b61defeffd3ff5fdfe6727e7eebf7fdbeff7f4cdeffc339ff7efafd76398fcb9ebe9ef3defb",
1420 "0x290796408a0b8baa742b9d466afc4958528f7976fdce50caa83ed63285f58d200e4c65842ea24c3d4a3850a1824b619eec0e40eb475be272763e8bf0a5b2027f04c2868138dd7ceab87621868082be8e72d6a3"
1421 },
1422 {
1423 "0x14e55ecb09d8c6827022df7c713c05a5d882e25782",
1424 "0x2dbdb54cb6341fcea6f67cfaa5186aa0a91b9782e362cbb0dd0ef3cbc130ce0cb2ce7232c0562",
1425 "0x10600e020898048060209c1000200124c002200502",
1426 "0x2dbdb54cb6341fcea6f67cfaa5186aa0a91bdfd7eff2dfbcfd2ff3eff7f7dfccfadffa3ee57e2",
1427 "0x2dbdb54cb6341fcea6f67cfaa5186aa0a91ad9d70fd2563cb529f1e636f7ddcce893fa1ce52e0"
1428 },
1429 {
1430 "0x2b0dfd23fc740e1759697bcba800aa1be7df28c59fe72b9869766ac34ecb4e5d0dbc74c2cbb5f734bb8d38dab59c3f22cdc706c657839580c2793c4c7660606548c048a697db3dfbad82e695c605",
1431 "0x33080f6fd52aeca572f24a98ff19b9e7327c3b951ccfd8c9a6b9bd6f7c940079e4be88178a2a6d5a2b17",
1432 "0x30007249108288030900a00cd0100c612001180004918482620206548800020849a0813880264100205",
1433 "0x2b0dfd23fc740e1759697bcba800aa1be7df28c59fe72b9869766ac34ecb4e5d0dbc74c2fbbdff7fffaffcfff7fe7fbaffdfbfe777ffbf95defffccdf6f9fd6f7cd448fff7ffbdffafaaefdfef17",
1434 "0x2b0dfd23fc740e1759697bcba800aa1be7df28c59fe72b9869766ac34ecb4e5d0dbc74c2f8bdf85b6ea7d47fc76e75ba32debf2165ffae15deb6e485d0d9dd0a345448df7365b5ec27a88bcfed12"
1435 },
1436 {
1437 "0xc0cc21922748d7626df1ab92b4ad4df1861050ca7de74adb92a140",
1438 "0x3531a6880ccc47bc3826056efe912f3db02df9c0b6931e253ab9248f472359fe59218690f6781f35da89b8f1ff45cd5a1db9a414c9d7ec62ff5859a1572b1c1880a99aa74ebe8b12c68e791c11dd6cc0e5ed5",
1439 "0xc40192054091400800898234a948b104004080410542c8020040",
1440 "0x3531a6880ccc47bc3826056efe912f3db02df9c0b6931e253ab9248f472359fe59218690f6781f35da89b8f1ff45cd5a1db9a414c9d7ec6effda59a377af7e3edfbbbbaf4efedf1ae78f7dbfdffdedf9effd5",
1441 "0x3531a6880ccc47bc3826056efe912f3db02df9c0b6931e253ab9248f472359fe59218690f6781f35da89b8f1ff45cd5a1db9a414c9d7ec6ef39a408323a66a3e5fb3238c046a540aa78b75bbcfa9c179cff95"
1442 },
1443 {
1444 "0x68cbb0a526d1fa61003e12401db51090fa4649b00b7be7465d0eb18f74c86157a919",
1445 "0x1ca7d6f9bc3e11d3c365af63bf9499b6c7e9c569da7361f0214b8d",
1446 "0x1610001c111080600641b00019a6464904218a704060010909",
1447 "0x68cbb0a526d1fa7da7fefbfc3fb5d3d3ffef6bbf9ffbf7c7fdcff9df77e9f177eb9d",
1448 "0x68cbb0a526d1fa7da7e8ebfc23a4c3539fe92a0f9fe25181b4cbd85507a99176e294"
1449 },
1450 {
1451 "0x210bef18d384992c5eb72e2b362c7296d9810f5ba9fd25e2d5648989d65095e45d1478f2a83140a0f68033a08fa3d7c392a3dc77e8e6aeba9ed76038e9e7825255fac990bf1098e6f9cba0",
1452 "0xdb48641b3f63e5f1f41ff3b1578c4b190de42379d45cba03c4c6f34b1b14ea930fdff90dca53116710228e45b081fbddc9273a542e6f689642453adb91086bdb99681342113262d67f5517f2691024fe367459b01872549211067798063cc00b16c883b8cd2ffaa6d6116863f204bb23ce26c5bcdaf3e1b816dcf65ca",
1453 "0x21014200d280002452a52800062c309681000113202d25e051640081024081644510008220010000660000208c00914080238c52e8a22c201686202049a20042445ac9803e108064c94180",
1454 "0xdb48641b3f63e5f1f41ff3b1578c4b190de42379d45cba03c4c6f34b1b14ea930fdff90dca53116710228e45b081fbddc9273afeffef78dfd2c5fbfbf3bb6bdfb96d9b52f5baffd67f7d57faf99d65ff7e75d9f79f7ad7961b0f7f9b3e3cfa3f7ef9abbdcf7ffeeeffb9ed77f38ebf7bef27dfbcdbfbf1b99efffefea",
1455 "0xdb48641b3f63e5f1f41ff3b1578c4b190de42379d45cba03c4c6f34b1b14ea930fdff90dca53116710228e45b081fbddc9252aeadfe250dfd080d1a973bb091cb0058b52e488fd04217841baf18d41f7683188f79758d7861b091f9b3c343a366af1a9850a5174cc3db88515f18a255beb039a1043f810b198b36ae6a"
1456 },
1457 {
1458 "0x143143205d76a7287d48be24db8fbfe37c291d82e103aa05cfc172fb920f0e8cc15c47de948b964e39be34a5b8a2610198c0c5b98543e6e727be153cfff0338f229cc22f029e04f766c62988634fee1a0a16880c93e5b10bada4018b6765b54c08f5710344dbfb9e9ad5dd7914cab496b22a6",
1459 "0x2d58b8b513f4bceb8300f8b978e31c163f36155e9678bb0f221ee7cbcf7262b9d53c7a395ea916218fa2478baada74f3e69df63a7be0c9554c07004f9e4d869642bbd63a9fe07138a6aef7ad14c74231cf6401c597f9b6d15c266c42c28613838609bd4f4522c9eb65fc8456acc339c641ac7d7b7bc2c48c8f2",
1460 "0x100201970a308140836045a8638a30c201c82c103220089c1307a100e0804010c0246808a924431a614a4382260011040050005024486060211143a902001208482270014044220c620004107e8120014000c02c080038184018947452048086570004488c31882418c79104a8084800a2",
1461 "0x2d58b8b513f4bcffb343f8fd7ee73c7f7fbe35df9ffffb7f2b1fe7ebcffa67ffd57efbbb5faf9ee1dfe7df9fabde7efbfebdf7bafbe1c9ddccc7b9cfdfefe7b7febffefffff3ff3abeeeffaf9ec7f777cf6d89e7dfffbedb5eae6cd3e7b71bafa609bf6f65b7cdebf5fd8756fffbbfded5fd7d7ffbf6d6beaf6",
1462 "0x2d58b8b513f4bcffb243d8e40e44346b7788318519c758730b03652accd86776144e81ab51a79ae0d3e5991f214c3aca58a95382d981c8cd8cc2b9caddab61b1fcaeeac56fd3fe1a3a6cd8af8ac3b557094d89a6d817acdb4aae60d12737182e22083628209785e3908d87127738a75c9471046fb176523ea54"
1463 },
1464 {
1465 "0x258e988b847b06b73462629161e28517f7b9ad7b5c19a9ad2c07f9a66f33fb2220fddb5a33b9cd5c2d63fd543efa1bef16e26b95484d70d0d7cfce28491ace0a608fb6cf9e97cb88d73c96c9150f9ef53c5e75bd68805fdce891e5935e9428ca67eba1e345148fcf2",
1466 "0x1857c0e26e0476169cf804c8d5a431022cce0da75d7642a2414a900370f201f5073c7e700ff6626fbd8a104182954fa9f23a45474af5456a00e36f6a6c8162afdf7492d387a455dd8506167d5cc24e6861d7b480b1458230",
1467 "0x1812c0a04000121280780040d12430020ccc05a319144082400a900360a000f10624385004d6000d3c880000808440a0003a44414874000800c16c0040816203c56412d2800455cc8106103548420c206092140011408030",
1468 "0x258e988b847b06b73462629161e28517f7bdfd7f7ef9efed6dcff9eeef7bfb3222fdfbda77ffed7e2d77fd543fff3bff56f3eff748ff76f6ffdfef2c593bdefaffafb6dffebfdfdef73eb6ffb7cf9efffdff7dbd78fa5fddf8d1e5f7dfdc2ceee7fffbeb4f14dfef2",
1469 "0x258e988b847b06b73462629161e28517f63cd1757af9eecc45c879eae269b83202313b80466ea9760977545409f53bf04691ac7248b216f62c176f2c51339af0ffac129bea389fde7732a03fb3c788dfc1a93c9050fa1a8130c184f48b580c2ce1f6daab4e00d7ec2"
1470 },
1471 {
1472 "0x328edc02c67d84bf095ac048e50c2dc29cffc08184b11e4da02904be14eccd317e9f6bdd6fe2b8233e8928d65d4ad434ef8a629cae6013bfb3c54be167e16371dc6412b62c2b1213424dfb7d391cea8a7494a28576ce823d8e111994182909efba7dd3533dbbe510dab4ac5ef",
1473 "0x61a1365a1226597896c514f5bb16a064f6ff6982ac91ea568daa43e473aa63867bdb628e92e97ebd4f2091",
1474 "0x4121224210201020968510918a00a04042284100a801c84001884180108a63865911228a92410ca94a0081",
1475 "0x328edc02c67d84bf095ac048e50c2dc29cffc08184b11e4da02904be14eccd317e9f6bdd6fe2b8233e8928d65d4ad434ef8a629cae6013bfb3c54be167e16371dc661ab76dab3277d7cdff7d7f5ffbea76dfeff7feeecb3faf79dbb43e6f3befba7ffff73dfbef97fbf4fe5ff",
1476 "0x328edc02c67d84bf095ac048e50c2dc29cffc08184b11e4da02904be14eccd317e9f6bdd6fe2b8233e8928d65d4ad434ef8a629cae6013bfb3c54be167e16371dc6208a5498a3076d5c4972c76475be072dbcd73eee44b232b79c330266e3349821a6ee51552cb8731605e57e"
1477 },
1478 {
1479 "0x37a92944b67fae733d201c024838975531bc3f748d98089eed38faed40c9463441cf48ac40e98097ce75db2bf0120ef69087a176d31d562cc99137c67e4a659cbb1298ba150aa191ced4089deee7048511de602414936af93cb2cef1b7ee801d9b75d961d33bb2958669b16193abf7b55ccfebac3a490415128dac92",
1480 "0x6fb8d83d986c4604db1b9396493a0a68270806cdbcc3299a049ebe77bd6891258e6313c720fb1b30ae9c4387ba51db3325e15033d9e01d499707c138b4cf4b85032da65e9ce3aabc5effbf7003771476ff71e86f665d2d3e7578dfcbb8f08c1619f609ec147f0",
1481 "0x88c811882c440490030014400a0008000804c51c822900008e2800380001218462008100780320a6184381280181102001102140801c4810004118a4024101022d824a0ce30a3c4801993001161432bb2148660214093a357855c8b8b080041040012810490",
1482 "0x37a92944b67fae733d201c024838975531bc3f748d9efb9feff9feed60cdf7bd79efdbace6ebf097eeffdf3bf9b24ffff7fff7ffd35df63dfdf33ff7ff4aeddcbb7bbdbfb73aff95cffd9e9dfeff74fd13df6cf4bcd37afb7dfbcefbbfefefffff75ff71d77ff79f86fff5f3d3eff7bdfcffefacfb699f759ecdeff2",
1483 "0x37a92944b67fae733d201c024838975531bc3f748d9ef3136ee17c292084f78d78abdb0ce66bf017a2ae171969b2471d77fc77ffc145b01df5e33877cd408c5883693da7a638ff84cde9969c3a7e74f902552cd0acc35823595b00cb1c2b6fe66c75ee109454458b009fd4b3404ca038a07464a4fb289b758c4ceb62"
1484 },
1485 {
1486 "0x1ab020d8beb54c354411f3a5658b5e5e87a896d7049c5eab20a302b6e35ca98364d7edd00eb3e209dcb035fe4b6eeace4e525229bf790c67bae63821e1282712d7c624efa64b3e5ad1a73aeb1033d4cd5949d63183173632445c9f488e74cd",
1487 "0x4d706a200a7a70e0b6eeef2dbdb88779dd50af16e6405c17fd2c2efb5493cf13b730207a009a14ca150042af3e6b7f05230161a10073f87a56afede3c2cfd09857f78d7913cdd966e9a2e6e6e3",
1488 "0x45000000a2a20a002a6e30ca9800451cd500e12e2005c10352c0a6a40824e1212202078000210c21000402826025704200120010052d02212ab0023c0cd5008563181111200404489008664c1",
1489 "0x1ab020d8beb54c354411f3a5658b5e5e87a8dff76ebc5efb70e3b6feef7dbdbbe7fffdd0afb7e649dcb7fdfe6ffffedfcf53f739bf7b0cffbeee3d21e3af3f7bffc727efe7eb3e7bf9ff7eeffdf3d6cfd9d9d7f78f7f37ffdd7effeaeef6ef",
1490 "0x1ab020d8beb54c354411f3a5658b5e5e87a8dba76ebc54d15043b4580c71143be3ae3080a1a5044980a7c8d26595be5d8141e5199f030cfdae2c2d21a3871979a8c307eec7ea3e2929dd6c44fdd0160289d181c60e6e25ff9d3a76ea68922e"
1491 },
1492 {
1493 "0x85993ec08ac960d46bcba87136f24042485c6d3e0a9973e828df60e537860d6bc83dafa7fb292beef466d0a939ab9da2b",
1494 "0x4c9a310b11d6e4b4d29d7ede30fb42161fd6a58792440f416abda6df55913a8a26c35140524de5dd9519c30f19641f4f0863bfefc2ae6c89333dd77d6f688cffcbde281772cee0dac9bb0dd16b6c1d33fa7e39b2e781896dcc2b0aba3abedf1381f9f38eb210f5bd2001ea8453ceb136dc3915fabdc30709db0b1a07ec40be",
1495 "0x811926c08a08601002c8803022a2004040180d1e0889210808d2000420040c6b002d83815b290820700490a1202a8402a",
1496 "0x4c9a310b11d6e4b4d29d7ede30fb42161fd6a58792440f416abda6df55913a8a26c35140524de5dd9519c30f19641f4f0863bfefc2ae6c89333dd77d6f688cffcbde281772cee0dac9bb0dd16b6c1d7bfbfe39bef78dcffdfeaf1bff3ebeff97c7fbf3afb73ef7bdf60ffbfc73debdb7defb7ffabfffef4fff0b9b9ffddabf",
1497 "0x4c9a310b11d6e4b4d29d7ede30fb42161fd6a58792440f416abda6df55913a8a26c35140524de5dd9519c30f19641f4f0863bfefc2ae6c89333dd77d6f688cffcbde281772cee0dac9bb0dd16b6c156a6992311e718ccfd176ac19d51ebafb96472a1327252e7730d60fb9fc33180db506c36a482f7de84fb601899d559a95"
1498 },
1499 {
1500 "0x4d9f3e8aae22123e382e7835d3d9d7e944a5c81cab3415fda40d0ec8fde8a50d8b21b2298f83a65bbdb10d120d302d8db4e9807715be0e",
1501 "0x4dacc1a6f2cecd4179556cbbdfe1cedbc952de5232ff1fe1ae9c0c3bbfcd9087e4ed5bcd1f8c289b1456ef032d888",
1502 "0xa48104308c4c004854008a93414eda4050cc02128a10c0a2180018b8080083c00051001300089b0410070109808",
1503 "0x4d9f3e8aae22123e3cfefc3ffffdfffd57b5dedfbffe1dfdbc9d2fedffeff5ff9be9f2ebbfffff5bffffddbeddf8ef8db5edeef737fe8e",
1504 "0x4d9f3e8aae22123e3cf4b42fbcf53b3d53309ed716ca09101898232ddec754f391c872ea347f7f53c3ffd8aedcc8ef0405acee87276686"
1505 },
1506 {
1507 "0x28d61d5ca1f56b4d3134009f478b17ac208a5b559d9c3726a7a16919e3b12ec6d61a142dc04d834141a9a4",
1508 "0xb444947aba00d50e10326ebea7a2618a10144dde07c15c685d4785eae16d232eb741bc2a09b7cf794a33ed3598803ad61af",
1509 "0xc00104a1e06a041020000445801404008050501c8c160222a16019c2a00a44d610002cc04980010121a4",
1510 "0xb444947aba00d78f71f7eebff7b6f39b501dfdfeb7fbde68fdf7ddfbe37f6b7eb7d1be3b1bffef79eb73fd35d8b43ede9af",
1511 "0xb444947aba00d78371e7a4a1f116b299501db9a6b6bb9e60f8f2dc33221f4954a1d022111b5ba218eb71313140b42ecc80b"
1512 },
1513 {
1514 "0x1b9a0b9c87fa234d05d06e18171cce3f8fc4adf7f75a402c4c5a281f46e714b96badab2184546aa11a7be482616cbb973da00e329628d3e692b69b43d34391884d87fcd64e2339fbb30044a370fffde97a128d1e5",
1515 "0x7d641e556550c3ddb89ee553cbc0d8d92cdaec6519a2ff3bd792e0b309c24cb49056fb219ef4dfb2a72e76ac7df3407a44e55af5689e9c85c87e74d542dfb445f56a0a518c",
1516 "0x78640a55655080008084a001c0405049049ac8201800462a1182a000000248b01052002108608d32212a60a43d30001804c05ac56082108588300440020fb4449520085184",
1517 "0x1b9a0b9c87fa234d05d06e18171cce3fdfc5edf7f75e7dffcdfe7d3ffeef9dbbefafef719e7ffbbd7b7fefb2fd6cfbdf3defbe3bff6dfbeef2f7fbc7df7797ac4fd7ffd6cfebf9ffb7e74df77dfffdff7eb2ad1ed",
1518 "0x1b9a0b9c87fa234d05d06e18171cce38598548a1a2567df7c5b47d23faea992ba6036d701e7b991c6355efb2fd4870de38cfbc2b796528cce051f1840c77962c03d25380c7caf1a734e709f75d04b9b62cb228069"
1519 },
1520 {
1521 "0x142cd4c71f04927a526ca430e542cd9432860",
1522 "0x1337869f6c145daf15b226485ef3c48b8037bf7cb2cc9834153b90f55d4217a5e4a9ea133",
1523 "0x142c90c41804103a106404000500c48022020",
1524 "0x1337869f6c145daf15b226485ef3c48b8037bf7cf6cf9f34977bd2fdfd72f7e7edbdfa973",
1525 "0x1337869f6c145daf15b226485ef3c48b8037ab50660b87308741c299f972f2e7293dd8953"
1526 },
1527 {
1528 "0x4f517f63e95a08284faaf4d4a290c334fc5d039e386727ddbb5d0a6d5fbb5540e97767023d60bedd158ed25051a6c56",
1529 "0x9e2c9c6d2e3be2ad25733871aeba4ba64081294478f936f9c4fc45ada6bb2c098c98f21e709a88995cc3b0cf7e693f8e73f58f8f4735c81e8421182fc15426174f3b6da7b493135c",
1530 "0x4f405a4269120008498a20c400808114cc190096200320c53b5808645318014040110200154020541186d2504120054",
1531 "0x9e2c9c6d2e3be2ad25733871aeba4ba64081294478f936f9c4fd57ffbebfac8b8cfaff5f7abb8cbb5fc7f0ffffef7ffffbf5dfafd7fffd5e8eb77e7fe3d62fffdf7beda7b59b7f5e",
1532 "0x9e2c9c6d2e3be2ad25733871aeba4ba64081294478f936f9c009525b982e8c8b08625d533ab384aa130660f69def4df3a8405f2992ce7d4a8ab66e5fe2822dfa9e638082b1897f0a"
1533 },
1534 {
1535 "0x1713f8f439c07e35b741ec9b0bca80149a7ef129c73c23c34b4515d29dc7dec711007fa395ced70f3bebc6d229edb75bf04231f2414e0a826f3edae4edcf770d59650cc252c6a2eff07fda9baa70938085d1e15144a451d26304d8f3df2406b8eb40f4fae3666780d2e54cd93a5f17439a4d3656dc5d48",
1536 "0x328df4b64b0bd0fbea359666904ea4aa215b03727a70bda853b6cf612b12c3d56ee93b003bd00a7b9c1d6755f580b467deba33bf7f33da4c37fffe79e73e4381ad4bf1306d1b58f5eb276cae813d6f9153d1294c51098d37b3b80154da",
1537 "0x108094864a0310006a219446900e20aa005201603250b00011b241400a0243144ae02900330008610c004244a080b067da9a22301300804021514420411243008843d12004184840e02260260100428140d1284c110188053210005448",
1538 "0x1713f8f439c07e35b741ec9b0bca80149a7ef129c73c23c34b4537dffdf7dfcfd1fbffb797eed74fbfebe7db2bffff7bfdea73f6cf6f2b92effffeedffcf7fdd5b7f9cdf77d7f7eff47fdebbbbffffb3dfddf7fffefdf7fe6385fdfbff346fbbfbf5ffffefeee7bdfff55fd93b5f574b9f7fb7fedd5dda",
1539 "0x1713f8f439c07e35b741ec9b0bca80149a7ef129c73c23c34b45275f697195ccc1fb959603a847419f41e7892a9fcd2b4dea62448e2f2190acebb40dd6cf4cdd531e90df3593576f4418042199cfecb35f9dd6aebaddb6ec208575b82e146ba3b3b51fdd8fc8e6bdbd741f081313464a177a85eedd0992"
1540 },
1541 {
1542 "0x68bc9c8f8257c6c88c0b2d46defc4539748fb906140acbf1a68820d1748bfc13ec84619f2b495d1ce74e0ca441a246497",
1543 "0x2d30db90794c4b611858b19c973ea865904346738291751ba5fccc5cbf02c09876aca6bf23289174f545ad8039e0fbcefe359521dfc9681a7715e672fdc23cc446c7900851d2ed09568729c88bf9653c63f7e229893f31059e8b51924a54968d44e5bb26decae3159ce786d9b3a1454c6d6cb8108d22bd5111d2cc7eddb",
1544 "0x68241c03824200880c0105068a50000854868904040a02d0828000906482d813a004400d2808100c220c0000408046493",
1545 "0x2d30db90794c4b611858b19c973ea865904346738291751ba5fccc5cbf02c09876aca6bf23289174f545ad8039e0fbcefe359521dfc9681a7715e672fdc23cc446c7900851d2ed09568729c88bf9fdbceff7f7efc9bf3b2ddedffdd77b749fbd46f5bbefffeeeb35ddf78ffdb3edc56dff6ff95d9de7ff5db5d3ee7eddf",
1546 "0x2d30db90794c4b611858b19c973ea865904346738291751ba5fccc5cbf02c09876aca6bf23289174f545ad8039e0fbcefe359521dfc9681a7715e672fdc23cc446c7900851d2ed09568729c88b91d9a0ec75b5ef41b33a28d855add77320193442f1b1ed2f6c6b354d930d25a04dc12df247f14d91c5f35db5936e3894c"
1547 },
1548 {
1549 "0x6eef644a36b1e052a413160909a537f81d46b2d330981f507d84737065541b5bb5faebfa8491dcd0347fbe498a501e254b91f6d82d6771a69d0aee5a490e2a44a8ba4f5da963d70b486f36f4a65f372a6a60522cac6e6a01d1a2da8743d5381",
1550 "0x391d108a0ba169bb746b3d5816fa985288c230bdde7e3b8433f8d595b63f08a90448923f30926960cf736be42e377b087e68848af89d80d95122b942b0162153d9d665c0e3508d8a25c8862c0bb7ad4f00e4b1213326f5ce32433df12cb9",
1551 "0x3004000a0a01280130601018127a8050080030098074038003300415003508090408800910800140cb6008a4002250081e688082701800d00020a000a004000380d4408021508482214802240332a406002080002220150a200034310081",
1552 "0x6eeff5db3eb1fa56bfb756bbdda57ff99d6ebef33bddfff3fdc77ffd7d5f7bfbbffaeffba7f3ddf6b67fff7fbe52ff77fb97f6d86deff9fe9d9ffe7bdd2f2b66bdbfdf7ffd6ff70bd8ef7efce6dfbf7afef05e6fbe7f7a6fdde3feb7dfd7fb9",
1553 "0x6eecf59b3e115a443fa450badc245851986e3ef03b45f8b3c5c74cfd3c0f78ab3f6aaf73a762d5f6a273497f3412fd52fb16105065c8f87e909ffc71dd252b26bd87d23bf56de20390cd6a7cc49f8c50be905c67be7d586e8d41feb49cc7f38"
1554 },
1555 {
1556 "0xa210334e6ffbec2fcfa42021075f84222c7",
1557 "0x181b940df674ffa93b3346264fed88e40b8d8f252487bc1f2cb4c3284fa17145d2cd0c77102fc177898e53fb12c40525aeb017a57661a80a268f27b4c78cbb4bae0e96ed0065e32bc7dcb01be9cc4e6bd5db5e453e94855cb2d1d3f86e8218fe55035102fc10901add0eb539089af",
1558 "0x821032440351002c0080000106150000087",
1559 "0x181b940df674ffa93b3346264fed88e40b8d8f252487bc1f2cb4c3284fa17145d2cd0c77102fc177898e53fb12c40525aeb017a57661a80a268f27b4c78cbb4bae0e96ed0065e32bc7dcb01be9cc4e6bd5db5e453e94855cb2d1d3f86ea218ff5f6ffbeeffdfb43afd0fffbd2abef",
1560 "0x181b940df674ffa93b3346264fed88e40b8d8f252487bc1f2cb4c3284fa17145d2cd0c77102fc177898e53fb12c40525aeb017a57661a80a268f27b4c78cbb4bae0e96ed0065e32bc7dcb01be9cc4e6bd5db5e453e94855cb2d1d3f86e2008cd1b6caaeed3df343afc09eabd2ab68"
1561 },
1562 {
1563 "0x2db0666cd0edeeab9e46e5b729521be3ece0714ffeefe18cd1b8b0f17e04c51b0d79fc6d428c22b9af63756",
1564 "0x1c1d5f18453c10d365065465c676fb8b58cb436b88660a0e19c350feb1f6954caf029a43a3e59bb35ce0bdbf80a7b8ff4b4f5d7d133bd244df8813e9695b1a6af9cea293e5da9ce4f8e1035fc8ce4ca62ecbec89e89fe25053e4153899415f61c41fcb412f13b58ac70fb84077831497f",
1565 "0x8906468c0014e888e44a426094009e08ce05043e4052088411820c01e00410b01318845028800318300156",
1566 "0x1c1d5f18453c10d365065465c676fb8b58cb436b88660a0e19c350feb1f6954caf029a43a3e59bb35ce0bdbf80a7b8ff4b4f5d7d133bd244df8813e9695b1a6af9cea293e5ffbce6fcf1efffebde4ee7bfebfe9bebffe2715ffefff99dd1fff1f57fcfc53f1ffdfeef4fbc62ffaf77f7f",
1567 "0x1c1d5f18453c10d365065465c676fb8b58cb436b88660a0e19c350feb1f6954caf029a43a3e59bb35ce0bdbf80a7b8ff4b4f5d7d133bd244df8813e9695b1a6af9cea293e5f72c829431eeb163500a4399e2be920b7302211c1afad91590e7d13561cf84341ecc76aa4d3462ce2c77e29"
1568 },
1569 {
1570 "0x33de1dc3fc5d6eeb5cbca27cc816a3727d1f9188400ea6b2c2799a40f7e611770b45cac7ed49fc0b66a46fcaf2393c0e03741bd08d26308fce62b0c56fbe44cb0949990bc3d4e5919ee1706dce518d6a06e865bdc26e761ef6723241b33583262bc4365103ba49dd17c0",
1571 "0x148a80223564208532d09dd94cf189921325cad8f2a6a32568e36b2007f00866ce0c8e59034cac999f915817492737af76413832e2c4e840627b91b54766a1555e91b87b2692df16c41161184ac9a124d59aad5c06b1a61892cf5c0cd6cc628f764a161f1bdd6546cb51a1510eef5ddfbd",
1572 "0x1121081d84c608910102048c812a222250881080006a00042480800510200240905804005492403262441083220040800601b9085062081444290806b2600cb004011010040c18104c1102d4c0081220080451c00464402867202001311812402c01001010a495d1780",
1573 "0x148a8022356420b7fedddffd5dffebdebfa7fed8f6a7f37d7ff3eb600ff6bae6ff9eceffe75dff9bdfdbdfff49ff3feff66ffaf2fbfcee43767bd1bd6776afdf7eb1fd7fbed6df1fcd996bdbdeedb1bef5faedde57bdee1efaeffdcefefe7eff767a57bf3fdf676fcf77f153beefdddffd",
1574 "0x148a8022356420b6eccd5e25119f62ceaf87b610e405d1587772e3600956baa4b796ceaee55ddb92da5b9ffa00db3cc9d22ef2c0dbf8e6431660413861562e9b3c217d1498d6141f8d886adb9e2c30ba34eac092573ccc1e7aaae1ceb8ba7c79047857ac2e5e436d0f67f052b4a680c87d"
1575 },
1576 {
1577 "0x683d881de1820ee9fbb71ccd74fd10e3a9ce71bd132955b9e9840d9259275498d2fae81b112416f37e9af907c319657d5d81623462b98d93818a23751a2196de6dd7c18e05960",
1578 "0xa9a2ae43423e6c78cc59ceba6601f6d85397527c462767dceeb1ebc6ad425fb2810a2b7525",
1579 "0xa880a002402e24688c104c300601d4d81203422800012018a2314182094046900008205120",
1580 "0x683d881de1820ee9fbb71ccd74fd10e3a9ce71bd132955b9e9840d9259275498d2fafa3bf53437f7ff9efd9febbf657f7d857b7567fdeff7fdceeb7fbe6bd6ffffffd1aeb7d65",
1581 "0x683d881de1820ee9fbb71ccd74fd10e3a9ce71bd132955b9e9840d9259275498d2f07231f5103515b9163c9b28bf056230045b41457defe5fc44c86ba64b42fb96ffd12cb2c45"
1582 },
1583 {
1584 "0xa827c5e2bd4293ed726065b32cac5c18d9df68b18300848f23f98c22fecd6b9fe7ed38a5adedd78f8dfe975d85c171f62b766947d7cd3d2ed3be52b50b792c0d6bb2701e28f22674a092e5ee0ec89bcd52680c6ae673a",
1585 "0x1deac63a0a7ae71db949662f05aafcefed47a6c6dd5819dc82d250d978001903a1f19e1b8b44e76bd5899884bb97121fa13a63c33822314a486d29b59b66f141fd64af3414a3ea6bdca9b4362e704c744e8a12c1ab736636ca3aa9da4b75795f1a",
1586 "0x202040a28c429068606045810c880c00099700018000040921b88402768d48998049382121e813860c328201048000d20b502047140d140ad30042340239080943226004004020202012a52602488388102004428471a",
1587 "0x1deac63a0a7ae71db9496eaf7dfeffffed7ff7e6df5b3bdec7d3ddddfe8b1933a9f9fe3f9bc6efefd7b9fefefb9f5adffd7afbdff977f95e5f7f6bb7fff6fd7dfff6ef3ff5abfaffdee9f6bf2f71eeff6eef5ac9af7fe6fecbbefdfecbf7ff7f3a",
1588 "0x1deac63a0a7ae71db9496cad79f4d73bc47971e0db032b164713dd448e8b0133a9b96c241386c887033066fa681d48c17c429b1cd157e9165f724b02fdf28c3d2eb6420ff188badc4e69628d0971aefb6ced58c8852d86da43867cfccbb3d73820"
1589 },
1590 {
1591 "0x1cc981657c8a20f5c777fc1df0e3cde0b23d434e043732dcaaa0758e009a8d1bf8591ff8db693d676eff2c39645b79c06b510ac22b1b47551eb728aa9404c24f2a6dee6bbdf2276759786f4116d21f4009dd6fb8e277976668bd021effecc797ca23682b97dbdffb93333834b8bb8fb68e922f42e3c00111",
1592 "0x1e52f1e05fbedda88873e9984a7a19bfbfbe9ea43e30588f46317b5cadc8eb02d255875f1dde872476d05dec1164e46c7fcf3fd718fff34a80d4c6e951d10f6ae0225d00e3953e99e",
1593 "0x61010a002b094200063608808400824b2a69ea43a10000644110254014821000015865b0c060124668050200164c4687c823682187db14a801002814181086a60200000221400110",
1594 "0x1cc981657c8a20f5c777fc1df0e3cde0b23d434e043732dcaaa0758e009a8d1bf8591ff8db693d676eff2c39645b79c1ef7f1ec7fbffdfdd9fbfb9aeb7a5dbfffbedee6bfff7aff77b7fffcbdedebf6d2ddd7ff9fffff7676dbddedfffeec7d7fef3fd7b9ffffffb9f7f7eb5bdbbffbe8eb7ff4efbd3e99f",
1595 "0x1cc981657c8a20f5c777fc1df0e3cde0b23d434e043732dcaaa0758e009a8d1bf8591ff8db693d676eff2c39645b79c18e7e14c7d0f69ddd9989b12e33a559b4d18404285ef7af933a6fda8bca5caf6d2c851a493f9fe52105b8dcdfe9a2815036d0955a1824eb539e7f56a1a5ab79188cb7ff4cda93e88f"
1596 },
1597 {
1598 "0xb77c8e0971a4f32bc9539c14b542ed2fa08e87560981cbdca4ccf4f7cc04fe7546a4a7eebe2592d131329fd591f66728a4179e",
1599 "0x2fb77bc1694a8265e74ee9f41672fc681d72ea8eb65ef5807bcba4bc52ef9e381a4e4315a771497e506b734def1ca93dd519fe9e6944dd782380dff70b72798c",
1600 "0x327c080970a08222485180108100ac02a08e0012080101842048745048004c6504a025c4182492410010180180d6670820118c",
1601 "0x2fb77bc1694a8265e74ee9f416f7fcee1d73eeffbfdff79c7fffe6fd7fef9ebf5e4fc3dffff5cdfef7ef77ffff5eadbfffbfff9ef975fffff791fff72bf67f9e",
1602 "0x2fb77bc1694a8265e74ee9f416c580e614034e7d9d97a61c6f7ee6517d4f10bf4c47c2de7bd5858aa7a777b39a5a0d9a3ba7db0cb875efe7f611299023d66e12"
1603 },
1604 {
1605 "0x89a0fbe80f4c622f45f4f7a15d8dc23bff17d939349f39cffa643af024db78243fc46c7948ab14ea12595e8a6cf2196ed4f353d9b1b8834b96fb61073301b99af019f042b2215e8cd5f31cf65123dab47d6b697a",
1606 "0xc2b6f7a999af54a94c156f771b995b528",
1607 "0x22215a8890f108944102d23039012128",
1608 "0x89a0fbe80f4c622f45f4f7a15d8dc23bff17d939349f39cffa643af024db78243fc46c7948ab14ea12595e8a6cf2196ed4f353d9b1b8834b96fb61073301b99af019f04ebb6f7e9ddff75ef6d177fff5fdfffd7a",
1609 "0x89a0fbe80f4c622f45f4f7a15d8dc23bff17d939349f39cffa643af024db78243fc46c7948ab14ea12595e8a6cf2196ed4f353d9b1b8834b96fb61073301b99af019f04e994e24154f06566290752dc5c4fedc52"
1610 },
1611 {
1612 "0x61cc2de53fe06a0381ce0dc4999795469453324c9036484632c257f02dddee71188198ed649bbe9ddae347178970bfbd3f1f28a787ee407a433f8473ba4fb77940227b769c9d555a8a70917ecfd038f80da4c6d5dc7211cc468c69a2275cfc119f145d2887543bbeb24",
1613 "0x117135d192a9645062d1be59a1f8b151692159285e5877a0ae304521ad800f51fbba812d038e053cb79578c70cd34248a2b4026533bb961add83d9362893b74ce01695861c82b6f94f181feb4a957875c74cf1e7fe48dcc5196bf1214cc564f599168bf2fee1a07e617cfac992443fcdb28247",
1614 "0x1c408050b000202018205c4811200420452124800340802200250302051ca71108010cd24008a09402243138960ad983d13208103644000411800402a4f947100223020148554508a1011648dc010900d0004c454421180408c29a20204e4118f04192003541b28204",
1615 "0x117135d192a9645062d7bedbfffbff57e9395de8de59fff9fe794533adc90f75fffbad2d7f8eddfef795f8df8ed74bfbebfdae7573fb971bffd3f9f6aafbffece7b6b7fe5fbbb6fb7f9c1feffffdf9f5d7ecf7efffecfdc79febfb6d6ddde7f59dd6ebf6fee3f5ffe17dfbcdd2cc7fcfbbeb67",
1616 "0x117135d192a9645062d7a29b7fab4f57c91945c88211eed9fa59001289490c357fd9ad087c8cd8e25084f0de82050bf34b69ac5142c30111265028c4a2ebc9a8e7b2a67e5bb91202388c1dccfdfcb1a092e456eee9a421c696eb2b6d2198a3d485d2e33464c3d5b1a0650b8c40cc4a8e096963"
1617 },
1618 {
1619 "0x1af3ce2ba6101f661c52430ae7280e3491d8d044a6621c3ef348c4e6e45fc6dfc91ec46b27214a9ebff52a0922fdebf1e895cd7cc4f428c64b7b3c4711b53f1f04f25b2f63ba70f281f52cb8149509f1ad38156397556eedf9e5c72388364cdba9112913",
1620 "0x5c5811bd255dad9049ec956e6eeaa95895e56e1c5c03cbfe24ae065ac3f528fda51a966771d288dfe3aab7611232e6f6bde10cf0d97620ebde6370ab24dbdecd4d7783c05cc8579517951049f16b26cf1612f6344a669d93ac990a997dfb5180a07a75f6a20dc110fd5547e744cfe0b348cc1786d8c7f587dc83fd9e8fdb9",
1621 "0xa00e02861011200452010885280a201010000426621c10c3088462041dc61708124429240042183c050801205169510095043044f02006434024411130091000925b25000a00a201602098100501502c30046203140cc1786584230834481b89002911",
1622 "0x5c5811bd255dad9049ec956e6eeaa95895e56e1c5c03cbfe24ae07fffff7bafda5fef7e775f2aeffe3ebff7d9f36eef6bde3eff4dd7e6eeffe6ffcbbecdffeff5dffebff5ee8d7bfdfbf1ec9fdffeecf569ef6b7fbe6fd9bfff9fadf7dfbf7bba77f7dfff2cfc159fddf5ff7c5dff9f75eeedf9edcf7fd87fccfff9f9fdbb",
1623 "0x5c5811bd255dad9049ec956e6eeaa95895e56e1c5c03cbfe24ae07f5ff17929ca4ecf7a255e226ad6349fe7c9f36ac909c22e3c455384eae220e8c3ac89d6cbf59de683f0e68c5bac92a0ec0adbcea80549e9283f9a2ec88ff68fad65849a7bb07755de9f0c64059adca5d34c599d9c61e22c81884b5cd04b84e470f9d4aa"
1624 },
1625 {
1626 "0xcd10bb69c381582eff7391a446db73312e738c6978564b350ca88e09cad650ef89dfb4cb00831c41d4739e957fdac00124348c91183da60b8f12dd3e349cad8b8d752fd9ea5613b1a41818032e0a2f2030790009a4fe9cdca54f96402b143e",
1627 "0x7c4f944973a8882522976043833419c2c15b1531af1207b40092dd1e3c123a4cf06370c3111b",
1628 "0x104d140010a888052007404202101180001801200a020030000009043c10180440024003101a",
1629 "0xcd10bb69c381582eff7391a446db73312e738c6978564b350ca88e09cad650ef89dfb4cb00831c41d4739e957fdac00124348c91183da60b8f7edfbe7dffad8bad77bff9ebd737b9e6d95b173faf3f27b47992ddbefe9efeedfff770eb153f",
1630 "0xcd10bb69c381582eff7391a446db73312e738c6978564b350ca88e09cad650ef89dfb4cb00831c41d4739e957fdac00124348c91183da60b8f6e92aa7def0503a857b8b9a9d527a866d943161fa53d27847992d4bac28ee6e9bff530e80525"
1631 },
1632 {
1633 "0x1cdc2579b3f1727c03a0f733c6a1a50025c8b51640ed21fb0e700f873d35c83797a14",
1634 "0xe3e7298d39a9c7cd225125b1a01505e3d9ca63f8b494e4d7218b10e8bddc06984bbbe43e263f30f6a92a9d7",
1635 "0x10042120110162580220f03084a085000100a0144004004b0a600e063d30c02102814",
1636 "0xe3e7298d39a9c7cd225dfdb5f9b7f5f3fdcbe3ffb7d6e5f721afd8fdbfdcefb9fbbff43fa73f35febfbfbd7",
1637 "0xe3e7298d39a9c7cd224df994d9a6f491a5c9c30f8752457221aed85dab9cebb9b0b59431a102053e9ebd3c3"
1638 },
1639 {
1640 "0x3ac7a7062a50d421ec7b732acfeafd988b5fe95661d371a7f2fdb5b9c1d37e304dd3a0dfcb995e9f99e1b86696b54df83fcd4e87764ffe27fbbd785875c31993f20f4628df79cbaeb50c3dfd132e20935f33ee0276c23f445dff5a075a8198907c1e248787fb28c44495d2e2ed677832432eeda5026afb91467cef4b8",
1641 "0x12659e0b26181845981459681797ab57a50c5b4a34882e973f884d99c1e89c0457b99c9445be077039c60cffa057c608594d38423730d3eae76e8a8db6f946877e90bfecde4aaa320128ef3811cd31c3834e66fa7a61d1454778bf82781c091ae5fd348fd903d85116f83f331d84edaa925d1d65b0b30c1b7c6c69da380",
1642 "0x20860306081044000459600287aa5580085b481400021127804d9181c0900410099080458a0150198000b820168408580d0842073043ea276a88081071420112900f44084a280200200c3811012000834e22ea0260c0054458bf0200180118807c14048103d800044015120084652812410c65a002081b104468ca080",
1643 "0x127fdfaf263a58d5b9fc7b7b3fdfebffbd8f5feb76e9fff7bffafdbdf9e9df7e77fddfb4dfff9f7ebfdfedffe6d7f74df97ffd4eb776dffee7ffbffdfefdc79ffff2bfeefedffbfbafbdef3dfddf3fe3935f77fe7a77d37f477dffda7f5e899af5fd3eafdf87fb79d6fcbff3ffedeffab25f3fedb5b36efbfd6e7dff7b8",
1644 "0x125f59ac20324891b9f8221b3d5841aa3d8704a362e9fde6987ab02c78294f7a67f44f349a759e2ea65fed47c6c17345a172f50cb0469c14c09537f5ee8c859eed62b0aaf695d3f9af9de305ecde1fe3101155147817137a032540d87f46888275812aab5e842379d2bcaae1ff698ad2a01e338815b166e0ed2a1535738"
1645 },
1646 {
1647 "0x39d2210d760b098917fd1293f0708ed6ffcd7686a4041e774a0f52e808524d686429da6774dd45dcf69abb4a7a48116d71f8e38074196cddf128b041a28cdc1e12cf755c7",
1648 "0x59d65c9b948dab08f5c3604fb8b4d15085e4ae6ea8e762bbcceb904b3d9b5837977c4c9f2b9e9f3f8c6babd3b5e846ed8bdad898648bc4f8ccbea95d7a9cf5fd694e6b1a176058fbb30257aafa296741ab7181398c43a264a94972c08b4a5c56807a5f06b5b88eb420df822b43c43b400d0",
1649 "0x284221095208080003c41080b0200c529cc5740004001a17400852a000520868202140237081018c42822008484000094058428070190495b008b00082800802000b400c0",
1650 "0x59d65c9b948dab08f5c3604fb8b4d15085e4ae6ea8e762bbcceb904b3d9b5837977c4c9f2b9e9f3f8c6babd3b5f9d6ed8ffedb99ed9ffdfadffef9dffefffdffefee6f1e776a5ffbfb0a57effa6d6fdbef75dd7ddcf7baffeb7b7ad1ef7bfcf7807e5f6efdf9aeb461ff8eff5fd6ff755d7",
1651 "0x59d65c9b948dab08f5c3604fb8b4d15085e4ae6ea8e762bbcceb904b3d9b5837977c4c9f2b9e9f3f8c6babd3b5d194cc86acd391ed9c39ea5f4ed9d3ac63388befea6f04602a57a95b0a05e7924d4e9bcc055c7c50b538dfe3333ad1e63ba4b5000e466a6849a604617d0ef75dd6f435517"
1652 },
1653 {
1654 "0xcf08fe64414998cc59938913e660f0f9b221f459cd8e04126cf902d0b6cea0edc26164b9d84e9ce7dfe058c1fe0fb452848616368c3",
1655 "0x234286d14c1098ea9fd7f83508641ef3288da679fce09dd1359514ebf0dbcdc73b8f7f6171762d3d5df6492591c9386",
1656 "0x4000910810806090d1b02100400c820000247900c094c0208500616099c84618875f6050402c0d145200041000082",
1657 "0xcf08fe644149bbcedfd3cd13feeafffffa35fc7ddfff2c9feef9fef0bfdfb5fdd6ebf4fbddcfbfefffe179f7ff3ffdf6cda797ffbc7",
1658 "0xcf08fe644149bb8edf42c5037e8a6f2e4a14fc3dd37d2c9fca80fe302b1f9578d68a94621589a768a08129b7d332e9a4cda387ffb45"
1659 },
1660 {
1661 "0x343e32e61b86c0c7cc895cf233ea3d5b5ad65435c1f87e034b59788a9af14ffae9249f1f3cfe0789abbe8edc8ce",
1662 "0x63f7afb1dcebc9d65f9d468754ea558119988cb7d85e427003f2c1d9b360d2c75b97c1308ee3a7b5901044c6353e14f3e6b54a2ead64acdf914c6f7b6d4ed3205abdc78aa7bb47d548607b4ffe1db7331aac39c8bc7fcfd62238467352656a3ad04a423",
1663 "0x241e10440b024046c00058b0038a251b42d4402041487e010311188818c00c7ac9040218047202012a3a8048002",
1664 "0x63f7afb1dcebc9d65f9d468754ea558119988cb7d85e427003f2c1d9b360d2c75b97c1308ee3a7b5901044c6353e14f3e6b54a2ead64bcffb3ee7fffedcfdfa95efff7eabffb5fd75c75fbfffe1fff7b7aaebbf9ffffeff6bf3f7eff57edebbededecef",
1665 "0x63f7afb1dcebc9d65f9d468754ea558119988cb7d85e427003f2c1d9b360d2c75b97c1308ee3a7b5901044c6353e14f3e6b54a2ead6498e1a3aa74fdad891fa9064ff4609ae01d031c55bab7801efc6a6226a339f38526f2bd277a8d55ecc1845e96ced"
1666 },
1667 {
1668 "0x981ba5db1da1fe952887e32cd21d51ba024022c8d837ec00f9772a111f87644012cee4a01f66d09ef168ebdfb91232e9e8f65d63ee7e6e050ae9707e7b15df4f8037b0d8d427f32429a45312a24081ed5a9c8ec22358f3621c961349638f30e049d00d513901fe065d5364f4cfca93f14a2b1b",
1669 "0x1ba08accd8474ea8d9dc2f10d3c2c2edcbf9c3a909ab45",
1670 "0x38000c048400c0019002e00514240e4cbc883a1082b01",
1671 "0x981ba5db1da1fe952887e32cd21d51ba024022c8d837ec00f9772a111f87644012cee4a01f66d09ef168ebdfb91232e9e8f65d63ee7e6e050ae9707e7b15df4f8037b0d8d427f32429a45312a24081ed5a9c8ec22358f3621c9613497bafbaecd9d74ff9f9ddff16dfd3e6fdcffbd3f94bab5f",
1672 "0x981ba5db1da1fe952887e32cd21d51ba024022c8d837ec00f9772a111f87644012cee4a01f66d09ef168ebdfb91232e9e8f65d63ee7e6e050ae9707e7b15df4f8037b0d8d427f32429a45312a24081ed5a9c8ec22358f3621c961349782fba2c919743f9e0ddd1168e91a6190433505843805e"
1673 },
1674 {
1675 "0x1d9992a4fce731fe937e70ec9efba437b1efa9e5459e3145f8c9142c6988eca9a61273750bcc1f00a64b32bab5a3a4c89858231f4fedce7a73bcc7285bbd18b328ccc298919f5511e973cd124f7e1c3912d52f4593c676f1c3f87a521",
1676 "0x6e195204da93bdade43f0622217647326502417d70305d050d988",
1677 "0x421810045011a921c412062200300210250001447030410008100",
1678 "0x1d9992a4fce731fe937e70ec9efba437b1efa9e5459e3145f8c9142c6988eca9a61273750bcc1f00a64b32bab5a3a4c89858231f4fedce7a73bcc7285bbd18b328ccee99d39fdf93fdffed3f4f7e3d7f57f76f47d3ff76f1dffd7fda9",
1679 "0x1d9992a4fce731fe937e70ec9efba437b1efa9e5459e3145f8c9142c6988eca9a61273750bcc1f00a64b32bab5a3a4c89858231f4fedce7a73bcc7285bbd18b328ccac81c39b8f8254de292d495c3d4f55e74a47d2bb06c19efd77ca9"
1680 },
1681 {
1682 "0x123b8aaf5660144d596f10574b4c232f267222596831",
1683 "0x10ab460448ce805f18a3c1d64fc8cc0c02b2cd5f860d462e33602f09fd131e5468c86997e5a033729b2a03d3c284ee0111488ea",
1684 "0x1021028c0600144801270012000c2028066000100820",
1685 "0x10ab460448ce805f18a3c1d64fc8cc0c02b2cd5f860d462e33602f09fd133ffceafd6f97e5f5b7f39f7eb7d3f2f6ef2335de8fb",
1686 "0x10ab460448ce805f18a3c1d64fc8cc0c02b2cd5f860d462e33602f09fd123decc23d0f96a175a5839e5eb711f076892334de0db"
1687 },
1688 {
1689 "0x17529608c59c36277d9e89f9b275032e62ab42b4dc006f1943e12b088c36657b02937109db797e2fbb83c984f507841be083c5e36dd04a8b7d3",
1690 "0x1d556659e3b765044e08b1f7879bf057ef",
1691 "0x1814004940304104080810368500a017c3",
1692 "0x17529608c59c36277d9e89f9b275032e62ab42b4dc006f1943e12b088c36657b02937109db797e2fbbd7dfe5ff3ff65be4e3cfff7df9ff8f7ff",
1693 "0x17529608c59c36277d9e89f9b275032e62ab42b4dc006f1943e12b088c36657b02937109db797e2fba569fe16b3cf24ba4634efc15a9f58e03c"
1694 },
1695 {
1696 "0x23ed0547893da2de2673832f9e6d988ce38c44a47495c1e0a714eb2f18ec455157cc20ea9da75cdcb0c4e9afa546efb3650b7e5cb7e659359d17fe79d2d5116bcd6c5cca45e0719d063e7df33f6788e5c6bd77c114340748cf553c5aa4992076953c4904181e24bb7c26a6e895d8b808c70133b52c9ca4a2266c2e2302bf777",
1697 "0x3eaf5dd3cbba83558163fd16469a3d64905ff28ee65c15ff01f4d720b1ad669a893671bb614382f2331985333b0af52cbc0af22e50e4cb39d4ab3ad58127b3c481e692bb22dc0b497690e57e6fc84a87c2e1eb85e6c8bfc253fd497fc88",
1698 "0x20aa1d83489880448123a50646922500105cb286401415170070d20011294408080241a061010232311105230800c42c340010240040cb11140a2091002691040104101a20980800268085582808420102a12884a48026400221003f400",
1699 "0x23ed0547893da2de2673832f9e6d988ce38c44a47495c1e0a714eb2f18ec455157cc3eefddf7dffeb3d5e9effd56efbb7d6ffe5ff7eeff7d9dfffffdd7f5b1efeffeddfe75fb71df86fe7ffbbf77bbeff7bdffcbf63e57eccf7dfcfbbedda177b7fcc9e69abf26ff7f6ff6f8f5feffc8cf87f3f5ef9de6eabfee7fff4bfffff",
1700 "0x23ed0547893da2de2673832f9e6d988ce38c44a47495c1e0a714eb2f18ec455157cc1e45c0749766339168cc5850a929586fee034568bf6988e8ff8d05f5a0c6abf6d5fc345b10de84cc4eeaba54b3ef3391cbcbe61a57ac046ce8f19e4ca15126f8c8e28aa50667776fd07870a6d7c08d86f154c719426a99ae7dde4bc0bff"
1701 },
1702 {
1703 "0x4881b1172db56487aa0b4362479871a57",
1704 "0xd40bc374f241c2bb638ed6dea08d7885135052619d2f58523b3218b57371993a62bea6cfc8abf4abb8e4a96b0a38bbffffdd0bc5e5a6514f0db",
1705 "0x4081210228b16487880b4160061041053",
1706 "0xd40bc374f241c2bb638ed6dea08d7885135052619d2f58523b3218b57371993a62bea6cfc8abf4abb8eca9fb1f3dbfffffff0bc7e7e7d97fadf",
1707 "0xd40bc374f241c2bb638ed6dea08d7885135052619d2f58523b3218b57371993a62bea6cfc8abf4abb8ac28da1d150e9b7877008687e1c93ea8c"
1708 },
1709 {
1710 "0x1e0e22b43b6de9f7ee3000e87eef492f84ee1bcd3f490cdbf35171b174335fe53afa9b752d9b1e1b0bd58d71d35687cb7b74",
1711 "0xac57c7cfa532414e1182c7c499ffa996f7a28187f7f5d7586f0fd6b64e566bff1ff68daa60d7b650cfece99b8e2551941008aaa5ab966c526d584251600baf9f48d6b573e2779363363cea427961c0ac63d9c9abcc30976c3755b739dcbcccfbb7ae06b5deed54c59a5271caaa26134877898f75b065f3c72a8429ab5",
1712 "0x40602140a4429948a30000876c3410b008c0bcc0f0908c0635160914411052518aa82612483181803510451105280421a34",
1713 "0xac57c7cfa532414e1182c7c499ffa996f7a28187f7f5d7586f0fd6b64e566bff1ff68daa60d7b650cfece99b8e2551941008aaa5ab966c526d584251600baf9f48d6b573e2779363363cebe2fb6bc3beffdfffebcc3e97eef7d7ff7ffdbcdfffb7efbfb5dfff57c7bffe73efabb753d9f7e9bffdf8f7fff76afcbfbf5",
1714 "0xac57c7cfa532414e1182c7c499ffa996f7a28187f7f5d7586f0fd6b64e566bff1ff68daa60d7b650cfece99b8e2551941008aaa5ab966c526d584251600baf9f48d6b573e2779363363ceba29b4a831abd46b748cc3e1082c3c74f773d001f0f2763b980c9f64386afac226503914191c6683fc8e8b2eef242f89e1c1"
1715 },
1716 {
1717 "0x46529c1d4b03b4a0efd29ce200ce9564cdc4fa4b53b9b6725e3fffe3454d6e53848fa573858f0bdbcf846d790a5bfc7470d0b8ac1d494804fa7048b869d5e016e389bf93cb959469dca3f4c5e93f8bcb7dbb64bcec19c8d9dbc5f2cecb285d81f5fefe99ff4564662c7cc275a40f0ea519adb2",
1718 "0x1b10fed79bfd5e52ba14eea13cf223bfbeb5f42bd781083545c4306ed5f69250efc19707288aadf9df45b4056a293da0cfae076ee9b08e7a7058ef0a58e67149980cdc60a75825607ec4e531e9d036e71e3df52048853e3",
1719 "0x1010d6c518485a523810e0a13cf0029790a5b4034701080041c4100045a6000086811601280889f91c01100408083d004e82002ca190864a40408c0818a4510888008440075825601ec4440060c004271a00f02040801a2",
1720 "0x46529c1d4b03b4a0efd29ce200ce9564cdc4fa4b53b9b6725e3fffe3f54fef7bbfdfe57ba5cfebdbcfa67ffbeb5ffefd78d0bbfc5d4b4eedff796dbefdddf076ebabff9fffdfd47ffeb3fecdfbffffefffbbe7bfed9ff8fddfe7f6dfcbeddf8bf5fefe9fff4f777ebd7fee75e7df5ea599fff3",
1721 "0x46529c1d4b03b4a0efd29ce200ce9564cdc4fa4b53b9b6725e3fffe2f442832a3b5a405824c1e1c800a65682e104bec908c03bf8410a4ee9a5196db695cc90646b23600e3fced43f7e302ec913dffd25e6b3831be997387c55a2e6574be59b8b807ca89e130b3778b17fac0447d05ca191fe51"
1722 },
1723 {
1724 "0x1c61ea1ba6135d29a669cc258f24a09ce0c6af1fa717",
1725 "0x277557a8f45578e7730c64350cd3fd389bf96320fb3079402e9949062868fda63a6c371adf34952bd8fbf8a361671041556548ecabc7561f3febfcf26290dc819caa54b8eb26a7fb3a593202b2eb9a87fa214342ea4d639c3487882c7b6a03401d0715171c8ec44d45eff0c2571ca3f556d0d986fbeb5ff",
1726 "0x10416008a4005408a60804218a24000c00802f1ea517",
1727 "0x277557a8f45578e7730c64350cd3fd389bf96320fb3079402e9949062868fda63a6c371adf34952bd8fbf8a361671041556548ecabc7561f3febfcf26290dc819caa54b8eb26a7fb3a593202b2eb9a87fa214342ea4d639c3487882c7b6a03401d07d71fbdbee57dd7fff6ded75cf3ff5fdeddeefbfb7ff",
1728 "0x277557a8f45578e7730c64350cd3fd389bf96320fb3079402e9949062868fda63a6c371adf34952bd8fbf8a361671041556548ecabc7561f3febfcf26290dc819caa54b8eb26a7fb3a593202b2eb9a87fa214342ea4d639c3487882c7b6a03401d06d309bd34a5789775965e954451bf5f1ed5ec0a112e8"
1729 },
1730 {
1731 "0x259856f9c56582b4f8056fdbd37332ff6684ad104683782087ef2b965fa2d22153ca880d735c116878afac5b2477b7f",
1732 "0x1518494828299164e2ee455afe73cd24484df0def1e24c01926bdb2566d44e483a04bbdd5aeab159678305b6ade08cb5bc83e0e63a7bd9e2bb016c355f0fd9e94044e8e9dd380c64ea2f83d239d0987a6864dd1a07c9d742",
1733 "0x20105268c4008210c8040e438331122b2004811040811800044e0a945380c20002c8080111080120000d80002415342",
1734 "0x1518494828299164e2ee455afe73cd24484df0def1e24c01926bdb2566d44e483a04bbdd5aeab15967db85ffbdf6dcbfff83f6ffbf7ffbefff696ef55f6fffeb487efaf9fdfa2d66ff3fabd2fff5d97eefeeffdfb7cfff7f",
1735 "0x1518494828299164e2ee455afe73cd24484df0def1e24c01926bdb2566d44e483a04bbdd5aeab15965da80d931b6d49ef303b61b874ceacd4d6926e45b67ee6b483a1a50b8c22146ff132b52eee5596cefee27dfb58eac3d"
1736 },
1737 {
1738 "0xd8526c4a399bb415b422ab254fb7c9a053c1507e3260aac195366c5fed9ff583053547f1b8f54561838e8d5fff273e25",
1739 "0xdc8169197ca1b7f60394685c3438a5b9ff07c0deafe3d68064567be3d9ad3c577600e0d98c4bda37a6ed8175d437cded052bdf221c4c3d76221331061",
1740 "0x4002480a30180400b42028044527882012c14076200008808434205a6c981501013446d010b540218082854221231021",
1741 "0xdc8169197ca1b7f60394685c3dbda7fdff9ffbdfffe3feb274ff7ffbddbd3d57f726eafd9d5bfef7fefdff7df477ddff1fafdf761c7cfdf7fff373e65",
1742 "0xdc8169197ca1b7f60394685c39bd837d5c9e7b9ff4a1fc3230ad0779dc9129509526ea759518bcf258347e2de46499921ea48b740474d5a3dde142e44"
1743 },
1744 {
1745 "0x47ac96c78ee0c7a9906ce5af63d0ad1b0420e1ca783cc6904ee84",
1746 "0x630297e0f122e36f0c5f2f34efbb078c2f4c00e7c16f96cb054",
1747 "0x20028780e002a1000c452f20c0a90304204000600046904a004",
1748 "0x47ef96d7eef1e7ebff6cffaf77ffbf1f8c2fedcafffdef96cfed4",
1749 "0x47cf94506e11e54aff60ba80573f161c880fadca9ffda90685ed0"
1750 },
1751 {
1752 "0x432a40ea48fcb8b8161bc19a26b544f54833bf5e005c7d1c19e8405c5464c8c139fdd9b627865e596c513fc68454827f070310dd7efe80306693ce441c89a74d91db5e27d6ba966aa1e109cc8385bd86a23d127cf609eea4118e0e1d9be83b561dcffb0ec3844d22",
1753 "0x70d78d38ebcadb77733fc709a6d3b76576ca71acd7e3196640d6adc00225142070b943d5624a3a3d4e77a787d8221848ab06c5135",
1754 "0x50c7880002481864410882008011b560744a212482021004401009c002211020402002c0400820214836838540001800a80044120",
1755 "0x432a40ea48fcb8b8161bc19a26b544f54833bf5e005c7d1c19e8405c5464c8c139fdd9b627865e596c513fc68454827f070310df7ffed3befebfff773ffdf7dffdfb7e77febf9eeffff19fec8feffd86a27d527fff9dfff635afafddfffa7b7f9fefff8ef3ec5d37",
1756 "0x432a40ea48fcb8b8161bc19a26b544f54833bf5e005c7d1c19e8405c5464c8c139fdd9b627865e596c513fc68454827f070310da738653beda3e79332f75d7d7fce02870ba1d8ca7dfd09fa88eef6186806c507bfd9dd3f2352dadc97c92432b9fee7f8473e81c17"
1757 },
1758 {
1759 "0x7c4c2d104ca2a5c080fbf1e717e47f848ff9be3555bcff60c07907ade9e334a556157dcd28ebbfd73367defdc4d8f5de60815360394e4de6e7535d356ccb8a2d896157ba65a7e8541a06e604454aef3e8cebfc7aedb48466eb65039cf17c13fcdb1b",
1760 "0x2a73b2854f05d043d4e28e0b2634fd7023aaf3e57e58f213dd0693769",
1761 "0x2a0100804e00404084e2880a2604ac50000262a45018c213c10681309",
1762 "0x7c4c2d104ca2a5c080fbf1e717e47f848ff9be3555bcff60c07907ade9e334a556157dcd28ebbfd73367defdc4d8f5de60815360394e4de6e7535d356ccb8a2d896157ba65a7ef7f3a56f65d457fef3eecfbff7fffb6beefff77e79ff17dd3fdff7b",
1763 "0x7c4c2d104ca2a5c080fbf1e717e47f848ff9be3555bcff60c07907ade9e334a556157dcd28ebbfd73367defdc4d8f5de60815360394e4de6e7535d356ccb8a2d896157ba65a54f6f325216594177a1166c599f353ab6bec9d532e613d041c395ec72"
1764 },
1765 {
1766 "0x3ee957090c3ab10e1c8af669f2093bba430a4322a741522d2ce1d20b07558298627de3dbbbef8828abc64195bad0f9f6acbb734a420d0d8dd330e90d23ab633826a612060eb95070758199006b547b24792d59f97c3191b2dee7a96e",
1767 "0x7e30cfb7abf89648583c2f705f30abb997ded579a0de3172e2b546c920f92fbdf3bf5ffbd5d73620da518e7b4964a44505817d16c7028f4da494135d2589deffbfdb19f6a454f0431cda1884e51f48c67605f9f044e955a4f23da9dfa92af8dfba09ea6adf0390c",
1768 "0x4e102090838a1061808e20122091028020a02228701502d2c415202050500802014424010480000284000949a4041348018114a420d018d42004904218921080600100406205010040091004b005a0478000989782090a28ce0290c",
1769 "0x7e30cfb7abf89648583c2f73ffb5fbb9d7ffd5f9e8ff77ffe2b7ffed30fd3fbff7bf7ffbdfdf36b0ff59afff6ffebdffbff9ff9eff669f5fad9f9f7fefbffeffbfdbd9ffb75ef0d33efe3b86ef7f68e6ff95fff75cf9d5a6f77fbbdfbbffffdffb19fb6fff7b96e",
1770 "0x7e30cfb7abf89648583c2f73b1a5db295475c598687157edc226fd6d105d1d9787aa7d291bca1690af09a7fd6eba99febb79ff9c7b669616099b8c37ee3eea5b9f0bc12b975a6091266c2b068f7e68a69d90fef71cf0c5a2477a1b983bff67487910f1473179062"
1771 },
1772 {
1773 "0x20265b43c9319cd56eac6a02cbf7913ba44b",
1774 "0x995b92e854a8e0d548bfc02e18529b37790f0e4d9aaf36e7abc4a0f1e6d69489215aaa61b5863b1c86b3536b443dc639d1eb3db7789c2cb2f8cad1a74e5168ef33948c81a06fbad3b9ab0b7c84045cd1f77620ef43c7f2088d2901917bec5346a44f679be9491d273dbe5bf6e39095bb411cac63e38626013d671445c",
1775 "0x20261901493010c0462c2802401390310448",
1776 "0x995b92e854a8e0d548bfc02e18529b37790f0e4d9aaf36e7abc4a0f1e6d69489215aaa61b5863b1c86b3536b443dc639d1eb3db7789c2cb2f8cad1a74e5168ef33948c81a06fbad3b9ab0b7c84045cd1f77620ef43c7f2088d2901917bec5346a44f679be9491d273dbe5bf6e7b4bdbb59ddfeebe7a62ebf7d77be45f",
1777 "0x995b92e854a8e0d548bfc02e18529b37790f0e4d9aaf36e7abc4a0f1e6d69489215aaa61b5863b1c86b3536b443dc639d1eb3db7789c2cb2f8cad1a74e5168ef33948c81a06fbad3b9ab0b7c84045cd1f77620ef43c7f2088d2901917bec5346a44f679be9491d273dbe59f48624a92858d1fa8925260abe4474ae017"
1778 },
1779 {
1780 "0x20a92c71c161a786989694109718416d7a291b8f9c71a5a71ee827e003a5a19cf2aa8faeecbfa231c330e2d4c747b75ccc4d43d8c37472b60",
1781 "0xc2ba3ef844b62f020cd6e4b010499c2c28ab3c15ed2ef3114e5b806244e57be1a7d999a21399c1e950977f021c82a906bed39caeec6aa077628421f9d5dfed01b24fe857000e259537fbe07d6a83080080ae927512d4518f9a56f0a40376234855377d8ef40dcb6055bd8d351",
1782 "0x20282071400021809096840092084045000801851471a0250a80000000a480141280018e8816a020033022404507350cc40d4340413400340",
1783 "0xc2ba3ef844b62f020cd6e4b010499c2c28ab3c15ed2ef3114e5b806244e57be1a7d999a21399c1e950977f021c82a906bed39caeecebac77e3e5a7ffdddffd11b75fe97f7a2f3f9fbffbe5ff7eeb2fe083afb3fdf2fedfaffefff2b5c376e3dcd777ffdefc4dcbf8d7fdffb71",
1784 "0xc2ba3ef844b62f020cd6e4b010499c2c28ab3c15ed2ef3114e5b806244e57be1a7d999a21399c1e950977f021c82a906bed39caeccc38c06a3e5867f4d4979112557a93a7a273e1aab8a45da746b2fe0830b33e9e07ede2176e95295c046c19c9270cad2384088b896c9ff831"
1785 },
1786 {
1787 "0xf6b7f399370d10b097b17e514f044d77a8f170148f4837033bb5d425f73a4079e1c7a9c3e69246f902d8c9fd27caad1e93d83578d4af8d3b7b1c02041c44917a22ed56f2562ac1426a356f8d31965e8e367b8929f3907b1dc6e73a8f3a566ca5c4e113e9d2c53770b110df51cf504701ff3fcea5b819b9bfc49f",
1788 "0x61989df2b7097a6a84dc016aec2716d9cac359d2d799d90ec006a66efe3f1fd0851978c4cfe2f64b307b852e23f5dfdc2f63196e1076782a228a46f5f7d4e54afc1ad7abf1f8fef46edaad1706956f95eb95953bd4",
1789 "0x990290097822808c0002c82510d08a8119521400000c40002222ec1612500001404005628401105a8426238109d0006319460032082a020804c4e110e142c41250a110d850c440420117068425900991950094",
1790 "0xf6b7f399370d10b097b17e514f044d77a8f170148f4837033bb5d425f73a4079e1c7a9c3e6f3defdf2ffc9ff6fcefd1ffbfc377eddefcf7bfbdf9bdd1ec497fe6eff7fffd6afd97aeeffefff7bb67f8f3e7bfdffffbf7b1deef77eff3a76eee7f5f7d7eddafd3ff7bbf1ffffff7edfadff3fdfefbdfbbdbfffdf",
1791 "0xf6b7f399370d10b097b17e514f044d77a8f170148f4837033bb5d425f73a4079e1c7a9c3e6f3de64f06fc0874d4e711ff934126e0d654e62a9cb9bdd128497dc4c1369ed86afd83aaefa8d7b7aa6250b18587cf62fbf1804a8f74cf71074e6e33116c70c98392da71ae127af3b3e9dace8395bca2df22c2aff4b"
1792 },
1793 {
1794 "0x31d126e874580b754389fad8b64aaa61cabb4f8eb6904fe7e504341ed903f7daa3e74d4da3afca80b2415672a",
1795 "0x16fb17a0468c0afa6bad456efa4f9baf26860eda9d7c00c2520c8c9b6026fb50df59b8cb74f6d9be861052c5e831158e7ffd98746328ce11f91d9ea22f0803a8b059aea22d1715ca1abeae53a8bc6b8bfb9b6c9d24ae714767",
1796 "0x11100e0745803440288e0189048aa20c0800a8a04904a22c10014008902e51a83c6080da1a6c880024114722",
1797 "0x16fb17a0468c0afa6bad456efa4f9baf26860eda9d7c00c2520c8c9b6026fb50df59b8cb74f6d9be861052c5eb3d17eefffd98f77738dfbdfb7dbea63fabb7f8fb79aefe7f5757cbffbebf7faabe7fdffbbbfcbd2fae75676f",
1798 "0x16fb17a0468c0afa6bad456efa4f9baf26860eda9d7c00c2520c8c9b6026fb50df59b8cb74f6d9be861052c5eb2c07e0f8b818c3371051bc7279340433a3b7505b30aa5c5347568bf72e912e02821f5f21a190352f8a64204d"
1799 },
1800 {
1801 "0xbf1a14e469c234b72d56324d100e016bc38cdf7158e35f230c047585e7b107acc8e222e7f19552541e59316affd90e96ca657b6112f5e8c786dfcff342fc46252fcdab10c632578540dbf6235f164bc5711924c7c6ba9da85ab",
1802 "0x5dd3fb9a3de26cd89eb9517af6bb25678f149f906e8751a0c20d7646d21c17191237022a990e0156541e376986fd6a680c60228e5955df08bae5789c81751cdcafe5a2e72d45b09",
1803 "0x5d5158821d220c001481413006a800620204919042041000000876400214020112210220880600564412026806252a480800020251054008b22158140145101824c582a20d00109",
1804 "0xbf1a14e469c234b72d56324d100e016bc38cdff3fbfb7fe36cdcffbdf7fbf7bfede7aff7ff957ed75ff9f36fffdfde9edf7d7b7712fff9cf87dfdfff77fdc6fd6fedaf70e6be5fd5dfdbfee77f9ecbf57dddafe7e6ffbdedfab",
1805 "0xbf1a14e469c234b72d56324d100e016bc38c82a2a37962c160dceb3cb6cbf117ed85adf36e053cd34ff9f367899fdc8add7c695610df71c987899bed7595c0d845a5a770e4bc0ed09fd34cc6278acab06dc58b22645db0edea2"
1806 },
1807 };
1808
1809 bool opa=true, opo=true, opx=true;
1810
1811 //////////////////// AND ////////////////////
1812
1813 for (size_t i=0; i<COUNTOF(tests); i++)
1814 {
1815 Integer m(tests[i].m), n(tests[i].n), a(tests[i].a);
1816
1817 opa &= ((m & n) == a);
1818 opa &= ((-m & n) == a);
1819 opa &= ((m & -n) == a);
1820 opa &= ((-m & -n) == a);
1821
1822 Integer t(m); t &= n;
1823 opa &= (t == a);
1824 t = n; t &= m;
1825 opa &= (t == a);
1826
1827 opa &= ((m & m) == m);
1828 opa &= ((n & n) == n);
1829 }
1830
1831 if (opa)
1832 std::cout << "passed: ";
1833 else
1834 std::cout << "FAILED: ";
1835 std::cout << "Bitwise AND over 32-bits to 1024-bits" << std::endl;
1836
1837 //////////////////// OR ////////////////////
1838
1839 for (size_t i=0; i<COUNTOF(tests); i++)
1840 {
1841 Integer m(tests[i].m), n(tests[i].n), o(tests[i].o);
1842
1843 opo &= ((m | n) == o);
1844 opo &= ((-m | n) == o);
1845 opo &= ((m | -n) == o);
1846 opo &= ((-m | -n) == o);
1847
1848 Integer t(m); t |= n;
1849 opo &= (t == o);
1850 t = n; t |= m;
1851 opo &= (t == o);
1852
1853 opo &= ((m | m) == m);
1854 opo &= ((n | n) == n);
1855 }
1856
1857 if (opo)
1858 std::cout << "passed: ";
1859 else
1860 std::cout << "FAILED: ";
1861 std::cout << "Bitwise OR over 32-bits to 1024-bits" << std::endl;
1862
1863 //////////////////// XOR ////////////////////
1864
1865 for (size_t i=0; i<COUNTOF(tests); i++)
1866 {
1867 Integer m(tests[i].m), n(tests[i].n), x(tests[i].x);
1868
1869 opx &= ((m ^ n) == x);
1870 opx &= ((-m ^ n) == x);
1871 opx &= ((m ^ -n) == x);
1872 opx &= ((-m ^ -n) == x);
1873
1874 Integer t(m); t ^= n;
1875 opx &= (t == x);
1876 t = n; t ^= m;
1877 opx &= (t == x);
1878
1879 opx &= ((m ^ m) == Integer::Zero());
1880 opx &= ((n ^ n) == Integer::Zero());
1881 }
1882
1883 if (opx)
1884 std::cout << "passed: ";
1885 else
1886 std::cout << "FAILED: ";
1887 std::cout << "Bitwise XOR over 32-bits to 1024-bits" << std::endl;
1888
1889 return opa && opo && opx;
1890 }
1891 #endif
1892