019be3d6-8440-70da-9fb5-83113843d72c
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 41023 | artifact.fetch | complete | 1 / 3 | 2 months ago |
| 41024 | proxy.resolve | complete | 1 / 3 | 2 months ago |
| 41025 | tool.cast_disasm | complete | 1 / 3 | 2 months ago |
| 41026 | analysis.bundle | complete | 1 / 3 | 2 months ago |
| 41027 | capability.graph | complete | 1 / 3 | 2 months ago |
| 41028 | detector.run | complete | 1 / 3 | 2 months ago |
| 41029 | validation.fork | complete | 1 / 3 | 2 months ago |
| 41407 | report.consolidate | complete | 1 / 6 | 2 months ago |
{
"status": "not_proxy"
}
No slither job recorded yet.
{"no_findings":false,"summary":"Single first-party ERC20-style token; main issue is allowance front‑running in approve().","findings":[{"severity":"low","category":"auth","title":"ERC20 approve race allows double-spend of allowance","exploit_scenario":"A token holder tries to change an allowance from 100 to 50. The spender can front-run the approve() with transferFrom for 100, then after the approve() succeeds still spend the new 50, effectively spending 150 in total.","recommendation":"Require allowance to be set to 0 before changing to a new non-zero value, or replace approve() with increaseAllowance/decreaseAllowance patterns.","evidence":"approve() overwrites allowance without zero-check, enabling the known ERC20 allowance race.","locations":["contracts/Contract.sol:93","contracts/Contract.sol:94","contracts/Contract.sol:97"]}]}
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-dxnf1_52
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019be475-4d47-7340-afa2-b6c903f6e62d
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.
Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers
thinking
**Reading audit bundle**
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-dxnf1_52 succeeded in 7ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.
================================================================================
FILE: contracts/Contract.sol
================================================================================
pragma solidity ^0.4.8;
/**
* Math operations with safety checks
*/
contract SafeMath {
function safeMul(uint256 a, uint256 b) internal returns (uint256) {
uint256 c = a * b;
assert(a == 0 || c / a == b);
return c;
}
function safeDiv(uint256 a, uint256 b) internal returns (uint256) {
assert(b > 0);
thinking
**Reviewing smart contract vulnerabilities**
The contract's withdrawEther uses a safe transfer to owner with appropriate access control and no reentrancy risk. The approve function has the known ERC20 allowance race condition, which I'll categorize as an authorization risk given its potential impact despite being standard. Other checks on balances, freeze/unfreeze logic, and SafeMath usage are sound.
thinking
**Preparing to include ERC20 approve race with line numbers**
I'll include the known ERC20 approve race condition as a medium/low-risk finding and plan to add approximate file and line locations using line numbering for clarity.
exec
/bin/bash -lc "nl -ba AUDIT_BUNDLE.txt | sed -n '1,220p'" in /tmp/codex-dxnf1_52 succeeded in 8ms:
1 This file concatenates the full contents of first-party Solidity sources for auditing.
2 Do not treat dependency code under lib/ or @openzeppelin/ as first-party.
3
4 ================================================================================
5 FILE: contracts/Contract.sol
6 ================================================================================
7 pragma solidity ^0.4.8;
8
9 /**
10 * Math operations with safety checks
11 */
12 contract SafeMath {
13 function safeMul(uint256 a, uint256 b) internal returns (uint256) {
14 uint256 c = a * b;
15 assert(a == 0 || c / a == b);
16 return c;
17 }
18
19 function safeDiv(uint256 a, uint256 b) internal returns (uint256) {
20 assert(b > 0);
thinking
**Crafting vulnerability JSON for ERC20 approve race condition**
I'm creating a JSON report describing the ERC20 approve race condition at the specified contract location with a low severity under the auth category, including exploit scenario, recommendation, and evidence citing the exact line.
codex
{"no_findings":false,"summary":"Single first-party ERC20-style token; main issue is allowance front‑running in approve().","findings":[{"severity":"low","category":"auth","title":"ERC20 approve race allows double-spend of allowance","exploit_scenario":"A token holder tries to change an allowance from 100 to 50. The spender can front-run the approve() with transferFrom for 100, then after the approve() succeeds still spend the new 50, effectively spending 150 in total.","recommendation":"Require allowance to be set to 0 before changing to a new non-zero value, or replace approve() with increaseAllowance/decreaseAllowance patterns.","evidence":"approve() overwrites allowance without zero-check, enabling the known ERC20 allowance race.","locations":["contracts/Contract.sol:93","contracts/Contract.sol:94","contracts/Contract.sol:97"]}]}
tokens used
9,480
{
"codex": {
"ran_at": "2026-01-22T06:47:51.694284+00:00",
"returncode": 0
},
"project": {
"mode": "source",
"file_count": 1,
"import_count": 0,
"first_party_contracts_count": 1
},
"summary": "Single first-party ERC20-style token; main issue is allowance front\u2011running in approve().",
"raw_final": {
"summary": "Single first-party ERC20-style token; main issue is allowance front\u2011running in approve().",
"findings": [
{
"title": "ERC20 approve race allows double-spend of allowance",
"category": "auth",
"evidence": "approve() overwrites allowance without zero-check, enabling the known ERC20 allowance race.",
"severity": "low",
"locations": [
"contracts/Contract.sol:93",
"contracts/Contract.sol:94",
"contracts/Contract.sol:97"
],
"recommendation": "Require allowance to be set to 0 before changing to a new non-zero value, or replace approve() with increaseAllowance/decreaseAllowance patterns.",
"exploit_scenario": "A token holder tries to change an allowance from 100 to 50. The spender can front-run the approve() with transferFrom for 100, then after the approve() succeeds still spend the new 50, effectively spending 150 in total."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x00d9 0000000a: JUMPI 0000000b: PUSH1 0x00 0000000d: CALLDATALOAD 0000000e: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000002c: SWAP1 0000002d: DIV 0000002e: PUSH4 0xffffffff 00000033: AND 00000034: DUP1 00000035: PUSH4 0x06fdde03 0000003a: EQ 0000003b: PUSH2 0x00e2 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0x095ea7b3 00000045: EQ 00000046: PUSH2 0x0171 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0x18160ddd 00000050: EQ 00000051: PUSH2 0x01cb 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0x23b872dd 0000005b: EQ 0000005c: PUSH2 0x01f4 0000005f: JUMPI 00000060: DUP1 00000061: PUSH4 0x313ce567 00000066: EQ 00000067: PUSH2 0x026d 0000006a: JUMPI 0000006b: DUP1 0000006c: PUSH4 0x3bed33ce 00000071: EQ 00000072: PUSH2 0x029c 00000075: JUMPI 00000076: DUP1 00000077: PUSH4 0x42966c68 0000007c: EQ 0000007d: PUSH2 0x02bf 00000080: JUMPI 00000081: DUP1 00000082: PUSH4 0x6623fc46 00000087: EQ 00000088: PUSH2 0x02fa 0000008b: JUMPI 0000008c: DUP1 0000008d: PUSH4 0x70a08231 00000092: EQ 00000093: PUSH2 0x0335 00000096: JUMPI 00000097: DUP1 00000098: PUSH4 0x8da5cb5b 0000009d: EQ 0000009e: PUSH2 0x0382 000000a1: JUMPI 000000a2: DUP1 000000a3: PUSH4 0x95d89b41 000000a8: EQ 000000a9: PUSH2 0x03d7 000000ac: JUMPI 000000ad: DUP1 000000ae: PUSH4 0xa9059cbb 000000b3: EQ 000000b4: PUSH2 0x0466 000000b7: JUMPI 000000b8: DUP1 000000b9: PUSH4 0xcd4217c1 000000be: EQ 000000bf: PUSH2 0x04a8 000000c2: JUMPI 000000c3: DUP1 000000c4: PUSH4 0xd7a78db8 000000c9: EQ 000000ca: PUSH2 0x04f5 000000cd: JUMPI 000000ce: DUP1 000000cf: PUSH4 0xdd62ed3e 000000d4: EQ 000000d5: PUSH2 0x0530 000000d8: JUMPI 000000d9: JUMPDEST 000000da: PUSH2 0x00e0 000000dd: JUMPDEST 000000de: JUMPDEST 000000df: JUMP 000000e0: JUMPDEST 000000e1: STOP 000000e2: JUMPDEST 000000e3: CALLVALUE 000000e4: ISZERO 000000e5: PUSH2 0x00ed 000000e8: JUMPI 000000e9: PUSH1 0x00 000000eb: DUP1 000000ec: REVERT 000000ed: JUMPDEST 000000ee: PUSH2 0x00f5 000000f1: PUSH2 0x059c 000000f4: JUMP 000000f5: JUMPDEST 000000f6: PUSH1 0x40 000000f8: MLOAD 000000f9: DUP1 000000fa: DUP1 000000fb: PUSH1 0x20 000000fd: ADD 000000fe: DUP3 000000ff: DUP2 00000100: SUB 00000101: DUP3 00000102: MSTORE 00000103: DUP4 00000104: DUP2 00000105: DUP2 00000106: MLOAD 00000107: DUP2 00000108: MSTORE 00000109: PUSH1 0x20 0000010b: ADD 0000010c: SWAP2 0000010d: POP 0000010e: DUP1 0000010f: MLOAD 00000110: SWAP1 00000111: PUSH1 0x20 00000113: ADD 00000114: SWAP1 00000115: DUP1 00000116: DUP4 00000117: DUP4 00000118: PUSH1 0x00 0000011a: JUMPDEST 0000011b: DUP4 0000011c: DUP2 0000011d: LT 0000011e: ISZERO 0000011f: PUSH2 0x0136 00000122: JUMPI 00000123: DUP1 00000124: DUP3 00000125: ADD 00000126: MLOAD 00000127: DUP2 00000128: DUP5 00000129: ADD 0000012a: MSTORE 0000012b: JUMPDEST 0000012c: PUSH1 0x20 0000012e: DUP2 0000012f: ADD 00000130: SWAP1 00000131: POP 00000132: PUSH2 0x011a 00000135: JUMP 00000136: JUMPDEST 00000137: POP 00000138: POP 00000139: POP 0000013a: POP 0000013b: SWAP1 0000013c: POP 0000013d: SWAP1 0000013e: DUP2 0000013f: ADD 00000140: SWAP1 00000141: PUSH1 0x1f 00000143: AND 00000144: DUP1 00000145: ISZERO 00000146: PUSH2 0x0163 00000149: JUMPI 0000014a: DUP1 0000014b: DUP3 0000014c: SUB 0000014d: DUP1 0000014e: MLOAD 0000014f: PUSH1 0x01 00000151: DUP4 00000152: PUSH1 0x20 00000154: SUB 00000155: PUSH2 0x0100 00000158: EXP 00000159: SUB 0000015a: NOT 0000015b: AND 0000015c: DUP2 0000015d: MSTORE 0000015e: PUSH1 0x20 00000160: ADD 00000161: SWAP2 00000162: POP 00000163: JUMPDEST 00000164: POP 00000165: SWAP3 00000166: POP 00000167: POP 00000168: POP 00000169: PUSH1 0x40 0000016b: MLOAD 0000016c: DUP1 0000016d: SWAP2 0000016e: SUB 0000016f: SWAP1 00000170: RETURN 00000171: JUMPDEST 00000172: CALLVALUE 00000173: ISZERO 00000174: PUSH2 0x017c 00000177: JUMPI 00000178: PUSH1 0x00 0000017a: DUP1 0000017b: REVERT 0000017c: JUMPDEST 0000017d: PUSH2 0x01b1 00000180: PUSH1 0x04 00000182: DUP1 00000183: DUP1 00000184: CALLDATALOAD 00000185: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000019a: AND 0000019b: SWAP1 0000019c: PUSH1 0x20 0000019e: ADD 0000019f: SWAP1 000001a0: SWAP2 000001a1: SWAP1 000001a2: DUP1 000001a3: CALLDATALOAD 000001a4: SWAP1 000001a5: PUSH1 0x20 000001a7: ADD 000001a8: SWAP1 000001a9: SWAP2 000001aa: SWAP1 000001ab: POP 000001ac: POP 000001ad: PUSH2 0x063a 000001b0: JUMP 000001b1: JUMPDEST 000001b2: PUSH1 0x40 000001b4: MLOAD 000001b5: DUP1 000001b6: DUP3 000001b7: ISZERO 000001b8: ISZERO 000001b9: ISZERO 000001ba: ISZERO 000001bb: DUP2 000001bc: MSTORE 000001bd: PUSH1 0x20 000001bf: ADD 000001c0: SWAP2 000001c1: POP 000001c2: POP 000001c3: PUSH1 0x40 000001c5: MLOAD 000001c6: DUP1 000001c7: SWAP2 000001c8: SUB 000001c9: SWAP1 000001ca: RETURN 000001cb: JUMPDEST 000001cc: CALLVALUE 000001cd: ISZERO 000001ce: PUSH2 0x01d6 000001d1: JUMPI 000001d2: PUSH1 0x00 000001d4: DUP1 000001d5: REVERT 000001d6: JUMPDEST 000001d7: PUSH2 0x01de 000001da: PUSH2 0x06d6 000001dd: JUMP 000001de: JUMPDEST 000001df: PUSH1 0x40 000001e1: MLOAD 000001e2: DUP1 000001e3: DUP3 000001e4: DUP2 000001e5: MSTORE 000001e6: PUSH1 0x20 000001e8: ADD 000001e9: SWAP2 000001ea: POP 000001eb: POP 000001ec: PUSH1 0x40 000001ee: MLOAD 000001ef: DUP1 000001f0: SWAP2 000001f1: SUB 000001f2: SWAP1 000001f3: RETURN 000001f4: JUMPDEST 000001f5: CALLVALUE 000001f6: ISZERO 000001f7: PUSH2 0x01ff 000001fa: JUMPI 000001fb: PUSH1 0x00 000001fd: DUP1 000001fe: REVERT 000001ff: JUMPDEST 00000200: PUSH2 0x0253 00000203: PUSH1 0x04 00000205: DUP1 00000206: DUP1 00000207: CALLDATALOAD 00000208: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000021d: AND 0000021e: SWAP1 0000021f: PUSH1 0x20 00000221: ADD 00000222: SWAP1 00000223: SWAP2 00000224: SWAP1 00000225: DUP1 00000226: CALLDATALOAD 00000227: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000023c: AND 0000023d: SWAP1 0000023e: PUSH1 0x20 00000240: ADD 00000241: SWAP1 00000242: SWAP2 00000243: SWAP1 00000244: DUP1 00000245: CALLDATALOAD 00000246: SWAP1 00000247: PUSH1 0x20 00000249: ADD 0000024a: SWAP1 0000024b: SWAP2 0000024c: SWAP1 0000024d: POP 0000024e: POP 0000024f: PUSH2 0x06dc 00000252: JUMP 00000253: JUMPDEST 00000254: PUSH1 0x40 00000256: MLOAD 00000257: DUP1 00000258: DUP3 00000259: ISZERO 0000025a: ISZERO 0000025b: ISZERO 0000025c: ISZERO 0000025d: DUP2 0000025e: MSTORE 0000025f: PUSH1 0x20 00000261: ADD 00000262: SWAP2 00000263: POP 00000264: POP 00000265: PUSH1 0x40 00000267: MLOAD 00000268: DUP1 00000269: SWAP2 0000026a: SUB 0000026b: SWAP1 0000026c: RETURN 0000026d: JUMPDEST 0000026e: CALLVALUE 0000026f: ISZERO 00000270: PUSH2 0x0278 00000273: JUMPI 00000274: PUSH1 0x00 00000276: DUP1 00000277: REVERT 00000278: JUMPDEST 00000279: PUSH2 0x0280 0000027c: PUSH2 0x0b01 0000027f: JUMP 00000280: JUMPDEST 00000281: PUSH1 0x40 00000283: MLOAD 00000284: DUP1 00000285: DUP3 00000286: PUSH1 0xff 00000288: AND 00000289: PUSH1 0xff 0000028b: AND 0000028c: DUP2 0000028d: MSTORE 0000028e: PUSH1 0x20 00000290: ADD 00000291: SWAP2 00000292: POP 00000293: POP 00000294: PUSH1 0x40 00000296: MLOAD 00000297: DUP1 00000298: SWAP2 00000299: SUB 0000029a: SWAP1 0000029b: RETURN 0000029c: JUMPDEST 0000029d: CALLVALUE 0000029e: ISZERO 0000029f: PUSH2 0x02a7 000002a2: JUMPI 000002a3: PUSH1 0x00 000002a5: DUP1 000002a6: REVERT 000002a7: JUMPDEST 000002a8: PUSH2 0x02bd 000002ab: PUSH1 0x04 000002ad: DUP1 000002ae: DUP1 000002af: CALLDATALOAD 000002b0: SWAP1 000002b1: PUSH1 0x20 000002b3: ADD 000002b4: SWAP1 000002b5: SWAP2 000002b6: SWAP1 000002b7: POP 000002b8: POP 000002b9: PUSH2 0x0b14 000002bc: JUMP 000002bd: JUMPDEST 000002be: STOP 000002bf: JUMPDEST 000002c0: CALLVALUE 000002c1: ISZERO 000002c2: PUSH2 0x02ca 000002c5: JUMPI 000002c6: PUSH1 0x00 000002c8: DUP1 000002c9: REVERT 000002ca: JUMPDEST 000002cb: PUSH2 0x02e0 000002ce: PUSH1 0x04 000002d0: DUP1 000002d1: DUP1 000002d2: CALLDATALOAD 000002d3: SWAP1 000002d4: PUSH1 0x20 000002d6: ADD 000002d7: SWAP1 000002d8: SWAP2 000002d9: SWAP1 000002da: POP 000002db: POP 000002dc: PUSH2 0x0bd6 000002df: JUMP 000002e0: JUMPDEST 000002e1: PUSH1 0x40 000002e3: MLOAD 000002e4: DUP1 000002e5: DUP3 000002e6: ISZERO 000002e7: ISZERO 000002e8: ISZERO 000002e9: ISZERO 000002ea: DUP2 000002eb: MSTORE 000002ec: PUSH1 0x20 000002ee: ADD 000002ef: SWAP2 000002f0: POP 000002f1: POP 000002f2: PUSH1 0x40 000002f4: MLOAD 000002f5: DUP1 000002f6: SWAP2 000002f7: SUB 000002f8: SWAP1 000002f9: RETURN 000002fa: JUMPDEST 000002fb: CALLVALUE 000002fc: ISZERO 000002fd: PUSH2 0x0305 00000300: JUMPI 00000301: PUSH1 0x00 00000303: DUP1 00000304: REVERT 00000305: JUMPDEST 00000306: PUSH2 0x031b 00000309: PUSH1 0x04 0000030b: DUP1 0000030c: DUP1 0000030d: CALLDATALOAD 0000030e: SWAP1 0000030f: PUSH1 0x20 00000311: ADD 00000312: SWAP1 00000313: SWAP2 00000314: SWAP1 00000315: POP 00000316: POP 00000317: PUSH2 0x0d29 0000031a: JUMP 0000031b: JUMPDEST 0000031c: PUSH1 0x40 0000031e: MLOAD 0000031f: DUP1 00000320: DUP3 00000321: ISZERO 00000322: ISZERO 00000323: ISZERO 00000324: ISZERO 00000325: DUP2 00000326: MSTORE 00000327: PUSH1 0x20 00000329: ADD 0000032a: SWAP2 0000032b: POP 0000032c: POP 0000032d: PUSH1 0x40 0000032f: MLOAD 00000330: DUP1 00000331: SWAP2 00000332: SUB 00000333: SWAP1 00000334: RETURN 00000335: JUMPDEST 00000336: CALLVALUE 00000337: ISZERO 00000338: PUSH2 0x0340 0000033b: JUMPI 0000033c: PUSH1 0x00 0000033e: DUP1 0000033f: REVERT 00000340: JUMPDEST 00000341: PUSH2 0x036c 00000344: PUSH1 0x04 00000346: DUP1 00000347: DUP1 00000348: CALLDATALOAD 00000349: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000035e: AND 0000035f: SWAP1 00000360: PUSH1 0x20 00000362: ADD 00000363: SWAP1 00000364: SWAP2 00000365: SWAP1 00000366: POP 00000367: POP 00000368: PUSH2 0x0ef6 0000036b: JUMP 0000036c: JUMPDEST 0000036d: PUSH1 0x40 0000036f: MLOAD 00000370: DUP1 00000371: DUP3 00000372: DUP2 00000373: MSTORE 00000374: PUSH1 0x20 00000376: ADD 00000377: SWAP2 00000378: POP 00000379: POP 0000037a: PUSH1 0x40 0000037c: MLOAD 0000037d: DUP1 0000037e: SWAP2 0000037f: SUB 00000380: SWAP1 00000381: RETURN 00000382: JUMPDEST 00000383: CALLVALUE 00000384: ISZERO 00000385: PUSH2 0x038d 00000388: JUMPI 00000389: PUSH1 0x00 0000038b: DUP1 0000038c: REVERT 0000038d: JUMPDEST 0000038e: PUSH2 0x0395 00000391: PUSH2 0x0f0e 00000394: JUMP 00000395: JUMPDEST 00000396: PUSH1 0x40 00000398: MLOAD 00000399: DUP1 0000039a: DUP3 0000039b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003b0: AND 000003b1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003c6: AND 000003c7: DUP2 000003c8: MSTORE 000003c9: PUSH1 0x20 000003cb: ADD 000003cc: SWAP2 000003cd: POP 000003ce: POP 000003cf: PUSH1 0x40 000003d1: MLOAD 000003d2: DUP1 000003d3: SWAP2 000003d4: SUB 000003d5: SWAP1 000003d6: RETURN 000003d7: JUMPDEST 000003d8: CALLVALUE 000003d9: ISZERO 000003da: PUSH2 0x03e2 000003dd: JUMPI 000003de: PUSH1 0x00 000003e0: DUP1 000003e1: REVERT 000003e2: JUMPDEST 000003e3: PUSH2 0x03ea 000003e6: PUSH2 0x0f34 000003e9: JUMP 000003ea: JUMPDEST 000003eb: PUSH1 0x40 000003ed: MLOAD 000003ee: DUP1 000003ef: DUP1 000003f0: PUSH1 0x20 000003f2: ADD 000003f3: DUP3 000003f4: DUP2 000003f5: SUB 000003f6: DUP3 000003f7: MSTORE 000003f8: DUP4 000003f9: DUP2 000003fa: DUP2 000003fb: MLOAD 000003fc: DUP2 000003fd: MSTORE 000003fe: PUSH1 0x20 00000400: ADD 00000401: SWAP2 00000402: POP 00000403: DUP1 00000404: MLOAD 00000405: SWAP1 00000406: PUSH1 0x20 00000408: ADD 00000409: SWAP1 0000040a: DUP1 0000040b: DUP4 0000040c: DUP4 0000040d: PUSH1 0x00 0000040f: JUMPDEST 00000410: DUP4 00000411: DUP2 00000412: LT 00000413: ISZERO 00000414: PUSH2 0x042b 00000417: JUMPI 00000418: DUP1 00000419: DUP3 0000041a: ADD 0000041b: MLOAD 0000041c: DUP2 0000041d: DUP5 0000041e: ADD 0000041f: MSTORE 00000420: JUMPDEST 00000421: PUSH1 0x20 00000423: DUP2 00000424: ADD 00000425: SWAP1 00000426: POP 00000427: PUSH2 0x040f 0000042a: JUMP 0000042b: JUMPDEST 0000042c: POP 0000042d: POP 0000042e: POP 0000042f: POP 00000430: SWAP1 00000431: POP 00000432: SWAP1 00000433: DUP2 00000434: ADD 00000435: SWAP1 00000436: PUSH1 0x1f 00000438: AND 00000439: DUP1 0000043a: ISZERO 0000043b: PUSH2 0x0458 0000043e: JUMPI 0000043f: DUP1 00000440: DUP3 00000441: SUB 00000442: DUP1 00000443: MLOAD 00000444: PUSH1 0x01 00000446: DUP4 00000447: PUSH1 0x20 00000449: SUB 0000044a: PUSH2 0x0100 0000044d: EXP 0000044e: SUB 0000044f: NOT 00000450: AND 00000451: DUP2 00000452: MSTORE 00000453: PUSH1 0x20 00000455: ADD 00000456: SWAP2 00000457: POP 00000458: JUMPDEST 00000459: POP 0000045a: SWAP3 0000045b: POP 0000045c: POP 0000045d: POP 0000045e: PUSH1 0x40 00000460: MLOAD 00000461: DUP1 00000462: SWAP2 00000463: SUB 00000464: SWAP1 00000465: RETURN 00000466: JUMPDEST 00000467: CALLVALUE 00000468: ISZERO 00000469: PUSH2 0x0471 0000046c: JUMPI 0000046d: PUSH1 0x00 0000046f: DUP1 00000470: REVERT 00000471: JUMPDEST 00000472: PUSH2 0x04a6 00000475: PUSH1 0x04 00000477: DUP1 00000478: DUP1 00000479: CALLDATALOAD 0000047a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000048f: AND 00000490: SWAP1 00000491: PUSH1 0x20 00000493: ADD 00000494: SWAP1 00000495: SWAP2 00000496: SWAP1 00000497: DUP1 00000498: CALLDATALOAD 00000499: SWAP1 0000049a: PUSH1 0x20 0000049c: ADD 0000049d: SWAP1 0000049e: SWAP2 0000049f: SWAP1 000004a0: POP 000004a1: POP 000004a2: PUSH2 0x0fd2 000004a5: JUMP 000004a6: JUMPDEST 000004a7: STOP 000004a8: JUMPDEST 000004a9: CALLVALUE 000004aa: ISZERO 000004ab: PUSH2 0x04b3 000004ae: JUMPI 000004af: PUSH1 0x00 000004b1: DUP1 000004b2: REVERT 000004b3: JUMPDEST 000004b4: PUSH2 0x04df 000004b7: PUSH1 0x04 000004b9: DUP1 000004ba: DUP1 000004bb: CALLDATALOAD 000004bc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000004d1: AND 000004d2: SWAP1 000004d3: PUSH1 0x20 000004d5: ADD 000004d6: SWAP1 000004d7: SWAP2 000004d8: SWAP1 000004d9: POP 000004da: POP 000004db: PUSH2 0x1260 000004de: JUMP 000004df: JUMPDEST 000004e0: PUSH1 0x40 000004e2: MLOAD 000004e3: DUP1 000004e4: DUP3 000004e5: DUP2 000004e6: MSTORE 000004e7: PUSH1 0x20 000004e9: ADD 000004ea: SWAP2 000004eb: POP 000004ec: POP 000004ed: PUSH1 0x40 000004ef: MLOAD 000004f0: DUP1 000004f1: SWAP2 000004f2: SUB 000004f3: SWAP1 000004f4: RETURN 000004f5: JUMPDEST 000004f6: CALLVALUE 000004f7: ISZERO 000004f8: PUSH2 0x0500 000004fb: JUMPI 000004fc: PUSH1 0x00 000004fe: DUP1 000004ff: REVERT 00000500: JUMPDEST 00000501: PUSH2 0x0516 00000504: PUSH1 0x04 00000506: DUP1 00000507: DUP1 00000508: CALLDATALOAD 00000509: SWAP1 0000050a: PUSH1 0x20 0000050c: ADD 0000050d: SWAP1 0000050e: SWAP2 0000050f: SWAP1 00000510: POP 00000511: POP 00000512: PUSH2 0x1278 00000515: JUMP 00000516: JUMPDEST 00000517: PUSH1 0x40 00000519: MLOAD 0000051a: DUP1 0000051b: DUP3 0000051c: ISZERO 0000051d: ISZERO 0000051e: ISZERO 0000051f: ISZERO 00000520: DUP2 00000521: MSTORE 00000522: PUSH1 0x20 00000524: ADD 00000525: SWAP2 00000526: POP 00000527: POP 00000528: PUSH1 0x40 0000052a: MLOAD 0000052b: DUP1 0000052c: SWAP2 0000052d: SUB 0000052e: SWAP1 0000052f: RETURN 00000530: JUMPDEST 00000531: CALLVALUE 00000532: ISZERO 00000533: PUSH2 0x053b 00000536: JUMPI 00000537: PUSH1 0x00 00000539: DUP1 0000053a: REVERT 0000053b: JUMPDEST 0000053c: PUSH2 0x0586 0000053f: PUSH1 0x04 00000541: DUP1 00000542: DUP1 00000543: CALLDATALOAD 00000544: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000559: AND 0000055a: SWAP1 0000055b: PUSH1 0x20 0000055d: ADD 0000055e: SWAP1 0000055f: SWAP2 00000560: SWAP1 00000561: DUP1 00000562: CALLDATALOAD 00000563: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000578: AND 00000579: SWAP1 0000057a: PUSH1 0x20 0000057c: ADD 0000057d: SWAP1 0000057e: SWAP2 0000057f: SWAP1 00000580: POP 00000581: POP 00000582: PUSH2 0x1445 00000585: JUMP 00000586: JUMPDEST 00000587: PUSH1 0x40 00000589: MLOAD 0000058a: DUP1 0000058b: DUP3 0000058c: DUP2 0000058d: MSTORE 0000058e: PUSH1 0x20 00000590: ADD 00000591: SWAP2 00000592: POP 00000593: POP 00000594: PUSH1 0x40 00000596: MLOAD 00000597: DUP1 00000598: SWAP2 00000599: SUB 0000059a: SWAP1 0000059b: RETURN 0000059c: JUMPDEST 0000059d: PUSH1 0x00 0000059f: DUP1 000005a0: SLOAD 000005a1: PUSH1 0x01 000005a3: DUP2 000005a4: PUSH1 0x01 000005a6: AND 000005a7: ISZERO 000005a8: PUSH2 0x0100 000005ab: MUL 000005ac: SUB 000005ad: AND 000005ae: PUSH1 0x02 000005b0: SWAP1 000005b1: DIV 000005b2: DUP1 000005b3: PUSH1 0x1f 000005b5: ADD 000005b6: PUSH1 0x20 000005b8: DUP1 000005b9: SWAP2 000005ba: DIV 000005bb: MUL 000005bc: PUSH1 0x20 000005be: ADD 000005bf: PUSH1 0x40 000005c1: MLOAD 000005c2: SWAP1 000005c3: DUP2 000005c4: ADD 000005c5: PUSH1 0x40 000005c7: MSTORE 000005c8: DUP1 000005c9: SWAP3 000005ca: SWAP2 000005cb: SWAP1 000005cc: DUP2 000005cd: DUP2 000005ce: MSTORE 000005cf: PUSH1 0x20 000005d1: ADD 000005d2: DUP3 000005d3: DUP1 000005d4: SLOAD 000005d5: PUSH1 0x01 000005d7: DUP2 000005d8: PUSH1 0x01 000005da: AND 000005db: ISZERO 000005dc: PUSH2 0x0100 000005df: MUL 000005e0: SUB 000005e1: AND 000005e2: PUSH1 0x02 000005e4: SWAP1 000005e5: DIV 000005e6: DUP1 000005e7: ISZERO 000005e8: PUSH2 0x0632 000005eb: JUMPI 000005ec: DUP1 000005ed: PUSH1 0x1f 000005ef: LT 000005f0: PUSH2 0x0607 000005f3: JUMPI 000005f4: PUSH2 0x0100 000005f7: DUP1 000005f8: DUP4 000005f9: SLOAD 000005fa: DIV 000005fb: MUL 000005fc: DUP4 000005fd: MSTORE 000005fe: SWAP2 000005ff: PUSH1 0x20 00000601: ADD 00000602: SWAP2 00000603: PUSH2 0x0632 00000606: JUMP 00000607: JUMPDEST 00000608: DUP3 00000609: ADD 0000060a: SWAP2 0000060b: SWAP1 0000060c: PUSH1 0x00 0000060e: MSTORE 0000060f: PUSH1 0x20 00000611: PUSH1 0x00 00000613: KECCAK256 00000614: SWAP1 00000615: JUMPDEST 00000616: DUP2 00000617: SLOAD 00000618: DUP2 00000619: MSTORE 0000061a: SWAP1 0000061b: PUSH1 0x01 0000061d: ADD 0000061e: SWAP1 0000061f: PUSH1 0x20 00000621: ADD 00000622: DUP1 00000623: DUP4 00000624: GT 00000625: PUSH2 0x0615 00000628: JUMPI 00000629: DUP3 0000062a: SWAP1 0000062b: SUB 0000062c: PUSH1 0x1f 0000062e: AND 0000062f: DUP3 00000630: ADD 00000631: SWAP2 00000632: JUMPDEST 00000633: POP 00000634: POP 00000635: POP 00000636: POP 00000637: POP 00000638: DUP2 00000639: JUMP 0000063a: JUMPDEST 0000063b: PUSH1 0x00 0000063d: DUP1 0000063e: DUP3 0000063f: GT 00000640: ISZERO 00000641: ISZERO 00000642: PUSH2 0x064a 00000645: JUMPI 00000646: PUSH1 0x00 00000648: DUP1 00000649: REVERT 0000064a: JUMPDEST 0000064b: DUP2 0000064c: PUSH1 0x07 0000064e: PUSH1 0x00 00000650: CALLER 00000651: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000666: AND 00000667: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000067c: AND 0000067d: DUP2 0000067e: MSTORE 0000067f: PUSH1 0x20 00000681: ADD 00000682: SWAP1 00000683: DUP2 00000684: MSTORE 00000685: PUSH1 0x20 00000687: ADD 00000688: PUSH1 0x00 0000068a: KECCAK256 0000068b: PUSH1 0x00 0000068d: DUP6 0000068e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006a3: AND 000006a4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006b9: AND 000006ba: DUP2 000006bb: MSTORE 000006bc: PUSH1 0x20 000006be: ADD 000006bf: SWAP1 000006c0: DUP2 000006c1: MSTORE 000006c2: PUSH1 0x20 000006c4: ADD 000006c5: PUSH1 0x00 000006c7: KECCAK256 000006c8: DUP2 000006c9: SWAP1 000006ca: SSTORE 000006cb: POP 000006cc: PUSH1 0x01 000006ce: SWAP1 000006cf: POP 000006d0: JUMPDEST 000006d1: SWAP3 000006d2: SWAP2 000006d3: POP 000006d4: POP 000006d5: JUMP 000006d6: JUMPDEST 000006d7: PUSH1 0x03 000006d9: SLOAD 000006da: DUP2 000006db: JUMP 000006dc: JUMPDEST 000006dd: PUSH1 0x00 000006df: DUP1 000006e0: DUP4 000006e1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006f6: AND 000006f7: EQ 000006f8: ISZERO 000006f9: PUSH2 0x0701 000006fc: JUMPI 000006fd: PUSH1 0x00 000006ff: DUP1 00000700: REVERT 00000701: JUMPDEST 00000702: PUSH1 0x00 00000704: DUP3 00000705: GT 00000706: ISZERO 00000707: ISZERO 00000708: PUSH2 0x0710 0000070b: JUMPI 0000070c: PUSH1 0x00 0000070e: DUP1 0000070f: REVERT 00000710: JUMPDEST 00000711: DUP2 00000712: PUSH1 0x05 00000714: PUSH1 0x00 00000716: DUP7 00000717: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000072c: AND 0000072d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000742: AND 00000743: DUP2 00000744: MSTORE 00000745: PUSH1 0x20 00000747: ADD 00000748: SWAP1 00000749: DUP2 0000074a: MSTORE 0000074b: PUSH1 0x20 0000074d: ADD 0000074e: PUSH1 0x00 00000750: KECCAK256 00000751: SLOAD 00000752: LT 00000753: ISZERO 00000754: PUSH2 0x075c 00000757: JUMPI 00000758: PUSH1 0x00 0000075a: DUP1 0000075b: REVERT 0000075c: JUMPDEST 0000075d: PUSH1 0x05 0000075f: PUSH1 0x00 00000761: DUP5 00000762: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000777: AND 00000778: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000078d: AND 0000078e: DUP2 0000078f: MSTORE 00000790: PUSH1 0x20 00000792: ADD 00000793: SWAP1 00000794: DUP2 00000795: MSTORE 00000796: PUSH1 0x20 00000798: ADD 00000799: PUSH1 0x00 0000079b: KECCAK256 0000079c: SLOAD 0000079d: DUP3 0000079e: PUSH1 0x05 000007a0: PUSH1 0x00 000007a2: DUP7 000007a3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007b8: AND 000007b9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007ce: AND 000007cf: DUP2 000007d0: MSTORE 000007d1: PUSH1 0x20 000007d3: ADD 000007d4: SWAP1 000007d5: DUP2 000007d6: MSTORE 000007d7: PUSH1 0x20 000007d9: ADD 000007da: PUSH1 0x00 000007dc: KECCAK256 000007dd: SLOAD 000007de: ADD 000007df: LT 000007e0: ISZERO 000007e1: PUSH2 0x07e9 000007e4: JUMPI 000007e5: PUSH1 0x00 000007e7: DUP1 000007e8: REVERT 000007e9: JUMPDEST 000007ea: PUSH1 0x07 000007ec: PUSH1 0x00 000007ee: DUP6 000007ef: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000804: AND 00000805: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000081a: AND 0000081b: DUP2 0000081c: MSTORE 0000081d: PUSH1 0x20 0000081f: ADD 00000820: SWAP1 00000821: DUP2 00000822: MSTORE 00000823: PUSH1 0x20 00000825: ADD 00000826: PUSH1 0x00 00000828: KECCAK256 00000829: PUSH1 0x00 0000082b: CALLER 0000082c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000841: AND 00000842: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000857: AND 00000858: DUP2 00000859: MSTORE 0000085a: PUSH1 0x20 0000085c: ADD 0000085d: SWAP1 0000085e: DUP2 0000085f: MSTORE 00000860: PUSH1 0x20 00000862: ADD 00000863: PUSH1 0x00 00000865: KECCAK256 00000866: SLOAD 00000867: DUP3 00000868: GT 00000869: ISZERO 0000086a: PUSH2 0x0872 0000086d: JUMPI 0000086e: PUSH1 0x00 00000870: DUP1 00000871: REVERT 00000872: JUMPDEST 00000873: PUSH2 0x08bb 00000876: PUSH1 0x05 00000878: PUSH1 0x00 0000087a: DUP7 0000087b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000890: AND 00000891: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008a6: AND 000008a7: DUP2 000008a8: MSTORE 000008a9: PUSH1 0x20 000008ab: ADD 000008ac: SWAP1 000008ad: DUP2 000008ae: MSTORE 000008af: PUSH1 0x20 000008b1: ADD 000008b2: PUSH1 0x00 000008b4: KECCAK256 000008b5: SLOAD 000008b6: DUP4 000008b7: PUSH2 0x146a 000008ba: JUMP 000008bb: JUMPDEST 000008bc: PUSH1 0x05 000008be: PUSH1 0x00 000008c0: DUP7 000008c1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008d6: AND 000008d7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008ec: AND 000008ed: DUP2 000008ee: MSTORE 000008ef: PUSH1 0x20 000008f1: ADD 000008f2: SWAP1 000008f3: DUP2 000008f4: MSTORE 000008f5: PUSH1 0x20 000008f7: ADD 000008f8: PUSH1 0x00 000008fa: KECCAK256 000008fb: DUP2 000008fc: SWAP1 000008fd: SSTORE 000008fe: POP 000008ff: PUSH2 0x0947 00000902: PUSH1 0x05 00000904: PUSH1 0x00 00000906: DUP6 00000907: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000091c: AND 0000091d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000932: AND 00000933: DUP2 00000934: MSTORE 00000935: PUSH1 0x20 00000937: ADD 00000938: SWAP1 00000939: DUP2 0000093a: MSTORE 0000093b: PUSH1 0x20 0000093d: ADD 0000093e: PUSH1 0x00 00000940: KECCAK256 00000941: SLOAD 00000942: DUP4 00000943: PUSH2 0x1484 00000946: JUMP 00000947: JUMPDEST 00000948: PUSH1 0x05 0000094a: PUSH1 0x00 0000094c: DUP6 0000094d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000962: AND 00000963: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000978: AND 00000979: DUP2 0000097a: MSTORE 0000097b: PUSH1 0x20 0000097d: ADD 0000097e: SWAP1 0000097f: DUP2 00000980: MSTORE 00000981: PUSH1 0x20 00000983: ADD 00000984: PUSH1 0x00 00000986: KECCAK256 00000987: DUP2 00000988: SWAP1 00000989: SSTORE 0000098a: POP 0000098b: PUSH2 0x0a10 0000098e: PUSH1 0x07 00000990: PUSH1 0x00 00000992: DUP7 00000993: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009a8: AND 000009a9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009be: AND 000009bf: DUP2 000009c0: MSTORE 000009c1: PUSH1 0x20 000009c3: ADD 000009c4: SWAP1 000009c5: DUP2 000009c6: MSTORE 000009c7: PUSH1 0x20 000009c9: ADD 000009ca: PUSH1 0x00 000009cc: KECCAK256 000009cd: PUSH1 0x00 000009cf: CALLER 000009d0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009e5: AND 000009e6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009fb: AND 000009fc: DUP2 000009fd: MSTORE 000009fe: PUSH1 0x20 00000a00: ADD 00000a01: SWAP1 00000a02: DUP2 00000a03: MSTORE 00000a04: PUSH1 0x20 00000a06: ADD 00000a07: PUSH1 0x00 00000a09: KECCAK256 00000a0a: SLOAD 00000a0b: DUP4 00000a0c: PUSH2 0x146a 00000a0f: JUMP 00000a10: JUMPDEST 00000a11: PUSH1 0x07 00000a13: PUSH1 0x00 00000a15: DUP7 00000a16: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a2b: AND 00000a2c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a41: AND 00000a42: DUP2 00000a43: MSTORE 00000a44: PUSH1 0x20 00000a46: ADD 00000a47: SWAP1 00000a48: DUP2 00000a49: MSTORE 00000a4a: PUSH1 0x20 00000a4c: ADD 00000a4d: PUSH1 0x00 00000a4f: KECCAK256 00000a50: PUSH1 0x00 00000a52: CALLER 00000a53: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a68: AND 00000a69: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a7e: AND 00000a7f: DUP2 00000a80: MSTORE 00000a81: PUSH1 0x20 00000a83: ADD 00000a84: SWAP1 00000a85: DUP2 00000a86: MSTORE 00000a87: PUSH1 0x20 00000a89: ADD 00000a8a: PUSH1 0x00 00000a8c: KECCAK256 00000a8d: DUP2 00000a8e: SWAP1 00000a8f: SSTORE 00000a90: POP 00000a91: DUP3 00000a92: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000aa7: AND 00000aa8: DUP5 00000aa9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000abe: AND 00000abf: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 00000ae0: DUP5 00000ae1: PUSH1 0x40 00000ae3: MLOAD 00000ae4: DUP1 00000ae5: DUP3 00000ae6: DUP2 00000ae7: MSTORE 00000ae8: PUSH1 0x20 00000aea: ADD 00000aeb: SWAP2 00000aec: POP 00000aed: POP 00000aee: PUSH1 0x40 00000af0: MLOAD 00000af1: DUP1 00000af2: SWAP2 00000af3: SUB 00000af4: SWAP1 00000af5: LOG3 00000af6: PUSH1 0x01 00000af8: SWAP1 00000af9: POP 00000afa: JUMPDEST 00000afb: SWAP4 00000afc: SWAP3 00000afd: POP 00000afe: POP 00000aff: POP 00000b00: JUMP 00000b01: JUMPDEST 00000b02: PUSH1 0x02 00000b04: PUSH1 0x00 00000b06: SWAP1 00000b07: SLOAD 00000b08: SWAP1 00000b09: PUSH2 0x0100 00000b0c: EXP 00000b0d: SWAP1 00000b0e: DIV 00000b0f: PUSH1 0xff 00000b11: AND 00000b12: DUP2 00000b13: JUMP 00000b14: JUMPDEST 00000b15: PUSH1 0x04 00000b17: PUSH1 0x00 00000b19: SWAP1 00000b1a: SLOAD 00000b1b: SWAP1 00000b1c: PUSH2 0x0100 00000b1f: EXP 00000b20: SWAP1 00000b21: DIV 00000b22: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b37: AND 00000b38: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b4d: AND 00000b4e: CALLER 00000b4f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b64: AND 00000b65: EQ 00000b66: ISZERO 00000b67: ISZERO 00000b68: PUSH2 0x0b70 00000b6b: JUMPI 00000b6c: PUSH1 0x00 00000b6e: DUP1 00000b6f: REVERT 00000b70: JUMPDEST 00000b71: PUSH1 0x04 00000b73: PUSH1 0x00 00000b75: SWAP1 00000b76: SLOAD 00000b77: SWAP1 00000b78: PUSH2 0x0100 00000b7b: EXP 00000b7c: SWAP1 00000b7d: DIV 00000b7e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b93: AND 00000b94: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ba9: AND 00000baa: PUSH2 0x08fc 00000bad: DUP3 00000bae: SWAP1 00000baf: DUP2 00000bb0: ISZERO 00000bb1: MUL 00000bb2: SWAP1 00000bb3: PUSH1 0x40 00000bb5: MLOAD 00000bb6: PUSH1 0x00 00000bb8: PUSH1 0x40 00000bba: MLOAD 00000bbb: DUP1 00000bbc: DUP4 00000bbd: SUB 00000bbe: DUP2 00000bbf: DUP6 00000bc0: DUP9 00000bc1: DUP9 00000bc2: CALL 00000bc3: SWAP4 00000bc4: POP 00000bc5: POP 00000bc6: POP 00000bc7: POP 00000bc8: ISZERO 00000bc9: ISZERO 00000bca: PUSH2 0x0bd2 00000bcd: JUMPI 00000bce: PUSH1 0x00 00000bd0: DUP1 00000bd1: REVERT 00000bd2: JUMPDEST 00000bd3: JUMPDEST 00000bd4: POP 00000bd5: JUMP 00000bd6: JUMPDEST 00000bd7: PUSH1 0x00 00000bd9: DUP2 00000bda: PUSH1 0x05 00000bdc: PUSH1 0x00 00000bde: CALLER 00000bdf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bf4: AND 00000bf5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c0a: AND 00000c0b: DUP2 00000c0c: MSTORE 00000c0d: PUSH1 0x20 00000c0f: ADD 00000c10: SWAP1 00000c11: DUP2 00000c12: MSTORE 00000c13: PUSH1 0x20 00000c15: ADD 00000c16: PUSH1 0x00 00000c18: KECCAK256 00000c19: SLOAD 00000c1a: LT 00000c1b: ISZERO 00000c1c: PUSH2 0x0c24 00000c1f: JUMPI 00000c20: PUSH1 0x00 00000c22: DUP1 00000c23: REVERT 00000c24: JUMPDEST 00000c25: PUSH1 0x00 00000c27: DUP3 00000c28: GT 00000c29: ISZERO 00000c2a: ISZERO 00000c2b: PUSH2 0x0c33 00000c2e: JUMPI 00000c2f: PUSH1 0x00 00000c31: DUP1 00000c32: REVERT 00000c33: JUMPDEST 00000c34: PUSH2 0x0c7c 00000c37: PUSH1 0x05 00000c39: PUSH1 0x00 00000c3b: CALLER 00000c3c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c51: AND 00000c52: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c67: AND 00000c68: DUP2 00000c69: MSTORE 00000c6a: PUSH1 0x20 00000c6c: ADD 00000c6d: SWAP1 00000c6e: DUP2 00000c6f: MSTORE 00000c70: PUSH1 0x20 00000c72: ADD 00000c73: PUSH1 0x00 00000c75: KECCAK256 00000c76: SLOAD 00000c77: DUP4 00000c78: PUSH2 0x146a 00000c7b: JUMP 00000c7c: JUMPDEST 00000c7d: PUSH1 0x05 00000c7f: PUSH1 0x00 00000c81: CALLER 00000c82: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c97: AND 00000c98: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000cad: AND 00000cae: DUP2 00000caf: MSTORE 00000cb0: PUSH1 0x20 00000cb2: ADD 00000cb3: SWAP1 00000cb4: DUP2 00000cb5: MSTORE 00000cb6: PUSH1 0x20 00000cb8: ADD 00000cb9: PUSH1 0x00 00000cbb: KECCAK256 00000cbc: DUP2 00000cbd: SWAP1 00000cbe: SSTORE 00000cbf: POP 00000cc0: PUSH2 0x0ccb 00000cc3: PUSH1 0x03 00000cc5: SLOAD 00000cc6: DUP4 00000cc7: PUSH2 0x146a 00000cca: JUMP 00000ccb: JUMPDEST 00000ccc: PUSH1 0x03 00000cce: DUP2 00000ccf: SWAP1 00000cd0: SSTORE 00000cd1: POP 00000cd2: CALLER 00000cd3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ce8: AND 00000ce9: PUSH32 0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5 00000d0a: DUP4 00000d0b: PUSH1 0x40 00000d0d: MLOAD 00000d0e: DUP1 00000d0f: DUP3 00000d10: DUP2 00000d11: MSTORE 00000d12: PUSH1 0x20 00000d14: ADD 00000d15: SWAP2 00000d16: POP 00000d17: POP 00000d18: PUSH1 0x40 00000d1a: MLOAD 00000d1b: DUP1 00000d1c: SWAP2 00000d1d: SUB 00000d1e: SWAP1 00000d1f: LOG2 00000d20: PUSH1 0x01 00000d22: SWAP1 00000d23: POP 00000d24: JUMPDEST 00000d25: SWAP2 00000d26: SWAP1 00000d27: POP 00000d28: JUMP 00000d29: JUMPDEST 00000d2a: PUSH1 0x00 00000d2c: DUP2 00000d2d: PUSH1 0x06 00000d2f: PUSH1 0x00 00000d31: CALLER 00000d32: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d47: AND 00000d48: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d5d: AND 00000d5e: DUP2 00000d5f: MSTORE 00000d60: PUSH1 0x20 00000d62: ADD 00000d63: SWAP1 00000d64: DUP2 00000d65: MSTORE 00000d66: PUSH1 0x20 00000d68: ADD 00000d69: PUSH1 0x00 00000d6b: KECCAK256 00000d6c: SLOAD 00000d6d: LT 00000d6e: ISZERO 00000d6f: PUSH2 0x0d77 00000d72: JUMPI 00000d73: PUSH1 0x00 00000d75: DUP1 00000d76: REVERT 00000d77: JUMPDEST 00000d78: PUSH1 0x00 00000d7a: DUP3 00000d7b: GT 00000d7c: ISZERO 00000d7d: ISZERO 00000d7e: PUSH2 0x0d86 00000d81: JUMPI 00000d82: PUSH1 0x00 00000d84: DUP1 00000d85: REVERT 00000d86: JUMPDEST 00000d87: PUSH2 0x0dcf 00000d8a: PUSH1 0x06 00000d8c: PUSH1 0x00 00000d8e: CALLER 00000d8f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000da4: AND 00000da5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000dba: AND 00000dbb: DUP2 00000dbc: MSTORE 00000dbd: PUSH1 0x20 00000dbf: ADD 00000dc0: SWAP1 00000dc1: DUP2 00000dc2: MSTORE 00000dc3: PUSH1 0x20 00000dc5: ADD 00000dc6: PUSH1 0x00 00000dc8: KECCAK256 00000dc9: SLOAD 00000dca: DUP4 00000dcb: PUSH2 0x146a 00000dce: JUMP 00000dcf: JUMPDEST 00000dd0: PUSH1 0x06 00000dd2: PUSH1 0x00 00000dd4: CALLER 00000dd5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000dea: AND 00000deb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e00: AND 00000e01: DUP2 00000e02: MSTORE 00000e03: PUSH1 0x20 00000e05: ADD 00000e06: SWAP1 00000e07: DUP2 00000e08: MSTORE 00000e09: PUSH1 0x20 00000e0b: ADD 00000e0c: PUSH1 0x00 00000e0e: KECCAK256 00000e0f: DUP2 00000e10: SWAP1 00000e11: SSTORE 00000e12: POP 00000e13: PUSH2 0x0e5b 00000e16: PUSH1 0x05 00000e18: PUSH1 0x00 00000e1a: CALLER 00000e1b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e30: AND 00000e31: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e46: AND 00000e47: DUP2 00000e48: MSTORE 00000e49: PUSH1 0x20 00000e4b: ADD 00000e4c: SWAP1 00000e4d: DUP2 00000e4e: MSTORE 00000e4f: PUSH1 0x20 00000e51: ADD 00000e52: PUSH1 0x00 00000e54: KECCAK256 00000e55: SLOAD 00000e56: DUP4 00000e57: PUSH2 0x1484 00000e5a: JUMP 00000e5b: JUMPDEST 00000e5c: PUSH1 0x05 00000e5e: PUSH1 0x00 00000e60: CALLER 00000e61: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e76: AND 00000e77: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e8c: AND 00000e8d: DUP2 00000e8e: MSTORE 00000e8f: PUSH1 0x20 00000e91: ADD 00000e92: SWAP1 00000e93: DUP2 00000e94: MSTORE 00000e95: PUSH1 0x20 00000e97: ADD 00000e98: PUSH1 0x00 00000e9a: KECCAK256 00000e9b: DUP2 00000e9c: SWAP1 00000e9d: SSTORE 00000e9e: POP 00000e9f: CALLER 00000ea0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000eb5: AND 00000eb6: PUSH32 0x2cfce4af01bcb9d6cf6c84ee1b7c491100b8695368264146a94d71e10a63083f 00000ed7: DUP4 00000ed8: PUSH1 0x40 00000eda: MLOAD 00000edb: DUP1 00000edc: DUP3 00000edd: DUP2 00000ede: MSTORE 00000edf: PUSH1 0x20 00000ee1: ADD 00000ee2: SWAP2 00000ee3: POP 00000ee4: POP 00000ee5: PUSH1 0x40 00000ee7: MLOAD 00000ee8: DUP1 00000ee9: SWAP2 00000eea: SUB 00000eeb: SWAP1 00000eec: LOG2 00000eed: PUSH1 0x01 00000eef: SWAP1 00000ef0: POP 00000ef1: JUMPDEST 00000ef2: SWAP2 00000ef3: SWAP1 00000ef4: POP 00000ef5: JUMP 00000ef6: JUMPDEST 00000ef7: PUSH1 0x05 00000ef9: PUSH1 0x20 00000efb: MSTORE 00000efc: DUP1 00000efd: PUSH1 0x00 00000eff: MSTORE 00000f00: PUSH1 0x40 00000f02: PUSH1 0x00 00000f04: KECCAK256 00000f05: PUSH1 0x00 00000f07: SWAP2 00000f08: POP 00000f09: SWAP1 00000f0a: POP 00000f0b: SLOAD 00000f0c: DUP2 00000f0d: JUMP 00000f0e: JUMPDEST 00000f0f: PUSH1 0x04 00000f11: PUSH1 0x00 00000f13: SWAP1 00000f14: SLOAD 00000f15: SWAP1 00000f16: PUSH2 0x0100 00000f19: EXP 00000f1a: SWAP1 00000f1b: DIV 00000f1c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f31: AND 00000f32: DUP2 00000f33: JUMP 00000f34: JUMPDEST 00000f35: PUSH1 0x01 00000f37: DUP1 00000f38: SLOAD 00000f39: PUSH1 0x01 00000f3b: DUP2 00000f3c: PUSH1 0x01 00000f3e: AND 00000f3f: ISZERO 00000f40: PUSH2 0x0100 00000f43: MUL 00000f44: SUB 00000f45: AND 00000f46: PUSH1 0x02 00000f48: SWAP1 00000f49: DIV 00000f4a: DUP1 00000f4b: PUSH1 0x1f 00000f4d: ADD 00000f4e: PUSH1 0x20 00000f50: DUP1 00000f51: SWAP2 00000f52: DIV 00000f53: MUL 00000f54: PUSH1 0x20 00000f56: ADD 00000f57: PUSH1 0x40 00000f59: MLOAD 00000f5a: SWAP1 00000f5b: DUP2 00000f5c: ADD 00000f5d: PUSH1 0x40 00000f5f: MSTORE 00000f60: DUP1 00000f61: SWAP3 00000f62: SWAP2 00000f63: SWAP1 00000f64: DUP2 00000f65: DUP2 00000f66: MSTORE 00000f67: PUSH1 0x20 00000f69: ADD 00000f6a: DUP3 00000f6b: DUP1 00000f6c: SLOAD 00000f6d: PUSH1 0x01 00000f6f: DUP2 00000f70: PUSH1 0x01 00000f72: AND 00000f73: ISZERO 00000f74: PUSH2 0x0100 00000f77: MUL 00000f78: SUB 00000f79: AND 00000f7a: PUSH1 0x02 00000f7c: SWAP1 00000f7d: DIV 00000f7e: DUP1 00000f7f: ISZERO 00000f80: PUSH2 0x0fca 00000f83: JUMPI 00000f84: DUP1 00000f85: PUSH1 0x1f 00000f87: LT 00000f88: PUSH2 0x0f9f 00000f8b: JUMPI 00000f8c: PUSH2 0x0100 00000f8f: DUP1 00000f90: DUP4 00000f91: SLOAD 00000f92: DIV 00000f93: MUL 00000f94: DUP4 00000f95: MSTORE 00000f96: SWAP2 00000f97: PUSH1 0x20 00000f99: ADD 00000f9a: SWAP2 00000f9b: PUSH2 0x0fca 00000f9e: JUMP 00000f9f: JUMPDEST 00000fa0: DUP3 00000fa1: ADD 00000fa2: SWAP2 00000fa3: SWAP1 00000fa4: PUSH1 0x00 00000fa6: MSTORE 00000fa7: PUSH1 0x20 00000fa9: PUSH1 0x00 00000fab: KECCAK256 00000fac: SWAP1 00000fad: JUMPDEST 00000fae: DUP2 00000faf: SLOAD 00000fb0: DUP2 00000fb1: MSTORE 00000fb2: SWAP1 00000fb3: PUSH1 0x01 00000fb5: ADD 00000fb6: SWAP1 00000fb7: PUSH1 0x20 00000fb9: ADD 00000fba: DUP1 00000fbb: DUP4 00000fbc: GT 00000fbd: PUSH2 0x0fad 00000fc0: JUMPI 00000fc1: DUP3 00000fc2: SWAP1 00000fc3: SUB 00000fc4: PUSH1 0x1f 00000fc6: AND 00000fc7: DUP3 00000fc8: ADD 00000fc9: SWAP2 00000fca: JUMPDEST 00000fcb: POP 00000fcc: POP 00000fcd: POP 00000fce: POP 00000fcf: POP 00000fd0: DUP2 00000fd1: JUMP 00000fd2: JUMPDEST 00000fd3: PUSH1 0x00 00000fd5: DUP3 00000fd6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000feb: AND 00000fec: EQ 00000fed: ISZERO 00000fee: PUSH2 0x0ff6 00000ff1: JUMPI 00000ff2: PUSH1 0x00 00000ff4: DUP1 00000ff5: REVERT 00000ff6: JUMPDEST 00000ff7: PUSH1 0x00 00000ff9: DUP2 00000ffa: GT 00000ffb: ISZERO 00000ffc: ISZERO 00000ffd: PUSH2 0x1005 00001000: JUMPI 00001001: PUSH1 0x00 00001003: DUP1 00001004: REVERT 00001005: JUMPDEST 00001006: DUP1 00001007: PUSH1 0x05 00001009: PUSH1 0x00 0000100b: CALLER 0000100c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001021: AND 00001022: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001037: AND 00001038: DUP2 00001039: MSTORE 0000103a: PUSH1 0x20 0000103c: ADD 0000103d: SWAP1 0000103e: DUP2 0000103f: MSTORE 00001040: PUSH1 0x20 00001042: ADD 00001043: PUSH1 0x00 00001045: KECCAK256 00001046: SLOAD 00001047: LT 00001048: ISZERO 00001049: PUSH2 0x1051 0000104c: JUMPI 0000104d: PUSH1 0x00 0000104f: DUP1 00001050: REVERT 00001051: JUMPDEST 00001052: PUSH1 0x05 00001054: PUSH1 0x00 00001056: DUP4 00001057: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000106c: AND 0000106d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001082: AND 00001083: DUP2 00001084: MSTORE 00001085: PUSH1 0x20 00001087: ADD 00001088: SWAP1 00001089: DUP2 0000108a: MSTORE 0000108b: PUSH1 0x20 0000108d: ADD 0000108e: PUSH1 0x00 00001090: KECCAK256 00001091: SLOAD 00001092: DUP2 00001093: PUSH1 0x05 00001095: PUSH1 0x00 00001097: DUP6 00001098: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010ad: AND 000010ae: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010c3: AND 000010c4: DUP2 000010c5: MSTORE 000010c6: PUSH1 0x20 000010c8: ADD 000010c9: SWAP1 000010ca: DUP2 000010cb: MSTORE 000010cc: PUSH1 0x20 000010ce: ADD 000010cf: PUSH1 0x00 000010d1: KECCAK256 000010d2: SLOAD 000010d3: ADD 000010d4: LT 000010d5: ISZERO 000010d6: PUSH2 0x10de 000010d9: JUMPI 000010da: PUSH1 0x00 000010dc: DUP1 000010dd: REVERT 000010de: JUMPDEST 000010df: PUSH2 0x1127 000010e2: PUSH1 0x05 000010e4: PUSH1 0x00 000010e6: CALLER 000010e7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010fc: AND 000010fd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001112: AND 00001113: DUP2 00001114: MSTORE 00001115: PUSH1 0x20 00001117: ADD 00001118: SWAP1 00001119: DUP2 0000111a: MSTORE 0000111b: PUSH1 0x20 0000111d: ADD 0000111e: PUSH1 0x00 00001120: KECCAK256 00001121: SLOAD 00001122: DUP3 00001123: PUSH2 0x146a 00001126: JUMP 00001127: JUMPDEST 00001128: PUSH1 0x05 0000112a: PUSH1 0x00 0000112c: CALLER 0000112d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001142: AND 00001143: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001158: AND 00001159: DUP2 0000115a: MSTORE 0000115b: PUSH1 0x20 0000115d: ADD 0000115e: SWAP1 0000115f: DUP2 00001160: MSTORE 00001161: PUSH1 0x20 00001163: ADD 00001164: PUSH1 0x00 00001166: KECCAK256 00001167: DUP2 00001168: SWAP1 00001169: SSTORE 0000116a: POP 0000116b: PUSH2 0x11b3 0000116e: PUSH1 0x05 00001170: PUSH1 0x00 00001172: DUP5 00001173: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001188: AND 00001189: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000119e: AND 0000119f: DUP2 000011a0: MSTORE 000011a1: PUSH1 0x20 000011a3: ADD 000011a4: SWAP1 000011a5: DUP2 000011a6: MSTORE 000011a7: PUSH1 0x20 000011a9: ADD 000011aa: PUSH1 0x00 000011ac: KECCAK256 000011ad: SLOAD 000011ae: DUP3 000011af: PUSH2 0x1484 000011b2: JUMP 000011b3: JUMPDEST 000011b4: PUSH1 0x05 000011b6: PUSH1 0x00 000011b8: DUP5 000011b9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011ce: AND 000011cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011e4: AND 000011e5: DUP2 000011e6: MSTORE 000011e7: PUSH1 0x20 000011e9: ADD 000011ea: SWAP1 000011eb: DUP2 000011ec: MSTORE 000011ed: PUSH1 0x20 000011ef: ADD 000011f0: PUSH1 0x00 000011f2: KECCAK256 000011f3: DUP2 000011f4: SWAP1 000011f5: SSTORE 000011f6: POP 000011f7: DUP2 000011f8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000120d: AND 0000120e: CALLER 0000120f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001224: AND 00001225: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 00001246: DUP4 00001247: PUSH1 0x40 00001249: MLOAD 0000124a: DUP1 0000124b: DUP3 0000124c: DUP2 0000124d: MSTORE 0000124e: PUSH1 0x20 00001250: ADD 00001251: SWAP2 00001252: POP 00001253: POP 00001254: PUSH1 0x40 00001256: MLOAD 00001257: DUP1 00001258: SWAP2 00001259: SUB 0000125a: SWAP1 0000125b: LOG3 0000125c: JUMPDEST 0000125d: POP 0000125e: POP 0000125f: JUMP 00001260: JUMPDEST 00001261: PUSH1 0x06 00001263: PUSH1 0x20 00001265: MSTORE 00001266: DUP1 00001267: PUSH1 0x00 00001269: MSTORE 0000126a: PUSH1 0x40 0000126c: PUSH1 0x00 0000126e: KECCAK256 0000126f: PUSH1 0x00 00001271: SWAP2 00001272: POP 00001273: SWAP1 00001274: POP 00001275: SLOAD 00001276: DUP2 00001277: JUMP 00001278: JUMPDEST 00001279: PUSH1 0x00 0000127b: DUP2 0000127c: PUSH1 0x05 0000127e: PUSH1 0x00 00001280: CALLER 00001281: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001296: AND 00001297: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012ac: AND 000012ad: DUP2 000012ae: MSTORE 000012af: PUSH1 0x20 000012b1: ADD 000012b2: SWAP1 000012b3: DUP2 000012b4: MSTORE 000012b5: PUSH1 0x20 000012b7: ADD 000012b8: PUSH1 0x00 000012ba: KECCAK256 000012bb: SLOAD 000012bc: LT 000012bd: ISZERO 000012be: PUSH2 0x12c6 000012c1: JUMPI 000012c2: PUSH1 0x00 000012c4: DUP1 000012c5: REVERT 000012c6: JUMPDEST 000012c7: PUSH1 0x00 000012c9: DUP3 000012ca: GT 000012cb: ISZERO 000012cc: ISZERO 000012cd: PUSH2 0x12d5 000012d0: JUMPI 000012d1: PUSH1 0x00 000012d3: DUP1 000012d4: REVERT 000012d5: JUMPDEST 000012d6: PUSH2 0x131e 000012d9: PUSH1 0x05 000012db: PUSH1 0x00 000012dd: CALLER 000012de: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012f3: AND 000012f4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001309: AND 0000130a: DUP2 0000130b: MSTORE 0000130c: PUSH1 0x20 0000130e: ADD 0000130f: SWAP1 00001310: DUP2 00001311: MSTORE 00001312: PUSH1 0x20 00001314: ADD 00001315: PUSH1 0x00 00001317: KECCAK256 00001318: SLOAD 00001319: DUP4 0000131a: PUSH2 0x146a 0000131d: JUMP 0000131e: JUMPDEST 0000131f: PUSH1 0x05 00001321: PUSH1 0x00 00001323: CALLER 00001324: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001339: AND 0000133a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000134f: AND 00001350: DUP2 00001351: MSTORE 00001352: PUSH1 0x20 00001354: ADD 00001355: SWAP1 00001356: DUP2 00001357: MSTORE 00001358: PUSH1 0x20 0000135a: ADD 0000135b: PUSH1 0x00 0000135d: KECCAK256 0000135e: DUP2 0000135f: SWAP1 00001360: SSTORE 00001361: POP 00001362: PUSH2 0x13aa 00001365: PUSH1 0x06 00001367: PUSH1 0x00 00001369: CALLER 0000136a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000137f: AND 00001380: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001395: AND 00001396: DUP2 00001397: MSTORE 00001398: PUSH1 0x20 0000139a: ADD 0000139b: SWAP1 0000139c: DUP2 0000139d: MSTORE 0000139e: PUSH1 0x20 000013a0: ADD 000013a1: PUSH1 0x00 000013a3: KECCAK256 000013a4: SLOAD 000013a5: DUP4 000013a6: PUSH2 0x1484 000013a9: JUMP 000013aa: JUMPDEST 000013ab: PUSH1 0x06 000013ad: PUSH1 0x00 000013af: CALLER 000013b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013c5: AND 000013c6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013db: AND 000013dc: DUP2 000013dd: MSTORE 000013de: PUSH1 0x20 000013e0: ADD 000013e1: SWAP1 000013e2: DUP2 000013e3: MSTORE 000013e4: PUSH1 0x20 000013e6: ADD 000013e7: PUSH1 0x00 000013e9: KECCAK256 000013ea: DUP2 000013eb: SWAP1 000013ec: SSTORE 000013ed: POP 000013ee: CALLER 000013ef: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001404: AND 00001405: PUSH32 0xf97a274face0b5517365ad396b1fdba6f68bd3135ef603e44272adba3af5a1e0 00001426: DUP4 00001427: PUSH1 0x40 00001429: MLOAD 0000142a: DUP1 0000142b: DUP3 0000142c: DUP2 0000142d: MSTORE 0000142e: PUSH1 0x20 00001430: ADD 00001431: SWAP2 00001432: POP 00001433: POP 00001434: PUSH1 0x40 00001436: MLOAD 00001437: DUP1 00001438: SWAP2 00001439: SUB 0000143a: SWAP1 0000143b: LOG2 0000143c: PUSH1 0x01 0000143e: SWAP1 0000143f: POP 00001440: JUMPDEST 00001441: SWAP2 00001442: SWAP1 00001443: POP 00001444: JUMP 00001445: JUMPDEST 00001446: PUSH1 0x07 00001448: PUSH1 0x20 0000144a: MSTORE 0000144b: DUP2 0000144c: PUSH1 0x00 0000144e: MSTORE 0000144f: PUSH1 0x40 00001451: PUSH1 0x00 00001453: KECCAK256 00001454: PUSH1 0x20 00001456: MSTORE 00001457: DUP1 00001458: PUSH1 0x00 0000145a: MSTORE 0000145b: PUSH1 0x40 0000145d: PUSH1 0x00 0000145f: KECCAK256 00001460: PUSH1 0x00 00001462: SWAP2 00001463: POP 00001464: SWAP2 00001465: POP 00001466: POP 00001467: SLOAD 00001468: DUP2 00001469: JUMP 0000146a: JUMPDEST 0000146b: PUSH1 0x00 0000146d: PUSH2 0x1478 00001470: DUP4 00001471: DUP4 00001472: GT 00001473: ISZERO 00001474: PUSH2 0x14af 00001477: JUMP 00001478: JUMPDEST 00001479: DUP2 0000147a: DUP4 0000147b: SUB 0000147c: SWAP1 0000147d: POP 0000147e: JUMPDEST 0000147f: SWAP3 00001480: SWAP2 00001481: POP 00001482: POP 00001483: JUMP 00001484: JUMPDEST 00001485: PUSH1 0x00 00001487: DUP1 00001488: DUP3 00001489: DUP5 0000148a: ADD 0000148b: SWAP1 0000148c: POP 0000148d: PUSH2 0x14a4 00001490: DUP5 00001491: DUP3 00001492: LT 00001493: ISZERO 00001494: DUP1 00001495: ISZERO 00001496: PUSH2 0x149f 00001499: JUMPI 0000149a: POP 0000149b: DUP4 0000149c: DUP3 0000149d: LT 0000149e: ISZERO 0000149f: JUMPDEST 000014a0: PUSH2 0x14af 000014a3: JUMP 000014a4: JUMPDEST 000014a5: DUP1 000014a6: SWAP2 000014a7: POP 000014a8: JUMPDEST 000014a9: POP 000014aa: SWAP3 000014ab: SWAP2 000014ac: POP 000014ad: POP 000014ae: JUMP 000014af: JUMPDEST 000014b0: DUP1 000014b1: ISZERO 000014b2: ISZERO 000014b3: PUSH2 0x14bb 000014b6: JUMPI 000014b7: PUSH1 0x00 000014b9: DUP1 000014ba: REVERT 000014bb: JUMPDEST 000014bc: JUMPDEST 000014bd: POP 000014be: JUMP 000014bf: STOP 000014c0: LOG1 000014c1: PUSH6 0x627a7a723058 000014c8: KECCAK256 000014c9: ADDMOD 000014ca: UNKNOWN(0x27) 000014cb: CALLVALUE 000014cc: UNKNOWN(0xE0) 000014cd: MSTORE8 000014ce: SELFDESTRUCT 000014cf: UNKNOWN(0xBD) 000014d0: CALLCODE 000014d1: LOG3 000014d2: NOT 000014d3: MSTORE8 000014d4: SLOAD 000014d5: LOG3 000014d6: UNKNOWN(0x21) 000014d7: UNKNOWN(0x0D) 000014d8: SELFDESTRUCT 000014d9: CALLDATACOPY 000014da: UNKNOWN(0x23) 000014db: UNKNOWN(0xC2) 000014dc: CODECOPY 000014dd: LOG1 000014de: UNKNOWN(0xE7) 000014df: PUSH11 0xe3be0936f6aed31bee0029
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | cast | SELFDESTRUCT present | 85 | no | — |
viewevidence_json{
"notes": "selfdestruct can remove contract code and send funds; review reachability",
"selfdestruct_count": 2
}
|
| medium | other | detector | SELFDESTRUCT reachable | 45 | no | no |
viewtrace_id: 0x678a935c1882f86acd386ba7594f8e11432a394a017c95ddbd708427b1e36b38
validation_json{
"sink": "SELFDESTRUCT",
"errors": 0,
"status": "unknown",
"attempts": 32,
"trace_id": "0x678a935c1882f86acd386ba7594f8e11432a394a017c95ddbd708427b1e36b38",
"confirmed": false,
"trace_mode": "structLogs",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xffffffff",
"selector": "0xffffffff",
"calldata_variants": [
"0xffffffff",
"0xffffffff0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x095ea7b3",
"selector": "0x095ea7b3",
"calldata_variants": [
"0x095ea7b3",
"0x095ea7b30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3bed33ce",
"selector": "0x3bed33ce",
"calldata_variants": [
"0x3bed33ce",
"0x3bed33ce0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x42966c68",
"selector": "0x42966c68",
"calldata_variants": [
"0x42966c68",
"0x42966c680000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 2894,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"selfdestruct_count": 2
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0x19a10d8100e4840746ea3822d3f59e72215cd871112c388563474bb33645c258
call_targets:
0xb8c77482e45f1f44de1745f52c74426c631bdd52
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x19a10d8100e4840746ea3822d3f59e72215cd871112c388563474bb33645c258",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xb8c77482e45f1f44de1745f52c74426c631bdd52"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xffffffff",
"selector": "0xffffffff",
"calldata_variants": [
"0xffffffff",
"0xffffffff0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x095ea7b3",
"selector": "0x095ea7b3",
"calldata_variants": [
"0x095ea7b3",
"0x095ea7b30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3bed33ce",
"selector": "0x3bed33ce",
"calldata_variants": [
"0x3bed33ce",
"0x3bed33ce0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x42966c68",
"selector": "0x42966c68",
"calldata_variants": [
"0x42966c68",
"0x42966c680000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3010,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5328,
"opcode": "CALLCODE",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 2,
"guards_detected": [
{
"pc": 2894,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"untrusted_call_count": 2
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0x19a10d8100e4840746ea3822d3f59e72215cd871112c388563474bb33645c258
call_targets:
0xb8c77482e45f1f44de1745f52c74426c631bdd52
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x19a10d8100e4840746ea3822d3f59e72215cd871112c388563474bb33645c258",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xb8c77482e45f1f44de1745f52c74426c631bdd52"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xffffffff",
"selector": "0xffffffff",
"calldata_variants": [
"0xffffffff",
"0xffffffff0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x095ea7b3",
"selector": "0x095ea7b3",
"calldata_variants": [
"0x095ea7b3",
"0x095ea7b30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23b872dd",
"selector": "0x23b872dd",
"calldata_variants": [
"0x23b872dd",
"0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3bed33ce",
"selector": "0x3bed33ce",
"calldata_variants": [
"0x3bed33ce",
"0x3bed33ce0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x42966c68",
"selector": "0x42966c68",
"calldata_variants": [
"0x42966c68",
"0x42966c680000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3010,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5328,
"opcode": "CALLCODE",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 2,
"guards_detected": [
{
"pc": 2894,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
]
}
|
| low | auth | codex | ERC20 approve race allows double-spend of allowance | 65 | no | — |
viewevidence_json{
"evidence": "approve() overwrites allowance without zero-check, enabling the known ERC20 allowance race.",
"locations": [
"contracts/Contract.sol:93",
"contracts/Contract.sol:94",
"contracts/Contract.sol:97"
],
"recommendation": "Require allowance to be set to 0 before changing to a new non-zero value, or replace approve() with increaseAllowance/decreaseAllowance patterns.",
"exploit_scenario": "A token holder tries to change an allowance from 100 to 50. The spender can front-run the approve() with transferFrom for 100, then after the approve() succeeds still spend the new 50, effectively spending 150 in total."
}
|