c199db1d-4317-45d1-adb5-a775fe66025c
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 |
|---|---|---|---|---|
| 31653 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 95341 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 95342 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 95343 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 95344 | capability.graph | complete | 1 / 3 | 1 week ago |
| 95345 | detector.run | complete | 1 / 3 | 1 week ago |
| 95346 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:152518] OpenAI Codex v0.77.0 (research preview)
[codex:152518] --------
[codex:152518] workdir: /tmp/codex-multi-f_8wa29r
[codex:152518] model: gpt-5.2-codex
[codex:152518] provider: openai
[codex:152518] approval: never
[codex:152518] sandbox: read-only
[codex:152518] reasoning effort: xhigh
[codex:152518] reasoning summaries: auto
[codex:152518] session id: 019b8bf1-3ce7-7433-882d-39f438aef1cb
[codex:152518] --------
[codex:152518] user
[codex:152518] You are a profit-focused exploit hunter analyzing EVM bytecode. Your ONLY goal is finding ways to extract value (ETH, tokens, NFTs) from this contract.
[codex:152518]
[codex:152518] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:152518]
[codex:152518] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:152518] - Gas inefficiency, code quality, or best practices
[codex:152518] - Theoretical vulnerabilities without a clear extraction path
[codex:152518] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:152518] - Issues requiring social engineering or off-chain coordination
[codex:152518]
[codex:152518] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:152518] - CALL/DELEGATECALL with controllable destination or calldata
[codex:152518] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:152518] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:152518] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:152518] - External calls before state updates (reentrancy)
[codex:152518] - SELFDESTRUCT with controllable beneficiary
[codex:152518] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:152518]
[codex:152518] For each finding, you MUST explain:
[codex:152518] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:152518] 2. The concrete sequence of transactions to extract value
[codex:152518] 3. Why you believe this is exploitable (not just suspicious)
[codex:152518]
[codex:152518] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:152518] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:152518]
[codex:152518] Output MUST be valid JSON matching the provided schema.
[codex:152518] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:152518] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:152518] mcp startup: no servers
[codex:152518]
[codex:152518] thinking
[codex:152518] **Reading BYTECODE_BUNDLE.txt**
[codex:152518] exec
[codex:152518] /bin/bash -lc ls in /tmp/codex-multi-f_8wa29r succeeded in 5ms:
[codex:152518] BYTECODE_BUNDLE.txt
[codex:152518] codex-output-schema.json
[codex:152518] exec
[codex:152518] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-f_8wa29r succeeded in 5ms:
[codex:152518] Runtime bytecode bundle for best-effort auditing.
[codex:152518] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:152518]
[codex:152518] FILE: runtime_bytecode.hex
[codex:152518] 0x60606040523615610110576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806304ed00ac1461016d57806318fd89031461019657806322f3e2d4146101f957806356b4997f14610226578063570ca73514610249578063574022271461029e578063609c9c711461034d57806387c1ed12146103bd57806388ea41b9146103e05780638da5cb5b146104035780639619367d14610458578063a4de306b14610481578063a87783ba146104a7578063aaae0284146104bc578063ab6b1f68146104eb578063b139b032146106a6578063b3ab15fb146106bb578063d263b7eb146106f4578063e0176de814610709578063efd5913a14610732575b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561016b57600080fd5b005b341561017857600080fd5b610180610755565b6040518082815260200191505060405180910390f35b34156101a157600080fd5b6101df600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190505061075b565b604051808215151515815260200191505060405180910390f35b341561020457600080fd5b61020c6109a8565b604051808215151515815260200191505060405180910390f35b341561023157600080fd5b61024760048080359060200190919050506109bb565b005b341561025457600080fd5b61025c610a21565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102a957600080fd5b610333600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035906020019091905050610a47565b604051808215151515815260200191505060405180910390f35b6103bb600480803560ff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091908035906020019091908035906020019091905050610c9a565b005b34156103c857600080fd5b6103de6004808035906020019091905050611002565b005b34156103eb57600080fd5b610401600480803590602001909190505061117a565b005b341561040e57600080fd5b6104166111e0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561046357600080fd5b61046b611205565b6040518082815260200191505060405180910390f35b341561048c57600080fd5b6104a5600480803560ff1690602001909190505061120b565b005b34156104b257600080fd5b6104ba611285565b005b34156104c757600080fd5b6104cf6112fd565b604051808260ff1660ff16815260200191505060405180910390f35b34156104f657600080fd5b61052b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611310565b604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200187815260200180602001806020018681526020018581526020018415151515815260200183810383528881815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561060c5780601f106105e15761010080835404028352916020019161060c565b820191906000526020600020905b8154815290600101906020018083116105ef57829003601f168201915b505083810382528781815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561068f5780601f106106645761010080835404028352916020019161068f565b820191906000526020600020905b81548152906001019060200180831161067257829003601f168201915b50509a505050505050505050505060405180910390f35b34156106b157600080fd5b6106b9611390565b005b34156106c657600080fd5b6106f2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611409565b005b34156106ff57600080fd5b6107076114a8565b005b341561071457600080fd5b61071c61153d565b6040518082815260200191505060405180910390f35b341561073d57600080fd5b6107536004808035906020019091905050611543565b005b60045481565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107ba57600080fd5b84846000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020600001541480610882575060011515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060070160009054906101000a900460ff161515145b1561088c57600080fd5b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002092506020604051908101604052806000815250836004019080519060200190610906929190611703565b5084836005018190555061091a87866115a9565b60018360070160006101000a81548160ff02191690831515021790555082600601546004600082825403925050819055508673ffffffffffffffffffffffffffffffffffffffff16867f167f60e12ad331289e861c37279d2fdeda6dcfbeef21597c81762879de8fac66876040518082815260200191505060405180910390a3600193505050509392505050565b600160149054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a1757600080fd5b8060038190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610aa657600080fd5b86866000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020600001541480610b6e575060011515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060070160009054906101000a900460ff161515145b15610b7857600080fd5b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000898152602001908152602001600020925085836004019080519060200190610be2929190611703565b508487018360050181905550610bfc8984600501546115a9565b610c0a898460050154611655565b60018360070160006101000a81548160ff02191690831515021790555082600601546004600082825403925050819055508873ffffffffffffffffffffffffffffffffffffffff16887fb50460b1554461a9018f3e2240e902901793d4ff8a09cd2b4d560fff86217aba876040518082815260200191505060405180910390a36001935050505095945050505050565b610ca2611783565b600160149054906101000a900460ff161515610cbd57600080fd5b600254341015610ccc57600080fd5b81600354811115610cdc57600080fd5b8260008060006064600560009054906101000a900460ff1660ff163073ffffffffffffffffffffffffffffffffffffffff163102811515610d1957fe5b049250600454915083828403039050600081131515610d3757600080fd5b876000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000154141515610d9a57600080fd5b610100604051908101604052808a81526020013373ffffffffffffffffffffffffffffffffffffffff1681526020013481526020018b8152602001602060405190810160405280600081525081526020016000815260200189815260200160001515815250965086600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003019080519060200190610ec99291906117ed565b506080820151816004019080519060200190610ee69291906117ed565b5060a0820151816005015560c0820151816006015560e08201518160070160006101000a81548160ff0219169083151502179055509050503373ffffffffffffffffffffffffffffffffffffffff16897f4ead6f22ac4b1017882b5bb9f05325089a293747c0529c29df915e080ac3326d8d8d34604051808460ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015610fa9578082015181840152602081019050610f8e565b50505050905090810190601f168015610fd65780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a3876004600082825401925050819055505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561105d57600080fd5b6000600454823073ffffffffffffffffffffffffffffffffffffffff16310303131515611115577feaa8cb7c8218ecdd86fac0e3865d6681cec404c025161f64a01d66a8794ebe4d6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1611177565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561117657600080fd5b5b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111d657600080fd5b8060028190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561126757600080fd5b80600560006101000a81548160ff021916908360ff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112e157600080fd5b60018060146101000a81548160ff021916908315150217905550565b600560009054906101000a900460ff1681565b6006602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003019080600401908060050154908060060154908060070160009054906101000a900460ff16905088565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113ec57600080fd5b6000600160146101000a81548160ff021916908315150217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146457600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561150357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60035481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561159f57600080fd5b8060048190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561160557600080fd5b806000811115611650578273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561164f57600080fd5b5b505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116b157600080fd5b806000811115156116fe578273ffffffffffffffffffffffffffffffffffffffff166108fc60019081150290604051600060405180830381858888f1935050505015156116fd57600080fd5b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061174457805160ff1916838001178555611772565b82800160010185558215611772579182015b82811115611771578251825591602001919060010190611756565b5b50905061177f919061186d565b5090565b6101006040519081016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016117c3611892565b81526020016117d0611892565b815260200160008152602001600081526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061182e57805160ff191683800117855561185c565b8280016001018555821561185c579182015b8281111561185b578251825591602001919060010190611840565b5b509050611869919061186d565b5090565b61188f91905b8082111561188b576000816000905550600101611873565b5090565b90565b6020604051908101604052806000815250905600a165627a7a723058208a9f4458d940fb640e57bba853560d915d42e3a677f727a02d3aacc0aab22a120029
[codex:152518]
[codex:152518] thinking
[codex:152518] **Analyzing bytecode functions and security checks**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re, sys
[codex:152518] from pathlib import Path
[codex:152518]
[codex:152518] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:152518] # extract hex after 0x
[codex:152518] m = re.search(r'0x[0-9a-fA-F]+', hexdata)
[codex:152518] hexstr = m.group(0)[2:]
[codex:152518]
[codex:152518] # simple disassembler
[codex:152518] opnames = {i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] # fill opcodes
[codex:152518] opnames.update({0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR'})
[codex:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH'})
[codex:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST'})
[codex:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518]
[codex:152518] # push, dup, swap, log
[codex:152518] for i in range(1,33):
[codex:152518] opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17):
[codex:152518] opnames[0x7f+i]=f'DUP{i}'
[codex:152518] opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5):
[codex:152518] opnames[0xa0+i]=f'LOG{i}'
[codex:152518]
[codex:152518] code = bytes.fromhex(hexstr)
[codex:152518]
[codex:152518] # disassemble around CALL, DELEGATECALL, SELFDESTRUCT
[codex:152518] interesting = {0xf1,0xf4,0xff,0xf2}
[codex:152518]
[codex:152518] # build map of pc->(op, imm)
[codex:152518] ops = []
[codex:152518] pc=0
[codex:152518] while pc < len(code):
[codex:152518] op = code[pc]
[codex:152518] name = opnames.get(op, f'OP{op:02x}')
[codex:152518] imm = None
[codex:152518] pc0 = pc
[codex:152518] pc += 1
[codex:152518] if 0x60 <= op <= 0x7f: # PUSH
[codex:152518] n = op - 0x5f
[codex:152518] imm = code[pc:pc+n]
[codex:152518] pc += n
[codex:152518] ops.append((pc0, op, name, imm))
[codex:152518]
[codex:152518] # find function boundaries by JUMPDEST after JUMPI maybe? not needed
[codex:152518]
[codex:152518] print('CALL/DELEGATECALL/SELFDESTRUCT ops:')
[codex:152518] for pc,op,name,imm in ops:
[codex:152518] if op in interesting:
[codex:152518] # show previous few ops
[codex:152518] idx = next(i for i,v in enumerate(ops) if v[0]==pc)
[codex:152518] start = max(0, idx-10)
[codex:152518] context = ops[start:idx+1]
[codex:152518] print('--- pc', pc)
[codex:152518] for p,o,n,im in context:
[codex:152518] if im is None:
[codex:152518] print(f'{p:04x}: {n}')
[codex:152518] else:
[codex:152518] print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518]
[codex:152518] # also find SSTORE to low slots (0-10) maybe
[codex:152518] print('\\nSSTORE contexts for low slots (0-10):')
[codex:152518] low_slots=set(range(0,11))
[codex:152518] # naive: look for PUSH1 slot just before SSTORE with SWAP etc; we try to detect patterns
[codex:152518] for i,(pc,op,name,imm) in enumerate(ops):
[codex:152518] if op==0x55: # SSTORE
[codex:152518] # look back for immediate slot constant in last 5 ops
[codex:152518] const=None
[codex:152518] for j in range(1,6):
[codex:152518] if i-j<0: break
[codex:152518] p,o,n,im=ops[i-j]
[codex:152518] if o==0x60 and im is not None: # PUSH1
[codex:152518] const = im[0]
[codex:152518] break
[codex:152518] if const in low_slots:
[codex:152518] print('pc',hex(pc),'slot maybe',const)
[codex:152518]
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 41ms:
[codex:152518] CALL/DELEGATECALL/SELFDESTRUCT ops:
[codex:152518] --- pc 4454
[codex:152518] 115a: PUSH1 0x00
[codex:152518] 115c: PUSH1 0x40
[codex:152518] 115e: MLOAD
[codex:152518] 115f: DUP1
[codex:152518] 1160: DUP4
[codex:152518] 1161: SUB
[codex:152518] 1162: DUP2
[codex:152518] 1163: DUP6
[codex:152518] 1164: DUP9
[codex:152518] 1165: DUP9
[codex:152518] 1166: CALL
[codex:152518] --- pc 5436
[codex:152518] 1508: SLOAD
[codex:152518] 1509: SWAP1
[codex:152518] 150a: PUSH2 0x0100
[codex:152518] 150d: EXP
[codex:152518] 150e: SWAP1
[codex:152518] 150f: DIV
[codex:152518]
[codex:152518] thinking
[codex:152518] **Investigating CALL operations for vulnerabilities**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518]
[codex:152518] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:152518] import re
[codex:152518] m = re.search(r'0x[0-9a-fA-F]+', hexdata)
[codex:152518] code = bytes.fromhex(m.group(0)[2:])
[codex:152518]
[codex:152518] opnames = {i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR'})
[codex:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH'})
[codex:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST'})
[codex:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33):
[codex:152518] opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17):
[codex:152518] opnames[0x7f+i]=f'DUP{i}'
[codex:152518] opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5):
[codex:152518] opnames[0xa0+i]=f'LOG{i}'
[codex:152518]
[codex:152518] ops=[]
[codex:152518] pc=0
[codex:152518] while pc<len(code):
[codex:152518] op=code[pc]
[codex:152518] name=opnames.get(op,f'OP{op:02x}')
[codex:152518] imm=None
[codex:152518] pc0=pc
[codex:152518] pc+=1
[codex:152518] if 0x60<=op<=0x7f:
[codex:152518] n=op-0x5f
[codex:152518] imm=code[pc:pc+n]
[codex:152518] pc+=n
[codex:152518] ops.append((pc0,op,name,imm))
[codex:152518]
[codex:152518] # map pc->index
[codex:152518] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:152518]
[codex:152518] call_pcs=[pc for pc,op,_,_ in ops if op in (0xf1,0xf4,0xf2)]
[codex:152518] for pc in call_pcs:
[codex:152518] idx=pc_to_idx[pc]
[codex:152518] start=max(0, idx-25)
[codex:152518] end=min(len(ops), idx+5)
[codex:152518] print('\\n=== context for CALL at pc',hex(pc))
[codex:152518] for p,o,n,im in ops[start:end]:
[codex:152518] if im is None:
[codex:152518] print(f'{p:04x}: {n}')
[codex:152518] else:
[codex:152518] print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518]
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 32ms:
[codex:152518]
[codex:152518] === context for CALL at pc 0x1166
[codex:152518] 1120: SWAP1
[codex:152518] 1121: DIV
[codex:152518] 1122: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 1137: AND
[codex:152518] 1138: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 114d: AND
[codex:152518] 114e: PUSH2 0x08fc
[codex:152518] 1151: DUP3
[codex:152518] 1152: SWAP1
[codex:152518] 1153: DUP2
[codex:152518] 1154: ISZERO
[codex:152518] 1155: MUL
[codex:152518] 1156: SWAP1
[codex:152518] 1157: PUSH1 0x40
[codex:152518] 1159: MLOAD
[codex:152518] 115a: PUSH1 0x00
[codex:152518] 115c: PUSH1 0x40
[codex:152518] 115e: MLOAD
[codex:152518]
[codex:152518] thinking
[codex:152518] **Analyzing EVM call parameters and stack**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518]
[codex:152518] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:152518] code = bytes.fromhex(re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:])
[codex:152518]
[codex:152518] opnames = {i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR'})
[codex:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH'})
[codex:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST'})
[codex:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33):
[codex:152518] opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17):
[codex:152518] opnames[0x7f+i]=f'DUP{i}'
[codex:152518] opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5):
[codex:152518] opnames[0xa0+i]=f'LOG{i}'
[codex:152518]
[codex:152518] ops=[]
[codex:152518] pc=0
[codex:152518] while pc<len(code):
[codex:152518] op=code[pc]
[codex:152518] name=opnames.get(op,f'OP{op:02x}')
[codex:152518] imm=None
[codex:152518] pc0=pc
[codex:152518] pc+=1
[codex:152518] if 0x60<=op<=0x7f:
[codex:152518] n=op-0x5f
[codex:152518] imm=code[pc:pc+n]
[codex:152518] pc+=n
[codex:152518] ops.append((pc0,op,name,imm))
[codex:152518]
[codex:152518] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:152518]
[codex:152518] for target in [0x1166,0x163f,0x16ed]:
[codex:152518] idx=pc_to_idx[target]
[codex:152518] start=max(0, idx-60)
[codex:152518] end=min(len(ops), idx+10)
[codex:152518] print('\\n=== context for CALL at',hex(target))
[codex:152518] for p,o,n,im in ops[start:end]:
[codex:152518] if im is None:
[codex:152518] print(f'{p:04x}: {n}')
[codex:152518] else:
[codex:152518] print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518]
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 33ms:
[codex:152518]
[codex:152518] === context for CALL at 0x1166
[codex:152518] 10cd: DUP4
[codex:152518] 10ce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 10e3: AND
[codex:152518] 10e4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 10f9: AND
[codex:152518] 10fa: DUP2
[codex:152518] 10fb: MSTORE
[codex:152518] 10fc: PUSH1 0x20
[codex:152518] 10fe: ADD
[codex:152518] 10ff: DUP3
[codex:152518] 1100: DUP2
[codex:152518] 1101: MSTORE
[codex:152518] 1102: PUSH1 0x20
[codex:152518] 1104: ADD
[codex:152518] 1105: SWAP3
[codex:152518] 1106: POP
[codex:152518] 1107: POP
[codex:152518] 1108: POP
[codex:152518]
[codex:152518] thinking
[codex:152518] **Analyzing call and storage patterns**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518]
[codex:152518] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:152518] code = bytes.fromhex(re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:])
[codex:152518]
[codex:152518] opnames = {i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR'})
[codex:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH'})
[codex:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST'})
[codex:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33):
[codex:152518] opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17):
[codex:152518] opnames[0x7f+i]=f'DUP{i}'
[codex:152518] opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5):
[codex:152518] opnames[0xa0+i]=f'LOG{i}'
[codex:152518]
[codex:152518] ops=[]
[codex:152518] pc=0
[codex:152518] while pc<len(code):
[codex:152518] op=code[pc]
[codex:152518] name=opnames.get(op,f'OP{op:02x}')
[codex:152518] imm=None
[codex:152518] pc0=pc
[codex:152518] pc+=1
[codex:152518] if 0x60<=op<=0x7f:
[codex:152518] n=op-0x5f
[codex:152518] imm=code[pc:pc+n]
[codex:152518] pc+=n
[codex:152518] ops.append((pc0,op,name,imm))
[codex:152518]
[codex:152518] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:152518]
[codex:152518] sstore_pcs=[pc for pc,op,_,_ in ops if op==0x55]
[codex:152518] for target in [0x174c,0x1836]:
[codex:152518] if target not in pc_to_idx:
[codex:152518] print('missing',hex(target));
[codex:152518] continue
[codex:152518] idx=pc_to_idx[target]
[codex:152518] start=max(0, idx-40)
[codex:152518] end=min(len(ops), idx+6)
[codex:152518] print('\\n=== context for SSTORE at',hex(target))
[codex:152518] for p,o,n,im in ops[start:end]:
[codex:152518] if im is None:
[codex:152518] print(f'{p:04x}: {n}')
[codex:152518] else:
[codex:152518] print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518]
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 33ms:
[codex:152518]
[codex:152518] === context for SSTORE at 0x174c
[codex:152518] 1718: SWAP1
[codex:152518] 1719: PUSH1 0x00
[codex:152518] 171b: MSTORE
[codex:152518] 171c: PUSH1 0x20
[codex:152518] 171e: PUSH1 0x00
[codex:152518] 1720: SHA3
[codex:152518] 1721: SWAP1
[codex:152518] 1722: PUSH1 0x1f
[codex:152518] 1724: ADD
[codex:152518] 1725: PUSH1 0x20
[codex:152518] 1727: SWAP1
[codex:152518] 1728: DIV
[codex:152518] 1729: DUP2
[codex:152518] 172a: ADD
[codex:152518] 172b: SWAP3
[codex:152518] 172c: DUP3
[codex:152518] 172d: PUSH1 0x1f
[codex:152518] 172f: LT
[codex:152518]
[codex:152518] thinking
[codex:152518] **Analyzing SSTORE writes to slot0**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518]
[codex:152518] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:152518] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:152518]
[codex:152518] opnames={i: name for i,name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR'})
[codex:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH'})
[codex:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST'})
[codex:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33): opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17): opnames[0x7f+i]=f'DUP{i}'; opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5): opnames[0xa0+i]=f'LOG{i}'
[codex:152518]
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518] op=code[pc]; name=opnames.get(op,f'OP{op:02x}'); imm=None; pc0=pc; pc+=1
[codex:152518] if 0x60<=op<=0x7f:
[codex:152518] n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:152518] ops.append((pc0,op,name,imm))
[codex:152518]
[codex:152518] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:152518]
[codex:152518] for target in [0xe5c,0x1882]:
[codex:152518] if target not in pc_to_idx:
[codex:152518] print('missing',hex(target)); continue
[codex:152518] idx=pc_to_idx[target]
[codex:152518] start=max(0, idx-40); end=min(len(ops), idx+8)
[codex:152518] print('\\n=== context for SSTORE at',hex(target))
[codex:152518] for p,o,n,im in ops[start:end]:
[codex:152518] if im is None:
[codex:152518] print(f'{p:04x}: {n}')
[codex:152518] else:
[codex:152518] print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518]
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 33ms:
[codex:152518]
[codex:152518] === context for SSTORE at 0xe5c
[codex:152518] 0e01: POP
[codex:152518] 0e02: DUP7
[codex:152518] 0e03: PUSH1 0x06
[codex:152518] 0e05: PUSH1 0x00
[codex:152518] 0e07: CALLER
[codex:152518] 0e08: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 0e1d: AND
[codex:152518] 0e1e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 0e33: AND
[codex:152518] 0e34: DUP2
[codex:152518] 0e35: MSTORE
[codex:152518] 0e36: PUSH1 0x20
[codex:152518] 0e38: ADD
[codex:152518] 0e39: SWAP1
[codex:152518] 0e3a: DUP2
[codex:152518] 0e3b: MSTORE
[codex:152518] 0e3c: PUSH1 0x20
[codex:152518] 0e3e: ADD
[codex:152518]
[codex:152518] thinking
[codex:152518] **Analyzing storage and function ownership**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] hexdata = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:152518] code = bytes.fromhex(re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:])
[codex:152518]
[codex:152518] opnames = {i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR'})
[codex:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH'})
[codex:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST'})
[codex:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33): opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17): opnames[0x7f+i]=f'DUP{i}'; opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5): opnames[0xa0+i]=f'LOG{i}'
[codex:152518]
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518] op=code[pc]; name=opnames.get(op,f'OP{op:02x}'); imm=None; pc0=pc; pc+=1
[codex:152518] if 0x60<=op<=0x7f:
[codex:152518] n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:152518] ops.append((pc0,op,name,imm))
[codex:152518]
[codex:152518] # find jumpdest at 0x117a? Actually function body start 0x117a maybe pc.
[codex:152518] start=0x117a
[codex:152518] # print 80 ops from start
[codex:152518] for p,o,n,im in ops:
[codex:152518] if p<start: continue
[codex:152518] if p>start+120: break
[codex:152518] if im is None:
[codex:152518] print(f'{p:04x}: {n}')
[codex:152518] else:
[codex:152518] print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518]
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 30ms:
[codex:152518] 117a: JUMPDEST
[codex:152518] 117b: PUSH1 0x01
[codex:152518] 117d: PUSH1 0x00
[codex:152518] 117f: SWAP1
[codex:152518] 1180: SLOAD
[codex:152518] 1181: SWAP1
[codex:152518] 1182: PUSH2 0x0100
[codex:152518] 1185: EXP
[codex:152518] 1186: SWAP1
[codex:152518] 1187: DIV
[codex:152518] 1188: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 119d: AND
[codex:152518] 119e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 11b3: AND
[codex:152518] 11b4: CALLER
[codex:152518] 11b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 11ca: AND
[codex:152518] 11cb: EQ
[codex:152518] 11cc: ISZERO
[codex:152518] 11cd: ISZERO
[codex:152518]
[codex:152518] thinking
[codex:152518] **Analyzing owner and withdrawal checks**
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:152518] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:])
[codex:152518]
[codex:152518] opnames={i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR'})
[codex:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH'})
[codex:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST'})
[codex:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33): opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17): opnames[0x7f+i]=f'DUP{i}'; opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5): opnames[0xa0+i]=f'LOG{i}'
[codex:152518]
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518] op=code[pc]; name=opnames.get(op,f'OP{op:02x}'); imm=None; pc0=pc; pc+=1
[codex:152518] if 0x60<=op<=0x7f:
[codex:152518] n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:152518] ops.append((pc0,op,name,imm))
[codex:152518]
[codex:152518] # print from 0x0c9a to 0x1002
[codex:152518] start=0x0c9a; end=0x1002
[codex:152518] for p,o,n,im in ops:
[codex:152518] if p<start: continue
[codex:152518] if p>=end: break
[codex:152518] if im is None:
[codex:152518] print(f'{p:04x}: {n}')
[codex:152518] else:
[codex:152518] print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518]
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 31ms:
[codex:152518] 0c9a: JUMPDEST
[codex:152518] 0c9b: PUSH2 0x0ca2
[codex:152518] 0c9e: PUSH2 0x1783
[codex:152518] 0ca1: JUMP
[codex:152518] 0ca2: JUMPDEST
[codex:152518] 0ca3: PUSH1 0x01
[codex:152518] 0ca5: PUSH1 0x14
[codex:152518] 0ca7: SWAP1
[codex:152518] 0ca8: SLOAD
[codex:152518] 0ca9: SWAP1
[codex:152518] 0caa: PUSH2 0x0100
[codex:152518] 0cad: EXP
[codex:152518] 0cae: SWAP1
[codex:152518] 0caf: DIV
[codex:152518] 0cb0: PUSH1 0xff
[codex:152518] 0cb2: AND
[codex:152518] 0cb3: ISZERO
[codex:152518] 0cb4: ISZERO
[codex:152518] 0cb5: PUSH2 0x0cbd
[codex:152518] 0cb8: JUMPI
[codex:152518]
[codex:152518] thinking
[codex:152518] **Analyzing contract functions and permissions**
[codex:152518]
[codex:152518] I'm dissecting key contract functions, focusing on which are owner-only versus user-accessible. I’m checking for withdrawal or call operations that could allow unauthorized fund access, verifying if only the owner can modify critical mappings or trigger external calls, and seeing if any vulnerable signature recovery or reentrancy risks exist. So far, no direct exploit paths are apparent, but I’m continuing to map out call addresses and function selectors to be sure.
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:152518] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:152518]
[codex:152518] opnames={i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR'})
[codex:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH'})
[codex:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST'})
[codex:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33): opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17): opnames[0x7f+i]=f'DUP{i}'; opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5): opnames[0xa0+i]=f'LOG{i}'
[codex:152518]
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518] op=code[pc]; name=opnames.get(op,f'OP{op:02x}'); imm=None; pc0=pc; pc+=1
[codex:152518] if 0x60<=op<=0x7f:
[codex:152518] n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:152518] ops.append((pc0,op,name,imm))
[codex:152518]
[codex:152518] start=0x1500; end=0x1710
[codex:152518] for p,o,n,im in ops:
[codex:152518] if p<start: continue
[codex:152518] if p>=end: break
[codex:152518] if im is None:
[codex:152518] print(f'{p:04x}: {n}')
[codex:152518] else:
[codex:152518] print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518]
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 31ms:
[codex:152518] 1501: DUP1
[codex:152518] 1502: REVERT
[codex:152518] 1503: JUMPDEST
[codex:152518] 1504: PUSH1 0x00
[codex:152518] 1506: DUP1
[codex:152518] 1507: SWAP1
[codex:152518] 1508: SLOAD
[codex:152518] 1509: SWAP1
[codex:152518] 150a: PUSH2 0x0100
[codex:152518] 150d: EXP
[codex:152518] 150e: SWAP1
[codex:152518] 150f: DIV
[codex:152518] 1510: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 1525: AND
[codex:152518] 1526: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 153b: AND
[codex:152518] 153c: SELFDESTRUCT
[codex:152518] 153d: JUMPDEST
[codex:152518] 153e: PUSH1 0x03
[codex:152518] 1540: SLOAD
[codex:152518]
[codex:152518] thinking
[codex:152518] **Analyzing internal function authorization checks**
[codex:152518]
[codex:152518] I'm piecing together how internal functions at 0x15a9 and 0x1655 enforce caller authorization by comparing `msg.sender` to an address stored in slot1; this impacts which external functions can successfully invoke them depending on who owns or controls slot1. I'm double-checking the disassembly to clarify these permission dynamics and the relationships between owner, slot1, and function calls.
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:152518] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+', hexdata).group(0)[2:])
[codex:152518]
[codex:152518] opnames={i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR'})
[codex:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH'})
[codex:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST'})
[codex:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33): opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17): opnames[0x7f+i]=f'DUP{i}'; opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5): opnames[0xa0+i]=f'LOG{i}'
[codex:152518]
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518] op=code[pc]; name=opnames.get(op,f'OP{op:02x}'); imm=None; pc0=pc; pc+=1
[codex:152518] if 0x60<=op<=0x7f:
[codex:152518] n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:152518] ops.append((pc0,op,name,imm))
[codex:152518]
[codex:152518] start=0x075b; end=0x09a8
[codex:152518] for p,o,n,im in ops:
[codex:152518] if p<start: continue
[codex:152518] if p>=end: break
[codex:152518] if im is None:
[codex:152518] print(f'{p:04x}: {n}')
[codex:152518] else:
[codex:152518] print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518]
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 34ms:
[codex:152518] 075b: JUMPDEST
[codex:152518] 075c: PUSH1 0x00
[codex:152518] 075e: DUP1
[codex:152518] 075f: PUSH1 0x01
[codex:152518] 0761: PUSH1 0x00
[codex:152518] 0763: SWAP1
[codex:152518] 0764: SLOAD
[codex:152518] 0765: SWAP1
[codex:152518] 0766: PUSH2 0x0100
[codex:152518] 0769: EXP
[codex:152518] 076a: SWAP1
[codex:152518] 076b: DIV
[codex:152518] 076c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 0781: AND
[codex:152518] 0782: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 0797: AND
[codex:152518] 0798: CALLER
[codex:152518] 0799: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 07ae: AND
[codex:152518] 07af: EQ
[codex:152518]
[codex:152518] thinking
[codex:152518] **Analyzing privileged storage access and owner control**
[codex:152518]
[codex:152518] I'm examining how the contract restricts key functions to the address in slot1, a privileged operator set only by the owner at slot0. I want to verify if slot0 or slot1 could be overwritten via storage collision or unprotected methods, so I'm planning a simple symbolic stack tracking to find direct storage writes (SSTORE) to these slots to confirm owner control safety and detect potential attack vectors.
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:152518] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:152518]
[codex:152518] opnames={}
[codex:152518] for i in range(1,33): opnames[0x5f+i]=('PUSH',i)
[codex:152518] for i in range(1,17): opnames[0x7f+i]=('DUP',i)
[codex:152518] for i in range(1,17): opnames[0x8f+i]=('SWAP',i)
[codex:152518]
[codex:152518] # build op list
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518] op=code[pc]; pc0=pc; pc+=1; imm=None
[codex:152518] if 0x60<=op<=0x7f:
[codex:152518] n=op-0x5f; imm=int.from_bytes(code[pc:pc+n],'big'); pc+=n
[codex:152518] ops.append((pc0,op,imm))
[codex:152518]
[codex:152518] # simple stack constants tracking
[codex:152518] stack=[]
[codex:152518] const_stores=[]
[codex:152518] for pc,op,imm in ops:
[codex:152518] if op in opnames:
[codex:152518] kind,arg=opnames[op]
[codex:152518] if kind=='PUSH':
[codex:152518] stack.append(imm)
[codex:152518] elif kind=='DUP':
[codex:152518] if len(stack)>=arg:
[codex:152518] stack.append(stack[-arg])
[codex:152518] else:
[codex:152518] stack.append(None)
[codex:152518] elif kind=='SWAP':
[codex:152518] if len(stack)>arg:
[codex:152518] stack[-1],stack[-1-arg]=stack[-1-arg],stack[-1]
[codex:152518] else:
[codex:152518] if op==0x50: # POP
[codex:152518] if stack: stack.pop()
[codex:152518] elif op==0x54: # SLOAD
[codex:152518] # pop key, push unknown value
[codex:152518] if stack: stack.pop()
[codex:152518] stack.append(None)
[codex:152518] elif op==0x55: # SSTORE
[codex:152518] # pops key and value (value top?) Actually SSTORE: key, value (top is value). Stack top: value; below: key.
[codex:152518] if len(stack)>=2:
[codex:152518] value=stack.pop(); key=stack.pop()
[codex:152518] else:
[codex:152518] key=value=None
[codex:152518] if isinstance(key,int):
[codex:152518] const_stores.append((pc,key))
[codex:152518] elif op in (0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x20):
[codex:152518] # arithmetic/logical: pop operands push unknown or constant if possible
[codex:152518] # for simplicity, mark unknown
[codex:152518] # determine arity: most binary except ISZERO, NOT etc
[codex:152518] if op in (0x15,0x19): # ISZERO, NOT unary
[codex:152518] if stack: stack.pop()
[codex:152518] stack.append(None)
[codex:152518] elif op==0x1a: # BYTE
[codex:152518] if len(stack)>=2:
[codex:152518] stack.pop(); stack.pop(); stack.append(None)
[codex:152518] else:
[codex:152518] stack.clear(); stack.append(None)
[codex:152518] else:
[codex:152518] if len(stack)>=2:
[codex:152518] stack.pop(); stack.pop(); stack.append(None)
[codex:152518] else:
[codex:152518] stack.clear(); stack.append(None)
[codex:152518] elif op in (0x56,0x57,0x5b,0x58,0x59,0x5a,0xf1,0xf2,0xf4,0xf0,0xf5,0xf3,0xfd,0xfe):
[codex:152518] # control flow / calls: we won't simulate effects precisely
[codex:152518] if op in (0xf1,0xf2,0xf4):
[codex:152518] # CALL: pop 7 args push 1
[codex:152518] if len(stack)>=7:
[codex:152518] for _ in range(7): stack.pop()
[codex:152518] else:
[codex:152518] stack.clear()
[codex:152518] stack.append(None)
[codex:152518] elif op in (0x56,0x57):
[codex:152518] # JUMP/JUMPI pop destination (and condition)
[codex:152518] if op==0x56 and stack: stack.pop()
[codex:152518] if op==0x57:
[codex:152518] if len(stack)>=2:
[codex:152518] stack.pop(); stack.pop()
[codex:152518] elif stack: stack.pop();
[codex:152518] # unclear flow; reset stack
[codex:152518] # skip resetting to not lose all info
[codex:152518] elif op in (0xf3,0xfd):
[codex:152518] # RETURN/REVERT pop 2
[codex:152518] if len(stack)>=2:
[codex:152518] stack.pop(); stack.pop()
[codex:152518] else:
[codex:152518] stack.clear()
[codex:152518] else:
[codex:152518] pass
[codex:152518] elif op in (0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48):
[codex:152518] stack.append(None)
[codex:152518] elif 0xa0<=op<=0xa4:
[codex:152518] # LOG op: pop (2+topic count)
[codex:152518] topics=op-0xa0
[codex:152518] count=2+topics
[codex:152518] if len(stack)>=count:
[codex:152518] for _ in range(count): stack.pop()
[codex:152518] else:
[codex:152518] stack.clear()
[codex:152518] else:
[codex:152518] # unknown, reset stack to avoid false positives
[codex:152518] pass
[codex:152518]
[codex:152518] # show const stores
[codex:152518] print('Constant-key SSTOREs:')
[codex:152518] for pc,key in const_stores:
[codex:152518] if key<=20:
[codex:152518] print(hex(pc), 'slot', key)
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 31ms:
[codex:152518] Constant-key SSTOREs:
[codex:152518] 0x1882 slot 0
[codex:152518]
[codex:152518] thinking
[codex:152518] **Evaluating contract storage and access control**
[codex:152518]
[codex:152518] I’m analyzing contract storage writes and access control to see if unauthorized users can withdraw value. Although naive stack tracking shows only a constant write at slot0, manual checks show owner-only writes to several slots. I’m particularly focused on slot1 (operator) controlling payout calls and verifying if setting slot1 is properly restricted to prevent unauthorized payouts. Next, I’ll disassemble at 0x1409 to confirm owner-only access for the operator-setting function.
[codex:152518] exec
[codex:152518] /bin/bash -lc "python - <<'PY'
[codex:152518] import re
[codex:152518] from pathlib import Path
[codex:152518] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:152518] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:152518]
[codex:152518] opnames={i: name for i, name in enumerate(['STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND'])}
[codex:152518] opnames.update({0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR'})
[codex:152518] opnames.update({0x20:'SHA3'})
[codex:152518] opnames.update({0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH'})
[codex:152518] opnames.update({0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE'})
[codex:152518] opnames.update({0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST'})
[codex:152518] opnames.update({0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:152518] for i in range(1,33): opnames[0x5f+i]=f'PUSH{i}'
[codex:152518] for i in range(1,17): opnames[0x7f+i]=f'DUP{i}'; opnames[0x8f+i]=f'SWAP{i}'
[codex:152518] for i in range(0,5): opnames[0xa0+i]=f'LOG{i}'
[codex:152518]
[codex:152518] ops=[]; pc=0
[codex:152518] while pc<len(code):
[codex:152518] op=code[pc]; name=opnames.get(op,f'OP{op:02x}'); imm=None; pc0=pc; pc+=1
[codex:152518] if 0x60<=op<=0x7f:
[codex:152518] n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:152518] ops.append((pc0,op,name,imm))
[codex:152518]
[codex:152518] start=0x1390; end=0x1460
[codex:152518] for p,o,n,im in ops:
[codex:152518] if p<start: continue
[codex:152518] if p>=end: break
[codex:152518] if im is None:
[codex:152518] print(f'{p:04x}: {n}')
[codex:152518] else:
[codex:152518] print(f'{p:04x}: {n} 0x{im.hex()}')
[codex:152518]
[codex:152518] PY" in /tmp/codex-multi-f_8wa29r succeeded in 31ms:
[codex:152518] 1390: JUMPDEST
[codex:152518] 1391: PUSH1 0x01
[codex:152518] 1393: PUSH1 0x00
[codex:152518] 1395: SWAP1
[codex:152518] 1396: SLOAD
[codex:152518] 1397: SWAP1
[codex:152518] 1398: PUSH2 0x0100
[codex:152518] 139b: EXP
[codex:152518] 139c: SWAP1
[codex:152518] 139d: DIV
[codex:152518] 139e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 13b3: AND
[codex:152518] 13b4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 13c9: AND
[codex:152518] 13ca: CALLER
[codex:152518] 13cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:152518] 13e0: AND
[codex:152518] 13e1: EQ
[codex:152518] 13e2: ISZERO
[codex:152518] 13e3: ISZERO
[codex:152518]
[codex:152518] thinking
[codex:152518] **Verifying absence of exploitable CALLs**
[codex:152518] codex
[codex:152518] {"no_findings":true,"summary":"Reviewed BYTECODE_BUNDLE.txt end-to-end; all value-transferring CALL sites are gated by owner/privileged-address checks, and no controllable DELEGATECALL/SELFDESTRUCT paths or unprotected storage writes to admin slots are reachable by an attacker. No concrete, exploitable profit path identified from bytecode alone.","findings":[]}
[codex:152518] tokens used
[codex:152518] 80,386
[codex:152518] {"no_findings":true,"summary":"Reviewed BYTECODE_BUNDLE.txt end-to-end; all value-transferring CALL sites are gated by owner/privileged-address checks, and no controllable DELEGATECALL/SELFDESTRUCT paths or unprotected storage writes to admin slots are reachable by an attacker. No concrete, exploitable profit path identified from bytecode alone.","findings":[]}
{
"codex": {
"ran_at": "2026-01-05T02:23:13.126753+00:00",
"returncode": 0
},
"summary": "Reviewed BYTECODE_BUNDLE.txt end-to-end; all value-transferring CALL sites are gated by owner/privileged-address checks, and no controllable DELEGATECALL/SELFDESTRUCT paths or unprotected storage writes to admin slots are reachable by an attacker. No concrete, exploitable profit path identified from bytecode alone.",
"raw_final": {
"summary": "Reviewed BYTECODE_BUNDLE.txt end-to-end; all value-transferring CALL sites are gated by owner/privileged-address checks, and no controllable DELEGATECALL/SELFDESTRUCT paths or unprotected storage writes to admin slots are reachable by an attacker. No concrete, exploitable profit path identified from bytecode alone.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x0110 0000000a: JUMPI 0000000b: PUSH1 0x00 0000000d: CALLDATALOAD 0000000e: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000002c: SWAP1 0000002d: DIV 0000002e: PUSH4 0xffffffff 00000033: AND 00000034: DUP1 00000035: PUSH4 0x04ed00ac 0000003a: EQ 0000003b: PUSH2 0x016d 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0x18fd8903 00000045: EQ 00000046: PUSH2 0x0196 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0x22f3e2d4 00000050: EQ 00000051: PUSH2 0x01f9 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0x56b4997f 0000005b: EQ 0000005c: PUSH2 0x0226 0000005f: JUMPI 00000060: DUP1 00000061: PUSH4 0x570ca735 00000066: EQ 00000067: PUSH2 0x0249 0000006a: JUMPI 0000006b: DUP1 0000006c: PUSH4 0x57402227 00000071: EQ 00000072: PUSH2 0x029e 00000075: JUMPI 00000076: DUP1 00000077: PUSH4 0x609c9c71 0000007c: EQ 0000007d: PUSH2 0x034d 00000080: JUMPI 00000081: DUP1 00000082: PUSH4 0x87c1ed12 00000087: EQ 00000088: PUSH2 0x03bd 0000008b: JUMPI 0000008c: DUP1 0000008d: PUSH4 0x88ea41b9 00000092: EQ 00000093: PUSH2 0x03e0 00000096: JUMPI 00000097: DUP1 00000098: PUSH4 0x8da5cb5b 0000009d: EQ 0000009e: PUSH2 0x0403 000000a1: JUMPI 000000a2: DUP1 000000a3: PUSH4 0x9619367d 000000a8: EQ 000000a9: PUSH2 0x0458 000000ac: JUMPI 000000ad: DUP1 000000ae: PUSH4 0xa4de306b 000000b3: EQ 000000b4: PUSH2 0x0481 000000b7: JUMPI 000000b8: DUP1 000000b9: PUSH4 0xa87783ba 000000be: EQ 000000bf: PUSH2 0x04a7 000000c2: JUMPI 000000c3: DUP1 000000c4: PUSH4 0xaaae0284 000000c9: EQ 000000ca: PUSH2 0x04bc 000000cd: JUMPI 000000ce: DUP1 000000cf: PUSH4 0xab6b1f68 000000d4: EQ 000000d5: PUSH2 0x04eb 000000d8: JUMPI 000000d9: DUP1 000000da: PUSH4 0xb139b032 000000df: EQ 000000e0: PUSH2 0x06a6 000000e3: JUMPI 000000e4: DUP1 000000e5: PUSH4 0xb3ab15fb 000000ea: EQ 000000eb: PUSH2 0x06bb 000000ee: JUMPI 000000ef: DUP1 000000f0: PUSH4 0xd263b7eb 000000f5: EQ 000000f6: PUSH2 0x06f4 000000f9: JUMPI 000000fa: DUP1 000000fb: PUSH4 0xe0176de8 00000100: EQ 00000101: PUSH2 0x0709 00000104: JUMPI 00000105: DUP1 00000106: PUSH4 0xefd5913a 0000010b: EQ 0000010c: PUSH2 0x0732 0000010f: JUMPI 00000110: JUMPDEST 00000111: PUSH1 0x00 00000113: DUP1 00000114: SWAP1 00000115: SLOAD 00000116: SWAP1 00000117: PUSH2 0x0100 0000011a: EXP 0000011b: SWAP1 0000011c: DIV 0000011d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000132: AND 00000133: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000148: AND 00000149: CALLER 0000014a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000015f: AND 00000160: EQ 00000161: ISZERO 00000162: ISZERO 00000163: PUSH2 0x016b 00000166: JUMPI 00000167: PUSH1 0x00 00000169: DUP1 0000016a: REVERT 0000016b: JUMPDEST 0000016c: STOP 0000016d: JUMPDEST 0000016e: CALLVALUE 0000016f: ISZERO 00000170: PUSH2 0x0178 00000173: JUMPI 00000174: PUSH1 0x00 00000176: DUP1 00000177: REVERT 00000178: JUMPDEST 00000179: PUSH2 0x0180 0000017c: PUSH2 0x0755 0000017f: JUMP 00000180: JUMPDEST 00000181: PUSH1 0x40 00000183: MLOAD 00000184: DUP1 00000185: DUP3 00000186: DUP2 00000187: MSTORE 00000188: PUSH1 0x20 0000018a: ADD 0000018b: SWAP2 0000018c: POP 0000018d: POP 0000018e: PUSH1 0x40 00000190: MLOAD 00000191: DUP1 00000192: SWAP2 00000193: SUB 00000194: SWAP1 00000195: RETURN 00000196: JUMPDEST 00000197: CALLVALUE 00000198: ISZERO 00000199: PUSH2 0x01a1 0000019c: JUMPI 0000019d: PUSH1 0x00 0000019f: DUP1 000001a0: REVERT 000001a1: JUMPDEST 000001a2: PUSH2 0x01df 000001a5: PUSH1 0x04 000001a7: DUP1 000001a8: DUP1 000001a9: CALLDATALOAD 000001aa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001bf: AND 000001c0: SWAP1 000001c1: PUSH1 0x20 000001c3: ADD 000001c4: SWAP1 000001c5: SWAP2 000001c6: SWAP1 000001c7: DUP1 000001c8: CALLDATALOAD 000001c9: SWAP1 000001ca: PUSH1 0x20 000001cc: ADD 000001cd: SWAP1 000001ce: SWAP2 000001cf: SWAP1 000001d0: DUP1 000001d1: CALLDATALOAD 000001d2: SWAP1 000001d3: PUSH1 0x20 000001d5: ADD 000001d6: SWAP1 000001d7: SWAP2 000001d8: SWAP1 000001d9: POP 000001da: POP 000001db: PUSH2 0x075b 000001de: JUMP 000001df: JUMPDEST 000001e0: PUSH1 0x40 000001e2: MLOAD 000001e3: DUP1 000001e4: DUP3 000001e5: ISZERO 000001e6: ISZERO 000001e7: ISZERO 000001e8: ISZERO 000001e9: DUP2 000001ea: MSTORE 000001eb: PUSH1 0x20 000001ed: ADD 000001ee: SWAP2 000001ef: POP 000001f0: POP 000001f1: PUSH1 0x40 000001f3: MLOAD 000001f4: DUP1 000001f5: SWAP2 000001f6: SUB 000001f7: SWAP1 000001f8: RETURN 000001f9: JUMPDEST 000001fa: CALLVALUE 000001fb: ISZERO 000001fc: PUSH2 0x0204 000001ff: JUMPI 00000200: PUSH1 0x00 00000202: DUP1 00000203: REVERT 00000204: JUMPDEST 00000205: PUSH2 0x020c 00000208: PUSH2 0x09a8 0000020b: JUMP 0000020c: JUMPDEST 0000020d: PUSH1 0x40 0000020f: MLOAD 00000210: DUP1 00000211: DUP3 00000212: ISZERO 00000213: ISZERO 00000214: ISZERO 00000215: ISZERO 00000216: DUP2 00000217: MSTORE 00000218: PUSH1 0x20 0000021a: ADD 0000021b: SWAP2 0000021c: POP 0000021d: POP 0000021e: PUSH1 0x40 00000220: MLOAD 00000221: DUP1 00000222: SWAP2 00000223: SUB 00000224: SWAP1 00000225: RETURN 00000226: JUMPDEST 00000227: CALLVALUE 00000228: ISZERO 00000229: PUSH2 0x0231 0000022c: JUMPI 0000022d: PUSH1 0x00 0000022f: DUP1 00000230: REVERT 00000231: JUMPDEST 00000232: PUSH2 0x0247 00000235: PUSH1 0x04 00000237: DUP1 00000238: DUP1 00000239: CALLDATALOAD 0000023a: SWAP1 0000023b: PUSH1 0x20 0000023d: ADD 0000023e: SWAP1 0000023f: SWAP2 00000240: SWAP1 00000241: POP 00000242: POP 00000243: PUSH2 0x09bb 00000246: JUMP 00000247: JUMPDEST 00000248: STOP 00000249: JUMPDEST 0000024a: CALLVALUE 0000024b: ISZERO 0000024c: PUSH2 0x0254 0000024f: JUMPI 00000250: PUSH1 0x00 00000252: DUP1 00000253: REVERT 00000254: JUMPDEST 00000255: PUSH2 0x025c 00000258: PUSH2 0x0a21 0000025b: JUMP 0000025c: JUMPDEST 0000025d: PUSH1 0x40 0000025f: MLOAD 00000260: DUP1 00000261: DUP3 00000262: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000277: AND 00000278: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000028d: AND 0000028e: DUP2 0000028f: MSTORE 00000290: PUSH1 0x20 00000292: ADD 00000293: SWAP2 00000294: POP 00000295: POP 00000296: PUSH1 0x40 00000298: MLOAD 00000299: DUP1 0000029a: SWAP2 0000029b: SUB 0000029c: SWAP1 0000029d: RETURN 0000029e: JUMPDEST 0000029f: CALLVALUE 000002a0: ISZERO 000002a1: PUSH2 0x02a9 000002a4: JUMPI 000002a5: PUSH1 0x00 000002a7: DUP1 000002a8: REVERT 000002a9: JUMPDEST 000002aa: PUSH2 0x0333 000002ad: PUSH1 0x04 000002af: DUP1 000002b0: DUP1 000002b1: CALLDATALOAD 000002b2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002c7: AND 000002c8: SWAP1 000002c9: PUSH1 0x20 000002cb: ADD 000002cc: SWAP1 000002cd: SWAP2 000002ce: SWAP1 000002cf: DUP1 000002d0: CALLDATALOAD 000002d1: SWAP1 000002d2: PUSH1 0x20 000002d4: ADD 000002d5: SWAP1 000002d6: SWAP2 000002d7: SWAP1 000002d8: DUP1 000002d9: CALLDATALOAD 000002da: SWAP1 000002db: PUSH1 0x20 000002dd: ADD 000002de: SWAP1 000002df: SWAP2 000002e0: SWAP1 000002e1: DUP1 000002e2: CALLDATALOAD 000002e3: SWAP1 000002e4: PUSH1 0x20 000002e6: ADD 000002e7: SWAP1 000002e8: DUP3 000002e9: ADD 000002ea: DUP1 000002eb: CALLDATALOAD 000002ec: SWAP1 000002ed: PUSH1 0x20 000002ef: ADD 000002f0: SWAP1 000002f1: DUP1 000002f2: DUP1 000002f3: PUSH1 0x1f 000002f5: ADD 000002f6: PUSH1 0x20 000002f8: DUP1 000002f9: SWAP2 000002fa: DIV 000002fb: MUL 000002fc: PUSH1 0x20 000002fe: ADD 000002ff: PUSH1 0x40 00000301: MLOAD 00000302: SWAP1 00000303: DUP2 00000304: ADD 00000305: PUSH1 0x40 00000307: MSTORE 00000308: DUP1 00000309: SWAP4 0000030a: SWAP3 0000030b: SWAP2 0000030c: SWAP1 0000030d: DUP2 0000030e: DUP2 0000030f: MSTORE 00000310: PUSH1 0x20 00000312: ADD 00000313: DUP4 00000314: DUP4 00000315: DUP1 00000316: DUP3 00000317: DUP5 00000318: CALLDATACOPY 00000319: DUP3 0000031a: ADD 0000031b: SWAP2 0000031c: POP 0000031d: POP 0000031e: POP 0000031f: POP 00000320: POP 00000321: POP 00000322: SWAP2 00000323: SWAP1 00000324: DUP1 00000325: CALLDATALOAD 00000326: SWAP1 00000327: PUSH1 0x20 00000329: ADD 0000032a: SWAP1 0000032b: SWAP2 0000032c: SWAP1 0000032d: POP 0000032e: POP 0000032f: PUSH2 0x0a47 00000332: JUMP 00000333: JUMPDEST 00000334: PUSH1 0x40 00000336: MLOAD 00000337: DUP1 00000338: DUP3 00000339: ISZERO 0000033a: ISZERO 0000033b: ISZERO 0000033c: ISZERO 0000033d: DUP2 0000033e: MSTORE 0000033f: PUSH1 0x20 00000341: ADD 00000342: SWAP2 00000343: POP 00000344: POP 00000345: PUSH1 0x40 00000347: MLOAD 00000348: DUP1 00000349: SWAP2 0000034a: SUB 0000034b: SWAP1 0000034c: RETURN 0000034d: JUMPDEST 0000034e: PUSH2 0x03bb 00000351: PUSH1 0x04 00000353: DUP1 00000354: DUP1 00000355: CALLDATALOAD 00000356: PUSH1 0xff 00000358: AND 00000359: SWAP1 0000035a: PUSH1 0x20 0000035c: ADD 0000035d: SWAP1 0000035e: SWAP2 0000035f: SWAP1 00000360: DUP1 00000361: CALLDATALOAD 00000362: SWAP1 00000363: PUSH1 0x20 00000365: ADD 00000366: SWAP1 00000367: DUP3 00000368: ADD 00000369: DUP1 0000036a: CALLDATALOAD 0000036b: SWAP1 0000036c: PUSH1 0x20 0000036e: ADD 0000036f: SWAP1 00000370: DUP1 00000371: DUP1 00000372: PUSH1 0x1f 00000374: ADD 00000375: PUSH1 0x20 00000377: DUP1 00000378: SWAP2 00000379: DIV 0000037a: MUL 0000037b: PUSH1 0x20 0000037d: ADD 0000037e: PUSH1 0x40 00000380: MLOAD 00000381: SWAP1 00000382: DUP2 00000383: ADD 00000384: PUSH1 0x40 00000386: MSTORE 00000387: DUP1 00000388: SWAP4 00000389: SWAP3 0000038a: SWAP2 0000038b: SWAP1 0000038c: DUP2 0000038d: DUP2 0000038e: MSTORE 0000038f: PUSH1 0x20 00000391: ADD 00000392: DUP4 00000393: DUP4 00000394: DUP1 00000395: DUP3 00000396: DUP5 00000397: CALLDATACOPY 00000398: DUP3 00000399: ADD 0000039a: SWAP2 0000039b: POP 0000039c: POP 0000039d: POP 0000039e: POP 0000039f: POP 000003a0: POP 000003a1: SWAP2 000003a2: SWAP1 000003a3: DUP1 000003a4: CALLDATALOAD 000003a5: SWAP1 000003a6: PUSH1 0x20 000003a8: ADD 000003a9: SWAP1 000003aa: SWAP2 000003ab: SWAP1 000003ac: DUP1 000003ad: CALLDATALOAD 000003ae: SWAP1 000003af: PUSH1 0x20 000003b1: ADD 000003b2: SWAP1 000003b3: SWAP2 000003b4: SWAP1 000003b5: POP 000003b6: POP 000003b7: PUSH2 0x0c9a 000003ba: JUMP 000003bb: JUMPDEST 000003bc: STOP 000003bd: JUMPDEST 000003be: CALLVALUE 000003bf: ISZERO 000003c0: PUSH2 0x03c8 000003c3: JUMPI 000003c4: PUSH1 0x00 000003c6: DUP1 000003c7: REVERT 000003c8: JUMPDEST 000003c9: PUSH2 0x03de 000003cc: PUSH1 0x04 000003ce: DUP1 000003cf: DUP1 000003d0: CALLDATALOAD 000003d1: SWAP1 000003d2: PUSH1 0x20 000003d4: ADD 000003d5: SWAP1 000003d6: SWAP2 000003d7: SWAP1 000003d8: POP 000003d9: POP 000003da: PUSH2 0x1002 000003dd: JUMP 000003de: JUMPDEST 000003df: STOP 000003e0: JUMPDEST 000003e1: CALLVALUE 000003e2: ISZERO 000003e3: PUSH2 0x03eb 000003e6: JUMPI 000003e7: PUSH1 0x00 000003e9: DUP1 000003ea: REVERT 000003eb: JUMPDEST 000003ec: PUSH2 0x0401 000003ef: PUSH1 0x04 000003f1: DUP1 000003f2: DUP1 000003f3: CALLDATALOAD 000003f4: SWAP1 000003f5: PUSH1 0x20 000003f7: ADD 000003f8: SWAP1 000003f9: SWAP2 000003fa: SWAP1 000003fb: POP 000003fc: POP 000003fd: PUSH2 0x117a 00000400: JUMP 00000401: JUMPDEST 00000402: STOP 00000403: JUMPDEST 00000404: CALLVALUE 00000405: ISZERO 00000406: PUSH2 0x040e 00000409: JUMPI 0000040a: PUSH1 0x00 0000040c: DUP1 0000040d: REVERT 0000040e: JUMPDEST 0000040f: PUSH2 0x0416 00000412: PUSH2 0x11e0 00000415: JUMP 00000416: JUMPDEST 00000417: PUSH1 0x40 00000419: MLOAD 0000041a: DUP1 0000041b: DUP3 0000041c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000431: AND 00000432: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000447: AND 00000448: DUP2 00000449: MSTORE 0000044a: PUSH1 0x20 0000044c: ADD 0000044d: SWAP2 0000044e: POP 0000044f: POP 00000450: PUSH1 0x40 00000452: MLOAD 00000453: DUP1 00000454: SWAP2 00000455: SUB 00000456: SWAP1 00000457: RETURN 00000458: JUMPDEST 00000459: CALLVALUE 0000045a: ISZERO 0000045b: PUSH2 0x0463 0000045e: JUMPI 0000045f: PUSH1 0x00 00000461: DUP1 00000462: REVERT 00000463: JUMPDEST 00000464: PUSH2 0x046b 00000467: PUSH2 0x1205 0000046a: JUMP 0000046b: JUMPDEST 0000046c: PUSH1 0x40 0000046e: MLOAD 0000046f: DUP1 00000470: DUP3 00000471: DUP2 00000472: MSTORE 00000473: PUSH1 0x20 00000475: ADD 00000476: SWAP2 00000477: POP 00000478: POP 00000479: PUSH1 0x40 0000047b: MLOAD 0000047c: DUP1 0000047d: SWAP2 0000047e: SUB 0000047f: SWAP1 00000480: RETURN 00000481: JUMPDEST 00000482: CALLVALUE 00000483: ISZERO 00000484: PUSH2 0x048c 00000487: JUMPI 00000488: PUSH1 0x00 0000048a: DUP1 0000048b: REVERT 0000048c: JUMPDEST 0000048d: PUSH2 0x04a5 00000490: PUSH1 0x04 00000492: DUP1 00000493: DUP1 00000494: CALLDATALOAD 00000495: PUSH1 0xff 00000497: AND 00000498: SWAP1 00000499: PUSH1 0x20 0000049b: ADD 0000049c: SWAP1 0000049d: SWAP2 0000049e: SWAP1 0000049f: POP 000004a0: POP 000004a1: PUSH2 0x120b 000004a4: JUMP 000004a5: JUMPDEST 000004a6: STOP 000004a7: JUMPDEST 000004a8: CALLVALUE 000004a9: ISZERO 000004aa: PUSH2 0x04b2 000004ad: JUMPI 000004ae: PUSH1 0x00 000004b0: DUP1 000004b1: REVERT 000004b2: JUMPDEST 000004b3: PUSH2 0x04ba 000004b6: PUSH2 0x1285 000004b9: JUMP 000004ba: JUMPDEST 000004bb: STOP 000004bc: JUMPDEST 000004bd: CALLVALUE 000004be: ISZERO 000004bf: PUSH2 0x04c7 000004c2: JUMPI 000004c3: PUSH1 0x00 000004c5: DUP1 000004c6: REVERT 000004c7: JUMPDEST 000004c8: PUSH2 0x04cf 000004cb: PUSH2 0x12fd 000004ce: JUMP 000004cf: JUMPDEST 000004d0: PUSH1 0x40 000004d2: MLOAD 000004d3: DUP1 000004d4: DUP3 000004d5: PUSH1 0xff 000004d7: AND 000004d8: PUSH1 0xff 000004da: AND 000004db: DUP2 000004dc: MSTORE 000004dd: PUSH1 0x20 000004df: ADD 000004e0: SWAP2 000004e1: POP 000004e2: POP 000004e3: PUSH1 0x40 000004e5: MLOAD 000004e6: DUP1 000004e7: SWAP2 000004e8: SUB 000004e9: SWAP1 000004ea: RETURN 000004eb: JUMPDEST 000004ec: CALLVALUE 000004ed: ISZERO 000004ee: PUSH2 0x04f6 000004f1: JUMPI 000004f2: PUSH1 0x00 000004f4: DUP1 000004f5: REVERT 000004f6: JUMPDEST 000004f7: PUSH2 0x052b 000004fa: PUSH1 0x04 000004fc: DUP1 000004fd: DUP1 000004fe: CALLDATALOAD 000004ff: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000514: AND 00000515: SWAP1 00000516: PUSH1 0x20 00000518: ADD 00000519: SWAP1 0000051a: SWAP2 0000051b: SWAP1 0000051c: DUP1 0000051d: CALLDATALOAD 0000051e: SWAP1 0000051f: PUSH1 0x20 00000521: ADD 00000522: SWAP1 00000523: SWAP2 00000524: SWAP1 00000525: POP 00000526: POP 00000527: PUSH2 0x1310 0000052a: JUMP 0000052b: JUMPDEST 0000052c: PUSH1 0x40 0000052e: MLOAD 0000052f: DUP1 00000530: DUP10 00000531: DUP2 00000532: MSTORE 00000533: PUSH1 0x20 00000535: ADD 00000536: DUP9 00000537: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000054c: AND 0000054d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000562: AND 00000563: DUP2 00000564: MSTORE 00000565: PUSH1 0x20 00000567: ADD 00000568: DUP8 00000569: DUP2 0000056a: MSTORE 0000056b: PUSH1 0x20 0000056d: ADD 0000056e: DUP1 0000056f: PUSH1 0x20 00000571: ADD 00000572: DUP1 00000573: PUSH1 0x20 00000575: ADD 00000576: DUP7 00000577: DUP2 00000578: MSTORE 00000579: PUSH1 0x20 0000057b: ADD 0000057c: DUP6 0000057d: DUP2 0000057e: MSTORE 0000057f: PUSH1 0x20 00000581: ADD 00000582: DUP5 00000583: ISZERO 00000584: ISZERO 00000585: ISZERO 00000586: ISZERO 00000587: DUP2 00000588: MSTORE 00000589: PUSH1 0x20 0000058b: ADD 0000058c: DUP4 0000058d: DUP2 0000058e: SUB 0000058f: DUP4 00000590: MSTORE 00000591: DUP9 00000592: DUP2 00000593: DUP2 00000594: SLOAD 00000595: PUSH1 0x01 00000597: DUP2 00000598: PUSH1 0x01 0000059a: AND 0000059b: ISZERO 0000059c: PUSH2 0x0100 0000059f: MUL 000005a0: SUB 000005a1: AND 000005a2: PUSH1 0x02 000005a4: SWAP1 000005a5: DIV 000005a6: DUP2 000005a7: MSTORE 000005a8: PUSH1 0x20 000005aa: ADD 000005ab: SWAP2 000005ac: POP 000005ad: DUP1 000005ae: SLOAD 000005af: PUSH1 0x01 000005b1: DUP2 000005b2: PUSH1 0x01 000005b4: AND 000005b5: ISZERO 000005b6: PUSH2 0x0100 000005b9: MUL 000005ba: SUB 000005bb: AND 000005bc: PUSH1 0x02 000005be: SWAP1 000005bf: DIV 000005c0: DUP1 000005c1: ISZERO 000005c2: PUSH2 0x060c 000005c5: JUMPI 000005c6: DUP1 000005c7: PUSH1 0x1f 000005c9: LT 000005ca: PUSH2 0x05e1 000005cd: JUMPI 000005ce: PUSH2 0x0100 000005d1: DUP1 000005d2: DUP4 000005d3: SLOAD 000005d4: DIV 000005d5: MUL 000005d6: DUP4 000005d7: MSTORE 000005d8: SWAP2 000005d9: PUSH1 0x20 000005db: ADD 000005dc: SWAP2 000005dd: PUSH2 0x060c 000005e0: JUMP 000005e1: JUMPDEST 000005e2: DUP3 000005e3: ADD 000005e4: SWAP2 000005e5: SWAP1 000005e6: PUSH1 0x00 000005e8: MSTORE 000005e9: PUSH1 0x20 000005eb: PUSH1 0x00 000005ed: KECCAK256 000005ee: SWAP1 000005ef: JUMPDEST 000005f0: DUP2 000005f1: SLOAD 000005f2: DUP2 000005f3: MSTORE 000005f4: SWAP1 000005f5: PUSH1 0x01 000005f7: ADD 000005f8: SWAP1 000005f9: PUSH1 0x20 000005fb: ADD 000005fc: DUP1 000005fd: DUP4 000005fe: GT 000005ff: PUSH2 0x05ef 00000602: JUMPI 00000603: DUP3 00000604: SWAP1 00000605: SUB 00000606: PUSH1 0x1f 00000608: AND 00000609: DUP3 0000060a: ADD 0000060b: SWAP2 0000060c: JUMPDEST 0000060d: POP 0000060e: POP 0000060f: DUP4 00000610: DUP2 00000611: SUB 00000612: DUP3 00000613: MSTORE 00000614: DUP8 00000615: DUP2 00000616: DUP2 00000617: SLOAD 00000618: PUSH1 0x01 0000061a: DUP2 0000061b: PUSH1 0x01 0000061d: AND 0000061e: ISZERO 0000061f: PUSH2 0x0100 00000622: MUL 00000623: SUB 00000624: AND 00000625: PUSH1 0x02 00000627: SWAP1 00000628: DIV 00000629: DUP2 0000062a: MSTORE 0000062b: PUSH1 0x20 0000062d: ADD 0000062e: SWAP2 0000062f: POP 00000630: DUP1 00000631: SLOAD 00000632: PUSH1 0x01 00000634: DUP2 00000635: PUSH1 0x01 00000637: AND 00000638: ISZERO 00000639: PUSH2 0x0100 0000063c: MUL 0000063d: SUB 0000063e: AND 0000063f: PUSH1 0x02 00000641: SWAP1 00000642: DIV 00000643: DUP1 00000644: ISZERO 00000645: PUSH2 0x068f 00000648: JUMPI 00000649: DUP1 0000064a: PUSH1 0x1f 0000064c: LT 0000064d: PUSH2 0x0664 00000650: JUMPI 00000651: PUSH2 0x0100 00000654: DUP1 00000655: DUP4 00000656: SLOAD 00000657: DIV 00000658: MUL 00000659: DUP4 0000065a: MSTORE 0000065b: SWAP2 0000065c: PUSH1 0x20 0000065e: ADD 0000065f: SWAP2 00000660: PUSH2 0x068f 00000663: JUMP 00000664: JUMPDEST 00000665: DUP3 00000666: ADD 00000667: SWAP2 00000668: SWAP1 00000669: PUSH1 0x00 0000066b: MSTORE 0000066c: PUSH1 0x20 0000066e: PUSH1 0x00 00000670: KECCAK256 00000671: SWAP1 00000672: JUMPDEST 00000673: DUP2 00000674: SLOAD 00000675: DUP2 00000676: MSTORE 00000677: SWAP1 00000678: PUSH1 0x01 0000067a: ADD 0000067b: SWAP1 0000067c: PUSH1 0x20 0000067e: ADD 0000067f: DUP1 00000680: DUP4 00000681: GT 00000682: PUSH2 0x0672 00000685: JUMPI 00000686: DUP3 00000687: SWAP1 00000688: SUB 00000689: PUSH1 0x1f 0000068b: AND 0000068c: DUP3 0000068d: ADD 0000068e: SWAP2 0000068f: JUMPDEST 00000690: POP 00000691: POP 00000692: SWAP11 00000693: POP 00000694: POP 00000695: POP 00000696: POP 00000697: POP 00000698: POP 00000699: POP 0000069a: POP 0000069b: POP 0000069c: POP 0000069d: POP 0000069e: PUSH1 0x40 000006a0: MLOAD 000006a1: DUP1 000006a2: SWAP2 000006a3: SUB 000006a4: SWAP1 000006a5: RETURN 000006a6: JUMPDEST 000006a7: CALLVALUE 000006a8: ISZERO 000006a9: PUSH2 0x06b1 000006ac: JUMPI 000006ad: PUSH1 0x00 000006af: DUP1 000006b0: REVERT 000006b1: JUMPDEST 000006b2: PUSH2 0x06b9 000006b5: PUSH2 0x1390 000006b8: JUMP 000006b9: JUMPDEST 000006ba: STOP 000006bb: JUMPDEST 000006bc: CALLVALUE 000006bd: ISZERO 000006be: PUSH2 0x06c6 000006c1: JUMPI 000006c2: PUSH1 0x00 000006c4: DUP1 000006c5: REVERT 000006c6: JUMPDEST 000006c7: PUSH2 0x06f2 000006ca: PUSH1 0x04 000006cc: DUP1 000006cd: DUP1 000006ce: CALLDATALOAD 000006cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006e4: AND 000006e5: SWAP1 000006e6: PUSH1 0x20 000006e8: ADD 000006e9: SWAP1 000006ea: SWAP2 000006eb: SWAP1 000006ec: POP 000006ed: POP 000006ee: PUSH2 0x1409 000006f1: JUMP 000006f2: JUMPDEST 000006f3: STOP 000006f4: JUMPDEST 000006f5: CALLVALUE 000006f6: ISZERO 000006f7: PUSH2 0x06ff 000006fa: JUMPI 000006fb: PUSH1 0x00 000006fd: DUP1 000006fe: REVERT 000006ff: JUMPDEST 00000700: PUSH2 0x0707 00000703: PUSH2 0x14a8 00000706: JUMP 00000707: JUMPDEST 00000708: STOP 00000709: JUMPDEST 0000070a: CALLVALUE 0000070b: ISZERO 0000070c: PUSH2 0x0714 0000070f: JUMPI 00000710: PUSH1 0x00 00000712: DUP1 00000713: REVERT 00000714: JUMPDEST 00000715: PUSH2 0x071c 00000718: PUSH2 0x153d 0000071b: JUMP 0000071c: JUMPDEST 0000071d: PUSH1 0x40 0000071f: MLOAD 00000720: DUP1 00000721: DUP3 00000722: DUP2 00000723: MSTORE 00000724: PUSH1 0x20 00000726: ADD 00000727: SWAP2 00000728: POP 00000729: POP 0000072a: PUSH1 0x40 0000072c: MLOAD 0000072d: DUP1 0000072e: SWAP2 0000072f: SUB 00000730: SWAP1 00000731: RETURN 00000732: JUMPDEST 00000733: CALLVALUE 00000734: ISZERO 00000735: PUSH2 0x073d 00000738: JUMPI 00000739: PUSH1 0x00 0000073b: DUP1 0000073c: REVERT 0000073d: JUMPDEST 0000073e: PUSH2 0x0753 00000741: PUSH1 0x04 00000743: DUP1 00000744: DUP1 00000745: CALLDATALOAD 00000746: SWAP1 00000747: PUSH1 0x20 00000749: ADD 0000074a: SWAP1 0000074b: SWAP2 0000074c: SWAP1 0000074d: POP 0000074e: POP 0000074f: PUSH2 0x1543 00000752: JUMP 00000753: JUMPDEST 00000754: STOP 00000755: JUMPDEST 00000756: PUSH1 0x04 00000758: SLOAD 00000759: DUP2 0000075a: JUMP 0000075b: JUMPDEST 0000075c: PUSH1 0x00 0000075e: DUP1 0000075f: PUSH1 0x01 00000761: PUSH1 0x00 00000763: SWAP1 00000764: SLOAD 00000765: SWAP1 00000766: PUSH2 0x0100 00000769: EXP 0000076a: SWAP1 0000076b: DIV 0000076c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000781: AND 00000782: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000797: AND 00000798: CALLER 00000799: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007ae: AND 000007af: EQ 000007b0: ISZERO 000007b1: ISZERO 000007b2: PUSH2 0x07ba 000007b5: JUMPI 000007b6: PUSH1 0x00 000007b8: DUP1 000007b9: REVERT 000007ba: JUMPDEST 000007bb: DUP5 000007bc: DUP5 000007bd: PUSH1 0x00 000007bf: PUSH1 0x06 000007c1: PUSH1 0x00 000007c3: DUP5 000007c4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007d9: AND 000007da: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007ef: AND 000007f0: DUP2 000007f1: MSTORE 000007f2: PUSH1 0x20 000007f4: ADD 000007f5: SWAP1 000007f6: DUP2 000007f7: MSTORE 000007f8: PUSH1 0x20 000007fa: ADD 000007fb: PUSH1 0x00 000007fd: KECCAK256 000007fe: PUSH1 0x00 00000800: DUP4 00000801: DUP2 00000802: MSTORE 00000803: PUSH1 0x20 00000805: ADD 00000806: SWAP1 00000807: DUP2 00000808: MSTORE 00000809: PUSH1 0x20 0000080b: ADD 0000080c: PUSH1 0x00 0000080e: KECCAK256 0000080f: PUSH1 0x00 00000811: ADD 00000812: SLOAD 00000813: EQ 00000814: DUP1 00000815: PUSH2 0x0882 00000818: JUMPI 00000819: POP 0000081a: PUSH1 0x01 0000081c: ISZERO 0000081d: ISZERO 0000081e: PUSH1 0x06 00000820: PUSH1 0x00 00000822: DUP5 00000823: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000838: AND 00000839: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000084e: AND 0000084f: DUP2 00000850: MSTORE 00000851: PUSH1 0x20 00000853: ADD 00000854: SWAP1 00000855: DUP2 00000856: MSTORE 00000857: PUSH1 0x20 00000859: ADD 0000085a: PUSH1 0x00 0000085c: KECCAK256 0000085d: PUSH1 0x00 0000085f: DUP4 00000860: DUP2 00000861: MSTORE 00000862: PUSH1 0x20 00000864: ADD 00000865: SWAP1 00000866: DUP2 00000867: MSTORE 00000868: PUSH1 0x20 0000086a: ADD 0000086b: PUSH1 0x00 0000086d: KECCAK256 0000086e: PUSH1 0x07 00000870: ADD 00000871: PUSH1 0x00 00000873: SWAP1 00000874: SLOAD 00000875: SWAP1 00000876: PUSH2 0x0100 00000879: EXP 0000087a: SWAP1 0000087b: DIV 0000087c: PUSH1 0xff 0000087e: AND 0000087f: ISZERO 00000880: ISZERO 00000881: EQ 00000882: JUMPDEST 00000883: ISZERO 00000884: PUSH2 0x088c 00000887: JUMPI 00000888: PUSH1 0x00 0000088a: DUP1 0000088b: REVERT 0000088c: JUMPDEST 0000088d: PUSH1 0x06 0000088f: PUSH1 0x00 00000891: DUP9 00000892: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008a7: AND 000008a8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008bd: AND 000008be: DUP2 000008bf: MSTORE 000008c0: PUSH1 0x20 000008c2: ADD 000008c3: SWAP1 000008c4: DUP2 000008c5: MSTORE 000008c6: PUSH1 0x20 000008c8: ADD 000008c9: PUSH1 0x00 000008cb: KECCAK256 000008cc: PUSH1 0x00 000008ce: DUP8 000008cf: DUP2 000008d0: MSTORE 000008d1: PUSH1 0x20 000008d3: ADD 000008d4: SWAP1 000008d5: DUP2 000008d6: MSTORE 000008d7: PUSH1 0x20 000008d9: ADD 000008da: PUSH1 0x00 000008dc: KECCAK256 000008dd: SWAP3 000008de: POP 000008df: PUSH1 0x20 000008e1: PUSH1 0x40 000008e3: MLOAD 000008e4: SWAP1 000008e5: DUP2 000008e6: ADD 000008e7: PUSH1 0x40 000008e9: MSTORE 000008ea: DUP1 000008eb: PUSH1 0x00 000008ed: DUP2 000008ee: MSTORE 000008ef: POP 000008f0: DUP4 000008f1: PUSH1 0x04 000008f3: ADD 000008f4: SWAP1 000008f5: DUP1 000008f6: MLOAD 000008f7: SWAP1 000008f8: PUSH1 0x20 000008fa: ADD 000008fb: SWAP1 000008fc: PUSH2 0x0906 000008ff: SWAP3 00000900: SWAP2 00000901: SWAP1 00000902: PUSH2 0x1703 00000905: JUMP 00000906: JUMPDEST 00000907: POP 00000908: DUP5 00000909: DUP4 0000090a: PUSH1 0x05 0000090c: ADD 0000090d: DUP2 0000090e: SWAP1 0000090f: SSTORE 00000910: POP 00000911: PUSH2 0x091a 00000914: DUP8 00000915: DUP7 00000916: PUSH2 0x15a9 00000919: JUMP 0000091a: JUMPDEST 0000091b: PUSH1 0x01 0000091d: DUP4 0000091e: PUSH1 0x07 00000920: ADD 00000921: PUSH1 0x00 00000923: PUSH2 0x0100 00000926: EXP 00000927: DUP2 00000928: SLOAD 00000929: DUP2 0000092a: PUSH1 0xff 0000092c: MUL 0000092d: NOT 0000092e: AND 0000092f: SWAP1 00000930: DUP4 00000931: ISZERO 00000932: ISZERO 00000933: MUL 00000934: OR 00000935: SWAP1 00000936: SSTORE 00000937: POP 00000938: DUP3 00000939: PUSH1 0x06 0000093b: ADD 0000093c: SLOAD 0000093d: PUSH1 0x04 0000093f: PUSH1 0x00 00000941: DUP3 00000942: DUP3 00000943: SLOAD 00000944: SUB 00000945: SWAP3 00000946: POP 00000947: POP 00000948: DUP2 00000949: SWAP1 0000094a: SSTORE 0000094b: POP 0000094c: DUP7 0000094d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000962: AND 00000963: DUP7 00000964: PUSH32 0x167f60e12ad331289e861c37279d2fdeda6dcfbeef21597c81762879de8fac66 00000985: DUP8 00000986: PUSH1 0x40 00000988: MLOAD 00000989: DUP1 0000098a: DUP3 0000098b: DUP2 0000098c: MSTORE 0000098d: PUSH1 0x20 0000098f: ADD 00000990: SWAP2 00000991: POP 00000992: POP 00000993: PUSH1 0x40 00000995: MLOAD 00000996: DUP1 00000997: SWAP2 00000998: SUB 00000999: SWAP1 0000099a: LOG3 0000099b: PUSH1 0x01 0000099d: SWAP4 0000099e: POP 0000099f: POP 000009a0: POP 000009a1: POP 000009a2: SWAP4 000009a3: SWAP3 000009a4: POP 000009a5: POP 000009a6: POP 000009a7: JUMP 000009a8: JUMPDEST 000009a9: PUSH1 0x01 000009ab: PUSH1 0x14 000009ad: SWAP1 000009ae: SLOAD 000009af: SWAP1 000009b0: PUSH2 0x0100 000009b3: EXP 000009b4: SWAP1 000009b5: DIV 000009b6: PUSH1 0xff 000009b8: AND 000009b9: DUP2 000009ba: JUMP 000009bb: JUMPDEST 000009bc: PUSH1 0x01 000009be: PUSH1 0x00 000009c0: SWAP1 000009c1: SLOAD 000009c2: SWAP1 000009c3: PUSH2 0x0100 000009c6: EXP 000009c7: SWAP1 000009c8: DIV 000009c9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009de: AND 000009df: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009f4: AND 000009f5: CALLER 000009f6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a0b: AND 00000a0c: EQ 00000a0d: ISZERO 00000a0e: ISZERO 00000a0f: PUSH2 0x0a17 00000a12: JUMPI 00000a13: PUSH1 0x00 00000a15: DUP1 00000a16: REVERT 00000a17: JUMPDEST 00000a18: DUP1 00000a19: PUSH1 0x03 00000a1b: DUP2 00000a1c: SWAP1 00000a1d: SSTORE 00000a1e: POP 00000a1f: POP 00000a20: JUMP 00000a21: JUMPDEST 00000a22: PUSH1 0x01 00000a24: PUSH1 0x00 00000a26: SWAP1 00000a27: SLOAD 00000a28: SWAP1 00000a29: PUSH2 0x0100 00000a2c: EXP 00000a2d: SWAP1 00000a2e: DIV 00000a2f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a44: AND 00000a45: DUP2 00000a46: JUMP 00000a47: JUMPDEST 00000a48: PUSH1 0x00 00000a4a: DUP1 00000a4b: PUSH1 0x01 00000a4d: PUSH1 0x00 00000a4f: SWAP1 00000a50: SLOAD 00000a51: SWAP1 00000a52: PUSH2 0x0100 00000a55: EXP 00000a56: SWAP1 00000a57: DIV 00000a58: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a6d: AND 00000a6e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a83: AND 00000a84: CALLER 00000a85: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a9a: AND 00000a9b: EQ 00000a9c: ISZERO 00000a9d: ISZERO 00000a9e: PUSH2 0x0aa6 00000aa1: JUMPI 00000aa2: PUSH1 0x00 00000aa4: DUP1 00000aa5: REVERT 00000aa6: JUMPDEST 00000aa7: DUP7 00000aa8: DUP7 00000aa9: PUSH1 0x00 00000aab: PUSH1 0x06 00000aad: PUSH1 0x00 00000aaf: DUP5 00000ab0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ac5: AND 00000ac6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000adb: AND 00000adc: DUP2 00000add: MSTORE 00000ade: PUSH1 0x20 00000ae0: ADD 00000ae1: SWAP1 00000ae2: DUP2 00000ae3: MSTORE 00000ae4: PUSH1 0x20 00000ae6: ADD 00000ae7: PUSH1 0x00 00000ae9: KECCAK256 00000aea: PUSH1 0x00 00000aec: DUP4 00000aed: DUP2 00000aee: MSTORE 00000aef: PUSH1 0x20 00000af1: ADD 00000af2: SWAP1 00000af3: DUP2 00000af4: MSTORE 00000af5: PUSH1 0x20 00000af7: ADD 00000af8: PUSH1 0x00 00000afa: KECCAK256 00000afb: PUSH1 0x00 00000afd: ADD 00000afe: SLOAD 00000aff: EQ 00000b00: DUP1 00000b01: PUSH2 0x0b6e 00000b04: JUMPI 00000b05: POP 00000b06: PUSH1 0x01 00000b08: ISZERO 00000b09: ISZERO 00000b0a: PUSH1 0x06 00000b0c: PUSH1 0x00 00000b0e: DUP5 00000b0f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b24: AND 00000b25: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b3a: AND 00000b3b: DUP2 00000b3c: MSTORE 00000b3d: PUSH1 0x20 00000b3f: ADD 00000b40: SWAP1 00000b41: DUP2 00000b42: MSTORE 00000b43: PUSH1 0x20 00000b45: ADD 00000b46: PUSH1 0x00 00000b48: KECCAK256 00000b49: PUSH1 0x00 00000b4b: DUP4 00000b4c: DUP2 00000b4d: MSTORE 00000b4e: PUSH1 0x20 00000b50: ADD 00000b51: SWAP1 00000b52: DUP2 00000b53: MSTORE 00000b54: PUSH1 0x20 00000b56: ADD 00000b57: PUSH1 0x00 00000b59: KECCAK256 00000b5a: PUSH1 0x07 00000b5c: ADD 00000b5d: PUSH1 0x00 00000b5f: SWAP1 00000b60: SLOAD 00000b61: SWAP1 00000b62: PUSH2 0x0100 00000b65: EXP 00000b66: SWAP1 00000b67: DIV 00000b68: PUSH1 0xff 00000b6a: AND 00000b6b: ISZERO 00000b6c: ISZERO 00000b6d: EQ 00000b6e: JUMPDEST 00000b6f: ISZERO 00000b70: PUSH2 0x0b78 00000b73: JUMPI 00000b74: PUSH1 0x00 00000b76: DUP1 00000b77: REVERT 00000b78: JUMPDEST 00000b79: PUSH1 0x06 00000b7b: PUSH1 0x00 00000b7d: DUP11 00000b7e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b93: AND 00000b94: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ba9: AND 00000baa: DUP2 00000bab: MSTORE 00000bac: PUSH1 0x20 00000bae: ADD 00000baf: SWAP1 00000bb0: DUP2 00000bb1: MSTORE 00000bb2: PUSH1 0x20 00000bb4: ADD 00000bb5: PUSH1 0x00 00000bb7: KECCAK256 00000bb8: PUSH1 0x00 00000bba: DUP10 00000bbb: DUP2 00000bbc: MSTORE 00000bbd: PUSH1 0x20 00000bbf: ADD 00000bc0: SWAP1 00000bc1: DUP2 00000bc2: MSTORE 00000bc3: PUSH1 0x20 00000bc5: ADD 00000bc6: PUSH1 0x00 00000bc8: KECCAK256 00000bc9: SWAP3 00000bca: POP 00000bcb: DUP6 00000bcc: DUP4 00000bcd: PUSH1 0x04 00000bcf: ADD 00000bd0: SWAP1 00000bd1: DUP1 00000bd2: MLOAD 00000bd3: SWAP1 00000bd4: PUSH1 0x20 00000bd6: ADD 00000bd7: SWAP1 00000bd8: PUSH2 0x0be2 00000bdb: SWAP3 00000bdc: SWAP2 00000bdd: SWAP1 00000bde: PUSH2 0x1703 00000be1: JUMP 00000be2: JUMPDEST 00000be3: POP 00000be4: DUP5 00000be5: DUP8 00000be6: ADD 00000be7: DUP4 00000be8: PUSH1 0x05 00000bea: ADD 00000beb: DUP2 00000bec: SWAP1 00000bed: SSTORE 00000bee: POP 00000bef: PUSH2 0x0bfc 00000bf2: DUP10 00000bf3: DUP5 00000bf4: PUSH1 0x05 00000bf6: ADD 00000bf7: SLOAD 00000bf8: PUSH2 0x15a9 00000bfb: JUMP 00000bfc: JUMPDEST 00000bfd: PUSH2 0x0c0a 00000c00: DUP10 00000c01: DUP5 00000c02: PUSH1 0x05 00000c04: ADD 00000c05: SLOAD 00000c06: PUSH2 0x1655 00000c09: JUMP 00000c0a: JUMPDEST 00000c0b: PUSH1 0x01 00000c0d: DUP4 00000c0e: PUSH1 0x07 00000c10: ADD 00000c11: PUSH1 0x00 00000c13: PUSH2 0x0100 00000c16: EXP 00000c17: DUP2 00000c18: SLOAD 00000c19: DUP2 00000c1a: PUSH1 0xff 00000c1c: MUL 00000c1d: NOT 00000c1e: AND 00000c1f: SWAP1 00000c20: DUP4 00000c21: ISZERO 00000c22: ISZERO 00000c23: MUL 00000c24: OR 00000c25: SWAP1 00000c26: SSTORE 00000c27: POP 00000c28: DUP3 00000c29: PUSH1 0x06 00000c2b: ADD 00000c2c: SLOAD 00000c2d: PUSH1 0x04 00000c2f: PUSH1 0x00 00000c31: DUP3 00000c32: DUP3 00000c33: SLOAD 00000c34: SUB 00000c35: SWAP3 00000c36: POP 00000c37: POP 00000c38: DUP2 00000c39: SWAP1 00000c3a: SSTORE 00000c3b: POP 00000c3c: DUP9 00000c3d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c52: AND 00000c53: DUP9 00000c54: PUSH32 0xb50460b1554461a9018f3e2240e902901793d4ff8a09cd2b4d560fff86217aba 00000c75: DUP8 00000c76: PUSH1 0x40 00000c78: MLOAD 00000c79: DUP1 00000c7a: DUP3 00000c7b: DUP2 00000c7c: MSTORE 00000c7d: PUSH1 0x20 00000c7f: ADD 00000c80: SWAP2 00000c81: POP 00000c82: POP 00000c83: PUSH1 0x40 00000c85: MLOAD 00000c86: DUP1 00000c87: SWAP2 00000c88: SUB 00000c89: SWAP1 00000c8a: LOG3 00000c8b: PUSH1 0x01 00000c8d: SWAP4 00000c8e: POP 00000c8f: POP 00000c90: POP 00000c91: POP 00000c92: SWAP6 00000c93: SWAP5 00000c94: POP 00000c95: POP 00000c96: POP 00000c97: POP 00000c98: POP 00000c99: JUMP 00000c9a: JUMPDEST 00000c9b: PUSH2 0x0ca2 00000c9e: PUSH2 0x1783 00000ca1: JUMP 00000ca2: JUMPDEST 00000ca3: PUSH1 0x01 00000ca5: PUSH1 0x14 00000ca7: SWAP1 00000ca8: SLOAD 00000ca9: SWAP1 00000caa: PUSH2 0x0100 00000cad: EXP 00000cae: SWAP1 00000caf: DIV 00000cb0: PUSH1 0xff 00000cb2: AND 00000cb3: ISZERO 00000cb4: ISZERO 00000cb5: PUSH2 0x0cbd 00000cb8: JUMPI 00000cb9: PUSH1 0x00 00000cbb: DUP1 00000cbc: REVERT 00000cbd: JUMPDEST 00000cbe: PUSH1 0x02 00000cc0: SLOAD 00000cc1: CALLVALUE 00000cc2: LT 00000cc3: ISZERO 00000cc4: PUSH2 0x0ccc 00000cc7: JUMPI 00000cc8: PUSH1 0x00 00000cca: DUP1 00000ccb: REVERT 00000ccc: JUMPDEST 00000ccd: DUP2 00000cce: PUSH1 0x03 00000cd0: SLOAD 00000cd1: DUP2 00000cd2: GT 00000cd3: ISZERO 00000cd4: PUSH2 0x0cdc 00000cd7: JUMPI 00000cd8: PUSH1 0x00 00000cda: DUP1 00000cdb: REVERT 00000cdc: JUMPDEST 00000cdd: DUP3 00000cde: PUSH1 0x00 00000ce0: DUP1 00000ce1: PUSH1 0x00 00000ce3: PUSH1 0x64 00000ce5: PUSH1 0x05 00000ce7: PUSH1 0x00 00000ce9: SWAP1 00000cea: SLOAD 00000ceb: SWAP1 00000cec: PUSH2 0x0100 00000cef: EXP 00000cf0: SWAP1 00000cf1: DIV 00000cf2: PUSH1 0xff 00000cf4: AND 00000cf5: PUSH1 0xff 00000cf7: AND 00000cf8: ADDRESS 00000cf9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d0e: AND 00000d0f: BALANCE 00000d10: MUL 00000d11: DUP2 00000d12: ISZERO 00000d13: ISZERO 00000d14: PUSH2 0x0d19 00000d17: JUMPI 00000d18: INVALID 00000d19: JUMPDEST 00000d1a: DIV 00000d1b: SWAP3 00000d1c: POP 00000d1d: PUSH1 0x04 00000d1f: SLOAD 00000d20: SWAP2 00000d21: POP 00000d22: DUP4 00000d23: DUP3 00000d24: DUP5 00000d25: SUB 00000d26: SUB 00000d27: SWAP1 00000d28: POP 00000d29: PUSH1 0x00 00000d2b: DUP2 00000d2c: SGT 00000d2d: ISZERO 00000d2e: ISZERO 00000d2f: PUSH2 0x0d37 00000d32: JUMPI 00000d33: PUSH1 0x00 00000d35: DUP1 00000d36: REVERT 00000d37: JUMPDEST 00000d38: DUP8 00000d39: PUSH1 0x00 00000d3b: PUSH1 0x06 00000d3d: PUSH1 0x00 00000d3f: CALLER 00000d40: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d55: AND 00000d56: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d6b: AND 00000d6c: DUP2 00000d6d: MSTORE 00000d6e: PUSH1 0x20 00000d70: ADD 00000d71: SWAP1 00000d72: DUP2 00000d73: MSTORE 00000d74: PUSH1 0x20 00000d76: ADD 00000d77: PUSH1 0x00 00000d79: KECCAK256 00000d7a: PUSH1 0x00 00000d7c: DUP4 00000d7d: DUP2 00000d7e: MSTORE 00000d7f: PUSH1 0x20 00000d81: ADD 00000d82: SWAP1 00000d83: DUP2 00000d84: MSTORE 00000d85: PUSH1 0x20 00000d87: ADD 00000d88: PUSH1 0x00 00000d8a: KECCAK256 00000d8b: PUSH1 0x00 00000d8d: ADD 00000d8e: SLOAD 00000d8f: EQ 00000d90: ISZERO 00000d91: ISZERO 00000d92: PUSH2 0x0d9a 00000d95: JUMPI 00000d96: PUSH1 0x00 00000d98: DUP1 00000d99: REVERT 00000d9a: JUMPDEST 00000d9b: PUSH2 0x0100 00000d9e: PUSH1 0x40 00000da0: MLOAD 00000da1: SWAP1 00000da2: DUP2 00000da3: ADD 00000da4: PUSH1 0x40 00000da6: MSTORE 00000da7: DUP1 00000da8: DUP11 00000da9: DUP2 00000daa: MSTORE 00000dab: PUSH1 0x20 00000dad: ADD 00000dae: CALLER 00000daf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000dc4: AND 00000dc5: DUP2 00000dc6: MSTORE 00000dc7: PUSH1 0x20 00000dc9: ADD 00000dca: CALLVALUE 00000dcb: DUP2 00000dcc: MSTORE 00000dcd: PUSH1 0x20 00000dcf: ADD 00000dd0: DUP12 00000dd1: DUP2 00000dd2: MSTORE 00000dd3: PUSH1 0x20 00000dd5: ADD 00000dd6: PUSH1 0x20 00000dd8: PUSH1 0x40 00000dda: MLOAD 00000ddb: SWAP1 00000ddc: DUP2 00000ddd: ADD 00000dde: PUSH1 0x40 00000de0: MSTORE 00000de1: DUP1 00000de2: PUSH1 0x00 00000de4: DUP2 00000de5: MSTORE 00000de6: POP 00000de7: DUP2 00000de8: MSTORE 00000de9: PUSH1 0x20 00000deb: ADD 00000dec: PUSH1 0x00 00000dee: DUP2 00000def: MSTORE 00000df0: PUSH1 0x20 00000df2: ADD 00000df3: DUP10 00000df4: DUP2 00000df5: MSTORE 00000df6: PUSH1 0x20 00000df8: ADD 00000df9: PUSH1 0x00 00000dfb: ISZERO 00000dfc: ISZERO 00000dfd: DUP2 00000dfe: MSTORE 00000dff: POP 00000e00: SWAP7 00000e01: POP 00000e02: DUP7 00000e03: PUSH1 0x06 00000e05: PUSH1 0x00 00000e07: CALLER 00000e08: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e1d: AND 00000e1e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e33: AND 00000e34: DUP2 00000e35: MSTORE 00000e36: PUSH1 0x20 00000e38: ADD 00000e39: SWAP1 00000e3a: DUP2 00000e3b: MSTORE 00000e3c: PUSH1 0x20 00000e3e: ADD 00000e3f: PUSH1 0x00 00000e41: KECCAK256 00000e42: PUSH1 0x00 00000e44: DUP12 00000e45: DUP2 00000e46: MSTORE 00000e47: PUSH1 0x20 00000e49: ADD 00000e4a: SWAP1 00000e4b: DUP2 00000e4c: MSTORE 00000e4d: PUSH1 0x20 00000e4f: ADD 00000e50: PUSH1 0x00 00000e52: KECCAK256 00000e53: PUSH1 0x00 00000e55: DUP3 00000e56: ADD 00000e57: MLOAD 00000e58: DUP2 00000e59: PUSH1 0x00 00000e5b: ADD 00000e5c: SSTORE 00000e5d: PUSH1 0x20 00000e5f: DUP3 00000e60: ADD 00000e61: MLOAD 00000e62: DUP2 00000e63: PUSH1 0x01 00000e65: ADD 00000e66: PUSH1 0x00 00000e68: PUSH2 0x0100 00000e6b: EXP 00000e6c: DUP2 00000e6d: SLOAD 00000e6e: DUP2 00000e6f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e84: MUL 00000e85: NOT 00000e86: AND 00000e87: SWAP1 00000e88: DUP4 00000e89: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e9e: AND 00000e9f: MUL 00000ea0: OR 00000ea1: SWAP1 00000ea2: SSTORE 00000ea3: POP 00000ea4: PUSH1 0x40 00000ea6: DUP3 00000ea7: ADD 00000ea8: MLOAD 00000ea9: DUP2 00000eaa: PUSH1 0x02 00000eac: ADD 00000ead: SSTORE 00000eae: PUSH1 0x60 00000eb0: DUP3 00000eb1: ADD 00000eb2: MLOAD 00000eb3: DUP2 00000eb4: PUSH1 0x03 00000eb6: ADD 00000eb7: SWAP1 00000eb8: DUP1 00000eb9: MLOAD 00000eba: SWAP1 00000ebb: PUSH1 0x20 00000ebd: ADD 00000ebe: SWAP1 00000ebf: PUSH2 0x0ec9 00000ec2: SWAP3 00000ec3: SWAP2 00000ec4: SWAP1 00000ec5: PUSH2 0x17ed 00000ec8: JUMP 00000ec9: JUMPDEST 00000eca: POP 00000ecb: PUSH1 0x80 00000ecd: DUP3 00000ece: ADD 00000ecf: MLOAD 00000ed0: DUP2 00000ed1: PUSH1 0x04 00000ed3: ADD 00000ed4: SWAP1 00000ed5: DUP1 00000ed6: MLOAD 00000ed7: SWAP1 00000ed8: PUSH1 0x20 00000eda: ADD 00000edb: SWAP1 00000edc: PUSH2 0x0ee6 00000edf: SWAP3 00000ee0: SWAP2 00000ee1: SWAP1 00000ee2: PUSH2 0x17ed 00000ee5: JUMP 00000ee6: JUMPDEST 00000ee7: POP 00000ee8: PUSH1 0xa0 00000eea: DUP3 00000eeb: ADD 00000eec: MLOAD 00000eed: DUP2 00000eee: PUSH1 0x05 00000ef0: ADD 00000ef1: SSTORE 00000ef2: PUSH1 0xc0 00000ef4: DUP3 00000ef5: ADD 00000ef6: MLOAD 00000ef7: DUP2 00000ef8: PUSH1 0x06 00000efa: ADD 00000efb: SSTORE 00000efc: PUSH1 0xe0 00000efe: DUP3 00000eff: ADD 00000f00: MLOAD 00000f01: DUP2 00000f02: PUSH1 0x07 00000f04: ADD 00000f05: PUSH1 0x00 00000f07: PUSH2 0x0100 00000f0a: EXP 00000f0b: DUP2 00000f0c: SLOAD 00000f0d: DUP2 00000f0e: PUSH1 0xff 00000f10: MUL 00000f11: NOT 00000f12: AND 00000f13: SWAP1 00000f14: DUP4 00000f15: ISZERO 00000f16: ISZERO 00000f17: MUL 00000f18: OR 00000f19: SWAP1 00000f1a: SSTORE 00000f1b: POP 00000f1c: SWAP1 00000f1d: POP 00000f1e: POP 00000f1f: CALLER 00000f20: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f35: AND 00000f36: DUP10 00000f37: PUSH32 0x4ead6f22ac4b1017882b5bb9f05325089a293747c0529c29df915e080ac3326d 00000f58: DUP14 00000f59: DUP14 00000f5a: CALLVALUE 00000f5b: PUSH1 0x40 00000f5d: MLOAD 00000f5e: DUP1 00000f5f: DUP5 00000f60: PUSH1 0xff 00000f62: AND 00000f63: DUP2 00000f64: MSTORE 00000f65: PUSH1 0x20 00000f67: ADD 00000f68: DUP1 00000f69: PUSH1 0x20 00000f6b: ADD 00000f6c: DUP4 00000f6d: DUP2 00000f6e: MSTORE 00000f6f: PUSH1 0x20 00000f71: ADD 00000f72: DUP3 00000f73: DUP2 00000f74: SUB 00000f75: DUP3 00000f76: MSTORE 00000f77: DUP5 00000f78: DUP2 00000f79: DUP2 00000f7a: MLOAD 00000f7b: DUP2 00000f7c: MSTORE 00000f7d: PUSH1 0x20 00000f7f: ADD 00000f80: SWAP2 00000f81: POP 00000f82: DUP1 00000f83: MLOAD 00000f84: SWAP1 00000f85: PUSH1 0x20 00000f87: ADD 00000f88: SWAP1 00000f89: DUP1 00000f8a: DUP4 00000f8b: DUP4 00000f8c: PUSH1 0x00 00000f8e: JUMPDEST 00000f8f: DUP4 00000f90: DUP2 00000f91: LT 00000f92: ISZERO 00000f93: PUSH2 0x0fa9 00000f96: JUMPI 00000f97: DUP1 00000f98: DUP3 00000f99: ADD 00000f9a: MLOAD 00000f9b: DUP2 00000f9c: DUP5 00000f9d: ADD 00000f9e: MSTORE 00000f9f: PUSH1 0x20 00000fa1: DUP2 00000fa2: ADD 00000fa3: SWAP1 00000fa4: POP 00000fa5: PUSH2 0x0f8e 00000fa8: JUMP 00000fa9: JUMPDEST 00000faa: POP 00000fab: POP 00000fac: POP 00000fad: POP 00000fae: SWAP1 00000faf: POP 00000fb0: SWAP1 00000fb1: DUP2 00000fb2: ADD 00000fb3: SWAP1 00000fb4: PUSH1 0x1f 00000fb6: AND 00000fb7: DUP1 00000fb8: ISZERO 00000fb9: PUSH2 0x0fd6 00000fbc: JUMPI 00000fbd: DUP1 00000fbe: DUP3 00000fbf: SUB 00000fc0: DUP1 00000fc1: MLOAD 00000fc2: PUSH1 0x01 00000fc4: DUP4 00000fc5: PUSH1 0x20 00000fc7: SUB 00000fc8: PUSH2 0x0100 00000fcb: EXP 00000fcc: SUB 00000fcd: NOT 00000fce: AND 00000fcf: DUP2 00000fd0: MSTORE 00000fd1: PUSH1 0x20 00000fd3: ADD 00000fd4: SWAP2 00000fd5: POP 00000fd6: JUMPDEST 00000fd7: POP 00000fd8: SWAP5 00000fd9: POP 00000fda: POP 00000fdb: POP 00000fdc: POP 00000fdd: POP 00000fde: PUSH1 0x40 00000fe0: MLOAD 00000fe1: DUP1 00000fe2: SWAP2 00000fe3: SUB 00000fe4: SWAP1 00000fe5: LOG3 00000fe6: DUP8 00000fe7: PUSH1 0x04 00000fe9: PUSH1 0x00 00000feb: DUP3 00000fec: DUP3 00000fed: SLOAD 00000fee: ADD 00000fef: SWAP3 00000ff0: POP 00000ff1: POP 00000ff2: DUP2 00000ff3: SWAP1 00000ff4: SSTORE 00000ff5: POP 00000ff6: POP 00000ff7: POP 00000ff8: POP 00000ff9: POP 00000ffa: POP 00000ffb: POP 00000ffc: POP 00000ffd: POP 00000ffe: POP 00000fff: POP 00001000: POP 00001001: JUMP 00001002: JUMPDEST 00001003: PUSH1 0x00 00001005: DUP1 00001006: SWAP1 00001007: SLOAD 00001008: SWAP1 00001009: PUSH2 0x0100 0000100c: EXP 0000100d: SWAP1 0000100e: DIV 0000100f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001024: AND 00001025: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000103a: AND 0000103b: CALLER 0000103c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001051: AND 00001052: EQ 00001053: ISZERO 00001054: ISZERO 00001055: PUSH2 0x105d 00001058: JUMPI 00001059: PUSH1 0x00 0000105b: DUP1 0000105c: REVERT 0000105d: JUMPDEST 0000105e: PUSH1 0x00 00001060: PUSH1 0x04 00001062: SLOAD 00001063: DUP3 00001064: ADDRESS 00001065: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000107a: AND 0000107b: BALANCE 0000107c: SUB 0000107d: SUB 0000107e: SGT 0000107f: ISZERO 00001080: ISZERO 00001081: PUSH2 0x1115 00001084: JUMPI 00001085: PUSH32 0xeaa8cb7c8218ecdd86fac0e3865d6681cec404c025161f64a01d66a8794ebe4d 000010a6: PUSH1 0x00 000010a8: DUP1 000010a9: SWAP1 000010aa: SLOAD 000010ab: SWAP1 000010ac: PUSH2 0x0100 000010af: EXP 000010b0: SWAP1 000010b1: DIV 000010b2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010c7: AND 000010c8: DUP3 000010c9: PUSH1 0x40 000010cb: MLOAD 000010cc: DUP1 000010cd: DUP4 000010ce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010e3: AND 000010e4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010f9: AND 000010fa: DUP2 000010fb: MSTORE 000010fc: PUSH1 0x20 000010fe: ADD 000010ff: DUP3 00001100: DUP2 00001101: MSTORE 00001102: PUSH1 0x20 00001104: ADD 00001105: SWAP3 00001106: POP 00001107: POP 00001108: POP 00001109: PUSH1 0x40 0000110b: MLOAD 0000110c: DUP1 0000110d: SWAP2 0000110e: SUB 0000110f: SWAP1 00001110: LOG1 00001111: PUSH2 0x1177 00001114: JUMP 00001115: JUMPDEST 00001116: PUSH1 0x00 00001118: DUP1 00001119: SWAP1 0000111a: SLOAD 0000111b: SWAP1 0000111c: PUSH2 0x0100 0000111f: EXP 00001120: SWAP1 00001121: DIV 00001122: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001137: AND 00001138: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000114d: AND 0000114e: PUSH2 0x08fc 00001151: DUP3 00001152: SWAP1 00001153: DUP2 00001154: ISZERO 00001155: MUL 00001156: SWAP1 00001157: PUSH1 0x40 00001159: MLOAD 0000115a: PUSH1 0x00 0000115c: PUSH1 0x40 0000115e: MLOAD 0000115f: DUP1 00001160: DUP4 00001161: SUB 00001162: DUP2 00001163: DUP6 00001164: DUP9 00001165: DUP9 00001166: CALL 00001167: SWAP4 00001168: POP 00001169: POP 0000116a: POP 0000116b: POP 0000116c: ISZERO 0000116d: ISZERO 0000116e: PUSH2 0x1176 00001171: JUMPI 00001172: PUSH1 0x00 00001174: DUP1 00001175: REVERT 00001176: JUMPDEST 00001177: JUMPDEST 00001178: POP 00001179: JUMP 0000117a: JUMPDEST 0000117b: PUSH1 0x01 0000117d: PUSH1 0x00 0000117f: SWAP1 00001180: SLOAD 00001181: SWAP1 00001182: PUSH2 0x0100 00001185: EXP 00001186: SWAP1 00001187: DIV 00001188: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000119d: AND 0000119e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011b3: AND 000011b4: CALLER 000011b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011ca: AND 000011cb: EQ 000011cc: ISZERO 000011cd: ISZERO 000011ce: PUSH2 0x11d6 000011d1: JUMPI 000011d2: PUSH1 0x00 000011d4: DUP1 000011d5: REVERT 000011d6: JUMPDEST 000011d7: DUP1 000011d8: PUSH1 0x02 000011da: DUP2 000011db: SWAP1 000011dc: SSTORE 000011dd: POP 000011de: POP 000011df: JUMP 000011e0: JUMPDEST 000011e1: PUSH1 0x00 000011e3: DUP1 000011e4: SWAP1 000011e5: SLOAD 000011e6: SWAP1 000011e7: PUSH2 0x0100 000011ea: EXP 000011eb: SWAP1 000011ec: DIV 000011ed: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001202: AND 00001203: DUP2 00001204: JUMP 00001205: JUMPDEST 00001206: PUSH1 0x02 00001208: SLOAD 00001209: DUP2 0000120a: JUMP 0000120b: JUMPDEST 0000120c: PUSH1 0x01 0000120e: PUSH1 0x00 00001210: SWAP1 00001211: SLOAD 00001212: SWAP1 00001213: PUSH2 0x0100 00001216: EXP 00001217: SWAP1 00001218: DIV 00001219: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000122e: AND 0000122f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001244: AND 00001245: CALLER 00001246: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000125b: AND 0000125c: EQ 0000125d: ISZERO 0000125e: ISZERO 0000125f: PUSH2 0x1267 00001262: JUMPI 00001263: PUSH1 0x00 00001265: DUP1 00001266: REVERT 00001267: JUMPDEST 00001268: DUP1 00001269: PUSH1 0x05 0000126b: PUSH1 0x00 0000126d: PUSH2 0x0100 00001270: EXP 00001271: DUP2 00001272: SLOAD 00001273: DUP2 00001274: PUSH1 0xff 00001276: MUL 00001277: NOT 00001278: AND 00001279: SWAP1 0000127a: DUP4 0000127b: PUSH1 0xff 0000127d: AND 0000127e: MUL 0000127f: OR 00001280: SWAP1 00001281: SSTORE 00001282: POP 00001283: POP 00001284: JUMP 00001285: JUMPDEST 00001286: PUSH1 0x01 00001288: PUSH1 0x00 0000128a: SWAP1 0000128b: SLOAD 0000128c: SWAP1 0000128d: PUSH2 0x0100 00001290: EXP 00001291: SWAP1 00001292: DIV 00001293: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012a8: AND 000012a9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012be: AND 000012bf: CALLER 000012c0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012d5: AND 000012d6: EQ 000012d7: ISZERO 000012d8: ISZERO 000012d9: PUSH2 0x12e1 000012dc: JUMPI 000012dd: PUSH1 0x00 000012df: DUP1 000012e0: REVERT 000012e1: JUMPDEST 000012e2: PUSH1 0x01 000012e4: DUP1 000012e5: PUSH1 0x14 000012e7: PUSH2 0x0100 000012ea: EXP 000012eb: DUP2 000012ec: SLOAD 000012ed: DUP2 000012ee: PUSH1 0xff 000012f0: MUL 000012f1: NOT 000012f2: AND 000012f3: SWAP1 000012f4: DUP4 000012f5: ISZERO 000012f6: ISZERO 000012f7: MUL 000012f8: OR 000012f9: SWAP1 000012fa: SSTORE 000012fb: POP 000012fc: JUMP 000012fd: JUMPDEST 000012fe: PUSH1 0x05 00001300: PUSH1 0x00 00001302: SWAP1 00001303: SLOAD 00001304: SWAP1 00001305: PUSH2 0x0100 00001308: EXP 00001309: SWAP1 0000130a: DIV 0000130b: PUSH1 0xff 0000130d: AND 0000130e: DUP2 0000130f: JUMP 00001310: JUMPDEST 00001311: PUSH1 0x06 00001313: PUSH1 0x20 00001315: MSTORE 00001316: DUP2 00001317: PUSH1 0x00 00001319: MSTORE 0000131a: PUSH1 0x40 0000131c: PUSH1 0x00 0000131e: KECCAK256 0000131f: PUSH1 0x20 00001321: MSTORE 00001322: DUP1 00001323: PUSH1 0x00 00001325: MSTORE 00001326: PUSH1 0x40 00001328: PUSH1 0x00 0000132a: KECCAK256 0000132b: PUSH1 0x00 0000132d: SWAP2 0000132e: POP 0000132f: SWAP2 00001330: POP 00001331: POP 00001332: DUP1 00001333: PUSH1 0x00 00001335: ADD 00001336: SLOAD 00001337: SWAP1 00001338: DUP1 00001339: PUSH1 0x01 0000133b: ADD 0000133c: PUSH1 0x00 0000133e: SWAP1 0000133f: SLOAD 00001340: SWAP1 00001341: PUSH2 0x0100 00001344: EXP 00001345: SWAP1 00001346: DIV 00001347: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000135c: AND 0000135d: SWAP1 0000135e: DUP1 0000135f: PUSH1 0x02 00001361: ADD 00001362: SLOAD 00001363: SWAP1 00001364: DUP1 00001365: PUSH1 0x03 00001367: ADD 00001368: SWAP1 00001369: DUP1 0000136a: PUSH1 0x04 0000136c: ADD 0000136d: SWAP1 0000136e: DUP1 0000136f: PUSH1 0x05 00001371: ADD 00001372: SLOAD 00001373: SWAP1 00001374: DUP1 00001375: PUSH1 0x06 00001377: ADD 00001378: SLOAD 00001379: SWAP1 0000137a: DUP1 0000137b: PUSH1 0x07 0000137d: ADD 0000137e: PUSH1 0x00 00001380: SWAP1 00001381: SLOAD 00001382: SWAP1 00001383: PUSH2 0x0100 00001386: EXP 00001387: SWAP1 00001388: DIV 00001389: PUSH1 0xff 0000138b: AND 0000138c: SWAP1 0000138d: POP 0000138e: DUP9 0000138f: JUMP 00001390: JUMPDEST 00001391: PUSH1 0x01 00001393: PUSH1 0x00 00001395: SWAP1 00001396: SLOAD 00001397: SWAP1 00001398: PUSH2 0x0100 0000139b: EXP 0000139c: SWAP1 0000139d: DIV 0000139e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013b3: AND 000013b4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013c9: AND 000013ca: CALLER 000013cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013e0: AND 000013e1: EQ 000013e2: ISZERO 000013e3: ISZERO 000013e4: PUSH2 0x13ec 000013e7: JUMPI 000013e8: PUSH1 0x00 000013ea: DUP1 000013eb: REVERT 000013ec: JUMPDEST 000013ed: PUSH1 0x00 000013ef: PUSH1 0x01 000013f1: PUSH1 0x14 000013f3: PUSH2 0x0100 000013f6: EXP 000013f7: DUP2 000013f8: SLOAD 000013f9: DUP2 000013fa: PUSH1 0xff 000013fc: MUL 000013fd: NOT 000013fe: AND 000013ff: SWAP1 00001400: DUP4 00001401: ISZERO 00001402: ISZERO 00001403: MUL 00001404: OR 00001405: SWAP1 00001406: SSTORE 00001407: POP 00001408: JUMP 00001409: JUMPDEST 0000140a: PUSH1 0x00 0000140c: DUP1 0000140d: SWAP1 0000140e: SLOAD 0000140f: SWAP1 00001410: PUSH2 0x0100 00001413: EXP 00001414: SWAP1 00001415: DIV 00001416: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000142b: AND 0000142c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001441: AND 00001442: CALLER 00001443: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001458: AND 00001459: EQ 0000145a: ISZERO 0000145b: ISZERO 0000145c: PUSH2 0x1464 0000145f: JUMPI 00001460: PUSH1 0x00 00001462: DUP1 00001463: REVERT 00001464: JUMPDEST 00001465: DUP1 00001466: PUSH1 0x01 00001468: PUSH1 0x00 0000146a: PUSH2 0x0100 0000146d: EXP 0000146e: DUP2 0000146f: SLOAD 00001470: DUP2 00001471: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001486: MUL 00001487: NOT 00001488: AND 00001489: SWAP1 0000148a: DUP4 0000148b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014a0: AND 000014a1: MUL 000014a2: OR 000014a3: SWAP1 000014a4: SSTORE 000014a5: POP 000014a6: POP 000014a7: JUMP 000014a8: JUMPDEST 000014a9: PUSH1 0x00 000014ab: DUP1 000014ac: SWAP1 000014ad: SLOAD 000014ae: SWAP1 000014af: PUSH2 0x0100 000014b2: EXP 000014b3: SWAP1 000014b4: DIV 000014b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014ca: AND 000014cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014e0: AND 000014e1: CALLER 000014e2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014f7: AND 000014f8: EQ 000014f9: ISZERO 000014fa: ISZERO 000014fb: PUSH2 0x1503 000014fe: JUMPI 000014ff: PUSH1 0x00 00001501: DUP1 00001502: REVERT 00001503: JUMPDEST 00001504: PUSH1 0x00 00001506: DUP1 00001507: SWAP1 00001508: SLOAD 00001509: SWAP1 0000150a: PUSH2 0x0100 0000150d: EXP 0000150e: SWAP1 0000150f: DIV 00001510: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001525: AND 00001526: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000153b: AND 0000153c: SELFDESTRUCT 0000153d: JUMPDEST 0000153e: PUSH1 0x03 00001540: SLOAD 00001541: DUP2 00001542: JUMP 00001543: JUMPDEST 00001544: PUSH1 0x01 00001546: PUSH1 0x00 00001548: SWAP1 00001549: SLOAD 0000154a: SWAP1 0000154b: PUSH2 0x0100 0000154e: EXP 0000154f: SWAP1 00001550: DIV 00001551: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001566: AND 00001567: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000157c: AND 0000157d: CALLER 0000157e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001593: AND 00001594: EQ 00001595: ISZERO 00001596: ISZERO 00001597: PUSH2 0x159f 0000159a: JUMPI 0000159b: PUSH1 0x00 0000159d: DUP1 0000159e: REVERT 0000159f: JUMPDEST 000015a0: DUP1 000015a1: PUSH1 0x04 000015a3: DUP2 000015a4: SWAP1 000015a5: SSTORE 000015a6: POP 000015a7: POP 000015a8: JUMP 000015a9: JUMPDEST 000015aa: PUSH1 0x01 000015ac: PUSH1 0x00 000015ae: SWAP1 000015af: SLOAD 000015b0: SWAP1 000015b1: PUSH2 0x0100 000015b4: EXP 000015b5: SWAP1 000015b6: DIV 000015b7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015cc: AND 000015cd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015e2: AND 000015e3: CALLER 000015e4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015f9: AND 000015fa: EQ 000015fb: ISZERO 000015fc: ISZERO 000015fd: PUSH2 0x1605 00001600: JUMPI 00001601: PUSH1 0x00 00001603: DUP1 00001604: REVERT 00001605: JUMPDEST 00001606: DUP1 00001607: PUSH1 0x00 00001609: DUP2 0000160a: GT 0000160b: ISZERO 0000160c: PUSH2 0x1650 0000160f: JUMPI 00001610: DUP3 00001611: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001626: AND 00001627: PUSH2 0x08fc 0000162a: DUP4 0000162b: SWAP1 0000162c: DUP2 0000162d: ISZERO 0000162e: MUL 0000162f: SWAP1 00001630: PUSH1 0x40 00001632: MLOAD 00001633: PUSH1 0x00 00001635: PUSH1 0x40 00001637: MLOAD 00001638: DUP1 00001639: DUP4 0000163a: SUB 0000163b: DUP2 0000163c: DUP6 0000163d: DUP9 0000163e: DUP9 0000163f: CALL 00001640: SWAP4 00001641: POP 00001642: POP 00001643: POP 00001644: POP 00001645: ISZERO 00001646: ISZERO 00001647: PUSH2 0x164f 0000164a: JUMPI 0000164b: PUSH1 0x00 0000164d: DUP1 0000164e: REVERT 0000164f: JUMPDEST 00001650: JUMPDEST 00001651: POP 00001652: POP 00001653: POP 00001654: JUMP 00001655: JUMPDEST 00001656: PUSH1 0x01 00001658: PUSH1 0x00 0000165a: SWAP1 0000165b: SLOAD 0000165c: SWAP1 0000165d: PUSH2 0x0100 00001660: EXP 00001661: SWAP1 00001662: DIV 00001663: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001678: AND 00001679: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000168e: AND 0000168f: CALLER 00001690: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016a5: AND 000016a6: EQ 000016a7: ISZERO 000016a8: ISZERO 000016a9: PUSH2 0x16b1 000016ac: JUMPI 000016ad: PUSH1 0x00 000016af: DUP1 000016b0: REVERT 000016b1: JUMPDEST 000016b2: DUP1 000016b3: PUSH1 0x00 000016b5: DUP2 000016b6: GT 000016b7: ISZERO 000016b8: ISZERO 000016b9: PUSH2 0x16fe 000016bc: JUMPI 000016bd: DUP3 000016be: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016d3: AND 000016d4: PUSH2 0x08fc 000016d7: PUSH1 0x01 000016d9: SWAP1 000016da: DUP2 000016db: ISZERO 000016dc: MUL 000016dd: SWAP1 000016de: PUSH1 0x40 000016e0: MLOAD 000016e1: PUSH1 0x00 000016e3: PUSH1 0x40 000016e5: MLOAD 000016e6: DUP1 000016e7: DUP4 000016e8: SUB 000016e9: DUP2 000016ea: DUP6 000016eb: DUP9 000016ec: DUP9 000016ed: CALL 000016ee: SWAP4 000016ef: POP 000016f0: POP 000016f1: POP 000016f2: POP 000016f3: ISZERO 000016f4: ISZERO 000016f5: PUSH2 0x16fd 000016f8: JUMPI 000016f9: PUSH1 0x00 000016fb: DUP1 000016fc: REVERT 000016fd: JUMPDEST 000016fe: JUMPDEST 000016ff: POP 00001700: POP 00001701: POP 00001702: JUMP 00001703: JUMPDEST 00001704: DUP3 00001705: DUP1 00001706: SLOAD 00001707: PUSH1 0x01 00001709: DUP2 0000170a: PUSH1 0x01 0000170c: AND 0000170d: ISZERO 0000170e: PUSH2 0x0100 00001711: MUL 00001712: SUB 00001713: AND 00001714: PUSH1 0x02 00001716: SWAP1 00001717: DIV 00001718: SWAP1 00001719: PUSH1 0x00 0000171b: MSTORE 0000171c: PUSH1 0x20 0000171e: PUSH1 0x00 00001720: KECCAK256 00001721: SWAP1 00001722: PUSH1 0x1f 00001724: ADD 00001725: PUSH1 0x20 00001727: SWAP1 00001728: DIV 00001729: DUP2 0000172a: ADD 0000172b: SWAP3 0000172c: DUP3 0000172d: PUSH1 0x1f 0000172f: LT 00001730: PUSH2 0x1744 00001733: JUMPI 00001734: DUP1 00001735: MLOAD 00001736: PUSH1 0xff 00001738: NOT 00001739: AND 0000173a: DUP4 0000173b: DUP1 0000173c: ADD 0000173d: OR 0000173e: DUP6 0000173f: SSTORE 00001740: PUSH2 0x1772 00001743: JUMP 00001744: JUMPDEST 00001745: DUP3 00001746: DUP1 00001747: ADD 00001748: PUSH1 0x01 0000174a: ADD 0000174b: DUP6 0000174c: SSTORE 0000174d: DUP3 0000174e: ISZERO 0000174f: PUSH2 0x1772 00001752: JUMPI 00001753: SWAP2 00001754: DUP3 00001755: ADD 00001756: JUMPDEST 00001757: DUP3 00001758: DUP2 00001759: GT 0000175a: ISZERO 0000175b: PUSH2 0x1771 0000175e: JUMPI 0000175f: DUP3 00001760: MLOAD 00001761: DUP3 00001762: SSTORE 00001763: SWAP2 00001764: PUSH1 0x20 00001766: ADD 00001767: SWAP2 00001768: SWAP1 00001769: PUSH1 0x01 0000176b: ADD 0000176c: SWAP1 0000176d: PUSH2 0x1756 00001770: JUMP 00001771: JUMPDEST 00001772: JUMPDEST 00001773: POP 00001774: SWAP1 00001775: POP 00001776: PUSH2 0x177f 00001779: SWAP2 0000177a: SWAP1 0000177b: PUSH2 0x186d 0000177e: JUMP 0000177f: JUMPDEST 00001780: POP 00001781: SWAP1 00001782: JUMP 00001783: JUMPDEST 00001784: PUSH2 0x0100 00001787: PUSH1 0x40 00001789: MLOAD 0000178a: SWAP1 0000178b: DUP2 0000178c: ADD 0000178d: PUSH1 0x40 0000178f: MSTORE 00001790: DUP1 00001791: PUSH1 0x00 00001793: DUP2 00001794: MSTORE 00001795: PUSH1 0x20 00001797: ADD 00001798: PUSH1 0x00 0000179a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017af: AND 000017b0: DUP2 000017b1: MSTORE 000017b2: PUSH1 0x20 000017b4: ADD 000017b5: PUSH1 0x00 000017b7: DUP2 000017b8: MSTORE 000017b9: PUSH1 0x20 000017bb: ADD 000017bc: PUSH2 0x17c3 000017bf: PUSH2 0x1892 000017c2: JUMP 000017c3: JUMPDEST 000017c4: DUP2 000017c5: MSTORE 000017c6: PUSH1 0x20 000017c8: ADD 000017c9: PUSH2 0x17d0 000017cc: PUSH2 0x1892 000017cf: JUMP 000017d0: JUMPDEST 000017d1: DUP2 000017d2: MSTORE 000017d3: PUSH1 0x20 000017d5: ADD 000017d6: PUSH1 0x00 000017d8: DUP2 000017d9: MSTORE 000017da: PUSH1 0x20 000017dc: ADD 000017dd: PUSH1 0x00 000017df: DUP2 000017e0: MSTORE 000017e1: PUSH1 0x20 000017e3: ADD 000017e4: PUSH1 0x00 000017e6: ISZERO 000017e7: ISZERO 000017e8: DUP2 000017e9: MSTORE 000017ea: POP 000017eb: SWAP1 000017ec: JUMP 000017ed: JUMPDEST 000017ee: DUP3 000017ef: DUP1 000017f0: SLOAD 000017f1: PUSH1 0x01 000017f3: DUP2 000017f4: PUSH1 0x01 000017f6: AND 000017f7: ISZERO 000017f8: PUSH2 0x0100 000017fb: MUL 000017fc: SUB 000017fd: AND 000017fe: PUSH1 0x02 00001800: SWAP1 00001801: DIV 00001802: SWAP1 00001803: PUSH1 0x00 00001805: MSTORE 00001806: PUSH1 0x20 00001808: PUSH1 0x00 0000180a: KECCAK256 0000180b: SWAP1 0000180c: PUSH1 0x1f 0000180e: ADD 0000180f: PUSH1 0x20 00001811: SWAP1 00001812: DIV 00001813: DUP2 00001814: ADD 00001815: SWAP3 00001816: DUP3 00001817: PUSH1 0x1f 00001819: LT 0000181a: PUSH2 0x182e 0000181d: JUMPI 0000181e: DUP1 0000181f: MLOAD 00001820: PUSH1 0xff 00001822: NOT 00001823: AND 00001824: DUP4 00001825: DUP1 00001826: ADD 00001827: OR 00001828: DUP6 00001829: SSTORE 0000182a: PUSH2 0x185c 0000182d: JUMP 0000182e: JUMPDEST 0000182f: DUP3 00001830: DUP1 00001831: ADD 00001832: PUSH1 0x01 00001834: ADD 00001835: DUP6 00001836: SSTORE 00001837: DUP3 00001838: ISZERO 00001839: PUSH2 0x185c 0000183c: JUMPI 0000183d: SWAP2 0000183e: DUP3 0000183f: ADD 00001840: JUMPDEST 00001841: DUP3 00001842: DUP2 00001843: GT 00001844: ISZERO 00001845: PUSH2 0x185b 00001848: JUMPI 00001849: DUP3 0000184a: MLOAD 0000184b: DUP3 0000184c: SSTORE 0000184d: SWAP2 0000184e: PUSH1 0x20 00001850: ADD 00001851: SWAP2 00001852: SWAP1 00001853: PUSH1 0x01 00001855: ADD 00001856: SWAP1 00001857: PUSH2 0x1840 0000185a: JUMP 0000185b: JUMPDEST 0000185c: JUMPDEST 0000185d: POP 0000185e: SWAP1 0000185f: POP 00001860: PUSH2 0x1869 00001863: SWAP2 00001864: SWAP1 00001865: PUSH2 0x186d 00001868: JUMP 00001869: JUMPDEST 0000186a: POP 0000186b: SWAP1 0000186c: JUMP 0000186d: JUMPDEST 0000186e: PUSH2 0x188f 00001871: SWAP2 00001872: SWAP1 00001873: JUMPDEST 00001874: DUP1 00001875: DUP3 00001876: GT 00001877: ISZERO 00001878: PUSH2 0x188b 0000187b: JUMPI 0000187c: PUSH1 0x00 0000187e: DUP2 0000187f: PUSH1 0x00 00001881: SWAP1 00001882: SSTORE 00001883: POP 00001884: PUSH1 0x01 00001886: ADD 00001887: PUSH2 0x1873 0000188a: JUMP 0000188b: JUMPDEST 0000188c: POP 0000188d: SWAP1 0000188e: JUMP 0000188f: JUMPDEST 00001890: SWAP1 00001891: JUMP 00001892: JUMPDEST 00001893: PUSH1 0x20 00001895: PUSH1 0x40 00001897: MLOAD 00001898: SWAP1 00001899: DUP2 0000189a: ADD 0000189b: PUSH1 0x40 0000189d: MSTORE 0000189e: DUP1 0000189f: PUSH1 0x00 000018a1: DUP2 000018a2: MSTORE 000018a3: POP 000018a4: SWAP1 000018a5: JUMP 000018a6: STOP 000018a7: LOG1 000018a8: PUSH6 0x627a7a723058 000018af: KECCAK256 000018b0: DUP11 000018b1: SWAP16 000018b2: DIFFICULTY 000018b3: PC 000018b4: UNKNOWN(0xD9) 000018b5: BLOCKHASH 000018b6: UNKNOWN(0xFB) 000018b7: PUSH5 0x0e57bba853 000018bd: JUMP 000018be: UNKNOWN(0x0D) 000018bf: SWAP2 000018c0: TSTORE 000018c1: TIMESTAMP 000018c2: UNKNOWN(0xE3) 000018c3: UNKNOWN(0xA6) 000018c4: PUSH24
| 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": 1
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xd35268ea9bb7c3d440b96e34315622eef53a87f924ac6e387007b2e214654ff0
call_targets:
0x8a31a724821c8c9b6e834bafffb9a63de8fdfd06
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xd35268ea9bb7c3d440b96e34315622eef53a87f924ac6e387007b2e214654ff0",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x8a31a724821c8c9b6e834bafffb9a63de8fdfd06"
],
"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": "0x04ed00ac",
"selector": "0x04ed00ac",
"calldata_variants": [
"0x04ed00ac",
"0x04ed00ac0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18fd8903",
"selector": "0x18fd8903",
"calldata_variants": [
"0x18fd8903",
"0x18fd89030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x22f3e2d4",
"selector": "0x22f3e2d4",
"calldata_variants": [
"0x22f3e2d4",
"0x22f3e2d40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x56b4997f",
"selector": "0x56b4997f",
"calldata_variants": [
"0x56b4997f",
"0x56b4997f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x570ca735",
"selector": "0x570ca735",
"calldata_variants": [
"0x570ca735",
"0x570ca7350000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x57402227",
"selector": "0x57402227",
"calldata_variants": [
"0x57402227",
"0x574022270000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x609c9c71",
"selector": "0x609c9c71",
"calldata_variants": [
"0x609c9c71",
"0x609c9c710000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4454,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5695,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5869,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 3,
"guards_detected": [
{
"pc": 329,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 1944,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 2549,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 2692,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 4155,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 4532,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 4677,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 4799,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5066,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5186,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5345,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5501,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5603,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5775,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"untrusted_call_count": 3
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xd35268ea9bb7c3d440b96e34315622eef53a87f924ac6e387007b2e214654ff0
call_targets:
0x8a31a724821c8c9b6e834bafffb9a63de8fdfd06
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xd35268ea9bb7c3d440b96e34315622eef53a87f924ac6e387007b2e214654ff0",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x8a31a724821c8c9b6e834bafffb9a63de8fdfd06"
],
"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": "0x04ed00ac",
"selector": "0x04ed00ac",
"calldata_variants": [
"0x04ed00ac",
"0x04ed00ac0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18fd8903",
"selector": "0x18fd8903",
"calldata_variants": [
"0x18fd8903",
"0x18fd89030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x22f3e2d4",
"selector": "0x22f3e2d4",
"calldata_variants": [
"0x22f3e2d4",
"0x22f3e2d40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x56b4997f",
"selector": "0x56b4997f",
"calldata_variants": [
"0x56b4997f",
"0x56b4997f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x570ca735",
"selector": "0x570ca735",
"calldata_variants": [
"0x570ca735",
"0x570ca7350000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x57402227",
"selector": "0x57402227",
"calldata_variants": [
"0x57402227",
"0x574022270000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x609c9c71",
"selector": "0x609c9c71",
"calldata_variants": [
"0x609c9c71",
"0x609c9c710000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4454,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5695,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5869,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 3,
"guards_detected": [
{
"pc": 329,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 1944,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 2549,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 2692,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 4155,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 4532,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 4677,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 4799,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5066,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5186,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5345,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5501,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5603,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5775,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
]
}
|
| medium | other | detector | SELFDESTRUCT reachable | 45 | no | no |
viewtrace_id: 0xddc8c1930598fc2d57e33ef877ac1b47661446e25ed096a6ed7774ea46a8be18
validation_json{
"sink": "SELFDESTRUCT",
"errors": 0,
"status": "unknown",
"attempts": 32,
"trace_id": "0xddc8c1930598fc2d57e33ef877ac1b47661446e25ed096a6ed7774ea46a8be18",
"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": "0x04ed00ac",
"selector": "0x04ed00ac",
"calldata_variants": [
"0x04ed00ac",
"0x04ed00ac0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18fd8903",
"selector": "0x18fd8903",
"calldata_variants": [
"0x18fd8903",
"0x18fd89030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x22f3e2d4",
"selector": "0x22f3e2d4",
"calldata_variants": [
"0x22f3e2d4",
"0x22f3e2d40000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x56b4997f",
"selector": "0x56b4997f",
"calldata_variants": [
"0x56b4997f",
"0x56b4997f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x570ca735",
"selector": "0x570ca735",
"calldata_variants": [
"0x570ca735",
"0x570ca7350000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x57402227",
"selector": "0x57402227",
"calldata_variants": [
"0x57402227",
"0x574022270000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x609c9c71",
"selector": "0x609c9c71",
"calldata_variants": [
"0x609c9c71",
"0x609c9c710000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 329,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 1944,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 2549,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 2692,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 4155,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 4532,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 4677,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 4799,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5066,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5186,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5345,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5501,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5603,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5775,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"selfdestruct_count": 1
}
|