@ensuro/core 2.0.0-beta6 → 2.0.0-beta8

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 (44) hide show
  1. package/build/contracts/AccessManager.sol/AccessManager.json +74 -2
  2. package/build/contracts/ERC4626AssetManager.sol/ERC4626AssetManager.json +213 -0
  3. package/build/contracts/EToken.sol/EToken.json +114 -45
  4. package/build/contracts/LPManualWhitelist.sol/LPManualWhitelist.json +2 -2
  5. package/build/contracts/LiquidityThresholdAssetManager.sol/LiquidityThresholdAssetManager.json +197 -0
  6. package/build/contracts/Policy.sol/Policy.json +2 -2
  7. package/build/contracts/PolicyPool.sol/PolicyPool.json +324 -100
  8. package/build/contracts/PremiumsAccount.sol/PremiumsAccount.json +122 -2
  9. package/build/contracts/Reserve.sol/Reserve.json +71 -0
  10. package/build/contracts/TrustfulRiskModule.sol/TrustfulRiskModule.json +3 -3
  11. package/build/contracts/interfaces/IAccessManager.sol/IAccessManager.json +96 -0
  12. package/build/contracts/interfaces/IAssetManager.sol/IAssetManager.json +103 -0
  13. package/build/contracts/interfaces/IEToken.sol/IEToken.json +13 -0
  14. package/build/contracts/interfaces/IPolicyPool.sol/IPolicyPool.json +6 -14
  15. package/build/contracts/interfaces/IPremiumsAccount.sol/IPremiumsAccount.json +13 -0
  16. package/build/contracts/mocks/FixedRateVault.sol/FixedRateVault.json +736 -0
  17. package/build/contracts/mocks/PolicyPoolComponentMock.sol/PolicyPoolComponentMock.json +2 -2
  18. package/build/contracts/mocks/PolicyPoolMock.sol/PolicyPoolMock.json +7 -15
  19. package/build/contracts/mocks/PolicyPoolMock.sol/PolicyPoolMockForward.json +2 -2
  20. package/build/contracts/mocks/RiskModuleMock.sol/RiskModuleMock.json +674 -0
  21. package/contracts/AccessManager.sol +39 -8
  22. package/contracts/ERC4626AssetManager.sol +49 -0
  23. package/contracts/EToken.sol +72 -52
  24. package/contracts/LiquidityThresholdAssetManager.sol +159 -0
  25. package/contracts/PolicyPool.sol +155 -135
  26. package/contracts/PolicyPoolComponent.sol +29 -19
  27. package/contracts/PremiumsAccount.sol +125 -62
  28. package/contracts/Reserve.sol +86 -2
  29. package/contracts/RiskModule.sol +17 -6
  30. package/contracts/TrustfulRiskModule.sol +17 -2
  31. package/contracts/interfaces/IAccessManager.sol +23 -5
  32. package/contracts/interfaces/IAssetManager.sol +22 -0
  33. package/contracts/interfaces/IEToken.sol +21 -1
  34. package/contracts/interfaces/IPolicyPool.sol +6 -11
  35. package/contracts/interfaces/IPremiumsAccount.sol +5 -0
  36. package/contracts/mocks/FixedRateVault.sol +85 -0
  37. package/contracts/mocks/PolicyPoolMock.sol +2 -5
  38. package/contracts/mocks/RiskModuleMock.sol +69 -0
  39. package/js/test-utils.js +35 -26
  40. package/package.json +1 -1
  41. package/build/contracts/PolicyNFT.sol/PolicyNFT.json +0 -583
  42. package/build/contracts/interfaces/IPolicyNFT.sol/IPolicyNFT.json +0 -321
  43. package/contracts/PolicyNFT.sol +0 -96
  44. package/contracts/interfaces/IPolicyNFT.sol +0 -15
@@ -10,11 +10,6 @@
10
10
  "name": "access_",
11
11
  "type": "address"
12
12
  },
13
- {
14
- "internalType": "contract IPolicyNFT",
15
- "name": "policyNFT_",
16
- "type": "address"
17
- },
18
13
  {
19
14
  "internalType": "contract IERC20Metadata",
20
15
  "name": "currency_",
@@ -43,6 +38,56 @@
43
38
  "name": "AdminChanged",
44
39
  "type": "event"
45
40
  },
41
+ {
42
+ "anonymous": false,
43
+ "inputs": [
44
+ {
45
+ "indexed": true,
46
+ "internalType": "address",
47
+ "name": "owner",
48
+ "type": "address"
49
+ },
50
+ {
51
+ "indexed": true,
52
+ "internalType": "address",
53
+ "name": "approved",
54
+ "type": "address"
55
+ },
56
+ {
57
+ "indexed": true,
58
+ "internalType": "uint256",
59
+ "name": "tokenId",
60
+ "type": "uint256"
61
+ }
62
+ ],
63
+ "name": "Approval",
64
+ "type": "event"
65
+ },
66
+ {
67
+ "anonymous": false,
68
+ "inputs": [
69
+ {
70
+ "indexed": true,
71
+ "internalType": "address",
72
+ "name": "owner",
73
+ "type": "address"
74
+ },
75
+ {
76
+ "indexed": true,
77
+ "internalType": "address",
78
+ "name": "operator",
79
+ "type": "address"
80
+ },
81
+ {
82
+ "indexed": false,
83
+ "internalType": "bool",
84
+ "name": "approved",
85
+ "type": "bool"
86
+ }
87
+ ],
88
+ "name": "ApprovalForAll",
89
+ "type": "event"
90
+ },
46
91
  {
47
92
  "anonymous": false,
48
93
  "inputs": [
@@ -80,10 +125,16 @@
80
125
  "inputs": [
81
126
  {
82
127
  "indexed": true,
83
- "internalType": "contract IEToken",
84
- "name": "eToken",
128
+ "internalType": "contract IPolicyPoolComponent",
129
+ "name": "component",
85
130
  "type": "address"
86
131
  },
132
+ {
133
+ "indexed": false,
134
+ "internalType": "enum PolicyPool.ComponentKind",
135
+ "name": "kind",
136
+ "type": "uint8"
137
+ },
87
138
  {
88
139
  "indexed": false,
89
140
  "internalType": "enum PolicyPool.ComponentStatus",
@@ -91,7 +142,7 @@
91
142
  "type": "uint8"
92
143
  }
93
144
  ],
94
- "name": "ETokenStatusChanged",
145
+ "name": "ComponentStatusChanged",
95
146
  "type": "event"
96
147
  },
97
148
  {
@@ -241,37 +292,24 @@
241
292
  "inputs": [
242
293
  {
243
294
  "indexed": true,
244
- "internalType": "contract IPremiumsAccount",
245
- "name": "premiumsAccount",
295
+ "internalType": "address",
296
+ "name": "from",
246
297
  "type": "address"
247
298
  },
248
- {
249
- "indexed": false,
250
- "internalType": "enum PolicyPool.ComponentStatus",
251
- "name": "newStatus",
252
- "type": "uint8"
253
- }
254
- ],
255
- "name": "PremiumsAccountStatusChanged",
256
- "type": "event"
257
- },
258
- {
259
- "anonymous": false,
260
- "inputs": [
261
299
  {
262
300
  "indexed": true,
263
- "internalType": "contract IRiskModule",
264
- "name": "riskModule",
301
+ "internalType": "address",
302
+ "name": "to",
265
303
  "type": "address"
266
304
  },
267
305
  {
268
- "indexed": false,
269
- "internalType": "enum PolicyPool.ComponentStatus",
270
- "name": "newStatus",
271
- "type": "uint8"
306
+ "indexed": true,
307
+ "internalType": "uint256",
308
+ "name": "tokenId",
309
+ "type": "uint256"
272
310
  }
273
311
  ],
274
- "name": "RiskModuleStatusChanged",
312
+ "name": "Transfer",
275
313
  "type": "event"
276
314
  },
277
315
  {
@@ -368,12 +406,17 @@
368
406
  {
369
407
  "inputs": [
370
408
  {
371
- "internalType": "contract IEToken",
372
- "name": "eToken",
409
+ "internalType": "contract IPolicyPoolComponent",
410
+ "name": "component",
373
411
  "type": "address"
412
+ },
413
+ {
414
+ "internalType": "enum PolicyPool.ComponentKind",
415
+ "name": "kind",
416
+ "type": "uint8"
374
417
  }
375
418
  ],
376
- "name": "addEToken",
419
+ "name": "addComponent",
377
420
  "outputs": [],
378
421
  "stateMutability": "nonpayable",
379
422
  "type": "function"
@@ -381,12 +424,17 @@
381
424
  {
382
425
  "inputs": [
383
426
  {
384
- "internalType": "contract IPremiumsAccount",
385
- "name": "pa",
427
+ "internalType": "address",
428
+ "name": "to",
386
429
  "type": "address"
430
+ },
431
+ {
432
+ "internalType": "uint256",
433
+ "name": "tokenId",
434
+ "type": "uint256"
387
435
  }
388
436
  ],
389
- "name": "addPremiumsAccount",
437
+ "name": "approve",
390
438
  "outputs": [],
391
439
  "stateMutability": "nonpayable",
392
440
  "type": "function"
@@ -394,39 +442,27 @@
394
442
  {
395
443
  "inputs": [
396
444
  {
397
- "internalType": "contract IRiskModule",
398
- "name": "riskModule",
445
+ "internalType": "address",
446
+ "name": "owner",
399
447
  "type": "address"
400
448
  }
401
449
  ],
402
- "name": "addRiskModule",
403
- "outputs": [],
404
- "stateMutability": "nonpayable",
405
- "type": "function"
406
- },
407
- {
408
- "inputs": [
409
- {
410
- "internalType": "contract IEToken",
411
- "name": "eToken",
412
- "type": "address"
413
- },
450
+ "name": "balanceOf",
451
+ "outputs": [
414
452
  {
415
- "internalType": "enum PolicyPool.ComponentStatus",
416
- "name": "newStatus",
417
- "type": "uint8"
453
+ "internalType": "uint256",
454
+ "name": "",
455
+ "type": "uint256"
418
456
  }
419
457
  ],
420
- "name": "changeETokenStatus",
421
- "outputs": [],
422
- "stateMutability": "nonpayable",
458
+ "stateMutability": "view",
423
459
  "type": "function"
424
460
  },
425
461
  {
426
462
  "inputs": [
427
463
  {
428
- "internalType": "contract IRiskModule",
429
- "name": "riskModule",
464
+ "internalType": "contract IPolicyPoolComponent",
465
+ "name": "component",
430
466
  "type": "address"
431
467
  },
432
468
  {
@@ -435,7 +471,7 @@
435
471
  "type": "uint8"
436
472
  }
437
473
  ],
438
- "name": "changeRiskModuleStatus",
474
+ "name": "changeComponentStatus",
439
475
  "outputs": [],
440
476
  "stateMutability": "nonpayable",
441
477
  "type": "function"
@@ -559,17 +595,17 @@
559
595
  {
560
596
  "inputs": [
561
597
  {
562
- "internalType": "contract IEToken",
563
- "name": "eToken",
564
- "type": "address"
598
+ "internalType": "uint256",
599
+ "name": "tokenId",
600
+ "type": "uint256"
565
601
  }
566
602
  ],
567
- "name": "getETokenStatus",
603
+ "name": "getApproved",
568
604
  "outputs": [
569
605
  {
570
- "internalType": "enum PolicyPool.ComponentStatus",
606
+ "internalType": "address",
571
607
  "name": "",
572
- "type": "uint8"
608
+ "type": "address"
573
609
  }
574
610
  ],
575
611
  "stateMutability": "view",
@@ -578,12 +614,12 @@
578
614
  {
579
615
  "inputs": [
580
616
  {
581
- "internalType": "contract IRiskModule",
582
- "name": "riskModule",
617
+ "internalType": "contract IPolicyPoolComponent",
618
+ "name": "component",
583
619
  "type": "address"
584
620
  }
585
621
  ],
586
- "name": "getRiskModuleStatus",
622
+ "name": "getComponentStatus",
587
623
  "outputs": [
588
624
  {
589
625
  "internalType": "enum PolicyPool.ComponentStatus",
@@ -596,6 +632,16 @@
596
632
  },
597
633
  {
598
634
  "inputs": [
635
+ {
636
+ "internalType": "string",
637
+ "name": "name_",
638
+ "type": "string"
639
+ },
640
+ {
641
+ "internalType": "string",
642
+ "name": "symbol_",
643
+ "type": "string"
644
+ },
599
645
  {
600
646
  "internalType": "address",
601
647
  "name": "treasury_",
@@ -607,6 +653,43 @@
607
653
  "stateMutability": "nonpayable",
608
654
  "type": "function"
609
655
  },
656
+ {
657
+ "inputs": [
658
+ {
659
+ "internalType": "address",
660
+ "name": "owner",
661
+ "type": "address"
662
+ },
663
+ {
664
+ "internalType": "address",
665
+ "name": "operator",
666
+ "type": "address"
667
+ }
668
+ ],
669
+ "name": "isApprovedForAll",
670
+ "outputs": [
671
+ {
672
+ "internalType": "bool",
673
+ "name": "",
674
+ "type": "bool"
675
+ }
676
+ ],
677
+ "stateMutability": "view",
678
+ "type": "function"
679
+ },
680
+ {
681
+ "inputs": [],
682
+ "name": "name",
683
+ "outputs": [
684
+ {
685
+ "internalType": "string",
686
+ "name": "",
687
+ "type": "string"
688
+ }
689
+ ],
690
+ "stateMutability": "view",
691
+ "type": "function"
692
+ },
610
693
  {
611
694
  "inputs": [
612
695
  {
@@ -688,7 +771,12 @@
688
771
  },
689
772
  {
690
773
  "internalType": "address",
691
- "name": "customer",
774
+ "name": "payer",
775
+ "type": "address"
776
+ },
777
+ {
778
+ "internalType": "address",
779
+ "name": "policyHolder",
692
780
  "type": "address"
693
781
  },
694
782
  {
@@ -708,6 +796,25 @@
708
796
  "stateMutability": "nonpayable",
709
797
  "type": "function"
710
798
  },
799
+ {
800
+ "inputs": [
801
+ {
802
+ "internalType": "uint256",
803
+ "name": "tokenId",
804
+ "type": "uint256"
805
+ }
806
+ ],
807
+ "name": "ownerOf",
808
+ "outputs": [
809
+ {
810
+ "internalType": "address",
811
+ "name": "",
812
+ "type": "address"
813
+ }
814
+ ],
815
+ "stateMutability": "view",
816
+ "type": "function"
817
+ },
711
818
  {
712
819
  "inputs": [],
713
820
  "name": "pause",
@@ -728,19 +835,6 @@
728
835
  "stateMutability": "view",
729
836
  "type": "function"
730
837
  },
731
- {
732
- "inputs": [],
733
- "name": "policyNFT",
734
- "outputs": [
735
- {
736
- "internalType": "address",
737
- "name": "",
738
- "type": "address"
739
- }
740
- ],
741
- "stateMutability": "view",
742
- "type": "function"
743
- },
744
838
  {
745
839
  "inputs": [],
746
840
  "name": "proxiableUUID",
@@ -757,25 +851,12 @@
757
851
  {
758
852
  "inputs": [
759
853
  {
760
- "internalType": "contract IEToken",
761
- "name": "eToken",
762
- "type": "address"
763
- }
764
- ],
765
- "name": "removeEToken",
766
- "outputs": [],
767
- "stateMutability": "nonpayable",
768
- "type": "function"
769
- },
770
- {
771
- "inputs": [
772
- {
773
- "internalType": "contract IRiskModule",
774
- "name": "riskModule",
854
+ "internalType": "contract IPolicyPoolComponent",
855
+ "name": "component",
775
856
  "type": "address"
776
857
  }
777
858
  ],
778
- "name": "removeRiskModule",
859
+ "name": "removeComponent",
779
860
  "outputs": [],
780
861
  "stateMutability": "nonpayable",
781
862
  "type": "function"
@@ -960,6 +1041,75 @@
960
1041
  "stateMutability": "nonpayable",
961
1042
  "type": "function"
962
1043
  },
1044
+ {
1045
+ "inputs": [
1046
+ {
1047
+ "internalType": "address",
1048
+ "name": "from",
1049
+ "type": "address"
1050
+ },
1051
+ {
1052
+ "internalType": "address",
1053
+ "name": "to",
1054
+ "type": "address"
1055
+ },
1056
+ {
1057
+ "internalType": "uint256",
1058
+ "name": "tokenId",
1059
+ "type": "uint256"
1060
+ }
1061
+ ],
1062
+ "name": "safeTransferFrom",
1063
+ "outputs": [],
1064
+ "stateMutability": "nonpayable",
1065
+ "type": "function"
1066
+ },
1067
+ {
1068
+ "inputs": [
1069
+ {
1070
+ "internalType": "address",
1071
+ "name": "from",
1072
+ "type": "address"
1073
+ },
1074
+ {
1075
+ "internalType": "address",
1076
+ "name": "to",
1077
+ "type": "address"
1078
+ },
1079
+ {
1080
+ "internalType": "uint256",
1081
+ "name": "tokenId",
1082
+ "type": "uint256"
1083
+ },
1084
+ {
1085
+ "internalType": "bytes",
1086
+ "name": "data",
1087
+ "type": "bytes"
1088
+ }
1089
+ ],
1090
+ "name": "safeTransferFrom",
1091
+ "outputs": [],
1092
+ "stateMutability": "nonpayable",
1093
+ "type": "function"
1094
+ },
1095
+ {
1096
+ "inputs": [
1097
+ {
1098
+ "internalType": "address",
1099
+ "name": "operator",
1100
+ "type": "address"
1101
+ },
1102
+ {
1103
+ "internalType": "bool",
1104
+ "name": "approved",
1105
+ "type": "bool"
1106
+ }
1107
+ ],
1108
+ "name": "setApprovalForAll",
1109
+ "outputs": [],
1110
+ "stateMutability": "nonpayable",
1111
+ "type": "function"
1112
+ },
963
1113
  {
964
1114
  "inputs": [
965
1115
  {
@@ -973,6 +1123,80 @@
973
1123
  "stateMutability": "nonpayable",
974
1124
  "type": "function"
975
1125
  },
1126
+ {
1127
+ "inputs": [
1128
+ {
1129
+ "internalType": "bytes4",
1130
+ "name": "interfaceId",
1131
+ "type": "bytes4"
1132
+ }
1133
+ ],
1134
+ "name": "supportsInterface",
1135
+ "outputs": [
1136
+ {
1137
+ "internalType": "bool",
1138
+ "name": "",
1139
+ "type": "bool"
1140
+ }
1141
+ ],
1142
+ "stateMutability": "view",
1143
+ "type": "function"
1144
+ },
1145
+ {
1146
+ "inputs": [],
1147
+ "name": "symbol",
1148
+ "outputs": [
1149
+ {
1150
+ "internalType": "string",
1151
+ "name": "",
1152
+ "type": "string"
1153
+ }
1154
+ ],
1155
+ "stateMutability": "view",
1156
+ "type": "function"
1157
+ },
1158
+ {
1159
+ "inputs": [
1160
+ {
1161
+ "internalType": "uint256",
1162
+ "name": "tokenId",
1163
+ "type": "uint256"
1164
+ }
1165
+ ],
1166
+ "name": "tokenURI",
1167
+ "outputs": [
1168
+ {
1169
+ "internalType": "string",
1170
+ "name": "",
1171
+ "type": "string"
1172
+ }
1173
+ ],
1174
+ "stateMutability": "view",
1175
+ "type": "function"
1176
+ },
1177
+ {
1178
+ "inputs": [
1179
+ {
1180
+ "internalType": "address",
1181
+ "name": "from",
1182
+ "type": "address"
1183
+ },
1184
+ {
1185
+ "internalType": "address",
1186
+ "name": "to",
1187
+ "type": "address"
1188
+ },
1189
+ {
1190
+ "internalType": "uint256",
1191
+ "name": "tokenId",
1192
+ "type": "uint256"
1193
+ }
1194
+ ],
1195
+ "name": "transferFrom",
1196
+ "outputs": [],
1197
+ "stateMutability": "nonpayable",
1198
+ "type": "function"
1199
+ },
976
1200
  {
977
1201
  "inputs": [],
978
1202
  "name": "treasury",
@@ -1049,8 +1273,8 @@
1049
1273
  "type": "function"
1050
1274
  }
1051
1275
  ],
1052
- "bytecode": "0x6101006040523060601b6080523480156200001957600080fd5b5060405162004715380380620047158339810160408190526200003c9162000064565b6001600160601b0319606093841b811660a05291831b821660e05290911b1660c052620000d1565b6000806000606084860312156200007a57600080fd5b83516200008781620000b8565b60208501519093506200009a81620000b8565b6040850151909250620000ad81620000b8565b809150509250925092565b6001600160a01b0381168114620000ce57600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c61451e620001f7600039600081816104ab0152818161162101528181612f130152818161336801528181613691015261388f01526000818161057701528181610880015281816116940152818161174e015281816118060152818161184401526119930152600081816103bd0152818161079101528181610a2701528181610e6001528181611123015281816111b901528181611a3601528181611d5401528181611f7c015281816121bd015281816122d8015281816123a501528181612472015281816125dc015281816126eb015281816127b8015281816128850152612a23015260008181610668015281816106b101528181610939015281816109790152610d7c015261451e6000f3fe6080604052600436106101d85760003560e01c80637f04870a11610102578063ccdcd9cf11610095578063f67b2bad11610064578063f67b2bad146105db578063f7d72a25146105fd578063fcbb17fe1461061d578063ffa600e31461063d57600080fd5b8063ccdcd9cf14610548578063e5a6b10f14610568578063f0f442601461059b578063f3fef3a3146105bb57600080fd5b8063af02808a116100d1578063af02808a1461049c578063b63d382e146104cf578063c4d66de8146104ef578063ca143d181461050f57600080fd5b80637f04870a146104015780638456cb59146104475780639042cf681461045c578063917876601461047c57600080fd5b806352d1902d1161017a57806365b710081161014957806365b710081461036e5780636af6f1ef1461038e57806371907f17146103ae5780637a702b3c146103e157600080fd5b806352d1902d146102d05780635b494dd5146102e55780635c975abb1461031957806361d027b31461033c57600080fd5b806347e7ef24116101b657806347e7ef24146102495780634a47a3e0146102695780634f1ef2861461029d57806352bab194146102b057600080fd5b806324ea54f4146101dd5780633659cfe6146102125780633f4ba83a14610234575b600080fd5b3480156101e957600080fd5b506101ff6000805160206144c983398151915281565b6040519081526020015b60405180910390f35b34801561021e57600080fd5b5061023261022d366004613daf565b61065d565b005b34801561024057600080fd5b50610232610746565b34801561025557600080fd5b50610232610264366004613f26565b6107f7565b34801561027557600080fd5b506101ff7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102326102ab366004613de9565b61092e565b3480156102bc57600080fd5b506102326102cb366004613daf565b6109fb565b3480156102dc57600080fd5b506101ff610d6f565b3480156102f157600080fd5b506101ff7f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b34801561032557600080fd5b5060335460ff166040519015158152602001610209565b34801561034857600080fd5b5060c9546001600160a01b03165b6040516001600160a01b039091168152602001610209565b34801561037a57600080fd5b50610232610389366004613daf565b610e22565b34801561039a57600080fd5b506102326103a9366004613f52565b611051565b3480156103ba57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610356565b3480156103ed57600080fd5b506102326103fc366004613fa9565b6110d5565b34801561040d57600080fd5b5061043a61041c366004613daf565b6001600160a01b0316600090815260cb602052604090205460ff1690565b604051610209919061416d565b34801561045357600080fd5b506102326110f7565b34801561046857600080fd5b50610232610477366004613daf565b61118d565b34801561048857600080fd5b506101ff610497366004613ff3565b6113db565b3480156104a857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610356565b3480156104db57600080fd5b506102326104ea366004613daf565b611a0a565b3480156104fb57600080fd5b5061023261050a366004613daf565b611c3a565b34801561051b57600080fd5b5061043a61052a366004613daf565b6001600160a01b0316600090815260ca602052604090205460ff1690565b34801561055457600080fd5b50610232610563366004613daf565b611d16565b34801561057457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610356565b3480156105a757600080fd5b506102326105b6366004613daf565b611f50565b3480156105c757600080fd5b506101ff6105d6366004613f26565b61202f565b3480156105e757600080fd5b506101ff60008051602061448283398151915281565b34801561060957600080fd5b50610232610618366004613ef1565b612172565b34801561062957600080fd5b50610232610638366004613ef1565b612591565b34801561064957600080fd5b50610232610658366004613f6f565b6129a5565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106af5760405162461bcd60e51b81526004016106a6906141c8565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106f8600080516020614462833981519152546001600160a01b031690565b6001600160a01b03161461071e5760405162461bcd60e51b81526004016106a690614214565b610727816129d8565b6040805160008082526020820190925261074391839190612a82565b50565b60405163c5b8f5cf60e01b81526000805160206144c9833981519152600482018190526000805160206144828339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b1580156107d357600080fd5b505afa1580156107e7573d6000803e3d6000fd5b505050506107f3612c01565b5050565b6107ff612c53565b6001600160a01b038216600090815260ca602052604090205460ff16600181600381111561082f5761082f614412565b146108735760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b60448201526064016106a6565b6108a86001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338585612c9b565b6040516311f9fbc960e21b8152336004820152602481018390526001600160a01b038416906347e7ef2490604401602060405180830381600087803b1580156108f057600080fd5b505af1158015610904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109289190613eae565b50505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156109775760405162461bcd60e51b81526004016106a6906141c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109c0600080516020614462833981519152546001600160a01b031690565b6001600160a01b0316146109e65760405162461bcd60e51b81526004016106a690614214565b6109ef826129d8565b6107f382826001612a82565b6040516312d9a6ad60e01b815260008051602061448283398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015610a7157600080fd5b505afa158015610a85573d6000803e3d6000fd5b50505050306001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190613dcc565b6001600160a01b031614610b6a5760405162461bcd60e51b815260206004820152602760248201527f5072656d69756d734163636f756e74206e6f74206c696e6b656420746f2074686044820152661a5cc81c1bdbdb60ca1b60648201526084016106a6565b6000826001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ba557600080fd5b505afa158015610bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdd9190613dcc565b90506001600160a01b03811615610c4a576040516338ea38a760e21b81526001600160a01b03848116600483015282169063e3a8e29c90602401600060405180830381600087803b158015610c3157600080fd5b505af1158015610c45573d6000803e3d6000fd5b505050505b826001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8357600080fd5b505afa158015610c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbb9190613dcc565b90506001600160a01b03811615610d28576040516338ea38a760e21b81526001600160a01b03848116600483015282169063e3a8e29c90602401600060405180830381600087803b158015610d0f57600080fd5b505af1158015610d23573d6000803e3d6000fd5b505050505b826001600160a01b03167f834362a634fb37104727a80cf5e936b5b1798edffcf4a89935f19d04eb0e88ec6001604051610d62919061416d565b60405180910390a2505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e0f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106a6565b5060008051602061446283398151915290565b6040516312d9a6ad60e01b81527f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2760048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015610eaa57600080fd5b505afa158015610ebe573d6000803e3d6000fd5b505050506001600160a01b038216600090815260ca602052604090205460ff166002816003811115610ef257610ef2614412565b14610f375760405162461bcd60e51b815260206004820152601560248201527411551bdad95b881b9bdd0819195c1c9958d85d1959605a1b60448201526064016106a6565b826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7057600080fd5b505afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa89190613eae565b156110045760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b60648201526084016106a6565b6001600160a01b038316600081815260ca6020526040808220805460ff19169055517f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c91610d629161416d565b611059612c53565b4261106c6101c083016101a08401614051565b64ffffffffff1611156110ba5760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b60448201526064016106a6565b6107436110cc36839003830183613fd6565b60006001612cf5565b6110dd612c53565b6107f36110ef36849003840184613fd6565b826000612cf5565b6040516312d9a6ad60e01b81526000805160206144c983398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561116d57600080fd5b505afa158015611181573d6000803e3d6000fd5b5050505061074361322a565b6040516312d9a6ad60e01b815260008051602061448283398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561120357600080fd5b505afa158015611217573d6000803e3d6000fd5b5060009250611224915050565b6001600160a01b038316600090815260cb602052604090205460ff16600381111561125157611251614412565b1461129e5760405162461bcd60e51b815260206004820152601f60248201527f5269736b204d6f64756c6520616c726561647920696e2074686520706f6f6c0060448201526064016106a6565b306001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e157600080fd5b505afa1580156112f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113199190613dcc565b6001600160a01b03161461137a5760405162461bcd60e51b815260206004820152602260248201527f5269736b4d6f64756c65206e6f74206c696e6b656420746f207468697320706f6044820152611bdb60f21b60648201526084016106a6565b6001600160a01b038216600081815260cb602052604090819020805460ff1916600190811790915590517fd53eb6b3f6b4537d457cf1ef5020afc3e8cef610aa1472d19e442e9a62fef4b2916113cf9161416d565b60405180910390a25050565b60006113e5612c53565b6101608401516001600160a01b038116331461144f5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b60648201526084016106a6565b60016001600160a01b038216600090815260cb602052604090205460ff16600381111561147e5761147e614412565b146114d55760405162461bcd60e51b815260206004820152602160248201527f524d206d6f64756c65206e6f7420666f756e64206f72206e6f742061637469766044820152606560f81b60648201526084016106a6565b6115006bffffffffffffffffffffffff84166bffffffffffffffffffffffff19606084901b166143c0565b855261150b85613267565b60cc600087600001518152602001908152602001600020819055506000816001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561156157600080fd5b505afa158015611575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115999190613dcc565b60405163e3638ea360e01b81529091506001600160a01b0382169063e3638ea3906115c8908990600401614356565b600060405180830381600087803b1580156115e257600080fd5b505af11580156115f6573d6000803e3d6000fd5b50508751604051632851206560e21b81526001600160a01b03898116600483015260248201929092527f0000000000000000000000000000000000000000000000000000000000000000909116925063a14481949150604401600060405180830381600087803b15801561166957600080fd5b505af115801561167d573d6000803e3d6000fd5b50505060c08701516116be91506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087908490612c9b565b610140860151156117765761177685826001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561170657600080fd5b505afa15801561171a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173e9190613dcc565b6101408901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612c9b565b6101208601511561182e5761182e85826001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117be57600080fd5b505afa1580156117d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f69190613dcc565b6101208901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612c9b565b60c95460e0870151611872916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169289929190911690612c9b565b60008661010001511180156119095750816001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b1580156118bb57600080fd5b505afa1580156118cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f39190613dcc565b6001600160a01b0316856001600160a01b031614155b156119bb576119bb85836001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b15801561194b57600080fd5b505afa15801561195f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119839190613dcc565b6101008901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612c9b565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b876040516119f49190614356565b60405180910390a25050835190505b9392505050565b6040516312d9a6ad60e01b815260008051602061448283398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611a8057600080fd5b505afa158015611a94573d6000803e3d6000fd5b5050506001600160a01b038316600090815260ca602052604081205460ff169150816003811115611ac757611ac7614412565b14611b145760405162461bcd60e51b815260206004820152601a60248201527f65546f6b656e20616c726561647920696e2074686520706f6f6c00000000000060448201526064016106a6565b306001600160a01b0316836001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b158015611b5757600080fd5b505afa158015611b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8f9190613dcc565b6001600160a01b031614611be55760405162461bcd60e51b815260206004820152601e60248201527f45546f6b656e206e6f74206c696e6b656420746f207468697320706f6f6c000060448201526064016106a6565b6001600160a01b038316600081815260ca602052604090819020805460ff1916600190811790915590517f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c91610d629161416d565b600054610100900460ff1615808015611c5a5750600054600160ff909116105b80611c745750303b158015611c74575060005460ff166001145b611c905760405162461bcd60e51b81526004016106a690614260565b6000805460ff191660011790558015611cb3576000805461ff0019166101001790555b611cbb613297565b611cc36132be565b611ccc826132ed565b80156107f3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b6040516312d9a6ad60e01b81527fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c060048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611d9e57600080fd5b505afa158015611db2573d6000803e3d6000fd5b5060009250611dbf915050565b6001600160a01b038316600090815260cb602052604090205460ff166003811115611dec57611dec614412565b1415611e325760405162461bcd60e51b8152602060048201526015602482015274149a5cdac8135bd91d5b19481b9bdd08199bdd5b99605a1b60448201526064016106a6565b816001600160a01b0316637ff8bf256040518163ffffffff1660e01b815260040160206040518083038186803b158015611e6b57600080fd5b505afa158015611e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea39190613eae565b15611f035760405162461bcd60e51b815260206004820152602a60248201527f43616e27742072656d6f76652061206d6f64756c6520776974682061637469766044820152696520706f6c696369657360b01b60648201526084016106a6565b6001600160a01b038216600081815260cb6020526040808220805460ff19169055517fd53eb6b3f6b4537d457cf1ef5020afc3e8cef610aa1472d19e442e9a62fef4b2916113cf9161416d565b6040516312d9a6ad60e01b815260008051602061448283398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611fc657600080fd5b505afa158015611fda573d6000803e3d6000fd5b505060c980546001600160a01b0319166001600160a01b038616908117909155604051908152600192507fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f91506020016113cf565b6000612039612c53565b6001600160a01b038316600090815260ca602052604090205460ff16600181600381111561206957612069614412565b14806120865750600281600381111561208457612084614412565b145b6120e45760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b60648201526084016106a6565b60405163f3fef3a360e01b8152336004820181905260248201859052906001600160a01b0386169063f3fef3a390604401602060405180830381600087803b15801561212f57600080fd5b505af1158015612143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121679190613eae565b925050505b92915050565b60405163c5b8f5cf60e01b81526000805160206144c9833981519152600482018190526000805160206144828339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b1580156121ff57600080fd5b505afa158015612213573d6000803e3d6000fd5b5060009250612220915050565b6001600160a01b038516600090815260cb602052604090205460ff16600381111561224d5761224d614412565b14156122935760405162461bcd60e51b8152602060048201526015602482015274149a5cdac8135bd91d5b19481b9bdd08199bdd5b99605a1b60448201526064016106a6565b60018360038111156122a7576122a7614412565b14801561235a5750604051632474521560e21b815260008051602061448283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561232257600080fd5b505afa158015612336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235a9190613e91565b806124275750600383600381111561237457612374614412565b1480156124275750604051632474521560e21b81526000805160206144c983398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b1580156123ef57600080fd5b505afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124279190613e91565b806124f45750600283600381111561244157612441614412565b1480156124f45750604051632474521560e21b815260008051602061448283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b1580156124bc57600080fd5b505afa1580156124d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f49190613e91565b6125105760405162461bcd60e51b81526004016106a6906142ae565b6001600160a01b038416600090815260cb60205260409020805484919060ff1916600183600381111561254557612545614412565b0217905550836001600160a01b03167fd53eb6b3f6b4537d457cf1ef5020afc3e8cef610aa1472d19e442e9a62fef4b284604051612583919061416d565b60405180910390a250505050565b60405163c5b8f5cf60e01b81526000805160206144c9833981519152600482018190526000805160206144828339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561261e57600080fd5b505afa158015612632573d6000803e3d6000fd5b5050506001600160a01b038516600090815260ca602052604081205460ff16915081600381111561266557612665614412565b14156126a65760405162461bcd60e51b815260206004820152601060248201526f11551bdad95b881b9bdd08199bdd5b9960821b60448201526064016106a6565b60018460038111156126ba576126ba614412565b14801561276d5750604051632474521560e21b815260008051602061448283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561273557600080fd5b505afa158015612749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276d9190613e91565b8061283a5750600384600381111561278757612787614412565b14801561283a5750604051632474521560e21b81526000805160206144c983398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561280257600080fd5b505afa158015612816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283a9190613e91565b806129075750600284600381111561285457612854614412565b1480156129075750604051632474521560e21b815260008051602061448283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b1580156128cf57600080fd5b505afa1580156128e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129079190613e91565b6129235760405162461bcd60e51b81526004016106a6906142ae565b6001600160a01b038516600090815260ca60205260409020805485919060ff1916600183600381111561295857612958614412565b0217905550846001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c85604051612996919061416d565b60405180910390a25050505050565b6129ad612c53565b6107f36129bf36849003840184613fd6565b826129cb5760006129d1565b83602001355b6000612cf5565b60405163c5b8f5cf60e01b81526000805160206144c9833981519152600482018190526000805160206144828339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015612a6557600080fd5b505afa158015612a79573d6000803e3d6000fd5b50505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612aba57612ab583613436565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612af357600080fd5b505afa925050508015612b23575060408051601f3d908101601f19168201909252612b2091810190613eae565b60015b612b865760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106a6565b6000805160206144628339815191528114612bf55760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106a6565b50612ab58383836134d2565b612c096134f7565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60335460ff1615612c995760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a6565b565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610928908590613540565b612cfe83613612565b6101608301518180612d1857506001600160a01b03811633145b612d645760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c696369657360448201526064016106a6565b821580612d7c575042846101a0015164ffffffffff16115b612dc85760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c696379000000000000000060448201526064016106a6565b60016001600160a01b038216600090815260cb602052604090205460ff166003811115612df757612df7614412565b1480612e2f575060026001600160a01b038216600090815260cb602052604090205460ff166003811115612e2d57612e2d614412565b145b612ea15760405162461bcd60e51b815260206004820152603a60248201527f4d6f64756c65206d75737420626520616374697665206f72206465707265636160448201527f74656420746f2070726f63657373207265736f6c7574696f6e7300000000000060648201526084016106a6565b8360200151831115612eee5760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b60448201526064016106a6565b82158015906130745784516040516331a9108f60e11b81526000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636352211e91612f4a9160040190815260200190565b60206040518083038186803b158015612f6257600080fd5b505afa158015612f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9a9190613dcc565b9050826001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b158015612fd557600080fd5b505afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d9190613dcc565b6001600160a01b0316639d8c5ee78288886040518463ffffffff1660e01b815260040161303c93929190614140565b600060405180830381600087803b15801561305657600080fd5b505af115801561306a573d6000803e3d6000fd5b5050505050613143565b816001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b1580156130ad57600080fd5b505afa1580156130c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e59190613dcc565b6001600160a01b031663c7a9c70d866040518263ffffffff1660e01b81526004016131109190614356565b600060405180830381600087803b15801561312a57600080fd5b505af115801561313e573d6000803e3d6000fd5b505050505b6020850151604051636a448ef160e01b815260048101919091526001600160a01b03831690636a448ef190602401600060405180830381600087803b15801561318b57600080fd5b505af115801561319f573d6000803e3d6000fd5b5050505084600001518561016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e866040516131e891815260200190565b60405180910390a38451600090815260cc602052604081205583156132185784516132139085613678565b613223565b845161322390613876565b5050505050565b613232612c53565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612c363390565b60008160405160200161327a9190614356565b604051602081830303815290604052805190602001209050919050565b600054610100900460ff16612c995760405162461bcd60e51b81526004016106a69061430b565b600054610100900460ff166132e55760405162461bcd60e51b81526004016106a69061430b565b612c996139bc565b600054610100900460ff161580801561330d5750600054600160ff909116105b806133275750303b158015613327575060005460ff166001145b6133435760405162461bcd60e51b81526004016106a690614260565b6000805460ff191660011790558015613366576000805461ff0019166101001790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133c157600080fd5b505af11580156133d5573d6000803e3d6000fd5b505060c980546001600160a01b0319166001600160a01b038616179055505080156107f3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d0a565b6001600160a01b0381163b6134a35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106a6565b60008051602061446283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6134db836139ef565b6000825111806134e85750805b15612ab5576109288383613a2f565b60335460ff16612c995760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106a6565b6000613595826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613b1a9092919063ffffffff16565b805190915015612ab557808060200190518101906135b39190613e91565b612ab55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a6565b80511580159061363957508051600090815260cc602052604090205461363782613267565b145b6107435760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b60448201526064016106a6565b6040516331a9108f60e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b1580156136db57600080fd5b505afa1580156136ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137139190613dcc565b90506001600160a01b0381163b61372957505050565b6001600160a01b03811663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044810186905260648101859052608401602060405180830381600087803b15801561378e57600080fd5b505af19250505080156137be575060408051601f3d908101601f191682019092526137bb91810190613ec7565b60015b613806573d8080156137ec576040519150601f19603f3d011682016040523d82523d6000602084013e6137f1565b606091505b5080516137fe5750505050565b805181602001fd5b6001600160e01b03198116636b140e9f60e11b146109285760405162461bcd60e51b815260206004820152602760248201527f496e76616c69642072657475726e2076616c75652066726f6d20506f6c696379604482015266102437b63232b960c91b60648201526084016106a6565b6040516331a9108f60e11b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b1580156138d957600080fd5b505afa1580156138ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139119190613dcc565b90506001600160a01b0381163b613926575050565b6001600160a01b03811663e8e617b7336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101859052606401602060405180830381600087803b15801561398457600080fd5b505af19250505080156139b4575060408051601f3d908101601f191682019092526139b191810190613ec7565b60015b612ab5575050565b600054610100900460ff166139e35760405162461bcd60e51b81526004016106a69061430b565b6033805460ff19169055565b6139f881613436565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b613a975760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016106a6565b600080846001600160a01b031684604051613ab29190614124565b600060405180830381855af49150503d8060008114613aed576040519150601f19603f3d011682016040523d82523d6000602084013e613af2565b606091505b509150915061216782826040518060600160405280602781526020016144a260279139613b31565b6060613b298484600085613b6a565b949350505050565b60608315613b40575081611a03565b825115613b505782518084602001fd5b8160405162461bcd60e51b81526004016106a69190614195565b606082471015613bcb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a6565b6001600160a01b0385163b613c225760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a6565b600080866001600160a01b03168587604051613c3e9190614124565b60006040518083038185875af1925050503d8060008114613c7b576040519150601f19603f3d011682016040523d82523d6000602084013e613c80565b606091505b5091509150613c90828286613b31565b979650505050505050565b8035613ca68161443e565b919050565b803560048110613ca657600080fd5b60006101c08284031215613ccd57600080fd5b50919050565b60006101c08284031215613ce657600080fd5b613cee614365565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301358183015250610160613d6c818401613c9b565b90820152610180613d7e838201613d9a565b908201526101a0613d90838201613d9a565b9082015292915050565b803564ffffffffff81168114613ca657600080fd5b600060208284031215613dc157600080fd5b8135611a038161443e565b600060208284031215613dde57600080fd5b8151611a038161443e565b60008060408385031215613dfc57600080fd5b8235613e078161443e565b915060208381013567ffffffffffffffff80821115613e2557600080fd5b818601915086601f830112613e3957600080fd5b813581811115613e4b57613e4b614428565b613e5d601f8201601f1916850161438f565b91508082528784828501011115613e7357600080fd5b80848401858401376000848284010152508093505050509250929050565b600060208284031215613ea357600080fd5b8151611a0381614453565b600060208284031215613ec057600080fd5b5051919050565b600060208284031215613ed957600080fd5b81516001600160e01b031981168114611a0357600080fd5b60008060408385031215613f0457600080fd5b8235613f0f8161443e565b9150613f1d60208401613cab565b90509250929050565b60008060408385031215613f3957600080fd5b8235613f448161443e565b946020939093013593505050565b60006101c08284031215613f6557600080fd5b611a038383613cba565b6000806101e08385031215613f8357600080fd5b613f8d8484613cba565b91506101c0830135613f9e81614453565b809150509250929050565b6000806101e08385031215613fbd57600080fd5b613fc78484613cba565b946101c0939093013593505050565b60006101c08284031215613fe957600080fd5b611a038383613cd3565b6000806000610200848603121561400957600080fd5b6140138585613cd3565b92506101c08401356140248161443e565b91506101e08401356bffffffffffffffffffffffff8116811461404657600080fd5b809150509250925092565b60006020828403121561406357600080fd5b611a0382613d9a565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e0830152610100808201518184015250610120808201518184015250610140808201518184015250610160808201516140f5828501826001600160a01b03169052565b50506101808181015164ffffffffff81168483015250506101a08181015164ffffffffff811684830152610928565b600082516141368184602087016143e6565b9190910192915050565b6001600160a01b0384168152610200810161415e602083018561406c565b826101e0830152949350505050565b602081016004831061418f57634e487b7160e01b600052602160045260246000fd5b91905290565b60208152600082518060208401526141b48160408501602087016143e6565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252603e908201527f4f6e6c7920475541524449414e2063616e2073757370656e64202f204f6e6c7960408201527f204c4556454c312063616e2061637469766174652f6465707265636174650000606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6101c0810161216c828461406c565b6040516101c0810167ffffffffffffffff8111828210171561438957614389614428565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156143b8576143b8614428565b604052919050565b600082198211156143e157634e487b7160e01b600052601160045260246000fd5b500190565b60005b838110156144015781810151838201526020016143e9565b838111156109285750506000910152565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461074357600080fd5b801515811461074357600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212208985fee0acad61d24a80030a55277883e1e09496993b188dea7655ae09f411b264736f6c63430008060033",
1053
- "deployedBytecode": "0x6080604052600436106101d85760003560e01c80637f04870a11610102578063ccdcd9cf11610095578063f67b2bad11610064578063f67b2bad146105db578063f7d72a25146105fd578063fcbb17fe1461061d578063ffa600e31461063d57600080fd5b8063ccdcd9cf14610548578063e5a6b10f14610568578063f0f442601461059b578063f3fef3a3146105bb57600080fd5b8063af02808a116100d1578063af02808a1461049c578063b63d382e146104cf578063c4d66de8146104ef578063ca143d181461050f57600080fd5b80637f04870a146104015780638456cb59146104475780639042cf681461045c578063917876601461047c57600080fd5b806352d1902d1161017a57806365b710081161014957806365b710081461036e5780636af6f1ef1461038e57806371907f17146103ae5780637a702b3c146103e157600080fd5b806352d1902d146102d05780635b494dd5146102e55780635c975abb1461031957806361d027b31461033c57600080fd5b806347e7ef24116101b657806347e7ef24146102495780634a47a3e0146102695780634f1ef2861461029d57806352bab194146102b057600080fd5b806324ea54f4146101dd5780633659cfe6146102125780633f4ba83a14610234575b600080fd5b3480156101e957600080fd5b506101ff6000805160206144c983398151915281565b6040519081526020015b60405180910390f35b34801561021e57600080fd5b5061023261022d366004613daf565b61065d565b005b34801561024057600080fd5b50610232610746565b34801561025557600080fd5b50610232610264366004613f26565b6107f7565b34801561027557600080fd5b506101ff7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102326102ab366004613de9565b61092e565b3480156102bc57600080fd5b506102326102cb366004613daf565b6109fb565b3480156102dc57600080fd5b506101ff610d6f565b3480156102f157600080fd5b506101ff7f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b34801561032557600080fd5b5060335460ff166040519015158152602001610209565b34801561034857600080fd5b5060c9546001600160a01b03165b6040516001600160a01b039091168152602001610209565b34801561037a57600080fd5b50610232610389366004613daf565b610e22565b34801561039a57600080fd5b506102326103a9366004613f52565b611051565b3480156103ba57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610356565b3480156103ed57600080fd5b506102326103fc366004613fa9565b6110d5565b34801561040d57600080fd5b5061043a61041c366004613daf565b6001600160a01b0316600090815260cb602052604090205460ff1690565b604051610209919061416d565b34801561045357600080fd5b506102326110f7565b34801561046857600080fd5b50610232610477366004613daf565b61118d565b34801561048857600080fd5b506101ff610497366004613ff3565b6113db565b3480156104a857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610356565b3480156104db57600080fd5b506102326104ea366004613daf565b611a0a565b3480156104fb57600080fd5b5061023261050a366004613daf565b611c3a565b34801561051b57600080fd5b5061043a61052a366004613daf565b6001600160a01b0316600090815260ca602052604090205460ff1690565b34801561055457600080fd5b50610232610563366004613daf565b611d16565b34801561057457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610356565b3480156105a757600080fd5b506102326105b6366004613daf565b611f50565b3480156105c757600080fd5b506101ff6105d6366004613f26565b61202f565b3480156105e757600080fd5b506101ff60008051602061448283398151915281565b34801561060957600080fd5b50610232610618366004613ef1565b612172565b34801561062957600080fd5b50610232610638366004613ef1565b612591565b34801561064957600080fd5b50610232610658366004613f6f565b6129a5565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156106af5760405162461bcd60e51b81526004016106a6906141c8565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166106f8600080516020614462833981519152546001600160a01b031690565b6001600160a01b03161461071e5760405162461bcd60e51b81526004016106a690614214565b610727816129d8565b6040805160008082526020820190925261074391839190612a82565b50565b60405163c5b8f5cf60e01b81526000805160206144c9833981519152600482018190526000805160206144828339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b1580156107d357600080fd5b505afa1580156107e7573d6000803e3d6000fd5b505050506107f3612c01565b5050565b6107ff612c53565b6001600160a01b038216600090815260ca602052604090205460ff16600181600381111561082f5761082f614412565b146108735760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b60448201526064016106a6565b6108a86001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338585612c9b565b6040516311f9fbc960e21b8152336004820152602481018390526001600160a01b038416906347e7ef2490604401602060405180830381600087803b1580156108f057600080fd5b505af1158015610904573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109289190613eae565b50505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156109775760405162461bcd60e51b81526004016106a6906141c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109c0600080516020614462833981519152546001600160a01b031690565b6001600160a01b0316146109e65760405162461bcd60e51b81526004016106a690614214565b6109ef826129d8565b6107f382826001612a82565b6040516312d9a6ad60e01b815260008051602061448283398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015610a7157600080fd5b505afa158015610a85573d6000803e3d6000fd5b50505050306001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b049190613dcc565b6001600160a01b031614610b6a5760405162461bcd60e51b815260206004820152602760248201527f5072656d69756d734163636f756e74206e6f74206c696e6b656420746f2074686044820152661a5cc81c1bdbdb60ca1b60648201526084016106a6565b6000826001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ba557600080fd5b505afa158015610bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdd9190613dcc565b90506001600160a01b03811615610c4a576040516338ea38a760e21b81526001600160a01b03848116600483015282169063e3a8e29c90602401600060405180830381600087803b158015610c3157600080fd5b505af1158015610c45573d6000803e3d6000fd5b505050505b826001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8357600080fd5b505afa158015610c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbb9190613dcc565b90506001600160a01b03811615610d28576040516338ea38a760e21b81526001600160a01b03848116600483015282169063e3a8e29c90602401600060405180830381600087803b158015610d0f57600080fd5b505af1158015610d23573d6000803e3d6000fd5b505050505b826001600160a01b03167f834362a634fb37104727a80cf5e936b5b1798edffcf4a89935f19d04eb0e88ec6001604051610d62919061416d565b60405180910390a2505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e0f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106a6565b5060008051602061446283398151915290565b6040516312d9a6ad60e01b81527f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2760048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015610eaa57600080fd5b505afa158015610ebe573d6000803e3d6000fd5b505050506001600160a01b038216600090815260ca602052604090205460ff166002816003811115610ef257610ef2614412565b14610f375760405162461bcd60e51b815260206004820152601560248201527411551bdad95b881b9bdd0819195c1c9958d85d1959605a1b60448201526064016106a6565b826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7057600080fd5b505afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa89190613eae565b156110045760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b60648201526084016106a6565b6001600160a01b038316600081815260ca6020526040808220805460ff19169055517f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c91610d629161416d565b611059612c53565b4261106c6101c083016101a08401614051565b64ffffffffff1611156110ba5760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b60448201526064016106a6565b6107436110cc36839003830183613fd6565b60006001612cf5565b6110dd612c53565b6107f36110ef36849003840184613fd6565b826000612cf5565b6040516312d9a6ad60e01b81526000805160206144c983398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561116d57600080fd5b505afa158015611181573d6000803e3d6000fd5b5050505061074361322a565b6040516312d9a6ad60e01b815260008051602061448283398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561120357600080fd5b505afa158015611217573d6000803e3d6000fd5b5060009250611224915050565b6001600160a01b038316600090815260cb602052604090205460ff16600381111561125157611251614412565b1461129e5760405162461bcd60e51b815260206004820152601f60248201527f5269736b204d6f64756c6520616c726561647920696e2074686520706f6f6c0060448201526064016106a6565b306001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e157600080fd5b505afa1580156112f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113199190613dcc565b6001600160a01b03161461137a5760405162461bcd60e51b815260206004820152602260248201527f5269736b4d6f64756c65206e6f74206c696e6b656420746f207468697320706f6044820152611bdb60f21b60648201526084016106a6565b6001600160a01b038216600081815260cb602052604090819020805460ff1916600190811790915590517fd53eb6b3f6b4537d457cf1ef5020afc3e8cef610aa1472d19e442e9a62fef4b2916113cf9161416d565b60405180910390a25050565b60006113e5612c53565b6101608401516001600160a01b038116331461144f5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b60648201526084016106a6565b60016001600160a01b038216600090815260cb602052604090205460ff16600381111561147e5761147e614412565b146114d55760405162461bcd60e51b815260206004820152602160248201527f524d206d6f64756c65206e6f7420666f756e64206f72206e6f742061637469766044820152606560f81b60648201526084016106a6565b6115006bffffffffffffffffffffffff84166bffffffffffffffffffffffff19606084901b166143c0565b855261150b85613267565b60cc600087600001518152602001908152602001600020819055506000816001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561156157600080fd5b505afa158015611575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115999190613dcc565b60405163e3638ea360e01b81529091506001600160a01b0382169063e3638ea3906115c8908990600401614356565b600060405180830381600087803b1580156115e257600080fd5b505af11580156115f6573d6000803e3d6000fd5b50508751604051632851206560e21b81526001600160a01b03898116600483015260248201929092527f0000000000000000000000000000000000000000000000000000000000000000909116925063a14481949150604401600060405180830381600087803b15801561166957600080fd5b505af115801561167d573d6000803e3d6000fd5b50505060c08701516116be91506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087908490612c9b565b610140860151156117765761177685826001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561170657600080fd5b505afa15801561171a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173e9190613dcc565b6101408901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612c9b565b6101208601511561182e5761182e85826001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117be57600080fd5b505afa1580156117d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f69190613dcc565b6101208901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612c9b565b60c95460e0870151611872916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169289929190911690612c9b565b60008661010001511180156119095750816001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b1580156118bb57600080fd5b505afa1580156118cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f39190613dcc565b6001600160a01b0316856001600160a01b031614155b156119bb576119bb85836001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b15801561194b57600080fd5b505afa15801561195f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119839190613dcc565b6101008901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612c9b565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b876040516119f49190614356565b60405180910390a25050835190505b9392505050565b6040516312d9a6ad60e01b815260008051602061448283398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611a8057600080fd5b505afa158015611a94573d6000803e3d6000fd5b5050506001600160a01b038316600090815260ca602052604081205460ff169150816003811115611ac757611ac7614412565b14611b145760405162461bcd60e51b815260206004820152601a60248201527f65546f6b656e20616c726561647920696e2074686520706f6f6c00000000000060448201526064016106a6565b306001600160a01b0316836001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b158015611b5757600080fd5b505afa158015611b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8f9190613dcc565b6001600160a01b031614611be55760405162461bcd60e51b815260206004820152601e60248201527f45546f6b656e206e6f74206c696e6b656420746f207468697320706f6f6c000060448201526064016106a6565b6001600160a01b038316600081815260ca602052604090819020805460ff1916600190811790915590517f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c91610d629161416d565b600054610100900460ff1615808015611c5a5750600054600160ff909116105b80611c745750303b158015611c74575060005460ff166001145b611c905760405162461bcd60e51b81526004016106a690614260565b6000805460ff191660011790558015611cb3576000805461ff0019166101001790555b611cbb613297565b611cc36132be565b611ccc826132ed565b80156107f3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b6040516312d9a6ad60e01b81527fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c060048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611d9e57600080fd5b505afa158015611db2573d6000803e3d6000fd5b5060009250611dbf915050565b6001600160a01b038316600090815260cb602052604090205460ff166003811115611dec57611dec614412565b1415611e325760405162461bcd60e51b8152602060048201526015602482015274149a5cdac8135bd91d5b19481b9bdd08199bdd5b99605a1b60448201526064016106a6565b816001600160a01b0316637ff8bf256040518163ffffffff1660e01b815260040160206040518083038186803b158015611e6b57600080fd5b505afa158015611e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea39190613eae565b15611f035760405162461bcd60e51b815260206004820152602a60248201527f43616e27742072656d6f76652061206d6f64756c6520776974682061637469766044820152696520706f6c696369657360b01b60648201526084016106a6565b6001600160a01b038216600081815260cb6020526040808220805460ff19169055517fd53eb6b3f6b4537d457cf1ef5020afc3e8cef610aa1472d19e442e9a62fef4b2916113cf9161416d565b6040516312d9a6ad60e01b815260008051602061448283398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611fc657600080fd5b505afa158015611fda573d6000803e3d6000fd5b505060c980546001600160a01b0319166001600160a01b038616908117909155604051908152600192507fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f91506020016113cf565b6000612039612c53565b6001600160a01b038316600090815260ca602052604090205460ff16600181600381111561206957612069614412565b14806120865750600281600381111561208457612084614412565b145b6120e45760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b60648201526084016106a6565b60405163f3fef3a360e01b8152336004820181905260248201859052906001600160a01b0386169063f3fef3a390604401602060405180830381600087803b15801561212f57600080fd5b505af1158015612143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121679190613eae565b925050505b92915050565b60405163c5b8f5cf60e01b81526000805160206144c9833981519152600482018190526000805160206144828339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b1580156121ff57600080fd5b505afa158015612213573d6000803e3d6000fd5b5060009250612220915050565b6001600160a01b038516600090815260cb602052604090205460ff16600381111561224d5761224d614412565b14156122935760405162461bcd60e51b8152602060048201526015602482015274149a5cdac8135bd91d5b19481b9bdd08199bdd5b99605a1b60448201526064016106a6565b60018360038111156122a7576122a7614412565b14801561235a5750604051632474521560e21b815260008051602061448283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561232257600080fd5b505afa158015612336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235a9190613e91565b806124275750600383600381111561237457612374614412565b1480156124275750604051632474521560e21b81526000805160206144c983398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b1580156123ef57600080fd5b505afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124279190613e91565b806124f45750600283600381111561244157612441614412565b1480156124f45750604051632474521560e21b815260008051602061448283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b1580156124bc57600080fd5b505afa1580156124d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f49190613e91565b6125105760405162461bcd60e51b81526004016106a6906142ae565b6001600160a01b038416600090815260cb60205260409020805484919060ff1916600183600381111561254557612545614412565b0217905550836001600160a01b03167fd53eb6b3f6b4537d457cf1ef5020afc3e8cef610aa1472d19e442e9a62fef4b284604051612583919061416d565b60405180910390a250505050565b60405163c5b8f5cf60e01b81526000805160206144c9833981519152600482018190526000805160206144828339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561261e57600080fd5b505afa158015612632573d6000803e3d6000fd5b5050506001600160a01b038516600090815260ca602052604081205460ff16915081600381111561266557612665614412565b14156126a65760405162461bcd60e51b815260206004820152601060248201526f11551bdad95b881b9bdd08199bdd5b9960821b60448201526064016106a6565b60018460038111156126ba576126ba614412565b14801561276d5750604051632474521560e21b815260008051602061448283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561273557600080fd5b505afa158015612749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276d9190613e91565b8061283a5750600384600381111561278757612787614412565b14801561283a5750604051632474521560e21b81526000805160206144c983398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561280257600080fd5b505afa158015612816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283a9190613e91565b806129075750600284600381111561285457612854614412565b1480156129075750604051632474521560e21b815260008051602061448283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b1580156128cf57600080fd5b505afa1580156128e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129079190613e91565b6129235760405162461bcd60e51b81526004016106a6906142ae565b6001600160a01b038516600090815260ca60205260409020805485919060ff1916600183600381111561295857612958614412565b0217905550846001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c85604051612996919061416d565b60405180910390a25050505050565b6129ad612c53565b6107f36129bf36849003840184613fd6565b826129cb5760006129d1565b83602001355b6000612cf5565b60405163c5b8f5cf60e01b81526000805160206144c9833981519152600482018190526000805160206144828339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015612a6557600080fd5b505afa158015612a79573d6000803e3d6000fd5b50505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612aba57612ab583613436565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612af357600080fd5b505afa925050508015612b23575060408051601f3d908101601f19168201909252612b2091810190613eae565b60015b612b865760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106a6565b6000805160206144628339815191528114612bf55760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106a6565b50612ab58383836134d2565b612c096134f7565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60335460ff1615612c995760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a6565b565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610928908590613540565b612cfe83613612565b6101608301518180612d1857506001600160a01b03811633145b612d645760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c696369657360448201526064016106a6565b821580612d7c575042846101a0015164ffffffffff16115b612dc85760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c696379000000000000000060448201526064016106a6565b60016001600160a01b038216600090815260cb602052604090205460ff166003811115612df757612df7614412565b1480612e2f575060026001600160a01b038216600090815260cb602052604090205460ff166003811115612e2d57612e2d614412565b145b612ea15760405162461bcd60e51b815260206004820152603a60248201527f4d6f64756c65206d75737420626520616374697665206f72206465707265636160448201527f74656420746f2070726f63657373207265736f6c7574696f6e7300000000000060648201526084016106a6565b8360200151831115612eee5760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b60448201526064016106a6565b82158015906130745784516040516331a9108f60e11b81526000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636352211e91612f4a9160040190815260200190565b60206040518083038186803b158015612f6257600080fd5b505afa158015612f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9a9190613dcc565b9050826001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b158015612fd557600080fd5b505afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d9190613dcc565b6001600160a01b0316639d8c5ee78288886040518463ffffffff1660e01b815260040161303c93929190614140565b600060405180830381600087803b15801561305657600080fd5b505af115801561306a573d6000803e3d6000fd5b5050505050613143565b816001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b1580156130ad57600080fd5b505afa1580156130c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e59190613dcc565b6001600160a01b031663c7a9c70d866040518263ffffffff1660e01b81526004016131109190614356565b600060405180830381600087803b15801561312a57600080fd5b505af115801561313e573d6000803e3d6000fd5b505050505b6020850151604051636a448ef160e01b815260048101919091526001600160a01b03831690636a448ef190602401600060405180830381600087803b15801561318b57600080fd5b505af115801561319f573d6000803e3d6000fd5b5050505084600001518561016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e866040516131e891815260200190565b60405180910390a38451600090815260cc602052604081205583156132185784516132139085613678565b613223565b845161322390613876565b5050505050565b613232612c53565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612c363390565b60008160405160200161327a9190614356565b604051602081830303815290604052805190602001209050919050565b600054610100900460ff16612c995760405162461bcd60e51b81526004016106a69061430b565b600054610100900460ff166132e55760405162461bcd60e51b81526004016106a69061430b565b612c996139bc565b600054610100900460ff161580801561330d5750600054600160ff909116105b806133275750303b158015613327575060005460ff166001145b6133435760405162461bcd60e51b81526004016106a690614260565b6000805460ff191660011790558015613366576000805461ff0019166101001790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156133c157600080fd5b505af11580156133d5573d6000803e3d6000fd5b505060c980546001600160a01b0319166001600160a01b038616179055505080156107f3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d0a565b6001600160a01b0381163b6134a35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106a6565b60008051602061446283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6134db836139ef565b6000825111806134e85750805b15612ab5576109288383613a2f565b60335460ff16612c995760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106a6565b6000613595826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613b1a9092919063ffffffff16565b805190915015612ab557808060200190518101906135b39190613e91565b612ab55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a6565b80511580159061363957508051600090815260cc602052604090205461363782613267565b145b6107435760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b60448201526064016106a6565b6040516331a9108f60e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b1580156136db57600080fd5b505afa1580156136ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137139190613dcc565b90506001600160a01b0381163b61372957505050565b6001600160a01b03811663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044810186905260648101859052608401602060405180830381600087803b15801561378e57600080fd5b505af19250505080156137be575060408051601f3d908101601f191682019092526137bb91810190613ec7565b60015b613806573d8080156137ec576040519150601f19603f3d011682016040523d82523d6000602084013e6137f1565b606091505b5080516137fe5750505050565b805181602001fd5b6001600160e01b03198116636b140e9f60e11b146109285760405162461bcd60e51b815260206004820152602760248201527f496e76616c69642072657475726e2076616c75652066726f6d20506f6c696379604482015266102437b63232b960c91b60648201526084016106a6565b6040516331a9108f60e11b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b1580156138d957600080fd5b505afa1580156138ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139119190613dcc565b90506001600160a01b0381163b613926575050565b6001600160a01b03811663e8e617b7336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101859052606401602060405180830381600087803b15801561398457600080fd5b505af19250505080156139b4575060408051601f3d908101601f191682019092526139b191810190613ec7565b60015b612ab5575050565b600054610100900460ff166139e35760405162461bcd60e51b81526004016106a69061430b565b6033805460ff19169055565b6139f881613436565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b613a975760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016106a6565b600080846001600160a01b031684604051613ab29190614124565b600060405180830381855af49150503d8060008114613aed576040519150601f19603f3d011682016040523d82523d6000602084013e613af2565b606091505b509150915061216782826040518060600160405280602781526020016144a260279139613b31565b6060613b298484600085613b6a565b949350505050565b60608315613b40575081611a03565b825115613b505782518084602001fd5b8160405162461bcd60e51b81526004016106a69190614195565b606082471015613bcb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106a6565b6001600160a01b0385163b613c225760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a6565b600080866001600160a01b03168587604051613c3e9190614124565b60006040518083038185875af1925050503d8060008114613c7b576040519150601f19603f3d011682016040523d82523d6000602084013e613c80565b606091505b5091509150613c90828286613b31565b979650505050505050565b8035613ca68161443e565b919050565b803560048110613ca657600080fd5b60006101c08284031215613ccd57600080fd5b50919050565b60006101c08284031215613ce657600080fd5b613cee614365565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301358183015250610160613d6c818401613c9b565b90820152610180613d7e838201613d9a565b908201526101a0613d90838201613d9a565b9082015292915050565b803564ffffffffff81168114613ca657600080fd5b600060208284031215613dc157600080fd5b8135611a038161443e565b600060208284031215613dde57600080fd5b8151611a038161443e565b60008060408385031215613dfc57600080fd5b8235613e078161443e565b915060208381013567ffffffffffffffff80821115613e2557600080fd5b818601915086601f830112613e3957600080fd5b813581811115613e4b57613e4b614428565b613e5d601f8201601f1916850161438f565b91508082528784828501011115613e7357600080fd5b80848401858401376000848284010152508093505050509250929050565b600060208284031215613ea357600080fd5b8151611a0381614453565b600060208284031215613ec057600080fd5b5051919050565b600060208284031215613ed957600080fd5b81516001600160e01b031981168114611a0357600080fd5b60008060408385031215613f0457600080fd5b8235613f0f8161443e565b9150613f1d60208401613cab565b90509250929050565b60008060408385031215613f3957600080fd5b8235613f448161443e565b946020939093013593505050565b60006101c08284031215613f6557600080fd5b611a038383613cba565b6000806101e08385031215613f8357600080fd5b613f8d8484613cba565b91506101c0830135613f9e81614453565b809150509250929050565b6000806101e08385031215613fbd57600080fd5b613fc78484613cba565b946101c0939093013593505050565b60006101c08284031215613fe957600080fd5b611a038383613cd3565b6000806000610200848603121561400957600080fd5b6140138585613cd3565b92506101c08401356140248161443e565b91506101e08401356bffffffffffffffffffffffff8116811461404657600080fd5b809150509250925092565b60006020828403121561406357600080fd5b611a0382613d9a565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e0830152610100808201518184015250610120808201518184015250610140808201518184015250610160808201516140f5828501826001600160a01b03169052565b50506101808181015164ffffffffff81168483015250506101a08181015164ffffffffff811684830152610928565b600082516141368184602087016143e6565b9190910192915050565b6001600160a01b0384168152610200810161415e602083018561406c565b826101e0830152949350505050565b602081016004831061418f57634e487b7160e01b600052602160045260246000fd5b91905290565b60208152600082518060208401526141b48160408501602087016143e6565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252603e908201527f4f6e6c7920475541524449414e2063616e2073757370656e64202f204f6e6c7960408201527f204c4556454c312063616e2061637469766174652f6465707265636174650000606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6101c0810161216c828461406c565b6040516101c0810167ffffffffffffffff8111828210171561438957614389614428565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156143b8576143b8614428565b604052919050565b600082198211156143e157634e487b7160e01b600052601160045260246000fd5b500190565b60005b838110156144015781810151838201526020016143e9565b838111156109285750506000910152565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461074357600080fd5b801515811461074357600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212208985fee0acad61d24a80030a55277883e1e09496993b188dea7655ae09f411b264736f6c63430008060033",
1276
+ "bytecode": "0x60e06040523060601b6080523480156200001857600080fd5b506040516200516a3803806200516a8339810160408190526200003b916200005a565b6001600160601b0319606092831b811660a052911b1660c052620000b2565b600080604083850312156200006e57600080fd5b82516200007b8162000099565b60208401519092506200008e8162000099565b809150509250929050565b6001600160a01b0381168114620000af57600080fd5b50565b60805160601c60a05160601c60c05160601c614ff3620001776000396000818161069a01528181610cc40152818161166601528181611720015281816117d80152818161181701526119660152600081816105bd01528181610bce01528181610f370152818161104a01528181611117015281816111e401528181611a8e01528181611ed10152818161259e015281816127230152612dbd015260008181610aae01528181610aee01528181610d7701528181610db70152610e460152614ff36000f3fe6080604052600436106102255760003560e01c80636352211e1161012357806395d89b41116100ab578063e985e9c51161006f578063e985e9c5146106be578063f0f44260146106de578063f3fef3a3146106fe578063f67b2bad1461071e578063ffa600e31461074057600080fd5b806395d89b4114610616578063a22cb4651461062b578063b88d4fde1461064b578063c87b56dd1461066b578063e5a6b10f1461068b57600080fd5b80636f86c897116100f25780636f86c8971461056e57806370a082311461058e57806371907f17146105ae5780637a702b3c146105e15780638456cb591461060157600080fd5b80636352211e146104ee5780636769a76f1461050e5780636af6f1ef1461052e5780636b8734e71461054e57600080fd5b80633f4ba83a116101b157806352d1902d1161017557806352d1902d1461044e5780635b494dd5146104635780635c975abb146104975780635fcbf445146104af57806361d027b3146104cf57600080fd5b80633f4ba83a146103b257806342842e0e146103c757806347e7ef24146103e75780634a47a3e0146104075780634f1ef2861461043b57600080fd5b8063095ea7b3116101f8578063095ea7b3146102db57806323b872dd146102fb57806324ea54f41461031b57806333d6157a1461034b5780633659cfe61461039257600080fd5b806301ffc9a71461022a57806306fdde031461025f578063077f224a14610281578063081812fc146102a3575b600080fd5b34801561023657600080fd5b5061024a610245366004614788565b610760565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506102746107b2565b6040516102569190614b74565b34801561028d57600080fd5b506102a161029c3660046147f0565b610844565b005b3480156102af57600080fd5b506102c36102be36600461496e565b610935565b6040516001600160a01b039091168152602001610256565b3480156102e757600080fd5b506102a16102f6366004614726565b61095c565b34801561030757600080fd5b506102a16103163660046145fb565b610a72565b34801561032757600080fd5b5061033d600080516020614f9e83398151915281565b604051908152602001610256565b34801561035757600080fd5b50610385610366366004614588565b6001600160a01b0316600090815261012e602052604090205460ff1690565b6040516102569190614b61565b34801561039e57600080fd5b506102a16103ad366004614588565b610aa3565b3480156103be57600080fd5b506102a1610b83565b3480156103d357600080fd5b506102a16103e23660046145fb565b610c34565b3480156103f357600080fd5b506102a1610402366004614726565b610c4f565b34801561041357600080fd5b5061033d7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102a16104493660046146d6565b610d6c565b34801561045a57600080fd5b5061033d610e39565b34801561046f57600080fd5b5061033d7f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b3480156104a357600080fd5b5060335460ff1661024a565b3480156104bb57600080fd5b506102a16104ca3660046147c2565b610eec565b3480156104db57600080fd5b5061012d546001600160a01b03166102c3565b3480156104fa57600080fd5b506102c361050936600461496e565b611350565b34801561051a57600080fd5b5061033d6105293660046148fe565b6113b0565b34801561053a57600080fd5b506102a1610549366004614868565b6119de565b34801561055a57600080fd5b506102a16105693660046147c2565b611a62565b34801561057a57600080fd5b506102a1610589366004614588565b611ea5565b34801561059a57600080fd5b5061033d6105a9366004614588565b6124ca565b3480156105ba57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102c3565b3480156105ed57600080fd5b506102a16105fc3660046148b4565b612550565b34801561060d57600080fd5b506102a1612572565b34801561062257600080fd5b50610274612608565b34801561063757600080fd5b506102a16106463660046146a8565b612617565b34801561065757600080fd5b506102a161066636600461463c565b612622565b34801561067757600080fd5b5061027461068636600461496e565b612654565b34801561069757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102c3565b3480156106ca57600080fd5b5061024a6106d93660046145c2565b6126c8565b3480156106ea57600080fd5b506102a16106f9366004614588565b6126f7565b34801561070a57600080fd5b5061033d610719366004614726565b6127df565b34801561072a57600080fd5b5061033d600080516020614f5783398151915281565b34801561074c57600080fd5b506102a161075b366004614885565b612911565b60006001600160e01b031982166380ac58cd60e01b148061079157506001600160e01b03198216635b5e139f60e01b145b806107ac57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060fb80546107c190614e00565b80601f01602080910402602001604051908101604052809291908181526020018280546107ed90614e00565b801561083a5780601f1061080f5761010080835404028352916020019161083a565b820191906000526020600020905b81548152906001019060200180831161081d57829003601f168201915b5050505050905090565b600054610100900460ff16158080156108645750600054600160ff909116105b8061087e5750303b15801561087e575060005460ff166001145b6108a35760405162461bcd60e51b815260040161089a90614c71565b60405180910390fd5b6000805460ff1916600117905580156108c6576000805461ff0019166101001790555b6108ce612944565b6108d8848461296d565b6108e061299e565b6108e9826129cd565b801561092f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b600061094082612aab565b50600090815260ff60205260409020546001600160a01b031690565b600061096782611350565b9050806001600160a01b0316836001600160a01b031614156109d55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161089a565b336001600160a01b03821614806109f157506109f181336126c8565b610a635760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000606482015260840161089a565b610a6d8383612b0a565b505050565b610a7c3382612b78565b610a985760405162461bcd60e51b815260040161089a90614d0a565b610a6d838383612bd6565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610aec5760405162461bcd60e51b815260040161089a90614bd9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b35600080516020614f37833981519152546001600160a01b031690565b6001600160a01b031614610b5b5760405162461bcd60e51b815260040161089a90614c25565b610b6481612d72565b60408051600080825260208201909252610b8091839190612e1c565b50565b60405163c5b8f5cf60e01b8152600080516020614f9e83398151915260048201819052600080516020614f578339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015610c1057600080fd5b505afa158015610c24573d6000803e3d6000fd5b50505050610c30612f96565b5050565b610a6d83838360405180602001604052806000815250612622565b610c57612fe8565b6001610c628361302e565b6003811115610c7357610c73614e90565b14610cb75760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b604482015260640161089a565b610cec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163384846130bb565b6040516311f9fbc960e21b8152336004820152602481018290526001600160a01b038316906347e7ef2490604401602060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d919061476f565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610db55760405162461bcd60e51b815260040161089a90614bd9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610dfe600080516020614f37833981519152546001600160a01b031690565b6001600160a01b031614610e245760405162461bcd60e51b815260040161089a90614c25565b610e2d82612d72565b610c3082826001612e1c565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ed95760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161089a565b50600080516020614f3783398151915290565b60405163c5b8f5cf60e01b8152600080516020614f9e83398151915260048201819052600080516020614f578339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015610f7957600080fd5b505afa158015610f8d573d6000803e3d6000fd5b5050506001600160a01b038516600090815261012e602052604081209150815460ff166003811115610fc157610fc1614e90565b14156110055760405162461bcd60e51b815260206004820152601360248201527210dbdb5c1bdb995b9d081b9bdd08199bdd5b99606a1b604482015260640161089a565b600184600381111561101957611019614e90565b1480156110cc5750604051632474521560e21b8152600080516020614f5783398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561109457600080fd5b505afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc9190614752565b80611199575060038460038111156110e6576110e6614e90565b1480156111995750604051632474521560e21b8152600080516020614f9e83398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561116157600080fd5b505afa158015611175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111999190614752565b80611266575060028460038111156111b3576111b3614e90565b1480156112665750604051632474521560e21b8152600080516020614f5783398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561122e57600080fd5b505afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112669190614752565b6112d85760405162461bcd60e51b815260206004820152603e60248201527f4f6e6c7920475541524449414e2063616e2073757370656e64202f204f6e6c7960448201527f204c4556454c312063616e2061637469766174652f6465707265636174650000606482015260840161089a565b80548490829060ff191660018360038111156112f6576112f6614e90565b021790555080546040516001600160a01b038716917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef9161134191610100900460ff16908890614b3b565b60405180910390a25050505050565b600081815260fd60205260408120546001600160a01b0316806107ac5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089a565b60006113ba612fe8565b6101608501516001600160a01b03811633146114245760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b606482015260840161089a565b600161142f82613115565b600381111561144057611440614e90565b146114975760405162461bcd60e51b815260206004820152602160248201527f524d206d6f64756c65206e6f7420666f756e64206f72206e6f742061637469766044820152606560f81b606482015260840161089a565b6114c26bffffffffffffffffffffffff84166bffffffffffffffffffffffff19606084901b16614d91565b86526114cd86613198565b61012f600088600001518152602001908152602001600020819055506000816001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561152457600080fd5b505afa158015611538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155c91906145a5565b90506001611569826131c8565b600381111561157a5761157a614e90565b146115d75760405162461bcd60e51b815260206004820152602760248201527f5072656d69756d734163636f756e74206e6f7420666f756e64206f72206e6f746044820152662061637469766560c81b606482015260840161089a565b60405163e3638ea360e01b81526001600160a01b0382169063e3638ea390611603908a90600401614d58565b600060405180830381600087803b15801561161d57600080fd5b505af1158015611631573d6000803e3d6000fd5b5050505061165385886000015160405180602001604052806000815250613256565b60c0870151611690906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690889084906130bb565b610140870151156117485761174886826001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116d857600080fd5b505afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171091906145a5565b6101408a01516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906130bb565b610120870151156118005761180086826001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179057600080fd5b505afa1580156117a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c891906145a5565b6101208a01516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906130bb565b61012d5460e0880151611845916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116928a9291909116906130bb565b60008761010001511180156118dc5750816001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b15801561188e57600080fd5b505afa1580156118a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c691906145a5565b6001600160a01b0316866001600160a01b031614155b1561198e5761198e86836001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b15801561191e57600080fd5b505afa158015611932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195691906145a5565b6101008a01516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906130bb565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b886040516119c79190614d58565b60405180910390a25050845190505b949350505050565b6119e6612fe8565b426119f96101c083016101a08401614987565b64ffffffffff161115611a475760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b604482015260640161089a565b610b80611a59368390038301836148e1565b60006001613289565b6040516312d9a6ad60e01b8152600080516020614f5783398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611ad857600080fd5b505afa158015611aec573d6000803e3d6000fd5b5050506001600160a01b038416600090815261012e602052604081209150815460ff166003811115611b2057611b20614e90565b14611b6d5760405162461bcd60e51b815260206004820152601d60248201527f436f6d706f6e656e7420616c726561647920696e2074686520706f6f6c000000604482015260640161089a565b306001600160a01b0316846001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb057600080fd5b505afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be891906145a5565b6001600160a01b031614611c485760405162461bcd60e51b815260206004820152602160248201527f436f6d706f6e656e74206e6f74206c696e6b656420746f207468697320706f6f6044820152601b60fa1b606482015260840161089a565b8054600160ff198216811783558491839161ffff1990911617610100836003811115611c7657611c76614e90565b02179055506003836003811115611c8f57611c8f614e90565b1415611e5b5760008490506000816001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b158015611cd557600080fd5b505afa158015611ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0d91906145a5565b90506001600160a01b03811615611d7a576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c90602401600060405180830381600087803b158015611d6157600080fd5b505af1158015611d75573d6000803e3d6000fd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611db357600080fd5b505afa158015611dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611deb91906145a5565b90506001600160a01b03811615611e58576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c90602401600060405180830381600087803b158015611e3f57600080fd5b505af1158015611e53573d6000803e3d6000fd5b505050505b50505b836001600160a01b03167ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef846001604051611e97929190614b3b565b60405180910390a250505050565b6040516312d9a6ad60e01b8152600080516020614f5783398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611f1b57600080fd5b505afa158015611f2f573d6000803e3d6000fd5b505050506001600160a01b038216600090815261012e602052604090206002815460ff166003811115611f6457611f64614e90565b14611fb15760405162461bcd60e51b815260206004820152601860248201527f436f6d706f6e656e74206e6f7420646570726563617465640000000000000000604482015260640161089a565b60018154610100900460ff166003811115611fce57611fce614e90565b14156120a657826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561200d57600080fd5b505afa158015612021573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612045919061476f565b156120a15760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b606482015260840161089a565b612456565b60028154610100900460ff1660038111156120c3576120c3614e90565b141561219a57826001600160a01b0316637ff8bf256040518163ffffffff1660e01b815260040160206040518083038186803b15801561210257600080fd5b505afa158015612116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213a919061476f565b156120a15760405162461bcd60e51b815260206004820152602a60248201527f43616e27742072656d6f76652061206d6f64756c6520776974682061637469766044820152696520706f6c696369657360b01b606482015260840161089a565b60038154610100900460ff1660038111156121b7576121b7614e90565b1415612456576000839050806001600160a01b03166326ccbd226040518163ffffffff1660e01b815260040160206040518083038186803b1580156121fb57600080fd5b505afa15801561220f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612233919061476f565b156122955760405162461bcd60e51b815260206004820152602c60248201527f43616e27742072656d6f76652061205072656d69756d734163636f756e74207760448201526b697468207072656d69756d7360a01b606482015260840161089a565b6000816001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d057600080fd5b505afa1580156122e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230891906145a5565b90506001600160a01b03811615612375576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc5590602401600060405180830381600087803b15801561235c57600080fd5b505af1158015612370573d6000803e3d6000fd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123ae57600080fd5b505afa1580156123c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e691906145a5565b90506001600160a01b03811615612453576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc5590602401600060405180830381600087803b15801561243a57600080fd5b505af115801561244e573d6000803e3d6000fd5b505050505b50505b80546040516001600160a01b038516917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef9161249d91610100900460ff1690600090614b3b565b60405180910390a250506001600160a01b0316600090815261012e60205260409020805461ffff19169055565b60006001600160a01b0382166125345760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161089a565b506001600160a01b0316600090815260fe602052604090205490565b612558612fe8565b610c3061256a368490038401846148e1565b826000613289565b6040516312d9a6ad60e01b8152600080516020614f9e83398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b1580156125e857600080fd5b505afa1580156125fc573d6000803e3d6000fd5b50505050610b8061374f565b606060fc80546107c190614e00565b610c3033838361378c565b61262c3383612b78565b6126485760405162461bcd60e51b815260040161089a90614d0a565b61092f8484848461385c565b606061265f82612aab565b600061267660408051602081019091526000815290565b9050600081511161269657604051806020016040528060008152506126c1565b806126a08461388f565b6040516020016126b1929190614aa2565b6040516020818303038152906040525b9392505050565b6001600160a01b0391821660009081526101006020908152604080832093909416825291909152205460ff1690565b6040516312d9a6ad60e01b8152600080516020614f5783398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561276d57600080fd5b505afa158015612781573d6000803e3d6000fd5b505061012d80546001600160a01b0386166001600160a01b03199091168117909155604051908152600192507fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f915060200160405180910390a25050565b60006127e9612fe8565b60006127f48461302e565b9050600181600381111561280a5761280a614e90565b14806128275750600281600381111561282557612825614e90565b145b6128855760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b606482015260840161089a565b60405163f3fef3a360e01b8152336004820181905260248201859052906001600160a01b0386169063f3fef3a390604401602060405180830381600087803b1580156128d057600080fd5b505af11580156128e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612908919061476f565b95945050505050565b612919612fe8565b610c3061292b368490038401846148e1565b8261293757600061293d565b83602001355b6000613289565b600054610100900460ff1661296b5760405162461bcd60e51b815260040161089a90614cbf565b565b600054610100900460ff166129945760405162461bcd60e51b815260040161089a90614cbf565b610c30828261398d565b600054610100900460ff166129c55760405162461bcd60e51b815260040161089a90614cbf565b61296b6139db565b600054610100900460ff16158080156129ed5750600054600160ff909116105b80612a075750303b158015612a07575060005460ff166001145b612a235760405162461bcd60e51b815260040161089a90614c71565b6000805460ff191660011790558015612a46576000805461ff0019166101001790555b61012d80546001600160a01b0319166001600160a01b0384161790558015610c30576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600081815260fd60205260409020546001600160a01b0316610b805760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089a565b600081815260ff6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612b3f82611350565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612b8483611350565b9050806001600160a01b0316846001600160a01b03161480612bab5750612bab81856126c8565b806119d65750836001600160a01b0316612bc484610935565b6001600160a01b031614949350505050565b826001600160a01b0316612be982611350565b6001600160a01b031614612c4d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161089a565b6001600160a01b038216612caf5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161089a565b612cba600082612b0a565b6001600160a01b038316600090815260fe60205260408120805460019290612ce3908490614dbd565b90915550506001600160a01b038216600090815260fe60205260408120805460019290612d11908490614d91565b9091555050600081815260fd602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60405163c5b8f5cf60e01b8152600080516020614f9e83398151915260048201819052600080516020614f578339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015612dff57600080fd5b505afa158015612e13573d6000803e3d6000fd5b50505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612e4f57610a6d83613a0e565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e8857600080fd5b505afa925050508015612eb8575060408051601f3d908101601f19168201909252612eb59181019061476f565b60015b612f1b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161089a565b600080516020614f378339815191528114612f8a5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161089a565b50610a6d838383613aaa565b612f9e613acf565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60335460ff161561296b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161089a565b6001600160a01b038116600090815261012e6020526040812060018154610100900460ff16600381111561306457613064614e90565b146130b15760405162461bcd60e51b815260206004820152601a60248201527f436f6d706f6e656e74206973206e6f7420616e2065546f6b656e000000000000604482015260640161089a565b5460ff1692915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261092f908590613b18565b6001600160a01b038116600090815261012e6020526040812060028154610100900460ff16600381111561314b5761314b614e90565b146130b15760405162461bcd60e51b815260206004820152601d60248201527f436f6d706f6e656e74206973206e6f742061205269736b4d6f64756c65000000604482015260640161089a565b6000816040516020016131ab9190614d58565b604051602081830303815290604052805190602001209050919050565b6001600160a01b038116600090815261012e6020526040812060038154610100900460ff1660038111156131fe576131fe614e90565b146130b15760405162461bcd60e51b815260206004820152602260248201527f436f6d706f6e656e74206973206e6f742061205072656d69756d734163636f756044820152611b9d60f21b606482015260840161089a565b6132608383613bea565b61326d6000848484613d2c565b610a6d5760405162461bcd60e51b815260040161089a90614b87565b61329283613e36565b61016083015181806132ac57506001600160a01b03811633145b6132f85760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c6963696573604482015260640161089a565b821580613310575042846101a0015164ffffffffff16115b61335c5760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c6963790000000000000000604482015260640161089a565b600061336782613115565b9050600181600381111561337d5761337d614e90565b148061339a5750600281600381111561339857613398614e90565b145b61340c5760405162461bcd60e51b815260206004820152603a60248201527f4d6f64756c65206d75737420626520616374697665206f72206465707265636160448201527f74656420746f2070726f63657373207265736f6c7574696f6e73000000000000606482015260840161089a565b84602001518411156134595760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b604482015260640161089a565b600080851190506000836001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561349b57600080fd5b505afa1580156134af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d391906145a5565b90506134de816131c8565b925060018360038111156134f4576134f4614e90565b14806135115750600283600381111561350f5761350f614e90565b145b61358f5760405162461bcd60e51b815260206004820152604360248201527f5072656d69756d734163636f756e74206d75737420626520616374697665206f60448201527f72206465707265636174656420746f2070726f63657373207265736f6c7574696064820152626f6e7360e81b608482015260a40161089a565b811561360f5760006135a48860000151611350565b604051639d8c5ee760e01b81529091506001600160a01b03831690639d8c5ee7906135d79084908c908c90600401614b0e565b600060405180830381600087803b1580156135f157600080fd5b505af1158015613605573d6000803e3d6000fd5b505050505061366e565b60405163c7a9c70d60e01b81526001600160a01b0382169063c7a9c70d9061363b908a90600401614d58565b600060405180830381600087803b15801561365557600080fd5b505af1158015613669573d6000803e3d6000fd5b505050505b6020870151604051636a448ef160e01b815260048101919091526001600160a01b03851690636a448ef190602401600060405180830381600087803b1580156136b657600080fd5b505af11580156136ca573d6000803e3d6000fd5b5050505086600001518761016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e8860405161371391815260200190565b60405180910390a38651600090815261012f6020526040812055851561374457865161373f9087613e9d565b612e13565b8651612e1390614003565b613757612fe8565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612fcb3390565b816001600160a01b0316836001600160a01b031614156137ee5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161089a565b6001600160a01b0383811660008181526101006020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613867848484612bd6565b61387384848484613d2c565b61092f5760405162461bcd60e51b815260040161089a90614b87565b6060816138b35750506040805180820190915260018152600360fc1b602082015290565b8160005b81156138dd57806138c781614e35565b91506138d69050600a83614da9565b91506138b7565b60008167ffffffffffffffff8111156138f8576138f8614ebc565b6040519080825280601f01601f191660200182016040528015613922576020820181803683370190505b5090505b84156119d657613937600183614dbd565b9150613944600a86614e50565b61394f906030614d91565b60f81b81838151811061396457613964614ea6565b60200101906001600160f81b031916908160001a905350613986600a86614da9565b9450613926565b600054610100900460ff166139b45760405162461bcd60e51b815260040161089a90614cbf565b81516139c79060fb90602085019061435d565b508051610a6d9060fc90602084019061435d565b600054610100900460ff16613a025760405162461bcd60e51b815260040161089a90614cbf565b6033805460ff19169055565b6001600160a01b0381163b613a7b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161089a565b600080516020614f3783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613ab3836140b9565b600082511180613ac05750805b15610a6d5761092f83836140f9565b60335460ff1661296b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161089a565b6000613b6d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166141e49092919063ffffffff16565b805190915015610a6d5780806020019051810190613b8b9190614752565b610a6d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161089a565b6001600160a01b038216613c405760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161089a565b600081815260fd60205260409020546001600160a01b031615613ca55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161089a565b6001600160a01b038216600090815260fe60205260408120805460019290613cce908490614d91565b9091555050600081815260fd602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15613e2e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613d70903390899088908890600401614ad1565b602060405180830381600087803b158015613d8a57600080fd5b505af1925050508015613dba575060408051601f3d908101601f19168201909252613db7918101906147a5565b60015b613e14573d808015613de8576040519150601f19603f3d011682016040523d82523d6000602084013e613ded565b606091505b508051613e0c5760405162461bcd60e51b815260040161089a90614b87565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119d6565b5060016119d6565b805115801590613e5e57508051600090815261012f6020526040902054613e5c82613198565b145b610b805760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b604482015260640161089a565b6000613ea883611350565b90506001600160a01b0381163b613ebe57505050565b6001600160a01b03811663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044810186905260648101859052608401602060405180830381600087803b158015613f2357600080fd5b505af1925050508015613f53575060408051601f3d908101601f19168201909252613f50918101906147a5565b60015b613f93573d808015613f81576040519150601f19603f3d011682016040523d82523d6000602084013e613f86565b606091505b508051613e0c5750505050565b6001600160e01b03198116636b140e9f60e11b1461092f5760405162461bcd60e51b815260206004820152602760248201527f496e76616c69642072657475726e2076616c75652066726f6d20506f6c696379604482015266102437b63232b960c91b606482015260840161089a565b600061400e82611350565b90506001600160a01b0381163b614023575050565b6001600160a01b03811663e8e617b7336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101859052606401602060405180830381600087803b15801561408157600080fd5b505af19250505080156140b1575060408051601f3d908101601f191682019092526140ae918101906147a5565b60015b610a6d575050565b6140c281613a0e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6141615760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161089a565b600080846001600160a01b03168460405161417c9190614a86565b600060405180830381855af49150503d80600081146141b7576040519150601f19603f3d011682016040523d82523d6000602084013e6141bc565b606091505b50915091506129088282604051806060016040528060278152602001614f77602791396141f3565b60606119d6848460008561422c565b606083156142025750816126c1565b8251156142125782518084602001fd5b8160405162461bcd60e51b815260040161089a9190614b74565b60608247101561428d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161089a565b6001600160a01b0385163b6142e45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161089a565b600080866001600160a01b031685876040516143009190614a86565b60006040518083038185875af1925050503d806000811461433d576040519150601f19603f3d011682016040523d82523d6000602084013e614342565b606091505b50915091506143528282866141f3565b979650505050505050565b82805461436990614e00565b90600052602060002090601f01602090048101928261438b57600085556143d1565b82601f106143a457805160ff19168380011785556143d1565b828001600101855582156143d1579182015b828111156143d15782518255916020019190600101906143b6565b506143dd9291506143e1565b5090565b5b808211156143dd57600081556001016143e2565b600082601f83011261440757600080fd5b813567ffffffffffffffff8082111561442257614422614ebc565b604051601f8301601f19908116603f0116810190828211818310171561444a5761444a614ebc565b8160405283815286602085880101111561446357600080fd5b836020870160208301376000602085830101528094505050505092915050565b803561448e81614ef0565b919050565b60006101c082840312156144a657600080fd5b50919050565b60006101c082840312156144bf57600080fd5b6144c7614d67565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301358183015250610160614545818401614483565b90820152610180614557838201614573565b908201526101a0614569838201614573565b9082015292915050565b803564ffffffffff8116811461448e57600080fd5b60006020828403121561459a57600080fd5b81356126c181614ef0565b6000602082840312156145b757600080fd5b81516126c181614ef0565b600080604083850312156145d557600080fd5b82356145e081614ef0565b915060208301356145f081614ef0565b809150509250929050565b60008060006060848603121561461057600080fd5b833561461b81614ef0565b9250602084013561462b81614ef0565b929592945050506040919091013590565b6000806000806080858703121561465257600080fd5b843561465d81614ef0565b9350602085013561466d81614ef0565b925060408501359150606085013567ffffffffffffffff81111561469057600080fd5b61469c878288016143f6565b91505092959194509250565b600080604083850312156146bb57600080fd5b82356146c681614ef0565b915060208301356145f081614f05565b600080604083850312156146e957600080fd5b82356146f481614ef0565b9150602083013567ffffffffffffffff81111561471057600080fd5b61471c858286016143f6565b9150509250929050565b6000806040838503121561473957600080fd5b823561474481614ef0565b946020939093013593505050565b60006020828403121561476457600080fd5b81516126c181614f05565b60006020828403121561478157600080fd5b5051919050565b60006020828403121561479a57600080fd5b81356126c181614f13565b6000602082840312156147b757600080fd5b81516126c181614f13565b600080604083850312156147d557600080fd5b82356147e081614ef0565b915060208301356145f081614f29565b60008060006060848603121561480557600080fd5b833567ffffffffffffffff8082111561481d57600080fd5b614829878388016143f6565b9450602086013591508082111561483f57600080fd5b5061484c868287016143f6565b925050604084013561485d81614ef0565b809150509250925092565b60006101c0828403121561487b57600080fd5b6126c18383614493565b6000806101e0838503121561489957600080fd5b6148a38484614493565b91506101c08301356145f081614f05565b6000806101e083850312156148c857600080fd5b6148d28484614493565b946101c0939093013593505050565b60006101c082840312156148f457600080fd5b6126c183836144ac565b600080600080610220858703121561491557600080fd5b61491f86866144ac565b93506101c085013561493081614ef0565b92506101e085013561494181614ef0565b91506102008501356bffffffffffffffffffffffff8116811461496357600080fd5b939692955090935050565b60006020828403121561498057600080fd5b5035919050565b60006020828403121561499957600080fd5b6126c182614573565b600081518084526149ba816020860160208601614dd4565b601f01601f19169290920160200192915050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080820151818401525061012080820151818401525061014080820151818401525061016080820151614a57828501826001600160a01b03169052565b50506101808181015164ffffffffff81168483015250506101a08181015164ffffffffff81168483015261092f565b60008251614a98818460208701614dd4565b9190910192915050565b60008351614ab4818460208801614dd4565b835190830190614ac8818360208801614dd4565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614b04908301846149a2565b9695505050505050565b6001600160a01b03841681526102008101614b2c60208301856149ce565b826101e0830152949350505050565b60408101614b4884614ed2565b838252614b5483614ed2565b8260208301529392505050565b60208101614b6e83614ed2565b91905290565b6020815260006126c160208301846149a2565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6101c081016107ac82846149ce565b6040516101c0810167ffffffffffffffff81118282101715614d8b57614d8b614ebc565b60405290565b60008219821115614da457614da4614e64565b500190565b600082614db857614db8614e7a565b500490565b600082821015614dcf57614dcf614e64565b500390565b60005b83811015614def578181015183820152602001614dd7565b8381111561092f5750506000910152565b600181811c90821680614e1457607f821691505b602082108114156144a657634e487b7160e01b600052602260045260246000fd5b6000600019821415614e4957614e49614e64565b5060010190565b600082614e5f57614e5f614e7a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60048110610b8057634e487b7160e01b600052602160045260246000fd5b6001600160a01b0381168114610b8057600080fd5b8015158114610b8057600080fd5b6001600160e01b031981168114610b8057600080fd5b60048110610b8057600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212205195bff25ebb784ae2307b15af46c9e43a9f109a38be7f9a583c7e8b2f97cfb364736f6c63430008060033",
1277
+ "deployedBytecode": "0x6080604052600436106102255760003560e01c80636352211e1161012357806395d89b41116100ab578063e985e9c51161006f578063e985e9c5146106be578063f0f44260146106de578063f3fef3a3146106fe578063f67b2bad1461071e578063ffa600e31461074057600080fd5b806395d89b4114610616578063a22cb4651461062b578063b88d4fde1461064b578063c87b56dd1461066b578063e5a6b10f1461068b57600080fd5b80636f86c897116100f25780636f86c8971461056e57806370a082311461058e57806371907f17146105ae5780637a702b3c146105e15780638456cb591461060157600080fd5b80636352211e146104ee5780636769a76f1461050e5780636af6f1ef1461052e5780636b8734e71461054e57600080fd5b80633f4ba83a116101b157806352d1902d1161017557806352d1902d1461044e5780635b494dd5146104635780635c975abb146104975780635fcbf445146104af57806361d027b3146104cf57600080fd5b80633f4ba83a146103b257806342842e0e146103c757806347e7ef24146103e75780634a47a3e0146104075780634f1ef2861461043b57600080fd5b8063095ea7b3116101f8578063095ea7b3146102db57806323b872dd146102fb57806324ea54f41461031b57806333d6157a1461034b5780633659cfe61461039257600080fd5b806301ffc9a71461022a57806306fdde031461025f578063077f224a14610281578063081812fc146102a3575b600080fd5b34801561023657600080fd5b5061024a610245366004614788565b610760565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506102746107b2565b6040516102569190614b74565b34801561028d57600080fd5b506102a161029c3660046147f0565b610844565b005b3480156102af57600080fd5b506102c36102be36600461496e565b610935565b6040516001600160a01b039091168152602001610256565b3480156102e757600080fd5b506102a16102f6366004614726565b61095c565b34801561030757600080fd5b506102a16103163660046145fb565b610a72565b34801561032757600080fd5b5061033d600080516020614f9e83398151915281565b604051908152602001610256565b34801561035757600080fd5b50610385610366366004614588565b6001600160a01b0316600090815261012e602052604090205460ff1690565b6040516102569190614b61565b34801561039e57600080fd5b506102a16103ad366004614588565b610aa3565b3480156103be57600080fd5b506102a1610b83565b3480156103d357600080fd5b506102a16103e23660046145fb565b610c34565b3480156103f357600080fd5b506102a1610402366004614726565b610c4f565b34801561041357600080fd5b5061033d7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102a16104493660046146d6565b610d6c565b34801561045a57600080fd5b5061033d610e39565b34801561046f57600080fd5b5061033d7f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b3480156104a357600080fd5b5060335460ff1661024a565b3480156104bb57600080fd5b506102a16104ca3660046147c2565b610eec565b3480156104db57600080fd5b5061012d546001600160a01b03166102c3565b3480156104fa57600080fd5b506102c361050936600461496e565b611350565b34801561051a57600080fd5b5061033d6105293660046148fe565b6113b0565b34801561053a57600080fd5b506102a1610549366004614868565b6119de565b34801561055a57600080fd5b506102a16105693660046147c2565b611a62565b34801561057a57600080fd5b506102a1610589366004614588565b611ea5565b34801561059a57600080fd5b5061033d6105a9366004614588565b6124ca565b3480156105ba57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102c3565b3480156105ed57600080fd5b506102a16105fc3660046148b4565b612550565b34801561060d57600080fd5b506102a1612572565b34801561062257600080fd5b50610274612608565b34801561063757600080fd5b506102a16106463660046146a8565b612617565b34801561065757600080fd5b506102a161066636600461463c565b612622565b34801561067757600080fd5b5061027461068636600461496e565b612654565b34801561069757600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102c3565b3480156106ca57600080fd5b5061024a6106d93660046145c2565b6126c8565b3480156106ea57600080fd5b506102a16106f9366004614588565b6126f7565b34801561070a57600080fd5b5061033d610719366004614726565b6127df565b34801561072a57600080fd5b5061033d600080516020614f5783398151915281565b34801561074c57600080fd5b506102a161075b366004614885565b612911565b60006001600160e01b031982166380ac58cd60e01b148061079157506001600160e01b03198216635b5e139f60e01b145b806107ac57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060fb80546107c190614e00565b80601f01602080910402602001604051908101604052809291908181526020018280546107ed90614e00565b801561083a5780601f1061080f5761010080835404028352916020019161083a565b820191906000526020600020905b81548152906001019060200180831161081d57829003601f168201915b5050505050905090565b600054610100900460ff16158080156108645750600054600160ff909116105b8061087e5750303b15801561087e575060005460ff166001145b6108a35760405162461bcd60e51b815260040161089a90614c71565b60405180910390fd5b6000805460ff1916600117905580156108c6576000805461ff0019166101001790555b6108ce612944565b6108d8848461296d565b6108e061299e565b6108e9826129cd565b801561092f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b600061094082612aab565b50600090815260ff60205260409020546001600160a01b031690565b600061096782611350565b9050806001600160a01b0316836001600160a01b031614156109d55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161089a565b336001600160a01b03821614806109f157506109f181336126c8565b610a635760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000606482015260840161089a565b610a6d8383612b0a565b505050565b610a7c3382612b78565b610a985760405162461bcd60e51b815260040161089a90614d0a565b610a6d838383612bd6565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610aec5760405162461bcd60e51b815260040161089a90614bd9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b35600080516020614f37833981519152546001600160a01b031690565b6001600160a01b031614610b5b5760405162461bcd60e51b815260040161089a90614c25565b610b6481612d72565b60408051600080825260208201909252610b8091839190612e1c565b50565b60405163c5b8f5cf60e01b8152600080516020614f9e83398151915260048201819052600080516020614f578339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015610c1057600080fd5b505afa158015610c24573d6000803e3d6000fd5b50505050610c30612f96565b5050565b610a6d83838360405180602001604052806000815250612622565b610c57612fe8565b6001610c628361302e565b6003811115610c7357610c73614e90565b14610cb75760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b604482015260640161089a565b610cec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163384846130bb565b6040516311f9fbc960e21b8152336004820152602481018290526001600160a01b038316906347e7ef2490604401602060405180830381600087803b158015610d3457600080fd5b505af1158015610d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d919061476f565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610db55760405162461bcd60e51b815260040161089a90614bd9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610dfe600080516020614f37833981519152546001600160a01b031690565b6001600160a01b031614610e245760405162461bcd60e51b815260040161089a90614c25565b610e2d82612d72565b610c3082826001612e1c565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ed95760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161089a565b50600080516020614f3783398151915290565b60405163c5b8f5cf60e01b8152600080516020614f9e83398151915260048201819052600080516020614f578339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015610f7957600080fd5b505afa158015610f8d573d6000803e3d6000fd5b5050506001600160a01b038516600090815261012e602052604081209150815460ff166003811115610fc157610fc1614e90565b14156110055760405162461bcd60e51b815260206004820152601360248201527210dbdb5c1bdb995b9d081b9bdd08199bdd5b99606a1b604482015260640161089a565b600184600381111561101957611019614e90565b1480156110cc5750604051632474521560e21b8152600080516020614f5783398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561109457600080fd5b505afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc9190614752565b80611199575060038460038111156110e6576110e6614e90565b1480156111995750604051632474521560e21b8152600080516020614f9e83398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561116157600080fd5b505afa158015611175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111999190614752565b80611266575060028460038111156111b3576111b3614e90565b1480156112665750604051632474521560e21b8152600080516020614f5783398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561122e57600080fd5b505afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112669190614752565b6112d85760405162461bcd60e51b815260206004820152603e60248201527f4f6e6c7920475541524449414e2063616e2073757370656e64202f204f6e6c7960448201527f204c4556454c312063616e2061637469766174652f6465707265636174650000606482015260840161089a565b80548490829060ff191660018360038111156112f6576112f6614e90565b021790555080546040516001600160a01b038716917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef9161134191610100900460ff16908890614b3b565b60405180910390a25050505050565b600081815260fd60205260408120546001600160a01b0316806107ac5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089a565b60006113ba612fe8565b6101608501516001600160a01b03811633146114245760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b606482015260840161089a565b600161142f82613115565b600381111561144057611440614e90565b146114975760405162461bcd60e51b815260206004820152602160248201527f524d206d6f64756c65206e6f7420666f756e64206f72206e6f742061637469766044820152606560f81b606482015260840161089a565b6114c26bffffffffffffffffffffffff84166bffffffffffffffffffffffff19606084901b16614d91565b86526114cd86613198565b61012f600088600001518152602001908152602001600020819055506000816001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561152457600080fd5b505afa158015611538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155c91906145a5565b90506001611569826131c8565b600381111561157a5761157a614e90565b146115d75760405162461bcd60e51b815260206004820152602760248201527f5072656d69756d734163636f756e74206e6f7420666f756e64206f72206e6f746044820152662061637469766560c81b606482015260840161089a565b60405163e3638ea360e01b81526001600160a01b0382169063e3638ea390611603908a90600401614d58565b600060405180830381600087803b15801561161d57600080fd5b505af1158015611631573d6000803e3d6000fd5b5050505061165385886000015160405180602001604052806000815250613256565b60c0870151611690906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690889084906130bb565b610140870151156117485761174886826001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116d857600080fd5b505afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171091906145a5565b6101408a01516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906130bb565b610120870151156118005761180086826001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179057600080fd5b505afa1580156117a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c891906145a5565b6101208a01516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906130bb565b61012d5460e0880151611845916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116928a9291909116906130bb565b60008761010001511180156118dc5750816001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b15801561188e57600080fd5b505afa1580156118a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c691906145a5565b6001600160a01b0316866001600160a01b031614155b1561198e5761198e86836001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b15801561191e57600080fd5b505afa158015611932573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195691906145a5565b6101008a01516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906130bb565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b886040516119c79190614d58565b60405180910390a25050845190505b949350505050565b6119e6612fe8565b426119f96101c083016101a08401614987565b64ffffffffff161115611a475760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b604482015260640161089a565b610b80611a59368390038301836148e1565b60006001613289565b6040516312d9a6ad60e01b8152600080516020614f5783398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611ad857600080fd5b505afa158015611aec573d6000803e3d6000fd5b5050506001600160a01b038416600090815261012e602052604081209150815460ff166003811115611b2057611b20614e90565b14611b6d5760405162461bcd60e51b815260206004820152601d60248201527f436f6d706f6e656e7420616c726561647920696e2074686520706f6f6c000000604482015260640161089a565b306001600160a01b0316846001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb057600080fd5b505afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be891906145a5565b6001600160a01b031614611c485760405162461bcd60e51b815260206004820152602160248201527f436f6d706f6e656e74206e6f74206c696e6b656420746f207468697320706f6f6044820152601b60fa1b606482015260840161089a565b8054600160ff198216811783558491839161ffff1990911617610100836003811115611c7657611c76614e90565b02179055506003836003811115611c8f57611c8f614e90565b1415611e5b5760008490506000816001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b158015611cd557600080fd5b505afa158015611ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0d91906145a5565b90506001600160a01b03811615611d7a576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c90602401600060405180830381600087803b158015611d6157600080fd5b505af1158015611d75573d6000803e3d6000fd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611db357600080fd5b505afa158015611dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611deb91906145a5565b90506001600160a01b03811615611e58576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c90602401600060405180830381600087803b158015611e3f57600080fd5b505af1158015611e53573d6000803e3d6000fd5b505050505b50505b836001600160a01b03167ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef846001604051611e97929190614b3b565b60405180910390a250505050565b6040516312d9a6ad60e01b8152600080516020614f5783398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611f1b57600080fd5b505afa158015611f2f573d6000803e3d6000fd5b505050506001600160a01b038216600090815261012e602052604090206002815460ff166003811115611f6457611f64614e90565b14611fb15760405162461bcd60e51b815260206004820152601860248201527f436f6d706f6e656e74206e6f7420646570726563617465640000000000000000604482015260640161089a565b60018154610100900460ff166003811115611fce57611fce614e90565b14156120a657826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561200d57600080fd5b505afa158015612021573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612045919061476f565b156120a15760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b606482015260840161089a565b612456565b60028154610100900460ff1660038111156120c3576120c3614e90565b141561219a57826001600160a01b0316637ff8bf256040518163ffffffff1660e01b815260040160206040518083038186803b15801561210257600080fd5b505afa158015612116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213a919061476f565b156120a15760405162461bcd60e51b815260206004820152602a60248201527f43616e27742072656d6f76652061206d6f64756c6520776974682061637469766044820152696520706f6c696369657360b01b606482015260840161089a565b60038154610100900460ff1660038111156121b7576121b7614e90565b1415612456576000839050806001600160a01b03166326ccbd226040518163ffffffff1660e01b815260040160206040518083038186803b1580156121fb57600080fd5b505afa15801561220f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612233919061476f565b156122955760405162461bcd60e51b815260206004820152602c60248201527f43616e27742072656d6f76652061205072656d69756d734163636f756e74207760448201526b697468207072656d69756d7360a01b606482015260840161089a565b6000816001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d057600080fd5b505afa1580156122e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230891906145a5565b90506001600160a01b03811615612375576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc5590602401600060405180830381600087803b15801561235c57600080fd5b505af1158015612370573d6000803e3d6000fd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123ae57600080fd5b505afa1580156123c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e691906145a5565b90506001600160a01b03811615612453576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc5590602401600060405180830381600087803b15801561243a57600080fd5b505af115801561244e573d6000803e3d6000fd5b505050505b50505b80546040516001600160a01b038516917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef9161249d91610100900460ff1690600090614b3b565b60405180910390a250506001600160a01b0316600090815261012e60205260409020805461ffff19169055565b60006001600160a01b0382166125345760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161089a565b506001600160a01b0316600090815260fe602052604090205490565b612558612fe8565b610c3061256a368490038401846148e1565b826000613289565b6040516312d9a6ad60e01b8152600080516020614f9e83398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b1580156125e857600080fd5b505afa1580156125fc573d6000803e3d6000fd5b50505050610b8061374f565b606060fc80546107c190614e00565b610c3033838361378c565b61262c3383612b78565b6126485760405162461bcd60e51b815260040161089a90614d0a565b61092f8484848461385c565b606061265f82612aab565b600061267660408051602081019091526000815290565b9050600081511161269657604051806020016040528060008152506126c1565b806126a08461388f565b6040516020016126b1929190614aa2565b6040516020818303038152906040525b9392505050565b6001600160a01b0391821660009081526101006020908152604080832093909416825291909152205460ff1690565b6040516312d9a6ad60e01b8152600080516020614f5783398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561276d57600080fd5b505afa158015612781573d6000803e3d6000fd5b505061012d80546001600160a01b0386166001600160a01b03199091168117909155604051908152600192507fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f915060200160405180910390a25050565b60006127e9612fe8565b60006127f48461302e565b9050600181600381111561280a5761280a614e90565b14806128275750600281600381111561282557612825614e90565b145b6128855760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b606482015260840161089a565b60405163f3fef3a360e01b8152336004820181905260248201859052906001600160a01b0386169063f3fef3a390604401602060405180830381600087803b1580156128d057600080fd5b505af11580156128e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612908919061476f565b95945050505050565b612919612fe8565b610c3061292b368490038401846148e1565b8261293757600061293d565b83602001355b6000613289565b600054610100900460ff1661296b5760405162461bcd60e51b815260040161089a90614cbf565b565b600054610100900460ff166129945760405162461bcd60e51b815260040161089a90614cbf565b610c30828261398d565b600054610100900460ff166129c55760405162461bcd60e51b815260040161089a90614cbf565b61296b6139db565b600054610100900460ff16158080156129ed5750600054600160ff909116105b80612a075750303b158015612a07575060005460ff166001145b612a235760405162461bcd60e51b815260040161089a90614c71565b6000805460ff191660011790558015612a46576000805461ff0019166101001790555b61012d80546001600160a01b0319166001600160a01b0384161790558015610c30576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600081815260fd60205260409020546001600160a01b0316610b805760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089a565b600081815260ff6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612b3f82611350565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612b8483611350565b9050806001600160a01b0316846001600160a01b03161480612bab5750612bab81856126c8565b806119d65750836001600160a01b0316612bc484610935565b6001600160a01b031614949350505050565b826001600160a01b0316612be982611350565b6001600160a01b031614612c4d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161089a565b6001600160a01b038216612caf5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161089a565b612cba600082612b0a565b6001600160a01b038316600090815260fe60205260408120805460019290612ce3908490614dbd565b90915550506001600160a01b038216600090815260fe60205260408120805460019290612d11908490614d91565b9091555050600081815260fd602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60405163c5b8f5cf60e01b8152600080516020614f9e83398151915260048201819052600080516020614f578339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015612dff57600080fd5b505afa158015612e13573d6000803e3d6000fd5b50505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612e4f57610a6d83613a0e565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e8857600080fd5b505afa925050508015612eb8575060408051601f3d908101601f19168201909252612eb59181019061476f565b60015b612f1b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161089a565b600080516020614f378339815191528114612f8a5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161089a565b50610a6d838383613aaa565b612f9e613acf565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60335460ff161561296b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161089a565b6001600160a01b038116600090815261012e6020526040812060018154610100900460ff16600381111561306457613064614e90565b146130b15760405162461bcd60e51b815260206004820152601a60248201527f436f6d706f6e656e74206973206e6f7420616e2065546f6b656e000000000000604482015260640161089a565b5460ff1692915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261092f908590613b18565b6001600160a01b038116600090815261012e6020526040812060028154610100900460ff16600381111561314b5761314b614e90565b146130b15760405162461bcd60e51b815260206004820152601d60248201527f436f6d706f6e656e74206973206e6f742061205269736b4d6f64756c65000000604482015260640161089a565b6000816040516020016131ab9190614d58565b604051602081830303815290604052805190602001209050919050565b6001600160a01b038116600090815261012e6020526040812060038154610100900460ff1660038111156131fe576131fe614e90565b146130b15760405162461bcd60e51b815260206004820152602260248201527f436f6d706f6e656e74206973206e6f742061205072656d69756d734163636f756044820152611b9d60f21b606482015260840161089a565b6132608383613bea565b61326d6000848484613d2c565b610a6d5760405162461bcd60e51b815260040161089a90614b87565b61329283613e36565b61016083015181806132ac57506001600160a01b03811633145b6132f85760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c6963696573604482015260640161089a565b821580613310575042846101a0015164ffffffffff16115b61335c5760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c6963790000000000000000604482015260640161089a565b600061336782613115565b9050600181600381111561337d5761337d614e90565b148061339a5750600281600381111561339857613398614e90565b145b61340c5760405162461bcd60e51b815260206004820152603a60248201527f4d6f64756c65206d75737420626520616374697665206f72206465707265636160448201527f74656420746f2070726f63657373207265736f6c7574696f6e73000000000000606482015260840161089a565b84602001518411156134595760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b604482015260640161089a565b600080851190506000836001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561349b57600080fd5b505afa1580156134af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d391906145a5565b90506134de816131c8565b925060018360038111156134f4576134f4614e90565b14806135115750600283600381111561350f5761350f614e90565b145b61358f5760405162461bcd60e51b815260206004820152604360248201527f5072656d69756d734163636f756e74206d75737420626520616374697665206f60448201527f72206465707265636174656420746f2070726f63657373207265736f6c7574696064820152626f6e7360e81b608482015260a40161089a565b811561360f5760006135a48860000151611350565b604051639d8c5ee760e01b81529091506001600160a01b03831690639d8c5ee7906135d79084908c908c90600401614b0e565b600060405180830381600087803b1580156135f157600080fd5b505af1158015613605573d6000803e3d6000fd5b505050505061366e565b60405163c7a9c70d60e01b81526001600160a01b0382169063c7a9c70d9061363b908a90600401614d58565b600060405180830381600087803b15801561365557600080fd5b505af1158015613669573d6000803e3d6000fd5b505050505b6020870151604051636a448ef160e01b815260048101919091526001600160a01b03851690636a448ef190602401600060405180830381600087803b1580156136b657600080fd5b505af11580156136ca573d6000803e3d6000fd5b5050505086600001518761016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e8860405161371391815260200190565b60405180910390a38651600090815261012f6020526040812055851561374457865161373f9087613e9d565b612e13565b8651612e1390614003565b613757612fe8565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612fcb3390565b816001600160a01b0316836001600160a01b031614156137ee5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161089a565b6001600160a01b0383811660008181526101006020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613867848484612bd6565b61387384848484613d2c565b61092f5760405162461bcd60e51b815260040161089a90614b87565b6060816138b35750506040805180820190915260018152600360fc1b602082015290565b8160005b81156138dd57806138c781614e35565b91506138d69050600a83614da9565b91506138b7565b60008167ffffffffffffffff8111156138f8576138f8614ebc565b6040519080825280601f01601f191660200182016040528015613922576020820181803683370190505b5090505b84156119d657613937600183614dbd565b9150613944600a86614e50565b61394f906030614d91565b60f81b81838151811061396457613964614ea6565b60200101906001600160f81b031916908160001a905350613986600a86614da9565b9450613926565b600054610100900460ff166139b45760405162461bcd60e51b815260040161089a90614cbf565b81516139c79060fb90602085019061435d565b508051610a6d9060fc90602084019061435d565b600054610100900460ff16613a025760405162461bcd60e51b815260040161089a90614cbf565b6033805460ff19169055565b6001600160a01b0381163b613a7b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161089a565b600080516020614f3783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613ab3836140b9565b600082511180613ac05750805b15610a6d5761092f83836140f9565b60335460ff1661296b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161089a565b6000613b6d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166141e49092919063ffffffff16565b805190915015610a6d5780806020019051810190613b8b9190614752565b610a6d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161089a565b6001600160a01b038216613c405760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161089a565b600081815260fd60205260409020546001600160a01b031615613ca55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161089a565b6001600160a01b038216600090815260fe60205260408120805460019290613cce908490614d91565b9091555050600081815260fd602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15613e2e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613d70903390899088908890600401614ad1565b602060405180830381600087803b158015613d8a57600080fd5b505af1925050508015613dba575060408051601f3d908101601f19168201909252613db7918101906147a5565b60015b613e14573d808015613de8576040519150601f19603f3d011682016040523d82523d6000602084013e613ded565b606091505b508051613e0c5760405162461bcd60e51b815260040161089a90614b87565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119d6565b5060016119d6565b805115801590613e5e57508051600090815261012f6020526040902054613e5c82613198565b145b610b805760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b604482015260640161089a565b6000613ea883611350565b90506001600160a01b0381163b613ebe57505050565b6001600160a01b03811663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044810186905260648101859052608401602060405180830381600087803b158015613f2357600080fd5b505af1925050508015613f53575060408051601f3d908101601f19168201909252613f50918101906147a5565b60015b613f93573d808015613f81576040519150601f19603f3d011682016040523d82523d6000602084013e613f86565b606091505b508051613e0c5750505050565b6001600160e01b03198116636b140e9f60e11b1461092f5760405162461bcd60e51b815260206004820152602760248201527f496e76616c69642072657475726e2076616c75652066726f6d20506f6c696379604482015266102437b63232b960c91b606482015260840161089a565b600061400e82611350565b90506001600160a01b0381163b614023575050565b6001600160a01b03811663e8e617b7336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101859052606401602060405180830381600087803b15801561408157600080fd5b505af19250505080156140b1575060408051601f3d908101601f191682019092526140ae918101906147a5565b60015b610a6d575050565b6140c281613a0e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6141615760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161089a565b600080846001600160a01b03168460405161417c9190614a86565b600060405180830381855af49150503d80600081146141b7576040519150601f19603f3d011682016040523d82523d6000602084013e6141bc565b606091505b50915091506129088282604051806060016040528060278152602001614f77602791396141f3565b60606119d6848460008561422c565b606083156142025750816126c1565b8251156142125782518084602001fd5b8160405162461bcd60e51b815260040161089a9190614b74565b60608247101561428d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161089a565b6001600160a01b0385163b6142e45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161089a565b600080866001600160a01b031685876040516143009190614a86565b60006040518083038185875af1925050503d806000811461433d576040519150601f19603f3d011682016040523d82523d6000602084013e614342565b606091505b50915091506143528282866141f3565b979650505050505050565b82805461436990614e00565b90600052602060002090601f01602090048101928261438b57600085556143d1565b82601f106143a457805160ff19168380011785556143d1565b828001600101855582156143d1579182015b828111156143d15782518255916020019190600101906143b6565b506143dd9291506143e1565b5090565b5b808211156143dd57600081556001016143e2565b600082601f83011261440757600080fd5b813567ffffffffffffffff8082111561442257614422614ebc565b604051601f8301601f19908116603f0116810190828211818310171561444a5761444a614ebc565b8160405283815286602085880101111561446357600080fd5b836020870160208301376000602085830101528094505050505092915050565b803561448e81614ef0565b919050565b60006101c082840312156144a657600080fd5b50919050565b60006101c082840312156144bf57600080fd5b6144c7614d67565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301358183015250610160614545818401614483565b90820152610180614557838201614573565b908201526101a0614569838201614573565b9082015292915050565b803564ffffffffff8116811461448e57600080fd5b60006020828403121561459a57600080fd5b81356126c181614ef0565b6000602082840312156145b757600080fd5b81516126c181614ef0565b600080604083850312156145d557600080fd5b82356145e081614ef0565b915060208301356145f081614ef0565b809150509250929050565b60008060006060848603121561461057600080fd5b833561461b81614ef0565b9250602084013561462b81614ef0565b929592945050506040919091013590565b6000806000806080858703121561465257600080fd5b843561465d81614ef0565b9350602085013561466d81614ef0565b925060408501359150606085013567ffffffffffffffff81111561469057600080fd5b61469c878288016143f6565b91505092959194509250565b600080604083850312156146bb57600080fd5b82356146c681614ef0565b915060208301356145f081614f05565b600080604083850312156146e957600080fd5b82356146f481614ef0565b9150602083013567ffffffffffffffff81111561471057600080fd5b61471c858286016143f6565b9150509250929050565b6000806040838503121561473957600080fd5b823561474481614ef0565b946020939093013593505050565b60006020828403121561476457600080fd5b81516126c181614f05565b60006020828403121561478157600080fd5b5051919050565b60006020828403121561479a57600080fd5b81356126c181614f13565b6000602082840312156147b757600080fd5b81516126c181614f13565b600080604083850312156147d557600080fd5b82356147e081614ef0565b915060208301356145f081614f29565b60008060006060848603121561480557600080fd5b833567ffffffffffffffff8082111561481d57600080fd5b614829878388016143f6565b9450602086013591508082111561483f57600080fd5b5061484c868287016143f6565b925050604084013561485d81614ef0565b809150509250925092565b60006101c0828403121561487b57600080fd5b6126c18383614493565b6000806101e0838503121561489957600080fd5b6148a38484614493565b91506101c08301356145f081614f05565b6000806101e083850312156148c857600080fd5b6148d28484614493565b946101c0939093013593505050565b60006101c082840312156148f457600080fd5b6126c183836144ac565b600080600080610220858703121561491557600080fd5b61491f86866144ac565b93506101c085013561493081614ef0565b92506101e085013561494181614ef0565b91506102008501356bffffffffffffffffffffffff8116811461496357600080fd5b939692955090935050565b60006020828403121561498057600080fd5b5035919050565b60006020828403121561499957600080fd5b6126c182614573565b600081518084526149ba816020860160208601614dd4565b601f01601f19169290920160200192915050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080820151818401525061012080820151818401525061014080820151818401525061016080820151614a57828501826001600160a01b03169052565b50506101808181015164ffffffffff81168483015250506101a08181015164ffffffffff81168483015261092f565b60008251614a98818460208701614dd4565b9190910192915050565b60008351614ab4818460208801614dd4565b835190830190614ac8818360208801614dd4565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614b04908301846149a2565b9695505050505050565b6001600160a01b03841681526102008101614b2c60208301856149ce565b826101e0830152949350505050565b60408101614b4884614ed2565b838252614b5483614ed2565b8260208301529392505050565b60208101614b6e83614ed2565b91905290565b6020815260006126c160208301846149a2565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6101c081016107ac82846149ce565b6040516101c0810167ffffffffffffffff81118282101715614d8b57614d8b614ebc565b60405290565b60008219821115614da457614da4614e64565b500190565b600082614db857614db8614e7a565b500490565b600082821015614dcf57614dcf614e64565b500390565b60005b83811015614def578181015183820152602001614dd7565b8381111561092f5750506000910152565b600181811c90821680614e1457607f821691505b602082108114156144a657634e487b7160e01b600052602260045260246000fd5b6000600019821415614e4957614e49614e64565b5060010190565b600082614e5f57614e5f614e7a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60048110610b8057634e487b7160e01b600052602160045260246000fd5b6001600160a01b0381168114610b8057600080fd5b8015158114610b8057600080fd5b6001600160e01b031981168114610b8057600080fd5b60048110610b8057600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212205195bff25ebb784ae2307b15af46c9e43a9f109a38be7f9a583c7e8b2f97cfb364736f6c63430008060033",
1054
1278
  "linkReferences": {},
1055
1279
  "deployedLinkReferences": {}
1056
1280
  }