-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFeeRouter.json
More file actions
941 lines (941 loc) · 61.1 KB
/
FeeRouter.json
File metadata and controls
941 lines (941 loc) · 61.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
{
"_format": "hh-sol-artifact-1",
"contractName": "FeeRouter",
"sourceName": "contracts/fee/FeeRouter.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "factory",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "market",
"type": "address"
},
{
"indexed": false,
"internalType": "int256[]",
"name": "fees",
"type": "int256[]"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "UpdateFee",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "market",
"type": "address"
},
{
"indexed": false,
"internalType": "uint8",
"name": "kind",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint256",
"name": "oldFeeOrRate",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "feeOrRate",
"type": "uint256"
}
],
"name": "UpdateFeeAndRates",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "FEE_RATE_PRECISION",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "int256[]",
"name": "fees",
"type": "int256[]"
}
],
"name": "collectFees",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "market",
"type": "address"
},
{
"internalType": "bool",
"name": "isLong",
"type": "bool"
}
],
"name": "cumulativeFundingRates",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"name": "feeAndRates",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "feeVault",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "fundFee",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "market",
"type": "address"
}
],
"name": "getExecFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "_market",
"type": "address"
},
{
"internalType": "bool",
"name": "_isLong",
"type": "bool"
},
{
"internalType": "uint256",
"name": "_oraclePrice",
"type": "uint256"
},
{
"internalType": "bool",
"name": "isOpen",
"type": "bool"
},
{
"internalType": "address",
"name": "_account",
"type": "address"
},
{
"internalType": "uint256",
"name": "_sizeDelta",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_price",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_slippage",
"type": "uint256"
},
{
"internalType": "bool",
"name": "_isExec",
"type": "bool"
},
{
"internalType": "uint8",
"name": "liqState",
"type": "uint8"
},
{
"internalType": "uint64",
"name": "_fromOrder",
"type": "uint64"
},
{
"internalType": "bytes32",
"name": "_refCode",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "collateralDelta",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "execNum",
"type": "uint8"
},
{
"internalType": "uint256[]",
"name": "inputs",
"type": "uint256[]"
}
],
"internalType": "struct MarketDataTypes.UpdatePositionInputs",
"name": "params",
"type": "tuple"
},
{
"components": [
{
"internalType": "address",
"name": "market",
"type": "address"
},
{
"internalType": "bool",
"name": "isLong",
"type": "bool"
},
{
"internalType": "uint32",
"name": "lastTime",
"type": "uint32"
},
{
"internalType": "uint216",
"name": "extra3",
"type": "uint216"
},
{
"internalType": "uint256",
"name": "size",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "collateral",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "averagePrice",
"type": "uint256"
},
{
"internalType": "int256",
"name": "entryFundingRate",
"type": "int256"
},
{
"internalType": "int256",
"name": "realisedPnl",
"type": "int256"
},
{
"internalType": "uint256",
"name": "extra0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "extra1",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "extra2",
"type": "uint256"
}
],
"internalType": "struct Position.Props",
"name": "position",
"type": "tuple"
}
],
"name": "getFees",
"outputs": [
{
"internalType": "int256[]",
"name": "fees",
"type": "int256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "market",
"type": "address"
},
{
"internalType": "uint256",
"name": "longSize",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "shortSize",
"type": "uint256"
},
{
"internalType": "bool",
"name": "isLong",
"type": "bool"
}
],
"name": "getFundingRate",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "_market",
"type": "address"
},
{
"internalType": "bool",
"name": "_isLong",
"type": "bool"
},
{
"internalType": "uint256",
"name": "_oraclePrice",
"type": "uint256"
},
{
"internalType": "bool",
"name": "isOpen",
"type": "bool"
},
{
"internalType": "bool",
"name": "isCreate",
"type": "bool"
},
{
"components": [
{
"internalType": "uint8",
"name": "version",
"type": "uint8"
},
{
"internalType": "uint32",
"name": "updatedAtBlock",
"type": "uint32"
},
{
"internalType": "uint8",
"name": "triggerAbove",
"type": "uint8"
},
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint48",
"name": "extra3",
"type": "uint48"
},
{
"internalType": "uint128",
"name": "collateral",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "size",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "price",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "extra1",
"type": "uint128"
},
{
"internalType": "uint64",
"name": "orderID",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "extra2",
"type": "uint64"
},
{
"internalType": "uint128",
"name": "extra0",
"type": "uint128"
},
{
"internalType": "bytes32",
"name": "refCode",
"type": "bytes32"
}
],
"internalType": "struct Order.Props",
"name": "_order",
"type": "tuple"
},
{
"internalType": "uint256[]",
"name": "inputs",
"type": "uint256[]"
}
],
"internalType": "struct MarketDataTypes.UpdateOrderInputs",
"name": "params",
"type": "tuple"
}
],
"name": "getOrderFees",
"outputs": [
{
"internalType": "int256",
"name": "fees",
"type": "int256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantAndRevoke",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "vault",
"type": "address"
},
{
"internalType": "address",
"name": "fundingFee",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "market",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "rates",
"type": "uint256[]"
}
],
"name": "setFeeAndRates",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "vault",
"type": "address"
}
],
"name": "setFeeVault",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "fundingFee",
"type": "address"
}
],
"name": "setFundFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
}
],
"name": "transferAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "market",
"type": "address"
},
{
"internalType": "uint256",
"name": "longSize",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "shortSize",
"type": "uint256"
}
],
"name": "updateCumulativeFundingRate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60806040523480156200001157600080fd5b5060405162002a8038038062002a80833981016040819052620000349162000350565b80620000403362000079565b6200005681620000cb60201b62000f1a1760201c565b506200007260008051602062002a0083398151915233620002a3565b5062000382565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620000d63362000079565b620000e360003362000344565b620000f060008262000344565b6200010b60008051602062002a008339815191523362000344565b6200012660008051602062002a008339815191528262000344565b6200014160008051602062002a608339815191523362000344565b6200015c60008051602062002a608339815191528262000344565b62000177600080516020620029e08339815191523362000344565b62000192600080516020620029e08339815191528262000344565b620001ad600080516020620029c08339815191523362000344565b620001c8600080516020620029c08339815191528262000344565b620001e360008051602062002a208339815191523362000344565b620001fe60008051602062002a208339815191528262000344565b62000219600080516020620029a08339815191523362000344565b62000234600080516020620029a08339815191528262000344565b6200024f600080516020620029808339815191523362000344565b6200026a600080516020620029808339815191528262000344565b6200028560008051602062002a408339815191523362000344565b620002a060008051602062002a408339815191528262000344565b50565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000340576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002ff3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b620003408282620002a3565b6000602082840312156200036357600080fd5b81516001600160a01b03811681146200037b57600080fd5b9392505050565b6125ee80620003926000396000f3fe608060405234801561001057600080fd5b50600436106101545760003560e01c806301ffc9a71461015957806309d3989714610181578063248a9ca3146101c45780632f2ff15d146101d757806333abd028146101ec57806334f32e251461021757806336568abe1461022a578063415102631461023d578063478222c21461025d578063485cc95514610270578063504b8b6814610283578063715018a61461029657806375829def1461029e5780637dd49023146102b15780638da5cb5b146102c457806391d14854146102cc57806399d5c1ec146102df578063a217fddf146102f2578063a591f97f146102fa578063c6f83ad11461030d578063c8830bf514610320578063c9cf9f3a14610333578063d547741f14610346578063d877806814610359578063d9caed1214610384578063e50f19ef14610397578063f2fde38b146103aa578063f4ca4d1d146103bd575b600080fd5b61016c610167366004611813565b6103c5565b60405190151581526020015b60405180910390f35b6101b661018f366004611859565b6001600160a01b031660009081526004602090815260408083206003845290915290205490565b604051908152602001610178565b6101b66101d2366004611874565b6103fc565b6101ea6101e536600461188d565b610411565b005b6003546101ff906001600160a01b031681565b6040516001600160a01b039091168152602001610178565b6101b66102253660046118d2565b610432565b6101ea61023836600461188d565b6104b0565b61025061024b366004611b7a565b610533565b6040516101789190611cfa565b6002546101ff906001600160a01b031681565b6101ea61027e366004611d0d565b610707565b6101b6610291366004611d37565b6108ab565b6101ea61092e565b6101ea6102ac366004611859565b610942565b6101ea6102bf366004611d7f565b61096c565b6101ff610abe565b61016c6102da36600461188d565b610acd565b6101ea6102ed36600461188d565b610af6565b6101b6600081565b6101ea610308366004611859565b610b23565b6101ea61031b366004611dcc565b610b82565b6101b661032e366004611f26565b610c0b565b6101ea610341366004611859565b610c8a565b6101ea61035436600461188d565b610ceb565b6101b6610367366004611ff4565b600460209081526000928352604080842090915290825290205481565b6101ea61039236600461201e565b610d07565b6101ea6103a536600461205a565b610d8b565b6101ea6103b8366004611859565b610e92565b6101b6610f0b565b60006001600160e01b03198216637965db0b60e01b14806103f657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526020819052604090206001015490565b61041a826103fc565b610423816110b9565b61042d83836110c3565b505050565b6002546040516334f32e2560e01b81526001600160a01b038481166004830152831515602483015260009216906334f32e2590604401602060405180830381865afa158015610485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a9919061210d565b9392505050565b6001600160a01b03811633146105255760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61052f8282611147565b5050565b60408051600c8082526101a082019092526060916020820161018080368337019050509050600083600001519050600061057b82866020015186608001518760e001516111ac565b90508083600260ff168151811061059457610594612126565b602090810291909101015260a08501511580156105b5575061018085015115155b156105c15750506103f6565b8460600151156106045760a08501516105dd90839060006111f4565b83600060ff16815181106105f3576105f3612126565b602002602001018181525050610692565b60a085015161061690839060016111f4565b83600160ff168151811061062c5761062c612126565b60200260200101818152505084610120015160ff16600103610692576001600160a01b038216600090815260046020818152604080842083855290915290912054845190918291869190811061068457610684612126565b602002602001018181525050505b6101a085015160ff16156106ff576001600160a01b0382166000908152600460209081526040808320600384529091529020546101a08601516106d89060ff1682612152565b90508084600360ff16815181106106f1576106f1612126565b602002602001018181525050505b505092915050565b600154600160a81b900460ff161580801561072d575060018054600160a01b900460ff16105b80610754575061073c3061128a565b158015610754575060018054600160a01b900460ff16145b6107b75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161051c565b6001805460ff60a01b1916600160a01b17905580156107e4576001805460ff60a81b1916600160a81b1790555b6001600160a01b03831661080a5760405162461bcd60e51b815260040161051c90612169565b6001600160a01b0382166108305760405162461bcd60e51b815260040161051c90612194565b600280546001600160a01b038086166001600160a01b0319928316179092556003805492851692909116919091179055801561042d576001805460ff60a81b191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b600354604051630a09716d60e31b81526000916001600160a01b03169063504b8b68906108e29088908890889088906004016121bd565b602060405180830381865afa1580156108ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610923919061210d565b90505b949350505050565b610936611299565b61094060006112f8565b565b600061094d816110b9565b61095860008361134a565b610961826112f8565b61052f600033611147565b600080516020612599833981519152610984816110b9565b60008251116109c65760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b604482015260640161051c565b60005b82518160ff161015610ab8576000838260ff16815181106109ec576109ec612126565b60200260200101519050838260ff1681518110610a0b57610a0b612126565b6020908102919091018101516001600160a01b038716600081815260048452604080822060ff88168084529552902091909155855190917f8e26fb53d63c548677b068d08742bea435b6ecb7911ab3c5ad68fbccddeaf5fe91859185918991908110610a7957610a79612126565b6020908102919091018101516040805160ff90951685529184019290925282015260600160405180910390a25080610ab0816121e5565b9150506109c9565b50505050565b6001546001600160a01b031690565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020612539833981519152610b0e816110b9565b610b188383610411565b61042d600033610ceb565b610b3a6000805160206125398339815191526110b9565b6001600160a01b038116610b605760405162461bcd60e51b815260040161051c90612169565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610b996000805160206125198339815191526110b9565b60035460405163c6f83ad160e01b81526001600160a01b03858116600483015260248201859052604482018490529091169063c6f83ad190606401600060405180830381600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b50505050505050565b600080826060015115610c2057506000610c24565b5060015b6000610c4684600001518560a0015160c001516001600160801b0316846111f4565b84516001600160a01b0316600090815260046020908152604080832060038452909152902054909150610c81610c7c8284612204565b611354565b95945050505050565b610ca16000805160206125398339815191526110b9565b6003546001600160a01b0316610cc95760405162461bcd60e51b815260040161051c90612194565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610cf4826103fc565b610cfd816110b9565b61042d8383611147565b6000805160206124d9833981519152610d1f816110b9565b600254604051636ce5768960e11b81526001600160a01b039091169063d9caed1290610d5390879087908790600401612217565b600060405180830381600087803b158015610d6d57600080fd5b505af1158015610d81573d6000803e3d6000fd5b5050505050505050565b610da26000805160206125198339815191526110b9565b604051636eb1769f60e11b81523360048201523060248201526000906001600160a01b0384169063dd62ed3e90604401602060405180830381865afa158015610def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e13919061210d565b905080600003610e235750505050565b600254610e3f906001600160a01b0385811691339116846113c2565b336001600160a01b0316846001600160a01b03167f51b85031527a935663233d62a057687d039b9fbcd79c55e46a5b24510159336f8484604051610e8492919061223b565b60405180910390a350505050565b610e9a611299565b6001600160a01b038116610eff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161051c565b610f08816112f8565b50565b610f176008600a612341565b81565b610f23336112f8565b610f2e60003361134a565b610f3960008261134a565b610f516000805160206125398339815191523361134a565b610f696000805160206125398339815191528261134a565b610f816000805160206125998339815191523361134a565b610f996000805160206125998339815191528261134a565b610fb16000805160206124f98339815191523361134a565b610fc96000805160206124f98339815191528261134a565b610fe16000805160206124d98339815191523361134a565b610ff96000805160206124d98339815191528261134a565b6110116000805160206125598339815191523361134a565b6110296000805160206125598339815191528261134a565b6110416000805160206124b98339815191523361134a565b6110596000805160206124b98339815191528261134a565b6110716000805160206124998339815191523361134a565b6110896000805160206124998339815191528261134a565b6110a16000805160206125798339815191523361134a565b610f086000805160206125798339815191528261134a565b610f08813361141a565b6110cd8282610acd565b61052f576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556111033390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6111518282610acd565b1561052f576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000826000036111be57506000610926565b60035460405163478c57cd60e11b81526001600160a01b0390911690638f18af9a906108e2908890879087908a906004016121bd565b600082600003611206575060006104a9565b6001600160a01b038416600090815260046020908152604080832060ff861684529091528120549081900361123b5750620186a05b60006112496008600a612341565b826112566008600a612341565b611260919061234d565b61126a9087612152565b6112749190612360565b9050611280818661234d565b9695505050505050565b6001600160a01b03163b151590565b336112a2610abe565b6001600160a01b0316146109405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161051c565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61052f82826110c3565b60006001600160ff1b038211156113be5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161051c565b5090565b610ab8846323b872dd60e01b8585856040516024016113e393929190612217565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611473565b6114248282610acd565b61052f5761143181611545565b61143c836020611557565b60405160200161144d9291906123a6565b60408051601f198184030181529082905262461bcd60e51b825261051c91600401612415565b60006114c8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116f29092919063ffffffff16565b80519091501561042d57808060200190518101906114e69190612448565b61042d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161051c565b60606103f66001600160a01b03831660145b60606000611566836002612152565b611571906002612204565b6001600160401b0381111561158857611588611909565b6040519080825280601f01601f1916602001820160405280156115b2576020820181803683370190505b509050600360fc1b816000815181106115cd576115cd612126565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106115fc576115fc612126565b60200101906001600160f81b031916908160001a9053506000611620846002612152565b61162b906001612204565b90505b60018111156116a3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061165f5761165f612126565b1a60f81b82828151811061167557611675612126565b60200101906001600160f81b031916908160001a90535060049490941c9361169c81612465565b905061162e565b5083156104a95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161051c565b6060610926848460008585600080866001600160a01b03168587604051611719919061247c565b60006040518083038185875af1925050503d8060008114611756576040519150601f19603f3d011682016040523d82523d6000602084013e61175b565b606091505b509150915061176c87838387611777565b979650505050505050565b606083156117e45782516000036117dd576117918561128a565b6117dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161051c565b5081610926565b61092683838151156117f95781518083602001fd5b8060405162461bcd60e51b815260040161051c9190612415565b60006020828403121561182557600080fd5b81356001600160e01b0319811681146104a957600080fd5b80356001600160a01b038116811461185457600080fd5b919050565b60006020828403121561186b57600080fd5b6104a98261183d565b60006020828403121561188657600080fd5b5035919050565b600080604083850312156118a057600080fd5b823591506118b06020840161183d565b90509250929050565b8015158114610f0857600080fd5b8035611854816118b9565b600080604083850312156118e557600080fd5b6118ee8361183d565b915060208301356118fe816118b9565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b038111828210171561194257611942611909565b60405290565b6040516101e081016001600160401b038111828210171561194257611942611909565b6040516101a081016001600160401b038111828210171561194257611942611909565b60405160e081016001600160401b038111828210171561194257611942611909565b604051601f8201601f191681016001600160401b03811182821017156119d8576119d8611909565b604052919050565b803560ff8116811461185457600080fd5b80356001600160401b038116811461185457600080fd5b60006001600160401b03821115611a2157611a21611909565b5060051b60200190565b600082601f830112611a3c57600080fd5b81356020611a51611a4c83611a08565b6119b0565b82815260059290921b84018101918181019086841115611a7057600080fd5b8286015b84811015611a8b5780358352918301918301611a74565b509695505050505050565b803563ffffffff8116811461185457600080fd5b80356001600160d81b038116811461185457600080fd5b60006101808284031215611ad457600080fd5b611adc61191f565b9050611ae78261183d565b8152611af5602083016118c7565b6020820152611b0660408301611a96565b6040820152611b1760608301611aaa565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e082015261010080830135818301525061012080830135818301525061014080830135818301525061016080830135818301525092915050565b6000806101a0808486031215611b8f57600080fd5b83356001600160401b0380821115611ba657600080fd5b908501906101e08288031215611bbb57600080fd5b611bc3611948565b611bcc8361183d565b8152611bda602084016118c7565b602082015260408301356040820152611bf5606084016118c7565b6060820152611c066080840161183d565b608082015260a083013560a082015260c083013560c082015260e083013560e0820152610100611c378185016118c7565b90820152610120611c498482016119e0565b90820152610140611c5b8482016119f1565b9082015261016083810135908201526101808084013590820152611c808484016119e0565b848201526101c093508383013582811115611c9a57600080fd5b611ca689828601611a2b565b8583015250809550505050506118b08460208501611ac1565b600081518084526020808501945080840160005b83811015611cef57815187529582019590820190600101611cd3565b509495945050505050565b6020815260006104a96020830184611cbf565b60008060408385031215611d2057600080fd5b611d298361183d565b91506118b06020840161183d565b60008060008060808587031215611d4d57600080fd5b611d568561183d565b935060208501359250604085013591506060850135611d74816118b9565b939692955090935050565b60008060408385031215611d9257600080fd5b611d9b8361183d565b915060208301356001600160401b03811115611db657600080fd5b611dc285828601611a2b565b9150509250929050565b600080600060608486031215611de157600080fd5b611dea8461183d565b95602085013595506040909401359392505050565b803565ffffffffffff8116811461185457600080fd5b80356001600160801b038116811461185457600080fd5b60006101a08284031215611e3f57600080fd5b611e4761196b565b9050611e52826119e0565b8152611e6060208301611a96565b6020820152611e71604083016119e0565b6040820152611e826060830161183d565b6060820152611e9360808301611dff565b6080820152611ea460a08301611e15565b60a0820152611eb560c08301611e15565b60c0820152611ec660e08301611e15565b60e0820152610100611ed9818401611e15565b90820152610120611eeb8382016119f1565b90820152610140611efd8382016119f1565b90820152610160611f0f838201611e15565b818301525061018080830135818301525092915050565b600060208284031215611f3857600080fd5b81356001600160401b0380821115611f4f57600080fd5b908301906102608286031215611f6457600080fd5b611f6c61198e565b611f758361183d565b8152611f83602084016118c7565b602082015260408301356040820152611f9e606084016118c7565b6060820152611faf608084016118c7565b6080820152611fc18660a08501611e2c565b60a082015261024083013582811115611fd957600080fd5b611fe587828601611a2b565b60c08301525095945050505050565b6000806040838503121561200757600080fd5b6120108361183d565b91506118b0602084016119e0565b60008060006060848603121561203357600080fd5b61203c8461183d565b925061204a6020850161183d565b9150604084013590509250925092565b60008060006060848603121561206f57600080fd5b6120788461183d565b9250602061208781860161183d565b925060408501356001600160401b038111156120a257600080fd5b8501601f810187136120b357600080fd5b80356120c1611a4c82611a08565b81815260059190911b820183019083810190898311156120e057600080fd5b928401925b828410156120fe578335825292840192908401906120e5565b80955050505050509250925092565b60006020828403121561211f57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103f6576103f661213c565b6020808252601190820152701a5b9d985b1a5908199959481d985d5b1d607a1b604082015260600190565b6020808252600f908201526e696e76616c69642066756e6446656560881b604082015260600190565b6001600160a01b03949094168452602084019290925260408301521515606082015260800190565b600060ff821660ff81036121fb576121fb61213c565b60010192915050565b808201808211156103f6576103f661213c565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60408152600061224e6040830185611cbf565b90508260208301529392505050565b600181815b8085111561229857816000190482111561227e5761227e61213c565b8085161561228b57918102915b93841c9390800290612262565b509250929050565b6000826122af575060016103f6565b816122bc575060006103f6565b81600181146122d257600281146122dc576122f8565b60019150506103f6565b60ff8411156122ed576122ed61213c565b50506001821b6103f6565b5060208310610133831016604e8410600b841016171561231b575081810a6103f6565b612325838361225d565b80600019048211156123395761233961213c565b029392505050565b60006104a983836122a0565b818103818111156103f6576103f661213c565b60008261237d57634e487b7160e01b600052601260045260246000fd5b500490565b60005b8381101561239d578181015183820152602001612385565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516123d8816017850160208801612382565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612409816028840160208801612382565b01602801949350505050565b6020815260008251806020840152612434816040850160208701612382565b601f01601f19169190910160400192915050565b60006020828403121561245a57600080fd5b81516104a9816118b9565b6000816124745761247461213c565b506000190190565b6000825161248e818460208701612382565b919091019291505056fe59c7a9ef9a56707d87d116a5d27496afee2604c70b902ac2c4dbdcb68f36f2eacb6bc1c12dd43bca8d7dd46d975f913325437d0dcd5978e99d515e4ad39b97725d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ecfb248bbb6ca5a799a6bb9ba79f58aa5cdbe0e5979238a967315e7ffbfd119d1acb58d6d985142a614029cdf01861b4fe094d5919a47e69b8310dc4093d9d6ad0241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08275a642cf55cb12407e505ec86398168f240e88df6e66d1649bd09de9071c5dbf21b97e3e053faeacb5e76d16d9daf713b69d060518bccb2c9ee13a7f9cfc49f8d1089725c0dc266707fa6207730fb801dcd03108bfed7a21099bd303651d2b7a2646970667358221220d57301d05162a5d4f8a7cb8b5d6dec75539c25e1a92209ee1565a1314fa5866d64736f6c6343000811003359c7a9ef9a56707d87d116a5d27496afee2604c70b902ac2c4dbdcb68f36f2eacb6bc1c12dd43bca8d7dd46d975f913325437d0dcd5978e99d515e4ad39b97725d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ecfb248bbb6ca5a799a6bb9ba79f58aa5cdbe0e5979238a967315e7ffbfd119d1a241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08275a642cf55cb12407e505ec86398168f240e88df6e66d1649bd09de9071c5dbf21b97e3e053faeacb5e76d16d9daf713b69d060518bccb2c9ee13a7f9cfc49f8d1089725c0dc266707fa6207730fb801dcd03108bfed7a21099bd303651d2b7",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101545760003560e01c806301ffc9a71461015957806309d3989714610181578063248a9ca3146101c45780632f2ff15d146101d757806333abd028146101ec57806334f32e251461021757806336568abe1461022a578063415102631461023d578063478222c21461025d578063485cc95514610270578063504b8b6814610283578063715018a61461029657806375829def1461029e5780637dd49023146102b15780638da5cb5b146102c457806391d14854146102cc57806399d5c1ec146102df578063a217fddf146102f2578063a591f97f146102fa578063c6f83ad11461030d578063c8830bf514610320578063c9cf9f3a14610333578063d547741f14610346578063d877806814610359578063d9caed1214610384578063e50f19ef14610397578063f2fde38b146103aa578063f4ca4d1d146103bd575b600080fd5b61016c610167366004611813565b6103c5565b60405190151581526020015b60405180910390f35b6101b661018f366004611859565b6001600160a01b031660009081526004602090815260408083206003845290915290205490565b604051908152602001610178565b6101b66101d2366004611874565b6103fc565b6101ea6101e536600461188d565b610411565b005b6003546101ff906001600160a01b031681565b6040516001600160a01b039091168152602001610178565b6101b66102253660046118d2565b610432565b6101ea61023836600461188d565b6104b0565b61025061024b366004611b7a565b610533565b6040516101789190611cfa565b6002546101ff906001600160a01b031681565b6101ea61027e366004611d0d565b610707565b6101b6610291366004611d37565b6108ab565b6101ea61092e565b6101ea6102ac366004611859565b610942565b6101ea6102bf366004611d7f565b61096c565b6101ff610abe565b61016c6102da36600461188d565b610acd565b6101ea6102ed36600461188d565b610af6565b6101b6600081565b6101ea610308366004611859565b610b23565b6101ea61031b366004611dcc565b610b82565b6101b661032e366004611f26565b610c0b565b6101ea610341366004611859565b610c8a565b6101ea61035436600461188d565b610ceb565b6101b6610367366004611ff4565b600460209081526000928352604080842090915290825290205481565b6101ea61039236600461201e565b610d07565b6101ea6103a536600461205a565b610d8b565b6101ea6103b8366004611859565b610e92565b6101b6610f0b565b60006001600160e01b03198216637965db0b60e01b14806103f657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526020819052604090206001015490565b61041a826103fc565b610423816110b9565b61042d83836110c3565b505050565b6002546040516334f32e2560e01b81526001600160a01b038481166004830152831515602483015260009216906334f32e2590604401602060405180830381865afa158015610485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a9919061210d565b9392505050565b6001600160a01b03811633146105255760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61052f8282611147565b5050565b60408051600c8082526101a082019092526060916020820161018080368337019050509050600083600001519050600061057b82866020015186608001518760e001516111ac565b90508083600260ff168151811061059457610594612126565b602090810291909101015260a08501511580156105b5575061018085015115155b156105c15750506103f6565b8460600151156106045760a08501516105dd90839060006111f4565b83600060ff16815181106105f3576105f3612126565b602002602001018181525050610692565b60a085015161061690839060016111f4565b83600160ff168151811061062c5761062c612126565b60200260200101818152505084610120015160ff16600103610692576001600160a01b038216600090815260046020818152604080842083855290915290912054845190918291869190811061068457610684612126565b602002602001018181525050505b6101a085015160ff16156106ff576001600160a01b0382166000908152600460209081526040808320600384529091529020546101a08601516106d89060ff1682612152565b90508084600360ff16815181106106f1576106f1612126565b602002602001018181525050505b505092915050565b600154600160a81b900460ff161580801561072d575060018054600160a01b900460ff16105b80610754575061073c3061128a565b158015610754575060018054600160a01b900460ff16145b6107b75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161051c565b6001805460ff60a01b1916600160a01b17905580156107e4576001805460ff60a81b1916600160a81b1790555b6001600160a01b03831661080a5760405162461bcd60e51b815260040161051c90612169565b6001600160a01b0382166108305760405162461bcd60e51b815260040161051c90612194565b600280546001600160a01b038086166001600160a01b0319928316179092556003805492851692909116919091179055801561042d576001805460ff60a81b191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b600354604051630a09716d60e31b81526000916001600160a01b03169063504b8b68906108e29088908890889088906004016121bd565b602060405180830381865afa1580156108ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610923919061210d565b90505b949350505050565b610936611299565b61094060006112f8565b565b600061094d816110b9565b61095860008361134a565b610961826112f8565b61052f600033611147565b600080516020612599833981519152610984816110b9565b60008251116109c65760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b604482015260640161051c565b60005b82518160ff161015610ab8576000838260ff16815181106109ec576109ec612126565b60200260200101519050838260ff1681518110610a0b57610a0b612126565b6020908102919091018101516001600160a01b038716600081815260048452604080822060ff88168084529552902091909155855190917f8e26fb53d63c548677b068d08742bea435b6ecb7911ab3c5ad68fbccddeaf5fe91859185918991908110610a7957610a79612126565b6020908102919091018101516040805160ff90951685529184019290925282015260600160405180910390a25080610ab0816121e5565b9150506109c9565b50505050565b6001546001600160a01b031690565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020612539833981519152610b0e816110b9565b610b188383610411565b61042d600033610ceb565b610b3a6000805160206125398339815191526110b9565b6001600160a01b038116610b605760405162461bcd60e51b815260040161051c90612169565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610b996000805160206125198339815191526110b9565b60035460405163c6f83ad160e01b81526001600160a01b03858116600483015260248201859052604482018490529091169063c6f83ad190606401600060405180830381600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b50505050505050565b600080826060015115610c2057506000610c24565b5060015b6000610c4684600001518560a0015160c001516001600160801b0316846111f4565b84516001600160a01b0316600090815260046020908152604080832060038452909152902054909150610c81610c7c8284612204565b611354565b95945050505050565b610ca16000805160206125398339815191526110b9565b6003546001600160a01b0316610cc95760405162461bcd60e51b815260040161051c90612194565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610cf4826103fc565b610cfd816110b9565b61042d8383611147565b6000805160206124d9833981519152610d1f816110b9565b600254604051636ce5768960e11b81526001600160a01b039091169063d9caed1290610d5390879087908790600401612217565b600060405180830381600087803b158015610d6d57600080fd5b505af1158015610d81573d6000803e3d6000fd5b5050505050505050565b610da26000805160206125198339815191526110b9565b604051636eb1769f60e11b81523360048201523060248201526000906001600160a01b0384169063dd62ed3e90604401602060405180830381865afa158015610def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e13919061210d565b905080600003610e235750505050565b600254610e3f906001600160a01b0385811691339116846113c2565b336001600160a01b0316846001600160a01b03167f51b85031527a935663233d62a057687d039b9fbcd79c55e46a5b24510159336f8484604051610e8492919061223b565b60405180910390a350505050565b610e9a611299565b6001600160a01b038116610eff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161051c565b610f08816112f8565b50565b610f176008600a612341565b81565b610f23336112f8565b610f2e60003361134a565b610f3960008261134a565b610f516000805160206125398339815191523361134a565b610f696000805160206125398339815191528261134a565b610f816000805160206125998339815191523361134a565b610f996000805160206125998339815191528261134a565b610fb16000805160206124f98339815191523361134a565b610fc96000805160206124f98339815191528261134a565b610fe16000805160206124d98339815191523361134a565b610ff96000805160206124d98339815191528261134a565b6110116000805160206125598339815191523361134a565b6110296000805160206125598339815191528261134a565b6110416000805160206124b98339815191523361134a565b6110596000805160206124b98339815191528261134a565b6110716000805160206124998339815191523361134a565b6110896000805160206124998339815191528261134a565b6110a16000805160206125798339815191523361134a565b610f086000805160206125798339815191528261134a565b610f08813361141a565b6110cd8282610acd565b61052f576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556111033390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6111518282610acd565b1561052f576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000826000036111be57506000610926565b60035460405163478c57cd60e11b81526001600160a01b0390911690638f18af9a906108e2908890879087908a906004016121bd565b600082600003611206575060006104a9565b6001600160a01b038416600090815260046020908152604080832060ff861684529091528120549081900361123b5750620186a05b60006112496008600a612341565b826112566008600a612341565b611260919061234d565b61126a9087612152565b6112749190612360565b9050611280818661234d565b9695505050505050565b6001600160a01b03163b151590565b336112a2610abe565b6001600160a01b0316146109405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161051c565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61052f82826110c3565b60006001600160ff1b038211156113be5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161051c565b5090565b610ab8846323b872dd60e01b8585856040516024016113e393929190612217565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611473565b6114248282610acd565b61052f5761143181611545565b61143c836020611557565b60405160200161144d9291906123a6565b60408051601f198184030181529082905262461bcd60e51b825261051c91600401612415565b60006114c8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116f29092919063ffffffff16565b80519091501561042d57808060200190518101906114e69190612448565b61042d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161051c565b60606103f66001600160a01b03831660145b60606000611566836002612152565b611571906002612204565b6001600160401b0381111561158857611588611909565b6040519080825280601f01601f1916602001820160405280156115b2576020820181803683370190505b509050600360fc1b816000815181106115cd576115cd612126565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106115fc576115fc612126565b60200101906001600160f81b031916908160001a9053506000611620846002612152565b61162b906001612204565b90505b60018111156116a3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061165f5761165f612126565b1a60f81b82828151811061167557611675612126565b60200101906001600160f81b031916908160001a90535060049490941c9361169c81612465565b905061162e565b5083156104a95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161051c565b6060610926848460008585600080866001600160a01b03168587604051611719919061247c565b60006040518083038185875af1925050503d8060008114611756576040519150601f19603f3d011682016040523d82523d6000602084013e61175b565b606091505b509150915061176c87838387611777565b979650505050505050565b606083156117e45782516000036117dd576117918561128a565b6117dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161051c565b5081610926565b61092683838151156117f95781518083602001fd5b8060405162461bcd60e51b815260040161051c9190612415565b60006020828403121561182557600080fd5b81356001600160e01b0319811681146104a957600080fd5b80356001600160a01b038116811461185457600080fd5b919050565b60006020828403121561186b57600080fd5b6104a98261183d565b60006020828403121561188657600080fd5b5035919050565b600080604083850312156118a057600080fd5b823591506118b06020840161183d565b90509250929050565b8015158114610f0857600080fd5b8035611854816118b9565b600080604083850312156118e557600080fd5b6118ee8361183d565b915060208301356118fe816118b9565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b038111828210171561194257611942611909565b60405290565b6040516101e081016001600160401b038111828210171561194257611942611909565b6040516101a081016001600160401b038111828210171561194257611942611909565b60405160e081016001600160401b038111828210171561194257611942611909565b604051601f8201601f191681016001600160401b03811182821017156119d8576119d8611909565b604052919050565b803560ff8116811461185457600080fd5b80356001600160401b038116811461185457600080fd5b60006001600160401b03821115611a2157611a21611909565b5060051b60200190565b600082601f830112611a3c57600080fd5b81356020611a51611a4c83611a08565b6119b0565b82815260059290921b84018101918181019086841115611a7057600080fd5b8286015b84811015611a8b5780358352918301918301611a74565b509695505050505050565b803563ffffffff8116811461185457600080fd5b80356001600160d81b038116811461185457600080fd5b60006101808284031215611ad457600080fd5b611adc61191f565b9050611ae78261183d565b8152611af5602083016118c7565b6020820152611b0660408301611a96565b6040820152611b1760608301611aaa565b60608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e082015261010080830135818301525061012080830135818301525061014080830135818301525061016080830135818301525092915050565b6000806101a0808486031215611b8f57600080fd5b83356001600160401b0380821115611ba657600080fd5b908501906101e08288031215611bbb57600080fd5b611bc3611948565b611bcc8361183d565b8152611bda602084016118c7565b602082015260408301356040820152611bf5606084016118c7565b6060820152611c066080840161183d565b608082015260a083013560a082015260c083013560c082015260e083013560e0820152610100611c378185016118c7565b90820152610120611c498482016119e0565b90820152610140611c5b8482016119f1565b9082015261016083810135908201526101808084013590820152611c808484016119e0565b848201526101c093508383013582811115611c9a57600080fd5b611ca689828601611a2b565b8583015250809550505050506118b08460208501611ac1565b600081518084526020808501945080840160005b83811015611cef57815187529582019590820190600101611cd3565b509495945050505050565b6020815260006104a96020830184611cbf565b60008060408385031215611d2057600080fd5b611d298361183d565b91506118b06020840161183d565b60008060008060808587031215611d4d57600080fd5b611d568561183d565b935060208501359250604085013591506060850135611d74816118b9565b939692955090935050565b60008060408385031215611d9257600080fd5b611d9b8361183d565b915060208301356001600160401b03811115611db657600080fd5b611dc285828601611a2b565b9150509250929050565b600080600060608486031215611de157600080fd5b611dea8461183d565b95602085013595506040909401359392505050565b803565ffffffffffff8116811461185457600080fd5b80356001600160801b038116811461185457600080fd5b60006101a08284031215611e3f57600080fd5b611e4761196b565b9050611e52826119e0565b8152611e6060208301611a96565b6020820152611e71604083016119e0565b6040820152611e826060830161183d565b6060820152611e9360808301611dff565b6080820152611ea460a08301611e15565b60a0820152611eb560c08301611e15565b60c0820152611ec660e08301611e15565b60e0820152610100611ed9818401611e15565b90820152610120611eeb8382016119f1565b90820152610140611efd8382016119f1565b90820152610160611f0f838201611e15565b818301525061018080830135818301525092915050565b600060208284031215611f3857600080fd5b81356001600160401b0380821115611f4f57600080fd5b908301906102608286031215611f6457600080fd5b611f6c61198e565b611f758361183d565b8152611f83602084016118c7565b602082015260408301356040820152611f9e606084016118c7565b6060820152611faf608084016118c7565b6080820152611fc18660a08501611e2c565b60a082015261024083013582811115611fd957600080fd5b611fe587828601611a2b565b60c08301525095945050505050565b6000806040838503121561200757600080fd5b6120108361183d565b91506118b0602084016119e0565b60008060006060848603121561203357600080fd5b61203c8461183d565b925061204a6020850161183d565b9150604084013590509250925092565b60008060006060848603121561206f57600080fd5b6120788461183d565b9250602061208781860161183d565b925060408501356001600160401b038111156120a257600080fd5b8501601f810187136120b357600080fd5b80356120c1611a4c82611a08565b81815260059190911b820183019083810190898311156120e057600080fd5b928401925b828410156120fe578335825292840192908401906120e5565b80955050505050509250925092565b60006020828403121561211f57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103f6576103f661213c565b6020808252601190820152701a5b9d985b1a5908199959481d985d5b1d607a1b604082015260600190565b6020808252600f908201526e696e76616c69642066756e6446656560881b604082015260600190565b6001600160a01b03949094168452602084019290925260408301521515606082015260800190565b600060ff821660ff81036121fb576121fb61213c565b60010192915050565b808201808211156103f6576103f661213c565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60408152600061224e6040830185611cbf565b90508260208301529392505050565b600181815b8085111561229857816000190482111561227e5761227e61213c565b8085161561228b57918102915b93841c9390800290612262565b509250929050565b6000826122af575060016103f6565b816122bc575060006103f6565b81600181146122d257600281146122dc576122f8565b60019150506103f6565b60ff8411156122ed576122ed61213c565b50506001821b6103f6565b5060208310610133831016604e8410600b841016171561231b575081810a6103f6565b612325838361225d565b80600019048211156123395761233961213c565b029392505050565b60006104a983836122a0565b818103818111156103f6576103f661213c565b60008261237d57634e487b7160e01b600052601260045260246000fd5b500490565b60005b8381101561239d578181015183820152602001612385565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516123d8816017850160208801612382565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612409816028840160208801612382565b01602801949350505050565b6020815260008251806020840152612434816040850160208701612382565b601f01601f19169190910160400192915050565b60006020828403121561245a57600080fd5b81516104a9816118b9565b6000816124745761247461213c565b506000190190565b6000825161248e818460208701612382565b919091019291505056fe59c7a9ef9a56707d87d116a5d27496afee2604c70b902ac2c4dbdcb68f36f2eacb6bc1c12dd43bca8d7dd46d975f913325437d0dcd5978e99d515e4ad39b97725d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ecfb248bbb6ca5a799a6bb9ba79f58aa5cdbe0e5979238a967315e7ffbfd119d1acb58d6d985142a614029cdf01861b4fe094d5919a47e69b8310dc4093d9d6ad0241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08275a642cf55cb12407e505ec86398168f240e88df6e66d1649bd09de9071c5dbf21b97e3e053faeacb5e76d16d9daf713b69d060518bccb2c9ee13a7f9cfc49f8d1089725c0dc266707fa6207730fb801dcd03108bfed7a21099bd303651d2b7a2646970667358221220d57301d05162a5d4f8a7cb8b5d6dec75539c25e1a92209ee1565a1314fa5866d64736f6c63430008110033",
"linkReferences": {},
"deployedLinkReferences": {}
}