@ensuro/core 2.0.0-beta1 → 2.0.0-beta10

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 (79) hide show
  1. package/README.md +23 -14
  2. package/build/contracts/AccessManager.sol/AccessManager.json +559 -0
  3. package/build/contracts/ERC4626AssetManager.sol/ERC4626AssetManager.json +219 -0
  4. package/build/contracts/EToken.sol/EToken.json +134 -52
  5. package/build/contracts/LPManualWhitelist.sol/LPManualWhitelist.json +4 -4
  6. package/build/contracts/LiquidityThresholdAssetManager.sol/LiquidityThresholdAssetManager.json +203 -0
  7. package/build/contracts/Policy.sol/Policy.json +2 -2
  8. package/build/contracts/PolicyPool.sol/PolicyPool.json +437 -61
  9. package/build/contracts/PolicyPoolComponent.sol/PolicyPoolComponent.json +2 -2
  10. package/build/contracts/PremiumsAccount.sol/PremiumsAccount.json +123 -16
  11. package/build/contracts/Reserve.sol/Reserve.json +66 -8
  12. package/build/contracts/RiskModule.sol/RiskModule.json +2 -2
  13. package/build/contracts/SignedQuoteRiskModule.sol/SignedQuoteRiskModule.json +960 -0
  14. package/build/contracts/TimeScaled.sol/TimeScaled.json +3 -17
  15. package/build/contracts/TrustfulRiskModule.sol/TrustfulRiskModule.json +5 -5
  16. package/build/contracts/{WadRayMath.sol → dependencies/WadRayMath.sol}/WadRayMath.json +3 -3
  17. package/build/contracts/interfaces/{IPolicyPoolConfig.sol/IPolicyPoolConfig.json → IAccessManager.sol/IAccessManager.json} +77 -59
  18. package/build/contracts/interfaces/IAssetManager.sol/IAssetManager.json +109 -0
  19. package/build/contracts/interfaces/IEToken.sol/IEToken.json +13 -0
  20. package/build/contracts/interfaces/IPolicyPool.sol/IPolicyPool.json +40 -16
  21. package/build/contracts/interfaces/IPremiumsAccount.sol/IPremiumsAccount.json +13 -0
  22. package/build/contracts/mocks/FixedRateVault.sol/FixedRateVault.json +736 -0
  23. package/build/contracts/mocks/ForwardProxy.sol/ForwardProxy.json +2 -2
  24. package/build/contracts/mocks/PolicyHolderMock.sol/PolicyHolderMock.json +28 -2
  25. package/build/contracts/mocks/PolicyPoolComponentMock.sol/PolicyPoolComponentMock.json +2 -2
  26. package/build/contracts/mocks/PolicyPoolMock.sol/PolicyPoolMock.json +118 -19
  27. package/build/contracts/mocks/PolicyPoolMock.sol/PolicyPoolMockForward.json +6 -6
  28. package/build/contracts/mocks/RiskModuleMock.sol/RiskModuleMock.json +764 -0
  29. package/build/contracts/mocks/TestCurrency.sol/TestCurrency.json +2 -2
  30. package/build/contracts/mocks/TestNFT.sol/TestNFT.json +2 -2
  31. package/contracts/AccessManager.sol +103 -0
  32. package/contracts/ERC4626AssetManager.sol +52 -0
  33. package/contracts/EToken.sol +123 -87
  34. package/contracts/LPManualWhitelist.sol +1 -1
  35. package/contracts/LiquidityThresholdAssetManager.sol +160 -0
  36. package/contracts/Policy.sol +1 -1
  37. package/contracts/PolicyPool.sol +333 -115
  38. package/contracts/PolicyPoolComponent.sol +36 -41
  39. package/contracts/PremiumsAccount.sol +285 -79
  40. package/contracts/Reserve.sol +183 -4
  41. package/contracts/RiskModule.sol +26 -19
  42. package/contracts/SignedQuoteRiskModule.sol +241 -0
  43. package/contracts/TimeScaled.sol +19 -15
  44. package/contracts/TrustfulRiskModule.sol +62 -2
  45. package/contracts/dependencies/WadRayMath.sol +126 -0
  46. package/contracts/interfaces/IAccessManager.sol +148 -0
  47. package/contracts/interfaces/IAssetManager.sol +84 -0
  48. package/contracts/interfaces/IEToken.sol +25 -2
  49. package/contracts/interfaces/ILPWhitelist.sol +17 -0
  50. package/contracts/interfaces/IPolicyPool.sol +20 -13
  51. package/contracts/interfaces/IPolicyPoolComponent.sol +3 -0
  52. package/contracts/interfaces/IPremiumsAccount.sol +5 -0
  53. package/contracts/interfaces/IRiskModule.sol +67 -4
  54. package/contracts/mocks/FixedRateVault.sol +85 -0
  55. package/contracts/mocks/PolicyHolderMock.sol +21 -0
  56. package/contracts/mocks/PolicyPoolMock.sol +41 -15
  57. package/contracts/mocks/RiskModuleMock.sol +75 -0
  58. package/js/test-utils.js +227 -149
  59. package/package.json +1 -1
  60. package/build/contracts/FlightDelayRiskModule.sol/FlightDelayRiskModule.json +0 -890
  61. package/build/contracts/PolicyNFT.sol/PolicyNFT.json +0 -583
  62. package/build/contracts/PolicyPoolConfig.sol/PolicyPoolConfig.json +0 -691
  63. package/build/contracts/dependencies/ChainlinkClientUpgradeable.sol/ChainlinkClientUpgradeable.json +0 -63
  64. package/build/contracts/interfaces/IPolicyNFT.sol/IPolicyNFT.json +0 -321
  65. package/build/contracts/mocks/LinkTokenMock.sol/LinkTokenMock.json +0 -370
  66. package/build/contracts/mocks/TestCurrencyUUPS.sol/TestCurrencyUUPS.json +0 -353
  67. package/build/contracts/upgraded/IPolicyNFTv1.sol/IPolicyNFTv1.json +0 -322
  68. package/build/contracts/upgraded/PolicyNFTv1.sol/PolicyNFTv1.json +0 -584
  69. package/build/contracts/upgraded/PolicyNFTv1.sol/PolicyNFTv1_Upgrade.json +0 -615
  70. package/contracts/FlightDelayRiskModule.sol +0 -217
  71. package/contracts/PolicyNFT.sol +0 -96
  72. package/contracts/PolicyPoolConfig.sol +0 -204
  73. package/contracts/WadRayMath.sol +0 -135
  74. package/contracts/dependencies/ChainlinkClientUpgradeable.sol +0 -371
  75. package/contracts/interfaces/IPolicyNFT.sol +0 -15
  76. package/contracts/interfaces/IPolicyPoolConfig.sol +0 -96
  77. package/contracts/mocks/LinkTokenMock.sol +0 -30
  78. package/contracts/upgraded/IPolicyNFTv1.sol +0 -15
  79. package/contracts/upgraded/PolicyNFTv1.sol +0 -126
@@ -6,13 +6,8 @@
6
6
  {
7
7
  "inputs": [
8
8
  {
9
- "internalType": "contract IPolicyPoolConfig",
10
- "name": "config_",
11
- "type": "address"
12
- },
13
- {
14
- "internalType": "contract IPolicyNFT",
15
- "name": "policyNFT_",
9
+ "internalType": "contract IAccessManager",
10
+ "name": "access_",
16
11
  "type": "address"
17
12
  },
18
13
  {
@@ -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": [
@@ -61,18 +106,43 @@
61
106
  "inputs": [
62
107
  {
63
108
  "indexed": true,
64
- "internalType": "contract IEToken",
65
- "name": "eToken",
109
+ "internalType": "enum IAccessManager.GovernanceActions",
110
+ "name": "action",
111
+ "type": "uint8"
112
+ },
113
+ {
114
+ "indexed": false,
115
+ "internalType": "address",
116
+ "name": "value",
117
+ "type": "address"
118
+ }
119
+ ],
120
+ "name": "ComponentChanged",
121
+ "type": "event"
122
+ },
123
+ {
124
+ "anonymous": false,
125
+ "inputs": [
126
+ {
127
+ "indexed": true,
128
+ "internalType": "contract IPolicyPoolComponent",
129
+ "name": "component",
66
130
  "type": "address"
67
131
  },
68
132
  {
69
133
  "indexed": false,
70
- "internalType": "enum PolicyPool.ETokenStatus",
134
+ "internalType": "enum PolicyPool.ComponentKind",
135
+ "name": "kind",
136
+ "type": "uint8"
137
+ },
138
+ {
139
+ "indexed": false,
140
+ "internalType": "enum PolicyPool.ComponentStatus",
71
141
  "name": "newStatus",
72
142
  "type": "uint8"
73
143
  }
74
144
  ],
75
- "name": "ETokenStatusChanged",
145
+ "name": "ComponentStatusChanged",
76
146
  "type": "event"
77
147
  },
78
148
  {
@@ -222,18 +292,24 @@
222
292
  "inputs": [
223
293
  {
224
294
  "indexed": true,
225
- "internalType": "contract IPremiumsAccount",
226
- "name": "premiumsAccount",
295
+ "internalType": "address",
296
+ "name": "from",
227
297
  "type": "address"
228
298
  },
229
299
  {
230
- "indexed": false,
231
- "internalType": "enum PolicyPool.ETokenStatus",
232
- "name": "newStatus",
233
- "type": "uint8"
300
+ "indexed": true,
301
+ "internalType": "address",
302
+ "name": "to",
303
+ "type": "address"
304
+ },
305
+ {
306
+ "indexed": true,
307
+ "internalType": "uint256",
308
+ "name": "tokenId",
309
+ "type": "uint256"
234
310
  }
235
311
  ],
236
- "name": "PremiumsAccountStatusChanged",
312
+ "name": "Transfer",
237
313
  "type": "event"
238
314
  },
239
315
  {
@@ -315,27 +391,32 @@
315
391
  "type": "function"
316
392
  },
317
393
  {
318
- "inputs": [
394
+ "inputs": [],
395
+ "name": "access",
396
+ "outputs": [
319
397
  {
320
- "internalType": "contract IEToken",
321
- "name": "eToken",
398
+ "internalType": "contract IAccessManager",
399
+ "name": "",
322
400
  "type": "address"
323
401
  }
324
402
  ],
325
- "name": "addEToken",
326
- "outputs": [],
327
- "stateMutability": "nonpayable",
403
+ "stateMutability": "view",
328
404
  "type": "function"
329
405
  },
330
406
  {
331
407
  "inputs": [
332
408
  {
333
- "internalType": "contract IPremiumsAccount",
334
- "name": "pa",
409
+ "internalType": "contract IPolicyPoolComponent",
410
+ "name": "component",
335
411
  "type": "address"
412
+ },
413
+ {
414
+ "internalType": "enum PolicyPool.ComponentKind",
415
+ "name": "kind",
416
+ "type": "uint8"
336
417
  }
337
418
  ],
338
- "name": "addPremiumsAccount",
419
+ "name": "addComponent",
339
420
  "outputs": [],
340
421
  "stateMutability": "nonpayable",
341
422
  "type": "function"
@@ -343,34 +424,58 @@
343
424
  {
344
425
  "inputs": [
345
426
  {
346
- "internalType": "contract IEToken",
347
- "name": "eToken",
427
+ "internalType": "address",
428
+ "name": "to",
348
429
  "type": "address"
349
430
  },
350
431
  {
351
- "internalType": "enum PolicyPool.ETokenStatus",
352
- "name": "newStatus",
353
- "type": "uint8"
432
+ "internalType": "uint256",
433
+ "name": "tokenId",
434
+ "type": "uint256"
354
435
  }
355
436
  ],
356
- "name": "changeETokenStatus",
437
+ "name": "approve",
357
438
  "outputs": [],
358
439
  "stateMutability": "nonpayable",
359
440
  "type": "function"
360
441
  },
361
442
  {
362
- "inputs": [],
363
- "name": "config",
443
+ "inputs": [
444
+ {
445
+ "internalType": "address",
446
+ "name": "owner",
447
+ "type": "address"
448
+ }
449
+ ],
450
+ "name": "balanceOf",
364
451
  "outputs": [
365
452
  {
366
- "internalType": "contract IPolicyPoolConfig",
453
+ "internalType": "uint256",
367
454
  "name": "",
368
- "type": "address"
455
+ "type": "uint256"
369
456
  }
370
457
  ],
371
458
  "stateMutability": "view",
372
459
  "type": "function"
373
460
  },
461
+ {
462
+ "inputs": [
463
+ {
464
+ "internalType": "contract IPolicyPoolComponent",
465
+ "name": "component",
466
+ "type": "address"
467
+ },
468
+ {
469
+ "internalType": "enum PolicyPool.ComponentStatus",
470
+ "name": "newStatus",
471
+ "type": "uint8"
472
+ }
473
+ ],
474
+ "name": "changeComponentStatus",
475
+ "outputs": [],
476
+ "stateMutability": "nonpayable",
477
+ "type": "function"
478
+ },
374
479
  {
375
480
  "inputs": [],
376
481
  "name": "currency",
@@ -490,15 +595,34 @@
490
595
  {
491
596
  "inputs": [
492
597
  {
493
- "internalType": "contract IEToken",
494
- "name": "eToken",
598
+ "internalType": "uint256",
599
+ "name": "tokenId",
600
+ "type": "uint256"
601
+ }
602
+ ],
603
+ "name": "getApproved",
604
+ "outputs": [
605
+ {
606
+ "internalType": "address",
607
+ "name": "",
495
608
  "type": "address"
496
609
  }
497
610
  ],
498
- "name": "getETokenStatus",
611
+ "stateMutability": "view",
612
+ "type": "function"
613
+ },
614
+ {
615
+ "inputs": [
616
+ {
617
+ "internalType": "contract IPolicyPoolComponent",
618
+ "name": "component",
619
+ "type": "address"
620
+ }
621
+ ],
622
+ "name": "getComponentStatus",
499
623
  "outputs": [
500
624
  {
501
- "internalType": "enum PolicyPool.ETokenStatus",
625
+ "internalType": "enum PolicyPool.ComponentStatus",
502
626
  "name": "",
503
627
  "type": "uint8"
504
628
  }
@@ -507,12 +631,84 @@
507
631
  "type": "function"
508
632
  },
509
633
  {
510
- "inputs": [],
634
+ "inputs": [
635
+ {
636
+ "internalType": "string",
637
+ "name": "name_",
638
+ "type": "string"
639
+ },
640
+ {
641
+ "internalType": "string",
642
+ "name": "symbol_",
643
+ "type": "string"
644
+ },
645
+ {
646
+ "internalType": "address",
647
+ "name": "treasury_",
648
+ "type": "address"
649
+ }
650
+ ],
511
651
  "name": "initialize",
512
652
  "outputs": [],
513
653
  "stateMutability": "nonpayable",
514
654
  "type": "function"
515
655
  },
656
+ {
657
+ "inputs": [
658
+ {
659
+ "internalType": "uint256",
660
+ "name": "policyId",
661
+ "type": "uint256"
662
+ }
663
+ ],
664
+ "name": "isActive",
665
+ "outputs": [
666
+ {
667
+ "internalType": "bool",
668
+ "name": "",
669
+ "type": "bool"
670
+ }
671
+ ],
672
+ "stateMutability": "view",
673
+ "type": "function"
674
+ },
675
+ {
676
+ "inputs": [
677
+ {
678
+ "internalType": "address",
679
+ "name": "owner",
680
+ "type": "address"
681
+ },
682
+ {
683
+ "internalType": "address",
684
+ "name": "operator",
685
+ "type": "address"
686
+ }
687
+ ],
688
+ "name": "isApprovedForAll",
689
+ "outputs": [
690
+ {
691
+ "internalType": "bool",
692
+ "name": "",
693
+ "type": "bool"
694
+ }
695
+ ],
696
+ "stateMutability": "view",
697
+ "type": "function"
698
+ },
699
+ {
700
+ "inputs": [],
701
+ "name": "name",
702
+ "outputs": [
703
+ {
704
+ "internalType": "string",
705
+ "name": "",
706
+ "type": "string"
707
+ }
708
+ ],
709
+ "stateMutability": "view",
710
+ "type": "function"
711
+ },
516
712
  {
517
713
  "inputs": [
518
714
  {
@@ -594,7 +790,12 @@
594
790
  },
595
791
  {
596
792
  "internalType": "address",
597
- "name": "customer",
793
+ "name": "payer",
794
+ "type": "address"
795
+ },
796
+ {
797
+ "internalType": "address",
798
+ "name": "policyHolder",
598
799
  "type": "address"
599
800
  },
600
801
  {
@@ -614,6 +815,25 @@
614
815
  "stateMutability": "nonpayable",
615
816
  "type": "function"
616
817
  },
818
+ {
819
+ "inputs": [
820
+ {
821
+ "internalType": "uint256",
822
+ "name": "tokenId",
823
+ "type": "uint256"
824
+ }
825
+ ],
826
+ "name": "ownerOf",
827
+ "outputs": [
828
+ {
829
+ "internalType": "address",
830
+ "name": "",
831
+ "type": "address"
832
+ }
833
+ ],
834
+ "stateMutability": "view",
835
+ "type": "function"
836
+ },
617
837
  {
618
838
  "inputs": [],
619
839
  "name": "pause",
@@ -634,19 +854,6 @@
634
854
  "stateMutability": "view",
635
855
  "type": "function"
636
856
  },
637
- {
638
- "inputs": [],
639
- "name": "policyNFT",
640
- "outputs": [
641
- {
642
- "internalType": "address",
643
- "name": "",
644
- "type": "address"
645
- }
646
- ],
647
- "stateMutability": "view",
648
- "type": "function"
649
- },
650
857
  {
651
858
  "inputs": [],
652
859
  "name": "proxiableUUID",
@@ -663,12 +870,12 @@
663
870
  {
664
871
  "inputs": [
665
872
  {
666
- "internalType": "contract IEToken",
667
- "name": "eToken",
873
+ "internalType": "contract IPolicyPoolComponent",
874
+ "name": "component",
668
875
  "type": "address"
669
876
  }
670
877
  ],
671
- "name": "removeEToken",
878
+ "name": "removeComponent",
672
879
  "outputs": [],
673
880
  "stateMutability": "nonpayable",
674
881
  "type": "function"
@@ -853,6 +1060,175 @@
853
1060
  "stateMutability": "nonpayable",
854
1061
  "type": "function"
855
1062
  },
1063
+ {
1064
+ "inputs": [
1065
+ {
1066
+ "internalType": "address",
1067
+ "name": "from",
1068
+ "type": "address"
1069
+ },
1070
+ {
1071
+ "internalType": "address",
1072
+ "name": "to",
1073
+ "type": "address"
1074
+ },
1075
+ {
1076
+ "internalType": "uint256",
1077
+ "name": "tokenId",
1078
+ "type": "uint256"
1079
+ }
1080
+ ],
1081
+ "name": "safeTransferFrom",
1082
+ "outputs": [],
1083
+ "stateMutability": "nonpayable",
1084
+ "type": "function"
1085
+ },
1086
+ {
1087
+ "inputs": [
1088
+ {
1089
+ "internalType": "address",
1090
+ "name": "from",
1091
+ "type": "address"
1092
+ },
1093
+ {
1094
+ "internalType": "address",
1095
+ "name": "to",
1096
+ "type": "address"
1097
+ },
1098
+ {
1099
+ "internalType": "uint256",
1100
+ "name": "tokenId",
1101
+ "type": "uint256"
1102
+ },
1103
+ {
1104
+ "internalType": "bytes",
1105
+ "name": "data",
1106
+ "type": "bytes"
1107
+ }
1108
+ ],
1109
+ "name": "safeTransferFrom",
1110
+ "outputs": [],
1111
+ "stateMutability": "nonpayable",
1112
+ "type": "function"
1113
+ },
1114
+ {
1115
+ "inputs": [
1116
+ {
1117
+ "internalType": "address",
1118
+ "name": "operator",
1119
+ "type": "address"
1120
+ },
1121
+ {
1122
+ "internalType": "bool",
1123
+ "name": "approved",
1124
+ "type": "bool"
1125
+ }
1126
+ ],
1127
+ "name": "setApprovalForAll",
1128
+ "outputs": [],
1129
+ "stateMutability": "nonpayable",
1130
+ "type": "function"
1131
+ },
1132
+ {
1133
+ "inputs": [
1134
+ {
1135
+ "internalType": "address",
1136
+ "name": "treasury_",
1137
+ "type": "address"
1138
+ }
1139
+ ],
1140
+ "name": "setTreasury",
1141
+ "outputs": [],
1142
+ "stateMutability": "nonpayable",
1143
+ "type": "function"
1144
+ },
1145
+ {
1146
+ "inputs": [
1147
+ {
1148
+ "internalType": "bytes4",
1149
+ "name": "interfaceId",
1150
+ "type": "bytes4"
1151
+ }
1152
+ ],
1153
+ "name": "supportsInterface",
1154
+ "outputs": [
1155
+ {
1156
+ "internalType": "bool",
1157
+ "name": "",
1158
+ "type": "bool"
1159
+ }
1160
+ ],
1161
+ "stateMutability": "view",
1162
+ "type": "function"
1163
+ },
1164
+ {
1165
+ "inputs": [],
1166
+ "name": "symbol",
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": "uint256",
1181
+ "name": "tokenId",
1182
+ "type": "uint256"
1183
+ }
1184
+ ],
1185
+ "name": "tokenURI",
1186
+ "outputs": [
1187
+ {
1188
+ "internalType": "string",
1189
+ "name": "",
1190
+ "type": "string"
1191
+ }
1192
+ ],
1193
+ "stateMutability": "view",
1194
+ "type": "function"
1195
+ },
1196
+ {
1197
+ "inputs": [
1198
+ {
1199
+ "internalType": "address",
1200
+ "name": "from",
1201
+ "type": "address"
1202
+ },
1203
+ {
1204
+ "internalType": "address",
1205
+ "name": "to",
1206
+ "type": "address"
1207
+ },
1208
+ {
1209
+ "internalType": "uint256",
1210
+ "name": "tokenId",
1211
+ "type": "uint256"
1212
+ }
1213
+ ],
1214
+ "name": "transferFrom",
1215
+ "outputs": [],
1216
+ "stateMutability": "nonpayable",
1217
+ "type": "function"
1218
+ },
1219
+ {
1220
+ "inputs": [],
1221
+ "name": "treasury",
1222
+ "outputs": [
1223
+ {
1224
+ "internalType": "address",
1225
+ "name": "",
1226
+ "type": "address"
1227
+ }
1228
+ ],
1229
+ "stateMutability": "view",
1230
+ "type": "function"
1231
+ },
856
1232
  {
857
1233
  "inputs": [],
858
1234
  "name": "unpause",
@@ -916,8 +1292,8 @@
916
1292
  "type": "function"
917
1293
  }
918
1294
  ],
919
- "bytecode": "0x6101006040523060601b6080523480156200001957600080fd5b5060405162003b5938038062003b598339810160408190526200003c9162000064565b6001600160601b0319606093841b811660a05291831b821660e05290911b1660c052620000d1565b6000806000606084860312156200007a57600080fd5b83516200008781620000b8565b60208501519093506200009a81620000b8565b6040850151909250620000ad81620000b8565b809150509250925092565b6001600160a01b0381168114620000ce57600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c613985620001d4600039600081816103ca0152818161139e01528181612391015281816127ec01528181612b670152612d650152600081816104630152818161072c01528181611411015281816114cb015281816115830152818161164f01526117980152600081816103190152818161063d015281816108d301528181610d62015281816110ff015281816111fc015281816115b10152818161183b01528181611c1a01528181611d2901528181611f01015281816122c501526127790152600081816105140152818161055d015281816107e5015281816108250152610c7e01526139856000f3fe6080604052600436106101665760003560e01c806379502c55116100d1578063b63d382e1161008a578063f3fef3a311610064578063f3fef3a314610487578063f67b2bad146104a7578063fcbb17fe146104c9578063ffa600e3146104e957600080fd5b8063b63d382e146103ee578063ca143d181461040e578063e5a6b10f1461045457600080fd5b806379502c551461030a5780637a702b3c146103515780638129fc1c146103715780638456cb5914610386578063917876601461039b578063af02808a146103bb57600080fd5b806352bab1941161012357806352bab1941461023e57806352d1902d1461025e5780635b494dd5146102735780635c975abb146102a757806365b71008146102ca5780636af6f1ef146102ea57600080fd5b806324ea54f41461016b5780633659cfe6146101a05780633f4ba83a146101c257806347e7ef24146101d75780634a47a3e0146101f75780634f1ef2861461022b575b600080fd5b34801561017757600080fd5b5061018d60008051602061393083398151915281565b6040519081526020015b60405180910390f35b3480156101ac57600080fd5b506101c06101bb366004613276565b610509565b005b3480156101ce57600080fd5b506101c06105f2565b3480156101e357600080fd5b506101c06101f23660046133f5565b6106a3565b34801561020357600080fd5b5061018d7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6101c06102393660046132b0565b6107da565b34801561024a57600080fd5b506101c0610259366004613276565b6108a7565b34801561026a57600080fd5b5061018d610c71565b34801561027f57600080fd5b5061018d7f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b3480156102b357600080fd5b5060335460ff166040519015158152602001610197565b3480156102d657600080fd5b506101c06102e5366004613276565b610d24565b3480156102f657600080fd5b506101c0610305366004613421565b610f53565b34801561031657600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610197565b34801561035d57600080fd5b506101c061036c36600461346d565b610fd7565b34801561037d57600080fd5b506101c0610ff9565b34801561039257600080fd5b506101c06110d3565b3480156103a757600080fd5b5061018d6103b63660046134b7565b611169565b3480156103c757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610339565b3480156103fa57600080fd5b506101c0610409366004613276565b61180f565b34801561041a57600080fd5b50610447610429366004613276565b6001600160a01b0316600090815260c9602052604090205460ff1690565b6040516101979190613631565b34801561046057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610339565b34801561049357600080fd5b5061018d6104a23660046133f5565b611a8c565b3480156104b357600080fd5b5061018d6000805160206138e983398151915281565b3480156104d557600080fd5b506101c06104e43660046133b8565b611bcf565b3480156104f557600080fd5b506101c061050436600461343e565b611e83565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561055b5760405162461bcd60e51b81526004016105529061368c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166105a46000805160206138c9833981519152546001600160a01b031690565b6001600160a01b0316146105ca5760405162461bcd60e51b8152600401610552906136d8565b6105d381611eb6565b604080516000808252602082019092526105ef91839190611f60565b50565b60405163c5b8f5cf60e01b8152600080516020613930833981519152600482018190526000805160206138e98339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561067f57600080fd5b505afa158015610693573d6000803e3d6000fd5b5050505061069f6120df565b5050565b6106ab612131565b6001600160a01b038216600090815260c9602052604090205460ff1660018160038111156106db576106db613879565b1461071f5760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b6044820152606401610552565b6107546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338585612179565b6040516311f9fbc960e21b8152336004820152602481018390526001600160a01b038416906347e7ef2490604401602060405180830381600087803b15801561079c57600080fd5b505af11580156107b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d49190613375565b50505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108235760405162461bcd60e51b81526004016105529061368c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661086c6000805160206138c9833981519152546001600160a01b031690565b6001600160a01b0316146108925760405162461bcd60e51b8152600401610552906136d8565b61089b82611eb6565b61069f82826001611f60565b6040516312d9a6ad60e01b81526000805160206138e983398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561091d57600080fd5b505afa158015610931573d6000803e3d6000fd5b505050506001600160a01b03821661098b5760405162461bcd60e51b815260206004820152601d60248201527f5072656d69756d734163636f756e742063616e2774206265207a65726f0000006044820152606401610552565b306001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b1580156109ce57600080fd5b505afa1580156109e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a069190613293565b6001600160a01b031614610a6c5760405162461bcd60e51b815260206004820152602760248201527f5072656d69756d734163636f756e74206e6f74206c696e6b656420746f2074686044820152661a5cc81c1bdbdb60ca1b6064820152608401610552565b6000826001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610aa757600080fd5b505afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf9190613293565b90506001600160a01b03811615610b4c576040516338ea38a760e21b81526001600160a01b03848116600483015282169063e3a8e29c90602401600060405180830381600087803b158015610b3357600080fd5b505af1158015610b47573d6000803e3d6000fd5b505050505b826001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8557600080fd5b505afa158015610b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbd9190613293565b90506001600160a01b03811615610c2a576040516338ea38a760e21b81526001600160a01b03848116600483015282169063e3a8e29c90602401600060405180830381600087803b158015610c1157600080fd5b505af1158015610c25573d6000803e3d6000fd5b505050505b826001600160a01b03167f834362a634fb37104727a80cf5e936b5b1798edffcf4a89935f19d04eb0e88ec6001604051610c649190613631565b60405180910390a2505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d115760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610552565b506000805160206138c983398151915290565b6040516312d9a6ad60e01b81527f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2760048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015610dac57600080fd5b505afa158015610dc0573d6000803e3d6000fd5b505050506001600160a01b038216600090815260c9602052604090205460ff166002816003811115610df457610df4613879565b14610e395760405162461bcd60e51b815260206004820152601560248201527411551bdad95b881b9bdd0819195c1c9958d85d1959605a1b6044820152606401610552565b826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7257600080fd5b505afa158015610e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaa9190613375565b15610f065760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b6064820152608401610552565b6001600160a01b038316600081815260c96020526040808220805460ff19169055517f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c91610c6491613631565b610f5b612131565b42610f6e6101c083016101a08401613515565b64ffffffffff161115610fbc5760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610552565b6105ef610fce3683900383018361349a565b600060016121d3565b610fdf612131565b61069f610ff13684900384018461349a565b8260006121d3565b600054610100900460ff16158080156110195750600054600160ff909116105b806110335750303b158015611033575060005460ff166001145b61104f5760405162461bcd60e51b815260040161055290613724565b6000805460ff191660011790558015611072576000805461ff0019166101001790555b61107a6126a8565b6110826126cf565b61108a6126fe565b80156105ef576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a150565b6040516312d9a6ad60e01b815260008051602061393083398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561114957600080fd5b505afa15801561115d573d6000803e3d6000fd5b505050506105ef61289f565b6000611173612131565b6101608401516001600160a01b03811633146111dd5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b6064820152608401610552565b604051635dfdc5d760e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063bbfb8bae9060240160006040518083038186803b15801561123e57600080fd5b505afa158015611252573d6000803e3d6000fd5b50505050826bffffffffffffffffffffffff166060826001600160a01b0316901b61127d9190613827565b8552611288856128dc565b60ca600087600001518152602001908152602001600020819055506000816001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b1580156112de57600080fd5b505afa1580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113169190613293565b60405163e3638ea360e01b81529091506001600160a01b0382169063e3638ea3906113459089906004016137bd565b600060405180830381600087803b15801561135f57600080fd5b505af1158015611373573d6000803e3d6000fd5b50508751604051632851206560e21b81526001600160a01b03898116600483015260248201929092527f0000000000000000000000000000000000000000000000000000000000000000909116925063a14481949150604401600060405180830381600087803b1580156113e657600080fd5b505af11580156113fa573d6000803e3d6000fd5b50505060c087015161143b91506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087908490612179565b610140860151156114f3576114f385826001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561148357600080fd5b505afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190613293565b6101408901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612179565b610120860151156115ab576115ab85826001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153b57600080fd5b505afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115739190613293565b6101208901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612179565b611677857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561160857600080fd5b505afa15801561161c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116409190613293565b60e08901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612179565b600086610100015111801561170e5750816001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b1580156116c057600080fd5b505afa1580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f89190613293565b6001600160a01b0316856001600160a01b031614155b156117c0576117c085836001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b15801561175057600080fd5b505afa158015611764573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117889190613293565b6101008901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612179565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b876040516117f991906137bd565b60405180910390a25050835190505b9392505050565b6040516312d9a6ad60e01b81526000805160206138e983398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561188557600080fd5b505afa158015611899573d6000803e3d6000fd5b5050506001600160a01b038316600090815260c9602052604081205460ff1691508160038111156118cc576118cc613879565b146119195760405162461bcd60e51b815260206004820152601a60248201527f65546f6b656e20616c726561647920696e2074686520706f6f6c0000000000006044820152606401610552565b6001600160a01b0383166119665760405162461bcd60e51b815260206004820152601460248201527365546f6b656e2063616e2774206265207a65726f60601b6044820152606401610552565b306001600160a01b0316836001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b1580156119a957600080fd5b505afa1580156119bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e19190613293565b6001600160a01b031614611a375760405162461bcd60e51b815260206004820152601e60248201527f45546f6b656e206e6f74206c696e6b656420746f207468697320706f6f6c00006044820152606401610552565b6001600160a01b038316600081815260c9602052604090819020805460ff1916600190811790915590517f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c91610c6491613631565b6000611a96612131565b6001600160a01b038316600090815260c9602052604090205460ff166001816003811115611ac657611ac6613879565b1480611ae357506002816003811115611ae157611ae1613879565b145b611b415760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608401610552565b60405163f3fef3a360e01b8152336004820181905260248201859052906001600160a01b0386169063f3fef3a390604401602060405180830381600087803b158015611b8c57600080fd5b505af1158015611ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc49190613375565b925050505b92915050565b60405163c5b8f5cf60e01b8152600080516020613930833981519152600482018190526000805160206138e98339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015611c5c57600080fd5b505afa158015611c70573d6000803e3d6000fd5b5050506001600160a01b038516600090815260c9602052604081205460ff169150816003811115611ca357611ca3613879565b1415611ce45760405162461bcd60e51b815260206004820152601060248201526f11551bdad95b881b9bdd08199bdd5b9960821b6044820152606401610552565b6003846003811115611cf857611cf8613879565b141580611dab5750604051632474521560e21b815260008051602061393083398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b158015611d7357600080fd5b505afa158015611d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dab9190613358565b611e015760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920475541524449414e2063616e2073757370656e642065546f6b656e6044820152607360f81b6064820152608401610552565b6001600160a01b038516600090815260c960205260409020805485919060ff19166001836003811115611e3657611e36613879565b0217905550846001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c85604051611e749190613631565b60405180910390a25050505050565b611e8b612131565b61069f611e9d3684900384018461349a565b82611ea9576000611eaf565b83602001355b60006121d3565b60405163c5b8f5cf60e01b8152600080516020613930833981519152600482018190526000805160206138e98339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015611f4357600080fd5b505afa158015611f57573d6000803e3d6000fd5b50505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611f9857611f938361290c565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fd157600080fd5b505afa925050508015612001575060408051601f3d908101601f19168201909252611ffe91810190613375565b60015b6120645760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610552565b6000805160206138c983398151915281146120d35760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610552565b50611f938383836129a8565b6120e76129cd565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60335460ff16156121775760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610552565b565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526107d4908590612a16565b6121dc83612ae8565b61016083015181806121f657506001600160a01b03811633145b6122425760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c69636965736044820152606401610552565b82158061225a575042846101a0015164ffffffffff16115b6122a65760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c69637900000000000000006044820152606401610552565b6040516310f199ef60e31b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063878ccf789060240160006040518083038186803b15801561230757600080fd5b505afa15801561231b573d6000803e3d6000fd5b50505050836020015183111561236c5760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b6044820152606401610552565b82158015906124f25784516040516331a9108f60e11b81526000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636352211e916123c89160040190815260200190565b60206040518083038186803b1580156123e057600080fd5b505afa1580156123f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124189190613293565b9050826001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561245357600080fd5b505afa158015612467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248b9190613293565b6001600160a01b0316639d8c5ee78288886040518463ffffffff1660e01b81526004016124ba93929190613604565b600060405180830381600087803b1580156124d457600080fd5b505af11580156124e8573d6000803e3d6000fd5b50505050506125c1565b816001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561252b57600080fd5b505afa15801561253f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125639190613293565b6001600160a01b031663c7a9c70d866040518263ffffffff1660e01b815260040161258e91906137bd565b600060405180830381600087803b1580156125a857600080fd5b505af11580156125bc573d6000803e3d6000fd5b505050505b6020850151604051636a448ef160e01b815260048101919091526001600160a01b03831690636a448ef190602401600060405180830381600087803b15801561260957600080fd5b505af115801561261d573d6000803e3d6000fd5b5050505084600001518561016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e8660405161266691815260200190565b60405180910390a38451600090815260ca602052604081205583156126965784516126919085612b4e565b6126a1565b84516126a190612d4c565b5050505050565b600054610100900460ff166121775760405162461bcd60e51b815260040161055290613772565b600054610100900460ff166126f65760405162461bcd60e51b815260040161055290613772565b612177612e92565b600054610100900460ff161580801561271e5750600054600160ff909116105b806127385750303b158015612738575060005460ff166001145b6127545760405162461bcd60e51b815260040161055290613724565b6000805460ff191660011790558015612777576000805461ff0019166101001790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156127d257600080fd5b505af11580156127e6573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561284557600080fd5b505af1158015612859573d6000803e3d6000fd5b5050505080156105ef576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016110c8565b6128a7612131565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121143390565b6000816040516020016128ef91906137bd565b604051602081830303815290604052805190602001209050919050565b6001600160a01b0381163b6129795760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610552565b6000805160206138c983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6129b183612ec5565b6000825111806129be5750805b15611f93576107d48383612f05565b60335460ff166121775760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610552565b6000612a6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612ff09092919063ffffffff16565b805190915015611f935780806020019051810190612a899190613358565b611f935760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610552565b805115801590612b0f57508051600090815260ca6020526040902054612b0d826128dc565b145b6105ef5760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610552565b6040516331a9108f60e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b158015612bb157600080fd5b505afa158015612bc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be99190613293565b90506001600160a01b0381163b612bff57505050565b6001600160a01b03811663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044810186905260648101859052608401602060405180830381600087803b158015612c6457600080fd5b505af1925050508015612c94575060408051601f3d908101601f19168201909252612c919181019061338e565b60015b612cdc573d808015612cc2576040519150601f19603f3d011682016040523d82523d6000602084013e612cc7565b606091505b508051612cd45750505050565b805181602001fd5b6001600160e01b03198116636b140e9f60e11b146107d45760405162461bcd60e51b815260206004820152602760248201527f496e76616c69642072657475726e2076616c75652066726f6d20506f6c696379604482015266102437b63232b960c91b6064820152608401610552565b6040516331a9108f60e11b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b158015612daf57600080fd5b505afa158015612dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de79190613293565b90506001600160a01b0381163b612dfc575050565b6001600160a01b03811663e8e617b7336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101859052606401602060405180830381600087803b158015612e5a57600080fd5b505af1925050508015612e8a575060408051601f3d908101601f19168201909252612e879181019061338e565b60015b611f93575050565b600054610100900460ff16612eb95760405162461bcd60e51b815260040161055290613772565b6033805460ff19169055565b612ece8161290c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b612f6d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610552565b600080846001600160a01b031684604051612f8891906135e8565b600060405180830381855af49150503d8060008114612fc3576040519150601f19603f3d011682016040523d82523d6000602084013e612fc8565b606091505b5091509150611bc4828260405180606001604052806027815260200161390960279139613007565b6060612fff8484600085613040565b949350505050565b60608315613016575081611808565b8251156130265782518084602001fd5b8160405162461bcd60e51b81526004016105529190613659565b6060824710156130a15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610552565b6001600160a01b0385163b6130f85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610552565b600080866001600160a01b0316858760405161311491906135e8565b60006040518083038185875af1925050503d8060008114613151576040519150601f19603f3d011682016040523d82523d6000602084013e613156565b606091505b5091509150613166828286613007565b979650505050505050565b803561317c816138a5565b919050565b60006101c0828403121561319457600080fd5b50919050565b60006101c082840312156131ad57600080fd5b6131b56137cc565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301358183015250610160613233818401613171565b90820152610180613245838201613261565b908201526101a0613257838201613261565b9082015292915050565b803564ffffffffff8116811461317c57600080fd5b60006020828403121561328857600080fd5b8135611808816138a5565b6000602082840312156132a557600080fd5b8151611808816138a5565b600080604083850312156132c357600080fd5b82356132ce816138a5565b915060208381013567ffffffffffffffff808211156132ec57600080fd5b818601915086601f83011261330057600080fd5b8135818111156133125761331261388f565b613324601f8201601f191685016137f6565b9150808252878482850101111561333a57600080fd5b80848401858401376000848284010152508093505050509250929050565b60006020828403121561336a57600080fd5b8151611808816138ba565b60006020828403121561338757600080fd5b5051919050565b6000602082840312156133a057600080fd5b81516001600160e01b03198116811461180857600080fd5b600080604083850312156133cb57600080fd5b82356133d6816138a5565b91506020830135600481106133ea57600080fd5b809150509250929050565b6000806040838503121561340857600080fd5b8235613413816138a5565b946020939093013593505050565b60006101c0828403121561343457600080fd5b6118088383613181565b6000806101e0838503121561345257600080fd5b61345c8484613181565b91506101c08301356133ea816138ba565b6000806101e0838503121561348157600080fd5b61348b8484613181565b946101c0939093013593505050565b60006101c082840312156134ad57600080fd5b611808838361319a565b600080600061020084860312156134cd57600080fd5b6134d7858561319a565b92506101c08401356134e8816138a5565b91506101e08401356bffffffffffffffffffffffff8116811461350a57600080fd5b809150509250925092565b60006020828403121561352757600080fd5b61180882613261565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e0830152610100808201518184015250610120808201518184015250610140808201518184015250610160808201516135b9828501826001600160a01b03169052565b50506101808181015164ffffffffff81168483015250506101a08181015164ffffffffff8116848301526107d4565b600082516135fa81846020870161384d565b9190910192915050565b6001600160a01b038416815261020081016136226020830185613530565b826101e0830152949350505050565b602081016004831061365357634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000825180602084015261367881604085016020870161384d565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6101c08101611bc98284613530565b6040516101c0810167ffffffffffffffff811182821017156137f0576137f061388f565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561381f5761381f61388f565b604052919050565b6000821982111561384857634e487b7160e01b600052601160045260246000fd5b500190565b60005b83811015613868578181015183820152602001613850565b838111156107d45750506000910152565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146105ef57600080fd5b80151581146105ef57600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212204c9dccbb67ddc08482365cdf6de8410e8afedcb1481ee9a3b9e305e0055a743864736f6c63430008060033",
920
- "deployedBytecode": "0x6080604052600436106101665760003560e01c806379502c55116100d1578063b63d382e1161008a578063f3fef3a311610064578063f3fef3a314610487578063f67b2bad146104a7578063fcbb17fe146104c9578063ffa600e3146104e957600080fd5b8063b63d382e146103ee578063ca143d181461040e578063e5a6b10f1461045457600080fd5b806379502c551461030a5780637a702b3c146103515780638129fc1c146103715780638456cb5914610386578063917876601461039b578063af02808a146103bb57600080fd5b806352bab1941161012357806352bab1941461023e57806352d1902d1461025e5780635b494dd5146102735780635c975abb146102a757806365b71008146102ca5780636af6f1ef146102ea57600080fd5b806324ea54f41461016b5780633659cfe6146101a05780633f4ba83a146101c257806347e7ef24146101d75780634a47a3e0146101f75780634f1ef2861461022b575b600080fd5b34801561017757600080fd5b5061018d60008051602061393083398151915281565b6040519081526020015b60405180910390f35b3480156101ac57600080fd5b506101c06101bb366004613276565b610509565b005b3480156101ce57600080fd5b506101c06105f2565b3480156101e357600080fd5b506101c06101f23660046133f5565b6106a3565b34801561020357600080fd5b5061018d7fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6101c06102393660046132b0565b6107da565b34801561024a57600080fd5b506101c0610259366004613276565b6108a7565b34801561026a57600080fd5b5061018d610c71565b34801561027f57600080fd5b5061018d7f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b3480156102b357600080fd5b5060335460ff166040519015158152602001610197565b3480156102d657600080fd5b506101c06102e5366004613276565b610d24565b3480156102f657600080fd5b506101c0610305366004613421565b610f53565b34801561031657600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610197565b34801561035d57600080fd5b506101c061036c36600461346d565b610fd7565b34801561037d57600080fd5b506101c0610ff9565b34801561039257600080fd5b506101c06110d3565b3480156103a757600080fd5b5061018d6103b63660046134b7565b611169565b3480156103c757600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610339565b3480156103fa57600080fd5b506101c0610409366004613276565b61180f565b34801561041a57600080fd5b50610447610429366004613276565b6001600160a01b0316600090815260c9602052604090205460ff1690565b6040516101979190613631565b34801561046057600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610339565b34801561049357600080fd5b5061018d6104a23660046133f5565b611a8c565b3480156104b357600080fd5b5061018d6000805160206138e983398151915281565b3480156104d557600080fd5b506101c06104e43660046133b8565b611bcf565b3480156104f557600080fd5b506101c061050436600461343e565b611e83565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561055b5760405162461bcd60e51b81526004016105529061368c565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166105a46000805160206138c9833981519152546001600160a01b031690565b6001600160a01b0316146105ca5760405162461bcd60e51b8152600401610552906136d8565b6105d381611eb6565b604080516000808252602082019092526105ef91839190611f60565b50565b60405163c5b8f5cf60e01b8152600080516020613930833981519152600482018190526000805160206138e98339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561067f57600080fd5b505afa158015610693573d6000803e3d6000fd5b5050505061069f6120df565b5050565b6106ab612131565b6001600160a01b038216600090815260c9602052604090205460ff1660018160038111156106db576106db613879565b1461071f5760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b6044820152606401610552565b6107546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338585612179565b6040516311f9fbc960e21b8152336004820152602481018390526001600160a01b038416906347e7ef2490604401602060405180830381600087803b15801561079c57600080fd5b505af11580156107b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d49190613375565b50505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156108235760405162461bcd60e51b81526004016105529061368c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661086c6000805160206138c9833981519152546001600160a01b031690565b6001600160a01b0316146108925760405162461bcd60e51b8152600401610552906136d8565b61089b82611eb6565b61069f82826001611f60565b6040516312d9a6ad60e01b81526000805160206138e983398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561091d57600080fd5b505afa158015610931573d6000803e3d6000fd5b505050506001600160a01b03821661098b5760405162461bcd60e51b815260206004820152601d60248201527f5072656d69756d734163636f756e742063616e2774206265207a65726f0000006044820152606401610552565b306001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b1580156109ce57600080fd5b505afa1580156109e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a069190613293565b6001600160a01b031614610a6c5760405162461bcd60e51b815260206004820152602760248201527f5072656d69756d734163636f756e74206e6f74206c696e6b656420746f2074686044820152661a5cc81c1bdbdb60ca1b6064820152608401610552565b6000826001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610aa757600080fd5b505afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf9190613293565b90506001600160a01b03811615610b4c576040516338ea38a760e21b81526001600160a01b03848116600483015282169063e3a8e29c90602401600060405180830381600087803b158015610b3357600080fd5b505af1158015610b47573d6000803e3d6000fd5b505050505b826001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8557600080fd5b505afa158015610b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbd9190613293565b90506001600160a01b03811615610c2a576040516338ea38a760e21b81526001600160a01b03848116600483015282169063e3a8e29c90602401600060405180830381600087803b158015610c1157600080fd5b505af1158015610c25573d6000803e3d6000fd5b505050505b826001600160a01b03167f834362a634fb37104727a80cf5e936b5b1798edffcf4a89935f19d04eb0e88ec6001604051610c649190613631565b60405180910390a2505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d115760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610552565b506000805160206138c983398151915290565b6040516312d9a6ad60e01b81527f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2760048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015610dac57600080fd5b505afa158015610dc0573d6000803e3d6000fd5b505050506001600160a01b038216600090815260c9602052604090205460ff166002816003811115610df457610df4613879565b14610e395760405162461bcd60e51b815260206004820152601560248201527411551bdad95b881b9bdd0819195c1c9958d85d1959605a1b6044820152606401610552565b826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7257600080fd5b505afa158015610e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaa9190613375565b15610f065760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b6064820152608401610552565b6001600160a01b038316600081815260c96020526040808220805460ff19169055517f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c91610c6491613631565b610f5b612131565b42610f6e6101c083016101a08401613515565b64ffffffffff161115610fbc5760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610552565b6105ef610fce3683900383018361349a565b600060016121d3565b610fdf612131565b61069f610ff13684900384018461349a565b8260006121d3565b600054610100900460ff16158080156110195750600054600160ff909116105b806110335750303b158015611033575060005460ff166001145b61104f5760405162461bcd60e51b815260040161055290613724565b6000805460ff191660011790558015611072576000805461ff0019166101001790555b61107a6126a8565b6110826126cf565b61108a6126fe565b80156105ef576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a150565b6040516312d9a6ad60e01b815260008051602061393083398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561114957600080fd5b505afa15801561115d573d6000803e3d6000fd5b505050506105ef61289f565b6000611173612131565b6101608401516001600160a01b03811633146111dd5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b6064820152608401610552565b604051635dfdc5d760e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063bbfb8bae9060240160006040518083038186803b15801561123e57600080fd5b505afa158015611252573d6000803e3d6000fd5b50505050826bffffffffffffffffffffffff166060826001600160a01b0316901b61127d9190613827565b8552611288856128dc565b60ca600087600001518152602001908152602001600020819055506000816001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b1580156112de57600080fd5b505afa1580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113169190613293565b60405163e3638ea360e01b81529091506001600160a01b0382169063e3638ea3906113459089906004016137bd565b600060405180830381600087803b15801561135f57600080fd5b505af1158015611373573d6000803e3d6000fd5b50508751604051632851206560e21b81526001600160a01b03898116600483015260248201929092527f0000000000000000000000000000000000000000000000000000000000000000909116925063a14481949150604401600060405180830381600087803b1580156113e657600080fd5b505af11580156113fa573d6000803e3d6000fd5b50505060c087015161143b91506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169087908490612179565b610140860151156114f3576114f385826001600160a01b0316637b83037b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561148357600080fd5b505afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190613293565b6101408901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612179565b610120860151156115ab576115ab85826001600160a01b031663536ebbfc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153b57600080fd5b505afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115739190613293565b6101208901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612179565b611677857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561160857600080fd5b505afa15801561161c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116409190613293565b60e08901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612179565b600086610100015111801561170e5750816001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b1580156116c057600080fd5b505afa1580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f89190613293565b6001600160a01b0316856001600160a01b031614155b156117c0576117c085836001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b15801561175057600080fd5b505afa158015611764573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117889190613293565b6101008901516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612179565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b876040516117f991906137bd565b60405180910390a25050835190505b9392505050565b6040516312d9a6ad60e01b81526000805160206138e983398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561188557600080fd5b505afa158015611899573d6000803e3d6000fd5b5050506001600160a01b038316600090815260c9602052604081205460ff1691508160038111156118cc576118cc613879565b146119195760405162461bcd60e51b815260206004820152601a60248201527f65546f6b656e20616c726561647920696e2074686520706f6f6c0000000000006044820152606401610552565b6001600160a01b0383166119665760405162461bcd60e51b815260206004820152601460248201527365546f6b656e2063616e2774206265207a65726f60601b6044820152606401610552565b306001600160a01b0316836001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b1580156119a957600080fd5b505afa1580156119bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e19190613293565b6001600160a01b031614611a375760405162461bcd60e51b815260206004820152601e60248201527f45546f6b656e206e6f74206c696e6b656420746f207468697320706f6f6c00006044820152606401610552565b6001600160a01b038316600081815260c9602052604090819020805460ff1916600190811790915590517f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c91610c6491613631565b6000611a96612131565b6001600160a01b038316600090815260c9602052604090205460ff166001816003811115611ac657611ac6613879565b1480611ae357506002816003811115611ae157611ae1613879565b145b611b415760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608401610552565b60405163f3fef3a360e01b8152336004820181905260248201859052906001600160a01b0386169063f3fef3a390604401602060405180830381600087803b158015611b8c57600080fd5b505af1158015611ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc49190613375565b925050505b92915050565b60405163c5b8f5cf60e01b8152600080516020613930833981519152600482018190526000805160206138e98339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015611c5c57600080fd5b505afa158015611c70573d6000803e3d6000fd5b5050506001600160a01b038516600090815260c9602052604081205460ff169150816003811115611ca357611ca3613879565b1415611ce45760405162461bcd60e51b815260206004820152601060248201526f11551bdad95b881b9bdd08199bdd5b9960821b6044820152606401610552565b6003846003811115611cf857611cf8613879565b141580611dab5750604051632474521560e21b815260008051602061393083398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b158015611d7357600080fd5b505afa158015611d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dab9190613358565b611e015760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920475541524449414e2063616e2073757370656e642065546f6b656e6044820152607360f81b6064820152608401610552565b6001600160a01b038516600090815260c960205260409020805485919060ff19166001836003811115611e3657611e36613879565b0217905550846001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c85604051611e749190613631565b60405180910390a25050505050565b611e8b612131565b61069f611e9d3684900384018461349a565b82611ea9576000611eaf565b83602001355b60006121d3565b60405163c5b8f5cf60e01b8152600080516020613930833981519152600482018190526000805160206138e98339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015611f4357600080fd5b505afa158015611f57573d6000803e3d6000fd5b50505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611f9857611f938361290c565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fd157600080fd5b505afa925050508015612001575060408051601f3d908101601f19168201909252611ffe91810190613375565b60015b6120645760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610552565b6000805160206138c983398151915281146120d35760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610552565b50611f938383836129a8565b6120e76129cd565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60335460ff16156121775760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610552565b565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526107d4908590612a16565b6121dc83612ae8565b61016083015181806121f657506001600160a01b03811633145b6122425760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c69636965736044820152606401610552565b82158061225a575042846101a0015164ffffffffff16115b6122a65760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c69637900000000000000006044820152606401610552565b6040516310f199ef60e31b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063878ccf789060240160006040518083038186803b15801561230757600080fd5b505afa15801561231b573d6000803e3d6000fd5b50505050836020015183111561236c5760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b6044820152606401610552565b82158015906124f25784516040516331a9108f60e11b81526000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636352211e916123c89160040190815260200190565b60206040518083038186803b1580156123e057600080fd5b505afa1580156123f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124189190613293565b9050826001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561245357600080fd5b505afa158015612467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248b9190613293565b6001600160a01b0316639d8c5ee78288886040518463ffffffff1660e01b81526004016124ba93929190613604565b600060405180830381600087803b1580156124d457600080fd5b505af11580156124e8573d6000803e3d6000fd5b50505050506125c1565b816001600160a01b03166373a952e86040518163ffffffff1660e01b815260040160206040518083038186803b15801561252b57600080fd5b505afa15801561253f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125639190613293565b6001600160a01b031663c7a9c70d866040518263ffffffff1660e01b815260040161258e91906137bd565b600060405180830381600087803b1580156125a857600080fd5b505af11580156125bc573d6000803e3d6000fd5b505050505b6020850151604051636a448ef160e01b815260048101919091526001600160a01b03831690636a448ef190602401600060405180830381600087803b15801561260957600080fd5b505af115801561261d573d6000803e3d6000fd5b5050505084600001518561016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e8660405161266691815260200190565b60405180910390a38451600090815260ca602052604081205583156126965784516126919085612b4e565b6126a1565b84516126a190612d4c565b5050505050565b600054610100900460ff166121775760405162461bcd60e51b815260040161055290613772565b600054610100900460ff166126f65760405162461bcd60e51b815260040161055290613772565b612177612e92565b600054610100900460ff161580801561271e5750600054600160ff909116105b806127385750303b158015612738575060005460ff166001145b6127545760405162461bcd60e51b815260040161055290613724565b6000805460ff191660011790558015612777576000805461ff0019166101001790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156127d257600080fd5b505af11580156127e6573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561284557600080fd5b505af1158015612859573d6000803e3d6000fd5b5050505080156105ef576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016110c8565b6128a7612131565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121143390565b6000816040516020016128ef91906137bd565b604051602081830303815290604052805190602001209050919050565b6001600160a01b0381163b6129795760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610552565b6000805160206138c983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6129b183612ec5565b6000825111806129be5750805b15611f93576107d48383612f05565b60335460ff166121775760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610552565b6000612a6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612ff09092919063ffffffff16565b805190915015611f935780806020019051810190612a899190613358565b611f935760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610552565b805115801590612b0f57508051600090815260ca6020526040902054612b0d826128dc565b145b6105ef5760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610552565b6040516331a9108f60e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b158015612bb157600080fd5b505afa158015612bc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be99190613293565b90506001600160a01b0381163b612bff57505050565b6001600160a01b03811663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044810186905260648101859052608401602060405180830381600087803b158015612c6457600080fd5b505af1925050508015612c94575060408051601f3d908101601f19168201909252612c919181019061338e565b60015b612cdc573d808015612cc2576040519150601f19603f3d011682016040523d82523d6000602084013e612cc7565b606091505b508051612cd45750505050565b805181602001fd5b6001600160e01b03198116636b140e9f60e11b146107d45760405162461bcd60e51b815260206004820152602760248201527f496e76616c69642072657475726e2076616c75652066726f6d20506f6c696379604482015266102437b63232b960c91b6064820152608401610552565b6040516331a9108f60e11b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b158015612daf57600080fd5b505afa158015612dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de79190613293565b90506001600160a01b0381163b612dfc575050565b6001600160a01b03811663e8e617b7336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101859052606401602060405180830381600087803b158015612e5a57600080fd5b505af1925050508015612e8a575060408051601f3d908101601f19168201909252612e879181019061338e565b60015b611f93575050565b600054610100900460ff16612eb95760405162461bcd60e51b815260040161055290613772565b6033805460ff19169055565b612ece8161290c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b612f6d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610552565b600080846001600160a01b031684604051612f8891906135e8565b600060405180830381855af49150503d8060008114612fc3576040519150601f19603f3d011682016040523d82523d6000602084013e612fc8565b606091505b5091509150611bc4828260405180606001604052806027815260200161390960279139613007565b6060612fff8484600085613040565b949350505050565b60608315613016575081611808565b8251156130265782518084602001fd5b8160405162461bcd60e51b81526004016105529190613659565b6060824710156130a15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610552565b6001600160a01b0385163b6130f85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610552565b600080866001600160a01b0316858760405161311491906135e8565b60006040518083038185875af1925050503d8060008114613151576040519150601f19603f3d011682016040523d82523d6000602084013e613156565b606091505b5091509150613166828286613007565b979650505050505050565b803561317c816138a5565b919050565b60006101c0828403121561319457600080fd5b50919050565b60006101c082840312156131ad57600080fd5b6131b56137cc565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301358183015250610160613233818401613171565b90820152610180613245838201613261565b908201526101a0613257838201613261565b9082015292915050565b803564ffffffffff8116811461317c57600080fd5b60006020828403121561328857600080fd5b8135611808816138a5565b6000602082840312156132a557600080fd5b8151611808816138a5565b600080604083850312156132c357600080fd5b82356132ce816138a5565b915060208381013567ffffffffffffffff808211156132ec57600080fd5b818601915086601f83011261330057600080fd5b8135818111156133125761331261388f565b613324601f8201601f191685016137f6565b9150808252878482850101111561333a57600080fd5b80848401858401376000848284010152508093505050509250929050565b60006020828403121561336a57600080fd5b8151611808816138ba565b60006020828403121561338757600080fd5b5051919050565b6000602082840312156133a057600080fd5b81516001600160e01b03198116811461180857600080fd5b600080604083850312156133cb57600080fd5b82356133d6816138a5565b91506020830135600481106133ea57600080fd5b809150509250929050565b6000806040838503121561340857600080fd5b8235613413816138a5565b946020939093013593505050565b60006101c0828403121561343457600080fd5b6118088383613181565b6000806101e0838503121561345257600080fd5b61345c8484613181565b91506101c08301356133ea816138ba565b6000806101e0838503121561348157600080fd5b61348b8484613181565b946101c0939093013593505050565b60006101c082840312156134ad57600080fd5b611808838361319a565b600080600061020084860312156134cd57600080fd5b6134d7858561319a565b92506101c08401356134e8816138a5565b91506101e08401356bffffffffffffffffffffffff8116811461350a57600080fd5b809150509250925092565b60006020828403121561352757600080fd5b61180882613261565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e0830152610100808201518184015250610120808201518184015250610140808201518184015250610160808201516135b9828501826001600160a01b03169052565b50506101808181015164ffffffffff81168483015250506101a08181015164ffffffffff8116848301526107d4565b600082516135fa81846020870161384d565b9190910192915050565b6001600160a01b038416815261020081016136226020830185613530565b826101e0830152949350505050565b602081016004831061365357634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000825180602084015261367881604085016020870161384d565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6101c08101611bc98284613530565b6040516101c0810167ffffffffffffffff811182821017156137f0576137f061388f565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561381f5761381f61388f565b604052919050565b6000821982111561384857634e487b7160e01b600052601160045260246000fd5b500190565b60005b83811015613868578181015183820152602001613850565b838111156107d45750506000910152565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146105ef57600080fd5b80151581146105ef57600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212204c9dccbb67ddc08482365cdf6de8410e8afedcb1481ee9a3b9e305e0055a743864736f6c63430008060033",
1295
+ "bytecode": "0x60e0604052306080523480156200001557600080fd5b506040516200516038038062005160833981016040819052620000389162000069565b6001600160a01b0391821660a0521660c052620000a8565b6001600160a01b03811681146200006657600080fd5b50565b600080604083850312156200007d57600080fd5b82516200008a8162000050565b60208401519092506200009d8162000050565b809150509250929050565b60805160a05160c051614ffc62000164600039600081816106d501528181610d05015281816116b501528181611760015281816118090152818161184801526119790152600081816105c801528181610be401528181610f5d01528181611083015281816111520152818161122101528181611a8e01528181611eb201528181612540015281816126d40152612d6f015260008181610ae701528181610b2701528181610dc001528181610e000152610e8f0152614ffc6000f3fe6080604052600436106102305760003560e01c80636352211e1161012e57806395d89b41116100ab578063e985e9c51161006f578063e985e9c5146106f9578063f0f4426014610719578063f3fef3a314610739578063f67b2bad14610759578063ffa600e31461077b57600080fd5b806395d89b4114610651578063a22cb46514610666578063b88d4fde14610686578063c87b56dd146106a6578063e5a6b10f146106c657600080fd5b806370a08231116100f257806370a082311461059957806371907f17146105b95780637a702b3c146105ec57806382afd23b1461060c5780638456cb591461063c57600080fd5b80636352211e146104f95780636769a76f146105195780636af6f1ef146105395780636b8734e7146105595780636f86c8971461057957600080fd5b80633f4ba83a116101bc57806352d1902d1161018057806352d1902d146104595780635b494dd51461046e5780635c975abb146104a25780635fcbf445146104ba57806361d027b3146104da57600080fd5b80633f4ba83a146103bd57806342842e0e146103d257806347e7ef24146103f25780634a47a3e0146104125780634f1ef2861461044657600080fd5b8063095ea7b311610203578063095ea7b3146102e657806323b872dd1461030657806324ea54f41461032657806333d6157a146103565780633659cfe61461039d57600080fd5b806301ffc9a71461023557806306fdde031461026a578063077f224a1461028c578063081812fc146102ae575b600080fd5b34801561024157600080fd5b5061025561025036600461431b565b61079b565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f6107ed565b6040516102619190614388565b34801561029857600080fd5b506102ac6102a736600461447d565b61087f565b005b3480156102ba57600080fd5b506102ce6102c93660046144f5565b610970565b6040516001600160a01b039091168152602001610261565b3480156102f257600080fd5b506102ac61030136600461450e565b610997565b34801561031257600080fd5b506102ac61032136600461453a565b610aac565b34801561033257600080fd5b50610348600080516020614fa783398151915281565b604051908152602001610261565b34801561036257600080fd5b5061039061037136600461457b565b6001600160a01b0316600090815261012e602052604090205460ff1690565b60405161026191906145cc565b3480156103a957600080fd5b506102ac6103b836600461457b565b610add565b3480156103c957600080fd5b506102ac610bbc565b3480156103de57600080fd5b506102ac6103ed36600461453a565b610c7d565b3480156103fe57600080fd5b506102ac61040d36600461450e565b610c98565b34801561041e57600080fd5b506103487fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102ac6104543660046145df565b610db6565b34801561046557600080fd5b50610348610e82565b34801561047a57600080fd5b506103487f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b3480156104ae57600080fd5b5060335460ff16610255565b3480156104c657600080fd5b506102ac6104d536600461463c565b610f35565b3480156104e657600080fd5b5061012d546001600160a01b03166102ce565b34801561050557600080fd5b506102ce6105143660046144f5565b6113ae565b34801561052557600080fd5b50610348610534366004614761565b61140e565b34801561054557600080fd5b506102ac6105543660046147ea565b6119f1565b34801561056557600080fd5b506102ac61057436600461463c565b611a75565b34801561058557600080fd5b506102ac61059436600461457b565b611e99565b3480156105a557600080fd5b506103486105b436600461457b565b61247f565b3480156105c557600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102ce565b3480156105f857600080fd5b506102ac610607366004614807565b612505565b34801561061857600080fd5b506102556106273660046144f5565b600090815261012f6020526040902054151590565b34801561064857600080fd5b506102ac612527565b34801561065d57600080fd5b5061027f6125cc565b34801561067257600080fd5b506102ac610681366004614842565b6125db565b34801561069257600080fd5b506102ac6106a1366004614870565b6125e6565b3480156106b257600080fd5b5061027f6106c13660046144f5565b612618565b3480156106d257600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102ce565b34801561070557600080fd5b506102556107143660046148dc565b61268c565b34801561072557600080fd5b506102ac61073436600461457b565b6126bb565b34801561074557600080fd5b5061034861075436600461450e565b6127b2565b34801561076557600080fd5b50610348600080516020614f6083398151915281565b34801561078757600080fd5b506102ac61079636600461490a565b6128db565b60006001600160e01b031982166380ac58cd60e01b14806107cc57506001600160e01b03198216635b5e139f60e01b145b806107e757506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060fb80546107fc90614939565b80601f016020809104026020016040519081016040528092919081815260200182805461082890614939565b80156108755780601f1061084a57610100808354040283529160200191610875565b820191906000526020600020905b81548152906001019060200180831161085857829003601f168201915b5050505050905090565b600054610100900460ff161580801561089f5750600054600160ff909116105b806108b95750303b1580156108b9575060005460ff166001145b6108de5760405162461bcd60e51b81526004016108d59061496d565b60405180910390fd5b6000805460ff191660011790558015610901576000805461ff0019166101001790555b61090961290e565b6109138484612937565b61091b612968565b61092482612997565b801561096a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b600061097b82612a75565b50600090815260ff60205260409020546001600160a01b031690565b60006109a2826113ae565b9050806001600160a01b0316836001600160a01b031603610a0f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108d5565b336001600160a01b0382161480610a2b5750610a2b813361268c565b610a9d5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016108d5565b610aa78383612ad4565b505050565b610ab63382612b42565b610ad25760405162461bcd60e51b81526004016108d5906149bb565b610aa7838383612ba0565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b255760405162461bcd60e51b81526004016108d590614a09565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b6e600080516020614f40833981519152546001600160a01b031690565b6001600160a01b031614610b945760405162461bcd60e51b81526004016108d590614a55565b610b9d81612d47565b60408051600080825260208201909252610bb991839190612e01565b50565b600080516020614fa7833981519152600080516020614f608339815191526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b0316604482015260640160006040518083038186803b158015610c5957600080fd5b505afa158015610c6d573d6000803e3d6000fd5b50505050610c79612f6c565b5050565b610aa7838383604051806020016040528060008152506125e6565b610ca0612fbe565b6001610cab83613004565b6003811115610cbc57610cbc614598565b14610d005760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b60448201526064016108d5565b610d357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316338484613091565b6001600160a01b0382166347e7ef24336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa79190614aa1565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610dfe5760405162461bcd60e51b81526004016108d590614a09565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e47600080516020614f40833981519152546001600160a01b031690565b6001600160a01b031614610e6d5760405162461bcd60e51b81526004016108d590614a55565b610e7682612d47565b610c7982826001612e01565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f225760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108d5565b50600080516020614f4083398151915290565b600080516020614fa7833981519152600080516020614f608339815191526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b0316604482015260640160006040518083038186803b158015610fd257600080fd5b505afa158015610fe6573d6000803e3d6000fd5b5050506001600160a01b038516600090815261012e602052604081209150815460ff16600381111561101a5761101a614598565b0361105d5760405162461bcd60e51b815260206004820152601360248201527210dbdb5c1bdb995b9d081b9bdd08199bdd5b99606a1b60448201526064016108d5565b600184600381111561107157611071614598565b14801561112657506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166391d14854600080516020614f60833981519152336040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190614aba565b806111f55750600384600381111561114057611140614598565b1480156111f557506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166391d14854600080516020614fa7833981519152336040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156111d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f59190614aba565b806112c45750600284600381111561120f5761120f614598565b1480156112c457506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166391d14854600080516020614f60833981519152336040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190614aba565b6113365760405162461bcd60e51b815260206004820152603e60248201527f4f6e6c7920475541524449414e2063616e2073757370656e64202f204f6e6c7960448201527f204c4556454c312063616e2061637469766174652f646570726563617465000060648201526084016108d5565b80548490829060ff1916600183600381111561135457611354614598565b021790555080546040516001600160a01b038716917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef9161139f91610100900460ff16908890614ad7565b60405180910390a25050505050565b600081815260fd60205260408120546001600160a01b0316806107e75760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108d5565b6000611418612fbe565b6101608501516001600160a01b03811633146114825760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b60648201526084016108d5565b600161148d826130eb565b600381111561149e5761149e614598565b146114f55760405162461bcd60e51b815260206004820152602160248201527f524d206d6f64756c65206e6f7420666f756e64206f72206e6f742061637469766044820152606560f81b60648201526084016108d5565b6115206bffffffffffffffffffffffff84166bffffffffffffffffffffffff19606084901b16614b13565b865261152b8661316e565b61012f600088600001518152602001908152602001600020819055506000816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab9190614b26565b905060016115b88261319e565b60038111156115c9576115c9614598565b146116265760405162461bcd60e51b815260206004820152602760248201527f5072656d69756d734163636f756e74206e6f7420666f756e64206f72206e6f746044820152662061637469766560c81b60648201526084016108d5565b60405163e3638ea360e01b81526001600160a01b0382169063e3638ea390611652908a90600401614bfb565b600060405180830381600087803b15801561166c57600080fd5b505af1158015611680573d6000803e3d6000fd5b505050506116a28588600001516040518060200160405280600081525061322c565b60c08701516116df906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169088908490613091565b610140870151156117885761178886826001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117509190614b26565b6101408a01516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613091565b610120870151156118315761183186826001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f99190614b26565b6101208a01516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613091565b61012d5460e0880151611876916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116928a929190911690613091565b60008761010001511180156118fe5750816001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e89190614b26565b6001600160a01b0316866001600160a01b031614155b156119a1576119a186836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119699190614b26565b6101008a01516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613091565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b886040516119da9190614bfb565b60405180910390a25050845190505b949350505050565b6119f9612fbe565b42611a0c6101c083016101a08401614c0a565b64ffffffffff161115611a5a5760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b60448201526064016108d5565b610bb9611a6c36839003830183614c25565b6000600161325f565b600080516020614f608339815191526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015611afa57600080fd5b505afa158015611b0e573d6000803e3d6000fd5b5050506001600160a01b038416600090815261012e602052604081209150815460ff166003811115611b4257611b42614598565b14611b8f5760405162461bcd60e51b815260206004820152601d60248201527f436f6d706f6e656e7420616c726561647920696e2074686520706f6f6c00000060448201526064016108d5565b306001600160a01b0316846001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfb9190614b26565b6001600160a01b031614611c5b5760405162461bcd60e51b815260206004820152602160248201527f436f6d706f6e656e74206e6f74206c696e6b656420746f207468697320706f6f6044820152601b60fa1b60648201526084016108d5565b8054600160ff198216811783558491839161ffff1990911617610100836003811115611c8957611c89614598565b02179055506003836003811115611ca257611ca2614598565b03611e4f5760008490506000816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d109190614b26565b90506001600160a01b03811615611d7d576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c90602401600060405180830381600087803b158015611d6457600080fd5b505af1158015611d78573d6000803e3d6000fd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddf9190614b26565b90506001600160a01b03811615611e4c576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c90602401600060405180830381600087803b158015611e3357600080fd5b505af1158015611e47573d6000803e3d6000fd5b505050505b50505b836001600160a01b03167ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef846001604051611e8b929190614ad7565b60405180910390a250505050565b600080516020614f608339815191526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015611f1e57600080fd5b505afa158015611f32573d6000803e3d6000fd5b505050506001600160a01b038216600090815261012e602052604090206002815460ff166003811115611f6757611f67614598565b14611fb45760405162461bcd60e51b815260206004820152601860248201527f436f6d706f6e656e74206e6f742064657072656361746564000000000000000060448201526064016108d5565b60018154610100900460ff166003811115611fd157611fd1614598565b0361209957826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120389190614aa1565b156120945760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b60648201526084016108d5565b61240b565b60028154610100900460ff1660038111156120b6576120b6614598565b0361217d57826001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211d9190614aa1565b156120945760405162461bcd60e51b815260206004820152602a60248201527f43616e27742072656d6f76652061206d6f64756c6520776974682061637469766044820152696520706f6c696369657360b01b60648201526084016108d5565b60038154610100900460ff16600381111561219a5761219a614598565b0361240b576000839050806001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122069190614aa1565b156122685760405162461bcd60e51b815260206004820152602c60248201527f43616e27742072656d6f76652061205072656d69756d734163636f756e74207760448201526b697468207072656d69756d7360a01b60648201526084016108d5565b6000816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cc9190614b26565b90506001600160a01b03811615612339576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc5590602401600060405180830381600087803b15801561232057600080fd5b505af1158015612334573d6000803e3d6000fd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239b9190614b26565b90506001600160a01b03811615612408576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc5590602401600060405180830381600087803b1580156123ef57600080fd5b505af1158015612403573d6000803e3d6000fd5b505050505b50505b80546040516001600160a01b038516917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef9161245291610100900460ff1690600090614ad7565b60405180910390a250506001600160a01b0316600090815261012e60205260409020805461ffff19169055565b60006001600160a01b0382166124e95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108d5565b506001600160a01b0316600090815260fe602052604090205490565b61250d612fbe565b610c7961251f36849003840184614c25565b82600061325f565b600080516020614fa78339815191526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b1580156125ac57600080fd5b505afa1580156125c0573d6000803e3d6000fd5b50505050610bb9613716565b606060fc80546107fc90614939565b610c79338383613753565b6125f03383612b42565b61260c5760405162461bcd60e51b81526004016108d5906149bb565b61096a84848484613822565b606061262382612a75565b600061263a60408051602081019091526000815290565b9050600081511161265a5760405180602001604052806000815250612685565b8061266484613855565b604051602001612675929190614c42565b6040516020818303038152906040525b9392505050565b6001600160a01b0391821660009081526101006020908152604080832093909416825291909152205460ff1690565b600080516020614f608339815191526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b15801561274057600080fd5b505afa158015612754573d6000803e3d6000fd5b505061012d80546001600160a01b0386166001600160a01b03199091168117909155604051908152600192507fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f915060200160405180910390a25050565b60006127bc612fbe565b60006127c784613004565b905060018160038111156127dd576127dd614598565b14806127fa575060028160038111156127f8576127f8614598565b145b6128585760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b60648201526084016108d5565b60003360405163f3fef3a360e01b81526001600160a01b038083166004830152602482018790529192509086169063f3fef3a3906044016020604051808303816000875af11580156128ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d29190614aa1565b95945050505050565b6128e3612fbe565b610c796128f536849003840184614c25565b82612901576000612907565b83602001355b600061325f565b600054610100900460ff166129355760405162461bcd60e51b81526004016108d590614c71565b565b600054610100900460ff1661295e5760405162461bcd60e51b81526004016108d590614c71565b610c798282613956565b600054610100900460ff1661298f5760405162461bcd60e51b81526004016108d590614c71565b612935613996565b600054610100900460ff16158080156129b75750600054600160ff909116105b806129d15750303b1580156129d1575060005460ff166001145b6129ed5760405162461bcd60e51b81526004016108d59061496d565b6000805460ff191660011790558015612a10576000805461ff0019166101001790555b61012d80546001600160a01b0319166001600160a01b0384161790558015610c79576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600081815260fd60205260409020546001600160a01b0316610bb95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108d5565b600081815260ff6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612b09826113ae565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612b4e836113ae565b9050806001600160a01b0316846001600160a01b03161480612b755750612b75818561268c565b806119e95750836001600160a01b0316612b8e84610970565b6001600160a01b031614949350505050565b826001600160a01b0316612bb3826113ae565b6001600160a01b031614612c175760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016108d5565b6001600160a01b038216612c795760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108d5565b612c848383836139c9565b612c8f600082612ad4565b6001600160a01b038316600090815260fe60205260408120805460019290612cb8908490614cbc565b90915550506001600160a01b038216600090815260fe60205260408120805460019290612ce6908490614b13565b9091555050600081815260fd602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080516020614fa7833981519152600080516020614f608339815191526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b0316604482015260640160006040518083038186803b158015612de457600080fd5b505afa158015612df8573d6000803e3d6000fd5b50505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612e3457610aa7836139d1565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612e8e575060408051601f3d908101601f19168201909252612e8b91810190614aa1565b60015b612ef15760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108d5565b600080516020614f408339815191528114612f605760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108d5565b50610aa7838383613a6d565b612f74613a92565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60335460ff16156129355760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108d5565b6001600160a01b038116600090815261012e6020526040812060018154610100900460ff16600381111561303a5761303a614598565b146130875760405162461bcd60e51b815260206004820152601a60248201527f436f6d706f6e656e74206973206e6f7420616e2065546f6b656e00000000000060448201526064016108d5565b5460ff1692915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261096a908590613adb565b6001600160a01b038116600090815261012e6020526040812060028154610100900460ff16600381111561312157613121614598565b146130875760405162461bcd60e51b815260206004820152601d60248201527f436f6d706f6e656e74206973206e6f742061205269736b4d6f64756c6500000060448201526064016108d5565b6000816040516020016131819190614bfb565b604051602081830303815290604052805190602001209050919050565b6001600160a01b038116600090815261012e6020526040812060038154610100900460ff1660038111156131d4576131d4614598565b146130875760405162461bcd60e51b815260206004820152602260248201527f436f6d706f6e656e74206973206e6f742061205072656d69756d734163636f756044820152611b9d60f21b60648201526084016108d5565b6132368383613bad565b6132436000848484613cfb565b610aa75760405162461bcd60e51b81526004016108d590614ccf565b61326883613df9565b610160830151818061328257506001600160a01b03811633145b6132ce5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c696369657360448201526064016108d5565b8215806132e6575042846101a0015164ffffffffff16115b6133325760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c696379000000000000000060448201526064016108d5565b600061333d826130eb565b9050600181600381111561335357613353614598565b14806133705750600281600381111561336e5761336e614598565b145b6133e25760405162461bcd60e51b815260206004820152603a60248201527f4d6f64756c65206d75737420626520616374697665206f72206465707265636160448201527f74656420746f2070726f63657373207265736f6c7574696f6e7300000000000060648201526084016108d5565b846020015184111561342f5760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b60448201526064016108d5565b600080851190506000836001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061349a9190614b26565b90506134a58161319e565b925060018360038111156134bb576134bb614598565b14806134d8575060028360038111156134d6576134d6614598565b145b6135565760405162461bcd60e51b815260206004820152604360248201527f5072656d69756d734163636f756e74206d75737420626520616374697665206f60448201527f72206465707265636174656420746f2070726f63657373207265736f6c7574696064820152626f6e7360e81b608482015260a4016108d5565b81156135d657600061356b88600001516113ae565b604051639d8c5ee760e01b81529091506001600160a01b03831690639d8c5ee79061359e9084908c908c90600401614d21565b600060405180830381600087803b1580156135b857600080fd5b505af11580156135cc573d6000803e3d6000fd5b5050505050613635565b60405163c7a9c70d60e01b81526001600160a01b0382169063c7a9c70d90613602908a90600401614bfb565b600060405180830381600087803b15801561361c57600080fd5b505af1158015613630573d6000803e3d6000fd5b505050505b6020870151604051636a448ef160e01b815260048101919091526001600160a01b03851690636a448ef190602401600060405180830381600087803b15801561367d57600080fd5b505af1158015613691573d6000803e3d6000fd5b5050505086600001518761016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e886040516136da91815260200190565b60405180910390a38651600090815261012f6020526040812055851561370b5786516137069087613e60565b612df8565b8651612df890613fba565b61371e612fbe565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612fa13390565b816001600160a01b0316836001600160a01b0316036137b45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d5565b6001600160a01b0383811660008181526101006020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61382d848484612ba0565b61383984848484613cfb565b61096a5760405162461bcd60e51b81526004016108d590614ccf565b60608160000361387c5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156138a6578061389081614d4e565b915061389f9050600a83614d7d565b9150613880565b60008167ffffffffffffffff8111156138c1576138c161439b565b6040519080825280601f01601f1916602001820160405280156138eb576020820181803683370190505b5090505b84156119e957613900600183614cbc565b915061390d600a86614d91565b613918906030614b13565b60f81b81838151811061392d5761392d614da5565b60200101906001600160f81b031916908160001a90535061394f600a86614d7d565b94506138ef565b600054610100900460ff1661397d5760405162461bcd60e51b81526004016108d590614c71565b60fb6139898382614e09565b5060fc610aa78282614e09565b600054610100900460ff166139bd5760405162461bcd60e51b81526004016108d590614c71565b6033805460ff19169055565b610aa7612fbe565b6001600160a01b0381163b613a3e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108d5565b600080516020614f4083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613a7683614061565b600082511180613a835750805b15610aa75761096a83836140a1565b60335460ff166129355760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108d5565b6000613b30826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661418c9092919063ffffffff16565b805190915015610aa75780806020019051810190613b4e9190614aba565b610aa75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108d5565b6001600160a01b038216613c035760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d5565b600081815260fd60205260409020546001600160a01b031615613c685760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d5565b613c74600083836139c9565b6001600160a01b038216600090815260fe60205260408120805460019290613c9d908490614b13565b9091555050600081815260fd602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15613df157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613d3f903390899088908890600401614ec9565b6020604051808303816000875af1925050508015613d7a575060408051601f3d908101601f19168201909252613d7791810190614f06565b60015b613dd7573d808015613da8576040519150601f19603f3d011682016040523d82523d6000602084013e613dad565b606091505b508051600003613dcf5760405162461bcd60e51b81526004016108d590614ccf565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119e9565b5060016119e9565b805115801590613e2157508051600090815261012f6020526040902054613e1f8261316e565b145b610bb95760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b60448201526064016108d5565b6000613e6b836113ae565b90506001600160a01b0381163b613e8157505050565b6001600160a01b03811663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101869052606481018590526084016020604051808303816000875af1925050508015613f07575060408051601f3d908101601f19168201909252613f0491810190614f06565b60015b613f4a573d808015613f35576040519150601f19603f3d011682016040523d82523d6000602084013e613f3a565b606091505b508051600003613dcf5750505050565b6001600160e01b03198116636b140e9f60e11b1461096a5760405162461bcd60e51b815260206004820152602760248201527f496e76616c69642072657475726e2076616c75652066726f6d20506f6c696379604482015266102437b63232b960c91b60648201526084016108d5565b6000613fc5826113ae565b90506001600160a01b0381163b613fda575050565b6001600160a01b03811663e8e617b7336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018590526064016020604051808303816000875af1925050508015614059575060408051601f3d908101601f1916820190925261405691810190614f06565b60015b610aa7575050565b61406a816139d1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6141095760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016108d5565b600080846001600160a01b0316846040516141249190614f23565b600060405180830381855af49150503d806000811461415f576040519150601f19603f3d011682016040523d82523d6000602084013e614164565b606091505b50915091506128d28282604051806060016040528060278152602001614f806027913961419b565b60606119e984846000856141d4565b606083156141aa575081612685565b8251156141ba5782518084602001fd5b8160405162461bcd60e51b81526004016108d59190614388565b6060824710156142355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108d5565b6001600160a01b0385163b61428c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d5565b600080866001600160a01b031685876040516142a89190614f23565b60006040518083038185875af1925050503d80600081146142e5576040519150601f19603f3d011682016040523d82523d6000602084013e6142ea565b606091505b50915091506142fa82828661419b565b979650505050505050565b6001600160e01b031981168114610bb957600080fd5b60006020828403121561432d57600080fd5b813561268581614305565b60005b8381101561435357818101518382015260200161433b565b50506000910152565b60008151808452614374816020860160208601614338565b601f01601f19169290920160200192915050565b602081526000612685602083018461435c565b634e487b7160e01b600052604160045260246000fd5b6040516101c0810167ffffffffffffffff811182821017156143d5576143d561439b565b60405290565b600082601f8301126143ec57600080fd5b813567ffffffffffffffff808211156144075761440761439b565b604051601f8301601f19908116603f0116810190828211818310171561442f5761442f61439b565b8160405283815286602085880101111561444857600080fd5b836020870160208301376000602085830101528094505050505092915050565b6001600160a01b0381168114610bb957600080fd5b60008060006060848603121561449257600080fd5b833567ffffffffffffffff808211156144aa57600080fd5b6144b6878388016143db565b945060208601359150808211156144cc57600080fd5b506144d9868287016143db565b92505060408401356144ea81614468565b809150509250925092565b60006020828403121561450757600080fd5b5035919050565b6000806040838503121561452157600080fd5b823561452c81614468565b946020939093013593505050565b60008060006060848603121561454f57600080fd5b833561455a81614468565b9250602084013561456a81614468565b929592945050506040919091013590565b60006020828403121561458d57600080fd5b813561268581614468565b634e487b7160e01b600052602160045260246000fd5b60048110610bb957634e487b7160e01b600052602160045260246000fd5b602081016145d9836145ae565b91905290565b600080604083850312156145f257600080fd5b82356145fd81614468565b9150602083013567ffffffffffffffff81111561461957600080fd5b614625858286016143db565b9150509250929050565b60048110610bb957600080fd5b6000806040838503121561464f57600080fd5b823561465a81614468565b9150602083013561466a8161462f565b809150509250929050565b803561468081614468565b919050565b803564ffffffffff8116811461468057600080fd5b60006101c082840312156146ad57600080fd5b6146b56143b1565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301358183015250610160614733818401614675565b90820152610180614745838201614685565b908201526101a0614757838201614685565b9082015292915050565b600080600080610220858703121561477857600080fd5b614782868661469a565b93506101c085013561479381614468565b92506101e08501356147a481614468565b91506102008501356bffffffffffffffffffffffff811681146147c657600080fd5b939692955090935050565b60006101c082840312156147e457600080fd5b50919050565b60006101c082840312156147fd57600080fd5b61268583836147d1565b6000806101e0838503121561481b57600080fd5b61482584846147d1565b946101c0939093013593505050565b8015158114610bb957600080fd5b6000806040838503121561485557600080fd5b823561486081614468565b9150602083013561466a81614834565b6000806000806080858703121561488657600080fd5b843561489181614468565b935060208501356148a181614468565b925060408501359150606085013567ffffffffffffffff8111156148c457600080fd5b6148d0878288016143db565b91505092959194509250565b600080604083850312156148ef57600080fd5b82356148fa81614468565b9150602083013561466a81614468565b6000806101e0838503121561491e57600080fd5b61492884846147d1565b91506101c083013561466a81614834565b600181811c9082168061494d57607f821691505b6020821081036147e457634e487b7160e01b600052602260045260246000fd5b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215614ab357600080fd5b5051919050565b600060208284031215614acc57600080fd5b815161268581614834565b60408101614ae4846145ae565b838252614af0836145ae565b8260208301529392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e7576107e7614afd565b600060208284031215614b3857600080fd5b815161268581614468565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080820151818401525061012080820151818401525061014080820151818401525061016080820151614bcc828501826001600160a01b03169052565b50506101808181015164ffffffffff81168483015250506101a08181015164ffffffffff81168483015261096a565b6101c081016107e78284614b43565b600060208284031215614c1c57600080fd5b61268582614685565b60006101c08284031215614c3857600080fd5b612685838361469a565b60008351614c54818460208801614338565b835190830190614c68818360208801614338565b01949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b818103818111156107e7576107e7614afd565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03841681526102008101614d3f6020830185614b43565b826101e0830152949350505050565b600060018201614d6057614d60614afd565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082614d8c57614d8c614d67565b500490565b600082614da057614da0614d67565b500690565b634e487b7160e01b600052603260045260246000fd5b601f821115610aa757600081815260208120601f850160051c81016020861015614de25750805b601f850160051c820191505b81811015614e0157828155600101614dee565b505050505050565b815167ffffffffffffffff811115614e2357614e2361439b565b614e3781614e318454614939565b84614dbb565b602080601f831160018114614e6c5760008415614e545750858301515b600019600386901b1c1916600185901b178555614e01565b600085815260208120601f198616915b82811015614e9b57888601518255948401946001909101908401614e7c565b5085821015614eb95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614efc9083018461435c565b9695505050505050565b600060208284031215614f1857600080fd5b815161268581614305565b60008251614f35818460208701614338565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212201e3a01964b43e0c765f3a1ca835c522b291b2fc8ae4bd887ba9c05aa9490273764736f6c63430008100033",
1296
+ "deployedBytecode": "0x6080604052600436106102305760003560e01c80636352211e1161012e57806395d89b41116100ab578063e985e9c51161006f578063e985e9c5146106f9578063f0f4426014610719578063f3fef3a314610739578063f67b2bad14610759578063ffa600e31461077b57600080fd5b806395d89b4114610651578063a22cb46514610666578063b88d4fde14610686578063c87b56dd146106a6578063e5a6b10f146106c657600080fd5b806370a08231116100f257806370a082311461059957806371907f17146105b95780637a702b3c146105ec57806382afd23b1461060c5780638456cb591461063c57600080fd5b80636352211e146104f95780636769a76f146105195780636af6f1ef146105395780636b8734e7146105595780636f86c8971461057957600080fd5b80633f4ba83a116101bc57806352d1902d1161018057806352d1902d146104595780635b494dd51461046e5780635c975abb146104a25780635fcbf445146104ba57806361d027b3146104da57600080fd5b80633f4ba83a146103bd57806342842e0e146103d257806347e7ef24146103f25780634a47a3e0146104125780634f1ef2861461044657600080fd5b8063095ea7b311610203578063095ea7b3146102e657806323b872dd1461030657806324ea54f41461032657806333d6157a146103565780633659cfe61461039d57600080fd5b806301ffc9a71461023557806306fdde031461026a578063077f224a1461028c578063081812fc146102ae575b600080fd5b34801561024157600080fd5b5061025561025036600461431b565b61079b565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f6107ed565b6040516102619190614388565b34801561029857600080fd5b506102ac6102a736600461447d565b61087f565b005b3480156102ba57600080fd5b506102ce6102c93660046144f5565b610970565b6040516001600160a01b039091168152602001610261565b3480156102f257600080fd5b506102ac61030136600461450e565b610997565b34801561031257600080fd5b506102ac61032136600461453a565b610aac565b34801561033257600080fd5b50610348600080516020614fa783398151915281565b604051908152602001610261565b34801561036257600080fd5b5061039061037136600461457b565b6001600160a01b0316600090815261012e602052604090205460ff1690565b60405161026191906145cc565b3480156103a957600080fd5b506102ac6103b836600461457b565b610add565b3480156103c957600080fd5b506102ac610bbc565b3480156103de57600080fd5b506102ac6103ed36600461453a565b610c7d565b3480156103fe57600080fd5b506102ac61040d36600461450e565b610c98565b34801561041e57600080fd5b506103487fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b6102ac6104543660046145df565b610db6565b34801561046557600080fd5b50610348610e82565b34801561047a57600080fd5b506103487f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b3480156104ae57600080fd5b5060335460ff16610255565b3480156104c657600080fd5b506102ac6104d536600461463c565b610f35565b3480156104e657600080fd5b5061012d546001600160a01b03166102ce565b34801561050557600080fd5b506102ce6105143660046144f5565b6113ae565b34801561052557600080fd5b50610348610534366004614761565b61140e565b34801561054557600080fd5b506102ac6105543660046147ea565b6119f1565b34801561056557600080fd5b506102ac61057436600461463c565b611a75565b34801561058557600080fd5b506102ac61059436600461457b565b611e99565b3480156105a557600080fd5b506103486105b436600461457b565b61247f565b3480156105c557600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102ce565b3480156105f857600080fd5b506102ac610607366004614807565b612505565b34801561061857600080fd5b506102556106273660046144f5565b600090815261012f6020526040902054151590565b34801561064857600080fd5b506102ac612527565b34801561065d57600080fd5b5061027f6125cc565b34801561067257600080fd5b506102ac610681366004614842565b6125db565b34801561069257600080fd5b506102ac6106a1366004614870565b6125e6565b3480156106b257600080fd5b5061027f6106c13660046144f5565b612618565b3480156106d257600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006102ce565b34801561070557600080fd5b506102556107143660046148dc565b61268c565b34801561072557600080fd5b506102ac61073436600461457b565b6126bb565b34801561074557600080fd5b5061034861075436600461450e565b6127b2565b34801561076557600080fd5b50610348600080516020614f6083398151915281565b34801561078757600080fd5b506102ac61079636600461490a565b6128db565b60006001600160e01b031982166380ac58cd60e01b14806107cc57506001600160e01b03198216635b5e139f60e01b145b806107e757506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060fb80546107fc90614939565b80601f016020809104026020016040519081016040528092919081815260200182805461082890614939565b80156108755780601f1061084a57610100808354040283529160200191610875565b820191906000526020600020905b81548152906001019060200180831161085857829003601f168201915b5050505050905090565b600054610100900460ff161580801561089f5750600054600160ff909116105b806108b95750303b1580156108b9575060005460ff166001145b6108de5760405162461bcd60e51b81526004016108d59061496d565b60405180910390fd5b6000805460ff191660011790558015610901576000805461ff0019166101001790555b61090961290e565b6109138484612937565b61091b612968565b61092482612997565b801561096a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b600061097b82612a75565b50600090815260ff60205260409020546001600160a01b031690565b60006109a2826113ae565b9050806001600160a01b0316836001600160a01b031603610a0f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108d5565b336001600160a01b0382161480610a2b5750610a2b813361268c565b610a9d5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016108d5565b610aa78383612ad4565b505050565b610ab63382612b42565b610ad25760405162461bcd60e51b81526004016108d5906149bb565b610aa7838383612ba0565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b255760405162461bcd60e51b81526004016108d590614a09565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b6e600080516020614f40833981519152546001600160a01b031690565b6001600160a01b031614610b945760405162461bcd60e51b81526004016108d590614a55565b610b9d81612d47565b60408051600080825260208201909252610bb991839190612e01565b50565b600080516020614fa7833981519152600080516020614f608339815191526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b0316604482015260640160006040518083038186803b158015610c5957600080fd5b505afa158015610c6d573d6000803e3d6000fd5b50505050610c79612f6c565b5050565b610aa7838383604051806020016040528060008152506125e6565b610ca0612fbe565b6001610cab83613004565b6003811115610cbc57610cbc614598565b14610d005760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b60448201526064016108d5565b610d357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316338484613091565b6001600160a01b0382166347e7ef24336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa79190614aa1565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610dfe5760405162461bcd60e51b81526004016108d590614a09565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e47600080516020614f40833981519152546001600160a01b031690565b6001600160a01b031614610e6d5760405162461bcd60e51b81526004016108d590614a55565b610e7682612d47565b610c7982826001612e01565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f225760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108d5565b50600080516020614f4083398151915290565b600080516020614fa7833981519152600080516020614f608339815191526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b0316604482015260640160006040518083038186803b158015610fd257600080fd5b505afa158015610fe6573d6000803e3d6000fd5b5050506001600160a01b038516600090815261012e602052604081209150815460ff16600381111561101a5761101a614598565b0361105d5760405162461bcd60e51b815260206004820152601360248201527210dbdb5c1bdb995b9d081b9bdd08199bdd5b99606a1b60448201526064016108d5565b600184600381111561107157611071614598565b14801561112657506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166391d14854600080516020614f60833981519152336040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190614aba565b806111f55750600384600381111561114057611140614598565b1480156111f557506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166391d14854600080516020614fa7833981519152336040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156111d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f59190614aba565b806112c45750600284600381111561120f5761120f614598565b1480156112c457506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166391d14854600080516020614f60833981519152336040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190614aba565b6113365760405162461bcd60e51b815260206004820152603e60248201527f4f6e6c7920475541524449414e2063616e2073757370656e64202f204f6e6c7960448201527f204c4556454c312063616e2061637469766174652f646570726563617465000060648201526084016108d5565b80548490829060ff1916600183600381111561135457611354614598565b021790555080546040516001600160a01b038716917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef9161139f91610100900460ff16908890614ad7565b60405180910390a25050505050565b600081815260fd60205260408120546001600160a01b0316806107e75760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108d5565b6000611418612fbe565b6101608501516001600160a01b03811633146114825760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b60648201526084016108d5565b600161148d826130eb565b600381111561149e5761149e614598565b146114f55760405162461bcd60e51b815260206004820152602160248201527f524d206d6f64756c65206e6f7420666f756e64206f72206e6f742061637469766044820152606560f81b60648201526084016108d5565b6115206bffffffffffffffffffffffff84166bffffffffffffffffffffffff19606084901b16614b13565b865261152b8661316e565b61012f600088600001518152602001908152602001600020819055506000816001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ab9190614b26565b905060016115b88261319e565b60038111156115c9576115c9614598565b146116265760405162461bcd60e51b815260206004820152602760248201527f5072656d69756d734163636f756e74206e6f7420666f756e64206f72206e6f746044820152662061637469766560c81b60648201526084016108d5565b60405163e3638ea360e01b81526001600160a01b0382169063e3638ea390611652908a90600401614bfb565b600060405180830381600087803b15801561166c57600080fd5b505af1158015611680573d6000803e3d6000fd5b505050506116a28588600001516040518060200160405280600081525061322c565b60c08701516116df906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169088908490613091565b610140870151156117885761178886826001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117509190614b26565b6101408a01516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613091565b610120870151156118315761183186826001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f99190614b26565b6101208a01516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613091565b61012d5460e0880151611876916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116928a929190911690613091565b60008761010001511180156118fe5750816001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e89190614b26565b6001600160a01b0316866001600160a01b031614155b156119a1576119a186836001600160a01b031663521eb2736040518163ffffffff1660e01b8152600401602060405180830381865afa158015611945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119699190614b26565b6101008a01516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613091565b816001600160a01b03167f38f420e3792044ba61536a1f83956eefc878b3fb09a7d4a28790f05b6a3eaf3b886040516119da9190614bfb565b60405180910390a25050845190505b949350505050565b6119f9612fbe565b42611a0c6101c083016101a08401614c0a565b64ffffffffff161115611a5a5760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b60448201526064016108d5565b610bb9611a6c36839003830183614c25565b6000600161325f565b600080516020614f608339815191526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015611afa57600080fd5b505afa158015611b0e573d6000803e3d6000fd5b5050506001600160a01b038416600090815261012e602052604081209150815460ff166003811115611b4257611b42614598565b14611b8f5760405162461bcd60e51b815260206004820152601d60248201527f436f6d706f6e656e7420616c726561647920696e2074686520706f6f6c00000060448201526064016108d5565b306001600160a01b0316846001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfb9190614b26565b6001600160a01b031614611c5b5760405162461bcd60e51b815260206004820152602160248201527f436f6d706f6e656e74206e6f74206c696e6b656420746f207468697320706f6f6044820152601b60fa1b60648201526084016108d5565b8054600160ff198216811783558491839161ffff1990911617610100836003811115611c8957611c89614598565b02179055506003836003811115611ca257611ca2614598565b03611e4f5760008490506000816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d109190614b26565b90506001600160a01b03811615611d7d576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c90602401600060405180830381600087803b158015611d6457600080fd5b505af1158015611d78573d6000803e3d6000fd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddf9190614b26565b90506001600160a01b03811615611e4c576040516338ea38a760e21b81526001600160a01b03838116600483015282169063e3a8e29c90602401600060405180830381600087803b158015611e3357600080fd5b505af1158015611e47573d6000803e3d6000fd5b505050505b50505b836001600160a01b03167ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef846001604051611e8b929190614ad7565b60405180910390a250505050565b600080516020614f608339815191526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b158015611f1e57600080fd5b505afa158015611f32573d6000803e3d6000fd5b505050506001600160a01b038216600090815261012e602052604090206002815460ff166003811115611f6757611f67614598565b14611fb45760405162461bcd60e51b815260206004820152601860248201527f436f6d706f6e656e74206e6f742064657072656361746564000000000000000060448201526064016108d5565b60018154610100900460ff166003811115611fd157611fd1614598565b0361209957826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120389190614aa1565b156120945760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b60648201526084016108d5565b61240b565b60028154610100900460ff1660038111156120b6576120b6614598565b0361217d57826001600160a01b0316637ff8bf256040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211d9190614aa1565b156120945760405162461bcd60e51b815260206004820152602a60248201527f43616e27742072656d6f76652061206d6f64756c6520776974682061637469766044820152696520706f6c696369657360b01b60648201526084016108d5565b60038154610100900460ff16600381111561219a5761219a614598565b0361240b576000839050806001600160a01b03166326ccbd226040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122069190614aa1565b156122685760405162461bcd60e51b815260206004820152602c60248201527f43616e27742072656d6f76652061205072656d69756d734163636f756e74207760448201526b697468207072656d69756d7360a01b60648201526084016108d5565b6000816001600160a01b031663536ebbfc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cc9190614b26565b90506001600160a01b03811615612339576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc5590602401600060405180830381600087803b15801561232057600080fd5b505af1158015612334573d6000803e3d6000fd5b505050505b816001600160a01b0316637b83037b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239b9190614b26565b90506001600160a01b03811615612408576040516376c7fc5560e01b81526001600160a01b0383811660048301528216906376c7fc5590602401600060405180830381600087803b1580156123ef57600080fd5b505af1158015612403573d6000803e3d6000fd5b505050505b50505b80546040516001600160a01b038516917ffe4c6998a06520b63340a48710b374432cb395da90e4e5360e1ec7aeefebecef9161245291610100900460ff1690600090614ad7565b60405180910390a250506001600160a01b0316600090815261012e60205260409020805461ffff19169055565b60006001600160a01b0382166124e95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108d5565b506001600160a01b0316600090815260fe602052604090205490565b61250d612fbe565b610c7961251f36849003840184614c25565b82600061325f565b600080516020614fa78339815191526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b1580156125ac57600080fd5b505afa1580156125c0573d6000803e3d6000fd5b50505050610bb9613716565b606060fc80546107fc90614939565b610c79338383613753565b6125f03383612b42565b61260c5760405162461bcd60e51b81526004016108d5906149bb565b61096a84848484613822565b606061262382612a75565b600061263a60408051602081019091526000815290565b9050600081511161265a5760405180602001604052806000815250612685565b8061266484613855565b604051602001612675929190614c42565b6040516020818303038152906040525b9392505050565b6001600160a01b0391821660009081526101006020908152604080832093909416825291909152205460ff1690565b600080516020614f608339815191526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166312d9a6ad82336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b15801561274057600080fd5b505afa158015612754573d6000803e3d6000fd5b505061012d80546001600160a01b0386166001600160a01b03199091168117909155604051908152600192507fb6bdbd44472629fc24a00b6f4ee3348b72c9eff333d0e9c16d78c49da1323c8f915060200160405180910390a25050565b60006127bc612fbe565b60006127c784613004565b905060018160038111156127dd576127dd614598565b14806127fa575060028160038111156127f8576127f8614598565b145b6128585760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b60648201526084016108d5565b60003360405163f3fef3a360e01b81526001600160a01b038083166004830152602482018790529192509086169063f3fef3a3906044016020604051808303816000875af11580156128ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d29190614aa1565b95945050505050565b6128e3612fbe565b610c796128f536849003840184614c25565b82612901576000612907565b83602001355b600061325f565b600054610100900460ff166129355760405162461bcd60e51b81526004016108d590614c71565b565b600054610100900460ff1661295e5760405162461bcd60e51b81526004016108d590614c71565b610c798282613956565b600054610100900460ff1661298f5760405162461bcd60e51b81526004016108d590614c71565b612935613996565b600054610100900460ff16158080156129b75750600054600160ff909116105b806129d15750303b1580156129d1575060005460ff166001145b6129ed5760405162461bcd60e51b81526004016108d59061496d565b6000805460ff191660011790558015612a10576000805461ff0019166101001790555b61012d80546001600160a01b0319166001600160a01b0384161790558015610c79576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600081815260fd60205260409020546001600160a01b0316610bb95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108d5565b600081815260ff6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612b09826113ae565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080612b4e836113ae565b9050806001600160a01b0316846001600160a01b03161480612b755750612b75818561268c565b806119e95750836001600160a01b0316612b8e84610970565b6001600160a01b031614949350505050565b826001600160a01b0316612bb3826113ae565b6001600160a01b031614612c175760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016108d5565b6001600160a01b038216612c795760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108d5565b612c848383836139c9565b612c8f600082612ad4565b6001600160a01b038316600090815260fe60205260408120805460019290612cb8908490614cbc565b90915550506001600160a01b038216600090815260fe60205260408120805460019290612ce6908490614b13565b9091555050600081815260fd602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600080516020614fa7833981519152600080516020614f608339815191526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663c5b8f5cf8383336040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b0316604482015260640160006040518083038186803b158015612de457600080fd5b505afa158015612df8573d6000803e3d6000fd5b50505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612e3457610aa7836139d1565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612e8e575060408051601f3d908101601f19168201909252612e8b91810190614aa1565b60015b612ef15760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108d5565b600080516020614f408339815191528114612f605760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108d5565b50610aa7838383613a6d565b612f74613a92565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60335460ff16156129355760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108d5565b6001600160a01b038116600090815261012e6020526040812060018154610100900460ff16600381111561303a5761303a614598565b146130875760405162461bcd60e51b815260206004820152601a60248201527f436f6d706f6e656e74206973206e6f7420616e2065546f6b656e00000000000060448201526064016108d5565b5460ff1692915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261096a908590613adb565b6001600160a01b038116600090815261012e6020526040812060028154610100900460ff16600381111561312157613121614598565b146130875760405162461bcd60e51b815260206004820152601d60248201527f436f6d706f6e656e74206973206e6f742061205269736b4d6f64756c6500000060448201526064016108d5565b6000816040516020016131819190614bfb565b604051602081830303815290604052805190602001209050919050565b6001600160a01b038116600090815261012e6020526040812060038154610100900460ff1660038111156131d4576131d4614598565b146130875760405162461bcd60e51b815260206004820152602260248201527f436f6d706f6e656e74206973206e6f742061205072656d69756d734163636f756044820152611b9d60f21b60648201526084016108d5565b6132368383613bad565b6132436000848484613cfb565b610aa75760405162461bcd60e51b81526004016108d590614ccf565b61326883613df9565b610160830151818061328257506001600160a01b03811633145b6132ce5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c696369657360448201526064016108d5565b8215806132e6575042846101a0015164ffffffffff16115b6133325760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c696379000000000000000060448201526064016108d5565b600061333d826130eb565b9050600181600381111561335357613353614598565b14806133705750600281600381111561336e5761336e614598565b145b6133e25760405162461bcd60e51b815260206004820152603a60248201527f4d6f64756c65206d75737420626520616374697665206f72206465707265636160448201527f74656420746f2070726f63657373207265736f6c7574696f6e7300000000000060648201526084016108d5565b846020015184111561342f5760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b60448201526064016108d5565b600080851190506000836001600160a01b03166373a952e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015613476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061349a9190614b26565b90506134a58161319e565b925060018360038111156134bb576134bb614598565b14806134d8575060028360038111156134d6576134d6614598565b145b6135565760405162461bcd60e51b815260206004820152604360248201527f5072656d69756d734163636f756e74206d75737420626520616374697665206f60448201527f72206465707265636174656420746f2070726f63657373207265736f6c7574696064820152626f6e7360e81b608482015260a4016108d5565b81156135d657600061356b88600001516113ae565b604051639d8c5ee760e01b81529091506001600160a01b03831690639d8c5ee79061359e9084908c908c90600401614d21565b600060405180830381600087803b1580156135b857600080fd5b505af11580156135cc573d6000803e3d6000fd5b5050505050613635565b60405163c7a9c70d60e01b81526001600160a01b0382169063c7a9c70d90613602908a90600401614bfb565b600060405180830381600087803b15801561361c57600080fd5b505af1158015613630573d6000803e3d6000fd5b505050505b6020870151604051636a448ef160e01b815260048101919091526001600160a01b03851690636a448ef190602401600060405180830381600087803b15801561367d57600080fd5b505af1158015613691573d6000803e3d6000fd5b5050505086600001518761016001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e886040516136da91815260200190565b60405180910390a38651600090815261012f6020526040812055851561370b5786516137069087613e60565b612df8565b8651612df890613fba565b61371e612fbe565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612fa13390565b816001600160a01b0316836001600160a01b0316036137b45760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108d5565b6001600160a01b0383811660008181526101006020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61382d848484612ba0565b61383984848484613cfb565b61096a5760405162461bcd60e51b81526004016108d590614ccf565b60608160000361387c5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156138a6578061389081614d4e565b915061389f9050600a83614d7d565b9150613880565b60008167ffffffffffffffff8111156138c1576138c161439b565b6040519080825280601f01601f1916602001820160405280156138eb576020820181803683370190505b5090505b84156119e957613900600183614cbc565b915061390d600a86614d91565b613918906030614b13565b60f81b81838151811061392d5761392d614da5565b60200101906001600160f81b031916908160001a90535061394f600a86614d7d565b94506138ef565b600054610100900460ff1661397d5760405162461bcd60e51b81526004016108d590614c71565b60fb6139898382614e09565b5060fc610aa78282614e09565b600054610100900460ff166139bd5760405162461bcd60e51b81526004016108d590614c71565b6033805460ff19169055565b610aa7612fbe565b6001600160a01b0381163b613a3e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108d5565b600080516020614f4083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613a7683614061565b600082511180613a835750805b15610aa75761096a83836140a1565b60335460ff166129355760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108d5565b6000613b30826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661418c9092919063ffffffff16565b805190915015610aa75780806020019051810190613b4e9190614aba565b610aa75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108d5565b6001600160a01b038216613c035760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108d5565b600081815260fd60205260409020546001600160a01b031615613c685760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108d5565b613c74600083836139c9565b6001600160a01b038216600090815260fe60205260408120805460019290613c9d908490614b13565b9091555050600081815260fd602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15613df157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613d3f903390899088908890600401614ec9565b6020604051808303816000875af1925050508015613d7a575060408051601f3d908101601f19168201909252613d7791810190614f06565b60015b613dd7573d808015613da8576040519150601f19603f3d011682016040523d82523d6000602084013e613dad565b606091505b508051600003613dcf5760405162461bcd60e51b81526004016108d590614ccf565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506119e9565b5060016119e9565b805115801590613e2157508051600090815261012f6020526040902054613e1f8261316e565b145b610bb95760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b60448201526064016108d5565b6000613e6b836113ae565b90506001600160a01b0381163b613e8157505050565b6001600160a01b03811663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101869052606481018590526084016020604051808303816000875af1925050508015613f07575060408051601f3d908101601f19168201909252613f0491810190614f06565b60015b613f4a573d808015613f35576040519150601f19603f3d011682016040523d82523d6000602084013e613f3a565b606091505b508051600003613dcf5750505050565b6001600160e01b03198116636b140e9f60e11b1461096a5760405162461bcd60e51b815260206004820152602760248201527f496e76616c69642072657475726e2076616c75652066726f6d20506f6c696379604482015266102437b63232b960c91b60648201526084016108d5565b6000613fc5826113ae565b90506001600160a01b0381163b613fda575050565b6001600160a01b03811663e8e617b7336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018590526064016020604051808303816000875af1925050508015614059575060408051601f3d908101601f1916820190925261405691810190614f06565b60015b610aa7575050565b61406a816139d1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6141095760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016108d5565b600080846001600160a01b0316846040516141249190614f23565b600060405180830381855af49150503d806000811461415f576040519150601f19603f3d011682016040523d82523d6000602084013e614164565b606091505b50915091506128d28282604051806060016040528060278152602001614f806027913961419b565b60606119e984846000856141d4565b606083156141aa575081612685565b8251156141ba5782518084602001fd5b8160405162461bcd60e51b81526004016108d59190614388565b6060824710156142355760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108d5565b6001600160a01b0385163b61428c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108d5565b600080866001600160a01b031685876040516142a89190614f23565b60006040518083038185875af1925050503d80600081146142e5576040519150601f19603f3d011682016040523d82523d6000602084013e6142ea565b606091505b50915091506142fa82828661419b565b979650505050505050565b6001600160e01b031981168114610bb957600080fd5b60006020828403121561432d57600080fd5b813561268581614305565b60005b8381101561435357818101518382015260200161433b565b50506000910152565b60008151808452614374816020860160208601614338565b601f01601f19169290920160200192915050565b602081526000612685602083018461435c565b634e487b7160e01b600052604160045260246000fd5b6040516101c0810167ffffffffffffffff811182821017156143d5576143d561439b565b60405290565b600082601f8301126143ec57600080fd5b813567ffffffffffffffff808211156144075761440761439b565b604051601f8301601f19908116603f0116810190828211818310171561442f5761442f61439b565b8160405283815286602085880101111561444857600080fd5b836020870160208301376000602085830101528094505050505092915050565b6001600160a01b0381168114610bb957600080fd5b60008060006060848603121561449257600080fd5b833567ffffffffffffffff808211156144aa57600080fd5b6144b6878388016143db565b945060208601359150808211156144cc57600080fd5b506144d9868287016143db565b92505060408401356144ea81614468565b809150509250925092565b60006020828403121561450757600080fd5b5035919050565b6000806040838503121561452157600080fd5b823561452c81614468565b946020939093013593505050565b60008060006060848603121561454f57600080fd5b833561455a81614468565b9250602084013561456a81614468565b929592945050506040919091013590565b60006020828403121561458d57600080fd5b813561268581614468565b634e487b7160e01b600052602160045260246000fd5b60048110610bb957634e487b7160e01b600052602160045260246000fd5b602081016145d9836145ae565b91905290565b600080604083850312156145f257600080fd5b82356145fd81614468565b9150602083013567ffffffffffffffff81111561461957600080fd5b614625858286016143db565b9150509250929050565b60048110610bb957600080fd5b6000806040838503121561464f57600080fd5b823561465a81614468565b9150602083013561466a8161462f565b809150509250929050565b803561468081614468565b919050565b803564ffffffffff8116811461468057600080fd5b60006101c082840312156146ad57600080fd5b6146b56143b1565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140808301358183015250610160614733818401614675565b90820152610180614745838201614685565b908201526101a0614757838201614685565b9082015292915050565b600080600080610220858703121561477857600080fd5b614782868661469a565b93506101c085013561479381614468565b92506101e08501356147a481614468565b91506102008501356bffffffffffffffffffffffff811681146147c657600080fd5b939692955090935050565b60006101c082840312156147e457600080fd5b50919050565b60006101c082840312156147fd57600080fd5b61268583836147d1565b6000806101e0838503121561481b57600080fd5b61482584846147d1565b946101c0939093013593505050565b8015158114610bb957600080fd5b6000806040838503121561485557600080fd5b823561486081614468565b9150602083013561466a81614834565b6000806000806080858703121561488657600080fd5b843561489181614468565b935060208501356148a181614468565b925060408501359150606085013567ffffffffffffffff8111156148c457600080fd5b6148d0878288016143db565b91505092959194509250565b600080604083850312156148ef57600080fd5b82356148fa81614468565b9150602083013561466a81614468565b6000806101e0838503121561491e57600080fd5b61492884846147d1565b91506101c083013561466a81614834565b600181811c9082168061494d57607f821691505b6020821081036147e457634e487b7160e01b600052602260045260246000fd5b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215614ab357600080fd5b5051919050565b600060208284031215614acc57600080fd5b815161268581614834565b60408101614ae4846145ae565b838252614af0836145ae565b8260208301529392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e7576107e7614afd565b600060208284031215614b3857600080fd5b815161268581614468565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080820151818401525061012080820151818401525061014080820151818401525061016080820151614bcc828501826001600160a01b03169052565b50506101808181015164ffffffffff81168483015250506101a08181015164ffffffffff81168483015261096a565b6101c081016107e78284614b43565b600060208284031215614c1c57600080fd5b61268582614685565b60006101c08284031215614c3857600080fd5b612685838361469a565b60008351614c54818460208801614338565b835190830190614c68818360208801614338565b01949350505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b818103818111156107e7576107e7614afd565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03841681526102008101614d3f6020830185614b43565b826101e0830152949350505050565b600060018201614d6057614d60614afd565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082614d8c57614d8c614d67565b500490565b600082614da057614da0614d67565b500690565b634e487b7160e01b600052603260045260246000fd5b601f821115610aa757600081815260208120601f850160051c81016020861015614de25750805b601f850160051c820191505b81811015614e0157828155600101614dee565b505050505050565b815167ffffffffffffffff811115614e2357614e2361439b565b614e3781614e318454614939565b84614dbb565b602080601f831160018114614e6c5760008415614e545750858301515b600019600386901b1c1916600185901b178555614e01565b600085815260208120601f198616915b82811015614e9b57888601518255948401946001909101908401614e7c565b5085821015614eb95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614efc9083018461435c565b9695505050505050565b600060208284031215614f1857600080fd5b815161268581614305565b60008251614f35818460208701614338565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212201e3a01964b43e0c765f3a1ca835c522b291b2fc8ae4bd887ba9c05aa9490273764736f6c63430008100033",
921
1297
  "linkReferences": {},
922
1298
  "deployedLinkReferences": {}
923
1299
  }