@aintivirus-ai/mixer-sdk 1.0.6 → 1.0.7

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 (67) hide show
  1. package/README.md +6 -15
  2. package/dist/config.d.ts +37 -0
  3. package/dist/config.js +95 -0
  4. package/dist/createSDK.d.ts +29 -0
  5. package/dist/createSDK.js +48 -0
  6. package/dist/errors.d.ts +46 -0
  7. package/dist/errors.js +72 -0
  8. package/dist/evm/abis/AintiVirusFactory.json +1463 -0
  9. package/dist/evm/abis/AintiVirusPayment.json +677 -0
  10. package/dist/evm/abis/AintiVirusStaking.json +586 -0
  11. package/dist/evm/abis/WETHGateway.json +137 -0
  12. package/dist/evm/index.d.ts +222 -22
  13. package/dist/evm/index.js +681 -246
  14. package/dist/evm/multicall.d.ts +24 -0
  15. package/dist/evm/multicall.js +43 -0
  16. package/dist/evm/subgraph/client.d.ts +37 -21
  17. package/dist/evm/subgraph/client.js +126 -80
  18. package/dist/evm/subgraph/queries.d.ts +13 -11
  19. package/dist/evm/subgraph/queries.js +85 -40
  20. package/dist/evm/subgraph/types.d.ts +46 -28
  21. package/dist/evm/subgraph/utils.d.ts +9 -2
  22. package/dist/evm/subgraph/utils.js +21 -4
  23. package/dist/hooks/context.d.ts +48 -0
  24. package/dist/hooks/context.js +115 -0
  25. package/dist/hooks/index.d.ts +15 -23
  26. package/dist/hooks/index.js +17 -23
  27. package/dist/hooks/useAdmin.d.ts +49 -35
  28. package/dist/hooks/useAdmin.js +99 -163
  29. package/dist/hooks/useAintiVirus.d.ts +9 -27
  30. package/dist/hooks/useAintiVirus.js +55 -125
  31. package/dist/hooks/useClaim.d.ts +6 -19
  32. package/dist/hooks/useClaim.js +24 -67
  33. package/dist/hooks/useDeploy.d.ts +11 -22
  34. package/dist/hooks/useDeploy.js +18 -82
  35. package/dist/hooks/useDeposit.d.ts +24 -21
  36. package/dist/hooks/useDeposit.js +47 -77
  37. package/dist/hooks/useEVMReady.d.ts +19 -0
  38. package/dist/hooks/useEVMReady.js +42 -0
  39. package/dist/hooks/usePayment.d.ts +37 -0
  40. package/dist/hooks/usePayment.js +75 -0
  41. package/dist/hooks/useStake.d.ts +6 -19
  42. package/dist/hooks/useStake.js +28 -73
  43. package/dist/hooks/useView.d.ts +6 -19
  44. package/dist/hooks/useView.js +29 -76
  45. package/dist/hooks/useWithdraw.d.ts +24 -23
  46. package/dist/hooks/useWithdraw.js +26 -99
  47. package/dist/hooks/useWithdrawByGiftCard.d.ts +34 -0
  48. package/dist/hooks/useWithdrawByGiftCard.js +44 -0
  49. package/dist/hooks/utils.d.ts +4 -2
  50. package/dist/hooks/utils.js +82 -10
  51. package/dist/index.d.ts +13 -14
  52. package/dist/index.js +58 -54
  53. package/dist/sdkConfig.d.ts +14 -0
  54. package/dist/sdkConfig.js +17 -0
  55. package/dist/solana/index.d.ts +1 -0
  56. package/dist/solana/index.js +24 -23
  57. package/dist/types/index.d.ts +63 -7
  58. package/dist/utils/circuit.d.ts +14 -0
  59. package/dist/utils/circuit.js +17 -0
  60. package/dist/utils/crypto.d.ts +2 -0
  61. package/dist/utils/crypto.js +7 -4
  62. package/dist/utils/proof.d.ts +11 -7
  63. package/dist/utils/proof.js +46 -37
  64. package/dist/utils/withdrawProof.d.ts +19 -0
  65. package/dist/utils/withdrawProof.js +32 -0
  66. package/dist/utils/witness_calculator.js +381 -0
  67. package/package.json +82 -69
@@ -0,0 +1,1463 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "AintiVirusFactory",
4
+ "sourceName": "contracts/AintiVirusFactory.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "contract IWETH",
10
+ "name": "_weth",
11
+ "type": "address"
12
+ },
13
+ {
14
+ "internalType": "address",
15
+ "name": "_verifier",
16
+ "type": "address"
17
+ },
18
+ {
19
+ "internalType": "address",
20
+ "name": "_hasher",
21
+ "type": "address"
22
+ },
23
+ {
24
+ "internalType": "uint256",
25
+ "name": "_feeBps",
26
+ "type": "uint256"
27
+ },
28
+ {
29
+ "internalType": "address",
30
+ "name": "_feeCollector",
31
+ "type": "address"
32
+ },
33
+ {
34
+ "internalType": "uint256",
35
+ "name": "_rewardsShareBps",
36
+ "type": "uint256"
37
+ }
38
+ ],
39
+ "stateMutability": "nonpayable",
40
+ "type": "constructor"
41
+ },
42
+ {
43
+ "inputs": [],
44
+ "name": "AccessControlBadConfirmation",
45
+ "type": "error"
46
+ },
47
+ {
48
+ "inputs": [
49
+ {
50
+ "internalType": "address",
51
+ "name": "account",
52
+ "type": "address"
53
+ },
54
+ {
55
+ "internalType": "bytes32",
56
+ "name": "neededRole",
57
+ "type": "bytes32"
58
+ }
59
+ ],
60
+ "name": "AccessControlUnauthorizedAccount",
61
+ "type": "error"
62
+ },
63
+ {
64
+ "inputs": [],
65
+ "name": "ArraysLengthMismatch",
66
+ "type": "error"
67
+ },
68
+ {
69
+ "inputs": [],
70
+ "name": "ETHAmountMismatch",
71
+ "type": "error"
72
+ },
73
+ {
74
+ "inputs": [],
75
+ "name": "FailedCall",
76
+ "type": "error"
77
+ },
78
+ {
79
+ "inputs": [],
80
+ "name": "FeeCollectorNotSet",
81
+ "type": "error"
82
+ },
83
+ {
84
+ "inputs": [],
85
+ "name": "FeeExceedsAmount",
86
+ "type": "error"
87
+ },
88
+ {
89
+ "inputs": [],
90
+ "name": "FeeMismatch",
91
+ "type": "error"
92
+ },
93
+ {
94
+ "inputs": [],
95
+ "name": "FeeRateExceedsMaximum",
96
+ "type": "error"
97
+ },
98
+ {
99
+ "inputs": [],
100
+ "name": "GiftCardWithdrawalsDisabled",
101
+ "type": "error"
102
+ },
103
+ {
104
+ "inputs": [],
105
+ "name": "HasherNotSet",
106
+ "type": "error"
107
+ },
108
+ {
109
+ "inputs": [
110
+ {
111
+ "internalType": "uint256",
112
+ "name": "balance",
113
+ "type": "uint256"
114
+ },
115
+ {
116
+ "internalType": "uint256",
117
+ "name": "needed",
118
+ "type": "uint256"
119
+ }
120
+ ],
121
+ "name": "InsufficientBalance",
122
+ "type": "error"
123
+ },
124
+ {
125
+ "inputs": [],
126
+ "name": "InvalidAmount",
127
+ "type": "error"
128
+ },
129
+ {
130
+ "inputs": [],
131
+ "name": "InvalidAsset",
132
+ "type": "error"
133
+ },
134
+ {
135
+ "inputs": [],
136
+ "name": "InvalidRelayer",
137
+ "type": "error"
138
+ },
139
+ {
140
+ "inputs": [],
141
+ "name": "MixerExists",
142
+ "type": "error"
143
+ },
144
+ {
145
+ "inputs": [],
146
+ "name": "MixerNotDeployed",
147
+ "type": "error"
148
+ },
149
+ {
150
+ "inputs": [],
151
+ "name": "NoRewards",
152
+ "type": "error"
153
+ },
154
+ {
155
+ "inputs": [],
156
+ "name": "RewardsAlreadyRecovered",
157
+ "type": "error"
158
+ },
159
+ {
160
+ "inputs": [],
161
+ "name": "PaymentContractMissing",
162
+ "type": "error"
163
+ },
164
+ {
165
+ "inputs": [],
166
+ "name": "ReentrancyGuardReentrantCall",
167
+ "type": "error"
168
+ },
169
+ {
170
+ "inputs": [],
171
+ "name": "RewardPoolShareExceedsMax",
172
+ "type": "error"
173
+ },
174
+ {
175
+ "inputs": [
176
+ {
177
+ "internalType": "address",
178
+ "name": "token",
179
+ "type": "address"
180
+ }
181
+ ],
182
+ "name": "SafeERC20FailedOperation",
183
+ "type": "error"
184
+ },
185
+ {
186
+ "inputs": [],
187
+ "name": "SeasonNotEnded",
188
+ "type": "error"
189
+ },
190
+ {
191
+ "inputs": [],
192
+ "name": "UnregisteredPartner",
193
+ "type": "error"
194
+ },
195
+ {
196
+ "inputs": [],
197
+ "name": "UsersStaked",
198
+ "type": "error"
199
+ },
200
+ {
201
+ "inputs": [],
202
+ "name": "VerifierNotSet",
203
+ "type": "error"
204
+ },
205
+ {
206
+ "anonymous": false,
207
+ "inputs": [
208
+ {
209
+ "indexed": true,
210
+ "internalType": "address",
211
+ "name": "asset",
212
+ "type": "address"
213
+ },
214
+ {
215
+ "indexed": false,
216
+ "internalType": "uint256",
217
+ "name": "amount",
218
+ "type": "uint256"
219
+ },
220
+ {
221
+ "indexed": false,
222
+ "internalType": "uint256",
223
+ "name": "protocolFee",
224
+ "type": "uint256"
225
+ },
226
+ {
227
+ "indexed": false,
228
+ "internalType": "uint256",
229
+ "name": "extraFee",
230
+ "type": "uint256"
231
+ },
232
+ {
233
+ "indexed": true,
234
+ "internalType": "bytes32",
235
+ "name": "commitment",
236
+ "type": "bytes32"
237
+ },
238
+ {
239
+ "indexed": true,
240
+ "internalType": "address",
241
+ "name": "partnerAddress",
242
+ "type": "address"
243
+ }
244
+ ],
245
+ "name": "Deposit",
246
+ "type": "event"
247
+ },
248
+ {
249
+ "anonymous": false,
250
+ "inputs": [
251
+ {
252
+ "indexed": true,
253
+ "internalType": "address",
254
+ "name": "feeCollector",
255
+ "type": "address"
256
+ },
257
+ {
258
+ "indexed": false,
259
+ "internalType": "uint256",
260
+ "name": "feeBps",
261
+ "type": "uint256"
262
+ },
263
+ {
264
+ "indexed": false,
265
+ "internalType": "uint256",
266
+ "name": "rewardsShareBps",
267
+ "type": "uint256"
268
+ }
269
+ ],
270
+ "name": "FactoryInitialized",
271
+ "type": "event"
272
+ },
273
+ {
274
+ "anonymous": false,
275
+ "inputs": [
276
+ {
277
+ "indexed": true,
278
+ "internalType": "address",
279
+ "name": "oldWallet",
280
+ "type": "address"
281
+ },
282
+ {
283
+ "indexed": true,
284
+ "internalType": "address",
285
+ "name": "newWallet",
286
+ "type": "address"
287
+ }
288
+ ],
289
+ "name": "FeeCollectorUpdated",
290
+ "type": "event"
291
+ },
292
+ {
293
+ "anonymous": false,
294
+ "inputs": [
295
+ {
296
+ "indexed": true,
297
+ "internalType": "address",
298
+ "name": "feeCollector",
299
+ "type": "address"
300
+ },
301
+ {
302
+ "indexed": false,
303
+ "internalType": "uint256",
304
+ "name": "feeBps",
305
+ "type": "uint256"
306
+ },
307
+ {
308
+ "indexed": false,
309
+ "internalType": "uint256",
310
+ "name": "rewardsShareBps",
311
+ "type": "uint256"
312
+ }
313
+ ],
314
+ "name": "FeeConfigUpdated",
315
+ "type": "event"
316
+ },
317
+ {
318
+ "anonymous": false,
319
+ "inputs": [
320
+ {
321
+ "indexed": false,
322
+ "internalType": "uint256",
323
+ "name": "oldFeeRate",
324
+ "type": "uint256"
325
+ },
326
+ {
327
+ "indexed": false,
328
+ "internalType": "uint256",
329
+ "name": "newFeeRate",
330
+ "type": "uint256"
331
+ }
332
+ ],
333
+ "name": "FeeRateUpdated",
334
+ "type": "event"
335
+ },
336
+ {
337
+ "anonymous": false,
338
+ "inputs": [
339
+ {
340
+ "indexed": true,
341
+ "internalType": "address",
342
+ "name": "asset",
343
+ "type": "address"
344
+ },
345
+ {
346
+ "indexed": false,
347
+ "internalType": "uint256",
348
+ "name": "amount",
349
+ "type": "uint256"
350
+ },
351
+ {
352
+ "indexed": false,
353
+ "internalType": "bool",
354
+ "name": "enabled",
355
+ "type": "bool"
356
+ }
357
+ ],
358
+ "name": "GiftCardEnabledUpdated",
359
+ "type": "event"
360
+ },
361
+ {
362
+ "anonymous": false,
363
+ "inputs": [
364
+ {
365
+ "indexed": true,
366
+ "internalType": "address",
367
+ "name": "asset",
368
+ "type": "address"
369
+ },
370
+ {
371
+ "indexed": false,
372
+ "internalType": "uint256",
373
+ "name": "amount",
374
+ "type": "uint256"
375
+ },
376
+ {
377
+ "indexed": false,
378
+ "internalType": "address",
379
+ "name": "to",
380
+ "type": "address"
381
+ },
382
+ {
383
+ "indexed": true,
384
+ "internalType": "bytes32",
385
+ "name": "orderId",
386
+ "type": "bytes32"
387
+ },
388
+ {
389
+ "indexed": false,
390
+ "internalType": "bytes32",
391
+ "name": "nullifierHash",
392
+ "type": "bytes32"
393
+ }
394
+ ],
395
+ "name": "GiftCardWithdrawal",
396
+ "type": "event"
397
+ },
398
+ {
399
+ "anonymous": false,
400
+ "inputs": [
401
+ {
402
+ "indexed": true,
403
+ "internalType": "contract AintiVirusMixer",
404
+ "name": "mixer",
405
+ "type": "address"
406
+ },
407
+ {
408
+ "indexed": true,
409
+ "internalType": "address",
410
+ "name": "asset",
411
+ "type": "address"
412
+ },
413
+ {
414
+ "indexed": true,
415
+ "internalType": "uint256",
416
+ "name": "amount",
417
+ "type": "uint256"
418
+ }
419
+ ],
420
+ "name": "MixerDeployed",
421
+ "type": "event"
422
+ },
423
+ {
424
+ "anonymous": false,
425
+ "inputs": [
426
+ {
427
+ "indexed": true,
428
+ "internalType": "address",
429
+ "name": "partner",
430
+ "type": "address"
431
+ },
432
+ {
433
+ "indexed": false,
434
+ "internalType": "uint256",
435
+ "name": "extraFee",
436
+ "type": "uint256"
437
+ }
438
+ ],
439
+ "name": "PartnerAdded",
440
+ "type": "event"
441
+ },
442
+ {
443
+ "anonymous": false,
444
+ "inputs": [
445
+ {
446
+ "indexed": true,
447
+ "internalType": "address",
448
+ "name": "partner",
449
+ "type": "address"
450
+ },
451
+ {
452
+ "indexed": false,
453
+ "internalType": "uint256",
454
+ "name": "extraFee",
455
+ "type": "uint256"
456
+ }
457
+ ],
458
+ "name": "PartnerExtraFeeUpdated",
459
+ "type": "event"
460
+ },
461
+ {
462
+ "anonymous": false,
463
+ "inputs": [
464
+ {
465
+ "indexed": true,
466
+ "internalType": "address",
467
+ "name": "partner",
468
+ "type": "address"
469
+ }
470
+ ],
471
+ "name": "PartnerRemoved",
472
+ "type": "event"
473
+ },
474
+ {
475
+ "anonymous": false,
476
+ "inputs": [
477
+ {
478
+ "indexed": false,
479
+ "internalType": "uint256",
480
+ "name": "oldBps",
481
+ "type": "uint256"
482
+ },
483
+ {
484
+ "indexed": false,
485
+ "internalType": "uint256",
486
+ "name": "newBps",
487
+ "type": "uint256"
488
+ }
489
+ ],
490
+ "name": "RewardPoolShareUpdated",
491
+ "type": "event"
492
+ },
493
+ {
494
+ "anonymous": false,
495
+ "inputs": [
496
+ {
497
+ "indexed": true,
498
+ "internalType": "bytes32",
499
+ "name": "role",
500
+ "type": "bytes32"
501
+ },
502
+ {
503
+ "indexed": true,
504
+ "internalType": "bytes32",
505
+ "name": "previousAdminRole",
506
+ "type": "bytes32"
507
+ },
508
+ {
509
+ "indexed": true,
510
+ "internalType": "bytes32",
511
+ "name": "newAdminRole",
512
+ "type": "bytes32"
513
+ }
514
+ ],
515
+ "name": "RoleAdminChanged",
516
+ "type": "event"
517
+ },
518
+ {
519
+ "anonymous": false,
520
+ "inputs": [
521
+ {
522
+ "indexed": true,
523
+ "internalType": "bytes32",
524
+ "name": "role",
525
+ "type": "bytes32"
526
+ },
527
+ {
528
+ "indexed": true,
529
+ "internalType": "address",
530
+ "name": "account",
531
+ "type": "address"
532
+ },
533
+ {
534
+ "indexed": true,
535
+ "internalType": "address",
536
+ "name": "sender",
537
+ "type": "address"
538
+ }
539
+ ],
540
+ "name": "RoleGranted",
541
+ "type": "event"
542
+ },
543
+ {
544
+ "anonymous": false,
545
+ "inputs": [
546
+ {
547
+ "indexed": true,
548
+ "internalType": "bytes32",
549
+ "name": "role",
550
+ "type": "bytes32"
551
+ },
552
+ {
553
+ "indexed": true,
554
+ "internalType": "address",
555
+ "name": "account",
556
+ "type": "address"
557
+ },
558
+ {
559
+ "indexed": true,
560
+ "internalType": "address",
561
+ "name": "sender",
562
+ "type": "address"
563
+ }
564
+ ],
565
+ "name": "RoleRevoked",
566
+ "type": "event"
567
+ },
568
+ {
569
+ "anonymous": false,
570
+ "inputs": [
571
+ {
572
+ "indexed": true,
573
+ "internalType": "address",
574
+ "name": "deployer",
575
+ "type": "address"
576
+ },
577
+ {
578
+ "indexed": true,
579
+ "internalType": "address",
580
+ "name": "staking",
581
+ "type": "address"
582
+ }
583
+ ],
584
+ "name": "StakingDeployed",
585
+ "type": "event"
586
+ },
587
+ {
588
+ "anonymous": false,
589
+ "inputs": [
590
+ {
591
+ "indexed": true,
592
+ "internalType": "address",
593
+ "name": "asset",
594
+ "type": "address"
595
+ },
596
+ {
597
+ "indexed": true,
598
+ "internalType": "uint256",
599
+ "name": "seasonId",
600
+ "type": "uint256"
601
+ },
602
+ {
603
+ "indexed": false,
604
+ "internalType": "uint256",
605
+ "name": "amount",
606
+ "type": "uint256"
607
+ }
608
+ ],
609
+ "name": "UnclaimedRewardsRecovered",
610
+ "type": "event"
611
+ },
612
+ {
613
+ "anonymous": false,
614
+ "inputs": [
615
+ {
616
+ "indexed": true,
617
+ "internalType": "address",
618
+ "name": "asset",
619
+ "type": "address"
620
+ },
621
+ {
622
+ "indexed": false,
623
+ "internalType": "uint256",
624
+ "name": "amount",
625
+ "type": "uint256"
626
+ },
627
+ {
628
+ "indexed": false,
629
+ "internalType": "address",
630
+ "name": "to",
631
+ "type": "address"
632
+ },
633
+ {
634
+ "indexed": false,
635
+ "internalType": "bytes32",
636
+ "name": "nullifierHash",
637
+ "type": "bytes32"
638
+ }
639
+ ],
640
+ "name": "Withdrawal",
641
+ "type": "event"
642
+ },
643
+ {
644
+ "inputs": [],
645
+ "name": "DEFAULT_ADMIN_ROLE",
646
+ "outputs": [
647
+ {
648
+ "internalType": "bytes32",
649
+ "name": "",
650
+ "type": "bytes32"
651
+ }
652
+ ],
653
+ "stateMutability": "view",
654
+ "type": "function"
655
+ },
656
+ {
657
+ "inputs": [],
658
+ "name": "OPERATOR_ROLE",
659
+ "outputs": [
660
+ {
661
+ "internalType": "bytes32",
662
+ "name": "",
663
+ "type": "bytes32"
664
+ }
665
+ ],
666
+ "stateMutability": "view",
667
+ "type": "function"
668
+ },
669
+ {
670
+ "inputs": [
671
+ {
672
+ "internalType": "address",
673
+ "name": "_partner",
674
+ "type": "address"
675
+ },
676
+ {
677
+ "internalType": "uint256",
678
+ "name": "_extraFee",
679
+ "type": "uint256"
680
+ }
681
+ ],
682
+ "name": "addPartner",
683
+ "outputs": [],
684
+ "stateMutability": "nonpayable",
685
+ "type": "function"
686
+ },
687
+ {
688
+ "inputs": [],
689
+ "name": "assets",
690
+ "outputs": [
691
+ {
692
+ "internalType": "address[]",
693
+ "name": "",
694
+ "type": "address[]"
695
+ }
696
+ ],
697
+ "stateMutability": "view",
698
+ "type": "function"
699
+ },
700
+ {
701
+ "inputs": [
702
+ {
703
+ "internalType": "address[]",
704
+ "name": "_assets",
705
+ "type": "address[]"
706
+ },
707
+ {
708
+ "internalType": "uint256[]",
709
+ "name": "_amounts",
710
+ "type": "uint256[]"
711
+ },
712
+ {
713
+ "internalType": "bool",
714
+ "name": "_enabled",
715
+ "type": "bool"
716
+ }
717
+ ],
718
+ "name": "batchSetMixerGiftCardEnabled",
719
+ "outputs": [],
720
+ "stateMutability": "nonpayable",
721
+ "type": "function"
722
+ },
723
+ {
724
+ "inputs": [
725
+ {
726
+ "internalType": "uint256",
727
+ "name": "_amount",
728
+ "type": "uint256"
729
+ },
730
+ {
731
+ "internalType": "address",
732
+ "name": "_partnerAddress",
733
+ "type": "address"
734
+ }
735
+ ],
736
+ "name": "calculateDepositAmount",
737
+ "outputs": [
738
+ {
739
+ "internalType": "uint256",
740
+ "name": "",
741
+ "type": "uint256"
742
+ }
743
+ ],
744
+ "stateMutability": "view",
745
+ "type": "function"
746
+ },
747
+ {
748
+ "inputs": [
749
+ {
750
+ "internalType": "address",
751
+ "name": "_asset",
752
+ "type": "address"
753
+ },
754
+ {
755
+ "internalType": "uint256",
756
+ "name": "seasonId",
757
+ "type": "uint256"
758
+ }
759
+ ],
760
+ "name": "claim",
761
+ "outputs": [
762
+ {
763
+ "internalType": "uint256",
764
+ "name": "reward",
765
+ "type": "uint256"
766
+ }
767
+ ],
768
+ "stateMutability": "nonpayable",
769
+ "type": "function"
770
+ },
771
+ {
772
+ "inputs": [
773
+ {
774
+ "internalType": "address",
775
+ "name": "_asset",
776
+ "type": "address"
777
+ },
778
+ {
779
+ "internalType": "uint256",
780
+ "name": "seasonId",
781
+ "type": "uint256"
782
+ }
783
+ ],
784
+ "name": "recoverUnclaimedRewards",
785
+ "outputs": [],
786
+ "stateMutability": "nonpayable",
787
+ "type": "function"
788
+ },
789
+ {
790
+ "inputs": [],
791
+ "name": "currentStakeSeasonId",
792
+ "outputs": [
793
+ {
794
+ "internalType": "uint256",
795
+ "name": "",
796
+ "type": "uint256"
797
+ }
798
+ ],
799
+ "stateMutability": "view",
800
+ "type": "function"
801
+ },
802
+ {
803
+ "inputs": [
804
+ {
805
+ "internalType": "address",
806
+ "name": "_asset",
807
+ "type": "address"
808
+ },
809
+ {
810
+ "internalType": "uint256",
811
+ "name": "_amount",
812
+ "type": "uint256"
813
+ }
814
+ ],
815
+ "name": "deployMixer",
816
+ "outputs": [
817
+ {
818
+ "internalType": "contract AintiVirusMixer",
819
+ "name": "mixer",
820
+ "type": "address"
821
+ }
822
+ ],
823
+ "stateMutability": "nonpayable",
824
+ "type": "function"
825
+ },
826
+ {
827
+ "inputs": [
828
+ {
829
+ "internalType": "address",
830
+ "name": "_asset",
831
+ "type": "address"
832
+ },
833
+ {
834
+ "internalType": "uint256",
835
+ "name": "_amount",
836
+ "type": "uint256"
837
+ },
838
+ {
839
+ "internalType": "bytes32",
840
+ "name": "_commitment",
841
+ "type": "bytes32"
842
+ },
843
+ {
844
+ "internalType": "address",
845
+ "name": "_partner",
846
+ "type": "address"
847
+ }
848
+ ],
849
+ "name": "deposit",
850
+ "outputs": [],
851
+ "stateMutability": "nonpayable",
852
+ "type": "function"
853
+ },
854
+ {
855
+ "inputs": [],
856
+ "name": "feeBps",
857
+ "outputs": [
858
+ {
859
+ "internalType": "uint256",
860
+ "name": "",
861
+ "type": "uint256"
862
+ }
863
+ ],
864
+ "stateMutability": "view",
865
+ "type": "function"
866
+ },
867
+ {
868
+ "inputs": [],
869
+ "name": "feeCollector",
870
+ "outputs": [
871
+ {
872
+ "internalType": "address",
873
+ "name": "",
874
+ "type": "address"
875
+ }
876
+ ],
877
+ "stateMutability": "view",
878
+ "type": "function"
879
+ },
880
+ {
881
+ "inputs": [
882
+ {
883
+ "internalType": "bytes32",
884
+ "name": "role",
885
+ "type": "bytes32"
886
+ }
887
+ ],
888
+ "name": "getRoleAdmin",
889
+ "outputs": [
890
+ {
891
+ "internalType": "bytes32",
892
+ "name": "",
893
+ "type": "bytes32"
894
+ }
895
+ ],
896
+ "stateMutability": "view",
897
+ "type": "function"
898
+ },
899
+ {
900
+ "inputs": [
901
+ {
902
+ "internalType": "address",
903
+ "name": "mixer",
904
+ "type": "address"
905
+ }
906
+ ],
907
+ "name": "giftCardWithdrawEnabled",
908
+ "outputs": [
909
+ {
910
+ "internalType": "bool",
911
+ "name": "",
912
+ "type": "bool"
913
+ }
914
+ ],
915
+ "stateMutability": "view",
916
+ "type": "function"
917
+ },
918
+ {
919
+ "inputs": [
920
+ {
921
+ "internalType": "bytes32",
922
+ "name": "role",
923
+ "type": "bytes32"
924
+ },
925
+ {
926
+ "internalType": "address",
927
+ "name": "account",
928
+ "type": "address"
929
+ }
930
+ ],
931
+ "name": "grantRole",
932
+ "outputs": [],
933
+ "stateMutability": "nonpayable",
934
+ "type": "function"
935
+ },
936
+ {
937
+ "inputs": [
938
+ {
939
+ "internalType": "bytes32",
940
+ "name": "role",
941
+ "type": "bytes32"
942
+ },
943
+ {
944
+ "internalType": "address",
945
+ "name": "account",
946
+ "type": "address"
947
+ }
948
+ ],
949
+ "name": "hasRole",
950
+ "outputs": [
951
+ {
952
+ "internalType": "bool",
953
+ "name": "",
954
+ "type": "bool"
955
+ }
956
+ ],
957
+ "stateMutability": "view",
958
+ "type": "function"
959
+ },
960
+ {
961
+ "inputs": [],
962
+ "name": "hasher",
963
+ "outputs": [
964
+ {
965
+ "internalType": "address",
966
+ "name": "",
967
+ "type": "address"
968
+ }
969
+ ],
970
+ "stateMutability": "view",
971
+ "type": "function"
972
+ },
973
+ {
974
+ "inputs": [
975
+ {
976
+ "internalType": "address",
977
+ "name": "",
978
+ "type": "address"
979
+ }
980
+ ],
981
+ "name": "isPartner",
982
+ "outputs": [
983
+ {
984
+ "internalType": "bool",
985
+ "name": "",
986
+ "type": "bool"
987
+ }
988
+ ],
989
+ "stateMutability": "view",
990
+ "type": "function"
991
+ },
992
+ {
993
+ "inputs": [
994
+ {
995
+ "internalType": "address",
996
+ "name": "asset",
997
+ "type": "address"
998
+ },
999
+ {
1000
+ "internalType": "uint256",
1001
+ "name": "amount",
1002
+ "type": "uint256"
1003
+ }
1004
+ ],
1005
+ "name": "mixers",
1006
+ "outputs": [
1007
+ {
1008
+ "internalType": "contract AintiVirusMixer",
1009
+ "name": "",
1010
+ "type": "address"
1011
+ }
1012
+ ],
1013
+ "stateMutability": "view",
1014
+ "type": "function"
1015
+ },
1016
+ {
1017
+ "inputs": [
1018
+ {
1019
+ "internalType": "address",
1020
+ "name": "",
1021
+ "type": "address"
1022
+ }
1023
+ ],
1024
+ "name": "partnersFee",
1025
+ "outputs": [
1026
+ {
1027
+ "internalType": "uint256",
1028
+ "name": "",
1029
+ "type": "uint256"
1030
+ }
1031
+ ],
1032
+ "stateMutability": "view",
1033
+ "type": "function"
1034
+ },
1035
+ {
1036
+ "inputs": [],
1037
+ "name": "payment",
1038
+ "outputs": [
1039
+ {
1040
+ "internalType": "contract IAintiVirusPayment",
1041
+ "name": "",
1042
+ "type": "address"
1043
+ }
1044
+ ],
1045
+ "stateMutability": "view",
1046
+ "type": "function"
1047
+ },
1048
+ {
1049
+ "inputs": [
1050
+ {
1051
+ "internalType": "address",
1052
+ "name": "_partner",
1053
+ "type": "address"
1054
+ }
1055
+ ],
1056
+ "name": "removePartner",
1057
+ "outputs": [],
1058
+ "stateMutability": "nonpayable",
1059
+ "type": "function"
1060
+ },
1061
+ {
1062
+ "inputs": [
1063
+ {
1064
+ "internalType": "bytes32",
1065
+ "name": "role",
1066
+ "type": "bytes32"
1067
+ },
1068
+ {
1069
+ "internalType": "address",
1070
+ "name": "callerConfirmation",
1071
+ "type": "address"
1072
+ }
1073
+ ],
1074
+ "name": "renounceRole",
1075
+ "outputs": [],
1076
+ "stateMutability": "nonpayable",
1077
+ "type": "function"
1078
+ },
1079
+ {
1080
+ "inputs": [
1081
+ {
1082
+ "internalType": "bytes32",
1083
+ "name": "role",
1084
+ "type": "bytes32"
1085
+ },
1086
+ {
1087
+ "internalType": "address",
1088
+ "name": "account",
1089
+ "type": "address"
1090
+ }
1091
+ ],
1092
+ "name": "revokeRole",
1093
+ "outputs": [],
1094
+ "stateMutability": "nonpayable",
1095
+ "type": "function"
1096
+ },
1097
+ {
1098
+ "inputs": [],
1099
+ "name": "rewardsShareBps",
1100
+ "outputs": [
1101
+ {
1102
+ "internalType": "uint256",
1103
+ "name": "",
1104
+ "type": "uint256"
1105
+ }
1106
+ ],
1107
+ "stateMutability": "view",
1108
+ "type": "function"
1109
+ },
1110
+ {
1111
+ "inputs": [
1112
+ {
1113
+ "internalType": "address",
1114
+ "name": "_feeCollector",
1115
+ "type": "address"
1116
+ }
1117
+ ],
1118
+ "name": "setFeeCollector",
1119
+ "outputs": [],
1120
+ "stateMutability": "nonpayable",
1121
+ "type": "function"
1122
+ },
1123
+ {
1124
+ "inputs": [
1125
+ {
1126
+ "internalType": "uint256",
1127
+ "name": "_feeBps",
1128
+ "type": "uint256"
1129
+ }
1130
+ ],
1131
+ "name": "setFeeRate",
1132
+ "outputs": [],
1133
+ "stateMutability": "nonpayable",
1134
+ "type": "function"
1135
+ },
1136
+ {
1137
+ "inputs": [
1138
+ {
1139
+ "internalType": "address",
1140
+ "name": "_asset",
1141
+ "type": "address"
1142
+ },
1143
+ {
1144
+ "internalType": "uint256",
1145
+ "name": "_amount",
1146
+ "type": "uint256"
1147
+ },
1148
+ {
1149
+ "internalType": "bool",
1150
+ "name": "_enabled",
1151
+ "type": "bool"
1152
+ }
1153
+ ],
1154
+ "name": "setMixerGiftCardEnabled",
1155
+ "outputs": [],
1156
+ "stateMutability": "nonpayable",
1157
+ "type": "function"
1158
+ },
1159
+ {
1160
+ "inputs": [
1161
+ {
1162
+ "internalType": "uint256",
1163
+ "name": "_extraFee",
1164
+ "type": "uint256"
1165
+ }
1166
+ ],
1167
+ "name": "setMyExtraFee",
1168
+ "outputs": [],
1169
+ "stateMutability": "nonpayable",
1170
+ "type": "function"
1171
+ },
1172
+ {
1173
+ "inputs": [
1174
+ {
1175
+ "internalType": "address",
1176
+ "name": "_partner",
1177
+ "type": "address"
1178
+ },
1179
+ {
1180
+ "internalType": "uint256",
1181
+ "name": "_extraFee",
1182
+ "type": "uint256"
1183
+ }
1184
+ ],
1185
+ "name": "setPartnerExtraFee",
1186
+ "outputs": [],
1187
+ "stateMutability": "nonpayable",
1188
+ "type": "function"
1189
+ },
1190
+ {
1191
+ "inputs": [
1192
+ {
1193
+ "internalType": "contract IAintiVirusPayment",
1194
+ "name": "_payment",
1195
+ "type": "address"
1196
+ }
1197
+ ],
1198
+ "name": "setPayment",
1199
+ "outputs": [],
1200
+ "stateMutability": "nonpayable",
1201
+ "type": "function"
1202
+ },
1203
+ {
1204
+ "inputs": [
1205
+ {
1206
+ "internalType": "uint256",
1207
+ "name": "_rewardsShareBps",
1208
+ "type": "uint256"
1209
+ }
1210
+ ],
1211
+ "name": "setRewardPoolShareBps",
1212
+ "outputs": [],
1213
+ "stateMutability": "nonpayable",
1214
+ "type": "function"
1215
+ },
1216
+ {
1217
+ "inputs": [
1218
+ {
1219
+ "internalType": "address",
1220
+ "name": "_asset",
1221
+ "type": "address"
1222
+ },
1223
+ {
1224
+ "internalType": "uint256",
1225
+ "name": "amount",
1226
+ "type": "uint256"
1227
+ },
1228
+ {
1229
+ "internalType": "address",
1230
+ "name": "_staker",
1231
+ "type": "address"
1232
+ }
1233
+ ],
1234
+ "name": "stake",
1235
+ "outputs": [],
1236
+ "stateMutability": "nonpayable",
1237
+ "type": "function"
1238
+ },
1239
+ {
1240
+ "inputs": [
1241
+ {
1242
+ "internalType": "address",
1243
+ "name": "_asset",
1244
+ "type": "address"
1245
+ },
1246
+ {
1247
+ "internalType": "uint256",
1248
+ "name": "amount",
1249
+ "type": "uint256"
1250
+ }
1251
+ ],
1252
+ "name": "stake",
1253
+ "outputs": [],
1254
+ "stateMutability": "nonpayable",
1255
+ "type": "function"
1256
+ },
1257
+ {
1258
+ "inputs": [],
1259
+ "name": "staking",
1260
+ "outputs": [
1261
+ {
1262
+ "internalType": "contract IAintiVirusStaking",
1263
+ "name": "",
1264
+ "type": "address"
1265
+ }
1266
+ ],
1267
+ "stateMutability": "view",
1268
+ "type": "function"
1269
+ },
1270
+ {
1271
+ "inputs": [],
1272
+ "name": "startNewSeason",
1273
+ "outputs": [],
1274
+ "stateMutability": "nonpayable",
1275
+ "type": "function"
1276
+ },
1277
+ {
1278
+ "inputs": [
1279
+ {
1280
+ "internalType": "bytes4",
1281
+ "name": "interfaceId",
1282
+ "type": "bytes4"
1283
+ }
1284
+ ],
1285
+ "name": "supportsInterface",
1286
+ "outputs": [
1287
+ {
1288
+ "internalType": "bool",
1289
+ "name": "",
1290
+ "type": "bool"
1291
+ }
1292
+ ],
1293
+ "stateMutability": "view",
1294
+ "type": "function"
1295
+ },
1296
+ {
1297
+ "inputs": [
1298
+ {
1299
+ "internalType": "address",
1300
+ "name": "_asset",
1301
+ "type": "address"
1302
+ }
1303
+ ],
1304
+ "name": "unstake",
1305
+ "outputs": [
1306
+ {
1307
+ "internalType": "uint256",
1308
+ "name": "releaseAmount",
1309
+ "type": "uint256"
1310
+ }
1311
+ ],
1312
+ "stateMutability": "nonpayable",
1313
+ "type": "function"
1314
+ },
1315
+ {
1316
+ "inputs": [
1317
+ {
1318
+ "internalType": "uint256",
1319
+ "name": "_duration",
1320
+ "type": "uint256"
1321
+ }
1322
+ ],
1323
+ "name": "updateNextSeasonDuration",
1324
+ "outputs": [],
1325
+ "stateMutability": "nonpayable",
1326
+ "type": "function"
1327
+ },
1328
+ {
1329
+ "inputs": [],
1330
+ "name": "verifier",
1331
+ "outputs": [
1332
+ {
1333
+ "internalType": "address",
1334
+ "name": "",
1335
+ "type": "address"
1336
+ }
1337
+ ],
1338
+ "stateMutability": "view",
1339
+ "type": "function"
1340
+ },
1341
+ {
1342
+ "inputs": [],
1343
+ "name": "weth",
1344
+ "outputs": [
1345
+ {
1346
+ "internalType": "contract IWETH",
1347
+ "name": "",
1348
+ "type": "address"
1349
+ }
1350
+ ],
1351
+ "stateMutability": "view",
1352
+ "type": "function"
1353
+ },
1354
+ {
1355
+ "inputs": [
1356
+ {
1357
+ "components": [
1358
+ {
1359
+ "internalType": "uint256[2]",
1360
+ "name": "pA",
1361
+ "type": "uint256[2]"
1362
+ },
1363
+ {
1364
+ "internalType": "uint256[2][2]",
1365
+ "name": "pB",
1366
+ "type": "uint256[2][2]"
1367
+ },
1368
+ {
1369
+ "internalType": "uint256[2]",
1370
+ "name": "pC",
1371
+ "type": "uint256[2]"
1372
+ },
1373
+ {
1374
+ "internalType": "uint256[5]",
1375
+ "name": "pubSignals",
1376
+ "type": "uint256[5]"
1377
+ }
1378
+ ],
1379
+ "internalType": "struct AintiVirusMixer.WithdrawalProof",
1380
+ "name": "_proof",
1381
+ "type": "tuple"
1382
+ },
1383
+ {
1384
+ "internalType": "uint256",
1385
+ "name": "_fee",
1386
+ "type": "uint256"
1387
+ },
1388
+ {
1389
+ "internalType": "uint256",
1390
+ "name": "_amount",
1391
+ "type": "uint256"
1392
+ },
1393
+ {
1394
+ "internalType": "address",
1395
+ "name": "_asset",
1396
+ "type": "address"
1397
+ }
1398
+ ],
1399
+ "name": "withdraw",
1400
+ "outputs": [],
1401
+ "stateMutability": "nonpayable",
1402
+ "type": "function"
1403
+ },
1404
+ {
1405
+ "inputs": [
1406
+ {
1407
+ "components": [
1408
+ {
1409
+ "internalType": "uint256[2]",
1410
+ "name": "pA",
1411
+ "type": "uint256[2]"
1412
+ },
1413
+ {
1414
+ "internalType": "uint256[2][2]",
1415
+ "name": "pB",
1416
+ "type": "uint256[2][2]"
1417
+ },
1418
+ {
1419
+ "internalType": "uint256[2]",
1420
+ "name": "pC",
1421
+ "type": "uint256[2]"
1422
+ },
1423
+ {
1424
+ "internalType": "uint256[5]",
1425
+ "name": "pubSignals",
1426
+ "type": "uint256[5]"
1427
+ }
1428
+ ],
1429
+ "internalType": "struct AintiVirusMixer.WithdrawalProof",
1430
+ "name": "_proof",
1431
+ "type": "tuple"
1432
+ },
1433
+ {
1434
+ "internalType": "bytes32",
1435
+ "name": "_orderId",
1436
+ "type": "bytes32"
1437
+ },
1438
+ {
1439
+ "internalType": "uint256",
1440
+ "name": "_amount",
1441
+ "type": "uint256"
1442
+ },
1443
+ {
1444
+ "internalType": "address",
1445
+ "name": "_asset",
1446
+ "type": "address"
1447
+ }
1448
+ ],
1449
+ "name": "withdrawByGiftCard",
1450
+ "outputs": [],
1451
+ "stateMutability": "nonpayable",
1452
+ "type": "function"
1453
+ },
1454
+ {
1455
+ "stateMutability": "payable",
1456
+ "type": "receive"
1457
+ }
1458
+ ],
1459
+ "bytecode": "0x610100604052348015610010575f5ffd5b50604051615b42380380615b4283398101604081905261002f916102c9565b6001600160a01b03821661005657604051635a5a9fa160e11b815260040160405180910390fd5b6001600160a01b03851661007d57604051635fce01bb60e01b815260040160405180910390fd5b6001600160a01b0384166100a4576040516394e2873f60e01b815260040160405180910390fd5b6127108111156100c75760405163c7cba49b60e01b815260040160405180910390fd5b6101f48311156100ea576040516301ce37c360e01b815260040160405180910390fd5b6001600160a01b0386811660805285811660a05284811660c0526002849055600380546001600160a01b0319169184169182179055600482905560408051858152602081018490527f19ae61977897da30177b7a703579852daee034742de1e6318972bf00127d7493910160405180910390a26101675f336101fc565b506101927f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929336101fc565b5060405161019f906102a5565b604051809103905ff0801580156101b8573d5f5f3e3d5ffd5b506001600160a01b031660e081905260405133907f5bd0d9aec4f4106af22b54818271d756ffbf437f105dc896b0a892f970711a22905f90a350505050505061033b565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661029c575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556102543390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161029f565b505f5b92915050565b6114e78061465b83390190565b6001600160a01b03811681146102c6575f5ffd5b50565b5f5f5f5f5f5f60c087890312156102de575f5ffd5b86516102e9816102b2565b60208801519096506102fa816102b2565b604088015190955061030b816102b2565b606088015160808901519195509350610323816102b2565b60a09790970151959894975092959194919391925050565b60805160a05160c05160e0516142926103c95f395f81816104ba015281816111ce015281816112730152818161155101528181611a7f01528181611b3601528181611c9001528181611d3b01528181611e61015261200701525f8181610813015261094f01525f81816103b9015261092e01525f81816104490152818161226801526122b501526142925ff3fe608060405260043610610262575f3560e01c806385e18f991161013f578063adc9772e116100b3578063e1e2101511610078578063e1e21015146107b0578063e2ee99ad146107c4578063ea3c281a146107e3578063ed33639f14610802578063f2888dbb14610835578063f5b541a614610854575f5ffd5b8063adc9772e14610720578063b6ceb61f1461073f578063c415b95c14610753578063cceeee5314610772578063d547741f14610791575f5ffd5b806391d148541161010457806391d148541461067257806396c45386146106915780639ab06fcb146106b0578063a217fddf146106cf578063a42dce80146106e2578063aad3ec9614610701575f5ffd5b806385e18f99146105d257806386add180146105f157806386fa733f146106065780638c0f9aac1461062557806390c0fe2314610653575f5ffd5b80633fc8cef3116101d6578063582f91a71161019b578063582f91a7146104fb5780635c6597b91461051a5780635d652b6d146105455780635e427a001461056457806371a973051461058357806375f7916a146105a4575f5ffd5b80633fc8cef31461043857806342f6487a1461046b57806345596e2e1461048a5780634cf088d9146104a957806357429e99146104dc575f5ffd5b806324a9d8531161022757806324a9d85314610374578063294091cd146103895780632b7ac3f3146103a85780632f2ff15d146103db57806336568abe146103fa5780633a44355d14610419575f5ffd5b806301ffc9a71461026d5780630f99faa1146102a1578063143e4772146102d857806322e7d11514610317578063248a9ca314610338575f5ffd5b3661026957005b5f5ffd5b348015610278575f5ffd5b5061028c6102873660046125ff565b610874565b60405190151581526020015b60405180910390f35b3480156102ac575f5ffd5b506102c06102bb36600461263a565b6108aa565b6040516001600160a01b039091168152602001610298565b3480156102e3575f5ffd5b506102c06102f236600461263a565b600560209081525f92835260408084209091529082529020546001600160a01b031681565b348015610322575f5ffd5b5061033661033136600461263a565b610a43565b005b348015610343575f5ffd5b50610366610352366004612664565b5f9081526020819052604090206001015490565b604051908152602001610298565b34801561037f575f5ffd5b5061036660025481565b348015610394575f5ffd5b506103366103a336600461267b565b610ac0565b3480156103b3575f5ffd5b506102c07f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e6575f5ffd5b506103366103f53660046126ba565b610ae0565b348015610405575f5ffd5b506103366104143660046126ba565b610b0a565b348015610424575f5ffd5b5061033661043336600461273f565b610b3d565b348015610443575f5ffd5b506102c07f000000000000000000000000000000000000000000000000000000000000000081565b348015610476575f5ffd5b506001546102c0906001600160a01b031681565b348015610495575f5ffd5b506103366104a4366004612664565b610cde565b3480156104b4575f5ffd5b506102c07f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e7575f5ffd5b506103366104f63660046127d6565b610daa565b348015610506575f5ffd5b50610336610515366004612664565b610fc2565b348015610525575f5ffd5b50610366610534366004612820565b60096020525f908152604090205481565b348015610550575f5ffd5b5061036661055f3660046126ba565b61103f565b34801561056f575f5ffd5b5061033661057e366004612664565b6110b0565b34801561058e575f5ffd5b50610597611173565b604051610298919061283b565b3480156105af575f5ffd5b5061028c6105be366004612820565b600a6020525f908152604090205460ff1681565b3480156105dd575f5ffd5b506103366105ec36600461263a565b611184565b3480156105fc575f5ffd5b5061036660045481565b348015610611575f5ffd5b50610336610620366004612886565b6113d4565b348015610630575f5ffd5b5061028c61063f366004612820565b60086020525f908152604090205460ff1681565b34801561065e575f5ffd5b5061033661066d36600461263a565b611638565b34801561067d575f5ffd5b5061028c61068c3660046126ba565b6116d3565b34801561069c575f5ffd5b506103366106ab3660046127d6565b6116fb565b3480156106bb575f5ffd5b506103366106ca366004612820565b6118fb565b3480156106da575f5ffd5b506103665f81565b3480156106ed575f5ffd5b506103366106fc366004612820565b61195c565b34801561070c575f5ffd5b5061036661071b36600461263a565b611a22565b34801561072b575f5ffd5b5061033661073a36600461263a565b611afe565b34801561074a575f5ffd5b50610336611b1d565b34801561075e575f5ffd5b506003546102c0906001600160a01b031681565b34801561077d575f5ffd5b5061033661078c3660046128c2565b611ba5565b34801561079c575f5ffd5b506103366107ab3660046126ba565b611c69565b3480156107bb575f5ffd5b50610366611c8d565b3480156107cf575f5ffd5b506103366107de366004612664565b611d0e565b3480156107ee575f5ffd5b506103366107fd366004612820565b611d9e565b34801561080d575f5ffd5b506102c07f000000000000000000000000000000000000000000000000000000000000000081565b348015610840575f5ffd5b5061036661084f366004612820565b611e0b565b34801561085f575f5ffd5b506103665f51602061423d5f395f51905f5281565b5f6001600160e01b03198216637965db0b60e01b14806108a457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f5f51602061423d5f395f51905f526108c281611ee5565b6001600160a01b0384166108e957604051636448d6e960e11b815260040160405180910390fd5b6001600160a01b038481165f908152600560209081526040808320878452909152902054161561092c57604051632843b98160e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000003060405161097b906125f2565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff0801580156109b4573d5f5f3e3d5ffd5b506001600160a01b038581165f908152600560209081526040808320888452909152902080546001600160a01b03191691831691909117905591506109fa600685611ef2565b5082846001600160a01b0316836001600160a01b03167fe7244b458059030208cd84bc903ed7b14097c2a4c4f057e602a91ffa513738c960405160405180910390a45092915050565b5f51602061423d5f395f51905f52610a5a81611ee5565b6001600160a01b0383165f818152600860209081526040808320805460ff19166001179055600982529182902085905590518481527f2b06702faf86eea27052346f06b81fc1b0108091df3a0fe76bfb7ff20eb0d3df91015b60405180910390a2505050565b610ac8611f0d565b610ad3838383611f7c565b610adb61205a565b505050565b5f82815260208190526040902060010154610afa81611ee5565b610b048383612084565b50505050565b6001600160a01b0381163314610b335760405163334bd91960e11b815260040160405180910390fd5b610adb8282612113565b5f51602061423d5f395f51905f52610b5481611ee5565b848314610b74576040516307e11acb60e51b815260040160405180910390fd5b5f5b85811015610cd5575f60055f898985818110610b9457610b946128fd565b9050602002016020810190610ba99190612820565b6001600160a01b03166001600160a01b031681526020019081526020015f205f878785818110610bdb57610bdb6128fd565b602090810292909201358352508101919091526040015f20546001600160a01b0316905080610c1d576040516309ad273360e21b815260040160405180910390fd5b6001600160a01b0381165f908152600a60205260409020805460ff1916851515179055878783818110610c5257610c526128fd565b9050602002016020810190610c679190612820565b6001600160a01b03167f6dd8ad1577d786ec723fbf32c99ad02eb5c07779adabf735ea4479a9386724fd878785818110610ca357610ca36128fd565b9050602002013586604051610cc49291909182521515602082015260400190565b60405180910390a250600101610b76565b50505050505050565b5f51602061423d5f395f51905f52610cf581611ee5565b6101f4821115610d18576040516301ce37c360e01b815260040160405180910390fd5b60025460408051918252602082018490527f14914da2bf76024616fbe1859783fcd4dbddcb179b1f3a854949fbf920dcb957910160405180910390a160028290556003546004546040805185815260208101929092526001600160a01b03909216917fc63e06220fcddcffb2ccdd71726a451863bb9e9281f1257751e0ab0134d1da9f91015b60405180910390a25050565b610db2611f0d565b6001546001600160a01b031680610ddc57604051631ebdabc760e21b815260040160405180910390fd5b6001600160a01b038083165f9081526005602090815260408083208784529091529020541680610e1f576040516309ad273360e21b815260040160405180910390fd5b6001600160a01b0381165f908152600a602052604090205460ff16610e5757604051630e941e0f60e21b815260040160405180910390fd5b60405163a3026cad60e01b81525f906001600160a01b0383169063a3026cad90610e85908a90600401612911565b6060604051808303815f875af1158015610ea1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec59190612967565b509091505061010087013584610ee56001600160a01b038216868961217c565b6040516315399d7760e01b8152600481018990526001600160a01b0387811660248301528481166044830152606482018990528616906315399d77906084015f604051808303815f87803b158015610f3b575f5ffd5b505af1158015610f4d573d5f5f3e3d5ffd5b50610f66925050506001600160a01b038216865f61217c565b604080518881526001600160a01b03858116602083015291810184905289918816907fa233b62e07f31de17b8d95c12035e85cf281f391870d26b504e87e70594a4cb89060600160405180910390a35050505050610b0461205a565b335f9081526008602052604090205460ff16610ff15760405163060f332160e41b815260040160405180910390fd5b335f8181526009602052604090819020839055517f9800d833346ecbc44fb196fca56b30c883a24ae1f39e9053f550148cfd03e1a2906110349084815260200190565b60405180910390a250565b5f5f6127106002548561105291906129bc565b61105c91906129d3565b6001600160a01b0384165f90815260096020526040812054919250906127109061108690876129bc565b61109091906129d3565b90508061109d83876129f2565b6110a791906129f2565b95945050505050565b5f51602061423d5f395f51905f526110c781611ee5565b6127108211156110ea5760405163c7cba49b60e01b815260040160405180910390fd5b60045460408051918252602082018490527fde1362c76de8b80391e5033e8e7e5a5f13d0549eefb75f5c0626cabbd1edeea0910160405180910390a1600482905560035460025460408051918252602082018590526001600160a01b03909216917fc63e06220fcddcffb2ccdd71726a451863bb9e9281f1257751e0ab0134d1da9f9101610d9e565b606061117f6006612239565b905090565b5f51602061423d5f395f51905f5261119b81611ee5565b6111a3611f0d565b6111ae600684612245565b6111cb576040516309ad273360e21b815260040160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dc2933826040518163ffffffff1660e01b8152600401602060405180830381865afa158015611228573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124c9190612a05565b905080831061126e57604051637221b37b60e01b815260040160405180910390fd5b5f5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ce88451f87896040518363ffffffff1660e01b81526004016112d19291909182526001600160a01b0316602082015260400190565b60e060405180830381865afa1580156112ec573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113109190612a1c565b5095509550509450505042831061133a57604051637221b37b60e01b815260040160405180910390fd5b81156113595760405163393e2bed60e01b815260040160405180910390fd5b805f0361137957604051630fec21fd60e21b815260040160405180910390fd5b611384873383612266565b85876001600160a01b03167f0e8864ea9db60cad10e688d81705b969c3c554d29f04df7ed762ed958412fc8d836040516113c091815260200190565b60405180910390a350505050610adb61205a565b6113dc611f0d565b6001600160a01b038085165f908152600560209081526040808320878452909152902054168061141f576040516309ad273360e21b815260040160405180910390fd5b5f6127106002548661143191906129bc565b61143b91906129d3565b6001600160a01b0384165f90815260096020526040812054919250906127109061146590886129bc565b61146f91906129d3565b905061149d333083611481868b6129f2565b61148b91906129f2565b6001600160a01b038b1692919061233c565b60405163b214faa560e01b8152600481018690526001600160a01b0384169063b214faa5906024015f604051808303815f87803b1580156114dc575f5ffd5b505af11580156114ee573d5f5f3e3d5ffd5b505050505f8211156115ca575f6127106004548461150c91906129bc565b61151691906129d3565b90505f6115238285612a6b565b905081156115a95760405163a9fc507b60e01b81526001600160a01b038a81166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9fc507b906044015f604051808303815f87803b158015611592575f5ffd5b505af11580156115a4573d5f5f3e3d5ffd5b505050505b80156115c7576003546115c7908a906001600160a01b031683612266565b50505b80156115db576115db878583612266565b60408051878152602081018490529081018290526001600160a01b038086169187918a16907f1f135358fa8d538fc712271750241f10add892dae5e5f6a643dce7af4b7f6d069060600160405180910390a4505050610b0461205a565b5f51602061423d5f395f51905f5261164f81611ee5565b6001600160a01b0383165f9081526008602052604090205460ff166116875760405163060f332160e41b815260040160405180910390fd5b6001600160a01b0383165f8181526009602052604090819020849055517f9800d833346ecbc44fb196fca56b30c883a24ae1f39e9053f550148cfd03e1a290610ab39085815260200190565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b611703611f0d565b6001600160a01b038082165f9081526005602090815260408083208684529091529020541680611746576040516309ad273360e21b815260040160405180910390fd5b610160850135841461176b576040516336a9d01160e01b815260040160405180910390fd5b5f5f5f836001600160a01b031663a3026cad896040518263ffffffff1660e01b815260040161179a9190612911565b6060604051808303815f875af11580156117b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117da9190612967565b9194509250905061010088013586821115611808576040516320e65ddd60e21b815260040160405180910390fd5b6001600160a01b038316158015906118295750336001600160a01b03841614155b156118475760405163b81fa77960e01b815260040160405180910390fd5b6001600160a01b03831615801561185d57505f82115b1561187b576040516336a9d01160e01b815260040160405180910390fd5b61188f868561188a858b612a6b565b612266565b81156118a0576118a0868484612266565b604080518881526001600160a01b038681166020830152918101839052908716907ff513862a32c13790fa360b836eb36883d339ff8c2620a00cc83ac01c442dc1369060600160405180910390a25050505050610b0461205a565b5f51602061423d5f395f51905f5261191281611ee5565b6001600160a01b03821661193957604051636448d6e960e11b815260040160405180910390fd5b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f61196681611ee5565b6001600160a01b03821661198d57604051635a5a9fa160e11b815260040160405180910390fd5b6003546040516001600160a01b038085169216907f5d16ad41baeb009cd23eb8f6c7cde5c2e0cd5acf4a33926ab488875c37c37f38905f90a3600380546001600160a01b0384166001600160a01b031990911681179091556002546004546040517fc63e06220fcddcffb2ccdd71726a451863bb9e9281f1257751e0ab0134d1da9f92610d9e92908252602082015260400190565b5f611a2b611f0d565b611a36600684612245565b611a53576040516309ad273360e21b815260040160405180910390fd5b60405163132d974d60e31b81523360048201526001600160a01b038481166024830152604482018490527f0000000000000000000000000000000000000000000000000000000000000000169063996cba68906064016020604051808303815f875af1158015611ac5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae99190612a05565b9050611af6833383612266565b6108a461205a565b611b06611f0d565b611b11828233611f7c565b611b1961205a565b5050565b5f51602061423d5f395f51905f52611b3481611ee5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b6ceb61f6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611b8c575f5ffd5b505af1158015611b9e573d5f5f3e3d5ffd5b5050505050565b5f51602061423d5f395f51905f52611bbc81611ee5565b6001600160a01b038085165f9081526005602090815260408083208784529091529020541680611bff576040516309ad273360e21b815260040160405180910390fd5b6001600160a01b038181165f908152600a6020908152604091829020805460ff1916871515908117909155825188815291820152918716917f6dd8ad1577d786ec723fbf32c99ad02eb5c07779adabf735ea4479a9386724fd910160405180910390a25050505050565b5f82815260208190526040902060010154611c8381611ee5565b610b048383612113565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dc2933826040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117f9190612a05565b5f51602061423d5f395f51905f52611d2581611ee5565b60405163e2ee99ad60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e2ee99ad906024015f604051808303815f87803b158015611d84575f5ffd5b505af1158015611d96573d5f5f3e3d5ffd5b505050505050565b5f51602061423d5f395f51905f52611db581611ee5565b6001600160a01b0382165f818152600860209081526040808320805460ff191690556009909152808220829055517fd2639eca7fc6fcdba5fa158fc8075b41bc021e97ac1e127b9da5f4fd925f08289190a25050565b5f611e14611f0d565b611e1f600683612245565b611e3c576040516309ad273360e21b815260040160405180910390fd5b604051631e43e78160e31b81523360048201526001600160a01b0383811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f21f3c08906044016020604051808303815f875af1158015611ea7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ecb9190612a05565b9050611ed8823383612266565b611ee061205a565b919050565b611eef8133612375565b50565b5f611f06836001600160a01b0384166123b3565b9392505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15611f4d57604051633ee5aeb560e01b815260040160405180910390fd5b611f7a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b906123f8565b565b815f03611f9c5760405163162908e360e11b815260040160405180910390fd5b611fa7600684612245565b611fc4576040516309ad273360e21b815260040160405180910390fd5b611fd96001600160a01b03841633308561233c565b60405163bf6eac2f60e01b81526001600160a01b0382811660048301528481166024830152604482018490527f0000000000000000000000000000000000000000000000000000000000000000169063bf6eac2f906064015f604051808303815f87803b158015612048575f5ffd5b505af1158015610cd5573d5f5f3e3d5ffd5b611f7a5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00611f74565b5f61208f83836116d3565b61210c575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556120c43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016108a4565b505f6108a4565b5f61211e83836116d3565b1561210c575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016108a4565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526121cd84826123ff565b610b04576040516001600160a01b0384811660248301525f604483015261222f91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612448565b610b048482612448565b60605f611f06836124b4565b6001600160a01b0381165f9081526001830160205260408120541515611f06565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361232857604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b1580156122fe575f5ffd5b505af1158015612310573d5f5f3e3d5ffd5b50610adb925050506001600160a01b0383168261250d565b610adb6001600160a01b0384168383612599565b6040516001600160a01b038481166024830152838116604483015260648201839052610b049186918216906323b872dd906084016121fd565b61237f82826116d3565b611b195760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5f81815260018301602052604081205461210c57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556108a4565b80825d5050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f51905082801561243e57508115612430578060011461243e565b5f866001600160a01b03163b115b9695505050505050565b5f5f60205f8451602086015f885af180612467576040513d5f823e3d81fd5b50505f513d9150811561247e57806001141561248b565b6001600160a01b0384163b155b15610b0457604051635274afe760e01b81526001600160a01b03851660048201526024016123aa565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561250157602002820191905f5260205f20905b8154815260200190600101908083116124ed575b50505050509050919050565b804710156125375760405163cf47918160e01b8152476004820152602481018290526044016123aa565b5f5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f8114612581576040519150601f19603f3d011682016040523d82523d5f602084013e612586565b606091505b509150915081610b0457610b04816125ca565b6040516001600160a01b03838116602483015260448201839052610adb91859182169063a9059cbb906064016121fd565b8051156125d957805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b6117be80612a7f83390190565b5f6020828403121561260f575f5ffd5b81356001600160e01b031981168114611f06575f5ffd5b6001600160a01b0381168114611eef575f5ffd5b5f5f6040838503121561264b575f5ffd5b823561265681612626565b946020939093013593505050565b5f60208284031215612674575f5ffd5b5035919050565b5f5f5f6060848603121561268d575f5ffd5b833561269881612626565b92506020840135915060408401356126af81612626565b809150509250925092565b5f5f604083850312156126cb575f5ffd5b8235915060208301356126dd81612626565b809150509250929050565b5f5f83601f8401126126f8575f5ffd5b50813567ffffffffffffffff81111561270f575f5ffd5b6020830191508360208260051b8501011115612729575f5ffd5b9250929050565b80358015158114611ee0575f5ffd5b5f5f5f5f5f60608688031215612753575f5ffd5b853567ffffffffffffffff811115612769575f5ffd5b612775888289016126e8565b909650945050602086013567ffffffffffffffff811115612794575f5ffd5b6127a0888289016126e8565b90945092506127b3905060408701612730565b90509295509295909350565b5f6101a082840312156127d0575f5ffd5b50919050565b5f5f5f5f61020085870312156127ea575f5ffd5b6127f486866127bf565b93506101a085013592506101c085013591506101e085013561281581612626565b939692955090935050565b5f60208284031215612830575f5ffd5b8135611f0681612626565b602080825282518282018190525f918401906040840190835b8181101561287b5783516001600160a01b0316835260209384019390920191600101612854565b509095945050505050565b5f5f5f5f60808587031215612899575f5ffd5b84356128a481612626565b93506020850135925060408501359150606085013561281581612626565b5f5f5f606084860312156128d4575f5ffd5b83356128df81612626565b9250602084013591506128f460408501612730565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b6101a08101604083833760408201604084015f5b60028110156129465760408284376040928301929190910190600101612925565b505050604060c0840160c084013760a0610100840161010084013792915050565b5f5f5f60608486031215612979575f5ffd5b835161298481612626565b602085015190935061299581612626565b6040949094015192959394509192915050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176108a4576108a46129a8565b5f826129ed57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156108a4576108a46129a8565b5f60208284031215612a15575f5ffd5b5051919050565b5f5f5f5f5f5f5f60e0888a031215612a32575f5ffd5b5050855160208701516040880151606089015160808a015160a08b015160c0909b0151949c939b50919990985090965094509092509050565b818103818111156108a4576108a46129a856fe60e0604052600380546001600160401b031916905534801561001f575f5ffd5b506040516117be3803806117be83398101604081905261003e916105ea565b6018825f805463ffffffff191663ffffffff84161781556001600160a01b0382166080525b8263ffffffff168163ffffffff1610156100a75761008663ffffffff821661010c565b63ffffffff82165f9081526001602081905260409091209190915501610063565b506100c16100b660018461062a565b63ffffffff1661010c565b5f805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55505060016004556001600160a01b0392831660a05290911660c05250610658565b5f815f0361011b57505f919050565b8160010361014a57507f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864919050565b8160020361017957507f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1919050565b816003036101a857507f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238919050565b816004036101d757507f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a919050565b8160050361020657507f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55919050565b8160060361023557507f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78919050565b8160070361026457507f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d919050565b8160080361029357507f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61919050565b816009036102c257507f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747919050565b81600a036102f157507f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2919050565b81600b0361032057507f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636919050565b81600c0361034f57507f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a919050565b81600d0361037e57507f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0919050565b81600e036103ad57507f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c919050565b81600f036103dc57507f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92919050565b8160100361040b57507f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323919050565b8160110361043a57507f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992919050565b8160120361046957507f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f919050565b8160130361049857507f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca919050565b816014036104c757507f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e919050565b816015036104f657507f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1919050565b8160160361052557507f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b919050565b8160170361055457507f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d919050565b8160180361058357507f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540919050565b60405162461bcd60e51b815260206004820152601360248201527f496e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640160405180910390fd5b919050565b80516001600160a01b03811681146105cf575f5ffd5b5f5f5f606084860312156105fc575f5ffd5b610605846105d4565b9250610613602085016105d4565b9150610621604085016105d4565b90509250925092565b63ffffffff828116828216039081111561065257634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c05161112061069e5f395f81816102ac015281816103d601526105c601525f8181610146015261046101525f81816102ee0152610da601526111205ff3fe608060405234801561000f575f5ffd5b5060043610610106575f3560e01c8063b214faa51161009e578063cd87a3b41161006e578063cd87a3b4146102ce578063e8295588146102d6578063ed33639f146102e9578063f178e47c14610310578063fc7e9c6f1461032f575f5ffd5b8063b214faa514610257578063ba70f7571461026c578063c2b40ae414610288578063c45a0155146102a7575f5ffd5b80636d9833e3116100d95780636d9833e3146101d9578063839df945146101ec57806390eeb02b1461020e578063a3026cad1461021e575f5ffd5b806317cc915c1461010a5780632b7ac3f314610141578063414a37ba146101805780634ecf518b146101b5575b5f5ffd5b61012c610118366004610e24565b60066020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6101687f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610138565b6101a77f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b604051908152602001610138565b5f546101c49063ffffffff1681565b60405163ffffffff9091168152602001610138565b61012c6101e7366004610e24565b610347565b61012c6101fa366004610e24565b60056020525f908152604090205460ff1681565b6003546101c49063ffffffff1681565b61023161022c366004610e3b565b6103c0565b604080516001600160a01b03948516815293909216602084015290820152606001610138565b61026a610265366004610e24565b6105b3565b005b60035463ffffffff165f908152600260205260409020546101a7565b6101a7610296366004610e24565b60026020525f908152604090205481565b6101687f000000000000000000000000000000000000000000000000000000000000000081565b6101c4601481565b6101a76102e4366004610e24565b6106b2565b6101687f000000000000000000000000000000000000000000000000000000000000000081565b6101a761031e366004610e24565b60016020525f908152604090205481565b6003546101c490640100000000900463ffffffff1681565b5f81810361035657505f919050565b60035463ffffffff16805b63ffffffff81165f908152600260205260409020548403610386575060019392505050565b8063ffffffff165f03610397575060145b806103a181610e69565b9150508163ffffffff168163ffffffff160361036157505f9392505050565b5f5f5f6103cb610b6b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461041457604051630636a15760e11b815260040160405180910390fd5b6101008401355f8181526006602052604090205460ff161561044957604051636569570160e11b815260040160405180910390fd5b604080516334baeab960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916334baeab9916104a59189919082019060c0830190610100840190600401610e87565b602060405180830381865afa1580156104c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e49190610ed6565b61050157604051637e27baa160e01b815260040160405180910390fd5b61050f610140860135610347565b61052c5760405163665276df60e01b815260040160405180910390fd5b5f81815260066020908152604091829020805460ff1916600117905581516001600160a01b036101208901359081168252918101849052909550610180870135945061016087013593507f0ce490531f6c8ae2f1ff174643bc8b7ed5e52987ab50dc1e8f33655d2cd8c90b910160405180910390a1506105ac6001600455565b9193909250565b6105bb610b6b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461060457604051630636a15760e11b815260040160405180910390fd5b5f8181526005602052604090205460ff161561063257604051626a17dd60e61b815260040160405180910390fd5b5f61063c82610b95565b5f8381526005602052604090819020805460ff191660011790555190915082907fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff1969061069c908490429063ffffffff929092168252602082015260400190565b60405180910390a2506106af6001600455565b50565b5f815f036106c157505f919050565b816001036106f057507f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864919050565b8160020361071f57507f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1919050565b8160030361074e57507f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238919050565b8160040361077d57507f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a919050565b816005036107ac57507f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55919050565b816006036107db57507f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78919050565b8160070361080a57507f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d919050565b8160080361083957507f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61919050565b8160090361086857507f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747919050565b81600a0361089757507f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2919050565b81600b036108c657507f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636919050565b81600c036108f557507f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a919050565b81600d0361092457507f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0919050565b81600e0361095357507f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c919050565b81600f0361098257507f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92919050565b816010036109b157507f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323919050565b816011036109e057507f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992919050565b81601203610a0f57507f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f919050565b81601303610a3e57507f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca919050565b81601403610a6d57507f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e919050565b81601503610a9c57507f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1919050565b81601603610acb57507f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b919050565b81601703610afa57507f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d919050565b81601803610b2957507f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540919050565b60405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b604482015260640160405180910390fd5b600260045403610b8e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600455565b6003545f8054909163ffffffff640100000000909104811691610bba9116600261100e565b63ffffffff168163ffffffff1603610be5576040516377ae67b360e11b815260040160405180910390fd5b80835f80805b5f5463ffffffff9081169082161015610c8157610c09600286611039565b63ffffffff165f03610c4557839250610c278163ffffffff166106b2565b63ffffffff82165f9081526001602052604090208590559150610c60565b63ffffffff81165f9081526001602052604090205492508391505b610c6a8383610d0d565b9350610c77600286611060565b9450600101610beb565b506003545f90601490610c9b9063ffffffff166001611087565b610ca59190611039565b6003805463ffffffff191663ffffffff83169081179091555f9081526002602052604090208590559050610cda866001611087565b6003805463ffffffff929092166401000000000267ffffffff000000001990921691909117905550939695505050505050565b5f82827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182101580610d5f57507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110155b15610d7d576040516313a4bbd360e01b815260040160405180910390fd5b6040805180820182528381526020810183905290516314d2f97b60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916329a5f2f691610dda91906004016110a3565b602060405180830381865afa158015610df5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1991906110d3565b925050505b92915050565b5f60208284031215610e34575f5ffd5b5035919050565b5f6101a0828403128015610e4d575f5ffd5b509092915050565b634e487b7160e01b5f52601160045260245ffd5b5f63ffffffff821680610e7e57610e7e610e55565b5f190192915050565b6101a08101604086833760408201855f5b6002811015610eb95760408284376040928301929190910190600101610e98565b50505060408460c084013760a08361010084013795945050505050565b5f60208284031215610ee6575f5ffd5b81518015158114610ef5575f5ffd5b9392505050565b6001815b6001841115610f3757808504811115610f1b57610f1b610e55565b6001841615610f2957908102905b60019390931c928002610f00565b935093915050565b5f82610f4d57506001610e1e565b81610f5957505f610e1e565b8160018114610f6f5760028114610f7957610faa565b6001915050610e1e565b60ff841115610f8a57610f8a610e55565b6001841b915063ffffffff821115610fa457610fa4610e55565b50610e1e565b5060208310610133831016604e8410600b8410161715610fe1575081810a63ffffffff811115610fdc57610fdc610e55565b610e1e565b610ff063ffffffff8484610efc565b8063ffffffff0482111561100657611006610e55565b029392505050565b5f610ef563ffffffff841663ffffffff8416610f3f565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff83168061104e5761104e611025565b8063ffffffff84160691505092915050565b5f63ffffffff83168061107557611075611025565b8063ffffffff84160491505092915050565b63ffffffff8181168382160190811115610e1e57610e1e610e55565b6040810181835f5b60028110156110ca5781518352602092830192909101906001016110ab565b50505092915050565b5f602082840312156110e3575f5ffd5b505191905056fea2646970667358221220e4b2ee3b2c8ba63d193303d42122be24d01436ff7165d69e09d4933511311d2664736f6c634300081c003397667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a2646970667358221220ba81ef9ef2c14c702a04e4977a1a5010d90fdfa9b9db8be14241157d23cc371364736f6c634300081c003360a060405234801561000f575f5ffd5b5033608052600180805562278d005f8181558290526002602052907fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e061005482610159565b81546001600160401b0319166001600160401b039190911617815561007842610159565b81546001600160401b03919091166801000000000000000002600160401b600160801b03199091161781556100b56100b08442610196565b610159565b81546001600160401b0391909116600160801b02600160801b600160c01b03199091161781556100e483610159565b81546001600160401b0391909116600160c01b026001600160c01b039091161781557f140b0d71aeb7929ef4342c1cf14dc9b6c83b015cf00b0442ff0d4f916abdd29582426101338682610196565b6040805193845260208401929092529082015260600160405180910390a15050506101bb565b5f6001600160401b0382111561019257604080516306dfcc6560e41b815260048101919091526024810183905260440160405180910390fd5b5090565b808201808211156101b557634e487b7160e01b5f52601160045260245ffd5b92915050565b6080516112e36102045f395f81816102390152818161045601528181610724015281816108190152818161097401528181610af301528181610d1e0152610dcd01526112e35ff3fe608060405234801561000f575f5ffd5b50600436106100e5575f3560e01c8063c45a015511610088578063e2ee99ad11610063578063e2ee99ad14610326578063f21f3c0814610339578063f5d709a11461034c578063feb873b1146103b4575f5ffd5b8063c45a015514610234578063ce88451f14610273578063dc2933821461031d575f5ffd5b8063996cba68116100c3578063996cba68146101f1578063a9fc507b14610204578063b6ceb61f14610219578063bf6eac2f14610221575f5ffd5b80637a65ecef146100e9578063853ea8531461010f578063873b47d0146101ae575b5f5ffd5b6100fc6100f7366004610ffb565b6103bc565b6040519081526020015b60405180910390f35b61016d61011d366004610ffb565b600360209081525f92835260408084209091529082529020805460018201546002909201546001600160401b0380831693600160401b840490911692600160801b90046001600160801b03169185565b604080516001600160401b0396871681529590941660208601526001600160801b03909216928401929092526060830191909152608082015260a001610106565b6101e16101bc366004611032565b600460209081525f938452604080852082529284528284209052825290205460ff1681565b6040519015158152602001610106565b6100fc6101ff366004611071565b61044a565b6102176102123660046110af565b610719565b005b61021761080e565b61021761022f366004611071565b610ae8565b61025b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610106565b6102e86102813660046110d9565b5f9182526002602081815260408085206001600160a01b039490941685526001808501909252909320915482549383015492909101546001600160401b0380831695600160401b8404821695600160801b8504831695600160c01b90950490921693919290565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610106565b6100fc60015481565b6102176103343660046110fc565b610d13565b6100fc610347366004610ffb565b610dc1565b61039461035a3660046110fc565b5f908152600260205260409020546001600160401b0380821692600160401b8304821692600160801b8104831692600160c01b9091041690565b604080519485526020850193909352918301526060820152608001610106565b6100fc5f5481565b6001600160a01b038083165f908152600360209081526040808320938516835292905290812060015481546001600160401b031681036104025750600201549050610444565b5f818152600260205260409020546001830154620151809161043591600160c01b9091046001600160401b031690611127565b61043f919061113e565b925050505b92915050565b5f336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461049457604051630636a15760e11b815260040160405180910390fd5b60015482106104b6576040516364a9226760e01b815260040160405180910390fd5b5f8281526002602052604090205442600160801b9091046001600160401b0316106104f45760405163141189cf60e31b815260040160405180910390fd5b6001600160a01b038085165f90815260046020908152604080832086845282528083209387168352929052205460ff161561054257604051630c8d9eab60e31b815260040160405180910390fd5b6001600160a01b038085165f908152600360209081526040808320938716808452938252808320868452600283528184209484526001850190925290912081549192916001600160401b03168510156105ae5760405163036f1b0f60e01b815260040160405180910390fd5b82600201545f036105d257604051635aa9184d60e01b815260040160405180910390fd5b6001600160a01b038088165f9081526004602090815260408083208984528252808320938a168352929052908120805460ff1916600117905583546001600160401b031686036106275750600283015461065b565b82546001850154620151809161064e91600160c01b9091046001600160401b031690611127565b610658919061113e565b90505b81600201548183600101546106709190611127565b61067a919061113e565b8454909550600160801b90046001600160801b031684601061069b8361115d565b91906101000a8154816001600160801b0302191690836001600160801b0316021790555050866001600160a01b031686896001600160a01b03167f8dab6d35466ca3cba614bc5b262979b277949786977e81107f375f7e39f7734a8860405161070691815260200190565b60405180910390a4505050509392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461076257604051630636a15760e11b815260040160405180910390fd5b805f036107825760405163162908e360e11b815260040160405180910390fd5b600180545f8181526002602090815260408083206001600160a01b03881684528501909152812092830180549293928592906107bf908490611187565b909155505060408051848152602081018490526001600160a01b038616917f0bb21cfddc3f8bd27069c32bb00be0ad26a02576b5a080444b0987140c3baa15910160405180910390a250505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461085757604051630636a15760e11b815260040160405180910390fd5b6001545f818152600260205260409020805442600160801b9091046001600160401b0316106108995760405163141189cf60e31b815260040160405180910390fd5b5f8054906108a8846001611187565b5f8181526002602052604090209091506108c182610fa7565b815467ffffffffffffffff19166001600160401b03919091161781556108e642610fa7565b81546001600160401b0391909116600160401b0267ffffffffffffffff60401b1990911617815561091683610fa7565b81546001600160401b0391909116600160c01b026001600160c01b0390911617815561094a6109458442611187565b610fa7565b815f0160106101000a8154816001600160401b0302191690836001600160401b031602179055505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371a973056040518163ffffffff1660e01b81526004015f60405180830381865afa1580156109cd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109f491908101906111be565b90505f5b8151811015610a7f575f828281518110610a1457610a14611286565b6020908102919091018101516001600160a01b0381165f9081526001808b01845260408083209189019094529290208254808255919350906201518090610a5c908a90611127565b610a66919061113e565b60028201555f6001918201559290920191506109f89050565b5060018390558154604080518881526001600160401b03600160401b840481166020830152600160801b909304909216908201527f140b0d71aeb7929ef4342c1cf14dc9b6c83b015cf00b0442ff0d4f916abdd2959060600160405180910390a1505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b3157604051630636a15760e11b815260040160405180910390fd5b6001545f8181526002602052604090208054600160801b90046001600160401b0316421115610b73576040516373a96aa360e01b815260040160405180910390fd5b825f03610b935760405163162908e360e11b815260040160405180910390fd5b6001600160a01b038086165f908152600360209081526040808320938816835292905220600181015415610bda57604051630ae3514d60e01b815260040160405180910390fd5b81545f90610bf9904290600160801b90046001600160401b031661129a565b90505f62015180610c0a8388611127565b610c14919061113e565b6001600160a01b0388165f908152600186016020526040812080549293509188918391610c42908490611187565b9250508190555081816002015f828254610c5c9190611187565b909155505060018401879055610c7142610fa7565b84546001600160401b0391909116600160401b0267ffffffffffffffff60401b19909116178455610ca186610fa7565b845467ffffffffffffffff19166001600160401b0391909116178455600284018290556040518781526001600160a01b038981169188918c16907ff65271afc35201e83c229b7b581d7fde59bfe7b7dd943e8719fc8c5f5ada63f69060200160405180910390a4505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d5c57604051630636a15760e11b815260040160405180910390fd5b805f5403610d7d57604051638341463360e01b815260040160405180910390fd5b5f80549082905560408051828152602081018490527f881494d10486739f088a0933ab2408e96e5bee38ed593f303a3ef16f5c061dd2910160405180910390a15050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e0b57604051630636a15760e11b815260040160405180910390fd5b506001600160a01b038083165f9081526003602090815260408083209385168352929052908120600181015491829003610e5857604051633a1018d560e21b815260040160405180910390fd5b60015481546001600160401b03165f610e71828461129a565b8454909150600160801b90046001600160801b03168114610ea557604051630e65e76760e31b815260040160405180910390fd5b5f8381526002602090815260408083206001600160a01b038a1684526001810190925282209091848603610ede57506002860154610f0c565b82546201518090610eff90600160c01b90046001600160401b03168a611127565b610f09919061113e565b90505b87825f015f828254610f1e919061129a565b9250508190555080826002015f828254610f38919061129a565b909155505086546001600160801b031687555f6001880181905560028801556040518881526001600160a01b038a811691908c16907fd8654fcc8cf5b36d30b3f5e4688fc78118e6d68de60b9994e09902268b57c3e39060200160405180910390a35050505050505092915050565b5f6001600160401b03821115610fe057604080516306dfcc6560e41b815260048101919091526024810183905260440160405180910390fd5b5090565b6001600160a01b0381168114610ff8575f5ffd5b50565b5f5f6040838503121561100c575f5ffd5b823561101781610fe4565b9150602083013561102781610fe4565b809150509250929050565b5f5f5f60608486031215611044575f5ffd5b833561104f81610fe4565b925060208401359150604084013561106681610fe4565b809150509250925092565b5f5f5f60608486031215611083575f5ffd5b833561108e81610fe4565b9250602084013561109e81610fe4565b929592945050506040919091013590565b5f5f604083850312156110c0575f5ffd5b82356110cb81610fe4565b946020939093013593505050565b5f5f604083850312156110ea575f5ffd5b82359150602083013561102781610fe4565b5f6020828403121561110c575f5ffd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761044457610444611113565b5f8261115857634e487b7160e01b5f52601260045260245ffd5b500490565b5f6001600160801b0382166001600160801b03810361117e5761117e611113565b60010192915050565b8082018082111561044457610444611113565b634e487b7160e01b5f52604160045260245ffd5b80516111b981610fe4565b919050565b5f602082840312156111ce575f5ffd5b81516001600160401b038111156111e3575f5ffd5b8201601f810184136111f3575f5ffd5b80516001600160401b0381111561120c5761120c61119a565b8060051b604051601f19603f83011681018181106001600160401b03821117156112385761123861119a565b604052918252602081840181019290810187841115611255575f5ffd5b6020850194505b8385101561127b5761126d856111ae565b81526020948501940161125c565b509695505050505050565b634e487b7160e01b5f52603260045260245ffd5b818103818111156104445761044461111356fea264697066735822122061143238ae6cffe596160a19772e284f3d6d0a4d2470f0b76dee8cc7257f712b64736f6c634300081c0033",
1460
+ "deployedBytecode": "0x608060405260043610610262575f3560e01c806385e18f991161013f578063adc9772e116100b3578063e1e2101511610078578063e1e21015146107b0578063e2ee99ad146107c4578063ea3c281a146107e3578063ed33639f14610802578063f2888dbb14610835578063f5b541a614610854575f5ffd5b8063adc9772e14610720578063b6ceb61f1461073f578063c415b95c14610753578063cceeee5314610772578063d547741f14610791575f5ffd5b806391d148541161010457806391d148541461067257806396c45386146106915780639ab06fcb146106b0578063a217fddf146106cf578063a42dce80146106e2578063aad3ec9614610701575f5ffd5b806385e18f99146105d257806386add180146105f157806386fa733f146106065780638c0f9aac1461062557806390c0fe2314610653575f5ffd5b80633fc8cef3116101d6578063582f91a71161019b578063582f91a7146104fb5780635c6597b91461051a5780635d652b6d146105455780635e427a001461056457806371a973051461058357806375f7916a146105a4575f5ffd5b80633fc8cef31461043857806342f6487a1461046b57806345596e2e1461048a5780634cf088d9146104a957806357429e99146104dc575f5ffd5b806324a9d8531161022757806324a9d85314610374578063294091cd146103895780632b7ac3f3146103a85780632f2ff15d146103db57806336568abe146103fa5780633a44355d14610419575f5ffd5b806301ffc9a71461026d5780630f99faa1146102a1578063143e4772146102d857806322e7d11514610317578063248a9ca314610338575f5ffd5b3661026957005b5f5ffd5b348015610278575f5ffd5b5061028c6102873660046125ff565b610874565b60405190151581526020015b60405180910390f35b3480156102ac575f5ffd5b506102c06102bb36600461263a565b6108aa565b6040516001600160a01b039091168152602001610298565b3480156102e3575f5ffd5b506102c06102f236600461263a565b600560209081525f92835260408084209091529082529020546001600160a01b031681565b348015610322575f5ffd5b5061033661033136600461263a565b610a43565b005b348015610343575f5ffd5b50610366610352366004612664565b5f9081526020819052604090206001015490565b604051908152602001610298565b34801561037f575f5ffd5b5061036660025481565b348015610394575f5ffd5b506103366103a336600461267b565b610ac0565b3480156103b3575f5ffd5b506102c07f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e6575f5ffd5b506103366103f53660046126ba565b610ae0565b348015610405575f5ffd5b506103366104143660046126ba565b610b0a565b348015610424575f5ffd5b5061033661043336600461273f565b610b3d565b348015610443575f5ffd5b506102c07f000000000000000000000000000000000000000000000000000000000000000081565b348015610476575f5ffd5b506001546102c0906001600160a01b031681565b348015610495575f5ffd5b506103366104a4366004612664565b610cde565b3480156104b4575f5ffd5b506102c07f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e7575f5ffd5b506103366104f63660046127d6565b610daa565b348015610506575f5ffd5b50610336610515366004612664565b610fc2565b348015610525575f5ffd5b50610366610534366004612820565b60096020525f908152604090205481565b348015610550575f5ffd5b5061036661055f3660046126ba565b61103f565b34801561056f575f5ffd5b5061033661057e366004612664565b6110b0565b34801561058e575f5ffd5b50610597611173565b604051610298919061283b565b3480156105af575f5ffd5b5061028c6105be366004612820565b600a6020525f908152604090205460ff1681565b3480156105dd575f5ffd5b506103366105ec36600461263a565b611184565b3480156105fc575f5ffd5b5061036660045481565b348015610611575f5ffd5b50610336610620366004612886565b6113d4565b348015610630575f5ffd5b5061028c61063f366004612820565b60086020525f908152604090205460ff1681565b34801561065e575f5ffd5b5061033661066d36600461263a565b611638565b34801561067d575f5ffd5b5061028c61068c3660046126ba565b6116d3565b34801561069c575f5ffd5b506103366106ab3660046127d6565b6116fb565b3480156106bb575f5ffd5b506103366106ca366004612820565b6118fb565b3480156106da575f5ffd5b506103665f81565b3480156106ed575f5ffd5b506103366106fc366004612820565b61195c565b34801561070c575f5ffd5b5061036661071b36600461263a565b611a22565b34801561072b575f5ffd5b5061033661073a36600461263a565b611afe565b34801561074a575f5ffd5b50610336611b1d565b34801561075e575f5ffd5b506003546102c0906001600160a01b031681565b34801561077d575f5ffd5b5061033661078c3660046128c2565b611ba5565b34801561079c575f5ffd5b506103366107ab3660046126ba565b611c69565b3480156107bb575f5ffd5b50610366611c8d565b3480156107cf575f5ffd5b506103366107de366004612664565b611d0e565b3480156107ee575f5ffd5b506103366107fd366004612820565b611d9e565b34801561080d575f5ffd5b506102c07f000000000000000000000000000000000000000000000000000000000000000081565b348015610840575f5ffd5b5061036661084f366004612820565b611e0b565b34801561085f575f5ffd5b506103665f51602061423d5f395f51905f5281565b5f6001600160e01b03198216637965db0b60e01b14806108a457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f5f51602061423d5f395f51905f526108c281611ee5565b6001600160a01b0384166108e957604051636448d6e960e11b815260040160405180910390fd5b6001600160a01b038481165f908152600560209081526040808320878452909152902054161561092c57604051632843b98160e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000003060405161097b906125f2565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103905ff0801580156109b4573d5f5f3e3d5ffd5b506001600160a01b038581165f908152600560209081526040808320888452909152902080546001600160a01b03191691831691909117905591506109fa600685611ef2565b5082846001600160a01b0316836001600160a01b03167fe7244b458059030208cd84bc903ed7b14097c2a4c4f057e602a91ffa513738c960405160405180910390a45092915050565b5f51602061423d5f395f51905f52610a5a81611ee5565b6001600160a01b0383165f818152600860209081526040808320805460ff19166001179055600982529182902085905590518481527f2b06702faf86eea27052346f06b81fc1b0108091df3a0fe76bfb7ff20eb0d3df91015b60405180910390a2505050565b610ac8611f0d565b610ad3838383611f7c565b610adb61205a565b505050565b5f82815260208190526040902060010154610afa81611ee5565b610b048383612084565b50505050565b6001600160a01b0381163314610b335760405163334bd91960e11b815260040160405180910390fd5b610adb8282612113565b5f51602061423d5f395f51905f52610b5481611ee5565b848314610b74576040516307e11acb60e51b815260040160405180910390fd5b5f5b85811015610cd5575f60055f898985818110610b9457610b946128fd565b9050602002016020810190610ba99190612820565b6001600160a01b03166001600160a01b031681526020019081526020015f205f878785818110610bdb57610bdb6128fd565b602090810292909201358352508101919091526040015f20546001600160a01b0316905080610c1d576040516309ad273360e21b815260040160405180910390fd5b6001600160a01b0381165f908152600a60205260409020805460ff1916851515179055878783818110610c5257610c526128fd565b9050602002016020810190610c679190612820565b6001600160a01b03167f6dd8ad1577d786ec723fbf32c99ad02eb5c07779adabf735ea4479a9386724fd878785818110610ca357610ca36128fd565b9050602002013586604051610cc49291909182521515602082015260400190565b60405180910390a250600101610b76565b50505050505050565b5f51602061423d5f395f51905f52610cf581611ee5565b6101f4821115610d18576040516301ce37c360e01b815260040160405180910390fd5b60025460408051918252602082018490527f14914da2bf76024616fbe1859783fcd4dbddcb179b1f3a854949fbf920dcb957910160405180910390a160028290556003546004546040805185815260208101929092526001600160a01b03909216917fc63e06220fcddcffb2ccdd71726a451863bb9e9281f1257751e0ab0134d1da9f91015b60405180910390a25050565b610db2611f0d565b6001546001600160a01b031680610ddc57604051631ebdabc760e21b815260040160405180910390fd5b6001600160a01b038083165f9081526005602090815260408083208784529091529020541680610e1f576040516309ad273360e21b815260040160405180910390fd5b6001600160a01b0381165f908152600a602052604090205460ff16610e5757604051630e941e0f60e21b815260040160405180910390fd5b60405163a3026cad60e01b81525f906001600160a01b0383169063a3026cad90610e85908a90600401612911565b6060604051808303815f875af1158015610ea1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec59190612967565b509091505061010087013584610ee56001600160a01b038216868961217c565b6040516315399d7760e01b8152600481018990526001600160a01b0387811660248301528481166044830152606482018990528616906315399d77906084015f604051808303815f87803b158015610f3b575f5ffd5b505af1158015610f4d573d5f5f3e3d5ffd5b50610f66925050506001600160a01b038216865f61217c565b604080518881526001600160a01b03858116602083015291810184905289918816907fa233b62e07f31de17b8d95c12035e85cf281f391870d26b504e87e70594a4cb89060600160405180910390a35050505050610b0461205a565b335f9081526008602052604090205460ff16610ff15760405163060f332160e41b815260040160405180910390fd5b335f8181526009602052604090819020839055517f9800d833346ecbc44fb196fca56b30c883a24ae1f39e9053f550148cfd03e1a2906110349084815260200190565b60405180910390a250565b5f5f6127106002548561105291906129bc565b61105c91906129d3565b6001600160a01b0384165f90815260096020526040812054919250906127109061108690876129bc565b61109091906129d3565b90508061109d83876129f2565b6110a791906129f2565b95945050505050565b5f51602061423d5f395f51905f526110c781611ee5565b6127108211156110ea5760405163c7cba49b60e01b815260040160405180910390fd5b60045460408051918252602082018490527fde1362c76de8b80391e5033e8e7e5a5f13d0549eefb75f5c0626cabbd1edeea0910160405180910390a1600482905560035460025460408051918252602082018590526001600160a01b03909216917fc63e06220fcddcffb2ccdd71726a451863bb9e9281f1257751e0ab0134d1da9f9101610d9e565b606061117f6006612239565b905090565b5f51602061423d5f395f51905f5261119b81611ee5565b6111a3611f0d565b6111ae600684612245565b6111cb576040516309ad273360e21b815260040160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dc2933826040518163ffffffff1660e01b8152600401602060405180830381865afa158015611228573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061124c9190612a05565b905080831061126e57604051637221b37b60e01b815260040160405180910390fd5b5f5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ce88451f87896040518363ffffffff1660e01b81526004016112d19291909182526001600160a01b0316602082015260400190565b60e060405180830381865afa1580156112ec573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113109190612a1c565b5095509550509450505042831061133a57604051637221b37b60e01b815260040160405180910390fd5b81156113595760405163393e2bed60e01b815260040160405180910390fd5b805f0361137957604051630fec21fd60e21b815260040160405180910390fd5b611384873383612266565b85876001600160a01b03167f0e8864ea9db60cad10e688d81705b969c3c554d29f04df7ed762ed958412fc8d836040516113c091815260200190565b60405180910390a350505050610adb61205a565b6113dc611f0d565b6001600160a01b038085165f908152600560209081526040808320878452909152902054168061141f576040516309ad273360e21b815260040160405180910390fd5b5f6127106002548661143191906129bc565b61143b91906129d3565b6001600160a01b0384165f90815260096020526040812054919250906127109061146590886129bc565b61146f91906129d3565b905061149d333083611481868b6129f2565b61148b91906129f2565b6001600160a01b038b1692919061233c565b60405163b214faa560e01b8152600481018690526001600160a01b0384169063b214faa5906024015f604051808303815f87803b1580156114dc575f5ffd5b505af11580156114ee573d5f5f3e3d5ffd5b505050505f8211156115ca575f6127106004548461150c91906129bc565b61151691906129d3565b90505f6115238285612a6b565b905081156115a95760405163a9fc507b60e01b81526001600160a01b038a81166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9fc507b906044015f604051808303815f87803b158015611592575f5ffd5b505af11580156115a4573d5f5f3e3d5ffd5b505050505b80156115c7576003546115c7908a906001600160a01b031683612266565b50505b80156115db576115db878583612266565b60408051878152602081018490529081018290526001600160a01b038086169187918a16907f1f135358fa8d538fc712271750241f10add892dae5e5f6a643dce7af4b7f6d069060600160405180910390a4505050610b0461205a565b5f51602061423d5f395f51905f5261164f81611ee5565b6001600160a01b0383165f9081526008602052604090205460ff166116875760405163060f332160e41b815260040160405180910390fd5b6001600160a01b0383165f8181526009602052604090819020849055517f9800d833346ecbc44fb196fca56b30c883a24ae1f39e9053f550148cfd03e1a290610ab39085815260200190565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b611703611f0d565b6001600160a01b038082165f9081526005602090815260408083208684529091529020541680611746576040516309ad273360e21b815260040160405180910390fd5b610160850135841461176b576040516336a9d01160e01b815260040160405180910390fd5b5f5f5f836001600160a01b031663a3026cad896040518263ffffffff1660e01b815260040161179a9190612911565b6060604051808303815f875af11580156117b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117da9190612967565b9194509250905061010088013586821115611808576040516320e65ddd60e21b815260040160405180910390fd5b6001600160a01b038316158015906118295750336001600160a01b03841614155b156118475760405163b81fa77960e01b815260040160405180910390fd5b6001600160a01b03831615801561185d57505f82115b1561187b576040516336a9d01160e01b815260040160405180910390fd5b61188f868561188a858b612a6b565b612266565b81156118a0576118a0868484612266565b604080518881526001600160a01b038681166020830152918101839052908716907ff513862a32c13790fa360b836eb36883d339ff8c2620a00cc83ac01c442dc1369060600160405180910390a25050505050610b0461205a565b5f51602061423d5f395f51905f5261191281611ee5565b6001600160a01b03821661193957604051636448d6e960e11b815260040160405180910390fd5b50600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f61196681611ee5565b6001600160a01b03821661198d57604051635a5a9fa160e11b815260040160405180910390fd5b6003546040516001600160a01b038085169216907f5d16ad41baeb009cd23eb8f6c7cde5c2e0cd5acf4a33926ab488875c37c37f38905f90a3600380546001600160a01b0384166001600160a01b031990911681179091556002546004546040517fc63e06220fcddcffb2ccdd71726a451863bb9e9281f1257751e0ab0134d1da9f92610d9e92908252602082015260400190565b5f611a2b611f0d565b611a36600684612245565b611a53576040516309ad273360e21b815260040160405180910390fd5b60405163132d974d60e31b81523360048201526001600160a01b038481166024830152604482018490527f0000000000000000000000000000000000000000000000000000000000000000169063996cba68906064016020604051808303815f875af1158015611ac5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae99190612a05565b9050611af6833383612266565b6108a461205a565b611b06611f0d565b611b11828233611f7c565b611b1961205a565b5050565b5f51602061423d5f395f51905f52611b3481611ee5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b6ceb61f6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611b8c575f5ffd5b505af1158015611b9e573d5f5f3e3d5ffd5b5050505050565b5f51602061423d5f395f51905f52611bbc81611ee5565b6001600160a01b038085165f9081526005602090815260408083208784529091529020541680611bff576040516309ad273360e21b815260040160405180910390fd5b6001600160a01b038181165f908152600a6020908152604091829020805460ff1916871515908117909155825188815291820152918716917f6dd8ad1577d786ec723fbf32c99ad02eb5c07779adabf735ea4479a9386724fd910160405180910390a25050505050565b5f82815260208190526040902060010154611c8381611ee5565b610b048383612113565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663dc2933826040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117f9190612a05565b5f51602061423d5f395f51905f52611d2581611ee5565b60405163e2ee99ad60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e2ee99ad906024015f604051808303815f87803b158015611d84575f5ffd5b505af1158015611d96573d5f5f3e3d5ffd5b505050505050565b5f51602061423d5f395f51905f52611db581611ee5565b6001600160a01b0382165f818152600860209081526040808320805460ff191690556009909152808220829055517fd2639eca7fc6fcdba5fa158fc8075b41bc021e97ac1e127b9da5f4fd925f08289190a25050565b5f611e14611f0d565b611e1f600683612245565b611e3c576040516309ad273360e21b815260040160405180910390fd5b604051631e43e78160e31b81523360048201526001600160a01b0383811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f21f3c08906044016020604051808303815f875af1158015611ea7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ecb9190612a05565b9050611ed8823383612266565b611ee061205a565b919050565b611eef8133612375565b50565b5f611f06836001600160a01b0384166123b3565b9392505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15611f4d57604051633ee5aeb560e01b815260040160405180910390fd5b611f7a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b906123f8565b565b815f03611f9c5760405163162908e360e11b815260040160405180910390fd5b611fa7600684612245565b611fc4576040516309ad273360e21b815260040160405180910390fd5b611fd96001600160a01b03841633308561233c565b60405163bf6eac2f60e01b81526001600160a01b0382811660048301528481166024830152604482018490527f0000000000000000000000000000000000000000000000000000000000000000169063bf6eac2f906064015f604051808303815f87803b158015612048575f5ffd5b505af1158015610cd5573d5f5f3e3d5ffd5b611f7a5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00611f74565b5f61208f83836116d3565b61210c575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556120c43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016108a4565b505f6108a4565b5f61211e83836116d3565b1561210c575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016108a4565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526121cd84826123ff565b610b04576040516001600160a01b0384811660248301525f604483015261222f91869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612448565b610b048482612448565b60605f611f06836124b4565b6001600160a01b0381165f9081526001830160205260408120541515611f06565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361232857604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b1580156122fe575f5ffd5b505af1158015612310573d5f5f3e3d5ffd5b50610adb925050506001600160a01b0383168261250d565b610adb6001600160a01b0384168383612599565b6040516001600160a01b038481166024830152838116604483015260648201839052610b049186918216906323b872dd906084016121fd565b61237f82826116d3565b611b195760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b5f81815260018301602052604081205461210c57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556108a4565b80825d5050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f51905082801561243e57508115612430578060011461243e565b5f866001600160a01b03163b115b9695505050505050565b5f5f60205f8451602086015f885af180612467576040513d5f823e3d81fd5b50505f513d9150811561247e57806001141561248b565b6001600160a01b0384163b155b15610b0457604051635274afe760e01b81526001600160a01b03851660048201526024016123aa565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561250157602002820191905f5260205f20905b8154815260200190600101908083116124ed575b50505050509050919050565b804710156125375760405163cf47918160e01b8152476004820152602481018290526044016123aa565b5f5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f8114612581576040519150601f19603f3d011682016040523d82523d5f602084013e612586565b606091505b509150915081610b0457610b04816125ca565b6040516001600160a01b03838116602483015260448201839052610adb91859182169063a9059cbb906064016121fd565b8051156125d957805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b6117be80612a7f83390190565b5f6020828403121561260f575f5ffd5b81356001600160e01b031981168114611f06575f5ffd5b6001600160a01b0381168114611eef575f5ffd5b5f5f6040838503121561264b575f5ffd5b823561265681612626565b946020939093013593505050565b5f60208284031215612674575f5ffd5b5035919050565b5f5f5f6060848603121561268d575f5ffd5b833561269881612626565b92506020840135915060408401356126af81612626565b809150509250925092565b5f5f604083850312156126cb575f5ffd5b8235915060208301356126dd81612626565b809150509250929050565b5f5f83601f8401126126f8575f5ffd5b50813567ffffffffffffffff81111561270f575f5ffd5b6020830191508360208260051b8501011115612729575f5ffd5b9250929050565b80358015158114611ee0575f5ffd5b5f5f5f5f5f60608688031215612753575f5ffd5b853567ffffffffffffffff811115612769575f5ffd5b612775888289016126e8565b909650945050602086013567ffffffffffffffff811115612794575f5ffd5b6127a0888289016126e8565b90945092506127b3905060408701612730565b90509295509295909350565b5f6101a082840312156127d0575f5ffd5b50919050565b5f5f5f5f61020085870312156127ea575f5ffd5b6127f486866127bf565b93506101a085013592506101c085013591506101e085013561281581612626565b939692955090935050565b5f60208284031215612830575f5ffd5b8135611f0681612626565b602080825282518282018190525f918401906040840190835b8181101561287b5783516001600160a01b0316835260209384019390920191600101612854565b509095945050505050565b5f5f5f5f60808587031215612899575f5ffd5b84356128a481612626565b93506020850135925060408501359150606085013561281581612626565b5f5f5f606084860312156128d4575f5ffd5b83356128df81612626565b9250602084013591506128f460408501612730565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b6101a08101604083833760408201604084015f5b60028110156129465760408284376040928301929190910190600101612925565b505050604060c0840160c084013760a0610100840161010084013792915050565b5f5f5f60608486031215612979575f5ffd5b835161298481612626565b602085015190935061299581612626565b6040949094015192959394509192915050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176108a4576108a46129a8565b5f826129ed57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156108a4576108a46129a8565b5f60208284031215612a15575f5ffd5b5051919050565b5f5f5f5f5f5f5f60e0888a031215612a32575f5ffd5b5050855160208701516040880151606089015160808a015160a08b015160c0909b0151949c939b50919990985090965094509092509050565b818103818111156108a4576108a46129a856fe60e0604052600380546001600160401b031916905534801561001f575f5ffd5b506040516117be3803806117be83398101604081905261003e916105ea565b6018825f805463ffffffff191663ffffffff84161781556001600160a01b0382166080525b8263ffffffff168163ffffffff1610156100a75761008663ffffffff821661010c565b63ffffffff82165f9081526001602081905260409091209190915501610063565b506100c16100b660018461062a565b63ffffffff1661010c565b5f805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b55505060016004556001600160a01b0392831660a05290911660c05250610658565b5f815f0361011b57505f919050565b8160010361014a57507f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864919050565b8160020361017957507f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1919050565b816003036101a857507f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238919050565b816004036101d757507f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a919050565b8160050361020657507f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55919050565b8160060361023557507f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78919050565b8160070361026457507f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d919050565b8160080361029357507f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61919050565b816009036102c257507f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747919050565b81600a036102f157507f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2919050565b81600b0361032057507f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636919050565b81600c0361034f57507f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a919050565b81600d0361037e57507f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0919050565b81600e036103ad57507f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c919050565b81600f036103dc57507f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92919050565b8160100361040b57507f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323919050565b8160110361043a57507f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992919050565b8160120361046957507f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f919050565b8160130361049857507f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca919050565b816014036104c757507f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e919050565b816015036104f657507f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1919050565b8160160361052557507f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b919050565b8160170361055457507f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d919050565b8160180361058357507f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540919050565b60405162461bcd60e51b815260206004820152601360248201527f496e646578206f7574206f6620626f756e647300000000000000000000000000604482015260640160405180910390fd5b919050565b80516001600160a01b03811681146105cf575f5ffd5b5f5f5f606084860312156105fc575f5ffd5b610605846105d4565b9250610613602085016105d4565b9150610621604085016105d4565b90509250925092565b63ffffffff828116828216039081111561065257634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c05161112061069e5f395f81816102ac015281816103d601526105c601525f8181610146015261046101525f81816102ee0152610da601526111205ff3fe608060405234801561000f575f5ffd5b5060043610610106575f3560e01c8063b214faa51161009e578063cd87a3b41161006e578063cd87a3b4146102ce578063e8295588146102d6578063ed33639f146102e9578063f178e47c14610310578063fc7e9c6f1461032f575f5ffd5b8063b214faa514610257578063ba70f7571461026c578063c2b40ae414610288578063c45a0155146102a7575f5ffd5b80636d9833e3116100d95780636d9833e3146101d9578063839df945146101ec57806390eeb02b1461020e578063a3026cad1461021e575f5ffd5b806317cc915c1461010a5780632b7ac3f314610141578063414a37ba146101805780634ecf518b146101b5575b5f5ffd5b61012c610118366004610e24565b60066020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6101687f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610138565b6101a77f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b604051908152602001610138565b5f546101c49063ffffffff1681565b60405163ffffffff9091168152602001610138565b61012c6101e7366004610e24565b610347565b61012c6101fa366004610e24565b60056020525f908152604090205460ff1681565b6003546101c49063ffffffff1681565b61023161022c366004610e3b565b6103c0565b604080516001600160a01b03948516815293909216602084015290820152606001610138565b61026a610265366004610e24565b6105b3565b005b60035463ffffffff165f908152600260205260409020546101a7565b6101a7610296366004610e24565b60026020525f908152604090205481565b6101687f000000000000000000000000000000000000000000000000000000000000000081565b6101c4601481565b6101a76102e4366004610e24565b6106b2565b6101687f000000000000000000000000000000000000000000000000000000000000000081565b6101a761031e366004610e24565b60016020525f908152604090205481565b6003546101c490640100000000900463ffffffff1681565b5f81810361035657505f919050565b60035463ffffffff16805b63ffffffff81165f908152600260205260409020548403610386575060019392505050565b8063ffffffff165f03610397575060145b806103a181610e69565b9150508163ffffffff168163ffffffff160361036157505f9392505050565b5f5f5f6103cb610b6b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461041457604051630636a15760e11b815260040160405180910390fd5b6101008401355f8181526006602052604090205460ff161561044957604051636569570160e11b815260040160405180910390fd5b604080516334baeab960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916334baeab9916104a59189919082019060c0830190610100840190600401610e87565b602060405180830381865afa1580156104c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e49190610ed6565b61050157604051637e27baa160e01b815260040160405180910390fd5b61050f610140860135610347565b61052c5760405163665276df60e01b815260040160405180910390fd5b5f81815260066020908152604091829020805460ff1916600117905581516001600160a01b036101208901359081168252918101849052909550610180870135945061016087013593507f0ce490531f6c8ae2f1ff174643bc8b7ed5e52987ab50dc1e8f33655d2cd8c90b910160405180910390a1506105ac6001600455565b9193909250565b6105bb610b6b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461060457604051630636a15760e11b815260040160405180910390fd5b5f8181526005602052604090205460ff161561063257604051626a17dd60e61b815260040160405180910390fd5b5f61063c82610b95565b5f8381526005602052604090819020805460ff191660011790555190915082907fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff1969061069c908490429063ffffffff929092168252602082015260400190565b60405180910390a2506106af6001600455565b50565b5f815f036106c157505f919050565b816001036106f057507f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864919050565b8160020361071f57507f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1919050565b8160030361074e57507f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238919050565b8160040361077d57507f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a919050565b816005036107ac57507f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55919050565b816006036107db57507f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78919050565b8160070361080a57507f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d919050565b8160080361083957507f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61919050565b8160090361086857507f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747919050565b81600a0361089757507f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2919050565b81600b036108c657507f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636919050565b81600c036108f557507f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a919050565b81600d0361092457507f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0919050565b81600e0361095357507f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c919050565b81600f0361098257507f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92919050565b816010036109b157507f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323919050565b816011036109e057507f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992919050565b81601203610a0f57507f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f919050565b81601303610a3e57507f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca919050565b81601403610a6d57507f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e919050565b81601503610a9c57507f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1919050565b81601603610acb57507f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b919050565b81601703610afa57507f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d919050565b81601803610b2957507f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540919050565b60405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b604482015260640160405180910390fd5b600260045403610b8e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600455565b6003545f8054909163ffffffff640100000000909104811691610bba9116600261100e565b63ffffffff168163ffffffff1603610be5576040516377ae67b360e11b815260040160405180910390fd5b80835f80805b5f5463ffffffff9081169082161015610c8157610c09600286611039565b63ffffffff165f03610c4557839250610c278163ffffffff166106b2565b63ffffffff82165f9081526001602052604090208590559150610c60565b63ffffffff81165f9081526001602052604090205492508391505b610c6a8383610d0d565b9350610c77600286611060565b9450600101610beb565b506003545f90601490610c9b9063ffffffff166001611087565b610ca59190611039565b6003805463ffffffff191663ffffffff83169081179091555f9081526002602052604090208590559050610cda866001611087565b6003805463ffffffff929092166401000000000267ffffffff000000001990921691909117905550939695505050505050565b5f82827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182101580610d5f57507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110155b15610d7d576040516313a4bbd360e01b815260040160405180910390fd5b6040805180820182528381526020810183905290516314d2f97b60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916329a5f2f691610dda91906004016110a3565b602060405180830381865afa158015610df5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e1991906110d3565b925050505b92915050565b5f60208284031215610e34575f5ffd5b5035919050565b5f6101a0828403128015610e4d575f5ffd5b509092915050565b634e487b7160e01b5f52601160045260245ffd5b5f63ffffffff821680610e7e57610e7e610e55565b5f190192915050565b6101a08101604086833760408201855f5b6002811015610eb95760408284376040928301929190910190600101610e98565b50505060408460c084013760a08361010084013795945050505050565b5f60208284031215610ee6575f5ffd5b81518015158114610ef5575f5ffd5b9392505050565b6001815b6001841115610f3757808504811115610f1b57610f1b610e55565b6001841615610f2957908102905b60019390931c928002610f00565b935093915050565b5f82610f4d57506001610e1e565b81610f5957505f610e1e565b8160018114610f6f5760028114610f7957610faa565b6001915050610e1e565b60ff841115610f8a57610f8a610e55565b6001841b915063ffffffff821115610fa457610fa4610e55565b50610e1e565b5060208310610133831016604e8410600b8410161715610fe1575081810a63ffffffff811115610fdc57610fdc610e55565b610e1e565b610ff063ffffffff8484610efc565b8063ffffffff0482111561100657611006610e55565b029392505050565b5f610ef563ffffffff841663ffffffff8416610f3f565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff83168061104e5761104e611025565b8063ffffffff84160691505092915050565b5f63ffffffff83168061107557611075611025565b8063ffffffff84160491505092915050565b63ffffffff8181168382160190811115610e1e57610e1e610e55565b6040810181835f5b60028110156110ca5781518352602092830192909101906001016110ab565b50505092915050565b5f602082840312156110e3575f5ffd5b505191905056fea2646970667358221220e4b2ee3b2c8ba63d193303d42122be24d01436ff7165d69e09d4933511311d2664736f6c634300081c003397667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a2646970667358221220ba81ef9ef2c14c702a04e4977a1a5010d90fdfa9b9db8be14241157d23cc371364736f6c634300081c0033",
1461
+ "linkReferences": {},
1462
+ "deployedLinkReferences": {}
1463
+ }