-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathERC721Staking.json
More file actions
19866 lines (19866 loc) · 682 KB
/
ERC721Staking.json
File metadata and controls
19866 lines (19866 loc) · 682 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
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"abi": [
{
"inputs": [
{
"internalType": "contract IERC721",
"name": "_nftCollection",
"type": "address"
},
{
"internalType": "contract IERC20",
"name": "_rewardsToken",
"type": "address"
},
{
"internalType": "contract IERC20",
"name": "_stakeToken",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "TransferFailed",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "_tokenStaker",
"type": "address"
}
],
"name": "amountStaked",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "availabTotalStake",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_tokenStaker",
"type": "address"
}
],
"name": "availableRewards",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "checkBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "claimRewards",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "nftCollection",
"outputs": [
{
"internalType": "contract IERC721",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "rewardsToken",
"outputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "stakeToken",
"outputs": [
{
"internalType": "contract IERC20",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "stakerAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "stakers",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "tokenStake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "tokenStakers",
"outputs": [
{
"internalType": "uint256",
"name": "amountStaked",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "timeOfLastUpdate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unclaimedRewards",
"type": "uint256"
},
{
"internalType": "bool",
"name": "hasStaked",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "tokenWithdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "totalStaked",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"StakingContract.sol\":311:4715 contract ERC721Staking is ReentrancyGuard {... */\n mstore(0x40, 0xe0)\n /* \"StakingContract.sol\":1517:1518 1 */\n 0x01\n /* \"StakingContract.sol\":1484:1518 uint256 private rewardsPerHour = 1 */\n 0x02\n sstore\n /* \"StakingContract.sol\":720:921 constructor(IERC721 _nftCollection, IERC20 _rewardsToken, IERC20 _stakeToken) {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n mload(0x40)\n sub(codesize, bytecodeSize)\n dup1\n bytecodeSize\n dup4\n codecopy\n dup2\n add\n 0x40\n dup2\n swap1\n mstore\n tag_2\n swap2\n tag_3\n jump\t// in\ntag_2:\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":1701:1702 */\n 0x01\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":1806:1813 */\n 0x00\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":1806:1828 */\n sstore\n sub(shl(0xa0, 0x01), 0x01)\n /* \"StakingContract.sol\":809:839 nftCollection = _nftCollection */\n swap3\n dup4\n and\n 0xa0\n mstore\n /* \"StakingContract.sol\":850:878 rewardsToken = _rewardsToken */\n swap1\n dup3\n and\n 0x80\n mstore\n /* \"StakingContract.sol\":889:913 stakeToken = _stakeToken */\n and\n 0xc0\n mstore\n /* \"StakingContract.sol\":311:4715 contract ERC721Staking is ReentrancyGuard {... */\n jump(tag_10)\n /* \"#utility.yul\":14:154 */\ntag_9:\n sub(shl(0xa0, 0x01), 0x01)\n /* \"#utility.yul\":98:129 */\n dup2\n and\n /* \"#utility.yul\":88:130 */\n dup2\n eq\n /* \"#utility.yul\":78:148 */\n tag_12\n jumpi\n /* \"#utility.yul\":144:145 */\n 0x00\n /* \"#utility.yul\":141:142 */\n dup1\n /* \"#utility.yul\":134:146 */\n revert\n /* \"#utility.yul\":78:148 */\ntag_12:\n /* \"#utility.yul\":14:154 */\n pop\n jump\t// out\n /* \"#utility.yul\":159:748 */\ntag_3:\n /* \"#utility.yul\":290:296 */\n 0x00\n /* \"#utility.yul\":298:304 */\n dup1\n /* \"#utility.yul\":306:312 */\n 0x00\n /* \"#utility.yul\":359:361 */\n 0x60\n /* \"#utility.yul\":347:356 */\n dup5\n /* \"#utility.yul\":338:345 */\n dup7\n /* \"#utility.yul\":334:357 */\n sub\n /* \"#utility.yul\":330:362 */\n slt\n /* \"#utility.yul\":327:379 */\n iszero\n tag_14\n jumpi\n /* \"#utility.yul\":375:376 */\n 0x00\n /* \"#utility.yul\":372:373 */\n dup1\n /* \"#utility.yul\":365:377 */\n revert\n /* \"#utility.yul\":327:379 */\ntag_14:\n /* \"#utility.yul\":407:416 */\n dup4\n /* \"#utility.yul\":401:417 */\n mload\n /* \"#utility.yul\":426:466 */\n tag_15\n /* \"#utility.yul\":460:465 */\n dup2\n /* \"#utility.yul\":426:466 */\n tag_9\n jump\t// in\ntag_15:\n /* \"#utility.yul\":535:537 */\n 0x20\n /* \"#utility.yul\":520:538 */\n dup6\n add\n /* \"#utility.yul\":514:539 */\n mload\n /* \"#utility.yul\":485:490 */\n swap1\n swap4\n pop\n /* \"#utility.yul\":548:590 */\n tag_16\n /* \"#utility.yul\":514:539 */\n dup2\n /* \"#utility.yul\":548:590 */\n tag_9\n jump\t// in\ntag_16:\n /* \"#utility.yul\":661:663 */\n 0x40\n /* \"#utility.yul\":646:664 */\n dup6\n add\n /* \"#utility.yul\":640:665 */\n mload\n /* \"#utility.yul\":609:616 */\n swap1\n swap3\n pop\n /* \"#utility.yul\":674:716 */\n tag_17\n /* \"#utility.yul\":640:665 */\n dup2\n /* \"#utility.yul\":674:716 */\n tag_9\n jump\t// in\ntag_17:\n /* \"#utility.yul\":735:742 */\n dup1\n /* \"#utility.yul\":725:742 */\n swap2\n pop\n pop\n /* \"#utility.yul\":159:748 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\ntag_10:\n /* \"StakingContract.sol\":311:4715 contract ERC721Staking is ReentrancyGuard {... */\n mload(0x80)\n mload(0xa0)\n mload(0xc0)\n codecopy(0x00, dataOffset(sub_0), dataSize(sub_0))\n 0x00\n assignImmutable(\"0x731dc163f73d31d8c68f9917ce4ff967753939f70432973c04fd2c2a48148607\")\n 0x00\n assignImmutable(\"0x8e8fab5f003314da8d1873ea7720e8d9f47650136d916064d1edb8a11d682624\")\n 0x00\n assignImmutable(\"0x5c4c6aa067b6f8e6cb38e6ab843832a94d1712d661a04d73c517d6a1931a9e5d\")\n return(0x00, dataSize(sub_0))\nstop\n\nsub_0: assembly {\n /* \"StakingContract.sol\":311:4715 contract ERC721Staking is ReentrancyGuard {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x94067045\n gt\n tag_17\n jumpi\n dup1\n 0xd1af0c7d\n gt\n tag_18\n jumpi\n dup1\n 0xd1af0c7d\n eq\n tag_13\n jumpi\n dup1\n 0xef40a670\n eq\n tag_14\n jumpi\n dup1\n 0xf854a27f\n eq\n tag_15\n jumpi\n dup1\n 0xfd5e6dd1\n eq\n tag_16\n jumpi\n 0x00\n dup1\n revert\n tag_18:\n dup1\n 0x94067045\n eq\n tag_10\n jumpi\n dup1\n 0x99c70be9\n eq\n tag_11\n jumpi\n dup1\n 0xb5be9306\n eq\n tag_12\n jumpi\n 0x00\n dup1\n revert\n tag_17:\n dup1\n 0x51ed6a30\n gt\n tag_19\n jumpi\n dup1\n 0x51ed6a30\n eq\n tag_6\n jumpi\n dup1\n 0x5f515226\n eq\n tag_7\n jumpi\n dup1\n 0x6588103b\n eq\n tag_8\n jumpi\n dup1\n 0x817b1cd2\n eq\n tag_9\n jumpi\n 0x00\n dup1\n revert\n tag_19:\n dup1\n 0x30c74e04\n eq\n tag_3\n jumpi\n dup1\n 0x372500ab\n eq\n tag_4\n jumpi\n dup1\n 0x4b0369b8\n eq\n tag_5\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"StakingContract.sol\":2711:3274 function tokenWithdraw() external nonReentrant{... */\n tag_3:\n tag_20\n tag_21\n jump\t// in\n tag_20:\n stop\n /* \"StakingContract.sol\":3282:3683 function claimRewards() external {... */\n tag_4:\n tag_20\n tag_23\n jump\t// in\n /* \"StakingContract.sol\":4095:4190 function availabTotalStake() public view returns (uint256){... */\n tag_5:\n /* \"StakingContract.sol\":4171:4182 totalStaked */\n sload(0x01)\n /* \"StakingContract.sol\":4095:4190 function availabTotalStake() public view returns (uint256){... */\n tag_24:\n mload(0x40)\n /* \"#utility.yul\":160:185 */\n swap1\n dup2\n mstore\n /* \"#utility.yul\":148:150 */\n 0x20\n /* \"#utility.yul\":133:151 */\n add\n /* \"StakingContract.sol\":4095:4190 function availabTotalStake() public view returns (uint256){... */\n tag_26:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"StakingContract.sol\":523:557 IERC20 public immutable stakeToken */\n tag_6:\n tag_28\n immutable(\"0x731dc163f73d31d8c68f9917ce4ff967753939f70432973c04fd2c2a48148607\")\n dup2\n jump\n tag_28:\n mload(0x40)\n sub(shl(0xa0, 0x01), 0x01)\n /* \"#utility.yul\":374:429 */\n swap1\n swap2\n and\n /* \"#utility.yul\":356:430 */\n dup2\n mstore\n /* \"#utility.yul\":344:346 */\n 0x20\n /* \"#utility.yul\":329:347 */\n add\n /* \"StakingContract.sol\":523:557 IERC20 public immutable stakeToken */\n tag_26\n /* \"#utility.yul\":196:436 */\n jump\n /* \"StakingContract.sol\":3691:3847 function checkBalance(address owner) external view returns(uint256){... */\n tag_7:\n tag_24\n tag_33\n calldatasize\n 0x04\n tag_34\n jump\t// in\n tag_33:\n tag_35\n jump\t// in\n /* \"StakingContract.sol\":478:516 IERC721 public immutable nftCollection */\n tag_8:\n tag_28\n immutable(\"0x8e8fab5f003314da8d1873ea7720e8d9f47650136d916064d1edb8a11d682624\")\n dup2\n jump\n /* \"StakingContract.sol\":598:624 uint256 public totalStaked */\n tag_9:\n tag_24\n sload(0x01)\n dup2\n jump\n /* \"StakingContract.sol\":1748:1796 mapping(uint256 => address) public stakerAddress */\n tag_10:\n tag_28\n tag_45\n calldatasize\n 0x04\n tag_46\n jump\t// in\n tag_45:\n mstore(0x20, 0x04)\n 0x00\n swap1\n dup2\n mstore\n 0x40\n swap1\n keccak256\n sload\n sub(shl(0xa0, 0x01), 0x01)\n and\n dup2\n jump\n /* \"StakingContract.sol\":1576:1627 mapping(address => TokenStaker) public tokenStakers */\n tag_11:\n tag_50\n tag_51\n calldatasize\n 0x04\n tag_34\n jump\t// in\n tag_51:\n 0x03\n 0x20\n dup2\n swap1\n mstore\n 0x00\n swap2\n dup3\n mstore\n 0x40\n swap1\n swap2\n keccak256\n dup1\n sload\n 0x01\n dup3\n add\n sload\n 0x02\n dup4\n add\n sload\n swap3\n swap1\n swap4\n add\n sload\n swap1\n swap3\n swap2\n swap1\n 0xff\n and\n dup5\n jump\n tag_50:\n 0x40\n dup1\n mload\n /* \"#utility.yul\":1642:1667 */\n swap5\n dup6\n mstore\n /* \"#utility.yul\":1698:1700 */\n 0x20\n /* \"#utility.yul\":1683:1701 */\n dup6\n add\n /* \"#utility.yul\":1676:1710 */\n swap4\n swap1\n swap4\n mstore\n /* \"#utility.yul\":1726:1744 */\n swap2\n dup4\n add\n /* \"#utility.yul\":1719:1753 */\n mstore\n /* \"#utility.yul\":1796:1810 */\n iszero\n /* \"#utility.yul\":1789:1811 */\n iszero\n /* \"#utility.yul\":1784:1786 */\n 0x60\n /* \"#utility.yul\":1769:1787 */\n dup3\n add\n /* \"#utility.yul\":1762:1812 */\n mstore\n /* \"#utility.yul\":1629:1632 */\n 0x80\n /* \"#utility.yul\":1614:1633 */\n add\n /* \"StakingContract.sol\":1576:1627 mapping(address => TokenStaker) public tokenStakers */\n tag_26\n /* \"#utility.yul\":1417:1818 */\n jump\n /* \"StakingContract.sol\":1838:2703 function tokenStake(uint256 _amount) external nonReentrant{... */\n tag_12:\n tag_20\n tag_56\n calldatasize\n 0x04\n tag_46\n jump\t// in\n tag_56:\n tag_57\n jump\t// in\n /* \"StakingContract.sol\":435:471 IERC20 public immutable rewardsToken */\n tag_13:\n tag_28\n immutable(\"0x5c4c6aa067b6f8e6cb38e6ab843832a94d1712d661a04d73c517d6a1931a9e5d\")\n dup2\n jump\n /* \"StakingContract.sol\":4198:4371 function amountStaked(address _tokenStaker) external view returns(uint256){... */\n tag_14:\n tag_24\n tag_62\n calldatasize\n 0x04\n tag_34\n jump\t// in\n tag_62:\n sub(shl(0xa0, 0x01), 0x01)\n /* \"StakingContract.sol\":4300:4326 tokenStakers[_tokenStaker] */\n and\n /* \"StakingContract.sol\":4264:4271 uint256 */\n 0x00\n /* \"StakingContract.sol\":4300:4326 tokenStakers[_tokenStaker] */\n swap1\n dup2\n mstore\n /* \"StakingContract.sol\":4300:4312 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":4300:4326 tokenStakers[_tokenStaker] */\n 0x20\n mstore\n 0x40\n swap1\n keccak256\n /* \"StakingContract.sol\":4300:4339 tokenStakers[_tokenStaker].amountStaked */\n sload\n swap1\n /* \"StakingContract.sol\":4198:4371 function amountStaked(address _tokenStaker) external view returns(uint256){... */\n jump\n /* \"StakingContract.sol\":3858:4087 function availableRewards(address _tokenStaker) public view returns (uint256) {... */\n tag_15:\n tag_24\n tag_66\n calldatasize\n 0x04\n tag_34\n jump\t// in\n tag_66:\n tag_67\n jump\t// in\n /* \"StakingContract.sol\":1805:1829 address[] public stakers */\n tag_16:\n tag_28\n tag_70\n calldatasize\n 0x04\n tag_46\n jump\t// in\n tag_70:\n tag_71\n jump\t// in\n /* \"StakingContract.sol\":2711:3274 function tokenWithdraw() external nonReentrant{... */\n tag_21:\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":1744:1745 */\n 0x02\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2325:2332 */\n sload(0x00)\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2325:2344 */\n sub\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2317:2380 */\n tag_74\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n /* \"#utility.yul\":2025:2027 */\n 0x20\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2317:2380 */\n 0x04\n dup3\n add\n /* \"#utility.yul\":2007:2028 */\n mstore\n /* \"#utility.yul\":2064:2066 */\n 0x1f\n /* \"#utility.yul\":2044:2062 */\n 0x24\n dup3\n add\n /* \"#utility.yul\":2037:2067 */\n mstore\n /* \"#utility.yul\":2103:2136 */\n 0x5265656e7472616e637947756172643a207265656e7472616e742063616c6c00\n /* \"#utility.yul\":2083:2101 */\n 0x44\n dup3\n add\n /* \"#utility.yul\":2076:2137 */\n mstore\n /* \"#utility.yul\":2154:2172 */\n 0x64\n add\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2317:2380 */\n tag_75:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_74:\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":1744:1745 */\n 0x02\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2455:2462 */\n 0x00\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2455:2473 */\n swap1\n dup2\n sstore\n /* \"StakingContract.sol\":2789:2799 msg.sender */\n caller\n /* \"StakingContract.sol\":2776:2800 tokenStakers[msg.sender] */\n dup2\n mstore\n /* \"StakingContract.sol\":2776:2788 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":2776:2800 tokenStakers[msg.sender] */\n 0x20\n mstore\n 0x40\n swap1\n keccak256\n /* \"StakingContract.sol\":2776:2813 tokenStakers[msg.sender].amountStaked */\n sload\n /* \"StakingContract.sol\":2768:2846 require(tokenStakers[msg.sender].amountStaked > 0,\"You have no token staked!\") */\n tag_78\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n /* \"#utility.yul\":2385:2387 */\n 0x20\n /* \"StakingContract.sol\":2768:2846 require(tokenStakers[msg.sender].amountStaked > 0,\"You have no token staked!\") */\n 0x04\n dup3\n add\n /* \"#utility.yul\":2367:2388 */\n mstore\n /* \"#utility.yul\":2424:2426 */\n 0x19\n /* \"#utility.yul\":2404:2422 */\n 0x24\n dup3\n add\n /* \"#utility.yul\":2397:2427 */\n mstore\n /* \"#utility.yul\":2463:2490 */\n 0x596f752068617665206e6f20746f6b656e207374616b65642100000000000000\n /* \"#utility.yul\":2443:2461 */\n 0x44\n dup3\n add\n /* \"#utility.yul\":2436:2491 */\n mstore\n /* \"#utility.yul\":2508:2526 */\n 0x64\n add\n /* \"StakingContract.sol\":2768:2846 require(tokenStakers[msg.sender].amountStaked > 0,\"You have no token staked!\") */\n tag_75\n /* \"#utility.yul\":2183:2532 */\n jump\n /* \"StakingContract.sol\":2768:2846 require(tokenStakers[msg.sender].amountStaked > 0,\"You have no token staked!\") */\n tag_78:\n /* \"StakingContract.sol\":2859:2874 uint256 rewards */\n 0x00\n /* \"StakingContract.sol\":2877:2905 calculateRewards(msg.sender) */\n tag_81\n /* \"StakingContract.sol\":2894:2904 msg.sender */\n caller\n /* \"StakingContract.sol\":2877:2893 calculateRewards */\n tag_82\n /* \"StakingContract.sol\":2877:2905 calculateRewards(msg.sender) */\n jump\t// in\n tag_81:\n /* \"StakingContract.sol\":2931:2941 msg.sender */\n caller\n /* \"StakingContract.sol\":2918:2942 tokenStakers[msg.sender] */\n 0x00\n swap1\n dup2\n mstore\n /* \"StakingContract.sol\":2918:2930 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":2918:2942 tokenStakers[msg.sender] */\n 0x20\n mstore\n 0x40\n dup2\n keccak256\n /* \"StakingContract.sol\":2918:2959 tokenStakers[msg.sender].unclaimedRewards */\n 0x02\n add\n /* \"StakingContract.sol\":2918:2970 tokenStakers[msg.sender].unclaimedRewards += rewards */\n dup1\n sload\n /* \"StakingContract.sol\":2859:2905 uint256 rewards = calculateRewards(msg.sender) */\n swap3\n swap4\n pop\n dup4\n swap3\n /* \"StakingContract.sol\":2918:2959 tokenStakers[msg.sender].unclaimedRewards */\n swap1\n swap2\n /* \"StakingContract.sol\":2918:2942 tokenStakers[msg.sender] */\n swap1\n /* \"StakingContract.sol\":2918:2970 tokenStakers[msg.sender].unclaimedRewards += rewards */\n tag_83\n swap1\n /* \"StakingContract.sol\":2859:2905 uint256 rewards = calculateRewards(msg.sender) */\n dup5\n swap1\n /* \"StakingContract.sol\":2918:2970 tokenStakers[msg.sender].unclaimedRewards += rewards */\n tag_84\n jump\t// in\n tag_83:\n swap1\n swap2\n sstore\n pop\n pop\n /* \"StakingContract.sol\":3014:3024 msg.sender */\n caller\n /* \"StakingContract.sol\":2983:2998 uint256 balance */\n 0x00\n /* \"StakingContract.sol\":3001:3025 tokenStakers[msg.sender] */\n dup2\n dup2\n mstore\n /* \"StakingContract.sol\":3001:3013 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":3001:3025 tokenStakers[msg.sender] */\n 0x20\n mstore\n 0x40\n swap1\n dup2\n swap1\n keccak256\n /* \"StakingContract.sol\":3001:3038 tokenStakers[msg.sender].amountStaked */\n sload\n /* \"StakingContract.sol\":3051:3090 stakeToken.transfer(msg.sender,balance) */\n swap1\n mload\n shl(0xe0, 0xa9059cbb)\n dup2\n mstore\n 0x04\n dup2\n add\n /* \"#utility.yul\":2976:3050 */\n swap3\n swap1\n swap3\n mstore\n /* \"#utility.yul\":3066:3084 */\n 0x24\n dup3\n add\n /* \"#utility.yul\":3059:3093 */\n dup2\n swap1\n mstore\n /* \"StakingContract.sol\":3001:3038 tokenStakers[msg.sender].amountStaked */\n swap1\n sub(shl(0xa0, 0x01), 0x01)\n /* \"StakingContract.sol\":3051:3061 stakeToken */\n immutable(\"0x731dc163f73d31d8c68f9917ce4ff967753939f70432973c04fd2c2a48148607\")\n /* \"StakingContract.sol\":3051:3070 stakeToken.transfer */\n and\n swap1\n 0xa9059cbb\n swap1\n /* \"#utility.yul\":2949:2967 */\n 0x44\n add\n /* \"StakingContract.sol\":3051:3090 stakeToken.transfer(msg.sender,balance) */\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_88\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_88:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_89\n swap2\n swap1\n tag_90\n jump\t// in\n tag_89:\n pop\n /* \"StakingContract.sol\":3131:3138 balance */\n dup1\n /* \"StakingContract.sol\":3117:3128 totalStaked */\n sload(0x01)\n /* \"StakingContract.sol\":3117:3138 totalStaked - balance */\n tag_91\n swap2\n swap1\n tag_92\n jump\t// in\n tag_91:\n /* \"StakingContract.sol\":3103:3114 totalStaked */\n 0x01\n /* \"StakingContract.sol\":3103:3138 totalStaked = totalStaked - balance */\n swap1\n dup2\n sstore\n /* \"StakingContract.sol\":3164:3174 msg.sender */\n caller\n /* \"StakingContract.sol\":3191:3192 0 */\n 0x00\n /* \"StakingContract.sol\":3151:3175 tokenStakers[msg.sender] */\n swap1\n dup2\n mstore\n /* \"StakingContract.sol\":3151:3163 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":3151:3175 tokenStakers[msg.sender] */\n 0x20\n mstore\n 0x40\n dup2\n keccak256\n /* \"StakingContract.sol\":3151:3192 tokenStakers[msg.sender].amountStaked = 0 */\n dup2\n dup2\n sstore\n /* \"StakingContract.sol\":3249:3264 block.timestamp */\n timestamp\n /* \"StakingContract.sol\":3205:3246 tokenStakers[msg.sender].timeOfLastUpdate */\n swap1\n dup4\n add\n /* \"StakingContract.sol\":3205:3264 tokenStakers[msg.sender].timeOfLastUpdate = block.timestamp */\n sstore\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2628:2650 */\n sstore\n pop\n pop\n /* \"StakingContract.sol\":2711:3274 function tokenWithdraw() external nonReentrant{... */\n jump\t// out\n /* \"StakingContract.sol\":3282:3683 function claimRewards() external {... */\n tag_23:\n /* \"StakingContract.sol\":3401:3411 msg.sender */\n caller\n /* \"StakingContract.sol\":3326:3341 uint256 rewards */\n 0x00\n /* \"StakingContract.sol\":3388:3412 tokenStakers[msg.sender] */\n dup2\n dup2\n mstore\n /* \"StakingContract.sol\":3388:3400 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":3388:3412 tokenStakers[msg.sender] */\n 0x20\n mstore\n 0x40\n dup2\n keccak256\n /* \"StakingContract.sol\":3388:3429 tokenStakers[msg.sender].unclaimedRewards */\n 0x02\n add\n sload\n /* \"StakingContract.sol\":3326:3341 uint256 rewards */\n swap1\n swap2\n /* \"StakingContract.sol\":3344:3372 calculateRewards(msg.sender) */\n tag_94\n swap1\n /* \"StakingContract.sol\":3344:3360 calculateRewards */\n tag_82\n /* \"StakingContract.sol\":3344:3372 calculateRewards(msg.sender) */\n jump\t// in\n tag_94:\n /* \"StakingContract.sol\":3344:3429 calculateRewards(msg.sender) +... */\n tag_95\n swap2\n swap1\n tag_84\n jump\t// in\n tag_95:\n /* \"StakingContract.sol\":3326:3429 uint256 rewards = calculateRewards(msg.sender) +... */\n swap1\n pop\n /* \"StakingContract.sol\":3458:3459 0 */\n 0x00\n /* \"StakingContract.sol\":3448:3455 rewards */\n dup2\n /* \"StakingContract.sol\":3448:3459 rewards > 0 */\n gt\n /* \"StakingContract.sol\":3440:3492 require(rewards > 0, \"You have no rewards to claim\") */\n tag_96\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n /* \"#utility.yul\":3718:3720 */\n 0x20\n /* \"StakingContract.sol\":3440:3492 require(rewards > 0, \"You have no rewards to claim\") */\n 0x04\n dup3\n add\n /* \"#utility.yul\":3700:3721 */\n mstore\n /* \"#utility.yul\":3757:3759 */\n 0x1c\n /* \"#utility.yul\":3737:3755 */\n 0x24\n dup3\n add\n /* \"#utility.yul\":3730:3760 */\n mstore\n /* \"#utility.yul\":3796:3826 */\n 0x596f752068617665206e6f207265776172647320746f20636c61696d00000000\n /* \"#utility.yul\":3776:3794 */\n 0x44\n dup3\n add\n /* \"#utility.yul\":3769:3827 */\n mstore\n /* \"#utility.yul\":3844:3862 */\n 0x64\n add\n /* \"StakingContract.sol\":3440:3492 require(rewards > 0, \"You have no rewards to claim\") */\n tag_75\n /* \"#utility.yul\":3516:3868 */\n jump\n /* \"StakingContract.sol\":3440:3492 require(rewards > 0, \"You have no rewards to claim\") */\n tag_96:\n /* \"StakingContract.sol\":3516:3526 msg.sender */\n caller\n /* \"StakingContract.sol\":3503:3527 tokenStakers[msg.sender] */\n 0x00\n dup2\n dup2\n mstore\n /* \"StakingContract.sol\":3503:3515 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":3503:3527 tokenStakers[msg.sender] */\n 0x20\n mstore\n 0x40\n dup2\n keccak256\n /* \"StakingContract.sol\":3547:3562 block.timestamp */\n timestamp\n /* \"StakingContract.sol\":3503:3544 tokenStakers[msg.sender].timeOfLastUpdate */\n 0x01\n dup3\n add\n /* \"StakingContract.sol\":3503:3562 tokenStakers[msg.sender].timeOfLastUpdate = block.timestamp */\n sstore\n /* \"StakingContract.sol\":3573:3614 tokenStakers[msg.sender].unclaimedRewards */\n 0x02\n add\n /* \"StakingContract.sol\":3573:3618 tokenStakers[msg.sender].unclaimedRewards = 0 */\n sstore\n /* \"StakingContract.sol\":3629:3675 rewardsToken.safeTransfer(msg.sender, rewards) */\n tag_99\n swap1\n /* \"StakingContract.sol\":3629:3641 rewardsToken */\n immutable(\"0x5c4c6aa067b6f8e6cb38e6ab843832a94d1712d661a04d73c517d6a1931a9e5d\")\n sub(shl(0xa0, 0x01), 0x01)\n /* \"StakingContract.sol\":3629:3654 rewardsToken.safeTransfer */\n and\n swap1\n /* \"StakingContract.sol\":3667:3674 rewards */\n dup4\n /* \"StakingContract.sol\":3629:3654 rewardsToken.safeTransfer */\n tag_100\n /* \"StakingContract.sol\":3629:3675 rewardsToken.safeTransfer(msg.sender, rewards) */\n jump\t// in\n tag_99:\n /* \"StakingContract.sol\":3315:3683 {... */\n pop\n /* \"StakingContract.sol\":3282:3683 function claimRewards() external {... */\n jump\t// out\n /* \"StakingContract.sol\":3691:3847 function checkBalance(address owner) external view returns(uint256){... */\n tag_35:\n /* \"StakingContract.sol\":3787:3814 stakeToken.balanceOf(owner) */\n mload(0x40)\n shl(0xe0, 0x70a08231)\n dup2\n mstore\n sub(shl(0xa0, 0x01), 0x01)\n /* \"#utility.yul\":374:429 */\n dup3\n dup2\n and\n /* \"StakingContract.sol\":3787:3814 stakeToken.balanceOf(owner) */\n 0x04\n dup4\n add\n /* \"#utility.yul\":356:430 */\n mstore\n /* \"StakingContract.sol\":3750:3757 uint256 */\n 0x00\n swap2\n dup3\n swap2\n /* \"StakingContract.sol\":3787:3797 stakeToken */\n immutable(\"0x731dc163f73d31d8c68f9917ce4ff967753939f70432973c04fd2c2a48148607\")\n /* \"StakingContract.sol\":3787:3807 stakeToken.balanceOf */\n and\n swap1\n 0x70a08231\n swap1\n /* \"#utility.yul\":329:347 */\n 0x24\n add\n /* \"StakingContract.sol\":3787:3814 stakeToken.balanceOf(owner) */\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_105\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_105:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_106\n swap2\n swap1\n tag_107\n jump\t// in\n tag_106:\n /* \"StakingContract.sol\":3769:3814 uint256 balance = stakeToken.balanceOf(owner) */\n swap4\n /* \"StakingContract.sol\":3691:3847 function checkBalance(address owner) external view returns(uint256){... */\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"StakingContract.sol\":1838:2703 function tokenStake(uint256 _amount) external nonReentrant{... */\n tag_57:\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":1744:1745 */\n 0x02\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2325:2332 */\n sload(0x00)\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2325:2344 */\n sub\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2317:2380 */\n tag_109\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n /* \"#utility.yul\":2025:2027 */\n 0x20\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2317:2380 */\n 0x04\n dup3\n add\n /* \"#utility.yul\":2007:2028 */\n mstore\n /* \"#utility.yul\":2064:2066 */\n 0x1f\n /* \"#utility.yul\":2044:2062 */\n 0x24\n dup3\n add\n /* \"#utility.yul\":2037:2067 */\n mstore\n /* \"#utility.yul\":2103:2136 */\n 0x5265656e7472616e637947756172643a207265656e7472616e742063616c6c00\n /* \"#utility.yul\":2083:2101 */\n 0x44\n dup3\n add\n /* \"#utility.yul\":2076:2137 */\n mstore\n /* \"#utility.yul\":2154:2172 */\n 0x64\n add\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2317:2380 */\n tag_75\n /* \"#utility.yul\":1823:2178 */\n jump\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2317:2380 */\n tag_109:\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":1744:1745 */\n 0x02\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2455:2462 */\n 0x00\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2455:2473 */\n sstore\n /* \"StakingContract.sol\":2006:2017 _amount > 0 */\n dup1\n /* \"StakingContract.sol\":1998:2040 require(_amount > 0, \"amount cannot be 0\") */\n tag_112\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n /* \"#utility.yul\":4264:4266 */\n 0x20\n /* \"StakingContract.sol\":1998:2040 require(_amount > 0, \"amount cannot be 0\") */\n 0x04\n dup3\n add\n /* \"#utility.yul\":4246:4267 */\n mstore\n /* \"#utility.yul\":4303:4305 */\n 0x12\n /* \"#utility.yul\":4283:4301 */\n 0x24\n dup3\n add\n /* \"#utility.yul\":4276:4306 */\n mstore\n /* \"#utility.yul\":4342:4362 */\n 0x616d6f756e742063616e6e6f7420626520300000000000000000000000000000\n /* \"#utility.yul\":4322:4340 */\n 0x44\n dup3\n add\n /* \"#utility.yul\":4315:4363 */\n mstore\n /* \"#utility.yul\":4380:4398 */\n 0x64\n add\n /* \"StakingContract.sol\":1998:2040 require(_amount > 0, \"amount cannot be 0\") */\n tag_75\n /* \"#utility.yul\":4062:4404 */\n jump\n /* \"StakingContract.sol\":1998:2040 require(_amount > 0, \"amount cannot be 0\") */\n tag_112:\n /* \"StakingContract.sol\":2070:2080 msg.sender */\n caller\n /* \"StakingContract.sol\":2097:2098 0 */\n 0x00\n /* \"StakingContract.sol\":2057:2081 tokenStakers[msg.sender] */\n swap1\n dup2\n mstore\n /* \"StakingContract.sol\":2057:2069 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":2057:2081 tokenStakers[msg.sender] */\n 0x20\n mstore\n 0x40\n swap1\n keccak256\n /* \"StakingContract.sol\":2057:2094 tokenStakers[msg.sender].amountStaked */\n sload\n /* \"StakingContract.sol\":2057:2098 tokenStakers[msg.sender].amountStaked > 0 */\n iszero\n /* \"StakingContract.sol\":2053:2240 if (tokenStakers[msg.sender].amountStaked > 0) {... */\n tag_115\n jumpi\n /* \"StakingContract.sol\":2115:2130 uint256 rewards */\n 0x00\n /* \"StakingContract.sol\":2133:2161 calculateRewards(msg.sender) */\n tag_116\n /* \"StakingContract.sol\":2150:2160 msg.sender */\n caller\n /* \"StakingContract.sol\":2133:2149 calculateRewards */\n tag_82\n /* \"StakingContract.sol\":2133:2161 calculateRewards(msg.sender) */\n jump\t// in\n tag_116:\n /* \"StakingContract.sol\":2189:2199 msg.sender */\n caller\n /* \"StakingContract.sol\":2176:2200 tokenStakers[msg.sender] */\n 0x00\n swap1\n dup2\n mstore\n /* \"StakingContract.sol\":2176:2188 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":2176:2200 tokenStakers[msg.sender] */\n 0x20\n mstore\n 0x40\n dup2\n keccak256\n /* \"StakingContract.sol\":2176:2217 tokenStakers[msg.sender].unclaimedRewards */\n 0x02\n add\n /* \"StakingContract.sol\":2176:2228 tokenStakers[msg.sender].unclaimedRewards += rewards */\n dup1\n sload\n /* \"StakingContract.sol\":2115:2161 uint256 rewards = calculateRewards(msg.sender) */\n swap3\n swap4\n pop\n dup4\n swap3\n /* \"StakingContract.sol\":2176:2217 tokenStakers[msg.sender].unclaimedRewards */\n swap1\n swap2\n /* \"StakingContract.sol\":2176:2200 tokenStakers[msg.sender] */\n swap1\n /* \"StakingContract.sol\":2176:2228 tokenStakers[msg.sender].unclaimedRewards += rewards */\n tag_117\n swap1\n /* \"StakingContract.sol\":2115:2161 uint256 rewards = calculateRewards(msg.sender) */\n dup5\n swap1\n /* \"StakingContract.sol\":2176:2228 tokenStakers[msg.sender].unclaimedRewards += rewards */\n tag_84\n jump\t// in\n tag_117:\n swap1\n swap2\n sstore\n pop\n pop\n pop\n /* \"StakingContract.sol\":2053:2240 if (tokenStakers[msg.sender].amountStaked > 0) {... */\n tag_115:\n /* \"StakingContract.sol\":2255:2314 stakeToken.transferFrom(msg.sender, address(this), _amount) */\n mload(0x40)\n shl(0xe0, 0x23b872dd)\n dup2\n mstore\n /* \"StakingContract.sol\":2279:2289 msg.sender */\n caller\n /* \"StakingContract.sol\":2255:2314 stakeToken.transferFrom(msg.sender, address(this), _amount) */\n 0x04\n dup3\n add\n /* \"#utility.yul\":4672:4706 */\n mstore\n /* \"StakingContract.sol\":2299:2303 this */\n address\n /* \"#utility.yul\":4722:4740 */\n 0x24\n dup3\n add\n /* \"#utility.yul\":4715:4758 */\n mstore\n /* \"#utility.yul\":4774:4792 */\n 0x44\n dup2\n add\n /* \"#utility.yul\":4767:4801 */\n dup3\n swap1\n mstore\n /* \"StakingContract.sol\":2255:2265 stakeToken */\n immutable(\"0x731dc163f73d31d8c68f9917ce4ff967753939f70432973c04fd2c2a48148607\")\n sub(shl(0xa0, 0x01), 0x01)\n /* \"StakingContract.sol\":2255:2278 stakeToken.transferFrom */\n and\n swap1\n 0x23b872dd\n swap1\n /* \"#utility.yul\":4584:4602 */\n 0x64\n add\n /* \"StakingContract.sol\":2255:2314 stakeToken.transferFrom(msg.sender, address(this), _amount) */\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_121\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_121:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_122\n swap2\n swap1\n tag_90\n jump\t// in\n tag_122:\n pop\n /* \"StakingContract.sol\":2408:2415 _amount */\n dup1\n /* \"StakingContract.sol\":2394:2405 totalStaked */\n sload(0x01)\n /* \"StakingContract.sol\":2394:2415 totalStaked + _amount */\n tag_123\n swap2\n swap1\n tag_84\n jump\t// in\n tag_123:\n /* \"StakingContract.sol\":2380:2391 totalStaked */\n 0x01\n /* \"StakingContract.sol\":2380:2415 totalStaked = totalStaked + _amount */\n sstore\n /* \"StakingContract.sol\":2483:2493 msg.sender */\n caller\n /* \"StakingContract.sol\":2470:2494 tokenStakers[msg.sender] */\n 0x00\n swap1\n dup2\n mstore\n /* \"StakingContract.sol\":2470:2482 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":2470:2494 tokenStakers[msg.sender] */\n 0x20\n mstore\n 0x40\n swap1\n keccak256\n /* \"StakingContract.sol\":2470:2507 tokenStakers[msg.sender].amountStaked */\n sload\n /* \"StakingContract.sol\":2470:2517 tokenStakers[msg.sender].amountStaked + _amount */\n tag_124\n swap1\n /* \"StakingContract.sol\":2510:2517 _amount */\n dup3\n swap1\n /* \"StakingContract.sol\":2470:2517 tokenStakers[msg.sender].amountStaked + _amount */\n tag_84\n jump\t// in\n tag_124:\n /* \"StakingContract.sol\":2442:2452 msg.sender */\n caller\n /* \"StakingContract.sol\":2429:2453 tokenStakers[msg.sender] */\n 0x00\n swap1\n dup2\n mstore\n /* \"StakingContract.sol\":2429:2441 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":2429:2453 tokenStakers[msg.sender] */\n 0x20\n dup2\n swap1\n mstore\n 0x40\n swap1\n swap2\n keccak256\n /* \"StakingContract.sol\":2429:2517 tokenStakers[msg.sender].amountStaked = tokenStakers[msg.sender].amountStaked + _amount */\n swap2\n dup3\n sstore\n /* \"StakingContract.sol\":2533:2567 tokenStakers[msg.sender].hasStaked */\n add\n sload\n 0xff\n and\n /* \"StakingContract.sol\":2529:2617 if(!tokenStakers[msg.sender].hasStaked){... */\n tag_125\n jumpi\n /* \"StakingContract.sol\":2582:2589 stakers */\n 0x05\n /* \"StakingContract.sol\":2582:2606 stakers.push(msg.sender) */\n dup1\n sload\n 0x01\n dup2\n add\n dup3\n sstore\n 0x00\n swap2\n swap1\n swap2\n mstore\n 0x036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0\n add\n dup1\n sload\n 0xffffffffffffffffffffffff0000000000000000000000000000000000000000\n and\n /* \"StakingContract.sol\":2595:2605 msg.sender */\n caller\n /* \"StakingContract.sol\":2582:2606 stakers.push(msg.sender) */\n or\n swap1\n sstore\n /* \"StakingContract.sol\":2529:2617 if(!tokenStakers[msg.sender].hasStaked){... */\n tag_125:\n pop\n /* \"StakingContract.sol\":2647:2657 msg.sender */\n caller\n /* \"StakingContract.sol\":2634:2658 tokenStakers[msg.sender] */\n 0x00\n swap1\n dup2\n mstore\n /* \"StakingContract.sol\":2634:2646 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":2634:2658 tokenStakers[msg.sender] */\n 0x20\n mstore\n 0x40\n dup2\n keccak256\n /* \"StakingContract.sol\":2678:2693 block.timestamp */\n timestamp\n /* \"StakingContract.sol\":2634:2675 tokenStakers[msg.sender].timeOfLastUpdate */\n 0x01\n swap2\n dup3\n add\n /* \"StakingContract.sol\":2634:2693 tokenStakers[msg.sender].timeOfLastUpdate = block.timestamp */\n sstore\n /* \"@openzeppelin/contracts/security/ReentrancyGuard.sol\":2628:2650 */\n swap1\n sstore\n /* \"StakingContract.sol\":1838:2703 function tokenStake(uint256 _amount) external nonReentrant{... */\n jump\t// out\n /* \"StakingContract.sol\":3858:4087 function availableRewards(address _tokenStaker) public view returns (uint256) {... */\n tag_67:\n sub(shl(0xa0, 0x01), 0x01)\n /* \"StakingContract.sol\":4011:4037 tokenStakers[_tokenStaker] */\n dup2\n and\n /* \"StakingContract.sol\":3927:3934 uint256 */\n 0x00\n /* \"StakingContract.sol\":4011:4037 tokenStakers[_tokenStaker] */\n swap1\n dup2\n mstore\n /* \"StakingContract.sol\":4011:4023 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":4011:4037 tokenStakers[_tokenStaker] */\n 0x20\n mstore\n 0x40\n dup2\n keccak256\n /* \"StakingContract.sol\":4011:4054 tokenStakers[_tokenStaker].unclaimedRewards */\n 0x02\n add\n sload\n /* \"StakingContract.sol\":3927:3934 uint256 */\n dup2\n swap1\n /* \"StakingContract.sol\":3965:3995 calculateRewards(_tokenStaker) */\n tag_129\n /* \"StakingContract.sol\":4024:4036 _tokenStaker */\n dup5\n /* \"StakingContract.sol\":3965:3981 calculateRewards */\n tag_82\n /* \"StakingContract.sol\":3965:3995 calculateRewards(_tokenStaker) */\n jump\t// in\n tag_129:\n /* \"StakingContract.sol\":3965:4054 calculateRewards(_tokenStaker) +... */\n tag_106\n swap2\n swap1\n tag_84\n jump\t// in\n /* \"StakingContract.sol\":1805:1829 address[] public stakers */\n tag_71:\n 0x05\n dup2\n dup2\n sload\n dup2\n lt\n tag_131\n jumpi\n 0x00\n dup1\n revert\n tag_131:\n 0x00\n swap2\n dup3\n mstore\n 0x20\n swap1\n swap2\n keccak256\n add\n sload\n sub(shl(0xa0, 0x01), 0x01)\n and\n swap1\n pop\n dup2\n jump\t// out\n /* \"StakingContract.sol\":4381:4710 function calculateRewards(address _tokenStaker)... */\n tag_82:\n /* \"StakingContract.sol\":4675:4689 rewardsPerHour */\n sload(0x02)\n sub(shl(0xa0, 0x01), 0x01)\n /* \"StakingContract.sol\":4621:4647 tokenStakers[_tokenStaker] */\n dup3\n and\n /* \"StakingContract.sol\":4479:4495 uint256 _rewards */\n 0x00\n /* \"StakingContract.sol\":4621:4647 tokenStakers[_tokenStaker] */\n swap1\n dup2\n mstore\n /* \"StakingContract.sol\":4621:4633 tokenStakers */\n 0x03\n /* \"StakingContract.sol\":4621:4647 tokenStakers[_tokenStaker] */\n 0x20\n mstore\n 0x40\n dup2\n keccak256\n /* \"StakingContract.sol\":4621:4660 tokenStakers[_tokenStaker].amountStaked */\n dup1\n sload\n /* \"StakingContract.sol\":4557:4600 tokenStakers[_tokenStaker].timeOfLastUpdate */\n 0x01\n swap1\n swap2\n add\n sload\n /* \"StakingContract.sol\":4479:4495 uint256 _rewards */\n swap2\n swap3\n /* \"StakingContract.sol\":4693:4701 36000000 */\n 0x02255100\n swap3\n /* \"StakingContract.sol\":4675:4689 rewardsPerHour */\n swap1\n swap2\n /* \"StakingContract.sol\":4621:4660 tokenStakers[_tokenStaker].amountStaked */\n swap1\n /* \"StakingContract.sol\":4539:4600 block.timestamp - tokenStakers[_tokenStaker].timeOfLastUpdate */\n tag_134\n swap1\n /* \"StakingContract.sol\":4539:4554 block.timestamp */\n timestamp\n /* \"StakingContract.sol\":4539:4600 block.timestamp - tokenStakers[_tokenStaker].timeOfLastUpdate */\n tag_92\n jump\t// in\n tag_134:\n /* \"StakingContract.sol\":4538:4660 (block.timestamp - tokenStakers[_tokenStaker].timeOfLastUpdate) *... */\n tag_135\n swap2\n swap1\n tag_136\n jump\t// in\n tag_135:\n /* \"StakingContract.sol\":4522:4689 (... */\n tag_137\n swap2\n swap1\n tag_136\n jump\t// in\n tag_137:\n /* \"StakingContract.sol\":4521:4701 ((... */\n tag_138\n swap2\n swap1\n tag_139\n jump\t// in\n tag_138:\n /* \"StakingContract.sol\":4513:4702 return (((... */\n swap3\n /* \"StakingContract.sol\":4381:4710 function calculateRewards(address _tokenStaker)... */\n swap2\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":763:968 */\n tag_100:\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":902:960 */\n 0x40\n dup1\n mload\n sub(shl(0xa0, 0x01), 0x01)\n /* \"#utility.yul\":2994:3049 */\n dup5\n and\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":902:960 */\n 0x24\n dup3\n add\n /* \"#utility.yul\":2976:3050 */\n mstore\n /* \"#utility.yul\":3066:3084 */\n 0x44\n dup1\n dup3\n add\n /* \"#utility.yul\":3059:3093 */\n dup5\n swap1\n mstore\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":902:960 */\n dup3\n mload\n dup1\n dup4\n sub\n swap1\n swap2\n add\n dup2\n mstore\n /* \"#utility.yul\":2949:2967 */\n 0x64\n swap1\n swap2\n add\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":902:960 */\n swap1\n swap2\n mstore\n 0x20\n dup2\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n and\n shl(0xe0, 0xa9059cbb)\n or\n swap1\n mstore\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":875:961 */\n tag_141\n swap1\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":895:900 */\n dup5\n swap1\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":875:894 */\n tag_143\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":875:961 */\n jump\t// in\n tag_141:\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":763:968 */\n pop\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":3747:4453 */\n tag_143:\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4166:4189 */\n 0x00\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4192:4261 */\n tag_145\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4220:4224 */\n dup3\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4192:4261 */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x20\n dup2\n mstore\n 0x20\n add\n 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564\n dup2\n mstore\n pop\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4200:4205 */\n dup6\n sub(shl(0xa0, 0x01), 0x01)\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4192:4219 */\n and\n tag_146\n swap1\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4192:4261 */\n swap3\n swap2\n swap1\n 0xffffffff\n and\n jump\t// in\n tag_145:\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4275:4292 */\n dup1\n mload\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4166:4261 */\n swap1\n swap2\n pop\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4275:4296 */\n iszero\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4271:4447 */\n tag_141\n jumpi\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4370:4380 */\n dup1\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4359:4389 */\n dup1\n 0x20\n add\n swap1\n mload\n dup2\n add\n swap1\n tag_148\n swap2\n swap1\n tag_90\n jump\t// in\n tag_148:\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4351:4436 */\n tag_141\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n /* \"#utility.yul\":5409:5411 */\n 0x20\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4351:4436 */\n 0x04\n dup3\n add\n /* \"#utility.yul\":5391:5412 */\n mstore\n /* \"#utility.yul\":5448:5450 */\n 0x2a\n /* \"#utility.yul\":5428:5446 */\n 0x24\n dup3\n add\n /* \"#utility.yul\":5421:5451 */\n mstore\n /* \"#utility.yul\":5487:5521 */\n 0x5361666545524332303a204552433230206f7065726174696f6e20646964206e\n /* \"#utility.yul\":5467:5485 */\n 0x44\n dup3\n add\n /* \"#utility.yul\":5460:5522 */\n mstore\n /* \"#utility.yul\":5558:5570 */\n 0x6f74207375636365656400000000000000000000000000000000000000000000\n /* \"#utility.yul\":5538:5556 */\n 0x64\n dup3\n add\n /* \"#utility.yul\":5531:5571 */\n mstore\n /* \"#utility.yul\":5588:5607 */\n 0x84\n add\n /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4351:4436 */\n tag_75\n /* \"#utility.yul\":5207:5613 */\n jump\n /* \"@openzeppelin/contracts/utils/Address.sol\":3861:4084 */\n tag_146:\n /* \"@openzeppelin/contracts/utils/Address.sol\":3994:4006 */\n 0x60\n /* \"@openzeppelin/contracts/utils/Address.sol\":4025:4077 */\n tag_153\n /* \"@openzeppelin/contracts/utils/Address.sol\":4047:4053 */\n dup5\n /* \"@openzeppelin/contracts/utils/Address.sol\":4055:4059 */\n dup5\n /* \"@openzeppelin/contracts/utils/Address.sol\":4061:4062 */\n 0x00\n /* \"@openzeppelin/contracts/utils/Address.sol\":4064:4076 */\n dup6\n /* \"@openzeppelin/contracts/utils/Address.sol\":4025:4046 */\n tag_154\n /* \"@openzeppelin/contracts/utils/Address.sol\":4025:4077 */\n jump\t// in\n tag_153:\n /* \"@openzeppelin/contracts/utils/Address.sol\":4018:4077 */\n swap5\n /* \"@openzeppelin/contracts/utils/Address.sol\":3861:4084 */\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/Address.sol\":4948:5447 */\n tag_154:\n /* \"@openzeppelin/contracts/utils/Address.sol\":5113:5125 */\n 0x60\n /* \"@openzeppelin/contracts/utils/Address.sol\":5170:5175 */\n dup3\n /* \"@openzeppelin/contracts/utils/Address.sol\":5145:5166 */\n selfbalance\n /* \"@openzeppelin/contracts/utils/Address.sol\":5145:5175 */\n lt\n iszero\n /* \"@openzeppelin/contracts/utils/Address.sol\":5137:5218 */\n tag_156\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n /* \"#utility.yul\":5820:5822 */\n 0x20\n /* \"@openzeppelin/contracts/utils/Address.sol\":5137:5218 */\n 0x04\n dup3\n add\n /* \"#utility.yul\":5802:5823 */\n mstore\n /* \"#utility.yul\":5859:5861 */\n 0x26\n /* \"#utility.yul\":5839:5857 */\n 0x24\n dup3\n add\n /* \"#utility.yul\":5832:5862 */\n mstore\n /* \"#utility.yul\":5898:5932 */\n 0x416464726573733a20696e73756666696369656e742062616c616e636520666f\n /* \"#utility.yul\":5878:5896 */\n 0x44\n dup3\n add\n /* \"#utility.yul\":5871:5933 */\n mstore\n /* \"#utility.yul\":5969:5977 */\n 0x722063616c6c0000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":5949:5967 */\n 0x64\n dup3\n add\n /* \"#utility.yul\":5942:5978 */\n mstore\n /* \"#utility.yul\":5995:6014 */\n 0x84\n add\n /* \"@openzeppelin/contracts/utils/Address.sol\":5137:5218 */\n tag_75\n /* \"#utility.yul\":5618:6020 */\n jump\n /* \"@openzeppelin/contracts/utils/Address.sol\":5137:5218 */\n tag_156:\n sub(shl(0xa0, 0x01), 0x01)\n /* \"@openzeppelin/contracts/utils/Address.sol\":1465:1484 */\n dup6\n and\n extcodesize\n /* \"@openzeppelin/contracts/utils/Address.sol\":5228:5288 */\n tag_161\n jumpi\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n /* \"#utility.yul\":6227:6229 */\n 0x20\n /* \"@openzeppelin/contracts/utils/Address.sol\":5228:5288 */\n 0x04\n dup3\n add\n /* \"#utility.yul\":6209:6230 */\n mstore\n /* \"#utility.yul\":6266:6268 */\n 0x1d\n /* \"#utility.yul\":6246:6264 */\n 0x24\n dup3\n add\n /* \"#utility.yul\":6239:6269 */\n mstore\n /* \"#utility.yul\":6305:6336 */\n 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000\n /* \"#utility.yul\":6285:6303 */\n 0x44\n dup3\n add\n /* \"#utility.yul\":6278:6337 */\n mstore\n /* \"#utility.yul\":6354:6372 */\n 0x64\n add\n /* \"@openzeppelin/contracts/utils/Address.sol\":5228:5288 */\n tag_75\n /* \"#utility.yul\":6025:6378 */\n jump\n /* \"@openzeppelin/contracts/utils/Address.sol\":5228:5288 */\n tag_161:\n /* \"@openzeppelin/contracts/utils/Address.sol\":5300:5312 */\n 0x00\n /* \"@openzeppelin/contracts/utils/Address.sol\":5314:5337 */\n dup1\n /* \"@openzeppelin/contracts/utils/Address.sol\":5341:5347 */\n dup7\n sub(shl(0xa0, 0x01), 0x01)\n /* \"@openzeppelin/contracts/utils/Address.sol\":5341:5352 */\n and\n /* \"@openzeppelin/contracts/utils/Address.sol\":5360:5365 */\n dup6\n /* \"@openzeppelin/contracts/utils/Address.sol\":5367:5371 */\n dup8\n /* \"@openzeppelin/contracts/utils/Address.sol\":5341:5372 */\n mload(0x40)\n tag_164\n swap2\n swap1\n tag_165\n jump\t// in\n tag_164:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n dup8\n gas\n call\n swap3\n pop\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_168\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_167)\n tag_168:\n 0x60\n swap2\n pop\n tag_167:\n pop\n /* \"@openzeppelin/contracts/utils/Address.sol\":5299:5372 */\n swap2\n pop\n swap2\n pop\n /* \"@openzeppelin/contracts/utils/Address.sol\":5389:5440 */\n tag_169\n /* \"@openzeppelin/contracts/utils/Address.sol\":5406:5413 */\n dup3\n /* \"@openzeppelin/contracts/utils/Address.sol\":5415:5425 */\n dup3\n /* \"@openzeppelin/contracts/utils/Address.sol\":5427:5439 */\n dup7\n /* \"@openzeppelin/contracts/utils/Address.sol\":5389:5405 */\n tag_170\n /* \"@openzeppelin/contracts/utils/Address.sol\":5389:5440 */\n jump\t// in\n tag_169:\n /* \"@openzeppelin/contracts/utils/Address.sol\":5382:5440 */\n swap8\n /* \"@openzeppelin/contracts/utils/Address.sol\":4948:5447 */\n swap7\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/Address.sol\":7561:8303 */\n tag_170:\n /* \"@openzeppelin/contracts/utils/Address.sol\":7707:7719 */\n 0x60\n /* \"@openzeppelin/contracts/utils/Address.sol\":7735:7742 */\n dup4\n /* \"@openzeppelin/contracts/utils/Address.sol\":7731:8297 */\n iszero\n tag_173\n jumpi\n pop\n /* \"@openzeppelin/contracts/utils/Address.sol\":7765:7775 */\n dup2\n /* \"@openzeppelin/contracts/utils/Address.sol\":7758:7775 */\n jump(tag_106)\n /* \"@openzeppelin/contracts/utils/Address.sol\":7731:8297 */\n tag_173:\n /* \"@openzeppelin/contracts/utils/Address.sol\":7876:7893 */\n dup3\n mload\n /* \"@openzeppelin/contracts/utils/Address.sol\":7876:7897 */\n iszero\n /* \"@openzeppelin/contracts/utils/Address.sol\":7872:8287 */\n tag_175\n jumpi\n /* \"@openzeppelin/contracts/utils/Address.sol\":8120:8130 */\n dup3\n /* \"@openzeppelin/contracts/utils/Address.sol\":8114:8131 */\n mload\n /* \"@openzeppelin/contracts/utils/Address.sol\":8180:8195 */\n dup1\n /* \"@openzeppelin/contracts/utils/Address.sol\":8167:8177 */\n dup5\n /* \"@openzeppelin/contracts/utils/Address.sol\":8163:8165 */\n 0x20\n /* \"@openzeppelin/contracts/utils/Address.sol\":8159:8178 */\n add\n /* \"@openzeppelin/contracts/utils/Address.sol\":8152:8196 */\n revert\n /* \"@openzeppelin/contracts/utils/Address.sol\":7872:8287 */\n tag_175:\n /* \"@openzeppelin/contracts/utils/Address.sol\":8259:8271 */\n dup2\n /* \"@openzeppelin/contracts/utils/Address.sol\":8252:8272 */\n mload(0x40)\n shl(0xe5, 0x461bcd)\n dup2\n mstore\n 0x04\n add\n tag_75\n swap2\n swap1\n tag_178\n jump\t// in\n /* \"#utility.yul\":441:750 */\n tag_34:\n /* \"#utility.yul\":500:506 */\n 0x00\n /* \"#utility.yul\":553:555 */\n 0x20\n /* \"#utility.yul\":541:550 */\n dup3\n /* \"#utility.yul\":532:539 */\n dup5\n /* \"#utility.yul\":528:551 */\n sub\n /* \"#utility.yul\":524:556 */\n slt\n /* \"#utility.yul\":521:573 */\n iszero\n tag_185\n jumpi\n /* \"#utility.yul\":569:570 */\n 0x00\n /* \"#utility.yul\":566:567 */\n dup1\n /* \"#utility.yul\":559:571 */\n revert\n /* \"#utility.yul\":521:573 */\n tag_185:\n /* \"#utility.yul\":608:617 */\n dup2\n /* \"#utility.yul\":595:618 */\n calldataload\n sub(shl(0xa0, 0x01), 0x01)\n /* \"#utility.yul\":651:656 */\n dup2\n /* \"#utility.yul\":647:701 */\n and\n /* \"#utility.yul\":640:645 */\n dup2\n /* \"#utility.yul\":637:702 */\n eq\n /* \"#utility.yul\":627:720 */\n tag_106\n jumpi\n /* \"#utility.yul\":716:717 */\n 0x00\n /* \"#utility.yul\":713:714 */\n dup1\n /* \"#utility.yul\":706:718 */\n revert\n /* \"#utility.yul\":1001:1181 */\n tag_46:\n /* \"#utility.yul\":1060:1066 */\n 0x00\n /* \"#utility.yul\":1113:1115 */\n 0x20\n /* \"#utility.yul\":1101:1110 */\n dup3\n /* \"#utility.yul\":1092:1099 */\n dup5\n /* \"#utility.yul\":1088:1111 */\n sub\n /* \"#utility.yul\":1084:1116 */\n slt\n /* \"#utility.yul\":1081:1133 */\n iszero\n tag_189\n jumpi\n /* \"#utility.yul\":1129:1130 */\n 0x00\n /* \"#utility.yul\":1126:1127 */\n dup1\n /* \"#utility.yul\":1119:1131 */\n revert\n /* \"#utility.yul\":1081:1133 */\n tag_189:\n pop\n /* \"#utility.yul\":1152:1175 */\n calldataload\n swap2\n /* \"#utility.yul\":1001:1181 */\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2537:2664 */\n tag_179:\n /* \"#utility.yul\":2598:2608 */\n 0x4e487b71\n /* \"#utility.yul\":2593:2596 */\n 0xe0\n /* \"#utility.yul\":2589:2609 */\n shl\n /* \"#utility.yul\":2586:2587 */\n 0x00\n /* \"#utility.yul\":2579:2610 */\n mstore\n /* \"#utility.yul\":2629:2633 */\n 0x11\n /* \"#utility.yul\":2626:2627 */\n 0x04\n /* \"#utility.yul\":2619:2634 */\n mstore\n /* \"#utility.yul\":2653:2657 */\n 0x24\n /* \"#utility.yul\":2650:2651 */\n 0x00\n /* \"#utility.yul\":2643:2658 */\n revert\n /* \"#utility.yul\":2669:2797 */\n tag_84:\n /* \"#utility.yul\":2709:2712 */\n 0x00\n /* \"#utility.yul\":2740:2741 */\n dup3\n /* \"#utility.yul\":2736:2742 */\n not\n /* \"#utility.yul\":2733:2734 */\n dup3\n /* \"#utility.yul\":2730:2743 */\n gt\n /* \"#utility.yul\":2727:2766 */\n iszero\n tag_197\n jumpi\n /* \"#utility.yul\":2746:2764 */\n tag_197\n tag_179\n jump\t// in\n tag_197:\n pop\n /* \"#utility.yul\":2782:2791 */\n add\n swap1\n /* \"#utility.yul\":2669:2797 */\n jump\t// out\n /* \"#utility.yul\":3104:3381 */\n tag_90:\n /* \"#utility.yul\":3171:3177 */\n 0x00\n /* \"#utility.yul\":3224:3226 */\n 0x20\n /* \"#utility.yul\":3212:3221 */\n dup3\n /* \"#utility.yul\":3203:3210 */\n dup5\n /* \"#utility.yul\":3199:3222 */\n sub\n /* \"#utility.yul\":3195:3227 */\n slt\n /* \"#utility.yul\":3192:3244 */\n iszero\n tag_200\n jumpi\n /* \"#utility.yul\":3240:3241 */\n 0x00\n /* \"#utility.yul\":3237:3238 */\n dup1\n /* \"#utility.yul\":3230:3242 */\n revert\n /* \"#utility.yul\":3192:3244 */\n tag_200:\n /* \"#utility.yul\":3272:3281 */\n dup2\n /* \"#utility.yul\":3266:3282 */\n mload\n /* \"#utility.yul\":3325:3330 */\n dup1\n /* \"#utility.yul\":3318:3331 */\n iszero\n /* \"#utility.yul\":3311:3332 */\n iszero\n /* \"#utility.yul\":3304:3309 */\n dup2\n /* \"#utility.yul\":3301:3333 */\n eq\n /* \"#utility.yul\":3291:3351 */\n tag_106\n jumpi\n /* \"#utility.yul\":3347:3348 */\n 0x00\n /* \"#utility.yul\":3344:3345 */\n dup1\n /* \"#utility.yul\":3337:3349 */\n revert\n /* \"#utility.yul\":3386:3511 */\n tag_92:\n /* \"#utility.yul\":3426:3430 */\n 0x00\n /* \"#utility.yul\":3454:3455 */\n dup3\n /* \"#utility.yul\":3451:3452 */\n dup3\n /* \"#utility.yul\":3448:3456 */\n lt\n /* \"#utility.yul\":3445:3479 */\n iszero\n tag_204\n jumpi\n /* \"#utility.yul\":3459:3477 */\n tag_204\n tag_179\n jump\t// in\n tag_204:\n pop\n /* \"#utility.yul\":3496:3505 */\n sub\n swap1\n /* \"#utility.yul\":3386:3511 */\n jump\t// out\n /* \"#utility.yul\":3873:4057 */\n tag_107:\n /* \"#utility.yul\":3943:3949 */\n 0x00\n /* \"#utility.yul\":3996:3998 */\n 0x20\n /* \"#utility.yul\":3984:3993 */\n dup3\n /* \"#utility.yul\":3975:3982 */\n dup5\n /* \"#utility.yul\":3971:3994 */\n sub\n /* \"#utility.yul\":3967:3999 */\n slt\n /* \"#utility.yul\":3964:4016 */\n iszero\n tag_207\n jumpi\n /* \"#utility.yul\":4012:4013 */\n 0x00\n /* \"#utility.yul\":4009:4010 */\n dup1\n /* \"#utility.yul\":4002:4014 */\n revert\n /* \"#utility.yul\":3964:4016 */\n tag_207:\n pop\n /* \"#utility.yul\":4035:4051 */\n mload\n swap2\n /* \"#utility.yul\":3873:4057 */\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4812:4980 */\n tag_136:\n /* \"#utility.yul\":4852:4859 */\n 0x00\n /* \"#utility.yul\":4918:4919 */\n dup2\n /* \"#utility.yul\":4914:4915 */\n 0x00\n /* \"#utility.yul\":4910:4916 */\n not\n /* \"#utility.yul\":4906:4920 */\n div\n /* \"#utility.yul\":4903:4904 */\n dup4\n /* \"#utility.yul\":4900:4921 */\n gt\n /* \"#utility.yul\":4895:4896 */\n dup3\n /* \"#utility.yul\":4888:4897 */\n iszero\n /* \"#utility.yul\":4881:4898 */\n iszero\n /* \"#utility.yul\":4877:4922 */\n and\n /* \"#utility.yul\":4874:4945 */\n iszero\n tag_212\n jumpi\n /* \"#utility.yul\":4925:4943 */\n tag_212\n tag_179\n jump\t// in\n tag_212:\n pop\n /* \"#utility.yul\":4965:4974 */\n mul\n swap1\n /* \"#utility.yul\":4812:4980 */\n jump\t// out\n /* \"#utility.yul\":4985:5202 */\n tag_139:\n /* \"#utility.yul\":5025:5026 */\n 0x00\n /* \"#utility.yul\":5051:5052 */\n dup3\n /* \"#utility.yul\":5041:5173 */\n tag_214\n jumpi\n /* \"#utility.yul\":5095:5105 */\n 0x4e487b71\n /* \"#utility.yul\":5090:5093 */\n 0xe0\n /* \"#utility.yul\":5086:5106 */\n shl\n /* \"#utility.yul\":5083:5084 */\n 0x00\n /* \"#utility.yul\":5076:5107 */\n mstore\n /* \"#utility.yul\":5130:5134 */\n 0x12\n /* \"#utility.yul\":5127:5128 */\n 0x04\n /* \"#utility.yul\":5120:5135 */\n mstore\n /* \"#utility.yul\":5158:5162 */\n 0x24\n /* \"#utility.yul\":5155:5156 */\n 0x00\n /* \"#utility.yul\":5148:5163 */\n revert\n /* \"#utility.yul\":5041:5173 */\n tag_214:\n pop\n /* \"#utility.yul\":5187:5196 */\n div\n swap1\n /* \"#utility.yul\":4985:5202 */\n jump\t// out\n /* \"#utility.yul\":6383:6641 */\n tag_180:\n /* \"#utility.yul\":6455:6456 */\n 0x00\n /* \"#utility.yul\":6465:6578 */\n tag_219:\n /* \"#utility.yul\":6479:6485 */\n dup4\n /* \"#utility.yul\":6476:6477 */\n dup2\n /* \"#utility.yul\":6473:6486 */\n lt\n /* \"#utility.yul\":6465:6578 */\n iszero\n tag_221\n jumpi\n /* \"#utility.yul\":6555:6566 */\n dup2\n dup2\n add\n /* \"#utility.yul\":6549:6567 */\n mload\n /* \"#utility.yul\":6536:6547 */\n dup4\n dup3\n add\n /* \"#utility.yul\":6529:6568 */\n mstore\n /* \"#utility.yul\":6501:6503 */\n 0x20\n /* \"#utility.yul\":6494:6504 */\n add\n /* \"#utility.yul\":6465:6578 */\n jump(tag_219)\n tag_221:\n /* \"#utility.yul\":6596:6602 */\n dup4\n /* \"#utility.yul\":6593:6594 */\n dup2\n /* \"#utility.yul\":6590:6603 */\n gt\n /* \"#utility.yul\":6587:6635 */\n iszero\n tag_222\n jumpi\n /* \"#utility.yul\":6631:6632 */\n 0x00\n /* \"#utility.yul\":6622:6628 */\n dup5\n /* \"#utility.yul\":6617:6620 */\n dup5\n /* \"#utility.yul\":6613:6629 */\n add\n /* \"#utility.yul\":6606:6633 */\n mstore\n /* \"#utility.yul\":6587:6635 */\n tag_222:\n pop\n /* \"#utility.yul\":6383:6641 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6646:6920 */\n tag_165:\n /* \"#utility.yul\":6775:6778 */\n 0x00\n /* \"#utility.yul\":6813:6819 */\n dup3\n /* \"#utility.yul\":6807:6820 */\n mload\n /* \"#utility.yul\":6829:6882 */\n tag_224\n /* \"#utility.yul\":6875:6881 */\n dup2\n /* \"#utility.yul\":6870:6873 */\n dup5\n /* \"#utility.yul\":6863:6867 */\n 0x20\n /* \"#utility.yul\":6855:6861 */\n dup8\n /* \"#utility.yul\":6851:6868 */\n add\n /* \"#utility.yul\":6829:6882 */\n tag_180\n jump\t// in\n tag_224:\n /* \"#utility.yul\":6898:6914 */\n swap2\n swap1\n swap2\n add\n swap3\n /* \"#utility.yul\":6646:6920 */\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6925:7308 */\n tag_178:\n /* \"#utility.yul\":7074:7076 */\n 0x20\n /* \"#utility.yul\":7063:7072 */\n dup2\n /* \"#utility.yul\":7056:7077 */\n mstore\n /* \"#utility.yul\":7037:7041 */\n 0x00\n /* \"#utility.yul\":7106:7112 */\n dup3\n /* \"#utility.yul\":7100:7113 */\n mload\n /* \"#utility.yul\":7149:7155 */\n dup1\n /* \"#utility.yul\":7144:7146 */\n 0x20\n /* \"#utility.yul\":7133:7142 */\n dup5\n /* \"#utility.yul\":7129:7147 */\n add\n /* \"#utility.yul\":7122:7156 */\n mstore\n /* \"#utility.yul\":7165:7231 */\n tag_226\n /* \"#utility.yul\":7224:7230 */\n dup2\n /* \"#utility.yul\":7219:7221 */\n 0x40\n /* \"#utility.yul\":7208:7217 */\n dup6\n /* \"#utility.yul\":7204:7222 */\n add\n /* \"#utility.yul\":7199:7201 */\n 0x20\n /* \"#utility.yul\":7191:7197 */\n dup8\n /* \"#utility.yul\":7187:7202 */\n add\n /* \"#utility.yul\":7165:7231 */\n tag_180\n jump\t// in\n tag_226:\n /* \"#utility.yul\":7292:7294 */\n 0x1f\n /* \"#utility.yul\":7271:7286 */\n add\n not(0x1f)\n /* \"#utility.yul\":7267:7296 */\n and\n /* \"#utility.yul\":7252:7297 */\n swap2\n swap1\n swap2\n add\n /* \"#utility.yul\":7299:7301 */\n 0x40\n /* \"#utility.yul\":7248:7302 */\n add\n swap3\n /* \"#utility.yul\":6925:7308 */\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212207ab121da0ed347372490e5f05b866e95315012e1b7a6d9ab414b83b23b7de52864736f6c634300080d0033\n}\n",
"bytecode": {
"functionDebugData": {
"@_401": {
"entryPoint": null,
"id": 401,
"parameterSlots": 0,
"returnSlots": 0
},
"@_49": {
"entryPoint": null,
"id": 49,
"parameterSlots": 3,
"returnSlots": 0
},
"abi_decode_tuple_t_contract$_IERC721_$897t_contract$_IERC20_$500t_contract$_IERC20_$500_fromMemory": {
"entryPoint": 110,
"id": null,
"parameterSlots": 2,
"returnSlots": 3
},
"validator_revert_contract_IERC721": {
"entryPoint": 86,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
}
},
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:750:8",
"statements": [
{
"nodeType": "YulBlock",
"src": "6:3:8",
"statements": []
},
{
"body": {
"nodeType": "YulBlock",
"src": "68:86:8",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "132:16:8",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "141:1:8",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "144:1:8",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "134:6:8"
},
"nodeType": "YulFunctionCall",
"src": "134:12:8"
},
"nodeType": "YulExpressionStatement",
"src": "134:12:8"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "91:5:8"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "102:5:8"
},
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "117:3:8",
"type": "",
"value": "160"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "122:1:8",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "113:3:8"
},
"nodeType": "YulFunctionCall",
"src": "113:11:8"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "126:1:8",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "109:3:8"
},
"nodeType": "YulFunctionCall",
"src": "109:19:8"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "98:3:8"
},
"nodeType": "YulFunctionCall",
"src": "98:31:8"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "88:2:8"
},
"nodeType": "YulFunctionCall",
"src": "88:42:8"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "81:6:8"
},
"nodeType": "YulFunctionCall",
"src": "81:50:8"
},
"nodeType": "YulIf",
"src": "78:70:8"
}
]
},
"name": "validator_revert_contract_IERC721",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "57:5:8",
"type": ""
}
],
"src": "14:140:8"
},
{
"body": {
"nodeType": "YulBlock",
"src": "317:431:8",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "363:16:8",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "372:1:8",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "375:1:8",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "365:6:8"
},
"nodeType": "YulFunctionCall",
"src": "365:12:8"
},
"nodeType": "YulExpressionStatement",
"src": "365:12:8"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "338:7:8"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "347:9:8"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "334:3:8"
},
"nodeType": "YulFunctionCall",
"src": "334:23:8"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "359:2:8",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "330:3:8"
},
"nodeType": "YulFunctionCall",
"src": "330:32:8"
},
"nodeType": "YulIf",
"src": "327:52:8"
},
{
"nodeType": "YulVariableDeclaration",
"src": "388:29:8",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "407:9:8"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "401:5:8"
},
"nodeType": "YulFunctionCall",
"src": "401:16:8"
},
"variables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "392:5:8",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "460:5:8"
}
],
"functionName": {
"name": "validator_revert_contract_IERC721",
"nodeType": "YulIdentifier",
"src": "426:33:8"
},
"nodeType": "YulFunctionCall",
"src": "426:40:8"
},
"nodeType": "YulExpressionStatement",
"src": "426:40:8"
},
{
"nodeType": "YulAssignment",
"src": "475:15:8",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "485:5:8"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "475:6:8"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "499:40:8",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "524:9:8"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "535:2:8",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "520:3:8"
},
"nodeType": "YulFunctionCall",
"src": "520:18:8"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "514:5:8"
},
"nodeType": "YulFunctionCall",
"src": "514:25:8"
},
"variables": [
{
"name": "value_1",
"nodeType": "YulTypedName",
"src": "503:7:8",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value_1",
"nodeType": "YulIdentifier",
"src": "582:7:8"
}
],
"functionName": {
"name": "validator_revert_contract_IERC721",
"nodeType": "YulIdentifier",
"src": "548:33:8"
},
"nodeType": "YulFunctionCall",
"src": "548:42:8"
},
"nodeType": "YulExpressionStatement",
"src": "548:42:8"
},
{
"nodeType": "YulAssignment",
"src": "599:17:8",
"value": {
"name": "value_1",
"nodeType": "YulIdentifier",
"src": "609:7:8"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "599:6:8"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "625:40:8",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "650:9:8"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "661:2:8",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "646:3:8"
},
"nodeType": "YulFunctionCall",
"src": "646:18:8"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "640:5:8"
},
"nodeType": "YulFunctionCall",
"src": "640:25:8"
},
"variables": [
{
"name": "value_2",
"nodeType": "YulTypedName",
"src": "629:7:8",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "value_2",
"nodeType": "YulIdentifier",
"src": "708:7:8"
}
],
"functionName": {
"name": "validator_revert_contract_IERC721",
"nodeType": "YulIdentifier",
"src": "674:33:8"
},
"nodeType": "YulFunctionCall",
"src": "674:42:8"
},
"nodeType": "YulExpressionStatement",
"src": "674:42:8"
},
{
"nodeType": "YulAssignment",
"src": "725:17:8",
"value": {
"name": "value_2",
"nodeType": "YulIdentifier",
"src": "735:7:8"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "725:6:8"
}
]
}
]
},
"name": "abi_decode_tuple_t_contract$_IERC721_$897t_contract$_IERC20_$500t_contract$_IERC20_$500_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "267:9:8",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "278:7:8",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "290:6:8",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "298:6:8",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "306:6:8",
"type": ""
}
],
"src": "159:589:8"
}
]
},
"contents": "{\n { }\n function validator_revert_contract_IERC721(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_contract$_IERC721_$897t_contract$_IERC20_$500t_contract$_IERC20_$500_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_contract_IERC721(value)\n value0 := value\n let value_1 := mload(add(headStart, 32))\n validator_revert_contract_IERC721(value_1)\n value1 := value_1\n let value_2 := mload(add(headStart, 64))\n validator_revert_contract_IERC721(value_2)\n value2 := value_2\n }\n}",
"id": 8,
"language": "Yul",
"name": "#utility.yul"
}
],
"linkReferences": {},
"object": "60e0604052600160025534801561001557600080fd5b50604051610e74380380610e748339810160408190526100349161006e565b60016000556001600160a01b0392831660a0529082166080521660c0526100bb565b6001600160a01b038116811461006b57600080fd5b50565b60008060006060848603121561008357600080fd5b835161008e81610056565b602085015190935061009f81610056565b60408501519092506100b081610056565b809150509250925092565b60805160a05160c051610d6e6101066000396000818161011d015281816103ce0152818161055a01526106e00152600061016f01526000818161023701526105040152610d6e6000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063940670451161008c578063d1af0c7d11610066578063d1af0c7d14610232578063ef40a67014610259578063f854a27f14610282578063fd5e6dd11461029557600080fd5b8063940670451461019a57806399c70be9146101c3578063b5be93061461021f57600080fd5b806351ed6a30116100c857806351ed6a30146101185780635f515226146101575780636588103b1461016a578063817b1cd21461019157600080fd5b806330c74e04146100ef578063372500ab146100f95780634b0369b814610101575b600080fd5b6100f76102a8565b005b6100f761046b565b6001545b6040519081526020015b60405180910390f35b61013f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010f565b610105610165366004610bb6565b610536565b61013f7f000000000000000000000000000000000000000000000000000000000000000081565b61010560015481565b61013f6101a8366004610bdf565b6004602052600090815260409020546001600160a01b031681565b6101fd6101d1366004610bb6565b600360208190526000918252604090912080546001820154600283015492909301549092919060ff1684565b604080519485526020850193909352918301521515606082015260800161010f565b6100f761022d366004610bdf565b6105cc565b61013f7f000000000000000000000000000000000000000000000000000000000000000081565b610105610267366004610bb6565b6001600160a01b031660009081526003602052604090205490565b610105610290366004610bb6565b610816565b61013f6102a3366004610bdf565b610847565b6002600054036102ff5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260009081553381526003602052604090205461035f5760405162461bcd60e51b815260206004820152601960248201527f596f752068617665206e6f20746f6b656e207374616b6564210000000000000060448201526064016102f6565b600061036a33610871565b33600090815260036020526040812060020180549293508392909190610391908490610c0e565b9091555050336000818152600360205260409081902054905163a9059cbb60e01b8152600481019290925260248201819052906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043b9190610c26565b508060015461044a9190610c48565b60019081553360009081526003602052604081208181554290830155555050565b33600081815260036020526040812060020154909161048990610871565b6104939190610c0e565b9050600081116104e55760405162461bcd60e51b815260206004820152601c60248201527f596f752068617665206e6f207265776172647320746f20636c61696d0000000060448201526064016102f6565b33600081815260036020526040812042600182015560020155610533907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690836108cd565b50565b6040516370a0823160e01b81526001600160a01b03828116600483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156105a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c59190610c5f565b9392505050565b60026000540361061e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102f6565b6002600055806106705760405162461bcd60e51b815260206004820152601260248201527f616d6f756e742063616e6e6f742062652030000000000000000000000000000060448201526064016102f6565b33600090815260036020526040902054156106be57600061069033610871565b336000908152600360205260408120600201805492935083929091906106b7908490610c0e565b9091555050505b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107559190610c26565b50806001546107649190610c0e565b60015533600090815260036020526040902054610782908290610c0e565b336000908152600360208190526040909120918255015460ff166107fb57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555b50336000908152600360205260408120426001918201559055565b6001600160a01b038116600090815260036020526040812060020154819061083d84610871565b6105c59190610c0e565b6005818154811061085757600080fd5b6000918252602090912001546001600160a01b0316905081565b6002546001600160a01b0382166000908152600360205260408120805460019091015491926302255100929091906108a99042610c48565b6108b39190610c78565b6108bd9190610c78565b6108c79190610c97565b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052610934908490610939565b505050565b600061098e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610a1e9092919063ffffffff16565b80519091501561093457808060200190518101906109ac9190610c26565b6109345760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016102f6565b6060610a2d8484600085610a35565b949350505050565b606082471015610aad5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102f6565b6001600160a01b0385163b610b045760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102f6565b600080866001600160a01b03168587604051610b209190610ce9565b60006040518083038185875af1925050503d8060008114610b5d576040519150601f19603f3d011682016040523d82523d6000602084013e610b62565b606091505b5091509150610b72828286610b7d565b979650505050505050565b60608315610b8c5750816105c5565b825115610b9c5782518084602001fd5b8160405162461bcd60e51b81526004016102f69190610d05565b600060208284031215610bc857600080fd5b81356001600160a01b03811681146105c557600080fd5b600060208284031215610bf157600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610c2157610c21610bf8565b500190565b600060208284031215610c3857600080fd5b815180151581146105c557600080fd5b600082821015610c5a57610c5a610bf8565b500390565b600060208284031215610c7157600080fd5b5051919050565b6000816000190483118215151615610c9257610c92610bf8565b500290565b600082610cb457634e487b7160e01b600052601260045260246000fd5b500490565b60005b83811015610cd4578181015183820152602001610cbc565b83811115610ce3576000848401525b50505050565b60008251610cfb818460208701610cb9565b9190910192915050565b6020815260008251806020840152610d24816040850160208701610cb9565b601f01601f1916919091016040019291505056fea26469706673582212207ab121da0ed347372490e5f05b866e95315012e1b7a6d9ab414b83b23b7de52864736f6c634300080d0033",
"opcodes": "PUSH1 0xE0 PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x15 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xE74 CODESIZE SUB DUP1 PUSH2 0xE74 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x34 SWAP2 PUSH2 0x6E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0xA0 MSTORE SWAP1 DUP3 AND PUSH1 0x80 MSTORE AND PUSH1 0xC0 MSTORE PUSH2 0xBB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x83 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 MLOAD PUSH2 0x8E DUP2 PUSH2 0x56 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH2 0x9F DUP2 PUSH2 0x56 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH2 0xB0 DUP2 PUSH2 0x56 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH2 0xD6E PUSH2 0x106 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x11D ADD MSTORE DUP2 DUP2 PUSH2 0x3CE ADD MSTORE DUP2 DUP2 PUSH2 0x55A ADD MSTORE PUSH2 0x6E0 ADD MSTORE PUSH1 0x0 PUSH2 0x16F ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x237 ADD MSTORE PUSH2 0x504 ADD MSTORE PUSH2 0xD6E PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xEA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x94067045 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0xD1AF0C7D GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD1AF0C7D EQ PUSH2 0x232 JUMPI DUP1 PUSH4 0xEF40A670 EQ PUSH2 0x259 JUMPI DUP1 PUSH4 0xF854A27F EQ PUSH2 0x282 JUMPI DUP1 PUSH4 0xFD5E6DD1 EQ PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x94067045 EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0x99C70BE9 EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0xB5BE9306 EQ PUSH2 0x21F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x51ED6A30 GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0x51ED6A30 EQ PUSH2 0x118 JUMPI DUP1 PUSH4 0x5F515226 EQ PUSH2 0x157 JUMPI DUP1 PUSH4 0x6588103B EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0x817B1CD2 EQ PUSH2 0x191 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x30C74E04 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x372500AB EQ PUSH2 0xF9 JUMPI DUP1 PUSH4 0x4B0369B8 EQ PUSH2 0x101 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF7 PUSH2 0x2A8 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF7 PUSH2 0x46B JUMP JUMPDEST PUSH1 0x1 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x13F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x10F JUMP JUMPDEST PUSH2 0x105 PUSH2 0x165 CALLDATASIZE PUSH1 0x4 PUSH2 0xBB6 JUMP JUMPDEST PUSH2 0x536 JUMP JUMPDEST PUSH2 0x13F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x105 PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x13F PUSH2 0x1A8 CALLDATASIZE PUSH1 0x4 PUSH2 0xBDF JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x1D1 CALLDATASIZE PUSH1 0x4 PUSH2 0xBB6 JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD SWAP3 SWAP1 SWAP4 ADD SLOAD SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0xFF AND DUP5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD PUSH2 0x10F JUMP JUMPDEST PUSH2 0xF7 PUSH2 0x22D CALLDATASIZE PUSH1 0x4 PUSH2 0xBDF JUMP JUMPDEST PUSH2 0x5CC JUMP JUMPDEST PUSH2 0x13F PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x267 CALLDATASIZE PUSH1 0x4 PUSH2 0xBB6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x105 PUSH2 0x290 CALLDATASIZE PUSH1 0x4 PUSH2 0xBB6 JUMP JUMPDEST PUSH2 0x816 JUMP JUMPDEST PUSH2 0x13F PUSH2 0x2A3 CALLDATASIZE PUSH1 0x4 PUSH2 0xBDF JUMP JUMPDEST PUSH2 0x847 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD SUB PUSH2 0x2FF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 SSTORE CALLER DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x35F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x19 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x596F752068617665206E6F20746F6B656E207374616B65642100000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2F6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x36A CALLER PUSH2 0x871 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x2 ADD DUP1 SLOAD SWAP3 SWAP4 POP DUP4 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x391 SWAP1 DUP5 SWAP1 PUSH2 0xC0E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SLOAD SWAP1 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xA9059CBB SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x417 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x43B SWAP2 SWAP1 PUSH2 0xC26 JUMP JUMPDEST POP DUP1 PUSH1 0x1 SLOAD PUSH2 0x44A SWAP2 SWAP1 PUSH2 0xC48 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP2 SSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP2 DUP2 SSTORE TIMESTAMP SWAP1 DUP4 ADD SSTORE SSTORE POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x2 ADD SLOAD SWAP1 SWAP2 PUSH2 0x489 SWAP1 PUSH2 0x871 JUMP JUMPDEST PUSH2 0x493 SWAP2 SWAP1 PUSH2 0xC0E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 GT PUSH2 0x4E5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x596F752068617665206E6F207265776172647320746F20636C61696D00000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2F6 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 TIMESTAMP PUSH1 0x1 DUP3 ADD SSTORE PUSH1 0x2 ADD SSTORE PUSH2 0x533 SWAP1 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP4 PUSH2 0x8CD JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 DUP3 SWAP2 PUSH32 0x0 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x5C5 SWAP2 SWAP1 PUSH2 0xC5F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SLOAD SUB PUSH2 0x61E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5265656E7472616E637947756172643A207265656E7472616E742063616C6C00 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2F6 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SSTORE DUP1 PUSH2 0x670 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x616D6F756E742063616E6E6F7420626520300000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2F6 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD ISZERO PUSH2 0x6BE JUMPI PUSH1 0x0 PUSH2 0x690 CALLER PUSH2 0x871 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x2 ADD DUP1 SLOAD SWAP3 SWAP4 POP DUP4 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x6B7 SWAP1 DUP5 SWAP1 PUSH2 0xC0E JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP POP POP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x23B872DD PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0x23B872DD SWAP1 PUSH1 0x64 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x731 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x755 SWAP2 SWAP1 PUSH2 0xC26 JUMP JUMPDEST POP DUP1 PUSH1 0x1 SLOAD PUSH2 0x764 SWAP2 SWAP1 PUSH2 0xC0E JUMP JUMPDEST PUSH1 0x1 SSTORE CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x782 SWAP1 DUP3 SWAP1 PUSH2 0xC0E JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SWAP2 DUP3 SSTORE ADD SLOAD PUSH1 0xFF AND PUSH2 0x7FB JUMPI PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE PUSH1 0x0 SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND CALLER OR SWAP1 SSTORE JUMPDEST POP CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 TIMESTAMP PUSH1 0x1 SWAP2 DUP3 ADD SSTORE SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x2 ADD SLOAD DUP2 SWAP1 PUSH2 0x83D DUP5 PUSH2 0x871 JUMP JUMPDEST PUSH2 0x5C5 SWAP2 SWAP1 PUSH2 0xC0E JUMP JUMPDEST PUSH1 0x5 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x857 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD SWAP2 SWAP3 PUSH4 0x2255100 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x8A9 SWAP1 TIMESTAMP PUSH2 0xC48 JUMP JUMPDEST PUSH2 0x8B3 SWAP2 SWAP1 PUSH2 0xC78 JUMP JUMPDEST PUSH2 0x8BD SWAP2 SWAP1 PUSH2 0xC78 JUMP JUMPDEST PUSH2 0x8C7 SWAP2 SWAP1 PUSH2 0xC97 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x934 SWAP1 DUP5 SWAP1 PUSH2 0x939 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x98E DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xA1E SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x934 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x9AC SWAP2 SWAP1 PUSH2 0xC26 JUMP JUMPDEST PUSH2 0x934 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74207375636365656400000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2F6 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xA2D DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0xA35 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0xAAD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x722063616C6C0000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0xB04 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2F6 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0xB20 SWAP2 SWAP1 PUSH2 0xCE9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xB5D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xB62 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xB72 DUP3 DUP3 DUP7 PUSH2 0xB7D JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0xB8C JUMPI POP DUP2 PUSH2 0x5C5 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0xB9C JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2F6 SWAP2 SWAP1 PUSH2 0xD05 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x5C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xC21 JUMPI PUSH2 0xC21 PUSH2 0xBF8 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x5C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xC5A JUMPI PUSH2 0xC5A PUSH2 0xBF8 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC71 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 NOT DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0xC92 JUMPI PUSH2 0xC92 PUSH2 0xBF8 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH2 0xCB4 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xCD4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xCBC JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xCE3 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xCFB DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xCB9 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xD24 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xCB9 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH27 0xB121DA0ED347372490E5F05B866E95315012E1B7A6D9AB414B83B2 EXTCODESIZE PUSH30 0xE52864736F6C634300080D00330000000000000000000000000000000000 ",
"sourceMap": "311:4404:7:-:0;;;1517:1;1484:34;;720:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1701:1:0;1806:7;:22;-1:-1:-1;;;;;809:30:7;;;;;850:28;;;;;889:24;;;311:4404;;14:140:8;-1:-1:-1;;;;;98:31:8;;88:42;;78:70;;144:1;141;134:12;78:70;14:140;:::o;159:589::-;290:6;298;306;359:2;347:9;338:7;334:23;330:32;327:52;;;375:1;372;365:12;327:52;407:9;401:16;426:40;460:5;426:40;:::i;:::-;535:2;520:18;;514:25;485:5;;-1:-1:-1;548:42:8;514:25;548:42;:::i;:::-;661:2;646:18;;640:25;609:7;;-1:-1:-1;674:42:8;640:25;674:42;:::i;:::-;735:7;725:17;;;159:589;;;;;:::o;:::-;311:4404:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {
"@_callOptionalReturn_780": {
"entryPoint": 2361,
"id": 780,
"parameterSlots": 2,
"returnSlots": 0
},
"@amountStaked_351": {
"entryPoint": null,
"id": 351,
"parameterSlots": 1,
"returnSlots": 1
},
"@availabTotalStake_334": {
"entryPoint": null,
"id": 334,
"parameterSlots": 0,
"returnSlots": 1
},
"@availableRewards_326": {
"entryPoint": 2070,
"id": 326,
"parameterSlots": 1,
"returnSlots": 1
},
"@calculateRewards_381": {
"entryPoint": 2161,
"id": 381,
"parameterSlots": 1,
"returnSlots": 1
},
"@checkBalance_305": {
"entryPoint": 1334,
"id": 305,
"parameterSlots": 1,
"returnSlots": 1
},
"@claimRewards_288": {
"entryPoint": 1131,
"id": 288,
"parameterSlots": 0,
"returnSlots": 0
},
"@functionCallWithValue_1092": {
"entryPoint": 2613,
"id": 1092,
"parameterSlots": 4,
"returnSlots": 1
},
"@functionCall_1022": {
"entryPoint": 2590,
"id": 1022,
"parameterSlots": 3,
"returnSlots": 1
},
"@isContract_951": {
"entryPoint": null,
"id": 951,
"parameterSlots": 1,
"returnSlots": 1
},
"@nftCollection_17": {
"entryPoint": null,
"id": 17,
"parameterSlots": 0,
"returnSlots": 0
},
"@rewardsToken_14": {
"entryPoint": null,
"id": 14,
"parameterSlots": 0,
"returnSlots": 0
},
"@safeTransfer_532": {
"entryPoint": 2253,
"id": 532,
"parameterSlots": 3,
"returnSlots": 0
},
"@stakeToken_20": {
"entryPoint": null,
"id": 20,
"parameterSlots": 0,
"returnSlots": 0
},
"@stakerAddress_70": {
"entryPoint": null,
"id": 70,
"parameterSlots": 0,
"returnSlots": 0
},
"@stakers_73": {
"entryPoint": 2119,
"id": 73,
"parameterSlots": 0,
"returnSlots": 0
},
"@tokenStake_168": {
"entryPoint": 1484,
"id": 168,
"parameterSlots": 1,
"returnSlots": 0
},
"@tokenStakers_66": {
"entryPoint": null,
"id": 66,
"parameterSlots": 0,
"returnSlots": 0
},
"@tokenWithdraw_239": {
"entryPoint": 680,
"id": 239,
"parameterSlots": 0,
"returnSlots": 0
},
"@totalStaked_24": {
"entryPoint": null,
"id": 24,
"parameterSlots": 0,
"returnSlots": 0
},
"@verifyCallResult_1227": {
"entryPoint": 2941,
"id": 1227,
"parameterSlots": 3,
"returnSlots": 1
},
"abi_decode_tuple_t_address": {
"entryPoint": 2998,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_bool_fromMemory": {
"entryPoint": 3110,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_uint256": {
"entryPoint": 3039,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_uint256_fromMemory": {
"entryPoint": 3167,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": {
"entryPoint": 3305,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
"entryPoint": null,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": {
"entryPoint": null,
"id": null,
"parameterSlots": 4,
"returnSlots": 1
},
"abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": {
"entryPoint": null,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"abi_encode_tuple_t_contract$_IERC20_$500__to_t_address__fromStack_reversed": {
"entryPoint": null,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_contract$_IERC721_$897__to_t_address__fromStack_reversed": {
"entryPoint": null,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": 3333,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": null,
"id": null,