@aqb-foundation/aqb-agent 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +4 -16
  2. package/README.md +68 -21
  3. package/WHITEPAPER.md +2 -1
  4. package/artifacts/MLDSA65Fallback.json +59 -0
  5. package/client/aqb.mjs +232 -148
  6. package/compile.mjs +44 -0
  7. package/contracts/AgentQuantumCredit.sol +234 -0
  8. package/contracts/AgentRegistry.sol +85 -0
  9. package/contracts/GenesisSale.sol +89 -0
  10. package/contracts/MLDSA65Fallback.sol +34 -0
  11. package/contracts/MLDSAVerifier.sol +65 -0
  12. package/contracts/PQSmartAccount.sol +105 -0
  13. package/contracts/interfaces/IPQVerifier.sol +19 -0
  14. package/contracts/mocks/MockUSDC.sol +30 -0
  15. package/contracts/mocks/MockVerifier.sol +13 -0
  16. package/docs/CARD.md +1 -1
  17. package/docs/LAUNCH.md +1 -1
  18. package/docs/MARKETING.md +3 -3
  19. package/docs/SPEC.md +5 -4
  20. package/docs/articles/01-payment-rail-agents.md +55 -0
  21. package/docs/articles/01.body +56 -0
  22. package/docs/articles/02-gated-transfers.md +36 -0
  23. package/docs/articles/03-peg-without-oracle.md +33 -0
  24. package/docs/articles/04-discovery-over-landing.md +42 -0
  25. package/docs/articles/04-discovery-over-landing.md.body +40 -0
  26. package/docs/articles/04-discovery-over-landing.md.title +1 -0
  27. package/docs/articles/05-identity-survives-key.md +27 -0
  28. package/docs/articles/05-identity-survives-key.md.body +25 -0
  29. package/docs/articles/05-identity-survives-key.md.title +1 -0
  30. package/docs/articles/06-what-an-agent-needs.md +30 -0
  31. package/docs/articles/06-what-an-agent-needs.md.body +28 -0
  32. package/docs/articles/06-what-an-agent-needs.md.title +1 -0
  33. package/docs/articles/body.json +1 -0
  34. package/docs/articles/body.txt +50 -0
  35. package/docs/articles/title.txt +1 -0
  36. package/docs/pq-note.md +1 -0
  37. package/index.js +241 -0
  38. package/mcp/server.mjs +118 -25
  39. package/package.json +41 -11
  40. package/pq-deployment.json +14 -0
  41. package/registry/agent-coin.json +26 -11
  42. package/registry/llms.txt +1 -1
  43. package/test/e2e.mjs +100 -0
  44. package/test/evm.mjs +69 -0
  45. package/test/local.mjs +86 -0
  46. package/test/pq.mjs +37 -0
  47. package/test/smoke.mjs +27 -0
  48. package/vendor/mldsa/LICENSE +21 -0
  49. package/vendor/mldsa/MLDSAKeyFactory.json +570 -0
  50. package/vendor/mldsa/MLDSAVerifier.json +154 -0
  51. package/vendor/mldsa/README.md +20 -0
@@ -0,0 +1,570 @@
1
+ {
2
+ "abi": [
3
+ {
4
+ "inputs": [],
5
+ "name": "CommitmentMismatch",
6
+ "type": "error"
7
+ },
8
+ {
9
+ "inputs": [],
10
+ "name": "DeployFailed",
11
+ "type": "error"
12
+ },
13
+ {
14
+ "inputs": [],
15
+ "name": "InvalidPart",
16
+ "type": "error"
17
+ },
18
+ {
19
+ "inputs": [],
20
+ "name": "InvalidPublicKey",
21
+ "type": "error"
22
+ },
23
+ {
24
+ "inputs": [],
25
+ "name": "NotCommitted",
26
+ "type": "error"
27
+ },
28
+ {
29
+ "inputs": [],
30
+ "name": "UnsupportedParamSet",
31
+ "type": "error"
32
+ },
33
+ {
34
+ "anonymous": false,
35
+ "inputs": [
36
+ {
37
+ "indexed": true,
38
+ "internalType": "ParamSet",
39
+ "name": "set",
40
+ "type": "uint8"
41
+ },
42
+ {
43
+ "indexed": true,
44
+ "internalType": "bytes32",
45
+ "name": "pkHash",
46
+ "type": "bytes32"
47
+ },
48
+ {
49
+ "indexed": false,
50
+ "internalType": "bytes32",
51
+ "name": "aHash",
52
+ "type": "bytes32"
53
+ }
54
+ ],
55
+ "name": "CommittedA",
56
+ "type": "event"
57
+ },
58
+ {
59
+ "anonymous": false,
60
+ "inputs": [
61
+ {
62
+ "indexed": true,
63
+ "internalType": "ParamSet",
64
+ "name": "set",
65
+ "type": "uint8"
66
+ },
67
+ {
68
+ "indexed": true,
69
+ "internalType": "bytes32",
70
+ "name": "pkHash",
71
+ "type": "bytes32"
72
+ },
73
+ {
74
+ "indexed": false,
75
+ "internalType": "uint256",
76
+ "name": "part",
77
+ "type": "uint256"
78
+ },
79
+ {
80
+ "indexed": false,
81
+ "internalType": "bytes32",
82
+ "name": "aPartHash",
83
+ "type": "bytes32"
84
+ }
85
+ ],
86
+ "name": "CommittedAPart",
87
+ "type": "event"
88
+ },
89
+ {
90
+ "anonymous": false,
91
+ "inputs": [
92
+ {
93
+ "indexed": true,
94
+ "internalType": "ParamSet",
95
+ "name": "set",
96
+ "type": "uint8"
97
+ },
98
+ {
99
+ "indexed": true,
100
+ "internalType": "bytes32",
101
+ "name": "pkHash",
102
+ "type": "bytes32"
103
+ },
104
+ {
105
+ "indexed": true,
106
+ "internalType": "address",
107
+ "name": "data",
108
+ "type": "address"
109
+ },
110
+ {
111
+ "indexed": false,
112
+ "internalType": "bool",
113
+ "name": "isAHat",
114
+ "type": "bool"
115
+ }
116
+ ],
117
+ "name": "Registered",
118
+ "type": "event"
119
+ },
120
+ {
121
+ "stateMutability": "nonpayable",
122
+ "type": "fallback"
123
+ },
124
+ {
125
+ "inputs": [
126
+ {
127
+ "internalType": "bytes32",
128
+ "name": "",
129
+ "type": "bytes32"
130
+ }
131
+ ],
132
+ "name": "aCommitment",
133
+ "outputs": [
134
+ {
135
+ "internalType": "bytes32",
136
+ "name": "",
137
+ "type": "bytes32"
138
+ }
139
+ ],
140
+ "stateMutability": "view",
141
+ "type": "function"
142
+ },
143
+ {
144
+ "inputs": [
145
+ {
146
+ "internalType": "ParamSet",
147
+ "name": "set",
148
+ "type": "uint8"
149
+ },
150
+ {
151
+ "internalType": "bytes32",
152
+ "name": "pkHash",
153
+ "type": "bytes32"
154
+ },
155
+ {
156
+ "internalType": "uint256",
157
+ "name": "part",
158
+ "type": "uint256"
159
+ }
160
+ ],
161
+ "name": "aPartAddress",
162
+ "outputs": [
163
+ {
164
+ "internalType": "address",
165
+ "name": "",
166
+ "type": "address"
167
+ }
168
+ ],
169
+ "stateMutability": "view",
170
+ "type": "function"
171
+ },
172
+ {
173
+ "inputs": [
174
+ {
175
+ "internalType": "ParamSet",
176
+ "name": "set",
177
+ "type": "uint8"
178
+ },
179
+ {
180
+ "internalType": "bytes32",
181
+ "name": "pkHash",
182
+ "type": "bytes32"
183
+ },
184
+ {
185
+ "internalType": "uint256",
186
+ "name": "part",
187
+ "type": "uint256"
188
+ }
189
+ ],
190
+ "name": "aPartCommitment",
191
+ "outputs": [
192
+ {
193
+ "internalType": "bytes32",
194
+ "name": "",
195
+ "type": "bytes32"
196
+ }
197
+ ],
198
+ "stateMutability": "view",
199
+ "type": "function"
200
+ },
201
+ {
202
+ "inputs": [
203
+ {
204
+ "internalType": "ParamSet",
205
+ "name": "set",
206
+ "type": "uint8"
207
+ },
208
+ {
209
+ "internalType": "bytes32",
210
+ "name": "pkHash",
211
+ "type": "bytes32"
212
+ },
213
+ {
214
+ "internalType": "uint256",
215
+ "name": "part",
216
+ "type": "uint256"
217
+ }
218
+ ],
219
+ "name": "aPartStatus",
220
+ "outputs": [
221
+ {
222
+ "internalType": "enum MLDSAKeyFactory.AStatus",
223
+ "name": "",
224
+ "type": "uint8"
225
+ }
226
+ ],
227
+ "stateMutability": "view",
228
+ "type": "function"
229
+ },
230
+ {
231
+ "inputs": [
232
+ {
233
+ "internalType": "ParamSet",
234
+ "name": "set",
235
+ "type": "uint8"
236
+ },
237
+ {
238
+ "internalType": "bytes32",
239
+ "name": "pkHash",
240
+ "type": "bytes32"
241
+ }
242
+ ],
243
+ "name": "aStatus",
244
+ "outputs": [
245
+ {
246
+ "internalType": "enum MLDSAKeyFactory.AStatus",
247
+ "name": "s",
248
+ "type": "uint8"
249
+ }
250
+ ],
251
+ "stateMutability": "view",
252
+ "type": "function"
253
+ },
254
+ {
255
+ "inputs": [
256
+ {
257
+ "internalType": "ParamSet",
258
+ "name": "set",
259
+ "type": "uint8"
260
+ },
261
+ {
262
+ "internalType": "bytes32",
263
+ "name": "pkHash",
264
+ "type": "bytes32"
265
+ }
266
+ ],
267
+ "name": "addressesOf",
268
+ "outputs": [
269
+ {
270
+ "internalType": "address",
271
+ "name": "aData",
272
+ "type": "address"
273
+ },
274
+ {
275
+ "internalType": "address",
276
+ "name": "tData",
277
+ "type": "address"
278
+ }
279
+ ],
280
+ "stateMutability": "view",
281
+ "type": "function"
282
+ },
283
+ {
284
+ "inputs": [
285
+ {
286
+ "internalType": "ParamSet",
287
+ "name": "set",
288
+ "type": "uint8"
289
+ },
290
+ {
291
+ "internalType": "bytes",
292
+ "name": "publicKey",
293
+ "type": "bytes"
294
+ }
295
+ ],
296
+ "name": "commitA",
297
+ "outputs": [
298
+ {
299
+ "internalType": "bytes32",
300
+ "name": "aHash",
301
+ "type": "bytes32"
302
+ }
303
+ ],
304
+ "stateMutability": "nonpayable",
305
+ "type": "function"
306
+ },
307
+ {
308
+ "inputs": [
309
+ {
310
+ "internalType": "ParamSet",
311
+ "name": "set",
312
+ "type": "uint8"
313
+ },
314
+ {
315
+ "internalType": "bytes32",
316
+ "name": "pkHash",
317
+ "type": "bytes32"
318
+ }
319
+ ],
320
+ "name": "isRegistered",
321
+ "outputs": [
322
+ {
323
+ "internalType": "bool",
324
+ "name": "",
325
+ "type": "bool"
326
+ }
327
+ ],
328
+ "stateMutability": "view",
329
+ "type": "function"
330
+ },
331
+ {
332
+ "inputs": [
333
+ {
334
+ "internalType": "ParamSet",
335
+ "name": "set",
336
+ "type": "uint8"
337
+ },
338
+ {
339
+ "internalType": "bytes32",
340
+ "name": "pkHash",
341
+ "type": "bytes32"
342
+ }
343
+ ],
344
+ "name": "load",
345
+ "outputs": [
346
+ {
347
+ "internalType": "bytes",
348
+ "name": "",
349
+ "type": "bytes"
350
+ }
351
+ ],
352
+ "stateMutability": "view",
353
+ "type": "function"
354
+ },
355
+ {
356
+ "inputs": [
357
+ {
358
+ "internalType": "ParamSet",
359
+ "name": "set",
360
+ "type": "uint8"
361
+ },
362
+ {
363
+ "internalType": "bytes",
364
+ "name": "publicKey",
365
+ "type": "bytes"
366
+ }
367
+ ],
368
+ "name": "registerA",
369
+ "outputs": [
370
+ {
371
+ "internalType": "address",
372
+ "name": "aData",
373
+ "type": "address"
374
+ }
375
+ ],
376
+ "stateMutability": "nonpayable",
377
+ "type": "function"
378
+ },
379
+ {
380
+ "inputs": [
381
+ {
382
+ "internalType": "ParamSet",
383
+ "name": "set",
384
+ "type": "uint8"
385
+ },
386
+ {
387
+ "internalType": "bytes",
388
+ "name": "publicKey",
389
+ "type": "bytes"
390
+ },
391
+ {
392
+ "internalType": "uint256",
393
+ "name": "part",
394
+ "type": "uint256"
395
+ }
396
+ ],
397
+ "name": "registerAPart",
398
+ "outputs": [
399
+ {
400
+ "internalType": "address",
401
+ "name": "aData",
402
+ "type": "address"
403
+ }
404
+ ],
405
+ "stateMutability": "nonpayable",
406
+ "type": "function"
407
+ },
408
+ {
409
+ "inputs": [
410
+ {
411
+ "internalType": "ParamSet",
412
+ "name": "set",
413
+ "type": "uint8"
414
+ },
415
+ {
416
+ "internalType": "bytes",
417
+ "name": "publicKey",
418
+ "type": "bytes"
419
+ }
420
+ ],
421
+ "name": "registerT",
422
+ "outputs": [
423
+ {
424
+ "internalType": "address",
425
+ "name": "tData",
426
+ "type": "address"
427
+ }
428
+ ],
429
+ "stateMutability": "nonpayable",
430
+ "type": "function"
431
+ },
432
+ {
433
+ "inputs": [
434
+ {
435
+ "internalType": "ParamSet",
436
+ "name": "set",
437
+ "type": "uint8"
438
+ },
439
+ {
440
+ "internalType": "bytes32",
441
+ "name": "pkHash",
442
+ "type": "bytes32"
443
+ },
444
+ {
445
+ "internalType": "bytes",
446
+ "name": "aHat",
447
+ "type": "bytes"
448
+ }
449
+ ],
450
+ "name": "storeA",
451
+ "outputs": [
452
+ {
453
+ "internalType": "address",
454
+ "name": "aData",
455
+ "type": "address"
456
+ }
457
+ ],
458
+ "stateMutability": "nonpayable",
459
+ "type": "function"
460
+ },
461
+ {
462
+ "inputs": [
463
+ {
464
+ "internalType": "ParamSet",
465
+ "name": "set",
466
+ "type": "uint8"
467
+ },
468
+ {
469
+ "internalType": "bytes32",
470
+ "name": "pkHash",
471
+ "type": "bytes32"
472
+ },
473
+ {
474
+ "internalType": "uint256",
475
+ "name": "part",
476
+ "type": "uint256"
477
+ },
478
+ {
479
+ "internalType": "bytes",
480
+ "name": "aPart",
481
+ "type": "bytes"
482
+ }
483
+ ],
484
+ "name": "storeAPart",
485
+ "outputs": [
486
+ {
487
+ "internalType": "address",
488
+ "name": "aData",
489
+ "type": "address"
490
+ }
491
+ ],
492
+ "stateMutability": "nonpayable",
493
+ "type": "function"
494
+ },
495
+ {
496
+ "inputs": [
497
+ {
498
+ "internalType": "ParamSet",
499
+ "name": "set",
500
+ "type": "uint8"
501
+ },
502
+ {
503
+ "internalType": "bytes32",
504
+ "name": "pkHash",
505
+ "type": "bytes32"
506
+ },
507
+ {
508
+ "internalType": "bytes",
509
+ "name": "message",
510
+ "type": "bytes"
511
+ },
512
+ {
513
+ "internalType": "bytes",
514
+ "name": "signature",
515
+ "type": "bytes"
516
+ }
517
+ ],
518
+ "name": "verify",
519
+ "outputs": [
520
+ {
521
+ "internalType": "bool",
522
+ "name": "",
523
+ "type": "bool"
524
+ }
525
+ ],
526
+ "stateMutability": "view",
527
+ "type": "function"
528
+ },
529
+ {
530
+ "inputs": [
531
+ {
532
+ "internalType": "ParamSet",
533
+ "name": "set",
534
+ "type": "uint8"
535
+ },
536
+ {
537
+ "internalType": "bytes32",
538
+ "name": "pkHash",
539
+ "type": "bytes32"
540
+ },
541
+ {
542
+ "internalType": "bytes",
543
+ "name": "ctx",
544
+ "type": "bytes"
545
+ },
546
+ {
547
+ "internalType": "bytes",
548
+ "name": "message",
549
+ "type": "bytes"
550
+ },
551
+ {
552
+ "internalType": "bytes",
553
+ "name": "signature",
554
+ "type": "bytes"
555
+ }
556
+ ],
557
+ "name": "verifyWithContext",
558
+ "outputs": [
559
+ {
560
+ "internalType": "bool",
561
+ "name": "",
562
+ "type": "bool"
563
+ }
564
+ ],
565
+ "stateMutability": "view",
566
+ "type": "function"
567
+ }
568
+ ],
569
+ "bytecode": "0x60808060405234601557614a89908161001a8239f35b5f80fdfe610400604052600436101561004b575b34610047575f5c33036100475760015c6040515f5b8060051b908382101561004357600191816002015c9084015201610024565b5050f35b5f80fd5b5f3560e01c8063037f5ec5146105cf5780631a1d0053146105a75780631f9ac5651461058b5780631fb1329c1461053557806321fa130514610499578063281b947d146104215780632d097351146103b557806333ca58dc1461038b5780633fd443a6146102be57806380d4d7b2146102a55780639bff150414610250578063b5b7a70f146101d5578063ce6c29d5146101b4578063eb29f94614610182578063ee2cae7a146101285763fc63ac990361000f5734610047576020366003190112610047576004355f525f602052602060405f2054604051908152f35b3461004757606036600319011261004757610141610686565b6044356001600160401b03811161004757602091610166610170923690600401610696565b9160243590610a06565b6040516001600160a01b039091168152f35b346100475760403660031901126100475760206101aa6101a0610686565b60243590306111b5565b6040519015158152f35b346100475760206101cd6101c7366106ea565b916109cf565b604051908152f35b34610047576060366003190112610047576101ee610686565b6024356001600160401b0381116100475761020d903690600401610696565b9160443561021a82610c6f565b918282101561024157602094610170946102353683836107b7565b87815191012092610c81565b6323a9a68760e01b5f5260045ffd5b3461004757604036600319011261004757604061026b610686565b61028d61028160243561028761028182866112ce565b306113e4565b93611026565b82516001600160a01b03928316815291166020820152f35b346100475760206101706102b83661070e565b916108da565b34610047576102cc3661070e565b906102d683610c6f565b926102e23684846107b7565b80516020909101206001600160fb1b0385168503610377576103068560051b6108a8565b935f5b86811061034e57602086600189036103435781815191015190828110610333575b50604051908152f35b5f1990830360031b1b168261032a565b8181519101206101cd565b600190604051610362898387878b8b610e50565b509060405260208260051b8901015201610309565b634e487b7160e01b5f52601160045260245ffd5b34610047576103b16103a561039f366106ea565b91610856565b604051918291826106c3565b0390f35b34610047576080366003190112610047576103ce610686565b6024356044356064356001600160401b038111610047576103f3903690600401610696565b906103fd85610c6f565b831015610241578483610419610281610170968860209a611364565b958692610df0565b346100475761042f3661070e565b915f9261043b82610c6f565b906104473682866107b7565b60208151910120905f5b83811061046c576040516001600160a01b0388168152602090f35b60405161047d858386868b8b610c81565b8215610490575b50604052600101610451565b97506001610484565b34610047576080366003190112610047576104b2610686565b6044356001600160401b038111610047576104d1903690600401610696565b9091606435926001600160401b038411610047576105116101aa936105096104ff6020973690600401610696565b94909236916107b7565b9236916107b7565b9161051f6024358230610b92565b6040519161052d878461077b565b5f8352611240565b34610047576040366003190112610047576020604061055f610555610686565b6024359030610b92565b815192839181835280519182918282860152018484015e5f828201840152601f01601f19168101030190f35b346100475760206101706102816105a1366106ea565b91611364565b34610047576040366003190112610047576103b16103a56105c6610686565b602435906107ed565b346100475760a0366003190112610047576105e8610686565b6044356001600160401b03811161004757610607903690600401610696565b916064356001600160401b03811161004757610627903690600401610696565b60843593916001600160401b0385116100475760209561066a610672926106626106586101aa993690600401610696565b97909436916107b7565b9436916107b7565b9336916107b7565b926106806024358230610b92565b90611240565b6004359060ff8216820361004757565b9181601f84011215610047578235916001600160401b038311610047576020838186019501011161004757565b9190602083019260038210156106d65752565b634e487b7160e01b5f52602160045260245ffd5b60609060031901126100475760043560ff8116810361004757906024359060443590565b9060406003198301126100475760043560ff811681036100475791602435906001600160401b0382116100475761074791600401610696565b9091565b6101c081019081106001600160401b0382111761076757604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761076757604052565b6001600160401b03811161076757601f01601f191660200190565b9291926107c38261079c565b916107d1604051938461077b565b829481845281830111610047578281602093845f960137010152565b9190916107f981610b17565b801561084f576002935f5b8281106108115750505050565b61081d83828487610b47565b60038110156106d65760038710156106d65760ff871660ff821610610846575b50600101610804565b9550600161083d565b505f925050565b9161086083610b17565b91828210156108755761087293610b47565b90565b505050505f90565b90610108820291808304610108149015171561037757565b8181029291811591840414171561037757565b906108b28261079c565b6108bf604051918261077b565b82815280926108d0601f199161079c565b0190602036910137565b9092919260ff821691821580156109c5575b80156109bb575b156109ac576109033686846107b7565b602081519101209161091861028184846112ce565b506109266102818484611026565b95863b6109a5576109429161093c9136916107b7565b82610f25565b80511561099657856109578461095c94611026565b6110a8565b6040515f81526001600160a01b03851692907fec21a5bb1d2581d49be13c70f82fe4b9fdd2d754c3cd2179a390e8f58e33689290602090a4565b63145a1fdd60e31b5f5260045ffd5b5050505050565b636257007960e01b5f5260045ffd5b50600283146108f3565b50600183146108ec565b916109d983610b17565b9182821015610875576109eb93611160565b5f525f60205260405f205490565b9190820180921161037757565b93929091610a1385610c6f565b90610a2161028185886112ce565b9560018314610b0757610a33816111fc565b505f1981019390841161037757610a4a8482610895565b851415945f5b828110610a61575050505050505050565b610a6f610281828a87611364565b90813b610afe57610a8284828b88611160565b5f525f60205260405f205415610aef5787610ae057610aa18782610895565b600182018083116103775788610ab691610895565b90818111610047578482116100475760019381610ada930391890190848d8a610df0565b01610a50565b635054097b60e01b5f5260045ffd5b63205e472d60e21b5f5260045ffd5b60019150610ada565b8695969192509361087294610d52565b60ff1680158015610b3d575b610b3757600214610b32575f90565b600290565b50600190565b5060018114610b23565b929190610b53846111fc565b50610b62610281848488611364565b3b14610b8957610b7193611160565b5f525f60205260405f2054610b84575f90565b600190565b50505050600290565b9291610b9f8183866111b5565b15610c6757610bad826111fc565b949091610bb984610b17565b935f198401938411610377575f19870196808811610377576040190196871161037757610be68486610895565b6040018060401161037757610bfe88610c03926109f9565b6108a8565b966041610c19610c138585611026565b866113e4565b6040600160208c01833c60608789028b0101903c5f5b858110610c3e57505050505050565b80856001610c57610c5182958888611364565b886113e4565b60608385028d0101903c01610c2f565b506060925050565b610c7890610b17565b9081156109ac57565b9391909594610c94908385848a89610e50565b968792610ca561028186888a611364565b98893b610d4857908592915115610d27575b5050508151602083012003610d135785610957610cd5938587611364565b604051600181526001600160a01b0385169260ff16907fec21a5bb1d2581d49be13c70f82fe4b9fdd2d754c3cd2179a390e8f58e33689290602090a4565b634e487b7160e01b5f52600160045260245ffd5b610d3f93945090610d399136916107b7565b86611462565b90825f80610cb7565b5050505050505050565b93929092823b6109a557610d70610d6886610b17565b5f8688611160565b5f525f60205260405f20548015610aef57610d8c3683856107b7565b6020815191012003610ae05782610dab610db19361066a5f888a611364565b916110a8565b604051600181526001600160a01b039091169260ff16907fec21a5bb1d2581d49be13c70f82fe4b9fdd2d754c3cd2179a390e8f58e33689290602090a4565b949093833b610e4857610e0d610e0587610b17565b848789611160565b5f525f60205260405f20548015610aef57610e293684846107b7565b6020815191012003610ae057610dab849161066a610db195888a611364565b505050505050565b91959390610e6086838686611160565b96875f525f60205260405f205480610f185750610e83610e8992849236916107b7565b84611462565b948551156109965760019086516020880120975f525f6020528760405f2055145f14610ee157507fc99be2228ba3e6a97262efdcbe9bd3a93dc266e1592418de7f684b3f86ecd09a602060ff604051938885521692a3565b90604060ff7f9c035a3f8034b6cf8c3098316e3602abfc816f1664b29e299c853a9a519e777d9282519485528860208601521692a3565b9750606096505050505050565b610f3190929192611ba8565b9190158015611016575b61100e576101808201516040018060401161037757610f59906108a8565b610f61611e19565b93610f7b6020830195610120860151906020840190612252565b908652604083015260608201809511610377576020610f98612287565b01916020610fa4611dbd565b019360405f9601955b865181101561100457610fc1868286612754565b610fcb85876127d0565b610fd4866128b1565b610300810290808204610300148115171561037757610ffe610ff86001938b6109f9565b886128d8565b01610fad565b5094509450505050565b915050606090565b5082516101208301511415610f3b565b906040519060ff602083019360608552600e60808501526d13531114d04b9d1c97dd17da185d60921b60a0850152166040830152606082015260a0815261106e60c08261077b565b51902090565b6040519061108360408361077b565b60168252755f5f5f5f335afa156012573d5f5f3e3d5ff35b5f5ffd60501b6020830152565b91926110de6021602093956040519485915f828401528051918291018484015e81015f838201520301601f19810184528361077b565b6110e6611074565b938251815f5d8060015d5f5b8060051b828110156111135790602060019287010151816002015d016110f2565b505092509290936020815191015ff5915f805d6001600160a01b0383811691161480159290611154575b505061114557565b63b4f5411160e01b5f5260045ffd5b3b141590505f8061113d565b92909190600114611192576040519160ff6020840194168452604083015260608201526060815261106e60808261077b565b506040519060ff602083019316835260408201526040815261106e60608261077b565b91906111c0816111fc565b80915015610875576111db6111d58484611026565b856113e4565b3b1492836111ea575b50505090565b6111f4935061219d565b5f80806111e4565b5f9160ff5f9216801561123357600181146112265760021461121a57565b61540192506118419150565b50615a0192506112419150565b506130019250610c419150565b8251949360ff86116112a65761087295602260206112a193816040519889955f8388015260ff60f81b9060f81b1660218701528051918291018587015e8401908382015f8152815193849201905e01015f815203601f19810185528461077b565b6121f3565b5050505050505f90565b600b81526a13531114d04b9057da185d60aa1b602082015260400190565b60016112d982610b17565b148061135c575b6113235761106e604051809260208201946080865260ff61130360a085016112b0565b9216604084015260608301525f608083015203601f19810183528261077b565b61106e604051809260208201946060865260ff611342608085016112b0565b92166040840152606083015203601f19810183528261077b565b5060016112e0565b9091600161137183610b17565b14806113dc575b6113bc5761106e9060405192839160208301956080875260ff61139d60a086016112b0565b931660408501526060840152608083015203601f19810183528261077b565b5061106e604051809260208201946060865260ff611342608085016112b0565b508015611378565b6113ec611074565b6020815191012060405192602084019260ff60f81b84526bffffffffffffffffffffffff199060601b166021850152603584015260558301526055825261143460758361077b565b905190206001600160a01b031690565b811561144e570490565b634e487b7160e01b5f52601260045260245ffd5b61146e90929192611ba8565b9190158015611b98575b8015611b89575b611b8157610160820151936114d060206114a3610bfe6101a0870198895190611444565b956114ac611e19565b6103c0520151956114c860606040870151960195865190610895565b905190611444565b926114e26114dd8561087d565b611df1565b9460208601906114f56114dd600161087d565b926121208401602085015b818110611b7557505051936115158787610895565b9560018101809111610377578761152b91610895565b916115398760021c9a613a5f565b915b838b60021b1015611b09575f985f5b858d60048310611ae3575050505f5b6103208110611ad257505f516020614a345f395f51905f528460c01c026103c051525f516020614a345f395f51905f526001600160401b038560801c160260206103c05101525f516020614a345f395f51905f526001600160401b038560401c160260406103c05101525f516020614a345f395f51905f526001600160401b0385160260606103c05101525f5f5b8d60048210611aac57505060806103c05101527801000000000000000100000000000000010000000000000001603f1b6102806103c05101525b61162d6103c0516148ac565b60018c5f5b6004811061164e57505015611621576001909b019a985061153b565b909a9998979695949392919c9b61ffff818360041b1c169b6120008d1015611a96578d6121008d8560209460021b01030201019b8a1561144e576020818e9283016103a0528b01016120006103c0519201908460061b925b6102a06103c051018110611700575b50505050612000908c9d9e939495969798999a9b9c6103a051038360041b1b9061ffff8460041b1b1916179c6103a05103106116f8575b6001905b018d90611632565b5f91506116ec565b826103a0511015611a9157778000008000008000008000008000008000008000008000007620000020000020000020000020000020000020000020006040830151861c60801b667fe0007fe0007f60401b6020850151881c60401b8551891c6103e0526001600160401b0360801b831667ffffffffffffffff60401b82166001600160401b036103e0511617175f521667e0007fe0007fe0006103e0511617906703ff0003ff0003ff60851b161701165f146119a157627fffff5f5116627fe001811061197c575b50627fffff5f5160181c16627fe0018110611957575b50627fffff5f5160301c16627fe0018110611932575b50627fffff5f5160481c16627fe001811061190d575b50627fffff5f5160601c16627fe00181106118e8575b50627fffff5f5160781c16627fe00181106118c3575b50627fffff5f5160901c16627fe001811061189e575b50627fffff5f5160a81c1661038052627fe0016103805110611873575b6060905b016116a6565b906020816060925161038051026103a05151016103a05152816103a051016103a05201919050611869565b91602091928151026103a05151016103a05152816103a051016103a05201905f61184c565b91602091928151026103a05151016103a05152816103a051016103a05201905f611836565b91602091928151026103a05151016103a05152816103a051016103a05201905f611820565b91602091928151026103a05151016103a05152816103a051016103a05201905f61180a565b91602091928151026103a05151016103a05152816103a051016103a05201905f6117f4565b91602091928151026103a05151016103a05152816103a051016103a05201905f6117de565b91602091928151026103a05151016103a05152816103a051016103a05201905f6117c8565b906101008160609251627fffff6103e05116026103a05151016103a0515260206103a051016020820151627fffff5f5160181c1602815101905260406103a051016040820151627fffff5f5160301c16028151019052826103a0510183820151627fffff5f5160481c1602815101905260806103a051016080820151627fffff5f51861c1602815101905260a06103a0510160a0820151627fffff5f5160781c1602815101905260c06103a0510160c0820151627fffff5f5160901c1602815101905260e06103a0510160e0820151627fffff5f5160a81c16028151019052816103a051016103a052019161186d565b6116b5565b509b9c9192939495969798999a506001906116f0565b91621f0000826001939460021b018c80820460081b910617178360061b1b1791016115e7565b805f6020926103c051015201611559565b60021b82011015611af7575b60010161154a565b612000600482901b1b909a1799611aef565b985098505050925050505f5b828110611b2157505050565b6121008102908015918181046121001483171561037757611b4290846109f9565b9161030082029082820461030014171561037757600192611b69611b6f9260208a016109f9565b906128d8565b01611b15565b60018152602001611500565b505050606090565b506101a082015181101561147f565b5082516101208301511415611478565b5f60ff604051611bb78161074b565b5f81525f60208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a082015292169182155f14611c9557505060405190611c288261074b565b81525f6020820152600460408201526004606082015260276080820152605060a0820152602060c082015261024060e082015260c0610100820152610520610120820152610974610140820152613000610160820152610c0061018082015260016101a08201526001915b565b60018303611d1957505060405190611cac8261074b565b815260016020820152600660408201526005606082015260316080820152603760a0820152603060c082015261028060e082015260806101008201526107a0610120820152610ced610140820152615a0061016082015261120061018082015260016101a0820152600191565b9092909160028114611d285750565b9150915060405190611d398261074b565b8152600160208201526008604082015260076060820152603c6080820152604b60a0820152604060c082015261028060e08201526080610100820152610a2061012082015261121361014082015261a80061016082015261180061018082015260026101a0820152600191565b6001600160401b0381116107675760051b60200190565b6040516101009190612020611dd2818361077b565b8382526001600160401b0382941161076757601f190190369060200137565b90611dfb82611da6565b611e08604051918261077b565b82815280926108d0601f1991611da6565b604051907f8000000080008008800000008000800880000000800080088000000080008008610940610a00611e4e818661077b565b604f85526020850190601f1901368237935f516020614a345f395f51905f526106608201527980820000000000008082000000000000808200000000000080826106808201527f800000000000808a800000000000808a800000000000808a800000000000808a6106a08201527f80000000800080008000000080008000800000008000800080000000800080006106c082015279808b000000000000808b000000000000808b000000000000808b6106e08201527b800000010000000080000001000000008000000100000000800000016107008201527f80000000800080818000000080008081800000008000808180000000800080816107208201527f8000000000008009800000000000800980000000000080098000000000008009610740820152788a000000000000008a000000000000008a000000000000008a61076082015278880000000000000088000000000000008800000000000000886107808201527b800080090000000080008009000000008000800900000000800080096107a08201527b8000000a000000008000000a000000008000000a000000008000000a6107c08201527b8000808b000000008000808b000000008000808b000000008000808b6107e08201527f800000000000008b800000000000008b800000000000008b800000000000008b6108008201527f80000000000080898000000000008089800000000000808980000000000080896108208201527f80000000000080038000000000008003800000000000800380000000000080036108408201527f80000000000080028000000000008002800000000000800280000000000080026108608201527f800000000000008080000000000000808000000000000080800000000000008061088082015279800a000000000000800a000000000000800a000000000000800a6108a08201527f800000008000000a800000008000000a800000008000000a800000008000000a6108c08201527f80000000800080818000000080008081800000008000808180000000800080816108e08201527f80000000000080808000000000008080800000000000808080000000000080806109008201527b800000010000000080000001000000008000000100000000800000016109208201520152565b906121a7816111fc565b50916121b282610b17565b9384156121ea575f5b8581106121cd57505050505050600190565b846121dc6111d5838588611364565b3b036112a6576001016121bb565b50505050505f90565b6122009093929193611ba8565b9390158015612228575b610875576040516108729461222060208361077b565b5f825261290f565b508051610160850151604001806040116103775761018086015161224b916109f9565b141561220a565b929161225e91846148ff565b612267826148ac565b61087261227b608061228061227b86613b61565b613a5f565b9401613b61565b604051906122976104208361077b565b61040082527e7b40640035e1dd00433aac00464ade001cfe140073f1ce0010170e0074b6d7610400837c0100495e020039756700396569004f062b0053df73004fe033004f066b60208201527e76b1ae00360dd50028edb000207fe4003972830070894a00088192006d3dc860408201527e4c72940041e0b40028a3d20066528a004a18a700794034000a52ee006b7d8160608201527e4e9f1d001a2877002571df001649ee007611bd00492bb7002af6970022d8d560808201527e36f72a0030911e0029d13f004926730050685f002010a2003887f70011b2c360a08201527e0603a4000e2bed0010b72c004a5f35001f9d1500428cd4003177f40020e61260c08201527e341c1d001ad873007366810049553f003952f60062564a0065ad0500439a1c60e08201527e53aa5f0030b62200087f38003b0e6d002c83da001c496e00330e2b001c5b706101008201527e2ee3f100137eb90057a930003ac6ef003fd54c004eb2ea00503ee1007bb1756101208201527e2648b4001ef256001d90a20045a6d4002ae59b0052589c006ef1f5003f72886101408201527e17510200075d59001187ba0052aca900773e9e000296d8002592ec004cff126101608201527e404ce8004aa582001e54e6004f16c1001a7e790003978f004e48170031b8596101808201527e5884cc001b4827005b63d0005d787a0035225e00400c7e006c09d1005bd5326101a08201527e6bc4d300258ecb002e534c00097a6c003b8820006d285c002ca4f800337caa6101c08201527e14b2a0005585360028f1860055795d004af67000234a860075e8260078de666101e08201527e05528c007adf59000f6e17005bf3da00459b7e00628b34005dbecb001a9e7b6102008201527d06d9006257c500574b3c0069a8ef002898380064b5fe007ef8f5002a4e786102208201527e120a23000154a80009b7ff00435e8700437ff8005cd5b4004dc04e004728af6102408201527e7f735d000c8d0d000f66d5005a6d800061ab9800185d9600437f31004682986102608201527e662960004bd5790028de0600465d8d0049b0e30009b434007c0db3005a68b06102808201527e409ba90064d3d50021762a0065859100246e390048c39b007bc759004f58596102a08201527e392db2002309230012eb6700454df20030c31c002854240013232e007faf806102c08201527e2dbfcb00022a0b007e832c0026587a006b337500095b76006be1cc005e061e6102e08201527e78e00d00628c37003da604004ae53c001f1d68006330bb007361b8005ea06c6103008201527e671ac700201fc6005ba4ff0060d7720008f201006de02400080e6d0056038e6103208201527e695688001e6d3e002603bd006a9dfa0007c017006dbfd40074d0bd0063e1e36103408201527e519573007ab60d002867ba002decd40058018c003f4cf5000b700900427e236103608201527e3cbd370027333300673957001a4b5d00196926001ef2060011c14e004c76c86103808201527e3cf42f007fb19a006af66c002e1669003352d6000347600008526000741e786103a08201527e2f6316006f0a110007c0f100776d0b000d1ff000345824000223d40068c5596103c08201527e5e8885002faa320023fc65005e69420051e0ed0065adb3002ca5e60079e1fe6103e08201520152565b6120008301929161014002016040015b82821061277057505050565b600581608092518060011a908060021a8160031a926103008160081b16835f1a1788526103c08260061b169060021c1760208801526103f08360041b169060041c17604087015260041a60021b9060061c17606085015201910190612764565b5f5b600881106127df57505050565b6001811b6080821c8060041b915f9160061b928160011b92818001905b838110612811575050505050506002016127d2565b85810288018160011b86016001810160021b8b015160e01c9060021b8b015160e01c9083870160021b8c015160e01c91868401935b84811061285a5750505050506001016127fc565b8087627fe0018a6020945182808a84880196875190890197838951978a01978189519186098089039801940992848385018e099185838303019052018952030189099162ffc0028383030190520101905201612846565b6120008101905b8181106128c3575050565b80627fe00161200060209351098152016128b8565b6120008101915b8282106128eb57505050565b600360209183518060101c82538060081c60018301536002820153019101906128df565b939293608052610280526103c0526101a0526101a05151610140608051015103613a5a576103c051511561036052604060805101519060606080510180516102e0525f610300526101006103005260405161018052612974610300516101805161077b565b6103005161018051369037604060805101516129b060a06080510151926129aa60c06080510151915160e0608051015190610895565b906109f9565b6101a05101600192835f935f5b8181106139a8575b505061397c575b50505015613976576102e05160081b6102e051810461030051146102e051151715610377576008810180911161037757612a0590611df1565b61026052612a1f602061026051016101a051608051613ba4565b1561397657612a2c612287565b6103a0525f5b6102e051811061393a5750612a45611e19565b61034052612a5b61030051608051015183610895565b61038052610380516040016040116103775760606103805101610380516040011161037757612a8f606061038051016108a8565b610160526103605161391057612ae3606060206103c0510151602060406103c0510151945b6040519586938385015260408401528051918291018484015e81015f838201520301601f19810183528261077b565b612afc8151602060c060805101519301610340516148ff565b5f5b61032081106138eb575061032061034051015f5b60c081106138d6575081601f926103209260206101a05101905e610340510101536103a76103405101608081515f1a1790535f5b601181106138345750612b5b610340516148ac565b612b6a61227b61034051613b61565b612b7c61227b60806103405101613b61565b9060206101605101526040610160510152612b95611dbd565b610200526080805101515f610220526001600160401b03610340515160401c16610220526008906103005103610300518111610377576103e0525b610300516103e0511061378b5750612bf460206103a05101602061020051016127d0565b61036051613777575b5f61012052612c0e6114dd8261087d565b6102a081905260200161012052610360516131855760606103c051018060206103c0510111610377575f5b82811061311f5750505b6103605161310f575f5b5f5b828110612ff057505050606061016051016020610160510111610377576080516020810151151560a05261030051015160c0525f5b60406080510151811015612f795780612100810204612100148115171561037757612cb66121008202610120516109f9565b5f5b60088110612e5157506008821015612e3d578160051b610180510151612cef612ce360c05185610895565b606061016051016109f9565b60a05115612d9457905f915b610300518310612d1357505050506001905b01612c84565b5f604084015b808510612d2b57508152602001612cfb565b9390600190600f6207fe008460051b890151818106906203ff0082119283910401918589881c16612d78575b50501660048460021b16601f85851c16601f0360031b011b17910193612d19565b15901515165f14612d8d5783015b5f80612d57565b8101612d86565b915f925b610300518410612dae5750505050600190612d0d565b5f5f5b60048110612de357506004918160039260101c9062ff000061ff0082169160101b16171760e81b815201930192612d98565b90600190602c8388018060051b8701516202e800858a828406936201740085119384910401941c16612e20575b505006836006021b179101612db1565b15901515165f14612e355783015b5f80612e10565b602b01612e2e565b634e487b7160e01b5f52603260045260245ffd5b6080811c6020805f198360011b0160021b6103a0510101915f190160021b6103a05101016001831b8060051b9060016101005260068514612f6c575b8560e05260071b92818001905b612000870160e05110612eb4575050505050600201612cb8565b627fe00161010051855160e01c0960031982015160e01c825160e01c8560e051019260e0515b848110612efd575050505050600719019260031901928460e0510160e052612e9a565b8060209151627fe0018a8084019287838d865190880193828d63ffc0020082885199890197828951968881019803019009988481019403019009948363ffc00200848403018d0990526101005191010986528363ffc00200848403018909905261010051910109905201612eda565b627f602161010052612e8d565b50612f94610380516040016020610160510161034051612252565b60c060805101519160206101a0510151149160308114612fc7575b604014612fba575090565b60406101a0510151141690565b6101a051604001516fffffffffffffffffffffffffffffffff1983811691161490921691612faf565b6121008102811590828104612100148217156103775761301390610120516109f9565b9061036051155f146130ab5760606103c051018060206103c0510111610377576080516101600151613044916109f9565b9061030084029084820461030014171561037757613061916109f9565b60206102005101906120008301925b83811061308557505050506001905b01612c4f565b602080600392627fe00180865160e81c8851098103825108815201930191019091613070565b506130ba838361028051612754565b6130ca60206103a05101846127d0565b8260206102005101906120008301925b8381106130ed575050505060019061307f565b6020808092627fe00180865188510981038251088152019301910190916130da565b6020613119611dbd565b01612c4d565b602061210082026102a05101015f5b6102e0518110613142575050600101612c39565b80600d1b61026051015f905b612000821061316157505060010161312e565b90946003602091878601838986010151825160e81c0281510190520195019061314e565b6131ab602061028051015161319d6102e05184610895565b610320525f6102c052613a5f565b610240525b610320516102c05160021b1015613772575f6101e08190526101c0525b60046101c05110613732575f5b610320811061372157505f516020614a345f395f51905f526102405160c01c0261034051525f516020614a345f395f51905f526001600160401b036102405160801c160260206103405101525f516020614a345f395f51905f526001600160401b036102405160401c160260406103405101525f516020614a345f395f51905f526001600160401b0361024051160260606103405101525f5f5b600481106136f1575060806103405101527801000000000000000100000000000000010000000000000001603f1b6102806103405101525b6132b8610340516148ac565b60015f5b600481106132da5750156132ac5760016102c051016102c0526131b0565b61200061ffff6101e0518360041b1c1610156136e9575f6101405261330a6102e051826102c05160021b01611444565b610140526102e0511561144e5761ffff6101e0518260041b1c16602061210061014051026102a05101010161ffff6101e0518360041b1c1660206102e051846102c05160021b0106600d1b61026051010101610340515b6102a0610340510181106133ca575b505061200090602061210061014051026102a051010181038360041b1b61ffff8460041b1b196101e05116176101e052602061210061014051026102a05101019003106133c2575b6001905b016132bc565b5f91506133b8565b612000602061210061014051026102a0510101018310156136e45760408101518460061b1c60801b7780000080000080000080000080000080000080000080000076200000200000200000200000200000200000200000200060208401518760061b1c60401b92667fe0007fe0007f60401b85518960061b1c946001600160401b0360801b831667ffffffffffffffff60401b82166001600160401b03881617175f521667e0007fe0007fe000851617906703ff0003ff0003ff60851b161701165f146136135750627fffff5f5116627fe00181106135fa575b50627fffff5f5160181c16627fe00181106135e1575b50627fffff5f5160301c16627fe00181106135c8575b50627fffff5f5160481c16627fe00181106135af575b50627fffff5f5160601c16627fe0018110613596575b50627fffff5f5160781c16627fe001811061357d575b50627fffff5f5160901c16627fe0018110613564575b50627fffff5f5160a81c16627fe0018110613549575b506060905b01613361565b6020839481926060949551028151018152019301919061353e565b825184519102018352602092830192909101905f613528565b825184519102018352602092830192909101905f613512565b825184519102018352602092830192909101905f6134fc565b825184519102018352602092830192909101905f6134e6565b825184519102018352602092830192909101905f6134d0565b825184519102018352602092830192909101905f6134ba565b825184519102018352602092830192909101905f6134a4565b928293627fffff60609394519116028151018152602081016020850151627fffff5f5160181c16028151019052604081016040850151627fffff5f5160301c1602815101905281810182850151627fffff5f5160481c16028151019052608081016080850151627fffff5f51851c1602815101905260a0810160a0850151627fffff5f5160781c1602815101905260c0810160c0850151627fffff5f5160901c1602815101905260e0810160e0850151627fffff5f5160a81c16028151019052610300510192610300510191613543565b613370565b6001906133bc565b90600190621f0000836102c05160021b016102e051810460081b906102e051900617178360061b1b179101613274565b805f602092610340510152016131da565b610320516101c0516102c05160021b011015613759575b60016101c051016101c0526131cd565b6120006101c05160041b1b6101e051176101e052613749565b612c43565b613786602061020051016128b1565b612bfd565b91905b6088831461381f575b60ff601f198460021b1661034051015160388560031b166040011c16925f19811461037757600101926103e0518111156137d1575061378e565b6020909391929360051b610200510101805160206103e05160051b61020051010152627fdfff600161022051160260010190526102205160011c6102205260016103e051016103e052612bd0565b915061382d610340516148ac565b5f91613797565b8061384d61032060049360031b61034051010151613a5f565b8160051b610340510167ffffffffffffffff60401b8260801c16815118815260116001840110613880575b505001612b46565b606081602067ffffffffffffffff60401b93018377ffffffffffffffffffffffffffffffff00000000000000008660401c16168151189052604081018385168151189052019160401b1681511890525f80613878565b805f6103206020936103405101015201612b12565b61034051810180516fffffffffffffffff000000000000000019169052602001612afe565b612ae36060602092613932610120608051015185610280510161034051612252565b949091612ab4565b80600d1b9080820461200014811517156103775761397060019261396b60206103a0510191602061026051016109f9565b6127d0565b01612a32565b50505f90565b915b828110156129cc57602081830101515f1a61399b5760010161397e565b505050505f5f80806129cc565b9091506020818401850101515f1a83811186821017613a4b5790869291865f915b8089106139f5575b505083156139ef5761018051600583901b01528692506001016129bd565b506129c5565b9190978093949550870160208101515f1a90898511613a24575b5090600180921b1792019688949392916139c9565b601f829101515f1a1015613a38575f613a0f565b50939297505094505f9586925f806139d1565b50505092505f92835f806129c5565b505f90565b7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff8160081b9160081c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff7fff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff007dff000000ff000000ff000000ff000000ff000000ff000000ff000000ff0085167cff000000ff000000ff000000ff000000ff000000ff000000ff000000ff84161760101b941691161760101c917dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff82821679ffff000000000000ffff000000000000ffff000000000000ffff85161760201b93161760201c161790565b6001600160401b0360608201511667ffffffffffffffff60401b604083015160401b1617906001600160401b0360801b602082015160801b16905160c01b171790565b60ff81511615613cc3575160ff16600114613c3e5760019161e0008101916060015b828210613bd35750505090565b60058160409251958660021a96620f00008860101b168160011a60081b825f1a1717978160041a600c1b9160031a60041b9060041c171790620fff8882106078831116620fff88891060788a11161616966287e0010385526287e00103602085015201910190613bc6565b60019161a0008101916050015b828210613c585750505090565b60058160409251958660021a96620f00008860101b168160011a60081b825f1a1717978160041a600c1b9160031a60041b9060041c171790620fff3c821060c4831116620fff3c891060c48a11161616966287e0010385526287e00103602085015201910190613c4b565b506001916180008101916040015b828210613cde5750505090565b60098160809251958660021a968060041a8160061a91620300008a60101b168160011a60081b825f1a1717996203c00083600e1b16908260031a60061b9060021c1717916203f00084600c1b16908260051a60041b9060041c1717928160081a600a1b9160071a60021b9060061c1717926203ffb28410604e8511166203ffb28410604e851116166203ffb28310604e8411166203ffb28c10604e8d1116161616986281e0010387526281e0010360208701526281e0010360408601526281e00103606085015201910190613cd1565b61030091926102808201516101e083015161014084015160a08501518551181818186102a083015161020084015161016085015160c08601516020870151181818186102c084015161022085015161018086015160e08701516040880151181818186102e08501516102408601516101a087015161010088015160608901511818181892868601516102608701516101c088015161012089015160808a015118181818935f516020614a345f395f51905f5284603f1c165f516020614a345f395f51905f52198560011b1617851886525f516020614a345f395f51905f5283603f1c165f516020614a345f395f51905f52198460011b1617821860208701525f516020614a345f395f51905f5281603f1c165f516020614a345f395f51905f52198260011b1617841860408701525f516020614a345f395f51905f5285603f1c165f516020614a345f395f51905f52198660011b1617831860608701525f516020614a345f395f51905f5282603f1c165f516020614a345f395f51905f52198360011b1617811860808701525f516020614a345f395f51905f5284603f1c165f516020614a345f395f51905f52198560011b16178518875118925f516020614a345f395f51905f5281603f1c165f516020614a345f395f51905f52198260011b1617831860c0890151187ffffff00000000000fffff00000000000fffff00000000000fffff000000000007d0fffffffffff00000fffffffffff00000fffffffffff00000fffffffffff8260141c1691602c1b1617945f516020614a345f395f51905f5283603f1c165f516020614a345f395f51905f52198460011b161718610180890151187ffffff80000000000fffff80000000000fffff80000000000fffff800000000007d07ffffffffff000007ffffffffff000007ffffffffff000007ffffffffff8260151c1691602b1b1617955f516020614a345f395f51905f5281603f1c16905f516020614a345f395f51905f52199060011b161718610240880151187a1fffff00000000001fffff00000000001fffff00000000001fffff81602b1c16907a1fffff00000000001fffff00000000001fffff00000000001fffff199060151b1617915f516020614a345f395f51905f5281603f1c16905f516020614a345f395f51905f52199060011b1617188787015118793fff0000000000003fff0000000000003fff0000000000003fff8160321c1690793fff0000000000003fff0000000000003fff0000000000003fff1990600e1b161793808419168318895281811916841860208a01528482191618604089015281841916186060880152191618608085015260608101516060830151187ffffffffff0000000fffffffff0000000fffffffff0000000fffffffff00000007b0fffffff000000000fffffff000000000fffffff000000000fffffff8260241c1691601c1b16176080820151610120840151187a0fffff00000000000fffff00000000000fffff00000000000fffff81602c1c16907a0fffff00000000000fffff00000000000fffff00000000000fffff199060141b1617825161014085015118780700000000000000070000000000000007000000000000000781603d1c16907807000000000000000700000000000000070000000000000007199060031b1617916020840151610200860151187fffffe00000000000ffffe00000000000ffffe00000000000ffffe000000000007d1fffffffffff00001fffffffffff00001fffffffffff00001fffffffffff8260131c1691602d1b161760408501516102c0870151187fe000000000000000e000000000000000e000000000000000e0000000000000007f1fffffffffffffff1fffffffffffffff1fffffffffffffff1fffffffffffffff8260031c1691603d1b16179380841916831860a08a015281811916841860c08a0152848219161860e0890152818419161861010088015219161861012085015260208101516020830151185f516020614a345f395f51905f5281603f1c16905f516020614a345f395f51905f52199060011b1617604082015160e084015118783f000000000000003f000000000000003f000000000000003f81603a1c1690783f000000000000003f000000000000003f000000000000003f199060061b161760608301516101a0850151187ffffffffffe000000fffffffffe000000fffffffffe000000fffffffffe0000007b01ffffff0000000001ffffff0000000001ffffff0000000001ffffff8260271c169160191b16179160808401516102608601511878ff00000000000000ff00000000000000ff00000000000000ff8160381c169078ff00000000000000ff00000000000000ff00000000000000ff199060081b16178451610280870151187a03ffff000000000003ffff000000000003ffff000000000003ffff81602e1c16907a03ffff000000000003ffff000000000003ffff000000000003ffff199060121b1617938084191683186101408a01528181191684186101608a0152848219161861018089015281841916186101a08801521916186101c085015260808101516080830151187ffffffffff8000000fffffffff8000000fffffffff8000000fffffffff80000007b07ffffff0000000007ffffff0000000007ffffff0000000007ffffff8260251c1691601b1b1617815160a0840151187ffffffff000000000fffffff000000000fffffff000000000fffffff0000000007c0fffffffff0000000fffffffff0000000fffffffff0000000fffffffff82601c1c169160241b16176020830151610160850151187903ff00000000000003ff00000000000003ff00000000000003ff8160361c16907903ff00000000000003ff00000000000003ff00000000000003ff1990600a1b161791604084015161022086015118797fff0000000000007fff0000000000007fff0000000000007fff8160311c1690797fff0000000000007fff0000000000007fff0000000000007fff1990600f1b161760608501516102e0870151187fff00000000000000ff00000000000000ff00000000000000ff000000000000007effffffffffffff00ffffffffffffff00ffffffffffffff00ffffffffffffff8260081c169160381b1617938084191683186101e08a01528181191684186102008a01528482191618610220890152818419161861024088015219161861026085015260408101516040830151187fc000000000000000c000000000000000c000000000000000c0000000000000007f3fffffffffffffff3fffffffffffffff3fffffffffffffff3fffffffffffffff8260021c1691603e1b16176060820151610100840151187fff80000000000000ff80000000000000ff80000000000000ff800000000000007e7fffffffffffff007fffffffffffff007fffffffffffff007fffffffffffff8260091c169160371b16179160808101516101c0850151187fffffff8000000000ffffff8000000000ffffff8000000000ffffff80000000007c7fffffffff0000007fffffffff0000007fffffffff0000007fffffffff8260191c169160271b1617936102a0602083516101e0840151187ffffffe0000000000fffffe0000000000fffffe0000000000fffffe00000000007d01ffffffffff000001ffffffffff000001ffffffffff000001ffffffffff8260171c169160291b161793015191015118780300000000000000030000000000000003000000000000000381603e1c16907803000000000000000300000000000000030000000000000003199060021b1617938084191683186102808801528181191684186102a088015284821916186102c087015281841916186102e0860152191618910152565b61094081019061032081015f5b61030081106148c85750505050565b6040906148d6858486613dae565b61066081850161064081015185511885526148f2878787613dae565b01518451188452016148b9565b90915f5b61032081106149a657505b6088811015614963576103208201925f5b60c08110614952575091601f610320838694608896611c93985e8301015361031f83820101608081515f1a1790536149b3565b5f848201610320015260200161491f565b91614970608882846149b3565b614979826148ac565b60888101809111610377579160871981019081111561490e57634e487b7160e01b5f52601160045260245ffd5b5f83820152602001614903565b909160031c5f5b8181106149c75750505050565b806149d960049260031b860151613a5f565b8160051b85018160c01c81511881528460018401106149fb575b5050016149ba565b60608160206001600160401b039301838560801c16815118905260408101838560401c16815118905201911681511890525f806149f356fe0000000000000001000000000000000100000000000000010000000000000001a2646970667358221220ac3bbc62b814e89bfedd08f05423842929cc751d4ad313b92a161b948402bffb64736f6c63430008250033"
570
+ }