1e1681f8-a33c-4956-8215-0fa8acbe219b
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 |
|---|---|---|---|---|
| 31340 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 111038 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 111039 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 111040 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 111041 | capability.graph | complete | 1 / 3 | 1 week ago |
| 111042 | detector.run | complete | 1 / 3 | 1 week ago |
| 111043 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:299844] OpenAI Codex v0.77.0 (research preview)
[codex:299844] --------
[codex:299844] workdir: /tmp/codex-multi-offn776v
[codex:299844] model: gpt-5.2-codex
[codex:299844] provider: openai
[codex:299844] approval: never
[codex:299844] sandbox: read-only
[codex:299844] reasoning effort: xhigh
[codex:299844] reasoning summaries: auto
[codex:299844] session id: 019b8083-d4b5-7a80-b35b-33e481b3c9d0
[codex:299844] --------
[codex:299844] user
[codex:299844] 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:299844]
[codex:299844] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:299844]
[codex:299844] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:299844] - Gas inefficiency, code quality, or best practices
[codex:299844] - Theoretical vulnerabilities without a clear extraction path
[codex:299844] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:299844] - Issues requiring social engineering or off-chain coordination
[codex:299844]
[codex:299844] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:299844] - CALL/DELEGATECALL with controllable destination or calldata
[codex:299844] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:299844] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:299844] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:299844] - External calls before state updates (reentrancy)
[codex:299844] - SELFDESTRUCT with controllable beneficiary
[codex:299844] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:299844]
[codex:299844] For each finding, you MUST explain:
[codex:299844] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:299844] 2. The concrete sequence of transactions to extract value
[codex:299844] 3. Why you believe this is exploitable (not just suspicious)
[codex:299844]
[codex:299844] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:299844] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:299844]
[codex:299844] Output MUST be valid JSON matching the provided schema.
[codex:299844] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:299844] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:299844] mcp startup: no servers
[codex:299844]
[codex:299844] thinking
[codex:299844] **Reading file contents**
[codex:299844] exec
[codex:299844] /bin/bash -lc ls in /tmp/codex-multi-offn776v succeeded in 5ms:
[codex:299844] BYTECODE_BUNDLE.txt
[codex:299844] codex-output-schema.json
[codex:299844] exec
[codex:299844] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-offn776v succeeded in 5ms:
[codex:299844] Runtime bytecode bundle for best-effort auditing.
[codex:299844] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:299844]
[codex:299844] FILE: runtime_bytecode.hex
[codex:299844] 0x6080604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063061aad6e146100bf5780633dc17a521461018e5780637eadebfe146103135780637fb8b61e1461036a5780638da5cb5b146103c15780639cf40c0b14610418578063a10d09601461046c578063a26e1186146104ff578063b99152d01461055b578063e4860339146105b2578063e5188f5514610609578063f2fde38b14610634575b600080fd5b3480156100cb57600080fd5b5061018c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610677565b005b61031160048036038101908080356bffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610b5b565b005b34801561031f57600080fd5b50610354600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611017565b6040518082815260200191505060405180910390f35b34801561037657600080fd5b506103ab600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061102f565b6040518082815260200191505060405180910390f35b3480156103cd57600080fd5b506103d6611078565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042457600080fd5b5061045260048036038101908080356bffffffffffffffffffffffff1916906020019092919050505061109d565b604051808215151515815260200191505060405180910390f35b34801561047857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506110bd565b005b610559600480360381019080803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506113b1565b005b34801561056757600080fd5b5061059c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061154f565b6040518082815260200191505060405180910390f35b3480156105be57600080fd5b506105f3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611598565b6040518082815260200191505060405180910390f35b34801561061557600080fd5b5061061e6115b0565b6040518082815260200191505060405180910390f35b34801561064057600080fd5b50610675600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115b6565b005b7f79470ec3f0acdfeae4153985471320f445a530e87c30c39c25b0eaf088c6dc223383858673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1580156106ff57600080fd5b505af1158015610713573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561073d57600080fd5b81019080805164010000000081111561075557600080fd5b8281019050602081018481111561076b57600080fd5b815185600182028301116401000000008211171561078857600080fd5b50509291905050508773ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1580156107f457600080fd5b505af1158015610808573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561083257600080fd5b81019080805164010000000081111561084a57600080fd5b8281019050602081018481111561086057600080fd5b815185600182028301116401000000008211171561087d57600080fd5b50509291905050508873ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156108e957600080fd5b505af11580156108fd573d6000803e3d6000fd5b505050506040513d602081101561091357600080fd5b810190808051906020019092919050505087604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001806020018660ff1660ff1681526020018060200185810385528b818151815260200191508051906020019080838360005b838110156109e15780820151818401526020810190506109c6565b50505050905090810190601f168015610a0e5780820380516001836020036101000a031916815260200191505b50858103845289818151815260200191508051906020019080838360005b83811015610a47578082015181840152602081019050610a2c565b50505050905090810190601f168015610a745780820380516001836020036101000a031916815260200191505b50858103835288818151815260200191508051906020019080838360005b83811015610aad578082015181840152602081019050610a92565b50505050905090810190601f168015610ada5780820380516001836020036101000a031916815260200191505b50858103825286818151815260200191508051906020019080838360005b83811015610b13578082015181840152602081019050610af8565b50505050905090810190601f168015610b405780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a1505050565b60008060008060003073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151515610b9e57600080fd5b60008a111515610bad57600080fd5b60001515600460008f6bffffffffffffffffffffffff19166bffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff161515141515610bfe57600080fd5b8a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c3857600080fd5b6000945060009350600094505b8851851015610cde576001850193505b8851841015610cd1578884815181101515610c6c57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff168986815181101515610c9a57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614151515610cc457fe5b8380600101945050610c55565b8480600101955050610c45565b600094505b8851851015610ed3578c8c8c8c60405180856bffffffffffffffffffffffff19166bffffffffffffffffffffffff191681526014018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001945050505050604051809103902092506001838787815181101515610dc157fe5b906020019060200201518a88815181101515610dd957fe5b906020019060200201518a89815181101515610df157fe5b90602001906020020151604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015610e6c573d6000803e3d6000fd5b5050506020604051035191508173ffffffffffffffffffffffffffffffffffffffff168986815181101515610e9d57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff16141515610ec657fe5b8480600101955050610ce3565b60009050600094505b8851851015610f5d57610f4e600260008b88815181101515610efa57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261170b90919063ffffffff16565b90508480600101955050610edc565b6003548111151515610f6b57fe5b6001600460008f6bffffffffffffffffffffffff19166bffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506002600354811515610fc357fe5b048111156110085760008c73ffffffffffffffffffffffffffffffffffffffff161415610ffa57610ff58d8c8c611729565b611007565b6110068d8d8d8d61193c565b5b5b50505050505050505050505050565b60026020528060005260406000206000915090505481565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b60008373ffffffffffffffffffffffffffffffffffffffff161115156110e257600080fd5b6000821115156110f157600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b505050506040513d60208110156111f257600080fd5b8101908080519060200190929190505050151561120b57fe5b61125d82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461170b90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f9abc03496c1032d5360782ca78af72ed77b086c26cb5a6a98b01178546795ec083338484604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561136f578082015181840152602081019050611354565b50505050905090810190601f16801561139c5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505050565b6000341115156113c057600080fd5b61141234600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461170b90919063ffffffff16565b600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f9abc03496c1032d5360782ca78af72ed77b086c26cb5a6a98b01178546795ec06000333484604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561150f5780820151818401526020810190506114f4565b50505050905090810190601f16801561153c5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a150565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60016020528060005260406000206000915090505481565b60035481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561161157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561164d57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080828401905083811015151561171f57fe5b8091505092915050565b80600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561177457fe5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117ab57fe5b6117fd81600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf090919063ffffffff16565b600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611886573d6000803e3d6000fd5b507f1f57a1c5b6fc2c932e07efa54e40446c010acc2e30e1d017e592b7d0f90bc8fc836000848460405180856bffffffffffffffffffffffff19166bffffffffffffffffffffffff191681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390a1505050565b60008373ffffffffffffffffffffffffffffffffffffffff161415151561195f57fe5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156119aa57fe5b6119fc81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf090919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611ae257600080fd5b505af1158015611af6573d6000803e3d6000fd5b505050506040513d6020811015611b0c57600080fd5b81019080805190602001909291905050501515611b2557fe5b7f1f57a1c5b6fc2c932e07efa54e40446c010acc2e30e1d017e592b7d0f90bc8fc8484848460405180856bffffffffffffffffffffffff19166bffffffffffffffffffffffff191681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390a150505050565b6000828211151515611bfe57fe5b8183039050929150505600a165627a7a72305820aa2ee27c32423095bc4b305c329d883f8c4d0fae55e4f64f5ddffd543dd6a0ae0029
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing contract bytecode for exploits**
[codex:299844]
[codex:299844] I'm examining function selectors and storage patterns to identify possible unprotected ETH or token transfers. I want to detect any external calls with value that lack proper access control, focusing on suspicious CALL operations in the bytecode. Since the environment is read-only, I plan to use ephemeral Python scripts to disassemble and analyze opcodes without modifying files.
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] from binascii import unhexlify
[codex:299844]
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] # extract runtime bytecode hex after 0x
[codex:299844] m=re.search(r'0x([0-9a-fA-F]+)',hexdata)
[codex:299844] if not m:
[codex:299844] print('no hex')
[codex:299844] raise SystemExit
[codex:299844] hexstr=m.group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] # EVM opcode map
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] # simple disassembly to find call-type opcodes with offsets
[codex:299844] call_ops={0xf1:'CALL',0xf2:'CALLCODE',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xff:'SELFDESTRUCT'}
[codex:299844]
[codex:299844] pc=0
[codex:299844] results=[]
[codex:299844] while pc < len(code):
[codex:299844] op=code[pc]
[codex:299844] if op in call_ops:
[codex:299844] results.append((pc,call_ops[op]))
[codex:299844] pc+=1
[codex:299844] continue
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] pc += 1 + (op - 0x5f)
[codex:299844] else:
[codex:299844] pc+=1
[codex:299844]
[codex:299844] print('call-like opcodes count',len(results))
[codex:299844] for off,op in results:
[codex:299844] print(hex(off),op)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 34ms:
[codex:299844] call-like opcodes count 7
[codex:299844] 0x702 CALL
[codex:299844] 0x7f7 CALL
[codex:299844] 0x8ec CALL
[codex:299844] 0xe5b CALL
[codex:299844] 0x11cb CALL
[codex:299844] 0x1870 CALL
[codex:299844] 0x1ae5 CALL
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing CALL instructions and context**
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] from binascii import unhexlify
[codex:299844]
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] def disasm(start, end):
[codex:299844] pc=start
[codex:299844] while pc<end and pc<len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] print(f\"{pc:04x}: {name}\")
[codex:299844] pc+=1
[codex:299844]
[codex:299844] # show around call offsets
[codex:299844] for off in [0x702,0x7f7,0x8ec,0xe5b,0x11cb,0x1870,0x1ae5]:
[codex:299844] print('\\n== around',hex(off))
[codex:299844] disasm(off-20, off+20)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 27ms:
[codex:299844]
[codex:299844] == around 0x702
[codex:299844] 06ee: DUP2
[codex:299844] 06ef: PUSH1 0x00
[codex:299844] 06f1: DUP8
[codex:299844] 06f2: DUP1
[codex:299844] 06f3: EXTCODESIZE
[codex:299844] 06f4: ISZERO
[codex:299844] 06f5: DUP1
[codex:299844] 06f6: ISZERO
[codex:299844] 06f7: PUSH2 0x06ff
[codex:299844] 06fa: JUMPI
[codex:299844] 06fb: PUSH1 0x00
[codex:299844] 06fd: DUP1
[codex:299844] 06fe: REVERT
[codex:299844] 06ff: JUMPDEST
[codex:299844] 0700: POP
[codex:299844] 0701: GAS
[codex:299844] 0702: CALL
[codex:299844] 0703: ISZERO
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing token and ETH transfer calls**
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] from binascii import unhexlify
[codex:299844]
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] def disasm(start, end):
[codex:299844] pc=start
[codex:299844] while pc<end and pc<len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] print(f\"{pc:04x}: {name}\")
[codex:299844] pc+=1
[codex:299844]
[codex:299844] # find jumpdest near 0x10bd
[codex:299844] for off in [0x10bd,0x13b1,0x154f,0x1598,0x15b0,0x15b6,0x170b,0x1729,0x193c]:
[codex:299844] print('\\n== around',hex(off))
[codex:299844] disasm(off-20, off+60)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 28ms:
[codex:299844]
[codex:299844] == around 0x10bd
[codex:299844] 10a9: PUSH1 0x00
[codex:299844] 10ab: SHA3
[codex:299844] 10ac: PUSH1 0x00
[codex:299844] 10ae: SWAP2
[codex:299844] 10af: POP
[codex:299844] 10b0: SLOAD
[codex:299844] 10b1: SWAP1
[codex:299844] 10b2: PUSH2 0x0100
[codex:299844] 10b5: EXP
[codex:299844] 10b6: SWAP1
[codex:299844] 10b7: DIV
[codex:299844] 10b8: PUSH1 0xff
[codex:299844] 10ba: AND
[codex:299844] 10bb: DUP2
[codex:299844] 10bc: JUMP
[codex:299844] 10bd: JUMPDEST
[codex:299844] 10be: PUSH1 0x00
[codex:299844] 10c0: DUP4
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing function selectors and dispatch table**
[codex:299844]
[codex:299844] I'm mapping function selectors to their jump destinations and identifying probable function roles based on parameter patterns and storage access. I want to clarify dispatcher behavior and better understand the contract's interface for deposits, withdrawals, balances, and ownership. I'll continue disassembling key functions, especially payable ones, to check for vulnerabilities or logic details.
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] def disasm(start, end):
[codex:299844] pc=start
[codex:299844] while pc<end and pc<len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] print(f\"{pc:04x}: {name}\")
[codex:299844] pc+=1
[codex:299844]
[codex:299844] # disassemble a chunk around 0x13b1
[codex:299844] start=0x13b1
[codex:299844] end=0x154f
[codex:299844] print('disasm',hex(start),hex(end))
[codex:299844] disasm(start,end)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 24ms:
[codex:299844] disasm 0x13b1 0x154f
[codex:299844] 13b1: JUMPDEST
[codex:299844] 13b2: PUSH1 0x00
[codex:299844] 13b4: CALLVALUE
[codex:299844] 13b5: GT
[codex:299844] 13b6: ISZERO
[codex:299844] 13b7: ISZERO
[codex:299844] 13b8: PUSH2 0x13c0
[codex:299844] 13bb: JUMPI
[codex:299844] 13bc: PUSH1 0x00
[codex:299844] 13be: DUP1
[codex:299844] 13bf: REVERT
[codex:299844] 13c0: JUMPDEST
[codex:299844] 13c1: PUSH2 0x1412
[codex:299844] 13c4: CALLVALUE
[codex:299844] 13c5: PUSH1 0x01
[codex:299844] 13c7: PUSH1 0x00
[codex:299844] 13c9: DUP1
[codex:299844] 13ca: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:299844] 13df: AND
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing ETH deposit function details**
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] def disasm(start, end):
[codex:299844] pc=start
[codex:299844] while pc<end and pc<len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] print(f\"{pc:04x}: {name}\")
[codex:299844] pc+=1
[codex:299844]
[codex:299844] print('0x1017 func:')
[codex:299844] disasm(0x1017,0x1030)
[codex:299844] print('\\n0x102f func:')
[codex:299844] disasm(0x102f,0x1050)
[codex:299844] print('\\n0x109d func:')
[codex:299844] disasm(0x109d,0x10bd)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 24ms:
[codex:299844] 0x1017 func:
[codex:299844] 1017: JUMPDEST
[codex:299844] 1018: PUSH1 0x02
[codex:299844] 101a: PUSH1 0x20
[codex:299844] 101c: MSTORE
[codex:299844] 101d: DUP1
[codex:299844] 101e: PUSH1 0x00
[codex:299844] 1020: MSTORE
[codex:299844] 1021: PUSH1 0x40
[codex:299844] 1023: PUSH1 0x00
[codex:299844] 1025: SHA3
[codex:299844] 1026: PUSH1 0x00
[codex:299844] 1028: SWAP2
[codex:299844] 1029: POP
[codex:299844] 102a: SWAP1
[codex:299844] 102b: POP
[codex:299844] 102c: SLOAD
[codex:299844] 102d: DUP2
[codex:299844] 102e: JUMP
[codex:299844] 102f: JUMPDEST
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing mapping access patterns in bytecode**
[codex:299844]
[codex:299844] I'm parsing how functions push and store memory to compute keccak slots for mappings, tracking how arguments are stacked and used to access mapping values like mapping[key][slot], especially for address-keyed mappings. I'm also connecting dispatch code to function calls to clarify parameter passing and stack usage during these operations.
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] def disasm(start, end):
[codex:299844] pc=start
[codex:299844] while pc<end and pc<len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] print(f\"{pc:04x}: {name}\")
[codex:299844] pc+=1
[codex:299844]
[codex:299844] # disassemble more of 0x102f function
[codex:299844] start=0x102f
[codex:299844] end=0x109d
[codex:299844] print('disasm',hex(start),hex(end))
[codex:299844] disasm(start,end)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 23ms:
[codex:299844] disasm 0x102f 0x109d
[codex:299844] 102f: JUMPDEST
[codex:299844] 1030: PUSH1 0x00
[codex:299844] 1032: PUSH1 0x02
[codex:299844] 1034: PUSH1 0x00
[codex:299844] 1036: DUP4
[codex:299844] 1037: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:299844] 104c: AND
[codex:299844] 104d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:299844] 1062: AND
[codex:299844] 1063: DUP2
[codex:299844] 1064: MSTORE
[codex:299844] 1065: PUSH1 0x20
[codex:299844] 1067: ADD
[codex:299844] 1068: SWAP1
[codex:299844] 1069: DUP2
[codex:299844] 106a: MSTORE
[codex:299844] 106b: PUSH1 0x20
[codex:299844] 106d: ADD
[codex:299844] 106e: PUSH1 0x00
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing EVM stack usage and storage slots**
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] # disassemble and record opcodes with pc
[codex:299844] pc=0
[codex:299844] ops=[]
[codex:299844] while pc < len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] ops.append((pc,name,data.hex()))
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] ops.append((pc,name,None))
[codex:299844] pc+=1
[codex:299844]
[codex:299844] # find SSTOREs and print previous 8 ops
[codex:299844] for i,(pc,name,data) in enumerate(ops):
[codex:299844] if name=='SSTORE':
[codex:299844] print('\\nSSTORE at',hex(pc))
[codex:299844] for j in range(max(0,i-8),i+1):
[codex:299844] p,n,d=ops[j]
[codex:299844] if d is None:
[codex:299844] print(f\" {p:04x}: {n}\")
[codex:299844] else:
[codex:299844] print(f\" {p:04x}: {n} 0x{d}\")
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 32ms:
[codex:299844]
[codex:299844] SSTORE at 0xfb4
[codex:299844] 0fac: AND
[codex:299844] 0fad: SWAP1
[codex:299844] 0fae: DUP4
[codex:299844] 0faf: ISZERO
[codex:299844] 0fb0: ISZERO
[codex:299844] 0fb1: MUL
[codex:299844] 0fb2: OR
[codex:299844] 0fb3: SWAP1
[codex:299844] 0fb4: SSTORE
[codex:299844]
[codex:299844] SSTORE at 0x129f
[codex:299844] 1295: DUP2
[codex:299844] 1296: MSTORE
[codex:299844] 1297: PUSH1 0x20
[codex:299844] 1299: ADD
[codex:299844] 129a: PUSH1 0x00
[codex:299844] 129c: SHA3
[codex:299844] 129d: DUP2
[codex:299844]
[codex:299844] thinking
[codex:299844] **Investigating storage updates in code**
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] def disasm(start, end):
[codex:299844] pc=start
[codex:299844] while pc<end and pc<len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] print(f\"{pc:04x}: {name}\")
[codex:299844] pc+=1
[codex:299844]
[codex:299844] print('disasm around 0xf80-0x1010')
[codex:299844] disasm(0xf80,0x1010)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 25ms:
[codex:299844] disasm around 0xf80-0x1010
[codex:299844] 0f80: NOT
[codex:299844] 0f81: AND
[codex:299844] 0f82: PUSH12 0xffffffffffffffffffffffff
[codex:299844] 0f8f: NOT
[codex:299844] 0f90: AND
[codex:299844] 0f91: DUP2
[codex:299844] 0f92: MSTORE
[codex:299844] 0f93: PUSH1 0x20
[codex:299844] 0f95: ADD
[codex:299844] 0f96: SWAP1
[codex:299844] 0f97: DUP2
[codex:299844] 0f98: MSTORE
[codex:299844] 0f99: PUSH1 0x20
[codex:299844] 0f9b: ADD
[codex:299844] 0f9c: PUSH1 0x00
[codex:299844] 0f9e: SHA3
[codex:299844] 0f9f: PUSH1 0x00
[codex:299844] 0fa1: PUSH2 0x0100
[codex:299844] 0fa4: EXP
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing function control flow and transfers**
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] def disasm(start, end):
[codex:299844] pc=start
[codex:299844] while pc<end and pc<len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] print(f\"{pc:04x}: {name}\")
[codex:299844] pc+=1
[codex:299844]
[codex:299844] print('disasm 0x1729-0x18d0')
[codex:299844] disasm(0x1729,0x18d0)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 23ms:
[codex:299844] disasm 0x1729-0x18d0
[codex:299844] 1729: JUMPDEST
[codex:299844] 172a: DUP1
[codex:299844] 172b: PUSH1 0x01
[codex:299844] 172d: PUSH1 0x00
[codex:299844] 172f: DUP1
[codex:299844] 1730: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:299844] 1745: AND
[codex:299844] 1746: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:299844] 175b: AND
[codex:299844] 175c: DUP2
[codex:299844] 175d: MSTORE
[codex:299844] 175e: PUSH1 0x20
[codex:299844] 1760: ADD
[codex:299844] 1761: SWAP1
[codex:299844] 1762: DUP2
[codex:299844] 1763: MSTORE
[codex:299844] 1764: PUSH1 0x20
[codex:299844] 1766: ADD
[codex:299844] 1767: PUSH1 0x00
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing ETH withdrawal function**
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] def disasm(start, end):
[codex:299844] pc=start
[codex:299844] while pc<end and pc<len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] print(f\"{pc:04x}: {name}\")
[codex:299844] pc+=1
[codex:299844]
[codex:299844] print('disasm 0x193c-0x1b40')
[codex:299844] disasm(0x193c,0x1b40)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 29ms:
[codex:299844] disasm 0x193c-0x1b40
[codex:299844] 193c: JUMPDEST
[codex:299844] 193d: PUSH1 0x00
[codex:299844] 193f: DUP4
[codex:299844] 1940: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:299844] 1955: AND
[codex:299844] 1956: EQ
[codex:299844] 1957: ISZERO
[codex:299844] 1958: ISZERO
[codex:299844] 1959: ISZERO
[codex:299844] 195a: PUSH2 0x195f
[codex:299844] 195d: JUMPI
[codex:299844] 195e: INVALID
[codex:299844] 195f: JUMPDEST
[codex:299844] 1960: DUP1
[codex:299844] 1961: PUSH1 0x01
[codex:299844] 1963: PUSH1 0x00
[codex:299844] 1965: DUP6
[codex:299844] 1966: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:299844] 197b: AND
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing token withdrawal and signature checks**
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] def disasm(start, end):
[codex:299844] pc=start
[codex:299844] while pc<end and pc<len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] print(f\"{pc:04x}: {name}\")
[codex:299844] pc+=1
[codex:299844]
[codex:299844] print('disasm 0x0b5b-0x0e80')
[codex:299844] disasm(0x0b5b,0x0e80)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 24ms:
[codex:299844] disasm 0x0b5b-0x0e80
[codex:299844] 0b5b: JUMPDEST
[codex:299844] 0b5c: PUSH1 0x00
[codex:299844] 0b5e: DUP1
[codex:299844] 0b5f: PUSH1 0x00
[codex:299844] 0b61: DUP1
[codex:299844] 0b62: PUSH1 0x00
[codex:299844] 0b64: ADDRESS
[codex:299844] 0b65: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:299844] 0b7a: AND
[codex:299844] 0b7b: DUP13
[codex:299844] 0b7c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:299844] 0b91: AND
[codex:299844] 0b92: EQ
[codex:299844] 0b93: ISZERO
[codex:299844] 0b94: ISZERO
[codex:299844] 0b95: ISZERO
[codex:299844] 0b96: PUSH2 0x0b9e
[codex:299844] 0b99: JUMPI
[codex:299844] 0b9a: PUSH1 0x00
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing contract withdrawal and deposit logic**
[codex:299844]
[codex:299844] I'm exploring a complex function that seems to handle secure multi-sig withdrawals, checking contract address matches, signer verification via ecrecover, and replay protection with a mapping. I'm reassured by state updates before external calls, minimizing reentrancy risk. Now I'm shifting focus to the deposit function, carefully inspecting its token transferFrom calls and validation to confirm it doesn't allow unauthorized token moves. There's a lot here to untangle!
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] def disasm(start, end):
[codex:299844] pc=start
[codex:299844] while pc<end and pc<len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] print(f\"{pc:04x}: {name}\")
[codex:299844] pc+=1
[codex:299844]
[codex:299844] print('disasm 0x10bd-0x12c0')
[codex:299844] disasm(0x10bd,0x12c0)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 23ms:
[codex:299844] disasm 0x10bd-0x12c0
[codex:299844] 10bd: JUMPDEST
[codex:299844] 10be: PUSH1 0x00
[codex:299844] 10c0: DUP4
[codex:299844] 10c1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:299844] 10d6: AND
[codex:299844] 10d7: GT
[codex:299844] 10d8: ISZERO
[codex:299844] 10d9: ISZERO
[codex:299844] 10da: PUSH2 0x10e2
[codex:299844] 10dd: JUMPI
[codex:299844] 10de: PUSH1 0x00
[codex:299844] 10e0: DUP1
[codex:299844] 10e1: REVERT
[codex:299844] 10e2: JUMPDEST
[codex:299844] 10e3: PUSH1 0x00
[codex:299844] 10e5: DUP3
[codex:299844] 10e6: GT
[codex:299844] 10e7: ISZERO
[codex:299844] 10e8: ISZERO
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing token deposit and contract mappings**
[codex:299844] Reconnecting... 1/5
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing complex contract functions for vulnerabilities**
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] def disasm(start, end):
[codex:299844] pc=start
[codex:299844] while pc<end and pc<len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] print(f\"{pc:04x}: {name}\")
[codex:299844] pc+=1
[codex:299844]
[codex:299844] print('disasm 0xe70-0xf20')
[codex:299844] disasm(0xe70,0xf20)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 24ms:
[codex:299844] disasm 0xe70-0xf20
[codex:299844] 0e70: PUSH1 0x20
[codex:299844] 0e72: PUSH1 0x40
[codex:299844] 0e74: MLOAD
[codex:299844] 0e75: SUB
[codex:299844] 0e76: MLOAD
[codex:299844] 0e77: SWAP2
[codex:299844] 0e78: POP
[codex:299844] 0e79: DUP2
[codex:299844] 0e7a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:299844] 0e8f: AND
[codex:299844] 0e90: DUP10
[codex:299844] 0e91: DUP7
[codex:299844] 0e92: DUP2
[codex:299844] 0e93: MLOAD
[codex:299844] 0e94: DUP2
[codex:299844] 0e95: LT
[codex:299844] 0e96: ISZERO
[codex:299844] 0e97: ISZERO
[codex:299844] 0e98: PUSH2 0x0e9d
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing signer verification logic**
[codex:299844]
[codex:299844] I’m digging into how the code verifies recovered addresses against signer lists, trying to map stack positions and memory loads to function parameters. There’s a complex interplay of DUP instructions and memory access that suggests arrays of signers and tokens; I plan to disassemble the decoder region next to clarify parameter types and ordering.
[codex:299844] exec
[codex:299844] /bin/bash -lc "python - <<'PY'
[codex:299844] import re
[codex:299844] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:299844] hexstr=re.search(r'0x([0-9a-fA-F]+)',hexdata).group(1)
[codex:299844] code=bytes.fromhex(hexstr)
[codex:299844]
[codex:299844] opcodes={
[codex:299844] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:299844] 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:299844] 0x20:'SHA3',
[codex:299844] 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:299844] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:299844] 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:299844] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:299844] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:299844] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:299844] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:299844] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:299844] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:299844] }
[codex:299844]
[codex:299844] def disasm(start, end):
[codex:299844] pc=start
[codex:299844] while pc<end and pc<len(code):
[codex:299844] op=code[pc]
[codex:299844] name=opcodes.get(op,'UNKNOWN')
[codex:299844] if 0x60 <= op <= 0x7f:
[codex:299844] l=op-0x5f
[codex:299844] data=code[pc+1:pc+1+l]
[codex:299844] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:299844] pc+=1+l
[codex:299844] else:
[codex:299844] print(f\"{pc:04x}: {name}\")
[codex:299844] pc+=1
[codex:299844]
[codex:299844] print('disasm 0x018e-0x0310')
[codex:299844] disasm(0x018e,0x0310)
[codex:299844] PY" in /tmp/codex-multi-offn776v succeeded in 33ms:
[codex:299844] disasm 0x018e-0x0310
[codex:299844] 018e: JUMPDEST
[codex:299844] 018f: PUSH2 0x0311
[codex:299844] 0192: PUSH1 0x04
[codex:299844] 0194: DUP1
[codex:299844] 0195: CALLDATASIZE
[codex:299844] 0196: SUB
[codex:299844] 0197: DUP2
[codex:299844] 0198: ADD
[codex:299844] 0199: SWAP1
[codex:299844] 019a: DUP1
[codex:299844] 019b: DUP1
[codex:299844] 019c: CALLDATALOAD
[codex:299844] 019d: PUSH12 0xffffffffffffffffffffffff
[codex:299844] 01aa: NOT
[codex:299844] 01ab: AND
[codex:299844] 01ac: SWAP1
[codex:299844] 01ad: PUSH1 0x20
[codex:299844] 01af: ADD
[codex:299844] 01b0: SWAP1
[codex:299844]
[codex:299844] thinking
[codex:299844] **Analyzing decoder and security checks**
[codex:299844]
[codex:299844] This decoder handles many dynamic arrays, suggesting complex batch operations like multi-transfer or off-chain order settlement. I’m carefully comparing deposit and withdraw mappings to see if keys match user and token consistently, since mismatches could allow unauthorized withdrawals. Reviewing access controls and signature checks, I find no clear exploit paths or missing validations. The withdraw function’s signature verification looks robust, and no selfdestruct or delegatecall access issues appear. Given these deep checks and uncertainties around signature thresholds, I lean toward reporting no findings with a careful summary JSON. Let’s make sure to confirm no obvious flaws before finalizing.
[codex:299844] exec
[codex:299844] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-offn776v succeeded in 5ms:
[codex:299844] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:299844]
[codex:299844] thinking
[codex:299844] **Preparing final JSON output**
[codex:299844] codex
[codex:299844] {"no_findings":true,"summary":"Reviewed the runtime bytecode in `BYTECODE_BUNDLE.txt`; value-transfer CALLs appear gated by balance checks and caller/authorization logic, and no unprotected delegatecall/upgrade/selfdestruct or concrete withdrawal bypass was observable from bytecode alone.","findings":[]}
[codex:299844] tokens used
[codex:299844] 153,728
[codex:299844] {"no_findings":true,"summary":"Reviewed the runtime bytecode in `BYTECODE_BUNDLE.txt`; value-transfer CALLs appear gated by balance checks and caller/authorization logic, and no unprotected delegatecall/upgrade/selfdestruct or concrete withdrawal bypass was observable from bytecode alone.","findings":[]}
{
"codex": {
"ran_at": "2026-01-02T21:13:02.461762+00:00",
"returncode": 0
},
"summary": "Reviewed the runtime bytecode in `BYTECODE_BUNDLE.txt`; value-transfer CALLs appear gated by balance checks and caller/authorization logic, and no unprotected delegatecall/upgrade/selfdestruct or concrete withdrawal bypass was observable from bytecode alone.",
"raw_final": {
"summary": "Reviewed the runtime bytecode in `BYTECODE_BUNDLE.txt`; value-transfer CALLs appear gated by balance checks and caller/authorization logic, and no unprotected delegatecall/upgrade/selfdestruct or concrete withdrawal bypass was observable from bytecode alone.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x00ba 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000002e: SWAP1 0000002f: DIV 00000030: PUSH4 0xffffffff 00000035: AND 00000036: DUP1 00000037: PUSH4 0x061aad6e 0000003c: EQ 0000003d: PUSH2 0x00bf 00000040: JUMPI 00000041: DUP1 00000042: PUSH4 0x3dc17a52 00000047: EQ 00000048: PUSH2 0x018e 0000004b: JUMPI 0000004c: DUP1 0000004d: PUSH4 0x7eadebfe 00000052: EQ 00000053: PUSH2 0x0313 00000056: JUMPI 00000057: DUP1 00000058: PUSH4 0x7fb8b61e 0000005d: EQ 0000005e: PUSH2 0x036a 00000061: JUMPI 00000062: DUP1 00000063: PUSH4 0x8da5cb5b 00000068: EQ 00000069: PUSH2 0x03c1 0000006c: JUMPI 0000006d: DUP1 0000006e: PUSH4 0x9cf40c0b 00000073: EQ 00000074: PUSH2 0x0418 00000077: JUMPI 00000078: DUP1 00000079: PUSH4 0xa10d0960 0000007e: EQ 0000007f: PUSH2 0x046c 00000082: JUMPI 00000083: DUP1 00000084: PUSH4 0xa26e1186 00000089: EQ 0000008a: PUSH2 0x04ff 0000008d: JUMPI 0000008e: DUP1 0000008f: PUSH4 0xb99152d0 00000094: EQ 00000095: PUSH2 0x055b 00000098: JUMPI 00000099: DUP1 0000009a: PUSH4 0xe4860339 0000009f: EQ 000000a0: PUSH2 0x05b2 000000a3: JUMPI 000000a4: DUP1 000000a5: PUSH4 0xe5188f55 000000aa: EQ 000000ab: PUSH2 0x0609 000000ae: JUMPI 000000af: DUP1 000000b0: PUSH4 0xf2fde38b 000000b5: EQ 000000b6: PUSH2 0x0634 000000b9: JUMPI 000000ba: JUMPDEST 000000bb: PUSH1 0x00 000000bd: DUP1 000000be: REVERT 000000bf: JUMPDEST 000000c0: CALLVALUE 000000c1: DUP1 000000c2: ISZERO 000000c3: PUSH2 0x00cb 000000c6: JUMPI 000000c7: PUSH1 0x00 000000c9: DUP1 000000ca: REVERT 000000cb: JUMPDEST 000000cc: POP 000000cd: PUSH2 0x018c 000000d0: PUSH1 0x04 000000d2: DUP1 000000d3: CALLDATASIZE 000000d4: SUB 000000d5: DUP2 000000d6: ADD 000000d7: SWAP1 000000d8: DUP1 000000d9: DUP1 000000da: CALLDATALOAD 000000db: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000000f0: AND 000000f1: SWAP1 000000f2: PUSH1 0x20 000000f4: ADD 000000f5: SWAP1 000000f6: SWAP3 000000f7: SWAP2 000000f8: SWAP1 000000f9: DUP1 000000fa: CALLDATALOAD 000000fb: SWAP1 000000fc: PUSH1 0x20 000000fe: ADD 000000ff: SWAP1 00000100: DUP3 00000101: ADD 00000102: DUP1 00000103: CALLDATALOAD 00000104: SWAP1 00000105: PUSH1 0x20 00000107: ADD 00000108: SWAP1 00000109: DUP1 0000010a: DUP1 0000010b: PUSH1 0x1f 0000010d: ADD 0000010e: PUSH1 0x20 00000110: DUP1 00000111: SWAP2 00000112: DIV 00000113: MUL 00000114: PUSH1 0x20 00000116: ADD 00000117: PUSH1 0x40 00000119: MLOAD 0000011a: SWAP1 0000011b: DUP2 0000011c: ADD 0000011d: PUSH1 0x40 0000011f: MSTORE 00000120: DUP1 00000121: SWAP4 00000122: SWAP3 00000123: SWAP2 00000124: SWAP1 00000125: DUP2 00000126: DUP2 00000127: MSTORE 00000128: PUSH1 0x20 0000012a: ADD 0000012b: DUP4 0000012c: DUP4 0000012d: DUP1 0000012e: DUP3 0000012f: DUP5 00000130: CALLDATACOPY 00000131: DUP3 00000132: ADD 00000133: SWAP2 00000134: POP 00000135: POP 00000136: POP 00000137: POP 00000138: POP 00000139: POP 0000013a: SWAP2 0000013b: SWAP3 0000013c: SWAP2 0000013d: SWAP3 0000013e: SWAP1 0000013f: DUP1 00000140: CALLDATALOAD 00000141: SWAP1 00000142: PUSH1 0x20 00000144: ADD 00000145: SWAP1 00000146: DUP3 00000147: ADD 00000148: DUP1 00000149: CALLDATALOAD 0000014a: SWAP1 0000014b: PUSH1 0x20 0000014d: ADD 0000014e: SWAP1 0000014f: DUP1 00000150: DUP1 00000151: PUSH1 0x1f 00000153: ADD 00000154: PUSH1 0x20 00000156: DUP1 00000157: SWAP2 00000158: DIV 00000159: MUL 0000015a: PUSH1 0x20 0000015c: ADD 0000015d: PUSH1 0x40 0000015f: MLOAD 00000160: SWAP1 00000161: DUP2 00000162: ADD 00000163: PUSH1 0x40 00000165: MSTORE 00000166: DUP1 00000167: SWAP4 00000168: SWAP3 00000169: SWAP2 0000016a: SWAP1 0000016b: DUP2 0000016c: DUP2 0000016d: MSTORE 0000016e: PUSH1 0x20 00000170: ADD 00000171: DUP4 00000172: DUP4 00000173: DUP1 00000174: DUP3 00000175: DUP5 00000176: CALLDATACOPY 00000177: DUP3 00000178: ADD 00000179: SWAP2 0000017a: POP 0000017b: POP 0000017c: POP 0000017d: POP 0000017e: POP 0000017f: POP 00000180: SWAP2 00000181: SWAP3 00000182: SWAP2 00000183: SWAP3 00000184: SWAP1 00000185: POP 00000186: POP 00000187: POP 00000188: PUSH2 0x0677 0000018b: JUMP 0000018c: JUMPDEST 0000018d: STOP 0000018e: JUMPDEST 0000018f: PUSH2 0x0311 00000192: PUSH1 0x04 00000194: DUP1 00000195: CALLDATASIZE 00000196: SUB 00000197: DUP2 00000198: ADD 00000199: SWAP1 0000019a: DUP1 0000019b: DUP1 0000019c: CALLDATALOAD 0000019d: PUSH12 0xffffffffffffffffffffffff 000001aa: NOT 000001ab: AND 000001ac: SWAP1 000001ad: PUSH1 0x20 000001af: ADD 000001b0: SWAP1 000001b1: SWAP3 000001b2: SWAP2 000001b3: SWAP1 000001b4: DUP1 000001b5: CALLDATALOAD 000001b6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001cb: AND 000001cc: SWAP1 000001cd: PUSH1 0x20 000001cf: ADD 000001d0: SWAP1 000001d1: SWAP3 000001d2: SWAP2 000001d3: SWAP1 000001d4: DUP1 000001d5: CALLDATALOAD 000001d6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001eb: AND 000001ec: SWAP1 000001ed: PUSH1 0x20 000001ef: ADD 000001f0: SWAP1 000001f1: SWAP3 000001f2: SWAP2 000001f3: SWAP1 000001f4: DUP1 000001f5: CALLDATALOAD 000001f6: SWAP1 000001f7: PUSH1 0x20 000001f9: ADD 000001fa: SWAP1 000001fb: SWAP3 000001fc: SWAP2 000001fd: SWAP1 000001fe: DUP1 000001ff: CALLDATALOAD 00000200: SWAP1 00000201: PUSH1 0x20 00000203: ADD 00000204: SWAP1 00000205: DUP3 00000206: ADD 00000207: DUP1 00000208: CALLDATALOAD 00000209: SWAP1 0000020a: PUSH1 0x20 0000020c: ADD 0000020d: SWAP1 0000020e: DUP1 0000020f: DUP1 00000210: PUSH1 0x20 00000212: MUL 00000213: PUSH1 0x20 00000215: ADD 00000216: PUSH1 0x40 00000218: MLOAD 00000219: SWAP1 0000021a: DUP2 0000021b: ADD 0000021c: PUSH1 0x40 0000021e: MSTORE 0000021f: DUP1 00000220: SWAP4 00000221: SWAP3 00000222: SWAP2 00000223: SWAP1 00000224: DUP2 00000225: DUP2 00000226: MSTORE 00000227: PUSH1 0x20 00000229: ADD 0000022a: DUP4 0000022b: DUP4 0000022c: PUSH1 0x20 0000022e: MUL 0000022f: DUP1 00000230: DUP3 00000231: DUP5 00000232: CALLDATACOPY 00000233: DUP3 00000234: ADD 00000235: SWAP2 00000236: POP 00000237: POP 00000238: POP 00000239: POP 0000023a: POP 0000023b: POP 0000023c: SWAP2 0000023d: SWAP3 0000023e: SWAP2 0000023f: SWAP3 00000240: SWAP1 00000241: DUP1 00000242: CALLDATALOAD 00000243: SWAP1 00000244: PUSH1 0x20 00000246: ADD 00000247: SWAP1 00000248: DUP3 00000249: ADD 0000024a: DUP1 0000024b: CALLDATALOAD 0000024c: SWAP1 0000024d: PUSH1 0x20 0000024f: ADD 00000250: SWAP1 00000251: DUP1 00000252: DUP1 00000253: PUSH1 0x20 00000255: MUL 00000256: PUSH1 0x20 00000258: ADD 00000259: PUSH1 0x40 0000025b: MLOAD 0000025c: SWAP1 0000025d: DUP2 0000025e: ADD 0000025f: PUSH1 0x40 00000261: MSTORE 00000262: DUP1 00000263: SWAP4 00000264: SWAP3 00000265: SWAP2 00000266: SWAP1 00000267: DUP2 00000268: DUP2 00000269: MSTORE 0000026a: PUSH1 0x20 0000026c: ADD 0000026d: DUP4 0000026e: DUP4 0000026f: PUSH1 0x20 00000271: MUL 00000272: DUP1 00000273: DUP3 00000274: DUP5 00000275: CALLDATACOPY 00000276: DUP3 00000277: ADD 00000278: SWAP2 00000279: POP 0000027a: POP 0000027b: POP 0000027c: POP 0000027d: POP 0000027e: POP 0000027f: SWAP2 00000280: SWAP3 00000281: SWAP2 00000282: SWAP3 00000283: SWAP1 00000284: DUP1 00000285: CALLDATALOAD 00000286: SWAP1 00000287: PUSH1 0x20 00000289: ADD 0000028a: SWAP1 0000028b: DUP3 0000028c: ADD 0000028d: DUP1 0000028e: CALLDATALOAD 0000028f: SWAP1 00000290: PUSH1 0x20 00000292: ADD 00000293: SWAP1 00000294: DUP1 00000295: DUP1 00000296: PUSH1 0x20 00000298: MUL 00000299: PUSH1 0x20 0000029b: ADD 0000029c: PUSH1 0x40 0000029e: MLOAD 0000029f: SWAP1 000002a0: DUP2 000002a1: ADD 000002a2: PUSH1 0x40 000002a4: MSTORE 000002a5: DUP1 000002a6: SWAP4 000002a7: SWAP3 000002a8: SWAP2 000002a9: SWAP1 000002aa: DUP2 000002ab: DUP2 000002ac: MSTORE 000002ad: PUSH1 0x20 000002af: ADD 000002b0: DUP4 000002b1: DUP4 000002b2: PUSH1 0x20 000002b4: MUL 000002b5: DUP1 000002b6: DUP3 000002b7: DUP5 000002b8: CALLDATACOPY 000002b9: DUP3 000002ba: ADD 000002bb: SWAP2 000002bc: POP 000002bd: POP 000002be: POP 000002bf: POP 000002c0: POP 000002c1: POP 000002c2: SWAP2 000002c3: SWAP3 000002c4: SWAP2 000002c5: SWAP3 000002c6: SWAP1 000002c7: DUP1 000002c8: CALLDATALOAD 000002c9: SWAP1 000002ca: PUSH1 0x20 000002cc: ADD 000002cd: SWAP1 000002ce: DUP3 000002cf: ADD 000002d0: DUP1 000002d1: CALLDATALOAD 000002d2: SWAP1 000002d3: PUSH1 0x20 000002d5: ADD 000002d6: SWAP1 000002d7: DUP1 000002d8: DUP1 000002d9: PUSH1 0x20 000002db: MUL 000002dc: PUSH1 0x20 000002de: ADD 000002df: PUSH1 0x40 000002e1: MLOAD 000002e2: SWAP1 000002e3: DUP2 000002e4: ADD 000002e5: PUSH1 0x40 000002e7: MSTORE 000002e8: DUP1 000002e9: SWAP4 000002ea: SWAP3 000002eb: SWAP2 000002ec: SWAP1 000002ed: DUP2 000002ee: DUP2 000002ef: MSTORE 000002f0: PUSH1 0x20 000002f2: ADD 000002f3: DUP4 000002f4: DUP4 000002f5: PUSH1 0x20 000002f7: MUL 000002f8: DUP1 000002f9: DUP3 000002fa: DUP5 000002fb: CALLDATACOPY 000002fc: DUP3 000002fd: ADD 000002fe: SWAP2 000002ff: POP 00000300: POP 00000301: POP 00000302: POP 00000303: POP 00000304: POP 00000305: SWAP2 00000306: SWAP3 00000307: SWAP2 00000308: SWAP3 00000309: SWAP1 0000030a: POP 0000030b: POP 0000030c: POP 0000030d: PUSH2 0x0b5b 00000310: JUMP 00000311: JUMPDEST 00000312: STOP 00000313: JUMPDEST 00000314: CALLVALUE 00000315: DUP1 00000316: ISZERO 00000317: PUSH2 0x031f 0000031a: JUMPI 0000031b: PUSH1 0x00 0000031d: DUP1 0000031e: REVERT 0000031f: JUMPDEST 00000320: POP 00000321: PUSH2 0x0354 00000324: PUSH1 0x04 00000326: DUP1 00000327: CALLDATASIZE 00000328: SUB 00000329: DUP2 0000032a: ADD 0000032b: SWAP1 0000032c: DUP1 0000032d: DUP1 0000032e: CALLDATALOAD 0000032f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000344: AND 00000345: SWAP1 00000346: PUSH1 0x20 00000348: ADD 00000349: SWAP1 0000034a: SWAP3 0000034b: SWAP2 0000034c: SWAP1 0000034d: POP 0000034e: POP 0000034f: POP 00000350: PUSH2 0x1017 00000353: JUMP 00000354: JUMPDEST 00000355: PUSH1 0x40 00000357: MLOAD 00000358: DUP1 00000359: DUP3 0000035a: DUP2 0000035b: MSTORE 0000035c: PUSH1 0x20 0000035e: ADD 0000035f: SWAP2 00000360: POP 00000361: POP 00000362: PUSH1 0x40 00000364: MLOAD 00000365: DUP1 00000366: SWAP2 00000367: SUB 00000368: SWAP1 00000369: RETURN 0000036a: JUMPDEST 0000036b: CALLVALUE 0000036c: DUP1 0000036d: ISZERO 0000036e: PUSH2 0x0376 00000371: JUMPI 00000372: PUSH1 0x00 00000374: DUP1 00000375: REVERT 00000376: JUMPDEST 00000377: POP 00000378: PUSH2 0x03ab 0000037b: PUSH1 0x04 0000037d: DUP1 0000037e: CALLDATASIZE 0000037f: SUB 00000380: DUP2 00000381: ADD 00000382: SWAP1 00000383: DUP1 00000384: DUP1 00000385: CALLDATALOAD 00000386: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000039b: AND 0000039c: SWAP1 0000039d: PUSH1 0x20 0000039f: ADD 000003a0: SWAP1 000003a1: SWAP3 000003a2: SWAP2 000003a3: SWAP1 000003a4: POP 000003a5: POP 000003a6: POP 000003a7: PUSH2 0x102f 000003aa: JUMP 000003ab: JUMPDEST 000003ac: PUSH1 0x40 000003ae: MLOAD 000003af: DUP1 000003b0: DUP3 000003b1: DUP2 000003b2: MSTORE 000003b3: PUSH1 0x20 000003b5: ADD 000003b6: SWAP2 000003b7: POP 000003b8: POP 000003b9: PUSH1 0x40 000003bb: MLOAD 000003bc: DUP1 000003bd: SWAP2 000003be: SUB 000003bf: SWAP1 000003c0: RETURN 000003c1: JUMPDEST 000003c2: CALLVALUE 000003c3: DUP1 000003c4: ISZERO 000003c5: PUSH2 0x03cd 000003c8: JUMPI 000003c9: PUSH1 0x00 000003cb: DUP1 000003cc: REVERT 000003cd: JUMPDEST 000003ce: POP 000003cf: PUSH2 0x03d6 000003d2: PUSH2 0x1078 000003d5: JUMP 000003d6: JUMPDEST 000003d7: PUSH1 0x40 000003d9: MLOAD 000003da: DUP1 000003db: DUP3 000003dc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003f1: AND 000003f2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000407: AND 00000408: DUP2 00000409: MSTORE 0000040a: PUSH1 0x20 0000040c: ADD 0000040d: SWAP2 0000040e: POP 0000040f: POP 00000410: PUSH1 0x40 00000412: MLOAD 00000413: DUP1 00000414: SWAP2 00000415: SUB 00000416: SWAP1 00000417: RETURN 00000418: JUMPDEST 00000419: CALLVALUE 0000041a: DUP1 0000041b: ISZERO 0000041c: PUSH2 0x0424 0000041f: JUMPI 00000420: PUSH1 0x00 00000422: DUP1 00000423: REVERT 00000424: JUMPDEST 00000425: POP 00000426: PUSH2 0x0452 00000429: PUSH1 0x04 0000042b: DUP1 0000042c: CALLDATASIZE 0000042d: SUB 0000042e: DUP2 0000042f: ADD 00000430: SWAP1 00000431: DUP1 00000432: DUP1 00000433: CALLDATALOAD 00000434: PUSH12 0xffffffffffffffffffffffff 00000441: NOT 00000442: AND 00000443: SWAP1 00000444: PUSH1 0x20 00000446: ADD 00000447: SWAP1 00000448: SWAP3 00000449: SWAP2 0000044a: SWAP1 0000044b: POP 0000044c: POP 0000044d: POP 0000044e: PUSH2 0x109d 00000451: JUMP 00000452: JUMPDEST 00000453: PUSH1 0x40 00000455: MLOAD 00000456: DUP1 00000457: DUP3 00000458: ISZERO 00000459: ISZERO 0000045a: ISZERO 0000045b: ISZERO 0000045c: DUP2 0000045d: MSTORE 0000045e: PUSH1 0x20 00000460: ADD 00000461: SWAP2 00000462: POP 00000463: POP 00000464: PUSH1 0x40 00000466: MLOAD 00000467: DUP1 00000468: SWAP2 00000469: SUB 0000046a: SWAP1 0000046b: RETURN 0000046c: JUMPDEST 0000046d: CALLVALUE 0000046e: DUP1 0000046f: ISZERO 00000470: PUSH2 0x0478 00000473: JUMPI 00000474: PUSH1 0x00 00000476: DUP1 00000477: REVERT 00000478: JUMPDEST 00000479: POP 0000047a: PUSH2 0x04fd 0000047d: PUSH1 0x04 0000047f: DUP1 00000480: CALLDATASIZE 00000481: SUB 00000482: DUP2 00000483: ADD 00000484: SWAP1 00000485: DUP1 00000486: DUP1 00000487: CALLDATALOAD 00000488: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000049d: AND 0000049e: SWAP1 0000049f: PUSH1 0x20 000004a1: ADD 000004a2: SWAP1 000004a3: SWAP3 000004a4: SWAP2 000004a5: SWAP1 000004a6: DUP1 000004a7: CALLDATALOAD 000004a8: SWAP1 000004a9: PUSH1 0x20 000004ab: ADD 000004ac: SWAP1 000004ad: SWAP3 000004ae: SWAP2 000004af: SWAP1 000004b0: DUP1 000004b1: CALLDATALOAD 000004b2: SWAP1 000004b3: PUSH1 0x20 000004b5: ADD 000004b6: SWAP1 000004b7: DUP3 000004b8: ADD 000004b9: DUP1 000004ba: CALLDATALOAD 000004bb: SWAP1 000004bc: PUSH1 0x20 000004be: ADD 000004bf: SWAP1 000004c0: DUP1 000004c1: DUP1 000004c2: PUSH1 0x1f 000004c4: ADD 000004c5: PUSH1 0x20 000004c7: DUP1 000004c8: SWAP2 000004c9: DIV 000004ca: MUL 000004cb: PUSH1 0x20 000004cd: ADD 000004ce: PUSH1 0x40 000004d0: MLOAD 000004d1: SWAP1 000004d2: DUP2 000004d3: ADD 000004d4: PUSH1 0x40 000004d6: MSTORE 000004d7: DUP1 000004d8: SWAP4 000004d9: SWAP3 000004da: SWAP2 000004db: SWAP1 000004dc: DUP2 000004dd: DUP2 000004de: MSTORE 000004df: PUSH1 0x20 000004e1: ADD 000004e2: DUP4 000004e3: DUP4 000004e4: DUP1 000004e5: DUP3 000004e6: DUP5 000004e7: CALLDATACOPY 000004e8: DUP3 000004e9: ADD 000004ea: SWAP2 000004eb: POP 000004ec: POP 000004ed: POP 000004ee: POP 000004ef: POP 000004f0: POP 000004f1: SWAP2 000004f2: SWAP3 000004f3: SWAP2 000004f4: SWAP3 000004f5: SWAP1 000004f6: POP 000004f7: POP 000004f8: POP 000004f9: PUSH2 0x10bd 000004fc: JUMP 000004fd: JUMPDEST 000004fe: STOP 000004ff: JUMPDEST 00000500: PUSH2 0x0559 00000503: PUSH1 0x04 00000505: DUP1 00000506: CALLDATASIZE 00000507: SUB 00000508: DUP2 00000509: ADD 0000050a: SWAP1 0000050b: DUP1 0000050c: DUP1 0000050d: CALLDATALOAD 0000050e: SWAP1 0000050f: PUSH1 0x20 00000511: ADD 00000512: SWAP1 00000513: DUP3 00000514: ADD 00000515: DUP1 00000516: CALLDATALOAD 00000517: SWAP1 00000518: PUSH1 0x20 0000051a: ADD 0000051b: SWAP1 0000051c: DUP1 0000051d: DUP1 0000051e: PUSH1 0x1f 00000520: ADD 00000521: PUSH1 0x20 00000523: DUP1 00000524: SWAP2 00000525: DIV 00000526: MUL 00000527: PUSH1 0x20 00000529: ADD 0000052a: PUSH1 0x40 0000052c: MLOAD 0000052d: SWAP1 0000052e: DUP2 0000052f: ADD 00000530: PUSH1 0x40 00000532: MSTORE 00000533: DUP1 00000534: SWAP4 00000535: SWAP3 00000536: SWAP2 00000537: SWAP1 00000538: DUP2 00000539: DUP2 0000053a: MSTORE 0000053b: PUSH1 0x20 0000053d: ADD 0000053e: DUP4 0000053f: DUP4 00000540: DUP1 00000541: DUP3 00000542: DUP5 00000543: CALLDATACOPY 00000544: DUP3 00000545: ADD 00000546: SWAP2 00000547: POP 00000548: POP 00000549: POP 0000054a: POP 0000054b: POP 0000054c: POP 0000054d: SWAP2 0000054e: SWAP3 0000054f: SWAP2 00000550: SWAP3 00000551: SWAP1 00000552: POP 00000553: POP 00000554: POP 00000555: PUSH2 0x13b1 00000558: JUMP 00000559: JUMPDEST 0000055a: STOP 0000055b: JUMPDEST 0000055c: CALLVALUE 0000055d: DUP1 0000055e: ISZERO 0000055f: PUSH2 0x0567 00000562: JUMPI 00000563: PUSH1 0x00 00000565: DUP1 00000566: REVERT 00000567: JUMPDEST 00000568: POP 00000569: PUSH2 0x059c 0000056c: PUSH1 0x04 0000056e: DUP1 0000056f: CALLDATASIZE 00000570: SUB 00000571: DUP2 00000572: ADD 00000573: SWAP1 00000574: DUP1 00000575: DUP1 00000576: CALLDATALOAD 00000577: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000058c: AND 0000058d: SWAP1 0000058e: PUSH1 0x20 00000590: ADD 00000591: SWAP1 00000592: SWAP3 00000593: SWAP2 00000594: SWAP1 00000595: POP 00000596: POP 00000597: POP 00000598: PUSH2 0x154f 0000059b: JUMP 0000059c: JUMPDEST 0000059d: PUSH1 0x40 0000059f: MLOAD 000005a0: DUP1 000005a1: DUP3 000005a2: DUP2 000005a3: MSTORE 000005a4: PUSH1 0x20 000005a6: ADD 000005a7: SWAP2 000005a8: POP 000005a9: POP 000005aa: PUSH1 0x40 000005ac: MLOAD 000005ad: DUP1 000005ae: SWAP2 000005af: SUB 000005b0: SWAP1 000005b1: RETURN 000005b2: JUMPDEST 000005b3: CALLVALUE 000005b4: DUP1 000005b5: ISZERO 000005b6: PUSH2 0x05be 000005b9: JUMPI 000005ba: PUSH1 0x00 000005bc: DUP1 000005bd: REVERT 000005be: JUMPDEST 000005bf: POP 000005c0: PUSH2 0x05f3 000005c3: PUSH1 0x04 000005c5: DUP1 000005c6: CALLDATASIZE 000005c7: SUB 000005c8: DUP2 000005c9: ADD 000005ca: SWAP1 000005cb: DUP1 000005cc: DUP1 000005cd: CALLDATALOAD 000005ce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000005e3: AND 000005e4: SWAP1 000005e5: PUSH1 0x20 000005e7: ADD 000005e8: SWAP1 000005e9: SWAP3 000005ea: SWAP2 000005eb: SWAP1 000005ec: POP 000005ed: POP 000005ee: POP 000005ef: PUSH2 0x1598 000005f2: JUMP 000005f3: JUMPDEST 000005f4: PUSH1 0x40 000005f6: MLOAD 000005f7: DUP1 000005f8: DUP3 000005f9: DUP2 000005fa: MSTORE 000005fb: PUSH1 0x20 000005fd: ADD 000005fe: SWAP2 000005ff: POP 00000600: POP 00000601: PUSH1 0x40 00000603: MLOAD 00000604: DUP1 00000605: SWAP2 00000606: SUB 00000607: SWAP1 00000608: RETURN 00000609: JUMPDEST 0000060a: CALLVALUE 0000060b: DUP1 0000060c: ISZERO 0000060d: PUSH2 0x0615 00000610: JUMPI 00000611: PUSH1 0x00 00000613: DUP1 00000614: REVERT 00000615: JUMPDEST 00000616: POP 00000617: PUSH2 0x061e 0000061a: PUSH2 0x15b0 0000061d: JUMP 0000061e: JUMPDEST 0000061f: PUSH1 0x40 00000621: MLOAD 00000622: DUP1 00000623: DUP3 00000624: DUP2 00000625: MSTORE 00000626: PUSH1 0x20 00000628: ADD 00000629: SWAP2 0000062a: POP 0000062b: POP 0000062c: PUSH1 0x40 0000062e: MLOAD 0000062f: DUP1 00000630: SWAP2 00000631: SUB 00000632: SWAP1 00000633: RETURN 00000634: JUMPDEST 00000635: CALLVALUE 00000636: DUP1 00000637: ISZERO 00000638: PUSH2 0x0640 0000063b: JUMPI 0000063c: PUSH1 0x00 0000063e: DUP1 0000063f: REVERT 00000640: JUMPDEST 00000641: POP 00000642: PUSH2 0x0675 00000645: PUSH1 0x04 00000647: DUP1 00000648: CALLDATASIZE 00000649: SUB 0000064a: DUP2 0000064b: ADD 0000064c: SWAP1 0000064d: DUP1 0000064e: DUP1 0000064f: CALLDATALOAD 00000650: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000665: AND 00000666: SWAP1 00000667: PUSH1 0x20 00000669: ADD 0000066a: SWAP1 0000066b: SWAP3 0000066c: SWAP2 0000066d: SWAP1 0000066e: POP 0000066f: POP 00000670: POP 00000671: PUSH2 0x15b6 00000674: JUMP 00000675: JUMPDEST 00000676: STOP 00000677: JUMPDEST 00000678: PUSH32 0x79470ec3f0acdfeae4153985471320f445a530e87c30c39c25b0eaf088c6dc22 00000699: CALLER 0000069a: DUP4 0000069b: DUP6 0000069c: DUP7 0000069d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006b2: AND 000006b3: PUSH4 0x95d89b41 000006b8: PUSH1 0x40 000006ba: MLOAD 000006bb: DUP2 000006bc: PUSH4 0xffffffff 000006c1: AND 000006c2: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 000006e0: MUL 000006e1: DUP2 000006e2: MSTORE 000006e3: PUSH1 0x04 000006e5: ADD 000006e6: PUSH1 0x00 000006e8: PUSH1 0x40 000006ea: MLOAD 000006eb: DUP1 000006ec: DUP4 000006ed: SUB 000006ee: DUP2 000006ef: PUSH1 0x00 000006f1: DUP8 000006f2: DUP1 000006f3: EXTCODESIZE 000006f4: ISZERO 000006f5: DUP1 000006f6: ISZERO 000006f7: PUSH2 0x06ff 000006fa: JUMPI 000006fb: PUSH1 0x00 000006fd: DUP1 000006fe: REVERT 000006ff: JUMPDEST 00000700: POP 00000701: GAS 00000702: CALL 00000703: ISZERO 00000704: DUP1 00000705: ISZERO 00000706: PUSH2 0x0713 00000709: JUMPI 0000070a: RETURNDATASIZE 0000070b: PUSH1 0x00 0000070d: DUP1 0000070e: RETURNDATACOPY 0000070f: RETURNDATASIZE 00000710: PUSH1 0x00 00000712: REVERT 00000713: JUMPDEST 00000714: POP 00000715: POP 00000716: POP 00000717: POP 00000718: PUSH1 0x40 0000071a: MLOAD 0000071b: RETURNDATASIZE 0000071c: PUSH1 0x00 0000071e: DUP3 0000071f: RETURNDATACOPY 00000720: RETURNDATASIZE 00000721: PUSH1 0x1f 00000723: NOT 00000724: PUSH1 0x1f 00000726: DUP3 00000727: ADD 00000728: AND 00000729: DUP3 0000072a: ADD 0000072b: DUP1 0000072c: PUSH1 0x40 0000072e: MSTORE 0000072f: POP 00000730: PUSH1 0x20 00000732: DUP2 00000733: LT 00000734: ISZERO 00000735: PUSH2 0x073d 00000738: JUMPI 00000739: PUSH1 0x00 0000073b: DUP1 0000073c: REVERT 0000073d: JUMPDEST 0000073e: DUP2 0000073f: ADD 00000740: SWAP1 00000741: DUP1 00000742: DUP1 00000743: MLOAD 00000744: PUSH5 0x0100000000 0000074a: DUP2 0000074b: GT 0000074c: ISZERO 0000074d: PUSH2 0x0755 00000750: JUMPI 00000751: PUSH1 0x00 00000753: DUP1 00000754: REVERT 00000755: JUMPDEST 00000756: DUP3 00000757: DUP2 00000758: ADD 00000759: SWAP1 0000075a: POP 0000075b: PUSH1 0x20 0000075d: DUP2 0000075e: ADD 0000075f: DUP5 00000760: DUP2 00000761: GT 00000762: ISZERO 00000763: PUSH2 0x076b 00000766: JUMPI 00000767: PUSH1 0x00 00000769: DUP1 0000076a: REVERT 0000076b: JUMPDEST 0000076c: DUP2 0000076d: MLOAD 0000076e: DUP6 0000076f: PUSH1 0x01 00000771: DUP3 00000772: MUL 00000773: DUP4 00000774: ADD 00000775: GT 00000776: PUSH5 0x0100000000 0000077c: DUP3 0000077d: GT 0000077e: OR 0000077f: ISZERO 00000780: PUSH2 0x0788 00000783: JUMPI 00000784: PUSH1 0x00 00000786: DUP1 00000787: REVERT 00000788: JUMPDEST 00000789: POP 0000078a: POP 0000078b: SWAP3 0000078c: SWAP2 0000078d: SWAP1 0000078e: POP 0000078f: POP 00000790: POP 00000791: DUP8 00000792: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007a7: AND 000007a8: PUSH4 0x06fdde03 000007ad: PUSH1 0x40 000007af: MLOAD 000007b0: DUP2 000007b1: PUSH4 0xffffffff 000007b6: AND 000007b7: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 000007d5: MUL 000007d6: DUP2 000007d7: MSTORE 000007d8: PUSH1 0x04 000007da: ADD 000007db: PUSH1 0x00 000007dd: PUSH1 0x40 000007df: MLOAD 000007e0: DUP1 000007e1: DUP4 000007e2: SUB 000007e3: DUP2 000007e4: PUSH1 0x00 000007e6: DUP8 000007e7: DUP1 000007e8: EXTCODESIZE 000007e9: ISZERO 000007ea: DUP1 000007eb: ISZERO 000007ec: PUSH2 0x07f4 000007ef: JUMPI 000007f0: PUSH1 0x00 000007f2: DUP1 000007f3: REVERT 000007f4: JUMPDEST 000007f5: POP 000007f6: GAS 000007f7: CALL 000007f8: ISZERO 000007f9: DUP1 000007fa: ISZERO 000007fb: PUSH2 0x0808 000007fe: JUMPI 000007ff: RETURNDATASIZE 00000800: PUSH1 0x00 00000802: DUP1 00000803: RETURNDATACOPY 00000804: RETURNDATASIZE 00000805: PUSH1 0x00 00000807: REVERT 00000808: JUMPDEST 00000809: POP 0000080a: POP 0000080b: POP 0000080c: POP 0000080d: PUSH1 0x40 0000080f: MLOAD 00000810: RETURNDATASIZE 00000811: PUSH1 0x00 00000813: DUP3 00000814: RETURNDATACOPY 00000815: RETURNDATASIZE 00000816: PUSH1 0x1f 00000818: NOT 00000819: PUSH1 0x1f 0000081b: DUP3 0000081c: ADD 0000081d: AND 0000081e: DUP3 0000081f: ADD 00000820: DUP1 00000821: PUSH1 0x40 00000823: MSTORE 00000824: POP 00000825: PUSH1 0x20 00000827: DUP2 00000828: LT 00000829: ISZERO 0000082a: PUSH2 0x0832 0000082d: JUMPI 0000082e: PUSH1 0x00 00000830: DUP1 00000831: REVERT 00000832: JUMPDEST 00000833: DUP2 00000834: ADD 00000835: SWAP1 00000836: DUP1 00000837: DUP1 00000838: MLOAD 00000839: PUSH5 0x0100000000 0000083f: DUP2 00000840: GT 00000841: ISZERO 00000842: PUSH2 0x084a 00000845: JUMPI 00000846: PUSH1 0x00 00000848: DUP1 00000849: REVERT 0000084a: JUMPDEST 0000084b: DUP3 0000084c: DUP2 0000084d: ADD 0000084e: SWAP1 0000084f: POP 00000850: PUSH1 0x20 00000852: DUP2 00000853: ADD 00000854: DUP5 00000855: DUP2 00000856: GT 00000857: ISZERO 00000858: PUSH2 0x0860 0000085b: JUMPI 0000085c: PUSH1 0x00 0000085e: DUP1 0000085f: REVERT 00000860: JUMPDEST 00000861: DUP2 00000862: MLOAD 00000863: DUP6 00000864: PUSH1 0x01 00000866: DUP3 00000867: MUL 00000868: DUP4 00000869: ADD 0000086a: GT 0000086b: PUSH5 0x0100000000 00000871: DUP3 00000872: GT 00000873: OR 00000874: ISZERO 00000875: PUSH2 0x087d 00000878: JUMPI 00000879: PUSH1 0x00 0000087b: DUP1 0000087c: REVERT 0000087d: JUMPDEST 0000087e: POP 0000087f: POP 00000880: SWAP3 00000881: SWAP2 00000882: SWAP1 00000883: POP 00000884: POP 00000885: POP 00000886: DUP9 00000887: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000089c: AND 0000089d: PUSH4 0x313ce567 000008a2: PUSH1 0x40 000008a4: MLOAD 000008a5: DUP2 000008a6: PUSH4 0xffffffff 000008ab: AND 000008ac: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 000008ca: MUL 000008cb: DUP2 000008cc: MSTORE 000008cd: PUSH1 0x04 000008cf: ADD 000008d0: PUSH1 0x20 000008d2: PUSH1 0x40 000008d4: MLOAD 000008d5: DUP1 000008d6: DUP4 000008d7: SUB 000008d8: DUP2 000008d9: PUSH1 0x00 000008db: DUP8 000008dc: DUP1 000008dd: EXTCODESIZE 000008de: ISZERO 000008df: DUP1 000008e0: ISZERO 000008e1: PUSH2 0x08e9 000008e4: JUMPI 000008e5: PUSH1 0x00 000008e7: DUP1 000008e8: REVERT 000008e9: JUMPDEST 000008ea: POP 000008eb: GAS 000008ec: CALL 000008ed: ISZERO 000008ee: DUP1 000008ef: ISZERO 000008f0: PUSH2 0x08fd 000008f3: JUMPI 000008f4: RETURNDATASIZE 000008f5: PUSH1 0x00 000008f7: DUP1 000008f8: RETURNDATACOPY 000008f9: RETURNDATASIZE 000008fa: PUSH1 0x00 000008fc: REVERT 000008fd: JUMPDEST 000008fe: POP 000008ff: POP 00000900: POP 00000901: POP 00000902: PUSH1 0x40 00000904: MLOAD 00000905: RETURNDATASIZE 00000906: PUSH1 0x20 00000908: DUP2 00000909: LT 0000090a: ISZERO 0000090b: PUSH2 0x0913 0000090e: JUMPI 0000090f: PUSH1 0x00 00000911: DUP1 00000912: REVERT 00000913: JUMPDEST 00000914: DUP2 00000915: ADD 00000916: SWAP1 00000917: DUP1 00000918: DUP1 00000919: MLOAD 0000091a: SWAP1 0000091b: PUSH1 0x20 0000091d: ADD 0000091e: SWAP1 0000091f: SWAP3 00000920: SWAP2 00000921: SWAP1 00000922: POP 00000923: POP 00000924: POP 00000925: DUP8 00000926: PUSH1 0x40 00000928: MLOAD 00000929: DUP1 0000092a: DUP9 0000092b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000940: AND 00000941: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000956: AND 00000957: DUP2 00000958: MSTORE 00000959: PUSH1 0x20 0000095b: ADD 0000095c: DUP1 0000095d: PUSH1 0x20 0000095f: ADD 00000960: DUP8 00000961: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000976: AND 00000977: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000098c: AND 0000098d: DUP2 0000098e: MSTORE 0000098f: PUSH1 0x20 00000991: ADD 00000992: DUP1 00000993: PUSH1 0x20 00000995: ADD 00000996: DUP1 00000997: PUSH1 0x20 00000999: ADD 0000099a: DUP7 0000099b: PUSH1 0xff 0000099d: AND 0000099e: PUSH1 0xff 000009a0: AND 000009a1: DUP2 000009a2: MSTORE 000009a3: PUSH1 0x20 000009a5: ADD 000009a6: DUP1 000009a7: PUSH1 0x20 000009a9: ADD 000009aa: DUP6 000009ab: DUP2 000009ac: SUB 000009ad: DUP6 000009ae: MSTORE 000009af: DUP12 000009b0: DUP2 000009b1: DUP2 000009b2: MLOAD 000009b3: DUP2 000009b4: MSTORE 000009b5: PUSH1 0x20 000009b7: ADD 000009b8: SWAP2 000009b9: POP 000009ba: DUP1 000009bb: MLOAD 000009bc: SWAP1 000009bd: PUSH1 0x20 000009bf: ADD 000009c0: SWAP1 000009c1: DUP1 000009c2: DUP4 000009c3: DUP4 000009c4: PUSH1 0x00 000009c6: JUMPDEST 000009c7: DUP4 000009c8: DUP2 000009c9: LT 000009ca: ISZERO 000009cb: PUSH2 0x09e1 000009ce: JUMPI 000009cf: DUP1 000009d0: DUP3 000009d1: ADD 000009d2: MLOAD 000009d3: DUP2 000009d4: DUP5 000009d5: ADD 000009d6: MSTORE 000009d7: PUSH1 0x20 000009d9: DUP2 000009da: ADD 000009db: SWAP1 000009dc: POP 000009dd: PUSH2 0x09c6 000009e0: JUMP 000009e1: JUMPDEST 000009e2: POP 000009e3: POP 000009e4: POP 000009e5: POP 000009e6: SWAP1 000009e7: POP 000009e8: SWAP1 000009e9: DUP2 000009ea: ADD 000009eb: SWAP1 000009ec: PUSH1 0x1f 000009ee: AND 000009ef: DUP1 000009f0: ISZERO 000009f1: PUSH2 0x0a0e 000009f4: JUMPI 000009f5: DUP1 000009f6: DUP3 000009f7: SUB 000009f8: DUP1 000009f9: MLOAD 000009fa: PUSH1 0x01 000009fc: DUP4 000009fd: PUSH1 0x20 000009ff: SUB 00000a00: PUSH2 0x0100 00000a03: EXP 00000a04: SUB 00000a05: NOT 00000a06: AND 00000a07: DUP2 00000a08: MSTORE 00000a09: PUSH1 0x20 00000a0b: ADD 00000a0c: SWAP2 00000a0d: POP 00000a0e: JUMPDEST 00000a0f: POP 00000a10: DUP6 00000a11: DUP2 00000a12: SUB 00000a13: DUP5 00000a14: MSTORE 00000a15: DUP10 00000a16: DUP2 00000a17: DUP2 00000a18: MLOAD 00000a19: DUP2 00000a1a: MSTORE 00000a1b: PUSH1 0x20 00000a1d: ADD 00000a1e: SWAP2 00000a1f: POP 00000a20: DUP1 00000a21: MLOAD 00000a22: SWAP1 00000a23: PUSH1 0x20 00000a25: ADD 00000a26: SWAP1 00000a27: DUP1 00000a28: DUP4 00000a29: DUP4 00000a2a: PUSH1 0x00 00000a2c: JUMPDEST 00000a2d: DUP4 00000a2e: DUP2 00000a2f: LT 00000a30: ISZERO 00000a31: PUSH2 0x0a47 00000a34: JUMPI 00000a35: DUP1 00000a36: DUP3 00000a37: ADD 00000a38: MLOAD 00000a39: DUP2 00000a3a: DUP5 00000a3b: ADD 00000a3c: MSTORE 00000a3d: PUSH1 0x20 00000a3f: DUP2 00000a40: ADD 00000a41: SWAP1 00000a42: POP 00000a43: PUSH2 0x0a2c 00000a46: JUMP 00000a47: JUMPDEST 00000a48: POP 00000a49: POP 00000a4a: POP 00000a4b: POP 00000a4c: SWAP1 00000a4d: POP 00000a4e: SWAP1 00000a4f: DUP2 00000a50: ADD 00000a51: SWAP1 00000a52: PUSH1 0x1f 00000a54: AND 00000a55: DUP1 00000a56: ISZERO 00000a57: PUSH2 0x0a74 00000a5a: JUMPI 00000a5b: DUP1 00000a5c: DUP3 00000a5d: SUB 00000a5e: DUP1 00000a5f: MLOAD 00000a60: PUSH1 0x01 00000a62: DUP4 00000a63: PUSH1 0x20 00000a65: SUB 00000a66: PUSH2 0x0100 00000a69: EXP 00000a6a: SUB 00000a6b: NOT 00000a6c: AND 00000a6d: DUP2 00000a6e: MSTORE 00000a6f: PUSH1 0x20 00000a71: ADD 00000a72: SWAP2 00000a73: POP 00000a74: JUMPDEST 00000a75: POP 00000a76: DUP6 00000a77: DUP2 00000a78: SUB 00000a79: DUP4 00000a7a: MSTORE 00000a7b: DUP9 00000a7c: DUP2 00000a7d: DUP2 00000a7e: MLOAD 00000a7f: DUP2 00000a80: MSTORE 00000a81: PUSH1 0x20 00000a83: ADD 00000a84: SWAP2 00000a85: POP 00000a86: DUP1 00000a87: MLOAD 00000a88: SWAP1 00000a89: PUSH1 0x20 00000a8b: ADD 00000a8c: SWAP1 00000a8d: DUP1 00000a8e: DUP4 00000a8f: DUP4 00000a90: PUSH1 0x00 00000a92: JUMPDEST 00000a93: DUP4 00000a94: DUP2 00000a95: LT 00000a96: ISZERO 00000a97: PUSH2 0x0aad 00000a9a: JUMPI 00000a9b: DUP1 00000a9c: DUP3 00000a9d: ADD 00000a9e: MLOAD 00000a9f: DUP2 00000aa0: DUP5 00000aa1: ADD 00000aa2: MSTORE 00000aa3: PUSH1 0x20 00000aa5: DUP2 00000aa6: ADD 00000aa7: SWAP1 00000aa8: POP 00000aa9: PUSH2 0x0a92 00000aac: JUMP 00000aad: JUMPDEST 00000aae: POP 00000aaf: POP 00000ab0: POP 00000ab1: POP 00000ab2: SWAP1 00000ab3: POP 00000ab4: SWAP1 00000ab5: DUP2 00000ab6: ADD 00000ab7: SWAP1 00000ab8: PUSH1 0x1f 00000aba: AND 00000abb: DUP1 00000abc: ISZERO 00000abd: PUSH2 0x0ada 00000ac0: JUMPI 00000ac1: DUP1 00000ac2: DUP3 00000ac3: SUB 00000ac4: DUP1 00000ac5: MLOAD 00000ac6: PUSH1 0x01 00000ac8: DUP4 00000ac9: PUSH1 0x20 00000acb: SUB 00000acc: PUSH2 0x0100 00000acf: EXP 00000ad0: SUB 00000ad1: NOT 00000ad2: AND 00000ad3: DUP2 00000ad4: MSTORE 00000ad5: PUSH1 0x20 00000ad7: ADD 00000ad8: SWAP2 00000ad9: POP 00000ada: JUMPDEST 00000adb: POP 00000adc: DUP6 00000add: DUP2 00000ade: SUB 00000adf: DUP3 00000ae0: MSTORE 00000ae1: DUP7 00000ae2: DUP2 00000ae3: DUP2 00000ae4: MLOAD 00000ae5: DUP2 00000ae6: MSTORE 00000ae7: PUSH1 0x20 00000ae9: ADD 00000aea: SWAP2 00000aeb: POP 00000aec: DUP1 00000aed: MLOAD 00000aee: SWAP1 00000aef: PUSH1 0x20 00000af1: ADD 00000af2: SWAP1 00000af3: DUP1 00000af4: DUP4 00000af5: DUP4 00000af6: PUSH1 0x00 00000af8: JUMPDEST 00000af9: DUP4 00000afa: DUP2 00000afb: LT 00000afc: ISZERO 00000afd: PUSH2 0x0b13 00000b00: JUMPI 00000b01: DUP1 00000b02: DUP3 00000b03: ADD 00000b04: MLOAD 00000b05: DUP2 00000b06: DUP5 00000b07: ADD 00000b08: MSTORE 00000b09: PUSH1 0x20 00000b0b: DUP2 00000b0c: ADD 00000b0d: SWAP1 00000b0e: POP 00000b0f: PUSH2 0x0af8 00000b12: JUMP 00000b13: JUMPDEST 00000b14: POP 00000b15: POP 00000b16: POP 00000b17: POP 00000b18: SWAP1 00000b19: POP 00000b1a: SWAP1 00000b1b: DUP2 00000b1c: ADD 00000b1d: SWAP1 00000b1e: PUSH1 0x1f 00000b20: AND 00000b21: DUP1 00000b22: ISZERO 00000b23: PUSH2 0x0b40 00000b26: JUMPI 00000b27: DUP1 00000b28: DUP3 00000b29: SUB 00000b2a: DUP1 00000b2b: MLOAD 00000b2c: PUSH1 0x01 00000b2e: DUP4 00000b2f: PUSH1 0x20 00000b31: SUB 00000b32: PUSH2 0x0100 00000b35: EXP 00000b36: SUB 00000b37: NOT 00000b38: AND 00000b39: DUP2 00000b3a: MSTORE 00000b3b: PUSH1 0x20 00000b3d: ADD 00000b3e: SWAP2 00000b3f: POP 00000b40: JUMPDEST 00000b41: POP 00000b42: SWAP12 00000b43: POP 00000b44: POP 00000b45: POP 00000b46: POP 00000b47: POP 00000b48: POP 00000b49: POP 00000b4a: POP 00000b4b: POP 00000b4c: POP 00000b4d: POP 00000b4e: POP 00000b4f: PUSH1 0x40 00000b51: MLOAD 00000b52: DUP1 00000b53: SWAP2 00000b54: SUB 00000b55: SWAP1 00000b56: LOG1 00000b57: POP 00000b58: POP 00000b59: POP 00000b5a: JUMP 00000b5b: JUMPDEST 00000b5c: PUSH1 0x00 00000b5e: DUP1 00000b5f: PUSH1 0x00 00000b61: DUP1 00000b62: PUSH1 0x00 00000b64: ADDRESS 00000b65: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b7a: AND 00000b7b: DUP13 00000b7c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b91: AND 00000b92: EQ 00000b93: ISZERO 00000b94: ISZERO 00000b95: ISZERO 00000b96: PUSH2 0x0b9e 00000b99: JUMPI 00000b9a: PUSH1 0x00 00000b9c: DUP1 00000b9d: REVERT 00000b9e: JUMPDEST 00000b9f: PUSH1 0x00 00000ba1: DUP11 00000ba2: GT 00000ba3: ISZERO 00000ba4: ISZERO 00000ba5: PUSH2 0x0bad 00000ba8: JUMPI 00000ba9: PUSH1 0x00 00000bab: DUP1 00000bac: REVERT 00000bad: JUMPDEST 00000bae: PUSH1 0x00 00000bb0: ISZERO 00000bb1: ISZERO 00000bb2: PUSH1 0x04 00000bb4: PUSH1 0x00 00000bb6: DUP16 00000bb7: PUSH12 0xffffffffffffffffffffffff 00000bc4: NOT 00000bc5: AND 00000bc6: PUSH12 0xffffffffffffffffffffffff 00000bd3: NOT 00000bd4: AND 00000bd5: DUP2 00000bd6: MSTORE 00000bd7: PUSH1 0x20 00000bd9: ADD 00000bda: SWAP1 00000bdb: DUP2 00000bdc: MSTORE 00000bdd: PUSH1 0x20 00000bdf: ADD 00000be0: PUSH1 0x00 00000be2: KECCAK256 00000be3: PUSH1 0x00 00000be5: SWAP1 00000be6: SLOAD 00000be7: SWAP1 00000be8: PUSH2 0x0100 00000beb: EXP 00000bec: SWAP1 00000bed: DIV 00000bee: PUSH1 0xff 00000bf0: AND 00000bf1: ISZERO 00000bf2: ISZERO 00000bf3: EQ 00000bf4: ISZERO 00000bf5: ISZERO 00000bf6: PUSH2 0x0bfe 00000bf9: JUMPI 00000bfa: PUSH1 0x00 00000bfc: DUP1 00000bfd: REVERT 00000bfe: JUMPDEST 00000bff: DUP11 00000c00: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c15: AND 00000c16: CALLER 00000c17: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c2c: AND 00000c2d: EQ 00000c2e: ISZERO 00000c2f: ISZERO 00000c30: PUSH2 0x0c38 00000c33: JUMPI 00000c34: PUSH1 0x00 00000c36: DUP1 00000c37: REVERT 00000c38: JUMPDEST 00000c39: PUSH1 0x00 00000c3b: SWAP5 00000c3c: POP 00000c3d: PUSH1 0x00 00000c3f: SWAP4 00000c40: POP 00000c41: PUSH1 0x00 00000c43: SWAP5 00000c44: POP 00000c45: JUMPDEST 00000c46: DUP9 00000c47: MLOAD 00000c48: DUP6 00000c49: LT 00000c4a: ISZERO 00000c4b: PUSH2 0x0cde 00000c4e: JUMPI 00000c4f: PUSH1 0x01 00000c51: DUP6 00000c52: ADD 00000c53: SWAP4 00000c54: POP 00000c55: JUMPDEST 00000c56: DUP9 00000c57: MLOAD 00000c58: DUP5 00000c59: LT 00000c5a: ISZERO 00000c5b: PUSH2 0x0cd1 00000c5e: JUMPI 00000c5f: DUP9 00000c60: DUP5 00000c61: DUP2 00000c62: MLOAD 00000c63: DUP2 00000c64: LT 00000c65: ISZERO 00000c66: ISZERO 00000c67: PUSH2 0x0c6c 00000c6a: JUMPI 00000c6b: INVALID 00000c6c: JUMPDEST 00000c6d: SWAP1 00000c6e: PUSH1 0x20 00000c70: ADD 00000c71: SWAP1 00000c72: PUSH1 0x20 00000c74: MUL 00000c75: ADD 00000c76: MLOAD 00000c77: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c8c: AND 00000c8d: DUP10 00000c8e: DUP7 00000c8f: DUP2 00000c90: MLOAD 00000c91: DUP2 00000c92: LT 00000c93: ISZERO 00000c94: ISZERO 00000c95: PUSH2 0x0c9a 00000c98: JUMPI 00000c99: INVALID 00000c9a: JUMPDEST 00000c9b: SWAP1 00000c9c: PUSH1 0x20 00000c9e: ADD 00000c9f: SWAP1 00000ca0: PUSH1 0x20 00000ca2: MUL 00000ca3: ADD 00000ca4: MLOAD 00000ca5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000cba: AND 00000cbb: EQ 00000cbc: ISZERO 00000cbd: ISZERO 00000cbe: ISZERO 00000cbf: PUSH2 0x0cc4 00000cc2: JUMPI 00000cc3: INVALID 00000cc4: JUMPDEST 00000cc5: DUP4 00000cc6: DUP1 00000cc7: PUSH1 0x01 00000cc9: ADD 00000cca: SWAP5 00000ccb: POP 00000ccc: POP 00000ccd: PUSH2 0x0c55 00000cd0: JUMP 00000cd1: JUMPDEST 00000cd2: DUP5 00000cd3: DUP1 00000cd4: PUSH1 0x01 00000cd6: ADD 00000cd7: SWAP6 00000cd8: POP 00000cd9: POP 00000cda: PUSH2 0x0c45 00000cdd: JUMP 00000cde: JUMPDEST 00000cdf: PUSH1 0x00 00000ce1: SWAP5 00000ce2: POP 00000ce3: JUMPDEST 00000ce4: DUP9 00000ce5: MLOAD 00000ce6: DUP6 00000ce7: LT 00000ce8: ISZERO 00000ce9: PUSH2 0x0ed3 00000cec: JUMPI 00000ced: DUP13 00000cee: DUP13 00000cef: DUP13 00000cf0: DUP13 00000cf1: PUSH1 0x40 00000cf3: MLOAD 00000cf4: DUP1 00000cf5: DUP6 00000cf6: PUSH12 0xffffffffffffffffffffffff 00000d03: NOT 00000d04: AND 00000d05: PUSH12 0xffffffffffffffffffffffff 00000d12: NOT 00000d13: AND 00000d14: DUP2 00000d15: MSTORE 00000d16: PUSH1 0x14 00000d18: ADD 00000d19: DUP5 00000d1a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d2f: AND 00000d30: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d45: AND 00000d46: PUSH13 0x01000000000000000000000000 00000d54: MUL 00000d55: DUP2 00000d56: MSTORE 00000d57: PUSH1 0x14 00000d59: ADD 00000d5a: DUP4 00000d5b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d70: AND 00000d71: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d86: AND 00000d87: PUSH13 0x01000000000000000000000000 00000d95: MUL 00000d96: DUP2 00000d97: MSTORE 00000d98: PUSH1 0x14 00000d9a: ADD 00000d9b: DUP3 00000d9c: DUP2 00000d9d: MSTORE 00000d9e: PUSH1 0x20 00000da0: ADD 00000da1: SWAP5 00000da2: POP 00000da3: POP 00000da4: POP 00000da5: POP 00000da6: POP 00000da7: PUSH1 0x40 00000da9: MLOAD 00000daa: DUP1 00000dab: SWAP2 00000dac: SUB 00000dad: SWAP1 00000dae: KECCAK256 00000daf: SWAP3 00000db0: POP 00000db1: PUSH1 0x01 00000db3: DUP4 00000db4: DUP8 00000db5: DUP8 00000db6: DUP2 00000db7: MLOAD 00000db8: DUP2 00000db9: LT 00000dba: ISZERO 00000dbb: ISZERO 00000dbc: PUSH2 0x0dc1 00000dbf: JUMPI 00000dc0: INVALID 00000dc1: JUMPDEST 00000dc2: SWAP1 00000dc3: PUSH1 0x20 00000dc5: ADD 00000dc6: SWAP1 00000dc7: PUSH1 0x20 00000dc9: MUL 00000dca: ADD 00000dcb: MLOAD 00000dcc: DUP11 00000dcd: DUP9 00000dce: DUP2 00000dcf: MLOAD 00000dd0: DUP2 00000dd1: LT 00000dd2: ISZERO 00000dd3: ISZERO 00000dd4: PUSH2 0x0dd9 00000dd7: JUMPI 00000dd8: INVALID 00000dd9: JUMPDEST 00000dda: SWAP1 00000ddb: PUSH1 0x20 00000ddd: ADD 00000dde: SWAP1 00000ddf: PUSH1 0x20 00000de1: MUL 00000de2: ADD 00000de3: MLOAD 00000de4: DUP11 00000de5: DUP10 00000de6: DUP2 00000de7: MLOAD 00000de8: DUP2 00000de9: LT 00000dea: ISZERO 00000deb: ISZERO 00000dec: PUSH2 0x0df1 00000def: JUMPI 00000df0: INVALID 00000df1: JUMPDEST 00000df2: SWAP1 00000df3: PUSH1 0x20 00000df5: ADD 00000df6: SWAP1 00000df7: PUSH1 0x20 00000df9: MUL 00000dfa: ADD 00000dfb: MLOAD 00000dfc: PUSH1 0x40 00000dfe: MLOAD 00000dff: PUSH1 0x00 00000e01: DUP2 00000e02: MSTORE 00000e03: PUSH1 0x20 00000e05: ADD 00000e06: PUSH1 0x40 00000e08: MSTORE 00000e09: PUSH1 0x40 00000e0b: MLOAD 00000e0c: DUP1 00000e0d: DUP6 00000e0e: PUSH1 0x00 00000e10: NOT 00000e11: AND 00000e12: PUSH1 0x00 00000e14: NOT 00000e15: AND 00000e16: DUP2 00000e17: MSTORE 00000e18: PUSH1 0x20 00000e1a: ADD 00000e1b: DUP5 00000e1c: PUSH1 0xff 00000e1e: AND 00000e1f: PUSH1 0xff 00000e21: AND 00000e22: DUP2 00000e23: MSTORE 00000e24: PUSH1 0x20 00000e26: ADD 00000e27: DUP4 00000e28: PUSH1 0x00 00000e2a: NOT 00000e2b: AND 00000e2c: PUSH1 0x00 00000e2e: NOT 00000e2f: AND 00000e30: DUP2 00000e31: MSTORE 00000e32: PUSH1 0x20 00000e34: ADD 00000e35: DUP3 00000e36: PUSH1 0x00 00000e38: NOT 00000e39: AND 00000e3a: PUSH1 0x00 00000e3c: NOT 00000e3d: AND 00000e3e: DUP2 00000e3f: MSTORE 00000e40: PUSH1 0x20 00000e42: ADD 00000e43: SWAP5 00000e44: POP 00000e45: POP 00000e46: POP 00000e47: POP 00000e48: POP 00000e49: PUSH1 0x20 00000e4b: PUSH1 0x40 00000e4d: MLOAD 00000e4e: PUSH1 0x20 00000e50: DUP2 00000e51: SUB 00000e52: SWAP1 00000e53: DUP1 00000e54: DUP5 00000e55: SUB 00000e56: SWAP1 00000e57: PUSH1 0x00 00000e59: DUP7 00000e5a: GAS 00000e5b: CALL 00000e5c: ISZERO 00000e5d: DUP1 00000e5e: ISZERO 00000e5f: PUSH2 0x0e6c 00000e62: JUMPI 00000e63: RETURNDATASIZE 00000e64: PUSH1 0x00 00000e66: DUP1 00000e67: RETURNDATACOPY 00000e68: RETURNDATASIZE 00000e69: PUSH1 0x00 00000e6b: REVERT 00000e6c: JUMPDEST 00000e6d: POP 00000e6e: POP 00000e6f: POP 00000e70: PUSH1 0x20 00000e72: PUSH1 0x40 00000e74: MLOAD 00000e75: SUB 00000e76: MLOAD 00000e77: SWAP2 00000e78: POP 00000e79: DUP2 00000e7a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e8f: AND 00000e90: DUP10 00000e91: DUP7 00000e92: DUP2 00000e93: MLOAD 00000e94: DUP2 00000e95: LT 00000e96: ISZERO 00000e97: ISZERO 00000e98: PUSH2 0x0e9d 00000e9b: JUMPI 00000e9c: INVALID 00000e9d: JUMPDEST 00000e9e: SWAP1 00000e9f: PUSH1 0x20 00000ea1: ADD 00000ea2: SWAP1 00000ea3: PUSH1 0x20 00000ea5: MUL 00000ea6: ADD 00000ea7: MLOAD 00000ea8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ebd: AND 00000ebe: EQ 00000ebf: ISZERO 00000ec0: ISZERO 00000ec1: PUSH2 0x0ec6 00000ec4: JUMPI 00000ec5: INVALID 00000ec6: JUMPDEST 00000ec7: DUP5 00000ec8: DUP1 00000ec9: PUSH1 0x01 00000ecb: ADD 00000ecc: SWAP6 00000ecd: POP 00000ece: POP 00000ecf: PUSH2 0x0ce3 00000ed2: JUMP 00000ed3: JUMPDEST 00000ed4: PUSH1 0x00 00000ed6: SWAP1 00000ed7: POP 00000ed8: PUSH1 0x00 00000eda: SWAP5 00000edb: POP 00000edc: JUMPDEST 00000edd: DUP9 00000ede: MLOAD 00000edf: DUP6 00000ee0: LT 00000ee1: ISZERO 00000ee2: PUSH2 0x0f5d 00000ee5: JUMPI 00000ee6: PUSH2 0x0f4e 00000ee9: PUSH1 0x02 00000eeb: PUSH1 0x00 00000eed: DUP12 00000eee: DUP9 00000eef: DUP2 00000ef0: MLOAD 00000ef1: DUP2 00000ef2: LT 00000ef3: ISZERO 00000ef4: ISZERO 00000ef5: PUSH2 0x0efa 00000ef8: JUMPI 00000ef9: INVALID 00000efa: JUMPDEST 00000efb: SWAP1 00000efc: PUSH1 0x20 00000efe: ADD 00000eff: SWAP1 00000f00: PUSH1 0x20 00000f02: MUL 00000f03: ADD 00000f04: MLOAD 00000f05: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f1a: AND 00000f1b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f30: AND 00000f31: DUP2 00000f32: MSTORE 00000f33: PUSH1 0x20 00000f35: ADD 00000f36: SWAP1 00000f37: DUP2 00000f38: MSTORE 00000f39: PUSH1 0x20 00000f3b: ADD 00000f3c: PUSH1 0x00 00000f3e: KECCAK256 00000f3f: SLOAD 00000f40: DUP3 00000f41: PUSH2 0x170b 00000f44: SWAP1 00000f45: SWAP2 00000f46: SWAP1 00000f47: PUSH4 0xffffffff 00000f4c: AND 00000f4d: JUMP 00000f4e: JUMPDEST 00000f4f: SWAP1 00000f50: POP 00000f51: DUP5 00000f52: DUP1 00000f53: PUSH1 0x01 00000f55: ADD 00000f56: SWAP6 00000f57: POP 00000f58: POP 00000f59: PUSH2 0x0edc 00000f5c: JUMP 00000f5d: JUMPDEST 00000f5e: PUSH1 0x03 00000f60: SLOAD 00000f61: DUP2 00000f62: GT 00000f63: ISZERO 00000f64: ISZERO 00000f65: ISZERO 00000f66: PUSH2 0x0f6b 00000f69: JUMPI 00000f6a: INVALID 00000f6b: JUMPDEST 00000f6c: PUSH1 0x01 00000f6e: PUSH1 0x04 00000f70: PUSH1 0x00 00000f72: DUP16 00000f73: PUSH12 0xffffffffffffffffffffffff 00000f80: NOT 00000f81: AND 00000f82: PUSH12 0xffffffffffffffffffffffff 00000f8f: NOT 00000f90: AND 00000f91: DUP2 00000f92: MSTORE 00000f93: PUSH1 0x20 00000f95: ADD 00000f96: SWAP1 00000f97: DUP2 00000f98: MSTORE 00000f99: PUSH1 0x20 00000f9b: ADD 00000f9c: PUSH1 0x00 00000f9e: KECCAK256 00000f9f: PUSH1 0x00 00000fa1: PUSH2 0x0100 00000fa4: EXP 00000fa5: DUP2 00000fa6: SLOAD 00000fa7: DUP2 00000fa8: PUSH1 0xff 00000faa: MUL 00000fab: NOT 00000fac: AND 00000fad: SWAP1 00000fae: DUP4 00000faf: ISZERO 00000fb0: ISZERO 00000fb1: MUL 00000fb2: OR 00000fb3: SWAP1 00000fb4: SSTORE 00000fb5: POP 00000fb6: PUSH1 0x02 00000fb8: PUSH1 0x03 00000fba: SLOAD 00000fbb: DUP2 00000fbc: ISZERO 00000fbd: ISZERO 00000fbe: PUSH2 0x0fc3 00000fc1: JUMPI 00000fc2: INVALID 00000fc3: JUMPDEST 00000fc4: DIV 00000fc5: DUP2 00000fc6: GT 00000fc7: ISZERO 00000fc8: PUSH2 0x1008 00000fcb: JUMPI 00000fcc: PUSH1 0x00 00000fce: DUP13 00000fcf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fe4: AND 00000fe5: EQ 00000fe6: ISZERO 00000fe7: PUSH2 0x0ffa 00000fea: JUMPI 00000feb: PUSH2 0x0ff5 00000fee: DUP14 00000fef: DUP13 00000ff0: DUP13 00000ff1: PUSH2 0x1729 00000ff4: JUMP 00000ff5: JUMPDEST 00000ff6: PUSH2 0x1007 00000ff9: JUMP 00000ffa: JUMPDEST 00000ffb: PUSH2 0x1006 00000ffe: DUP14 00000fff: DUP14 00001000: DUP14 00001001: DUP14 00001002: PUSH2 0x193c 00001005: JUMP 00001006: JUMPDEST 00001007: JUMPDEST 00001008: JUMPDEST 00001009: POP 0000100a: POP 0000100b: POP 0000100c: POP 0000100d: POP 0000100e: POP 0000100f: POP 00001010: POP 00001011: POP 00001012: POP 00001013: POP 00001014: POP 00001015: POP 00001016: JUMP 00001017: JUMPDEST 00001018: PUSH1 0x02 0000101a: PUSH1 0x20 0000101c: MSTORE 0000101d: DUP1 0000101e: PUSH1 0x00 00001020: MSTORE 00001021: PUSH1 0x40 00001023: PUSH1 0x00 00001025: KECCAK256 00001026: PUSH1 0x00 00001028: SWAP2 00001029: POP 0000102a: SWAP1 0000102b: POP 0000102c: SLOAD 0000102d: DUP2 0000102e: JUMP 0000102f: JUMPDEST 00001030: PUSH1 0x00 00001032: PUSH1 0x02 00001034: PUSH1 0x00 00001036: DUP4 00001037: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000104c: AND 0000104d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001062: AND 00001063: DUP2 00001064: MSTORE 00001065: PUSH1 0x20 00001067: ADD 00001068: SWAP1 00001069: DUP2 0000106a: MSTORE 0000106b: PUSH1 0x20 0000106d: ADD 0000106e: PUSH1 0x00 00001070: KECCAK256 00001071: SLOAD 00001072: SWAP1 00001073: POP 00001074: SWAP2 00001075: SWAP1 00001076: POP 00001077: JUMP 00001078: JUMPDEST 00001079: PUSH1 0x00 0000107b: DUP1 0000107c: SWAP1 0000107d: SLOAD 0000107e: SWAP1 0000107f: PUSH2 0x0100 00001082: EXP 00001083: SWAP1 00001084: DIV 00001085: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000109a: AND 0000109b: DUP2 0000109c: JUMP 0000109d: JUMPDEST 0000109e: PUSH1 0x04 000010a0: PUSH1 0x20 000010a2: MSTORE 000010a3: DUP1 000010a4: PUSH1 0x00 000010a6: MSTORE 000010a7: PUSH1 0x40 000010a9: PUSH1 0x00 000010ab: KECCAK256 000010ac: PUSH1 0x00 000010ae: SWAP2 000010af: POP 000010b0: SLOAD 000010b1: SWAP1 000010b2: PUSH2 0x0100 000010b5: EXP 000010b6: SWAP1 000010b7: DIV 000010b8: PUSH1 0xff 000010ba: AND 000010bb: DUP2 000010bc: JUMP 000010bd: JUMPDEST 000010be: PUSH1 0x00 000010c0: DUP4 000010c1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010d6: AND 000010d7: GT 000010d8: ISZERO 000010d9: ISZERO 000010da: PUSH2 0x10e2 000010dd: JUMPI 000010de: PUSH1 0x00 000010e0: DUP1 000010e1: REVERT 000010e2: JUMPDEST 000010e3: PUSH1 0x00 000010e5: DUP3 000010e6: GT 000010e7: ISZERO 000010e8: ISZERO 000010e9: PUSH2 0x10f1 000010ec: JUMPI 000010ed: PUSH1 0x00 000010ef: DUP1 000010f0: REVERT 000010f1: JUMPDEST 000010f2: DUP3 000010f3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001108: AND 00001109: PUSH4 0x23b872dd 0000110e: CALLER 0000110f: ADDRESS 00001110: DUP6 00001111: PUSH1 0x40 00001113: MLOAD 00001114: DUP5 00001115: PUSH4 0xffffffff 0000111a: AND 0000111b: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 00001139: MUL 0000113a: DUP2 0000113b: MSTORE 0000113c: PUSH1 0x04 0000113e: ADD 0000113f: DUP1 00001140: DUP5 00001141: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001156: AND 00001157: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000116c: AND 0000116d: DUP2 0000116e: MSTORE 0000116f: PUSH1 0x20 00001171: ADD 00001172: DUP4 00001173: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001188: AND 00001189: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000119e: AND 0000119f: DUP2 000011a0: MSTORE 000011a1: PUSH1 0x20 000011a3: ADD 000011a4: DUP3 000011a5: DUP2 000011a6: MSTORE 000011a7: PUSH1 0x20 000011a9: ADD 000011aa: SWAP4 000011ab: POP 000011ac: POP 000011ad: POP 000011ae: POP 000011af: PUSH1 0x20 000011b1: PUSH1 0x40 000011b3: MLOAD 000011b4: DUP1 000011b5: DUP4 000011b6: SUB 000011b7: DUP2 000011b8: PUSH1 0x00 000011ba: DUP8 000011bb: DUP1 000011bc: EXTCODESIZE 000011bd: ISZERO 000011be: DUP1 000011bf: ISZERO 000011c0: PUSH2 0x11c8 000011c3: JUMPI 000011c4: PUSH1 0x00 000011c6: DUP1 000011c7: REVERT 000011c8: JUMPDEST 000011c9: POP 000011ca: GAS 000011cb: CALL 000011cc: ISZERO 000011cd: DUP1 000011ce: ISZERO 000011cf: PUSH2 0x11dc 000011d2: JUMPI 000011d3: RETURNDATASIZE 000011d4: PUSH1 0x00 000011d6: DUP1 000011d7: RETURNDATACOPY 000011d8: RETURNDATASIZE 000011d9: PUSH1 0x00 000011db: REVERT 000011dc: JUMPDEST 000011dd: POP 000011de: POP 000011df: POP 000011e0: POP 000011e1: PUSH1 0x40 000011e3: MLOAD 000011e4: RETURNDATASIZE 000011e5: PUSH1 0x20 000011e7: DUP2 000011e8: LT 000011e9: ISZERO 000011ea: PUSH2 0x11f2 000011ed: JUMPI 000011ee: PUSH1 0x00 000011f0: DUP1 000011f1: REVERT 000011f2: JUMPDEST 000011f3: DUP2 000011f4: ADD 000011f5: SWAP1 000011f6: DUP1 000011f7: DUP1 000011f8: MLOAD 000011f9: SWAP1 000011fa: PUSH1 0x20 000011fc: ADD 000011fd: SWAP1 000011fe: SWAP3 000011ff: SWAP2 00001200: SWAP1 00001201: POP 00001202: POP 00001203: POP 00001204: ISZERO 00001205: ISZERO 00001206: PUSH2 0x120b 00001209: JUMPI 0000120a: INVALID 0000120b: JUMPDEST 0000120c: PUSH2 0x125d 0000120f: DUP3 00001210: PUSH1 0x01 00001212: PUSH1 0x00 00001214: DUP7 00001215: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000122a: AND 0000122b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001240: AND 00001241: DUP2 00001242: MSTORE 00001243: PUSH1 0x20 00001245: ADD 00001246: SWAP1 00001247: DUP2 00001248: MSTORE 00001249: PUSH1 0x20 0000124b: ADD 0000124c: PUSH1 0x00 0000124e: KECCAK256 0000124f: SLOAD 00001250: PUSH2 0x170b 00001253: SWAP1 00001254: SWAP2 00001255: SWAP1 00001256: PUSH4 0xffffffff 0000125b: AND 0000125c: JUMP 0000125d: JUMPDEST 0000125e: PUSH1 0x01 00001260: PUSH1 0x00 00001262: DUP6 00001263: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001278: AND 00001279: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000128e: AND 0000128f: DUP2 00001290: MSTORE 00001291: PUSH1 0x20 00001293: ADD 00001294: SWAP1 00001295: DUP2 00001296: MSTORE 00001297: PUSH1 0x20 00001299: ADD 0000129a: PUSH1 0x00 0000129c: KECCAK256 0000129d: DUP2 0000129e: SWAP1 0000129f: SSTORE 000012a0: POP 000012a1: PUSH32 0x9abc03496c1032d5360782ca78af72ed77b086c26cb5a6a98b01178546795ec0 000012c2: DUP4 000012c3: CALLER 000012c4: DUP5 000012c5: DUP5 000012c6: PUSH1 0x40 000012c8: MLOAD 000012c9: DUP1 000012ca: DUP6 000012cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012e0: AND 000012e1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012f6: AND 000012f7: DUP2 000012f8: MSTORE 000012f9: PUSH1 0x20 000012fb: ADD 000012fc: DUP5 000012fd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001312: AND 00001313: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001328: AND 00001329: DUP2 0000132a: MSTORE 0000132b: PUSH1 0x20 0000132d: ADD 0000132e: DUP4 0000132f: DUP2 00001330: MSTORE 00001331: PUSH1 0x20 00001333: ADD 00001334: DUP1 00001335: PUSH1 0x20 00001337: ADD 00001338: DUP3 00001339: DUP2 0000133a: SUB 0000133b: DUP3 0000133c: MSTORE 0000133d: DUP4 0000133e: DUP2 0000133f: DUP2 00001340: MLOAD 00001341: DUP2 00001342: MSTORE 00001343: PUSH1 0x20 00001345: ADD 00001346: SWAP2 00001347: POP 00001348: DUP1 00001349: MLOAD 0000134a: SWAP1 0000134b: PUSH1 0x20 0000134d: ADD 0000134e: SWAP1 0000134f: DUP1 00001350: DUP4 00001351: DUP4 00001352: PUSH1 0x00 00001354: JUMPDEST 00001355: DUP4 00001356: DUP2 00001357: LT 00001358: ISZERO 00001359: PUSH2 0x136f 0000135c: JUMPI 0000135d: DUP1 0000135e: DUP3 0000135f: ADD 00001360: MLOAD 00001361: DUP2 00001362: DUP5 00001363: ADD 00001364: MSTORE 00001365: PUSH1 0x20 00001367: DUP2 00001368: ADD 00001369: SWAP1 0000136a: POP 0000136b: PUSH2 0x1354 0000136e: JUMP 0000136f: JUMPDEST 00001370: POP 00001371: POP 00001372: POP 00001373: POP 00001374: SWAP1 00001375: POP 00001376: SWAP1 00001377: DUP2 00001378: ADD 00001379: SWAP1 0000137a: PUSH1 0x1f 0000137c: AND 0000137d: DUP1 0000137e: ISZERO 0000137f: PUSH2 0x139c 00001382: JUMPI 00001383: DUP1 00001384: DUP3 00001385: SUB 00001386: DUP1 00001387: MLOAD 00001388: PUSH1 0x01 0000138a: DUP4 0000138b: PUSH1 0x20 0000138d: SUB 0000138e: PUSH2 0x0100 00001391: EXP 00001392: SUB 00001393: NOT 00001394: AND 00001395: DUP2 00001396: MSTORE 00001397: PUSH1 0x20 00001399: ADD 0000139a: SWAP2 0000139b: POP 0000139c: JUMPDEST 0000139d: POP 0000139e: SWAP6 0000139f: POP 000013a0: POP 000013a1: POP 000013a2: POP 000013a3: POP 000013a4: POP 000013a5: PUSH1 0x40 000013a7: MLOAD 000013a8: DUP1 000013a9: SWAP2 000013aa: SUB 000013ab: SWAP1 000013ac: LOG1 000013ad: POP 000013ae: POP 000013af: POP 000013b0: JUMP 000013b1: JUMPDEST 000013b2: PUSH1 0x00 000013b4: CALLVALUE 000013b5: GT 000013b6: ISZERO 000013b7: ISZERO 000013b8: PUSH2 0x13c0 000013bb: JUMPI 000013bc: PUSH1 0x00 000013be: DUP1 000013bf: REVERT 000013c0: JUMPDEST 000013c1: PUSH2 0x1412 000013c4: CALLVALUE 000013c5: PUSH1 0x01 000013c7: PUSH1 0x00 000013c9: DUP1 000013ca: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013df: AND 000013e0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013f5: AND 000013f6: DUP2 000013f7: MSTORE 000013f8: PUSH1 0x20 000013fa: ADD 000013fb: SWAP1 000013fc: DUP2 000013fd: MSTORE 000013fe: PUSH1 0x20 00001400: ADD 00001401: PUSH1 0x00 00001403: KECCAK256 00001404: SLOAD 00001405: PUSH2 0x170b 00001408: SWAP1 00001409: SWAP2 0000140a: SWAP1 0000140b: PUSH4 0xffffffff 00001410: AND 00001411: JUMP 00001412: JUMPDEST 00001413: PUSH1 0x01 00001415: PUSH1 0x00 00001417: DUP1 00001418: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000142d: AND 0000142e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001443: AND 00001444: DUP2 00001445: MSTORE 00001446: PUSH1 0x20 00001448: ADD 00001449: SWAP1 0000144a: DUP2 0000144b: MSTORE 0000144c: PUSH1 0x20 0000144e: ADD 0000144f: PUSH1 0x00 00001451: KECCAK256 00001452: DUP2 00001453: SWAP1 00001454: SSTORE 00001455: POP 00001456: PUSH32 0x9abc03496c1032d5360782ca78af72ed77b086c26cb5a6a98b01178546795ec0 00001477: PUSH1 0x00 00001479: CALLER 0000147a: CALLVALUE 0000147b: DUP5 0000147c: PUSH1 0x40 0000147e: MLOAD 0000147f: DUP1 00001480: DUP6 00001481: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001496: AND 00001497: DUP2 00001498: MSTORE 00001499: PUSH1 0x20 0000149b: ADD 0000149c: DUP5 0000149d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014b2: AND 000014b3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014c8: AND 000014c9: DUP2 000014ca: MSTORE 000014cb: PUSH1 0x20 000014cd: ADD 000014ce: DUP4 000014cf: DUP2 000014d0: MSTORE 000014d1: PUSH1 0x20 000014d3: ADD 000014d4: DUP1 000014d5: PUSH1 0x20 000014d7: ADD 000014d8: DUP3 000014d9: DUP2 000014da: SUB 000014db: DUP3 000014dc: MSTORE 000014dd: DUP4 000014de: DUP2 000014df: DUP2 000014e0: MLOAD 000014e1: DUP2 000014e2: MSTORE 000014e3: PUSH1 0x20 000014e5: ADD 000014e6: SWAP2 000014e7: POP 000014e8: DUP1 000014e9: MLOAD 000014ea: SWAP1 000014eb: PUSH1 0x20 000014ed: ADD 000014ee: SWAP1 000014ef: DUP1 000014f0: DUP4 000014f1: DUP4 000014f2: PUSH1 0x00 000014f4: JUMPDEST 000014f5: DUP4 000014f6: DUP2 000014f7: LT 000014f8: ISZERO 000014f9: PUSH2 0x150f 000014fc: JUMPI 000014fd: DUP1 000014fe: DUP3 000014ff: ADD 00001500: MLOAD 00001501: DUP2 00001502: DUP5 00001503: ADD 00001504: MSTORE 00001505: PUSH1 0x20 00001507: DUP2 00001508: ADD 00001509: SWAP1 0000150a: POP 0000150b: PUSH2 0x14f4 0000150e: JUMP 0000150f: JUMPDEST 00001510: POP 00001511: POP 00001512: POP 00001513: POP 00001514: SWAP1 00001515: POP 00001516: SWAP1 00001517: DUP2 00001518: ADD 00001519: SWAP1 0000151a: PUSH1 0x1f 0000151c: AND 0000151d: DUP1 0000151e: ISZERO 0000151f: PUSH2 0x153c 00001522: JUMPI 00001523: DUP1 00001524: DUP3 00001525: SUB 00001526: DUP1 00001527: MLOAD 00001528: PUSH1 0x01 0000152a: DUP4 0000152b: PUSH1 0x20 0000152d: SUB 0000152e: PUSH2 0x0100 00001531: EXP 00001532: SUB 00001533: NOT 00001534: AND 00001535: DUP2 00001536: MSTORE 00001537: PUSH1 0x20 00001539: ADD 0000153a: SWAP2 0000153b: POP 0000153c: JUMPDEST 0000153d: POP 0000153e: SWAP6 0000153f: POP 00001540: POP 00001541: POP 00001542: POP 00001543: POP 00001544: POP 00001545: PUSH1 0x40 00001547: MLOAD 00001548: DUP1 00001549: SWAP2 0000154a: SUB 0000154b: SWAP1 0000154c: LOG1 0000154d: POP 0000154e: JUMP 0000154f: JUMPDEST 00001550: PUSH1 0x00 00001552: PUSH1 0x01 00001554: PUSH1 0x00 00001556: DUP4 00001557: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000156c: AND 0000156d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001582: AND 00001583: DUP2 00001584: MSTORE 00001585: PUSH1 0x20 00001587: ADD 00001588: SWAP1 00001589: DUP2 0000158a: MSTORE 0000158b: PUSH1 0x20 0000158d: ADD 0000158e: PUSH1 0x00 00001590: KECCAK256 00001591: SLOAD 00001592: SWAP1 00001593: POP 00001594: SWAP2 00001595: SWAP1 00001596: POP 00001597: JUMP 00001598: JUMPDEST 00001599: PUSH1 0x01 0000159b: PUSH1 0x20 0000159d: MSTORE 0000159e: DUP1 0000159f: PUSH1 0x00 000015a1: MSTORE 000015a2: PUSH1 0x40 000015a4: PUSH1 0x00 000015a6: KECCAK256 000015a7: PUSH1 0x00 000015a9: SWAP2 000015aa: POP 000015ab: SWAP1 000015ac: POP 000015ad: SLOAD 000015ae: DUP2 000015af: JUMP 000015b0: JUMPDEST 000015b1: PUSH1 0x03 000015b3: SLOAD 000015b4: DUP2 000015b5: JUMP 000015b6: JUMPDEST 000015b7: PUSH1 0x00 000015b9: DUP1 000015ba: SWAP1 000015bb: SLOAD 000015bc: SWAP1 000015bd: PUSH2 0x0100 000015c0: EXP 000015c1: SWAP1 000015c2: DIV 000015c3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015d8: AND 000015d9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015ee: AND 000015ef: CALLER 000015f0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001605: AND 00001606: EQ 00001607: ISZERO 00001608: ISZERO 00001609: PUSH2 0x1611 0000160c: JUMPI 0000160d: PUSH1 0x00 0000160f: DUP1 00001610: REVERT 00001611: JUMPDEST 00001612: PUSH1 0x00 00001614: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001629: AND 0000162a: DUP2 0000162b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001640: AND 00001641: EQ 00001642: ISZERO 00001643: ISZERO 00001644: ISZERO 00001645: PUSH2 0x164d 00001648: JUMPI 00001649: PUSH1 0x00 0000164b: DUP1 0000164c: REVERT 0000164d: JUMPDEST 0000164e: DUP1 0000164f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001664: AND 00001665: PUSH1 0x00 00001667: DUP1 00001668: SWAP1 00001669: SLOAD 0000166a: SWAP1 0000166b: PUSH2 0x0100 0000166e: EXP 0000166f: SWAP1 00001670: DIV 00001671: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001686: AND 00001687: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000169c: AND 0000169d: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 000016be: PUSH1 0x40 000016c0: MLOAD 000016c1: PUSH1 0x40 000016c3: MLOAD 000016c4: DUP1 000016c5: SWAP2 000016c6: SUB 000016c7: SWAP1 000016c8: LOG3 000016c9: DUP1 000016ca: PUSH1 0x00 000016cc: DUP1 000016cd: PUSH2 0x0100 000016d0: EXP 000016d1: DUP2 000016d2: SLOAD 000016d3: DUP2 000016d4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016e9: MUL 000016ea: NOT 000016eb: AND 000016ec: SWAP1 000016ed: DUP4 000016ee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001703: AND 00001704: MUL 00001705: OR 00001706: SWAP1 00001707: SSTORE 00001708: POP 00001709: POP 0000170a: JUMP 0000170b: JUMPDEST 0000170c: PUSH1 0x00 0000170e: DUP1 0000170f: DUP3 00001710: DUP5 00001711: ADD 00001712: SWAP1 00001713: POP 00001714: DUP4 00001715: DUP2 00001716: LT 00001717: ISZERO 00001718: ISZERO 00001719: ISZERO 0000171a: PUSH2 0x171f 0000171d: JUMPI 0000171e: INVALID 0000171f: JUMPDEST 00001720: DUP1 00001721: SWAP2 00001722: POP 00001723: POP 00001724: SWAP3 00001725: SWAP2 00001726: POP 00001727: POP 00001728: JUMP 00001729: JUMPDEST 0000172a: DUP1 0000172b: PUSH1 0x01 0000172d: PUSH1 0x00 0000172f: DUP1 00001730: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001745: AND 00001746: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000175b: AND 0000175c: DUP2 0000175d: MSTORE 0000175e: PUSH1 0x20 00001760: ADD 00001761: SWAP1 00001762: DUP2 00001763: MSTORE 00001764: PUSH1 0x20 00001766: ADD 00001767: PUSH1 0x00 00001769: KECCAK256 0000176a: SLOAD 0000176b: LT 0000176c: ISZERO 0000176d: ISZERO 0000176e: ISZERO 0000176f: PUSH2 0x1774 00001772: JUMPI 00001773: INVALID 00001774: JUMPDEST 00001775: DUP2 00001776: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000178b: AND 0000178c: CALLER 0000178d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017a2: AND 000017a3: EQ 000017a4: ISZERO 000017a5: ISZERO 000017a6: PUSH2 0x17ab 000017a9: JUMPI 000017aa: INVALID 000017ab: JUMPDEST 000017ac: PUSH2 0x17fd 000017af: DUP2 000017b0: PUSH1 0x01 000017b2: PUSH1 0x00 000017b4: DUP1 000017b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017ca: AND 000017cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017e0: AND 000017e1: DUP2 000017e2: MSTORE 000017e3: PUSH1 0x20 000017e5: ADD 000017e6: SWAP1 000017e7: DUP2 000017e8: MSTORE 000017e9: PUSH1 0x20 000017eb: ADD 000017ec: PUSH1 0x00 000017ee: KECCAK256 000017ef: SLOAD 000017f0: PUSH2 0x1bf0 000017f3: SWAP1 000017f4: SWAP2 000017f5: SWAP1 000017f6: PUSH4 0xffffffff 000017fb: AND 000017fc: JUMP 000017fd: JUMPDEST 000017fe: PUSH1 0x01 00001800: PUSH1 0x00 00001802: DUP1 00001803: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001818: AND 00001819: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000182e: AND 0000182f: DUP2 00001830: MSTORE 00001831: PUSH1 0x20 00001833: ADD 00001834: SWAP1 00001835: DUP2 00001836: MSTORE 00001837: PUSH1 0x20 00001839: ADD 0000183a: PUSH1 0x00 0000183c: KECCAK256 0000183d: DUP2 0000183e: SWAP1 0000183f: SSTORE 00001840: POP 00001841: CALLER 00001842: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001857: AND 00001858: PUSH2 0x08fc 0000185b: DUP3 0000185c: SWAP1 0000185d: DUP2 0000185e: ISZERO 0000185f: MUL 00001860: SWAP1 00001861: PUSH1 0x40 00001863: MLOAD 00001864: PUSH1 0x00 00001866: PUSH1 0x40 00001868: MLOAD 00001869: DUP1 0000186a: DUP4 0000186b: SUB 0000186c: DUP2 0000186d: DUP6 0000186e: DUP9 0000186f: DUP9 00001870: CALL 00001871: SWAP4 00001872: POP 00001873: POP 00001874: POP 00001875: POP 00001876: ISZERO 00001877: DUP1 00001878: ISZERO 00001879: PUSH2 0x1886 0000187c: JUMPI 0000187d: RETURNDATASIZE 0000187e: PUSH1 0x00 00001880: DUP1 00001881: RETURNDATACOPY 00001882: RETURNDATASIZE 00001883: PUSH1 0x00 00001885: REVERT 00001886: JUMPDEST 00001887: POP 00001888: PUSH32 0x1f57a1c5b6fc2c932e07efa54e40446c010acc2e30e1d017e592b7d0f90bc8fc 000018a9: DUP4 000018aa: PUSH1 0x00 000018ac: DUP5 000018ad: DUP5 000018ae: PUSH1 0x40 000018b0: MLOAD 000018b1: DUP1 000018b2: DUP6 000018b3: PUSH12 0xffffffffffffffffffffffff 000018c0: NOT 000018c1: AND 000018c2: PUSH12 0xffffffffffffffffffffffff 000018cf: NOT 000018d0: AND 000018d1: DUP2 000018d2: MSTORE 000018d3: PUSH1 0x20 000018d5: ADD 000018d6: DUP5 000018d7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000018ec: AND 000018ed: DUP2 000018ee: MSTORE 000018ef: PUSH1 0x20 000018f1: ADD 000018f2: DUP4 000018f3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001908: AND 00001909: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000191e: AND 0000191f: DUP2 00001920: MSTORE 00001921: PUSH1 0x20 00001923: ADD 00001924: DUP3 00001925: DUP2 00001926: MSTORE 00001927: PUSH1 0x20 00001929: ADD 0000192a: SWAP5 0000192b: POP 0000192c: POP 0000192d: POP 0000192e: POP 0000192f: POP 00001930: PUSH1 0x40 00001932: MLOAD 00001933: DUP1 00001934: SWAP2 00001935: SUB 00001936: SWAP1 00001937: LOG1 00001938: POP 00001939: POP 0000193a: POP 0000193b: JUMP 0000193c: JUMPDEST 0000193d: PUSH1 0x00 0000193f: DUP4 00001940: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001955: AND 00001956: EQ 00001957: ISZERO 00001958: ISZERO 00001959: ISZERO 0000195a: PUSH2 0x195f 0000195d: JUMPI 0000195e: INVALID 0000195f: JUMPDEST 00001960: DUP1 00001961: PUSH1 0x01 00001963: PUSH1 0x00 00001965: DUP6 00001966: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000197b: AND 0000197c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001991: AND 00001992: DUP2 00001993: MSTORE 00001994: PUSH1 0x20 00001996: ADD 00001997: SWAP1 00001998: DUP2 00001999: MSTORE 0000199a: PUSH1 0x20 0000199c: ADD 0000199d: PUSH1 0x00 0000199f: KECCAK256 000019a0: SLOAD 000019a1: LT 000019a2: ISZERO 000019a3: ISZERO 000019a4: ISZERO 000019a5: PUSH2 0x19aa 000019a8: JUMPI 000019a9: INVALID 000019aa: JUMPDEST 000019ab: PUSH2 0x19fc 000019ae: DUP2 000019af: PUSH1 0x01 000019b1: PUSH1 0x00 000019b3: DUP7 000019b4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019c9: AND 000019ca: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019df: AND 000019e0: DUP2 000019e1: MSTORE 000019e2: PUSH1 0x20 000019e4: ADD 000019e5: SWAP1 000019e6: DUP2 000019e7: MSTORE 000019e8: PUSH1 0x20 000019ea: ADD 000019eb: PUSH1 0x00 000019ed: KECCAK256 000019ee: SLOAD 000019ef: PUSH2 0x1bf0 000019f2: SWAP1 000019f3: SWAP2 000019f4: SWAP1 000019f5: PUSH4 0xffffffff 000019fa: AND 000019fb: JUMP 000019fc: JUMPDEST 000019fd: PUSH1 0x01 000019ff: PUSH1 0x00 00001a01: DUP6 00001a02: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a17: AND 00001a18: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a2d: AND 00001a2e: DUP2 00001a2f: MSTORE 00001a30: PUSH1 0x20 00001a32: ADD 00001a33: SWAP1 00001a34: DUP2 00001a35: MSTORE 00001a36: PUSH1 0x20 00001a38: ADD 00001a39: PUSH1 0x00 00001a3b: KECCAK256 00001a3c: DUP2 00001a3d: SWAP1 00001a3e: SSTORE 00001a3f: POP 00001a40: DUP3 00001a41: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a56: AND 00001a57: PUSH4 0xa9059cbb 00001a5c: DUP4 00001a5d: DUP4 00001a5e: PUSH1 0x40 00001a60: MLOAD 00001a61: DUP4 00001a62: PUSH4 0xffffffff 00001a67: AND 00001a68: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 00001a86: MUL 00001a87: DUP2 00001a88: MSTORE 00001a89: PUSH1 0x04 00001a8b: ADD 00001a8c: DUP1 00001a8d: DUP4 00001a8e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001aa3: AND 00001aa4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ab9: AND 00001aba: DUP2 00001abb: MSTORE 00001abc: PUSH1 0x20 00001abe: ADD 00001abf: DUP3 00001ac0: DUP2 00001ac1: MSTORE 00001ac2: PUSH1 0x20 00001ac4: ADD 00001ac5: SWAP3 00001ac6: POP 00001ac7: POP 00001ac8: POP 00001ac9: PUSH1 0x20 00001acb: PUSH1 0x40 00001acd: MLOAD 00001ace: DUP1 00001acf: DUP4 00001ad0: SUB 00001ad1: DUP2 00001ad2: PUSH1 0x00 00001ad4: DUP8 00001ad5: DUP1 00001ad6: EXTCODESIZE 00001ad7: ISZERO 00001ad8: DUP1 00001ad9: ISZERO 00001ada: PUSH2 0x1ae2 00001add: JUMPI 00001ade: PUSH1 0x00 00001ae0: DUP1 00001ae1: REVERT 00001ae2: JUMPDEST 00001ae3: POP 00001ae4: GAS 00001ae5: CALL 00001ae6: ISZERO 00001ae7: DUP1 00001ae8: ISZERO 00001ae9: PUSH2 0x1af6 00001aec: JUMPI 00001aed: RETURNDATASIZE 00001aee: PUSH1 0x00 00001af0: DUP1 00001af1: RETURNDATACOPY 00001af2: RETURNDATASIZE 00001af3: PUSH1 0x00 00001af5: REVERT 00001af6: JUMPDEST 00001af7: POP 00001af8: POP 00001af9: POP 00001afa: POP 00001afb: PUSH1 0x40 00001afd: MLOAD 00001afe: RETURNDATASIZE 00001aff: PUSH1 0x20 00001b01: DUP2 00001b02: LT 00001b03: ISZERO 00001b04: PUSH2 0x1b0c 00001b07: JUMPI 00001b08: PUSH1 0x00 00001b0a: DUP1 00001b0b: REVERT 00001b0c: JUMPDEST 00001b0d: DUP2 00001b0e: ADD 00001b0f: SWAP1 00001b10: DUP1 00001b11: DUP1 00001b12: MLOAD 00001b13: SWAP1 00001b14: PUSH1 0x20 00001b16: ADD 00001b17: SWAP1 00001b18: SWAP3 00001b19: SWAP2 00001b1a: SWAP1 00001b1b: POP 00001b1c: POP 00001b1d: POP 00001b1e: ISZERO 00001b1f: ISZERO 00001b20: PUSH2 0x1b25 00001b23: JUMPI 00001b24: INVALID 00001b25: JUMPDEST 00001b26: PUSH32 0x1f57a1c5b6fc2c932e07efa54e40446c010acc2e30e1d017e592b7d0f90bc8fc 00001b47: DUP5 00001b48: DUP5 00001b49: DUP5 00001b4a: DUP5 00001b4b: PUSH1 0x40 00001b4d: MLOAD 00001b4e: DUP1 00001b4f: DUP6 00001b50: PUSH12 0xffffffffffffffffffffffff 00001b5d: NOT 00001b5e: AND 00001b5f: PUSH12 0xffffffffffffffffffffffff 00001b6c: NOT 00001b6d: AND 00001b6e: DUP2 00001b6f: MSTORE 00001b70: PUSH1 0x20 00001b72: ADD 00001b73: DUP5 00001b74: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b89: AND 00001b8a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b9f: AND 00001ba0: DUP2 00001ba1: MSTORE 00001ba2: PUSH1 0x20 00001ba4: ADD 00001ba5: DUP4 00001ba6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001bbb: AND 00001bbc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001bd1: AND 00001bd2: DUP2 00001bd3: MSTORE 00001bd4: PUSH1 0x20 00001bd6: ADD 00001bd7: DUP3 00001bd8: DUP2 00001bd9: MSTORE 00001bda: PUSH1 0x20 00001bdc: ADD 00001bdd: SWAP5 00001bde: POP 00001bdf: POP 00001be0: POP 00001be1: POP 00001be2: POP 00001be3: PUSH1 0x40 00001be5: MLOAD 00001be6: DUP1 00001be7: SWAP2 00001be8: SUB 00001be9: SWAP1 00001bea: LOG1 00001beb: POP 00001bec: POP 00001bed: POP 00001bee: POP 00001bef: JUMP 00001bf0: JUMPDEST 00001bf1: PUSH1 0x00 00001bf3: DUP3 00001bf4: DUP3 00001bf5: GT 00001bf6: ISZERO 00001bf7: ISZERO 00001bf8: ISZERO 00001bf9: PUSH2 0x1bfe 00001bfc: JUMPI 00001bfd: INVALID 00001bfe: JUMPDEST 00001bff: DUP2 00001c00: DUP4 00001c01: SUB 00001c02: SWAP1 00001c03: POP 00001c04: SWAP3 00001c05: SWAP2 00001c06: POP 00001c07: POP 00001c08: JUMP 00001c09: STOP 00001c0a: LOG1 00001c0b: PUSH6 0x627a7a723058 00001c12: KECCAK256 00001c13: UNKNOWN(0xAA) 00001c14: UNKNOWN(0x2E) 00001c15: UNKNOWN(0xE2) 00001c16: PUSH29 0x32423095bc4b305c329d883f8c4d0fae55e4f64f5ddffd543dd6a0ae00 00001c34: UNKNOWN(0x29)
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xbadb06cc77666370a95eec41924d8b640fc65317bccac6960d3b4f78c64fcbcd
call_targets:
0x075af08596c26a81384e1f06757f96c96bb1e896
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xbadb06cc77666370a95eec41924d8b640fc65317bccac6960d3b4f78c64fcbcd",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x075af08596c26a81384e1f06757f96c96bb1e896"
],
"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": "0x061aad6e",
"selector": "0x061aad6e",
"calldata_variants": [
"0x061aad6e",
"0x061aad6e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3dc17a52",
"selector": "0x3dc17a52",
"calldata_variants": [
"0x3dc17a52",
"0x3dc17a520000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7eadebfe",
"selector": "0x7eadebfe",
"calldata_variants": [
"0x7eadebfe",
"0x7eadebfe0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7fb8b61e",
"selector": "0x7fb8b61e",
"calldata_variants": [
"0x7fb8b61e",
"0x7fb8b61e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9cf40c0b",
"selector": "0x9cf40c0b",
"calldata_variants": [
"0x9cf40c0b",
"0x9cf40c0b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa10d0960",
"selector": "0xa10d0960",
"calldata_variants": [
"0xa10d0960",
"0xa10d09600000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1794,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2039,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2284,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 7,
"guards_detected": [
{
"pc": 3094,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5615,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 6028,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"untrusted_call_count": 7
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xbadb06cc77666370a95eec41924d8b640fc65317bccac6960d3b4f78c64fcbcd
call_targets:
0x075af08596c26a81384e1f06757f96c96bb1e896
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xbadb06cc77666370a95eec41924d8b640fc65317bccac6960d3b4f78c64fcbcd",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x075af08596c26a81384e1f06757f96c96bb1e896"
],
"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": "0x061aad6e",
"selector": "0x061aad6e",
"calldata_variants": [
"0x061aad6e",
"0x061aad6e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3dc17a52",
"selector": "0x3dc17a52",
"calldata_variants": [
"0x3dc17a52",
"0x3dc17a520000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7eadebfe",
"selector": "0x7eadebfe",
"calldata_variants": [
"0x7eadebfe",
"0x7eadebfe0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7fb8b61e",
"selector": "0x7fb8b61e",
"calldata_variants": [
"0x7fb8b61e",
"0x7fb8b61e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9cf40c0b",
"selector": "0x9cf40c0b",
"calldata_variants": [
"0x9cf40c0b",
"0x9cf40c0b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa10d0960",
"selector": "0xa10d0960",
"calldata_variants": [
"0xa10d0960",
"0xa10d09600000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1794,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2039,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2284,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 7,
"guards_detected": [
{
"pc": 3094,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 5615,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 6028,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
]
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 5
}
|