770c1a79-9ebc-4db0-b715-3962cf4e2451
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 |
|---|---|---|---|---|
| 31705 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 95653 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 95654 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 95655 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 95656 | capability.graph | complete | 1 / 3 | 1 week ago |
| 95657 | detector.run | complete | 1 / 3 | 1 week ago |
| 95658 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:636718] OpenAI Codex v0.77.0 (research preview)
[codex:636718] --------
[codex:636718] workdir: /tmp/codex-multi-rvh9byiy
[codex:636718] model: gpt-5.2-codex
[codex:636718] provider: openai
[codex:636718] approval: never
[codex:636718] sandbox: read-only
[codex:636718] reasoning effort: xhigh
[codex:636718] reasoning summaries: auto
[codex:636718] session id: 019b8cbf-038f-7963-80e8-9403a366cd4e
[codex:636718] --------
[codex:636718] user
[codex:636718] 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:636718]
[codex:636718] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:636718]
[codex:636718] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:636718] - Gas inefficiency, code quality, or best practices
[codex:636718] - Theoretical vulnerabilities without a clear extraction path
[codex:636718] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:636718] - Issues requiring social engineering or off-chain coordination
[codex:636718]
[codex:636718] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:636718] - CALL/DELEGATECALL with controllable destination or calldata
[codex:636718] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:636718] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:636718] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:636718] - External calls before state updates (reentrancy)
[codex:636718] - SELFDESTRUCT with controllable beneficiary
[codex:636718] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:636718]
[codex:636718] For each finding, you MUST explain:
[codex:636718] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:636718] 2. The concrete sequence of transactions to extract value
[codex:636718] 3. Why you believe this is exploitable (not just suspicious)
[codex:636718]
[codex:636718] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:636718] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:636718]
[codex:636718] Output MUST be valid JSON matching the provided schema.
[codex:636718] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:636718] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:636718] mcp startup: no servers
[codex:636718]
[codex:636718] thinking
[codex:636718] **Preparing to read instructions**
[codex:636718] exec
[codex:636718] /bin/bash -lc ls in /tmp/codex-multi-rvh9byiy succeeded in 5ms:
[codex:636718] BYTECODE_BUNDLE.txt
[codex:636718] codex-output-schema.json
[codex:636718]
[codex:636718] thinking
[codex:636718] **Reading file**
[codex:636718] exec
[codex:636718] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-rvh9byiy succeeded in 5ms:
[codex:636718] Runtime bytecode bundle for best-effort auditing.
[codex:636718] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:636718]
[codex:636718] FILE: runtime_bytecode.hex
[codex:636718] 0x6080604052600436106100ab5760003560e01c80638da5cb5b116100645780638da5cb5b1461018b57806396e80821146101b65780639dc29fac146101df578063bebbf4d01461021c578063f2fde38b14610259578063f3fef3a314610282576100b2565b80631b66cb00146100b75780633edca44a146100e057806341c0e1b51461010957806344004cc1146101205780636f307dc314610149578063715018a614610174576100b2565b366100b257005b600080fd5b3480156100c357600080fd5b506100de60048036038101906100d9919061118e565b6102ab565b005b3480156100ec57600080fd5b50610107600480360381019061010291906111f3565b61039e565b005b34801561011557600080fd5b5061011e6105ce565b005b34801561012c57600080fd5b506101476004803603810190610142919061126a565b61062b565b005b34801561015557600080fd5b5061015e61087c565b60405161016b9190611538565b60405180910390f35b34801561018057600080fd5b506101896108a6565b005b34801561019757600080fd5b506101a0610a13565b6040516101ad9190611538565b60405180910390f35b3480156101c257600080fd5b506101dd60048036038101906101d891906111f3565b610a3c565b005b3480156101eb57600080fd5b50610206600480360381019061020191906112b9565b610d4f565b6040516102139190611649565b60405180910390f35b34801561022857600080fd5b50610243600480360381019061023e9190611347565b610d5b565b60405161025091906116e4565b60405180910390f35b34801561026557600080fd5b50610280600480360381019061027b919061118e565b610d67565b005b34801561028e57600080fd5b506102a960048036038101906102a491906111b7565b610f59565b005b6102b361111d565b73ffffffffffffffffffffffffffffffffffffffff166102d1610a13565b73ffffffffffffffffffffffffffffffffffffffff161461035a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008473ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e87736b7a87899490ece95443e979ca9485cbe7e715226040518363ffffffff1660e01b81526004016103ef92919061156e565b60206040518083038186803b15801561040757600080fd5b505afa15801561041b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043f919061131e565b905060008573ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b815260040161047c9190611538565b60206040518083038186803b15801561049457600080fd5b505afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc919061131e565b90508282101580156104de5750828110155b61051d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610514906116c4565b60405180910390fd5b60008190508183101561052e578290505b736b7a87899490ece95443e979ca9485cbe7e7152273ffffffffffffffffffffffffffffffffffffffff16638d7d3eea8930308568056bc75e2d63100000600060386040518863ffffffff1660e01b81526004016105929796959493929190611597565b600060405180830381600087803b1580156105ac57600080fd5b505af11580156105c0573d6000803e3d6000fd5b505050505050505050505050565b6105d6610a13565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561062957610611610a13565b73ffffffffffffffffffffffffffffffffffffffff16ff5b565b61063361111d565b73ffffffffffffffffffffffffffffffffffffffff16610651610a13565b73ffffffffffffffffffffffffffffffffffffffff16146106da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000839050818173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107199190611553565b60206040518083038186803b15801561073157600080fd5b505afa158015610745573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610769919061131e565b10156107aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a190611664565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016107e5929190611620565b602060405180830381600087803b1580156107ff57600080fd5b505af1158015610813573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083791906112f5565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d906116a4565b60405180910390fd5b50505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108ae61111d565b73ffffffffffffffffffffffffffffffffffffffff166108cc610a13565b73ffffffffffffffffffffffffffffffffffffffff1614610955576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008473ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e87736b7a87899490ece95443e979ca9485cbe7e715226040518363ffffffff1660e01b8152600401610a8d92919061156e565b60206040518083038186803b158015610aa557600080fd5b505afa158015610ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610add919061131e565b905060008573ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401610b1a9190611538565b60206040518083038186803b158015610b3257600080fd5b505afa158015610b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6a919061131e565b9050828210158015610b7c5750828110155b610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb2906116c4565b60405180910390fd5b600081905081831015610bcc578290505b736b7a87899490ece95443e979ca9485cbe7e7152273ffffffffffffffffffffffffffffffffffffffff16638d7d3eea8930308568056bc75e2d63100000600060386040518863ffffffff1660e01b8152600401610c309796959493929190611597565b600060405180830381600087803b158015610c4a57600080fd5b505af1158015610c5e573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401610cbd91906116e4565b600060405180830381600087803b158015610cd757600080fd5b505af1158015610ceb573d6000803e3d6000fd5b505050506000858281610cfa57fe5b0490504173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d43573d6000803e3d6000fd5b50505050505050505050565b60006001905092915050565b60006001905092915050565b610d6f61111d565b73ffffffffffffffffffffffffffffffffffffffff16610d8d610a13565b73ffffffffffffffffffffffffffffffffffffffff1614610e16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e9c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118406026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610f6161111d565b73ffffffffffffffffffffffffffffffffffffffff16610f7f610a13565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90611684565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16318111156110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990611664565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611118573d6000803e3d6000fd5b505050565b600033905090565b600081359050611134816117e3565b92915050565b600081359050611149816117fa565b92915050565b60008151905061115e81611811565b92915050565b60008135905061117381611828565b92915050565b60008151905061118881611828565b92915050565b6000602082840312156111a057600080fd5b60006111ae84828501611125565b91505092915050565b600080604083850312156111ca57600080fd5b60006111d88582860161113a565b92505060206111e985828601611164565b9150509250929050565b600080600080600060a0868803121561120b57600080fd5b600061121988828901611125565b955050602061122a88828901611125565b945050604061123b88828901611125565b935050606061124c88828901611164565b925050608061125d88828901611164565b9150509295509295909350565b60008060006060848603121561127f57600080fd5b600061128d86828701611125565b935050602061129e86828701611125565b92505060406112af86828701611164565b9150509250925092565b600080604083850312156112cc57600080fd5b60006112da85828601611125565b92505060206112eb85828601611164565b9150509250929050565b60006020828403121561130757600080fd5b60006113158482850161114f565b91505092915050565b60006020828403121561133057600080fd5b600061133e84828501611179565b91505092915050565b6000806040838503121561135a57600080fd5b600061136885828601611164565b925050602061137985828601611125565b9150509250929050565b61138c81611777565b82525050565b61139b81611710565b82525050565b6113aa81611734565b82525050565b6113b981611789565b82525050565b6113c88161179b565b82525050565b6113d7816117ad565b82525050565b60006113ea6034836116ff565b91507f596f752061726520747279696e6720746f207769746864726177206d6f72652060008301527f66756e6473207468616e20617661696c61626c650000000000000000000000006020830152604082019050919050565b6000611450601c836116ff565b91507f7472616e7366657220746f20746865207a65726f2061646472657373000000006000830152602082019050919050565b7f3078000000000000000000000000000000000000000000000000000000000000815250565b60006114b66010836116ff565b91507f4661696c206f6e207472616e73666572000000000000000000000000000000006000830152602082019050919050565b60006114f66007836116ff565b91507f6572726f722031000000000000000000000000000000000000000000000000006000830152602082019050919050565b61153281611760565b82525050565b600060208201905061154d6000830184611392565b92915050565b60006020820190506115686000830184611383565b92915050565b60006040820190506115836000830185611392565b6115906020830184611392565b9392505050565b6000610120820190506115ad600083018a611392565b6115ba6020830189611383565b6115c76040830188611383565b6115d46060830187611529565b6115e160808301866113bf565b6115ee60a08301856113b0565b6115fa60c08301611483565b61160660e08301611483565b6116146101008301846113ce565b98975050505050505050565b60006040820190506116356000830185611392565b6116426020830184611529565b9392505050565b600060208201905061165e60008301846113a1565b92915050565b6000602082019050818103600083015261167d816113dd565b9050919050565b6000602082019050818103600083015261169d81611443565b9050919050565b600060208201905081810360008301526116bd816114a9565b9050919050565b600060208201905081810360008301526116dd816114e9565b9050919050565b60006020820190506116f96000830184611529565b92915050565b600082825260208201905092915050565b600061171b82611740565b9050919050565b600061172d82611740565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611782826117bf565b9050919050565b60006117948261176a565b9050919050565b60006117a682611760565b9050919050565b60006117b882611760565b9050919050565b60006117ca826117d1565b9050919050565b60006117dc82611740565b9050919050565b6117ec81611710565b81146117f757600080fd5b50565b61180381611722565b811461180e57600080fd5b50565b61181a81611734565b811461182557600080fd5b50565b61183181611760565b811461183c57600080fd5b5056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220021ae2dd97eb8eb70fdcb7f4378c3e7a6ccda654f1ae0b1a06fcf4b820aa127c64736f6c63430007060033
[codex:636718]
[codex:636718]
[codex:636718] thinking
[codex:636718] **Interpreting bytecode for security analysis**
[codex:636718]
[codex:636718] I'm carefully mapping functions and storage slots from the runtime bytecode, focusing on ownership controls and token interactions to spot any exploitable paths to profit. I’m correlating function selectors with their likely roles, especially token transfers and ownership changes, to check if any unprotected calls might allow unauthorized fund withdrawals or manipulations. This detailed dissection aims to confirm if there’s a concrete exploit or just standard Ownable plus token logic.
[codex:636718] thinking
[codex:636718] **Planning bytecode disassembler script**
[codex:636718]
[codex:636718] I’m preparing to write a Python script to disassemble the bytecode so I can better understand tricky function calls, especially around 0x39e. Since the environment is read-only, I’ll run the script in-memory to decode opcodes and annotate jumps. This will help me annotate and analyze the complex instruction flow and arguments more precisely.
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:636718] # extract runtime hex after 0x
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] if not m:
[codex:636718] print('no hex')
[codex:636718] raise SystemExit
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # opcode table
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] # disassemble into list of (pc, op, imm_bytes)
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60 <= op <= 0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] # helper to print range
[codex:636718]
[codex:636718] def print_range(start, end):
[codex:636718] for pc,name,imm in ops:
[codex:636718] if start <= pc < end:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718]
[codex:636718] # function entry PCs from dispatcher
[codex:636718] print('code size', len(code))
[codex:636718] # print around 0x39e function
[codex:636718] print('\\n-- around 0x039e --')
[codex:636718] print_range(0x0390,0x0600)
[codex:636718]
[codex:636718] print('\\n-- around 0x062b --')
[codex:636718] print_range(0x0620,0x0880)
[codex:636718]
[codex:636718] print('\\n-- around 0x0a3c --')
[codex:636718] print_range(0x0a30,0x0d70)
[codex:636718]
[codex:636718] print('\\n-- around 0x0f59 --')
[codex:636718] print_range(0x0f50,0x111d)
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 39ms:
[codex:636718] code size 6299
[codex:636718]
[codex:636718] -- around 0x039e --
[codex:636718] 0396: AND
[codex:636718] 0397: MUL
[codex:636718] 0398: OR
[codex:636718] 0399: SWAP1
[codex:636718] 039a: SSTORE
[codex:636718] 039b: POP
[codex:636718] 039c: POP
[codex:636718] 039d: JUMP
[codex:636718] 039e: JUMPDEST
[codex:636718] 039f: PUSH1 0x00
[codex:636718] 03a1: DUP5
[codex:636718] 03a2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:636718] 03b7: AND
[codex:636718] 03b8: PUSH4 0xdd62ed3e
[codex:636718] 03bd: DUP8
[codex:636718] 03be: PUSH20 0x6b7a87899490ece95443e979ca9485cbe7e71522
[codex:636718] 03d3: PUSH1 0x40
[codex:636718]
[codex:636718] thinking
[codex:636718] **Analyzing function call and stack setup**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:636718] import re
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # opcode table for disassembly
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] # print dispatcher segment
[codex:636718] start=0x00b0
[codex:636718] end=0x0120
[codex:636718] for pc,name,imm in ops:
[codex:636718] if start<=pc<end:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 31ms:
[codex:636718] 00b0: JUMPI
[codex:636718] 00b1: STOP
[codex:636718] 00b2: JUMPDEST
[codex:636718] 00b3: PUSH1 0x00
[codex:636718] 00b5: DUP1
[codex:636718] 00b6: REVERT
[codex:636718] 00b7: JUMPDEST
[codex:636718] 00b8: CALLVALUE
[codex:636718] 00b9: DUP1
[codex:636718] 00ba: ISZERO
[codex:636718] 00bb: PUSH2 0x00c3
[codex:636718] 00be: JUMPI
[codex:636718] 00bf: PUSH1 0x00
[codex:636718] 00c1: DUP1
[codex:636718] 00c2: REVERT
[codex:636718] 00c3: JUMPDEST
[codex:636718] 00c4: POP
[codex:636718] 00c5: PUSH2 0x00de
[codex:636718] 00c8: PUSH1 0x04
[codex:636718] 00ca: DUP1
[codex:636718]
[codex:636718] thinking
[codex:636718] **Analyzing stack behavior around decoder**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # disassemble around 0x11f3
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] start=0x11e0
[codex:636718] end=0x1220
[codex:636718] for pc,name,imm in ops:
[codex:636718] if start<=pc<end:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 37ms:
[codex:636718] 11e1: DUP6
[codex:636718] 11e2: DUP3
[codex:636718] 11e3: DUP7
[codex:636718] 11e4: ADD
[codex:636718] 11e5: PUSH2 0x1164
[codex:636718] 11e8: JUMP
[codex:636718] 11e9: JUMPDEST
[codex:636718] 11ea: SWAP2
[codex:636718] 11eb: POP
[codex:636718] 11ec: POP
[codex:636718] 11ed: SWAP3
[codex:636718] 11ee: POP
[codex:636718] 11ef: SWAP3
[codex:636718] 11f0: SWAP1
[codex:636718] 11f1: POP
[codex:636718] 11f2: JUMP
[codex:636718] 11f3: JUMPDEST
[codex:636718] 11f4: PUSH1 0x00
[codex:636718] 11f6: DUP1
[codex:636718] 11f7: PUSH1 0x00
[codex:636718]
[codex:636718] thinking
[codex:636718] **Continuing to examine decoder**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] start=0x1218
[codex:636718] end=0x1280
[codex:636718] for pc,name,imm in ops:
[codex:636718] if start<=pc<end:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 32ms:
[codex:636718] 1218: JUMP
[codex:636718] 1219: JUMPDEST
[codex:636718] 121a: SWAP6
[codex:636718] 121b: POP
[codex:636718] 121c: POP
[codex:636718] 121d: PUSH1 0x20
[codex:636718] 121f: PUSH2 0x122a
[codex:636718] 1222: DUP9
[codex:636718] 1223: DUP3
[codex:636718] 1224: DUP10
[codex:636718] 1225: ADD
[codex:636718] 1226: PUSH2 0x1125
[codex:636718] 1229: JUMP
[codex:636718] 122a: JUMPDEST
[codex:636718] 122b: SWAP5
[codex:636718] 122c: POP
[codex:636718] 122d: POP
[codex:636718] 122e: PUSH1 0x40
[codex:636718] 1230: PUSH2 0x123b
[codex:636718] 1233: DUP9
[codex:636718]
[codex:636718] thinking
[codex:636718] **Analyzing ABI decoding and function parameters**
[codex:636718]
[codex:636718] I'm digging into the ABI decoder at 0x11f3, which seems designed to decode five parameters, likely addresses and uints. By tracking stack operations and patterns like DUP5 and calldata preparation, I'm trying to map which function arguments correspond to which call parameters, especially around function 0x39e. I want to understand how parameters relate to external calls—this will help assess if unauthorized token or ETH transfers might be possible. To do this precisely, I'll write a symbolic stack interpreter to track argument usage through the code, focusing especially on call building and the helper at 0x1597 that likely encodes multiple arguments. This deep stack and memory analysis should reveal data flows critical for spotting potential vulnerabilities.
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # disassemble around 0x1597
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] start=0x1580
[codex:636718] end=0x15e0
[codex:636718] for pc,name,imm in ops:
[codex:636718] if start<=pc<end:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 32ms:
[codex:636718] 1582: JUMP
[codex:636718] 1583: JUMPDEST
[codex:636718] 1584: PUSH2 0x1590
[codex:636718] 1587: PUSH1 0x20
[codex:636718] 1589: DUP4
[codex:636718] 158a: ADD
[codex:636718] 158b: DUP5
[codex:636718] 158c: PUSH2 0x1392
[codex:636718] 158f: JUMP
[codex:636718] 1590: JUMPDEST
[codex:636718] 1591: SWAP4
[codex:636718] 1592: SWAP3
[codex:636718] 1593: POP
[codex:636718] 1594: POP
[codex:636718] 1595: POP
[codex:636718] 1596: JUMP
[codex:636718] 1597: JUMPDEST
[codex:636718] 1598: PUSH1 0x00
[codex:636718] 159a: PUSH2 0x0120
[codex:636718] 159d: DUP3
[codex:636718]
[codex:636718] thinking
[codex:636718] **Continuing analysis**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # disassemble around 0x15d0 onwards
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] start=0x15d0
[codex:636718] end=0x1610
[codex:636718] for pc,name,imm in ops:
[codex:636718] if start<=pc<end:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 31ms:
[codex:636718] 15d0: PUSH2 0x1529
[codex:636718] 15d3: JUMP
[codex:636718] 15d4: JUMPDEST
[codex:636718] 15d5: PUSH2 0x15e1
[codex:636718] 15d8: PUSH1 0x80
[codex:636718] 15da: DUP4
[codex:636718] 15db: ADD
[codex:636718] 15dc: DUP7
[codex:636718] 15dd: PUSH2 0x13bf
[codex:636718] 15e0: JUMP
[codex:636718] 15e1: JUMPDEST
[codex:636718] 15e2: PUSH2 0x15ee
[codex:636718] 15e5: PUSH1 0xa0
[codex:636718] 15e7: DUP4
[codex:636718] 15e8: ADD
[codex:636718] 15e9: DUP6
[codex:636718] 15ea: PUSH2 0x13b0
[codex:636718] 15ed: JUMP
[codex:636718] 15ee: JUMPDEST
[codex:636718] 15ef: PUSH2 0x15fa
[codex:636718]
[codex:636718] thinking
[codex:636718] **Continuing exploration**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # disassemble around 0x1606
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] start=0x1606
[codex:636718] end=0x1640
[codex:636718] for pc,name,imm in ops:
[codex:636718] if start<=pc<end:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 34ms:
[codex:636718] 1606: JUMPDEST
[codex:636718] 1607: PUSH2 0x1614
[codex:636718] 160a: PUSH2 0x0100
[codex:636718] 160d: DUP4
[codex:636718] 160e: ADD
[codex:636718] 160f: DUP5
[codex:636718] 1610: PUSH2 0x13ce
[codex:636718] 1613: JUMP
[codex:636718] 1614: JUMPDEST
[codex:636718] 1615: SWAP9
[codex:636718] 1616: SWAP8
[codex:636718] 1617: POP
[codex:636718] 1618: POP
[codex:636718] 1619: POP
[codex:636718] 161a: POP
[codex:636718] 161b: POP
[codex:636718] 161c: POP
[codex:636718] 161d: POP
[codex:636718] 161e: POP
[codex:636718] 161f: JUMP
[codex:636718]
[codex:636718] thinking
[codex:636718] **Analyzing function argument encoding and call patterns**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] start=0x08f0
[codex:636718] end=0x0910
[codex:636718] for pc,name,imm in ops:
[codex:636718] if start<=pc<end:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 36ms:
[codex:636718] 090c: DUP2
[codex:636718] 090d: MSTORE
[codex:636718] 090e: PUSH1 0x04
[codex:636718]
[codex:636718] thinking
[codex:636718] **Investigating code around 0x08fc**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # disassemble around 0x08fc
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] # find 0x08fc
[codex:636718] for i,(pc,name,imm) in enumerate(ops):
[codex:636718] if pc==0x08fc:
[codex:636718] start=i-10
[codex:636718] end=i+20
[codex:636718] for pc,name,imm in ops[start:end]:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718] break
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 33ms:
[codex:636718]
[codex:636718]
[codex:636718] thinking
[codex:636718] **Inspecting opcode presence at specific address**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # disassemble around 0x08e0-0x0920
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] start=0x08e0
[codex:636718] end=0x0920
[codex:636718] for pc,name,imm in ops:
[codex:636718] if start<=pc<end:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 34ms:
[codex:636718] 08e2: AND
[codex:636718] 08e3: EQ
[codex:636718] 08e4: PUSH2 0x0955
[codex:636718] 08e7: JUMPI
[codex:636718] 08e8: PUSH1 0x40
[codex:636718] 08ea: MLOAD
[codex:636718] 08eb: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:636718] 090c: DUP2
[codex:636718] 090d: MSTORE
[codex:636718] 090e: PUSH1 0x04
[codex:636718] 0910: ADD
[codex:636718] 0911: DUP1
[codex:636718] 0912: DUP1
[codex:636718] 0913: PUSH1 0x20
[codex:636718] 0915: ADD
[codex:636718] 0916: DUP3
[codex:636718] 0917: DUP2
[codex:636718] 0918: SUB
[codex:636718] 0919: DUP3
[codex:636718] 091a: MSTORE
[codex:636718]
[codex:636718] thinking
[codex:636718] **Analyzing jump destination at 0x08fc**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # find opcode at 0x08fc
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] # decode op at pc 0x08fc
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=None
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] if pc0==0x08fc:
[codex:636718] print(pc0, name, imm.hex() if imm else '')
[codex:636718] break
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 31ms:
[codex:636718]
[codex:636718]
[codex:636718] thinking
[codex:636718] **Investigating missing opcode at specific address**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # find any JUMPDEST near 0x08fc
[codex:636718] opnames={
[codex:636718] 0x5b:'JUMPDEST'
[codex:636718] }
[codex:636718]
[codex:636718] pc=0
[codex:636718] locs=[]
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] if op==0x5b:
[codex:636718] if 0x08e0 <= pc0 <= 0x0910:
[codex:636718] locs.append(pc0)
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] pc+=n
[codex:636718]
[codex:636718] print(locs)
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 29ms:
[codex:636718] []
[codex:636718]
[codex:636718] thinking
[codex:636718] **Analyzing gas stipend usage and potential exploits**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # disassemble around 0x05d0-0x0630
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] start=0x05d0
[codex:636718] end=0x0630
[codex:636718] for pc,name,imm in ops:
[codex:636718] if start<=pc<end:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 32ms:
[codex:636718] 05d2: PUSH2 0x0a13
[codex:636718] 05d5: JUMP
[codex:636718] 05d6: JUMPDEST
[codex:636718] 05d7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:636718] 05ec: AND
[codex:636718] 05ed: CALLER
[codex:636718] 05ee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:636718] 0603: AND
[codex:636718] 0604: EQ
[codex:636718] 0605: ISZERO
[codex:636718] 0606: PUSH2 0x0629
[codex:636718] 0609: JUMPI
[codex:636718] 060a: PUSH2 0x0611
[codex:636718] 060d: PUSH2 0x0a13
[codex:636718] 0610: JUMP
[codex:636718] 0611: JUMPDEST
[codex:636718] 0612: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:636718] 0627: AND
[codex:636718] 0628: SELFDESTRUCT
[codex:636718] 0629: JUMPDEST
[codex:636718]
[codex:636718]
[codex:636718] thinking
[codex:636718] **Analyzing function call and owner checks**
[codex:636718] thinking
[codex:636718] **Tracing argument order via stack simulation**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # disassemble around 0xd67
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] start=0x0d67
[codex:636718] end=0x0ea0
[codex:636718] for pc,name,imm in ops:
[codex:636718] if start<=pc<end:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 36ms:
[codex:636718] 0d67: JUMPDEST
[codex:636718] 0d68: PUSH2 0x0d6f
[codex:636718] 0d6b: PUSH2 0x111d
[codex:636718] 0d6e: JUMP
[codex:636718] 0d6f: JUMPDEST
[codex:636718] 0d70: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:636718] 0d85: AND
[codex:636718] 0d86: PUSH2 0x0d8d
[codex:636718] 0d89: PUSH2 0x0a13
[codex:636718] 0d8c: JUMP
[codex:636718] 0d8d: JUMPDEST
[codex:636718] 0d8e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:636718] 0da3: AND
[codex:636718] 0da4: EQ
[codex:636718] 0da5: PUSH2 0x0e16
[codex:636718] 0da8: JUMPI
[codex:636718] 0da9: PUSH1 0x40
[codex:636718] 0dab: MLOAD
[codex:636718] 0dac: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:636718] 0dcd: DUP2
[codex:636718]
[codex:636718] thinking
[codex:636718] **Tracking argument usage**
[codex:636718] exec
[codex:636718] /bin/bash -lc "python - <<'PY'
[codex:636718] import re
[codex:636718] from pathlib import Path
[codex:636718] hexdata=Path('BYTECODE_BUNDLE.txt').read_text();
[codex:636718] m=re.search(r'0x([0-9a-fA-F]+)', hexdata)
[codex:636718] code=bytes.fromhex(m.group(1))
[codex:636718] # disassemble around 0x0e9c-0xee0
[codex:636718] opnames={
[codex:636718] 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:636718] 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:636718] 0x20:'SHA3',
[codex:636718] 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:636718] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:636718] 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:636718] 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',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:636718] 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:636718] 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:636718] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:636718] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT',
[codex:636718] }
[codex:636718]
[codex:636718] ops=[]
[codex:636718] pc=0
[codex:636718] while pc < len(code):
[codex:636718] op=code[pc]
[codex:636718] name=opnames.get(op, f'OP_{op:02x}')
[codex:636718] pc0=pc
[codex:636718] pc+=1
[codex:636718] imm=b''
[codex:636718] if 0x60<=op<=0x7f:
[codex:636718] n=op-0x5f
[codex:636718] imm=code[pc:pc+n]
[codex:636718] pc+=n
[codex:636718] ops.append((pc0,name,imm))
[codex:636718]
[codex:636718] start=0x0e9c
[codex:636718] end=0x0f50
[codex:636718] for pc,name,imm in ops:
[codex:636718] if start<=pc<end:
[codex:636718] if imm:
[codex:636718] print(f\"{pc:04x}: {name} 0x{imm.hex()}\")
[codex:636718] else:
[codex:636718] print(f\"{pc:04x}: {name}\")
[codex:636718] PY" in /tmp/codex-multi-rvh9byiy succeeded in 34ms:
[codex:636718] 0e9c: JUMPDEST
[codex:636718] 0e9d: DUP1
[codex:636718] 0e9e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:636718] 0eb3: AND
[codex:636718] 0eb4: PUSH1 0x00
[codex:636718] 0eb6: DUP1
[codex:636718] 0eb7: SLOAD
[codex:636718] 0eb8: SWAP1
[codex:636718] 0eb9: PUSH2 0x0100
[codex:636718] 0ebc: EXP
[codex:636718] 0ebd: SWAP1
[codex:636718] 0ebe: DIV
[codex:636718] 0ebf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:636718] 0ed4: AND
[codex:636718] 0ed5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:636718] 0eea: AND
[codex:636718] 0eeb: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
[codex:636718] 0f0c: PUSH1 0x40
[codex:636718] 0f0e: MLOAD
[codex:636718] 0f0f: PUSH1 0x40
[codex:636718]
[codex:636718]
[codex:636718] thinking
[codex:636718] **Analyzing EVM stack argument order**
[codex:636718] thinking
[codex:636718] **Concluding exploit analysis with no findings**
[codex:636718]
[codex:636718] I'll summarize that no clear exploit path emerges from the bytecode alone, as key value transfers are owner-protected or involve external calls without direct control by callers, and uncertainties remain around external token functions preventing firm conclusions.
[codex:636718] codex
[codex:636718] {"no_findings":true,"summary":"No concrete, exploitable profit path is evident from the bytecode alone; value-moving paths are owner-gated or depend on external token/contract behavior without a clearly attacker-controllable beneficiary.","findings":[]}
[codex:636718] tokens used
[codex:636718] 150,052
[codex:636718] {"no_findings":true,"summary":"No concrete, exploitable profit path is evident from the bytecode alone; value-moving paths are owner-gated or depend on external token/contract behavior without a clearly attacker-controllable beneficiary.","findings":[]}
{
"codex": {
"ran_at": "2026-01-05T06:14:06.238018+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable profit path is evident from the bytecode alone; value-moving paths are owner-gated or depend on external token/contract behavior without a clearly attacker-controllable beneficiary.",
"raw_final": {
"summary": "No concrete, exploitable profit path is evident from the bytecode alone; value-moving paths are owner-gated or depend on external token/contract behavior without a clearly attacker-controllable beneficiary.",
"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 0x00ab 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x8da5cb5b 00000019: GT 0000001a: PUSH2 0x0064 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0x8da5cb5b 00000024: EQ 00000025: PUSH2 0x018b 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0x96e80821 0000002f: EQ 00000030: PUSH2 0x01b6 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0x9dc29fac 0000003a: EQ 0000003b: PUSH2 0x01df 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xbebbf4d0 00000045: EQ 00000046: PUSH2 0x021c 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf2fde38b 00000050: EQ 00000051: PUSH2 0x0259 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xf3fef3a3 0000005b: EQ 0000005c: PUSH2 0x0282 0000005f: JUMPI 00000060: PUSH2 0x00b2 00000063: JUMP 00000064: JUMPDEST 00000065: DUP1 00000066: PUSH4 0x1b66cb00 0000006b: EQ 0000006c: PUSH2 0x00b7 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0x3edca44a 00000076: EQ 00000077: PUSH2 0x00e0 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0x41c0e1b5 00000081: EQ 00000082: PUSH2 0x0109 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0x44004cc1 0000008c: EQ 0000008d: PUSH2 0x0120 00000090: JUMPI 00000091: DUP1 00000092: PUSH4 0x6f307dc3 00000097: EQ 00000098: PUSH2 0x0149 0000009b: JUMPI 0000009c: DUP1 0000009d: PUSH4 0x715018a6 000000a2: EQ 000000a3: PUSH2 0x0174 000000a6: JUMPI 000000a7: PUSH2 0x00b2 000000aa: JUMP 000000ab: JUMPDEST 000000ac: CALLDATASIZE 000000ad: PUSH2 0x00b2 000000b0: JUMPI 000000b1: STOP 000000b2: JUMPDEST 000000b3: PUSH1 0x00 000000b5: DUP1 000000b6: REVERT 000000b7: JUMPDEST 000000b8: CALLVALUE 000000b9: DUP1 000000ba: ISZERO 000000bb: PUSH2 0x00c3 000000be: JUMPI 000000bf: PUSH1 0x00 000000c1: DUP1 000000c2: REVERT 000000c3: JUMPDEST 000000c4: POP 000000c5: PUSH2 0x00de 000000c8: PUSH1 0x04 000000ca: DUP1 000000cb: CALLDATASIZE 000000cc: SUB 000000cd: DUP2 000000ce: ADD 000000cf: SWAP1 000000d0: PUSH2 0x00d9 000000d3: SWAP2 000000d4: SWAP1 000000d5: PUSH2 0x118e 000000d8: JUMP 000000d9: JUMPDEST 000000da: PUSH2 0x02ab 000000dd: JUMP 000000de: JUMPDEST 000000df: STOP 000000e0: JUMPDEST 000000e1: CALLVALUE 000000e2: DUP1 000000e3: ISZERO 000000e4: PUSH2 0x00ec 000000e7: JUMPI 000000e8: PUSH1 0x00 000000ea: DUP1 000000eb: REVERT 000000ec: JUMPDEST 000000ed: POP 000000ee: PUSH2 0x0107 000000f1: PUSH1 0x04 000000f3: DUP1 000000f4: CALLDATASIZE 000000f5: SUB 000000f6: DUP2 000000f7: ADD 000000f8: SWAP1 000000f9: PUSH2 0x0102 000000fc: SWAP2 000000fd: SWAP1 000000fe: PUSH2 0x11f3 00000101: JUMP 00000102: JUMPDEST 00000103: PUSH2 0x039e 00000106: JUMP 00000107: JUMPDEST 00000108: STOP 00000109: JUMPDEST 0000010a: CALLVALUE 0000010b: DUP1 0000010c: ISZERO 0000010d: PUSH2 0x0115 00000110: JUMPI 00000111: PUSH1 0x00 00000113: DUP1 00000114: REVERT 00000115: JUMPDEST 00000116: POP 00000117: PUSH2 0x011e 0000011a: PUSH2 0x05ce 0000011d: JUMP 0000011e: JUMPDEST 0000011f: STOP 00000120: JUMPDEST 00000121: CALLVALUE 00000122: DUP1 00000123: ISZERO 00000124: PUSH2 0x012c 00000127: JUMPI 00000128: PUSH1 0x00 0000012a: DUP1 0000012b: REVERT 0000012c: JUMPDEST 0000012d: POP 0000012e: PUSH2 0x0147 00000131: PUSH1 0x04 00000133: DUP1 00000134: CALLDATASIZE 00000135: SUB 00000136: DUP2 00000137: ADD 00000138: SWAP1 00000139: PUSH2 0x0142 0000013c: SWAP2 0000013d: SWAP1 0000013e: PUSH2 0x126a 00000141: JUMP 00000142: JUMPDEST 00000143: PUSH2 0x062b 00000146: JUMP 00000147: JUMPDEST 00000148: STOP 00000149: JUMPDEST 0000014a: CALLVALUE 0000014b: DUP1 0000014c: ISZERO 0000014d: PUSH2 0x0155 00000150: JUMPI 00000151: PUSH1 0x00 00000153: DUP1 00000154: REVERT 00000155: JUMPDEST 00000156: POP 00000157: PUSH2 0x015e 0000015a: PUSH2 0x087c 0000015d: JUMP 0000015e: JUMPDEST 0000015f: PUSH1 0x40 00000161: MLOAD 00000162: PUSH2 0x016b 00000165: SWAP2 00000166: SWAP1 00000167: PUSH2 0x1538 0000016a: JUMP 0000016b: JUMPDEST 0000016c: PUSH1 0x40 0000016e: MLOAD 0000016f: DUP1 00000170: SWAP2 00000171: SUB 00000172: SWAP1 00000173: RETURN 00000174: JUMPDEST 00000175: CALLVALUE 00000176: DUP1 00000177: ISZERO 00000178: PUSH2 0x0180 0000017b: JUMPI 0000017c: PUSH1 0x00 0000017e: DUP1 0000017f: REVERT 00000180: JUMPDEST 00000181: POP 00000182: PUSH2 0x0189 00000185: PUSH2 0x08a6 00000188: JUMP 00000189: JUMPDEST 0000018a: STOP 0000018b: JUMPDEST 0000018c: CALLVALUE 0000018d: DUP1 0000018e: ISZERO 0000018f: PUSH2 0x0197 00000192: JUMPI 00000193: PUSH1 0x00 00000195: DUP1 00000196: REVERT 00000197: JUMPDEST 00000198: POP 00000199: PUSH2 0x01a0 0000019c: PUSH2 0x0a13 0000019f: JUMP 000001a0: JUMPDEST 000001a1: PUSH1 0x40 000001a3: MLOAD 000001a4: PUSH2 0x01ad 000001a7: SWAP2 000001a8: SWAP1 000001a9: PUSH2 0x1538 000001ac: JUMP 000001ad: JUMPDEST 000001ae: PUSH1 0x40 000001b0: MLOAD 000001b1: DUP1 000001b2: SWAP2 000001b3: SUB 000001b4: SWAP1 000001b5: RETURN 000001b6: JUMPDEST 000001b7: CALLVALUE 000001b8: DUP1 000001b9: ISZERO 000001ba: PUSH2 0x01c2 000001bd: JUMPI 000001be: PUSH1 0x00 000001c0: DUP1 000001c1: REVERT 000001c2: JUMPDEST 000001c3: POP 000001c4: PUSH2 0x01dd 000001c7: PUSH1 0x04 000001c9: DUP1 000001ca: CALLDATASIZE 000001cb: SUB 000001cc: DUP2 000001cd: ADD 000001ce: SWAP1 000001cf: PUSH2 0x01d8 000001d2: SWAP2 000001d3: SWAP1 000001d4: PUSH2 0x11f3 000001d7: JUMP 000001d8: JUMPDEST 000001d9: PUSH2 0x0a3c 000001dc: JUMP 000001dd: JUMPDEST 000001de: STOP 000001df: JUMPDEST 000001e0: CALLVALUE 000001e1: DUP1 000001e2: ISZERO 000001e3: PUSH2 0x01eb 000001e6: JUMPI 000001e7: PUSH1 0x00 000001e9: DUP1 000001ea: REVERT 000001eb: JUMPDEST 000001ec: POP 000001ed: PUSH2 0x0206 000001f0: PUSH1 0x04 000001f2: DUP1 000001f3: CALLDATASIZE 000001f4: SUB 000001f5: DUP2 000001f6: ADD 000001f7: SWAP1 000001f8: PUSH2 0x0201 000001fb: SWAP2 000001fc: SWAP1 000001fd: PUSH2 0x12b9 00000200: JUMP 00000201: JUMPDEST 00000202: PUSH2 0x0d4f 00000205: JUMP 00000206: JUMPDEST 00000207: PUSH1 0x40 00000209: MLOAD 0000020a: PUSH2 0x0213 0000020d: SWAP2 0000020e: SWAP1 0000020f: PUSH2 0x1649 00000212: JUMP 00000213: JUMPDEST 00000214: PUSH1 0x40 00000216: MLOAD 00000217: DUP1 00000218: SWAP2 00000219: SUB 0000021a: SWAP1 0000021b: RETURN 0000021c: JUMPDEST 0000021d: CALLVALUE 0000021e: DUP1 0000021f: ISZERO 00000220: PUSH2 0x0228 00000223: JUMPI 00000224: PUSH1 0x00 00000226: DUP1 00000227: REVERT 00000228: JUMPDEST 00000229: POP 0000022a: PUSH2 0x0243 0000022d: PUSH1 0x04 0000022f: DUP1 00000230: CALLDATASIZE 00000231: SUB 00000232: DUP2 00000233: ADD 00000234: SWAP1 00000235: PUSH2 0x023e 00000238: SWAP2 00000239: SWAP1 0000023a: PUSH2 0x1347 0000023d: JUMP 0000023e: JUMPDEST 0000023f: PUSH2 0x0d5b 00000242: JUMP 00000243: JUMPDEST 00000244: PUSH1 0x40 00000246: MLOAD 00000247: PUSH2 0x0250 0000024a: SWAP2 0000024b: SWAP1 0000024c: PUSH2 0x16e4 0000024f: JUMP 00000250: JUMPDEST 00000251: PUSH1 0x40 00000253: MLOAD 00000254: DUP1 00000255: SWAP2 00000256: SUB 00000257: SWAP1 00000258: RETURN 00000259: JUMPDEST 0000025a: CALLVALUE 0000025b: DUP1 0000025c: ISZERO 0000025d: PUSH2 0x0265 00000260: JUMPI 00000261: PUSH1 0x00 00000263: DUP1 00000264: REVERT 00000265: JUMPDEST 00000266: POP 00000267: PUSH2 0x0280 0000026a: PUSH1 0x04 0000026c: DUP1 0000026d: CALLDATASIZE 0000026e: SUB 0000026f: DUP2 00000270: ADD 00000271: SWAP1 00000272: PUSH2 0x027b 00000275: SWAP2 00000276: SWAP1 00000277: PUSH2 0x118e 0000027a: JUMP 0000027b: JUMPDEST 0000027c: PUSH2 0x0d67 0000027f: JUMP 00000280: JUMPDEST 00000281: STOP 00000282: JUMPDEST 00000283: CALLVALUE 00000284: DUP1 00000285: ISZERO 00000286: PUSH2 0x028e 00000289: JUMPI 0000028a: PUSH1 0x00 0000028c: DUP1 0000028d: REVERT 0000028e: JUMPDEST 0000028f: POP 00000290: PUSH2 0x02a9 00000293: PUSH1 0x04 00000295: DUP1 00000296: CALLDATASIZE 00000297: SUB 00000298: DUP2 00000299: ADD 0000029a: SWAP1 0000029b: PUSH2 0x02a4 0000029e: SWAP2 0000029f: SWAP1 000002a0: PUSH2 0x11b7 000002a3: JUMP 000002a4: JUMPDEST 000002a5: PUSH2 0x0f59 000002a8: JUMP 000002a9: JUMPDEST 000002aa: STOP 000002ab: JUMPDEST 000002ac: PUSH2 0x02b3 000002af: PUSH2 0x111d 000002b2: JUMP 000002b3: JUMPDEST 000002b4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002c9: AND 000002ca: PUSH2 0x02d1 000002cd: PUSH2 0x0a13 000002d0: JUMP 000002d1: JUMPDEST 000002d2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002e7: AND 000002e8: EQ 000002e9: PUSH2 0x035a 000002ec: JUMPI 000002ed: PUSH1 0x40 000002ef: MLOAD 000002f0: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000311: DUP2 00000312: MSTORE 00000313: PUSH1 0x04 00000315: ADD 00000316: DUP1 00000317: DUP1 00000318: PUSH1 0x20 0000031a: ADD 0000031b: DUP3 0000031c: DUP2 0000031d: SUB 0000031e: DUP3 0000031f: MSTORE 00000320: PUSH1 0x20 00000322: DUP2 00000323: MSTORE 00000324: PUSH1 0x20 00000326: ADD 00000327: DUP1 00000328: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 00000349: DUP2 0000034a: MSTORE 0000034b: POP 0000034c: PUSH1 0x20 0000034e: ADD 0000034f: SWAP2 00000350: POP 00000351: POP 00000352: PUSH1 0x40 00000354: MLOAD 00000355: DUP1 00000356: SWAP2 00000357: SUB 00000358: SWAP1 00000359: REVERT 0000035a: JUMPDEST 0000035b: DUP1 0000035c: PUSH1 0x01 0000035e: PUSH1 0x00 00000360: PUSH2 0x0100 00000363: EXP 00000364: DUP2 00000365: SLOAD 00000366: DUP2 00000367: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000037c: MUL 0000037d: NOT 0000037e: AND 0000037f: SWAP1 00000380: DUP4 00000381: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000396: AND 00000397: MUL 00000398: OR 00000399: SWAP1 0000039a: SSTORE 0000039b: POP 0000039c: POP 0000039d: JUMP 0000039e: JUMPDEST 0000039f: PUSH1 0x00 000003a1: DUP5 000003a2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003b7: AND 000003b8: PUSH4 0xdd62ed3e 000003bd: DUP8 000003be: PUSH20 0x6b7a87899490ece95443e979ca9485cbe7e71522 000003d3: PUSH1 0x40 000003d5: MLOAD 000003d6: DUP4 000003d7: PUSH4 0xffffffff 000003dc: AND 000003dd: PUSH1 0xe0 000003df: SHL 000003e0: DUP2 000003e1: MSTORE 000003e2: PUSH1 0x04 000003e4: ADD 000003e5: PUSH2 0x03ef 000003e8: SWAP3 000003e9: SWAP2 000003ea: SWAP1 000003eb: PUSH2 0x156e 000003ee: JUMP 000003ef: JUMPDEST 000003f0: PUSH1 0x20 000003f2: PUSH1 0x40 000003f4: MLOAD 000003f5: DUP1 000003f6: DUP4 000003f7: SUB 000003f8: DUP2 000003f9: DUP7 000003fa: DUP1 000003fb: EXTCODESIZE 000003fc: ISZERO 000003fd: DUP1 000003fe: ISZERO 000003ff: PUSH2 0x0407 00000402: JUMPI 00000403: PUSH1 0x00 00000405: DUP1 00000406: REVERT 00000407: JUMPDEST 00000408: POP 00000409: GAS 0000040a: STATICCALL 0000040b: ISZERO 0000040c: DUP1 0000040d: ISZERO 0000040e: PUSH2 0x041b 00000411: JUMPI 00000412: RETURNDATASIZE 00000413: PUSH1 0x00 00000415: DUP1 00000416: RETURNDATACOPY 00000417: RETURNDATASIZE 00000418: PUSH1 0x00 0000041a: REVERT 0000041b: JUMPDEST 0000041c: POP 0000041d: POP 0000041e: POP 0000041f: POP 00000420: PUSH1 0x40 00000422: MLOAD 00000423: RETURNDATASIZE 00000424: PUSH1 0x1f 00000426: NOT 00000427: PUSH1 0x1f 00000429: DUP3 0000042a: ADD 0000042b: AND 0000042c: DUP3 0000042d: ADD 0000042e: DUP1 0000042f: PUSH1 0x40 00000431: MSTORE 00000432: POP 00000433: DUP2 00000434: ADD 00000435: SWAP1 00000436: PUSH2 0x043f 00000439: SWAP2 0000043a: SWAP1 0000043b: PUSH2 0x131e 0000043e: JUMP 0000043f: JUMPDEST 00000440: SWAP1 00000441: POP 00000442: PUSH1 0x00 00000444: DUP6 00000445: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000045a: AND 0000045b: PUSH4 0x70a08231 00000460: DUP9 00000461: PUSH1 0x40 00000463: MLOAD 00000464: DUP3 00000465: PUSH4 0xffffffff 0000046a: AND 0000046b: PUSH1 0xe0 0000046d: SHL 0000046e: DUP2 0000046f: MSTORE 00000470: PUSH1 0x04 00000472: ADD 00000473: PUSH2 0x047c 00000476: SWAP2 00000477: SWAP1 00000478: PUSH2 0x1538 0000047b: JUMP 0000047c: JUMPDEST 0000047d: PUSH1 0x20 0000047f: PUSH1 0x40 00000481: MLOAD 00000482: DUP1 00000483: DUP4 00000484: SUB 00000485: DUP2 00000486: DUP7 00000487: DUP1 00000488: EXTCODESIZE 00000489: ISZERO 0000048a: DUP1 0000048b: ISZERO 0000048c: PUSH2 0x0494 0000048f: JUMPI 00000490: PUSH1 0x00 00000492: DUP1 00000493: REVERT 00000494: JUMPDEST 00000495: POP 00000496: GAS 00000497: STATICCALL 00000498: ISZERO 00000499: DUP1 0000049a: ISZERO 0000049b: PUSH2 0x04a8 0000049e: JUMPI 0000049f: RETURNDATASIZE 000004a0: PUSH1 0x00 000004a2: DUP1 000004a3: RETURNDATACOPY 000004a4: RETURNDATASIZE 000004a5: PUSH1 0x00 000004a7: REVERT 000004a8: JUMPDEST 000004a9: POP 000004aa: POP 000004ab: POP 000004ac: POP 000004ad: PUSH1 0x40 000004af: MLOAD 000004b0: RETURNDATASIZE 000004b1: PUSH1 0x1f 000004b3: NOT 000004b4: PUSH1 0x1f 000004b6: DUP3 000004b7: ADD 000004b8: AND 000004b9: DUP3 000004ba: ADD 000004bb: DUP1 000004bc: PUSH1 0x40 000004be: MSTORE 000004bf: POP 000004c0: DUP2 000004c1: ADD 000004c2: SWAP1 000004c3: PUSH2 0x04cc 000004c6: SWAP2 000004c7: SWAP1 000004c8: PUSH2 0x131e 000004cb: JUMP 000004cc: JUMPDEST 000004cd: SWAP1 000004ce: POP 000004cf: DUP3 000004d0: DUP3 000004d1: LT 000004d2: ISZERO 000004d3: DUP1 000004d4: ISZERO 000004d5: PUSH2 0x04de 000004d8: JUMPI 000004d9: POP 000004da: DUP3 000004db: DUP2 000004dc: LT 000004dd: ISZERO 000004de: JUMPDEST 000004df: PUSH2 0x051d 000004e2: JUMPI 000004e3: PUSH1 0x40 000004e5: MLOAD 000004e6: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000507: DUP2 00000508: MSTORE 00000509: PUSH1 0x04 0000050b: ADD 0000050c: PUSH2 0x0514 0000050f: SWAP1 00000510: PUSH2 0x16c4 00000513: JUMP 00000514: JUMPDEST 00000515: PUSH1 0x40 00000517: MLOAD 00000518: DUP1 00000519: SWAP2 0000051a: SUB 0000051b: SWAP1 0000051c: REVERT 0000051d: JUMPDEST 0000051e: PUSH1 0x00 00000520: DUP2 00000521: SWAP1 00000522: POP 00000523: DUP2 00000524: DUP4 00000525: LT 00000526: ISZERO 00000527: PUSH2 0x052e 0000052a: JUMPI 0000052b: DUP3 0000052c: SWAP1 0000052d: POP 0000052e: JUMPDEST 0000052f: PUSH20 0x6b7a87899490ece95443e979ca9485cbe7e71522 00000544: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000559: AND 0000055a: PUSH4 0x8d7d3eea 0000055f: DUP10 00000560: ADDRESS 00000561: ADDRESS 00000562: DUP6 00000563: PUSH9 0x056bc75e2d63100000 0000056d: PUSH1 0x00 0000056f: PUSH1 0x38 00000571: PUSH1 0x40 00000573: MLOAD 00000574: DUP9 00000575: PUSH4 0xffffffff 0000057a: AND 0000057b: PUSH1 0xe0 0000057d: SHL 0000057e: DUP2 0000057f: MSTORE 00000580: PUSH1 0x04 00000582: ADD 00000583: PUSH2 0x0592 00000586: SWAP8 00000587: SWAP7 00000588: SWAP6 00000589: SWAP5 0000058a: SWAP4 0000058b: SWAP3 0000058c: SWAP2 0000058d: SWAP1 0000058e: PUSH2 0x1597 00000591: JUMP 00000592: JUMPDEST 00000593: PUSH1 0x00 00000595: PUSH1 0x40 00000597: MLOAD 00000598: DUP1 00000599: DUP4 0000059a: SUB 0000059b: DUP2 0000059c: PUSH1 0x00 0000059e: DUP8 0000059f: DUP1 000005a0: EXTCODESIZE 000005a1: ISZERO 000005a2: DUP1 000005a3: ISZERO 000005a4: PUSH2 0x05ac 000005a7: JUMPI 000005a8: PUSH1 0x00 000005aa: DUP1 000005ab: REVERT 000005ac: JUMPDEST 000005ad: POP 000005ae: GAS 000005af: CALL 000005b0: ISZERO 000005b1: DUP1 000005b2: ISZERO 000005b3: PUSH2 0x05c0 000005b6: JUMPI 000005b7: RETURNDATASIZE 000005b8: PUSH1 0x00 000005ba: DUP1 000005bb: RETURNDATACOPY 000005bc: RETURNDATASIZE 000005bd: PUSH1 0x00 000005bf: REVERT 000005c0: JUMPDEST 000005c1: POP 000005c2: POP 000005c3: POP 000005c4: POP 000005c5: POP 000005c6: POP 000005c7: POP 000005c8: POP 000005c9: POP 000005ca: POP 000005cb: POP 000005cc: POP 000005cd: JUMP 000005ce: JUMPDEST 000005cf: PUSH2 0x05d6 000005d2: PUSH2 0x0a13 000005d5: JUMP 000005d6: JUMPDEST 000005d7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000005ec: AND 000005ed: CALLER 000005ee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000603: AND 00000604: EQ 00000605: ISZERO 00000606: PUSH2 0x0629 00000609: JUMPI 0000060a: PUSH2 0x0611 0000060d: PUSH2 0x0a13 00000610: JUMP 00000611: JUMPDEST 00000612: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000627: AND 00000628: SELFDESTRUCT 00000629: JUMPDEST 0000062a: JUMP 0000062b: JUMPDEST 0000062c: PUSH2 0x0633 0000062f: PUSH2 0x111d 00000632: JUMP 00000633: JUMPDEST 00000634: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000649: AND 0000064a: PUSH2 0x0651 0000064d: PUSH2 0x0a13 00000650: JUMP 00000651: JUMPDEST 00000652: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000667: AND 00000668: EQ 00000669: PUSH2 0x06da 0000066c: JUMPI 0000066d: PUSH1 0x40 0000066f: MLOAD 00000670: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000691: DUP2 00000692: MSTORE 00000693: PUSH1 0x04 00000695: ADD 00000696: DUP1 00000697: DUP1 00000698: PUSH1 0x20 0000069a: ADD 0000069b: DUP3 0000069c: DUP2 0000069d: SUB 0000069e: DUP3 0000069f: MSTORE 000006a0: PUSH1 0x20 000006a2: DUP2 000006a3: MSTORE 000006a4: PUSH1 0x20 000006a6: ADD 000006a7: DUP1 000006a8: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 000006c9: DUP2 000006ca: MSTORE 000006cb: POP 000006cc: PUSH1 0x20 000006ce: ADD 000006cf: SWAP2 000006d0: POP 000006d1: POP 000006d2: PUSH1 0x40 000006d4: MLOAD 000006d5: DUP1 000006d6: SWAP2 000006d7: SUB 000006d8: SWAP1 000006d9: REVERT 000006da: JUMPDEST 000006db: PUSH1 0x00 000006dd: DUP4 000006de: SWAP1 000006df: POP 000006e0: DUP2 000006e1: DUP2 000006e2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006f7: AND 000006f8: PUSH4 0x70a08231 000006fd: ADDRESS 000006fe: PUSH1 0x40 00000700: MLOAD 00000701: DUP3 00000702: PUSH4 0xffffffff 00000707: AND 00000708: PUSH1 0xe0 0000070a: SHL 0000070b: DUP2 0000070c: MSTORE 0000070d: PUSH1 0x04 0000070f: ADD 00000710: PUSH2 0x0719 00000713: SWAP2 00000714: SWAP1 00000715: PUSH2 0x1553 00000718: JUMP 00000719: JUMPDEST 0000071a: PUSH1 0x20 0000071c: PUSH1 0x40 0000071e: MLOAD 0000071f: DUP1 00000720: DUP4 00000721: SUB 00000722: DUP2 00000723: DUP7 00000724: DUP1 00000725: EXTCODESIZE 00000726: ISZERO 00000727: DUP1 00000728: ISZERO 00000729: PUSH2 0x0731 0000072c: JUMPI 0000072d: PUSH1 0x00 0000072f: DUP1 00000730: REVERT 00000731: JUMPDEST 00000732: POP 00000733: GAS 00000734: STATICCALL 00000735: ISZERO 00000736: DUP1 00000737: ISZERO 00000738: PUSH2 0x0745 0000073b: JUMPI 0000073c: RETURNDATASIZE 0000073d: PUSH1 0x00 0000073f: DUP1 00000740: RETURNDATACOPY 00000741: RETURNDATASIZE 00000742: PUSH1 0x00 00000744: REVERT 00000745: JUMPDEST 00000746: POP 00000747: POP 00000748: POP 00000749: POP 0000074a: PUSH1 0x40 0000074c: MLOAD 0000074d: RETURNDATASIZE 0000074e: PUSH1 0x1f 00000750: NOT 00000751: PUSH1 0x1f 00000753: DUP3 00000754: ADD 00000755: AND 00000756: DUP3 00000757: ADD 00000758: DUP1 00000759: PUSH1 0x40 0000075b: MSTORE 0000075c: POP 0000075d: DUP2 0000075e: ADD 0000075f: SWAP1 00000760: PUSH2 0x0769 00000763: SWAP2 00000764: SWAP1 00000765: PUSH2 0x131e 00000768: JUMP 00000769: JUMPDEST 0000076a: LT 0000076b: ISZERO 0000076c: PUSH2 0x07aa 0000076f: JUMPI 00000770: PUSH1 0x40 00000772: MLOAD 00000773: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000794: DUP2 00000795: MSTORE 00000796: PUSH1 0x04 00000798: ADD 00000799: PUSH2 0x07a1 0000079c: SWAP1 0000079d: PUSH2 0x1664 000007a0: JUMP 000007a1: JUMPDEST 000007a2: PUSH1 0x40 000007a4: MLOAD 000007a5: DUP1 000007a6: SWAP2 000007a7: SUB 000007a8: SWAP1 000007a9: REVERT 000007aa: JUMPDEST 000007ab: DUP1 000007ac: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007c1: AND 000007c2: PUSH4 0xa9059cbb 000007c7: DUP5 000007c8: DUP5 000007c9: PUSH1 0x40 000007cb: MLOAD 000007cc: DUP4 000007cd: PUSH4 0xffffffff 000007d2: AND 000007d3: PUSH1 0xe0 000007d5: SHL 000007d6: DUP2 000007d7: MSTORE 000007d8: PUSH1 0x04 000007da: ADD 000007db: PUSH2 0x07e5 000007de: SWAP3 000007df: SWAP2 000007e0: SWAP1 000007e1: PUSH2 0x1620 000007e4: JUMP 000007e5: JUMPDEST 000007e6: PUSH1 0x20 000007e8: PUSH1 0x40 000007ea: MLOAD 000007eb: DUP1 000007ec: DUP4 000007ed: SUB 000007ee: DUP2 000007ef: PUSH1 0x00 000007f1: DUP8 000007f2: DUP1 000007f3: EXTCODESIZE 000007f4: ISZERO 000007f5: DUP1 000007f6: ISZERO 000007f7: PUSH2 0x07ff 000007fa: JUMPI 000007fb: PUSH1 0x00 000007fd: DUP1 000007fe: REVERT 000007ff: JUMPDEST 00000800: POP 00000801: GAS 00000802: CALL 00000803: ISZERO 00000804: DUP1 00000805: ISZERO 00000806: PUSH2 0x0813 00000809: JUMPI 0000080a: RETURNDATASIZE 0000080b: PUSH1 0x00 0000080d: DUP1 0000080e: RETURNDATACOPY 0000080f: RETURNDATASIZE 00000810: PUSH1 0x00 00000812: REVERT 00000813: JUMPDEST 00000814: POP 00000815: POP 00000816: POP 00000817: POP 00000818: PUSH1 0x40 0000081a: MLOAD 0000081b: RETURNDATASIZE 0000081c: PUSH1 0x1f 0000081e: NOT 0000081f: PUSH1 0x1f 00000821: DUP3 00000822: ADD 00000823: AND 00000824: DUP3 00000825: ADD 00000826: DUP1 00000827: PUSH1 0x40 00000829: MSTORE 0000082a: POP 0000082b: DUP2 0000082c: ADD 0000082d: SWAP1 0000082e: PUSH2 0x0837 00000831: SWAP2 00000832: SWAP1 00000833: PUSH2 0x12f5 00000836: JUMP 00000837: JUMPDEST 00000838: PUSH2 0x0876 0000083b: JUMPI 0000083c: PUSH1 0x40 0000083e: MLOAD 0000083f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000860: DUP2 00000861: MSTORE 00000862: PUSH1 0x04 00000864: ADD 00000865: PUSH2 0x086d 00000868: SWAP1 00000869: PUSH2 0x16a4 0000086c: JUMP 0000086d: JUMPDEST 0000086e: PUSH1 0x40 00000870: MLOAD 00000871: DUP1 00000872: SWAP2 00000873: SUB 00000874: SWAP1 00000875: REVERT 00000876: JUMPDEST 00000877: POP 00000878: POP 00000879: POP 0000087a: POP 0000087b: JUMP 0000087c: JUMPDEST 0000087d: PUSH1 0x00 0000087f: PUSH1 0x01 00000881: PUSH1 0x00 00000883: SWAP1 00000884: SLOAD 00000885: SWAP1 00000886: PUSH2 0x0100 00000889: EXP 0000088a: SWAP1 0000088b: DIV 0000088c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008a1: AND 000008a2: SWAP1 000008a3: POP 000008a4: SWAP1 000008a5: JUMP 000008a6: JUMPDEST 000008a7: PUSH2 0x08ae 000008aa: PUSH2 0x111d 000008ad: JUMP 000008ae: JUMPDEST 000008af: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008c4: AND 000008c5: PUSH2 0x08cc 000008c8: PUSH2 0x0a13 000008cb: JUMP 000008cc: JUMPDEST 000008cd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008e2: AND 000008e3: EQ 000008e4: PUSH2 0x0955 000008e7: JUMPI 000008e8: PUSH1 0x40 000008ea: MLOAD 000008eb: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000090c: DUP2 0000090d: MSTORE 0000090e: PUSH1 0x04 00000910: ADD 00000911: DUP1 00000912: DUP1 00000913: PUSH1 0x20 00000915: ADD 00000916: DUP3 00000917: DUP2 00000918: SUB 00000919: DUP3 0000091a: MSTORE 0000091b: PUSH1 0x20 0000091d: DUP2 0000091e: MSTORE 0000091f: PUSH1 0x20 00000921: ADD 00000922: DUP1 00000923: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 00000944: DUP2 00000945: MSTORE 00000946: POP 00000947: PUSH1 0x20 00000949: ADD 0000094a: SWAP2 0000094b: POP 0000094c: POP 0000094d: PUSH1 0x40 0000094f: MLOAD 00000950: DUP1 00000951: SWAP2 00000952: SUB 00000953: SWAP1 00000954: REVERT 00000955: JUMPDEST 00000956: PUSH1 0x00 00000958: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000096d: AND 0000096e: PUSH1 0x00 00000970: DUP1 00000971: SLOAD 00000972: SWAP1 00000973: PUSH2 0x0100 00000976: EXP 00000977: SWAP1 00000978: DIV 00000979: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000098e: AND 0000098f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009a4: AND 000009a5: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 000009c6: PUSH1 0x40 000009c8: MLOAD 000009c9: PUSH1 0x40 000009cb: MLOAD 000009cc: DUP1 000009cd: SWAP2 000009ce: SUB 000009cf: SWAP1 000009d0: LOG3 000009d1: PUSH1 0x00 000009d3: DUP1 000009d4: PUSH1 0x00 000009d6: PUSH2 0x0100 000009d9: EXP 000009da: DUP2 000009db: SLOAD 000009dc: DUP2 000009dd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009f2: MUL 000009f3: NOT 000009f4: AND 000009f5: SWAP1 000009f6: DUP4 000009f7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a0c: AND 00000a0d: MUL 00000a0e: OR 00000a0f: SWAP1 00000a10: SSTORE 00000a11: POP 00000a12: JUMP 00000a13: JUMPDEST 00000a14: PUSH1 0x00 00000a16: DUP1 00000a17: PUSH1 0x00 00000a19: SWAP1 00000a1a: SLOAD 00000a1b: SWAP1 00000a1c: PUSH2 0x0100 00000a1f: EXP 00000a20: SWAP1 00000a21: DIV 00000a22: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a37: AND 00000a38: SWAP1 00000a39: POP 00000a3a: SWAP1 00000a3b: JUMP 00000a3c: JUMPDEST 00000a3d: PUSH1 0x00 00000a3f: DUP5 00000a40: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a55: AND 00000a56: PUSH4 0xdd62ed3e 00000a5b: DUP8 00000a5c: PUSH20 0x6b7a87899490ece95443e979ca9485cbe7e71522 00000a71: PUSH1 0x40 00000a73: MLOAD 00000a74: DUP4 00000a75: PUSH4 0xffffffff 00000a7a: AND 00000a7b: PUSH1 0xe0 00000a7d: SHL 00000a7e: DUP2 00000a7f: MSTORE 00000a80: PUSH1 0x04 00000a82: ADD 00000a83: PUSH2 0x0a8d 00000a86: SWAP3 00000a87: SWAP2 00000a88: SWAP1 00000a89: PUSH2 0x156e 00000a8c: JUMP 00000a8d: JUMPDEST 00000a8e: PUSH1 0x20 00000a90: PUSH1 0x40 00000a92: MLOAD 00000a93: DUP1 00000a94: DUP4 00000a95: SUB 00000a96: DUP2 00000a97: DUP7 00000a98: DUP1 00000a99: EXTCODESIZE 00000a9a: ISZERO 00000a9b: DUP1 00000a9c: ISZERO 00000a9d: PUSH2 0x0aa5 00000aa0: JUMPI 00000aa1: PUSH1 0x00 00000aa3: DUP1 00000aa4: REVERT 00000aa5: JUMPDEST 00000aa6: POP 00000aa7: GAS 00000aa8: STATICCALL 00000aa9: ISZERO 00000aaa: DUP1 00000aab: ISZERO 00000aac: PUSH2 0x0ab9 00000aaf: JUMPI 00000ab0: RETURNDATASIZE 00000ab1: PUSH1 0x00 00000ab3: DUP1 00000ab4: RETURNDATACOPY 00000ab5: RETURNDATASIZE 00000ab6: PUSH1 0x00 00000ab8: REVERT 00000ab9: JUMPDEST 00000aba: POP 00000abb: POP 00000abc: POP 00000abd: POP 00000abe: PUSH1 0x40 00000ac0: MLOAD 00000ac1: RETURNDATASIZE 00000ac2: PUSH1 0x1f 00000ac4: NOT 00000ac5: PUSH1 0x1f 00000ac7: DUP3 00000ac8: ADD 00000ac9: AND 00000aca: DUP3 00000acb: ADD 00000acc: DUP1 00000acd: PUSH1 0x40 00000acf: MSTORE 00000ad0: POP 00000ad1: DUP2 00000ad2: ADD 00000ad3: SWAP1 00000ad4: PUSH2 0x0add 00000ad7: SWAP2 00000ad8: SWAP1 00000ad9: PUSH2 0x131e 00000adc: JUMP 00000add: JUMPDEST 00000ade: SWAP1 00000adf: POP 00000ae0: PUSH1 0x00 00000ae2: DUP6 00000ae3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000af8: AND 00000af9: PUSH4 0x70a08231 00000afe: DUP9 00000aff: PUSH1 0x40 00000b01: MLOAD 00000b02: DUP3 00000b03: PUSH4 0xffffffff 00000b08: AND 00000b09: PUSH1 0xe0 00000b0b: SHL 00000b0c: DUP2 00000b0d: MSTORE 00000b0e: PUSH1 0x04 00000b10: ADD 00000b11: PUSH2 0x0b1a 00000b14: SWAP2 00000b15: SWAP1 00000b16: PUSH2 0x1538 00000b19: JUMP 00000b1a: JUMPDEST 00000b1b: PUSH1 0x20 00000b1d: PUSH1 0x40 00000b1f: MLOAD 00000b20: DUP1 00000b21: DUP4 00000b22: SUB 00000b23: DUP2 00000b24: DUP7 00000b25: DUP1 00000b26: EXTCODESIZE 00000b27: ISZERO 00000b28: DUP1 00000b29: ISZERO 00000b2a: PUSH2 0x0b32 00000b2d: JUMPI 00000b2e: PUSH1 0x00 00000b30: DUP1 00000b31: REVERT 00000b32: JUMPDEST 00000b33: POP 00000b34: GAS 00000b35: STATICCALL 00000b36: ISZERO 00000b37: DUP1 00000b38: ISZERO 00000b39: PUSH2 0x0b46 00000b3c: JUMPI 00000b3d: RETURNDATASIZE 00000b3e: PUSH1 0x00 00000b40: DUP1 00000b41: RETURNDATACOPY 00000b42: RETURNDATASIZE 00000b43: PUSH1 0x00 00000b45: REVERT 00000b46: JUMPDEST 00000b47: POP 00000b48: POP 00000b49: POP 00000b4a: POP 00000b4b: PUSH1 0x40 00000b4d: MLOAD 00000b4e: RETURNDATASIZE 00000b4f: PUSH1 0x1f 00000b51: NOT 00000b52: PUSH1 0x1f 00000b54: DUP3 00000b55: ADD 00000b56: AND 00000b57: DUP3 00000b58: ADD 00000b59: DUP1 00000b5a: PUSH1 0x40 00000b5c: MSTORE 00000b5d: POP 00000b5e: DUP2 00000b5f: ADD 00000b60: SWAP1 00000b61: PUSH2 0x0b6a 00000b64: SWAP2 00000b65: SWAP1 00000b66: PUSH2 0x131e 00000b69: JUMP 00000b6a: JUMPDEST 00000b6b: SWAP1 00000b6c: POP 00000b6d: DUP3 00000b6e: DUP3 00000b6f: LT 00000b70: ISZERO 00000b71: DUP1 00000b72: ISZERO 00000b73: PUSH2 0x0b7c 00000b76: JUMPI 00000b77: POP 00000b78: DUP3 00000b79: DUP2 00000b7a: LT 00000b7b: ISZERO 00000b7c: JUMPDEST 00000b7d: PUSH2 0x0bbb 00000b80: JUMPI 00000b81: PUSH1 0x40 00000b83: MLOAD 00000b84: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000ba5: DUP2 00000ba6: MSTORE 00000ba7: PUSH1 0x04 00000ba9: ADD 00000baa: PUSH2 0x0bb2 00000bad: SWAP1 00000bae: PUSH2 0x16c4 00000bb1: JUMP 00000bb2: JUMPDEST 00000bb3: PUSH1 0x40 00000bb5: MLOAD 00000bb6: DUP1 00000bb7: SWAP2 00000bb8: SUB 00000bb9: SWAP1 00000bba: REVERT 00000bbb: JUMPDEST 00000bbc: PUSH1 0x00 00000bbe: DUP2 00000bbf: SWAP1 00000bc0: POP 00000bc1: DUP2 00000bc2: DUP4 00000bc3: LT 00000bc4: ISZERO 00000bc5: PUSH2 0x0bcc 00000bc8: JUMPI 00000bc9: DUP3 00000bca: SWAP1 00000bcb: POP 00000bcc: JUMPDEST 00000bcd: PUSH20 0x6b7a87899490ece95443e979ca9485cbe7e71522 00000be2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bf7: AND 00000bf8: PUSH4 0x8d7d3eea 00000bfd: DUP10 00000bfe: ADDRESS 00000bff: ADDRESS 00000c00: DUP6 00000c01: PUSH9 0x056bc75e2d63100000 00000c0b: PUSH1 0x00 00000c0d: PUSH1 0x38 00000c0f: PUSH1 0x40 00000c11: MLOAD 00000c12: DUP9 00000c13: PUSH4 0xffffffff 00000c18: AND 00000c19: PUSH1 0xe0 00000c1b: SHL 00000c1c: DUP2 00000c1d: MSTORE 00000c1e: PUSH1 0x04 00000c20: ADD 00000c21: PUSH2 0x0c30 00000c24: SWAP8 00000c25: SWAP7 00000c26: SWAP6 00000c27: SWAP5 00000c28: SWAP4 00000c29: SWAP3 00000c2a: SWAP2 00000c2b: SWAP1 00000c2c: PUSH2 0x1597 00000c2f: JUMP 00000c30: JUMPDEST 00000c31: PUSH1 0x00 00000c33: PUSH1 0x40 00000c35: MLOAD 00000c36: DUP1 00000c37: DUP4 00000c38: SUB 00000c39: DUP2 00000c3a: PUSH1 0x00 00000c3c: DUP8 00000c3d: DUP1 00000c3e: EXTCODESIZE 00000c3f: ISZERO 00000c40: DUP1 00000c41: ISZERO 00000c42: PUSH2 0x0c4a 00000c45: JUMPI 00000c46: PUSH1 0x00 00000c48: DUP1 00000c49: REVERT 00000c4a: JUMPDEST 00000c4b: POP 00000c4c: GAS 00000c4d: CALL 00000c4e: ISZERO 00000c4f: DUP1 00000c50: ISZERO 00000c51: PUSH2 0x0c5e 00000c54: JUMPI 00000c55: RETURNDATASIZE 00000c56: PUSH1 0x00 00000c58: DUP1 00000c59: RETURNDATACOPY 00000c5a: RETURNDATASIZE 00000c5b: PUSH1 0x00 00000c5d: REVERT 00000c5e: JUMPDEST 00000c5f: POP 00000c60: POP 00000c61: POP 00000c62: POP 00000c63: PUSH1 0x01 00000c65: PUSH1 0x00 00000c67: SWAP1 00000c68: SLOAD 00000c69: SWAP1 00000c6a: PUSH2 0x0100 00000c6d: EXP 00000c6e: SWAP1 00000c6f: DIV 00000c70: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c85: AND 00000c86: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c9b: AND 00000c9c: PUSH4 0x2e1a7d4d 00000ca1: DUP3 00000ca2: PUSH1 0x40 00000ca4: MLOAD 00000ca5: DUP3 00000ca6: PUSH4 0xffffffff 00000cab: AND 00000cac: PUSH1 0xe0 00000cae: SHL 00000caf: DUP2 00000cb0: MSTORE 00000cb1: PUSH1 0x04 00000cb3: ADD 00000cb4: PUSH2 0x0cbd 00000cb7: SWAP2 00000cb8: SWAP1 00000cb9: PUSH2 0x16e4 00000cbc: JUMP 00000cbd: JUMPDEST 00000cbe: PUSH1 0x00 00000cc0: PUSH1 0x40 00000cc2: MLOAD 00000cc3: DUP1 00000cc4: DUP4 00000cc5: SUB 00000cc6: DUP2 00000cc7: PUSH1 0x00 00000cc9: DUP8 00000cca: DUP1 00000ccb: EXTCODESIZE 00000ccc: ISZERO 00000ccd: DUP1 00000cce: ISZERO 00000ccf: PUSH2 0x0cd7 00000cd2: JUMPI 00000cd3: PUSH1 0x00 00000cd5: DUP1 00000cd6: REVERT 00000cd7: JUMPDEST 00000cd8: POP 00000cd9: GAS 00000cda: CALL 00000cdb: ISZERO 00000cdc: DUP1 00000cdd: ISZERO 00000cde: PUSH2 0x0ceb 00000ce1: JUMPI 00000ce2: RETURNDATASIZE 00000ce3: PUSH1 0x00 00000ce5: DUP1 00000ce6: RETURNDATACOPY 00000ce7: RETURNDATASIZE 00000ce8: PUSH1 0x00 00000cea: REVERT 00000ceb: JUMPDEST 00000cec: POP 00000ced: POP 00000cee: POP 00000cef: POP 00000cf0: PUSH1 0x00 00000cf2: DUP6 00000cf3: DUP3 00000cf4: DUP2 00000cf5: PUSH2 0x0cfa 00000cf8: JUMPI 00000cf9: INVALID 00000cfa: JUMPDEST 00000cfb: DIV 00000cfc: SWAP1 00000cfd: POP 00000cfe: COINBASE 00000cff: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d14: AND 00000d15: PUSH2 0x08fc 00000d18: DUP3 00000d19: SWAP1 00000d1a: DUP2 00000d1b: ISZERO 00000d1c: MUL 00000d1d: SWAP1 00000d1e: PUSH1 0x40 00000d20: MLOAD 00000d21: PUSH1 0x00 00000d23: PUSH1 0x40 00000d25: MLOAD 00000d26: DUP1 00000d27: DUP4 00000d28: SUB 00000d29: DUP2 00000d2a: DUP6 00000d2b: DUP9 00000d2c: DUP9 00000d2d: CALL 00000d2e: SWAP4 00000d2f: POP 00000d30: POP 00000d31: POP 00000d32: POP 00000d33: ISZERO 00000d34: DUP1 00000d35: ISZERO 00000d36: PUSH2 0x0d43 00000d39: JUMPI 00000d3a: RETURNDATASIZE 00000d3b: PUSH1 0x00 00000d3d: DUP1 00000d3e: RETURNDATACOPY 00000d3f: RETURNDATASIZE 00000d40: PUSH1 0x00 00000d42: REVERT 00000d43: JUMPDEST 00000d44: POP 00000d45: POP 00000d46: POP 00000d47: POP 00000d48: POP 00000d49: POP 00000d4a: POP 00000d4b: POP 00000d4c: POP 00000d4d: POP 00000d4e: JUMP 00000d4f: JUMPDEST 00000d50: PUSH1 0x00 00000d52: PUSH1 0x01 00000d54: SWAP1 00000d55: POP 00000d56: SWAP3 00000d57: SWAP2 00000d58: POP 00000d59: POP 00000d5a: JUMP 00000d5b: JUMPDEST 00000d5c: PUSH1 0x00 00000d5e: PUSH1 0x01 00000d60: SWAP1 00000d61: POP 00000d62: SWAP3 00000d63: SWAP2 00000d64: POP 00000d65: POP 00000d66: JUMP 00000d67: JUMPDEST 00000d68: PUSH2 0x0d6f 00000d6b: PUSH2 0x111d 00000d6e: JUMP 00000d6f: JUMPDEST 00000d70: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d85: AND 00000d86: PUSH2 0x0d8d 00000d89: PUSH2 0x0a13 00000d8c: JUMP 00000d8d: JUMPDEST 00000d8e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000da3: AND 00000da4: EQ 00000da5: PUSH2 0x0e16 00000da8: JUMPI 00000da9: PUSH1 0x40 00000dab: MLOAD 00000dac: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000dcd: DUP2 00000dce: MSTORE 00000dcf: PUSH1 0x04 00000dd1: ADD 00000dd2: DUP1 00000dd3: DUP1 00000dd4: PUSH1 0x20 00000dd6: ADD 00000dd7: DUP3 00000dd8: DUP2 00000dd9: SUB 00000dda: DUP3 00000ddb: MSTORE 00000ddc: PUSH1 0x20 00000dde: DUP2 00000ddf: MSTORE 00000de0: PUSH1 0x20 00000de2: ADD 00000de3: DUP1 00000de4: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 00000e05: DUP2 00000e06: MSTORE 00000e07: POP 00000e08: PUSH1 0x20 00000e0a: ADD 00000e0b: SWAP2 00000e0c: POP 00000e0d: POP 00000e0e: PUSH1 0x40 00000e10: MLOAD 00000e11: DUP1 00000e12: SWAP2 00000e13: SUB 00000e14: SWAP1 00000e15: REVERT 00000e16: JUMPDEST 00000e17: PUSH1 0x00 00000e19: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e2e: AND 00000e2f: DUP2 00000e30: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e45: AND 00000e46: EQ 00000e47: ISZERO 00000e48: PUSH2 0x0e9c 00000e4b: JUMPI 00000e4c: PUSH1 0x40 00000e4e: MLOAD 00000e4f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000e70: DUP2 00000e71: MSTORE 00000e72: PUSH1 0x04 00000e74: ADD 00000e75: DUP1 00000e76: DUP1 00000e77: PUSH1 0x20 00000e79: ADD 00000e7a: DUP3 00000e7b: DUP2 00000e7c: SUB 00000e7d: DUP3 00000e7e: MSTORE 00000e7f: PUSH1 0x26 00000e81: DUP2 00000e82: MSTORE 00000e83: PUSH1 0x20 00000e85: ADD 00000e86: DUP1 00000e87: PUSH2 0x1840 00000e8a: PUSH1 0x26 00000e8c: SWAP2 00000e8d: CODECOPY 00000e8e: PUSH1 0x40 00000e90: ADD 00000e91: SWAP2 00000e92: POP 00000e93: POP 00000e94: PUSH1 0x40 00000e96: MLOAD 00000e97: DUP1 00000e98: SWAP2 00000e99: SUB 00000e9a: SWAP1 00000e9b: REVERT 00000e9c: JUMPDEST 00000e9d: DUP1 00000e9e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000eb3: AND 00000eb4: PUSH1 0x00 00000eb6: DUP1 00000eb7: SLOAD 00000eb8: SWAP1 00000eb9: PUSH2 0x0100 00000ebc: EXP 00000ebd: SWAP1 00000ebe: DIV 00000ebf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ed4: AND 00000ed5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000eea: AND 00000eeb: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00000f0c: PUSH1 0x40 00000f0e: MLOAD 00000f0f: PUSH1 0x40 00000f11: MLOAD 00000f12: DUP1 00000f13: SWAP2 00000f14: SUB 00000f15: SWAP1 00000f16: LOG3 00000f17: DUP1 00000f18: PUSH1 0x00 00000f1a: DUP1 00000f1b: PUSH2 0x0100 00000f1e: EXP 00000f1f: DUP2 00000f20: SLOAD 00000f21: DUP2 00000f22: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f37: MUL 00000f38: NOT 00000f39: AND 00000f3a: SWAP1 00000f3b: DUP4 00000f3c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f51: AND 00000f52: MUL 00000f53: OR 00000f54: SWAP1 00000f55: SSTORE 00000f56: POP 00000f57: POP 00000f58: JUMP 00000f59: JUMPDEST 00000f5a: PUSH2 0x0f61 00000f5d: PUSH2 0x111d 00000f60: JUMP 00000f61: JUMPDEST 00000f62: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f77: AND 00000f78: PUSH2 0x0f7f 00000f7b: PUSH2 0x0a13 00000f7e: JUMP 00000f7f: JUMPDEST 00000f80: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f95: AND 00000f96: EQ 00000f97: PUSH2 0x1008 00000f9a: JUMPI 00000f9b: PUSH1 0x40 00000f9d: MLOAD 00000f9e: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000fbf: DUP2 00000fc0: MSTORE 00000fc1: PUSH1 0x04 00000fc3: ADD 00000fc4: DUP1 00000fc5: DUP1 00000fc6: PUSH1 0x20 00000fc8: ADD 00000fc9: DUP3 00000fca: DUP2 00000fcb: SUB 00000fcc: DUP3 00000fcd: MSTORE 00000fce: PUSH1 0x20 00000fd0: DUP2 00000fd1: MSTORE 00000fd2: PUSH1 0x20 00000fd4: ADD 00000fd5: DUP1 00000fd6: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 00000ff7: DUP2 00000ff8: MSTORE 00000ff9: POP 00000ffa: PUSH1 0x20 00000ffc: ADD 00000ffd: SWAP2 00000ffe: POP 00000fff: POP 00001000: PUSH1 0x40 00001002: MLOAD 00001003: DUP1 00001004: SWAP2 00001005: SUB 00001006: SWAP1 00001007: REVERT 00001008: JUMPDEST 00001009: PUSH1 0x00 0000100b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001020: AND 00001021: DUP3 00001022: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001037: AND 00001038: EQ 00001039: ISZERO 0000103a: PUSH2 0x1078 0000103d: JUMPI 0000103e: PUSH1 0x40 00001040: MLOAD 00001041: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001062: DUP2 00001063: MSTORE 00001064: PUSH1 0x04 00001066: ADD 00001067: PUSH2 0x106f 0000106a: SWAP1 0000106b: PUSH2 0x1684 0000106e: JUMP 0000106f: JUMPDEST 00001070: PUSH1 0x40 00001072: MLOAD 00001073: DUP1 00001074: SWAP2 00001075: SUB 00001076: SWAP1 00001077: REVERT 00001078: JUMPDEST 00001079: ADDRESS 0000107a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000108f: AND 00001090: BALANCE 00001091: DUP2 00001092: GT 00001093: ISZERO 00001094: PUSH2 0x10d2 00001097: JUMPI 00001098: PUSH1 0x40 0000109a: MLOAD 0000109b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000010bc: DUP2 000010bd: MSTORE 000010be: PUSH1 0x04 000010c0: ADD 000010c1: PUSH2 0x10c9 000010c4: SWAP1 000010c5: PUSH2 0x1664 000010c8: JUMP 000010c9: JUMPDEST 000010ca: PUSH1 0x40 000010cc: MLOAD 000010cd: DUP1 000010ce: SWAP2 000010cf: SUB 000010d0: SWAP1 000010d1: REVERT 000010d2: JUMPDEST 000010d3: DUP2 000010d4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010e9: AND 000010ea: PUSH2 0x08fc 000010ed: DUP3 000010ee: SWAP1 000010ef: DUP2 000010f0: ISZERO 000010f1: MUL 000010f2: SWAP1 000010f3: PUSH1 0x40 000010f5: MLOAD 000010f6: PUSH1 0x00 000010f8: PUSH1 0x40 000010fa: MLOAD 000010fb: DUP1 000010fc: DUP4 000010fd: SUB 000010fe: DUP2 000010ff: DUP6 00001100: DUP9 00001101: DUP9 00001102: CALL 00001103: SWAP4 00001104: POP 00001105: POP 00001106: POP 00001107: POP 00001108: ISZERO 00001109: DUP1 0000110a: ISZERO 0000110b: PUSH2 0x1118 0000110e: JUMPI 0000110f: RETURNDATASIZE 00001110: PUSH1 0x00 00001112: DUP1 00001113: RETURNDATACOPY 00001114: RETURNDATASIZE 00001115: PUSH1 0x00 00001117: REVERT 00001118: JUMPDEST 00001119: POP 0000111a: POP 0000111b: POP 0000111c: JUMP 0000111d: JUMPDEST 0000111e: PUSH1 0x00 00001120: CALLER 00001121: SWAP1 00001122: POP 00001123: SWAP1 00001124: JUMP 00001125: JUMPDEST 00001126: PUSH1 0x00 00001128: DUP2 00001129: CALLDATALOAD 0000112a: SWAP1 0000112b: POP 0000112c: PUSH2 0x1134 0000112f: DUP2 00001130: PUSH2 0x17e3 00001133: JUMP 00001134: JUMPDEST 00001135: SWAP3 00001136: SWAP2 00001137: POP 00001138: POP 00001139: JUMP 0000113a: JUMPDEST 0000113b: PUSH1 0x00 0000113d: DUP2 0000113e: CALLDATALOAD 0000113f: SWAP1 00001140: POP 00001141: PUSH2 0x1149 00001144: DUP2 00001145: PUSH2 0x17fa 00001148: JUMP 00001149: JUMPDEST 0000114a: SWAP3 0000114b: SWAP2 0000114c: POP 0000114d: POP 0000114e: JUMP 0000114f: JUMPDEST 00001150: PUSH1 0x00 00001152: DUP2 00001153: MLOAD 00001154: SWAP1 00001155: POP 00001156: PUSH2 0x115e 00001159: DUP2 0000115a: PUSH2 0x1811 0000115d: JUMP 0000115e: JUMPDEST 0000115f: SWAP3 00001160: SWAP2 00001161: POP 00001162: POP 00001163: JUMP 00001164: JUMPDEST 00001165: PUSH1 0x00 00001167: DUP2 00001168: CALLDATALOAD 00001169: SWAP1 0000116a: POP 0000116b: PUSH2 0x1173 0000116e: DUP2 0000116f: PUSH2 0x1828 00001172: JUMP 00001173: JUMPDEST 00001174: SWAP3 00001175: SWAP2 00001176: POP 00001177: POP 00001178: JUMP 00001179: JUMPDEST 0000117a: PUSH1 0x00 0000117c: DUP2 0000117d: MLOAD 0000117e: SWAP1 0000117f: POP 00001180: PUSH2 0x1188 00001183: DUP2 00001184: PUSH2 0x1828 00001187: JUMP 00001188: JUMPDEST 00001189: SWAP3 0000118a: SWAP2 0000118b: POP 0000118c: POP 0000118d: JUMP 0000118e: JUMPDEST 0000118f: PUSH1 0x00 00001191: PUSH1 0x20 00001193: DUP3 00001194: DUP5 00001195: SUB 00001196: SLT 00001197: ISZERO 00001198: PUSH2 0x11a0 0000119b: JUMPI 0000119c: PUSH1 0x00 0000119e: DUP1 0000119f: REVERT 000011a0: JUMPDEST 000011a1: PUSH1 0x00 000011a3: PUSH2 0x11ae 000011a6: DUP5 000011a7: DUP3 000011a8: DUP6 000011a9: ADD 000011aa: PUSH2 0x1125 000011ad: JUMP 000011ae: JUMPDEST 000011af: SWAP2 000011b0: POP 000011b1: POP 000011b2: SWAP3 000011b3: SWAP2 000011b4: POP 000011b5: POP 000011b6: JUMP 000011b7: JUMPDEST 000011b8: PUSH1 0x00 000011ba: DUP1 000011bb: PUSH1 0x40 000011bd: DUP4 000011be: DUP6 000011bf: SUB 000011c0: SLT 000011c1: ISZERO 000011c2: PUSH2 0x11ca 000011c5: JUMPI 000011c6: PUSH1 0x00 000011c8: DUP1 000011c9: REVERT 000011ca: JUMPDEST 000011cb: PUSH1 0x00 000011cd: PUSH2 0x11d8 000011d0: DUP6 000011d1: DUP3 000011d2: DUP7 000011d3: ADD 000011d4: PUSH2 0x113a 000011d7: JUMP 000011d8: JUMPDEST 000011d9: SWAP3 000011da: POP 000011db: POP 000011dc: PUSH1 0x20 000011de: PUSH2 0x11e9 000011e1: DUP6 000011e2: DUP3 000011e3: DUP7 000011e4: ADD 000011e5: PUSH2 0x1164 000011e8: JUMP 000011e9: JUMPDEST 000011ea: SWAP2 000011eb: POP 000011ec: POP 000011ed: SWAP3 000011ee: POP 000011ef: SWAP3 000011f0: SWAP1 000011f1: POP 000011f2: JUMP 000011f3: JUMPDEST 000011f4: PUSH1 0x00 000011f6: DUP1 000011f7: PUSH1 0x00 000011f9: DUP1 000011fa: PUSH1 0x00 000011fc: PUSH1 0xa0 000011fe: DUP7 000011ff: DUP9 00001200: SUB 00001201: SLT 00001202: ISZERO 00001203: PUSH2 0x120b 00001206: JUMPI 00001207: PUSH1 0x00 00001209: DUP1 0000120a: REVERT 0000120b: JUMPDEST 0000120c: PUSH1 0x00 0000120e: PUSH2 0x1219 00001211: DUP9 00001212: DUP3 00001213: DUP10 00001214: ADD 00001215: PUSH2 0x1125 00001218: JUMP 00001219: JUMPDEST 0000121a: SWAP6 0000121b: POP 0000121c: POP 0000121d: PUSH1 0x20 0000121f: PUSH2 0x122a 00001222: DUP9 00001223: DUP3 00001224: DUP10 00001225: ADD 00001226: PUSH2 0x1125 00001229: JUMP 0000122a: JUMPDEST 0000122b: SWAP5 0000122c: POP 0000122d: POP 0000122e: PUSH1 0x40 00001230: PUSH2 0x123b 00001233: DUP9 00001234: DUP3 00001235: DUP10 00001236: ADD 00001237: PUSH2 0x1125 0000123a: JUMP 0000123b: JUMPDEST 0000123c: SWAP4 0000123d: POP 0000123e: POP 0000123f: PUSH1 0x60 00001241: PUSH2 0x124c 00001244: DUP9 00001245: DUP3 00001246: DUP10 00001247: ADD 00001248: PUSH2 0x1164 0000124b: JUMP 0000124c: JUMPDEST 0000124d: SWAP3 0000124e: POP 0000124f: POP 00001250: PUSH1 0x80 00001252: PUSH2 0x125d 00001255: DUP9 00001256: DUP3 00001257: DUP10 00001258: ADD 00001259: PUSH2 0x1164 0000125c: JUMP 0000125d: JUMPDEST 0000125e: SWAP2 0000125f: POP 00001260: POP 00001261: SWAP3 00001262: SWAP6 00001263: POP 00001264: SWAP3 00001265: SWAP6 00001266: SWAP1 00001267: SWAP4 00001268: POP 00001269: JUMP 0000126a: JUMPDEST 0000126b: PUSH1 0x00 0000126d: DUP1 0000126e: PUSH1 0x00 00001270: PUSH1 0x60 00001272: DUP5 00001273: DUP7 00001274: SUB 00001275: SLT 00001276: ISZERO 00001277: PUSH2 0x127f 0000127a: JUMPI 0000127b: PUSH1 0x00 0000127d: DUP1 0000127e: REVERT 0000127f: JUMPDEST 00001280: PUSH1 0x00 00001282: PUSH2 0x128d 00001285: DUP7 00001286: DUP3 00001287: DUP8 00001288: ADD 00001289: PUSH2 0x1125 0000128c: JUMP 0000128d: JUMPDEST 0000128e: SWAP4 0000128f: POP 00001290: POP 00001291: PUSH1 0x20 00001293: PUSH2 0x129e 00001296: DUP7 00001297: DUP3 00001298: DUP8 00001299: ADD 0000129a: PUSH2 0x1125 0000129d: JUMP 0000129e: JUMPDEST 0000129f: SWAP3 000012a0: POP 000012a1: POP 000012a2: PUSH1 0x40 000012a4: PUSH2 0x12af 000012a7: DUP7 000012a8: DUP3 000012a9: DUP8 000012aa: ADD 000012ab: PUSH2 0x1164 000012ae: JUMP 000012af: JUMPDEST 000012b0: SWAP2 000012b1: POP 000012b2: POP 000012b3: SWAP3 000012b4: POP 000012b5: SWAP3 000012b6: POP 000012b7: SWAP3 000012b8: JUMP 000012b9: JUMPDEST 000012ba: PUSH1 0x00 000012bc: DUP1 000012bd: PUSH1 0x40 000012bf: DUP4 000012c0: DUP6 000012c1: SUB 000012c2: SLT 000012c3: ISZERO 000012c4: PUSH2 0x12cc 000012c7: JUMPI 000012c8: PUSH1 0x00 000012ca: DUP1 000012cb: REVERT 000012cc: JUMPDEST 000012cd: PUSH1 0x00 000012cf: PUSH2 0x12da 000012d2: DUP6 000012d3: DUP3 000012d4: DUP7 000012d5: ADD 000012d6: PUSH2 0x1125 000012d9: JUMP 000012da: JUMPDEST 000012db: SWAP3 000012dc: POP 000012dd: POP 000012de: PUSH1 0x20 000012e0: PUSH2 0x12eb 000012e3: DUP6 000012e4: DUP3 000012e5: DUP7 000012e6: ADD 000012e7: PUSH2 0x1164 000012ea: JUMP 000012eb: JUMPDEST 000012ec: SWAP2 000012ed: POP 000012ee: POP 000012ef: SWAP3 000012f0: POP 000012f1: SWAP3 000012f2: SWAP1 000012f3: POP 000012f4: JUMP 000012f5: JUMPDEST 000012f6: PUSH1 0x00 000012f8: PUSH1 0x20 000012fa: DUP3 000012fb: DUP5 000012fc: SUB 000012fd: SLT 000012fe: ISZERO 000012ff: PUSH2 0x1307 00001302: JUMPI 00001303: PUSH1 0x00 00001305: DUP1 00001306: REVERT 00001307: JUMPDEST 00001308: PUSH1 0x00 0000130a: PUSH2 0x1315 0000130d: DUP5 0000130e: DUP3 0000130f: DUP6 00001310: ADD 00001311: PUSH2 0x114f 00001314: JUMP 00001315: JUMPDEST 00001316: SWAP2 00001317: POP 00001318: POP 00001319: SWAP3 0000131a: SWAP2 0000131b: POP 0000131c: POP 0000131d: JUMP 0000131e: JUMPDEST 0000131f: PUSH1 0x00 00001321: PUSH1 0x20 00001323: DUP3 00001324: DUP5 00001325: SUB 00001326: SLT 00001327: ISZERO 00001328: PUSH2 0x1330 0000132b: JUMPI 0000132c: PUSH1 0x00 0000132e: DUP1 0000132f: REVERT 00001330: JUMPDEST 00001331: PUSH1 0x00 00001333: PUSH2 0x133e 00001336: DUP5 00001337: DUP3 00001338: DUP6 00001339: ADD 0000133a: PUSH2 0x1179 0000133d: JUMP 0000133e: JUMPDEST 0000133f: SWAP2 00001340: POP 00001341: POP 00001342: SWAP3 00001343: SWAP2 00001344: POP 00001345: POP 00001346: JUMP 00001347: JUMPDEST 00001348: PUSH1 0x00 0000134a: DUP1 0000134b: PUSH1 0x40 0000134d: DUP4 0000134e: DUP6 0000134f: SUB 00001350: SLT 00001351: ISZERO 00001352: PUSH2 0x135a 00001355: JUMPI 00001356: PUSH1 0x00 00001358: DUP1 00001359: REVERT 0000135a: JUMPDEST 0000135b: PUSH1 0x00 0000135d: PUSH2 0x1368 00001360: DUP6 00001361: DUP3 00001362: DUP7 00001363: ADD 00001364: PUSH2 0x1164 00001367: JUMP 00001368: JUMPDEST 00001369: SWAP3 0000136a: POP 0000136b: POP 0000136c: PUSH1 0x20 0000136e: PUSH2 0x1379 00001371: DUP6 00001372: DUP3 00001373: DUP7 00001374: ADD 00001375: PUSH2 0x1125 00001378: JUMP 00001379: JUMPDEST 0000137a: SWAP2 0000137b: POP 0000137c: POP 0000137d: SWAP3 0000137e: POP 0000137f: SWAP3 00001380: SWAP1 00001381: POP 00001382: JUMP 00001383: JUMPDEST 00001384: PUSH2 0x138c 00001387: DUP2 00001388: PUSH2 0x1777 0000138b: JUMP 0000138c: JUMPDEST 0000138d: DUP3 0000138e: MSTORE 0000138f: POP 00001390: POP 00001391: JUMP 00001392: JUMPDEST 00001393: PUSH2 0x139b 00001396: DUP2 00001397: PUSH2 0x1710 0000139a: JUMP 0000139b: JUMPDEST 0000139c: DUP3 0000139d: MSTORE 0000139e: POP 0000139f: POP 000013a0: JUMP 000013a1: JUMPDEST 000013a2: PUSH2 0x13aa 000013a5: DUP2 000013a6: PUSH2 0x1734 000013a9: JUMP 000013aa: JUMPDEST 000013ab: DUP3 000013ac: MSTORE 000013ad: POP 000013ae: POP 000013af: JUMP 000013b0: JUMPDEST 000013b1: PUSH2 0x13b9 000013b4: DUP2 000013b5: PUSH2 0x1789 000013b8: JUMP 000013b9: JUMPDEST 000013ba: DUP3 000013bb: MSTORE 000013bc: POP 000013bd: POP 000013be: JUMP 000013bf: JUMPDEST 000013c0: PUSH2 0x13c8 000013c3: DUP2 000013c4: PUSH2 0x179b 000013c7: JUMP 000013c8: JUMPDEST 000013c9: DUP3 000013ca: MSTORE 000013cb: POP 000013cc: POP 000013cd: JUMP 000013ce: JUMPDEST 000013cf: PUSH2 0x13d7 000013d2: DUP2 000013d3: PUSH2 0x17ad 000013d6: JUMP 000013d7: JUMPDEST 000013d8: DUP3 000013d9: MSTORE 000013da: POP 000013db: POP 000013dc: JUMP 000013dd: JUMPDEST 000013de: PUSH1 0x00 000013e0: PUSH2 0x13ea 000013e3: PUSH1 0x34 000013e5: DUP4 000013e6: PUSH2 0x16ff 000013e9: JUMP 000013ea: JUMPDEST 000013eb: SWAP2 000013ec: POP 000013ed: PUSH32 0x596f752061726520747279696e6720746f207769746864726177206d6f726520 0000140e: PUSH1 0x00 00001410: DUP4 00001411: ADD 00001412: MSTORE 00001413: PUSH32 0x66756e6473207468616e20617661696c61626c65000000000000000000000000 00001434: PUSH1 0x20 00001436: DUP4 00001437: ADD 00001438: MSTORE 00001439: PUSH1 0x40 0000143b: DUP3 0000143c: ADD 0000143d: SWAP1 0000143e: POP 0000143f: SWAP2 00001440: SWAP1 00001441: POP 00001442: JUMP 00001443: JUMPDEST 00001444: PUSH1 0x00 00001446: PUSH2 0x1450 00001449: PUSH1 0x1c 0000144b: DUP4 0000144c: PUSH2 0x16ff 0000144f: JUMP 00001450: JUMPDEST 00001451: SWAP2 00001452: POP 00001453: PUSH32 0x7472616e7366657220746f20746865207a65726f206164647265737300000000 00001474: PUSH1 0x00 00001476: DUP4 00001477: ADD 00001478: MSTORE 00001479: PUSH1 0x20 0000147b: DUP3 0000147c: ADD 0000147d: SWAP1 0000147e: POP 0000147f: SWAP2 00001480: SWAP1 00001481: POP 00001482: JUMP 00001483: JUMPDEST 00001484: PUSH32 0x3078000000000000000000000000000000000000000000000000000000000000 000014a5: DUP2 000014a6: MSTORE 000014a7: POP 000014a8: JUMP 000014a9: JUMPDEST 000014aa: PUSH1 0x00 000014ac: PUSH2 0x14b6 000014af: PUSH1 0x10 000014b1: DUP4 000014b2: PUSH2 0x16ff 000014b5: JUMP 000014b6: JUMPDEST 000014b7: SWAP2 000014b8: POP 000014b9: PUSH32 0x4661696c206f6e207472616e7366657200000000000000000000000000000000 000014da: PUSH1 0x00 000014dc: DUP4 000014dd: ADD 000014de: MSTORE 000014df: PUSH1 0x20 000014e1: DUP3 000014e2: ADD 000014e3: SWAP1 000014e4: POP 000014e5: SWAP2 000014e6: SWAP1 000014e7: POP 000014e8: JUMP 000014e9: JUMPDEST 000014ea: PUSH1 0x00 000014ec: PUSH2 0x14f6 000014ef: PUSH1 0x07 000014f1: DUP4 000014f2: PUSH2 0x16ff 000014f5: JUMP 000014f6: JUMPDEST 000014f7: SWAP2 000014f8: POP 000014f9: PUSH32 0x6572726f72203100000000000000000000000000000000000000000000000000 0000151a: PUSH1 0x00 0000151c: DUP4 0000151d: ADD 0000151e: MSTORE 0000151f: PUSH1 0x20 00001521: DUP3 00001522: ADD 00001523: SWAP1 00001524: POP 00001525: SWAP2 00001526: SWAP1 00001527: POP 00001528: JUMP 00001529: JUMPDEST 0000152a: PUSH2 0x1532 0000152d: DUP2 0000152e: PUSH2 0x1760 00001531: JUMP 00001532: JUMPDEST 00001533: DUP3 00001534: MSTORE 00001535: POP 00001536: POP 00001537: JUMP 00001538: JUMPDEST 00001539: PUSH1 0x00 0000153b: PUSH1 0x20 0000153d: DUP3 0000153e: ADD 0000153f: SWAP1 00001540: POP 00001541: PUSH2 0x154d 00001544: PUSH1 0x00 00001546: DUP4 00001547: ADD 00001548: DUP5 00001549: PUSH2 0x1392 0000154c: JUMP 0000154d: JUMPDEST 0000154e: SWAP3 0000154f: SWAP2 00001550: POP 00001551: POP 00001552: JUMP 00001553: JUMPDEST 00001554: PUSH1 0x00 00001556: PUSH1 0x20 00001558: DUP3 00001559: ADD 0000155a: SWAP1 0000155b: POP 0000155c: PUSH2 0x1568 0000155f: PUSH1 0x00 00001561: DUP4 00001562: ADD 00001563: DUP5 00001564: PUSH2 0x1383 00001567: JUMP 00001568: JUMPDEST 00001569: SWAP3 0000156a: SWAP2 0000156b: POP 0000156c: POP 0000156d: JUMP 0000156e: JUMPDEST 0000156f: PUSH1 0x00 00001571: PUSH1 0x40 00001573: DUP3 00001574: ADD 00001575: SWAP1 00001576: POP 00001577: PUSH2 0x1583 0000157a: PUSH1 0x00 0000157c: DUP4 0000157d: ADD 0000157e: DUP6 0000157f: PUSH2 0x1392 00001582: JUMP 00001583: JUMPDEST 00001584: PUSH2 0x1590 00001587: PUSH1 0x20 00001589: DUP4 0000158a: ADD 0000158b: DUP5 0000158c: PUSH2 0x1392 0000158f: JUMP 00001590: JUMPDEST 00001591: SWAP4 00001592: SWAP3 00001593: POP 00001594: POP 00001595: POP 00001596: JUMP 00001597: JUMPDEST 00001598: PUSH1 0x00 0000159a: PUSH2 0x0120 0000159d: DUP3 0000159e: ADD 0000159f: SWAP1 000015a0: POP 000015a1: PUSH2 0x15ad 000015a4: PUSH1 0x00 000015a6: DUP4 000015a7: ADD 000015a8: DUP11 000015a9: PUSH2 0x1392 000015ac: JUMP 000015ad: JUMPDEST 000015ae: PUSH2 0x15ba 000015b1: PUSH1 0x20 000015b3: DUP4 000015b4: ADD 000015b5: DUP10 000015b6: PUSH2 0x1383 000015b9: JUMP 000015ba: JUMPDEST 000015bb: PUSH2 0x15c7 000015be: PUSH1 0x40 000015c0: DUP4 000015c1: ADD 000015c2: DUP9 000015c3: PUSH2 0x1383 000015c6: JUMP 000015c7: JUMPDEST 000015c8: PUSH2 0x15d4 000015cb: PUSH1 0x60 000015cd: DUP4 000015ce: ADD 000015cf: DUP8 000015d0: PUSH2 0x1529 000015d3: JUMP 000015d4: JUMPDEST 000015d5: PUSH2 0x15e1 000015d8: PUSH1 0x80 000015da: DUP4 000015db: ADD 000015dc: DUP7 000015dd: PUSH2 0x13bf 000015e0: JUMP 000015e1: JUMPDEST 000015e2: PUSH2 0x15ee 000015e5: PUSH1 0xa0 000015e7: DUP4 000015e8: ADD 000015e9: DUP6 000015ea: PUSH2 0x13b0 000015ed: JUMP 000015ee: JUMPDEST 000015ef: PUSH2 0x15fa 000015f2: PUSH1 0xc0 000015f4: DUP4 000015f5: ADD 000015f6: PUSH2 0x1483 000015f9: JUMP 000015fa: JUMPDEST 000015fb: PUSH2 0x1606 000015fe: PUSH1 0xe0 00001600: DUP4 00001601: ADD 00001602: PUSH2 0x1483 00001605: JUMP 00001606: JUMPDEST 00001607: PUSH2 0x1614 0000160a: PUSH2 0x0100 0000160d: DUP4 0000160e: ADD 0000160f: DUP5 00001610: PUSH2 0x13ce 00001613: JUMP 00001614: JUMPDEST 00001615: SWAP9 00001616: SWAP8 00001617: POP 00001618: POP 00001619: POP 0000161a: POP 0000161b: POP 0000161c: POP 0000161d: POP 0000161e: POP 0000161f: JUMP 00001620: JUMPDEST 00001621: PUSH1 0x00 00001623: PUSH1 0x40 00001625: DUP3 00001626: ADD 00001627: SWAP1 00001628: POP 00001629: PUSH2 0x1635 0000162c: PUSH1 0x00 0000162e: DUP4 0000162f: ADD 00001630: DUP6 00001631: PUSH2 0x1392 00001634: JUMP 00001635: JUMPDEST 00001636: PUSH2 0x1642 00001639: PUSH1 0x20 0000163b: DUP4 0000163c: ADD 0000163d: DUP5 0000163e: PUSH2 0x1529 00001641: JUMP 00001642: JUMPDEST 00001643: SWAP4 00001644: SWAP3 00001645: POP 00001646: POP 00001647: POP 00001648: JUMP 00001649: JUMPDEST 0000164a: PUSH1 0x00 0000164c: PUSH1 0x20 0000164e: DUP3 0000164f: ADD 00001650: SWAP1 00001651: POP 00001652: PUSH2 0x165e 00001655: PUSH1 0x00 00001657: DUP4 00001658: ADD 00001659: DUP5 0000165a: PUSH2 0x13a1 0000165d: JUMP 0000165e: JUMPDEST 0000165f: SWAP3 00001660: SWAP2 00001661: POP 00001662: POP 00001663: JUMP 00001664: JUMPDEST 00001665: PUSH1 0x00 00001667: PUSH1 0x20 00001669: DUP3 0000166a: ADD 0000166b: SWAP1 0000166c: POP 0000166d: DUP2 0000166e: DUP2 0000166f: SUB 00001670: PUSH1 0x00 00001672: DUP4 00001673: ADD 00001674: MSTORE 00001675: PUSH2 0x167d 00001678: DUP2 00001679: PUSH2 0x13dd 0000167c: JUMP 0000167d: JUMPDEST 0000167e: SWAP1 0000167f: POP 00001680: SWAP2 00001681: SWAP1 00001682: POP 00001683: JUMP 00001684: JUMPDEST 00001685: PUSH1 0x00 00001687: PUSH1 0x20 00001689: DUP3 0000168a: ADD 0000168b: SWAP1 0000168c: POP 0000168d: DUP2 0000168e: DUP2 0000168f: SUB 00001690: PUSH1 0x00 00001692: DUP4 00001693: ADD 00001694: MSTORE 00001695: PUSH2 0x169d 00001698: DUP2 00001699: PUSH2 0x1443 0000169c: JUMP 0000169d: JUMPDEST 0000169e: SWAP1 0000169f: POP 000016a0: SWAP2 000016a1: SWAP1 000016a2: POP 000016a3: JUMP 000016a4: JUMPDEST 000016a5: PUSH1 0x00 000016a7: PUSH1 0x20 000016a9: DUP3 000016aa: ADD 000016ab: SWAP1 000016ac: POP 000016ad: DUP2 000016ae: DUP2 000016af: SUB 000016b0: PUSH1 0x00 000016b2: DUP4 000016b3: ADD 000016b4: MSTORE 000016b5: PUSH2 0x16bd 000016b8: DUP2 000016b9: PUSH2 0x14a9 000016bc: JUMP 000016bd: JUMPDEST 000016be: SWAP1 000016bf: POP 000016c0: SWAP2 000016c1: SWAP1 000016c2: POP 000016c3: JUMP 000016c4: JUMPDEST 000016c5: PUSH1 0x00 000016c7: PUSH1 0x20 000016c9: DUP3 000016ca: ADD 000016cb: SWAP1 000016cc: POP 000016cd: DUP2 000016ce: DUP2 000016cf: SUB 000016d0: PUSH1 0x00 000016d2: DUP4 000016d3: ADD 000016d4: MSTORE 000016d5: PUSH2 0x16dd 000016d8: DUP2 000016d9: PUSH2 0x14e9 000016dc: JUMP 000016dd: JUMPDEST 000016de: SWAP1 000016df: POP 000016e0: SWAP2 000016e1: SWAP1 000016e2: POP 000016e3: JUMP 000016e4: JUMPDEST 000016e5: PUSH1 0x00 000016e7: PUSH1 0x20 000016e9: DUP3 000016ea: ADD 000016eb: SWAP1 000016ec: POP 000016ed: PUSH2 0x16f9 000016f0: PUSH1 0x00 000016f2: DUP4 000016f3: ADD 000016f4: DUP5 000016f5: PUSH2 0x1529 000016f8: JUMP 000016f9: JUMPDEST 000016fa: SWAP3 000016fb: SWAP2 000016fc: POP 000016fd: POP 000016fe: JUMP 000016ff: JUMPDEST 00001700: PUSH1 0x00 00001702: DUP3 00001703: DUP3 00001704: MSTORE 00001705: PUSH1 0x20 00001707: DUP3 00001708: ADD 00001709: SWAP1 0000170a: POP 0000170b: SWAP3 0000170c: SWAP2 0000170d: POP 0000170e: POP 0000170f: JUMP 00001710: JUMPDEST 00001711: PUSH1 0x00 00001713: PUSH2 0x171b 00001716: DUP3 00001717: PUSH2 0x1740 0000171a: JUMP 0000171b: JUMPDEST 0000171c: SWAP1 0000171d: POP 0000171e: SWAP2 0000171f: SWAP1 00001720: POP 00001721: JUMP 00001722: JUMPDEST 00001723: PUSH1 0x00 00001725: PUSH2 0x172d 00001728: DUP3 00001729: PUSH2 0x1740 0000172c: JUMP 0000172d: JUMPDEST 0000172e: SWAP1 0000172f: POP 00001730: SWAP2 00001731: SWAP1 00001732: POP 00001733: JUMP 00001734: JUMPDEST 00001735: PUSH1 0x00 00001737: DUP2 00001738: ISZERO 00001739: ISZERO 0000173a: SWAP1 0000173b: POP 0000173c: SWAP2 0000173d: SWAP1 0000173e: POP 0000173f: JUMP 00001740: JUMPDEST 00001741: PUSH1 0x00 00001743: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001758: DUP3 00001759: AND 0000175a: SWAP1 0000175b: POP 0000175c: SWAP2 0000175d: SWAP1 0000175e: POP 0000175f: JUMP 00001760: JUMPDEST 00001761: PUSH1 0x00 00001763: DUP2 00001764: SWAP1 00001765: POP 00001766: SWAP2 00001767: SWAP1 00001768: POP 00001769: JUMP 0000176a: JUMPDEST 0000176b: PUSH1 0x00 0000176d: PUSH1 0xff 0000176f: DUP3 00001770: AND 00001771: SWAP1 00001772: POP 00001773: SWAP2 00001774: SWAP1 00001775: POP 00001776: JUMP 00001777: JUMPDEST 00001778: PUSH1 0x00 0000177a: PUSH2 0x1782 0000177d: DUP3 0000177e: PUSH2 0x17bf 00001781: JUMP 00001782: JUMPDEST 00001783: SWAP1 00001784: POP 00001785: SWAP2 00001786: SWAP1 00001787: POP 00001788: JUMP 00001789: JUMPDEST 0000178a: PUSH1 0x00 0000178c: PUSH2 0x1794 0000178f: DUP3 00001790: PUSH2 0x176a 00001793: JUMP 00001794: JUMPDEST 00001795: SWAP1 00001796: POP 00001797: SWAP2 00001798: SWAP1 00001799: POP 0000179a: JUMP 0000179b: JUMPDEST 0000179c: PUSH1 0x00 0000179e: PUSH2 0x17a6 000017a1: DUP3 000017a2: PUSH2 0x1760 000017a5: JUMP 000017a6: JUMPDEST 000017a7: SWAP1 000017a8: POP 000017a9: SWAP2 000017aa: SWAP1 000017ab: POP 000017ac: JUMP 000017ad: JUMPDEST 000017ae: PUSH1 0x00 000017b0: PUSH2 0x17b8 000017b3: DUP3 000017b4: PUSH2 0x1760 000017b7: JUMP 000017b8: JUMPDEST 000017b9: SWAP1 000017ba: POP 000017bb: SWAP2 000017bc: SWAP1 000017bd: POP 000017be: JUMP 000017bf: JUMPDEST 000017c0: PUSH1 0x00 000017c2: PUSH2 0x17ca 000017c5: DUP3 000017c6: PUSH2 0x17d1 000017c9: JUMP 000017ca: JUMPDEST 000017cb: SWAP1 000017cc: POP 000017cd: SWAP2 000017ce: SWAP1 000017cf: POP 000017d0: JUMP 000017d1: JUMPDEST 000017d2: PUSH1 0x00 000017d4: PUSH2 0x17dc 000017d7: DUP3 000017d8: PUSH2 0x1740 000017db: JUMP 000017dc: JUMPDEST 000017dd: SWAP1 000017de: POP 000017df: SWAP2 000017e0: SWAP1 000017e1: POP 000017e2: JUMP 000017e3: JUMPDEST 000017e4: PUSH2 0x17ec 000017e7: DUP2 000017e8: PUSH2 0x1710 000017eb: JUMP 000017ec: JUMPDEST 000017ed: DUP2 000017ee: EQ 000017ef: PUSH2 0x17f7 000017f2: JUMPI 000017f3: PUSH1 0x00 000017f5: DUP1 000017f6: REVERT 000017f7: JUMPDEST 000017f8: POP 000017f9: JUMP 000017fa: JUMPDEST 000017fb: PUSH2 0x1803 000017fe: DUP2 000017ff: PUSH2 0x1722 00001802: JUMP 00001803: JUMPDEST 00001804: DUP2 00001805: EQ 00001806: PUSH2 0x180e 00001809: JUMPI 0000180a: PUSH1 0x00 0000180c: DUP1 0000180d: REVERT 0000180e: JUMPDEST 0000180f: POP 00001810: JUMP 00001811: JUMPDEST 00001812: PUSH2 0x181a 00001815: DUP2 00001816: PUSH2 0x1734 00001819: JUMP 0000181a: JUMPDEST 0000181b: DUP2 0000181c: EQ 0000181d: PUSH2 0x1825 00001820: JUMPI 00001821: PUSH1 0x00 00001823: DUP1 00001824: REVERT 00001825: JUMPDEST 00001826: POP 00001827: JUMP 00001828: JUMPDEST 00001829: PUSH2 0x1831 0000182c: DUP2 0000182d: PUSH2 0x1760 00001830: JUMP 00001831: JUMPDEST 00001832: DUP2 00001833: EQ 00001834: PUSH2 0x183c 00001837: JUMPI 00001838: PUSH1 0x00 0000183a: DUP1 0000183b: REVERT 0000183c: JUMPDEST 0000183d: POP 0000183e: JUMP 0000183f: INVALID 00001840: UNKNOWN(0x4F) 00001841: PUSH24 0x6e61626c653a206e6577206f776e65722069732074686520 0000185a: PUSH27 0x65726f2061646472657373a2646970667358221220021ae2dd97eb 00001876: DUP15 00001877: UNKNOWN(0xB7) 00001878: UNKNOWN(0x0F) 00001879: UNKNOWN(0xDC) 0000187a: UNKNOWN(0xB7) 0000187b: DELEGATECALL 0000187c: CALLDATACOPY 0000187d: DUP13 0000187e: RETURNDATACOPY 0000187f: PUSH27 0x6ccda654f1ae0b1a06fcf4b820aa127c64736f6c63430007060033
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | cast | SELFDESTRUCT present | 85 | no | — |
viewevidence_json{
"notes": "selfdestruct can remove contract code and send funds; review reachability",
"selfdestruct_count": 1
}
|
| high | upgradeability | detector | Untrusted DELEGATECALL target reachable | 55 | no | no |
viewtrace_id: 0x399d654e5816107636b4f443430e1e98104fb76cdde07bf7b8508cb01a430b2e
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 144,
"trace_id": "0x399d654e5816107636b4f443430e1e98104fb76cdde07bf7b8508cb01a430b2e",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x96e80821",
"selector": "0x96e80821",
"calldata_variants": [
"0x96e80821",
"0x96e808210000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9dc29fac",
"selector": "0x9dc29fac",
"calldata_variants": [
"0x9dc29fac",
"0x9dc29fac0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbebbf4d0",
"selector": "0xbebbf4d0",
"calldata_variants": [
"0xbebbf4d0",
"0xbebbf4d00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf3fef3a3",
"selector": "0xf3fef3a3",
"calldata_variants": [
"0xf3fef3a3",
"0xf3fef3a30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1b66cb00",
"selector": "0x1b66cb00",
"calldata_variants": [
"0x1b66cb00",
"0x1b66cb000000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3edca44a",
"selector": "0x3edca44a",
"calldata_variants": [
"0x3edca44a",
"0x3edca44a0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 6267,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 1517,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"delegatecall_count": 1,
"untrusted_delegatecall_count": 1
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 1
}
|
| medium | other | detector | SELFDESTRUCT reachable | 45 | no | no |
viewtrace_id: 0x55c383409252045799b049dff5fe3a2e4d87e2a82ba124fc5131f4fd58dd5e94
validation_json{
"sink": "SELFDESTRUCT",
"errors": 0,
"status": "unknown",
"attempts": 24,
"trace_id": "0x55c383409252045799b049dff5fe3a2e4d87e2a82ba124fc5131f4fd58dd5e94",
"confirmed": false,
"trace_mode": "structLogs",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x96e80821",
"selector": "0x96e80821",
"calldata_variants": [
"0x96e80821",
"0x96e808210000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9dc29fac",
"selector": "0x9dc29fac",
"calldata_variants": [
"0x9dc29fac",
"0x9dc29fac0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbebbf4d0",
"selector": "0xbebbf4d0",
"calldata_variants": [
"0xbebbf4d0",
"0xbebbf4d00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf3fef3a3",
"selector": "0xf3fef3a3",
"calldata_variants": [
"0xf3fef3a3",
"0xf3fef3a30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1b66cb00",
"selector": "0x1b66cb00",
"calldata_variants": [
"0x1b66cb00",
"0x1b66cb000000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3edca44a",
"selector": "0x3edca44a",
"calldata_variants": [
"0x3edca44a",
"0x3edca44a0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 1517,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"selfdestruct_count": 1
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0x79eb0e359f43ce4dd831f8cdfb8658acee2c79b6f3b60db1c3d77ce8c0d841b5
call_targets:
0x620e59769085f69d2712a53aa0436821218e1068
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x79eb0e359f43ce4dd831f8cdfb8658acee2c79b6f3b60db1c3d77ce8c0d841b5",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x620e59769085f69d2712a53aa0436821218e1068"
],
"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": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x96e80821",
"selector": "0x96e80821",
"calldata_variants": [
"0x96e80821",
"0x96e808210000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9dc29fac",
"selector": "0x9dc29fac",
"calldata_variants": [
"0x9dc29fac",
"0x9dc29fac0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbebbf4d0",
"selector": "0xbebbf4d0",
"calldata_variants": [
"0xbebbf4d0",
"0xbebbf4d00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf3fef3a3",
"selector": "0xf3fef3a3",
"calldata_variants": [
"0xf3fef3a3",
"0xf3fef3a30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1b66cb00",
"selector": "0x1b66cb00",
"calldata_variants": [
"0x1b66cb00",
"0x1b66cb000000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3edca44a",
"selector": "0x3edca44a",
"calldata_variants": [
"0x3edca44a",
"0x3edca44a0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1455,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2050,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3149,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 6,
"guards_detected": [
{
"pc": 1517,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"untrusted_call_count": 6
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0x79eb0e359f43ce4dd831f8cdfb8658acee2c79b6f3b60db1c3d77ce8c0d841b5
call_targets:
0x620e59769085f69d2712a53aa0436821218e1068
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x79eb0e359f43ce4dd831f8cdfb8658acee2c79b6f3b60db1c3d77ce8c0d841b5",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x620e59769085f69d2712a53aa0436821218e1068"
],
"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": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x96e80821",
"selector": "0x96e80821",
"calldata_variants": [
"0x96e80821",
"0x96e808210000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9dc29fac",
"selector": "0x9dc29fac",
"calldata_variants": [
"0x9dc29fac",
"0x9dc29fac0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbebbf4d0",
"selector": "0xbebbf4d0",
"calldata_variants": [
"0xbebbf4d0",
"0xbebbf4d00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf3fef3a3",
"selector": "0xf3fef3a3",
"calldata_variants": [
"0xf3fef3a3",
"0xf3fef3a30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1b66cb00",
"selector": "0x1b66cb00",
"calldata_variants": [
"0x1b66cb00",
"0x1b66cb000000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3edca44a",
"selector": "0x3edca44a",
"calldata_variants": [
"0x3edca44a",
"0x3edca44a0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1455,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2050,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3149,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 6,
"guards_detected": [
{
"pc": 1517,
"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": 10
}
|