TW
Tripwire
Find contracts. Test them. Review real vulns.

Analysis Run

159e3a0f-c428-4b8a-82d1-6d7abf8eb94b

complete
Chain ID
1
Address
Block Number
Created
Sat, Jan 3, 2026 10:31 PM
Review Summary

What survived the funnel

Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?

Confirmed
0
Validated
0
Source
Bytecode only
Review Backing
Not yet
Best current signal
Untrusted CALL target/value reachable
crit 0 high 0 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
31470 report.consolidate complete 1 / 1 3 months ago
77446 artifact.fetch complete 1 / 3 2 weeks ago
77447 tool.cast_disasm complete 1 / 3 2 weeks ago
77448 analysis.bundle complete 1 / 3 2 weeks ago
77449 capability.graph complete 1 / 3 2 weeks ago
77450 detector.run complete 1 / 3 2 weeks ago
77451 validation.fork complete 1 / 3 2 weeks ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no
Implementation:
Verified Source: no

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
0
No findings?
yes
Summary
No concrete, exploitable value-extraction path identified from the provided runtime bytecode bundle.
View stderr
[codex:1413553] OpenAI Codex v0.77.0 (research preview)
[codex:1413553] --------
[codex:1413553] workdir: /tmp/codex-multi-1cr916mq
[codex:1413553] model: gpt-5.2-codex
[codex:1413553] provider: openai
[codex:1413553] approval: never
[codex:1413553] sandbox: read-only
[codex:1413553] reasoning effort: xhigh
[codex:1413553] reasoning summaries: auto
[codex:1413553] session id: 019b85f1-4d8e-7362-9a78-16de754ae3ab
[codex:1413553] --------
[codex:1413553] user
[codex:1413553] 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:1413553] 
[codex:1413553] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:1413553] 
[codex:1413553] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:1413553] - Gas inefficiency, code quality, or best practices
[codex:1413553] - Theoretical vulnerabilities without a clear extraction path
[codex:1413553] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:1413553] - Issues requiring social engineering or off-chain coordination
[codex:1413553] 
[codex:1413553] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:1413553] - CALL/DELEGATECALL with controllable destination or calldata
[codex:1413553] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:1413553] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:1413553] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:1413553] - External calls before state updates (reentrancy)
[codex:1413553] - SELFDESTRUCT with controllable beneficiary
[codex:1413553] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:1413553] 
[codex:1413553] For each finding, you MUST explain:
[codex:1413553] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:1413553] 2. The concrete sequence of transactions to extract value
[codex:1413553] 3. Why you believe this is exploitable (not just suspicious)
[codex:1413553] 
[codex:1413553] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:1413553] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:1413553] 
[codex:1413553] Output MUST be valid JSON matching the provided schema.
[codex:1413553] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:1413553] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:1413553] mcp startup: no servers
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Reading BYTECODE_BUNDLE.txt file**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc ls in /tmp/codex-multi-1cr916mq succeeded in 5ms:
[codex:1413553] BYTECODE_BUNDLE.txt
[codex:1413553] codex-output-schema.json
[codex:1413553] exec
[codex:1413553] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-1cr916mq succeeded in 5ms:
[codex:1413553] Runtime bytecode bundle for best-effort auditing.
[codex:1413553] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1413553] 
[codex:1413553] FILE: runtime_bytecode.hex
[codex:1413553] 0x60806040526004361061009f575f3560e01c80639e4e7318116100635780639e4e731814610227578063a0ab965314610251578063a0e67e2b14610279578063affed0e0146102a3578063ba9a91a5146102cd578063f698da25146102f7576100df565b806304622c2e146101435780631279991b1461016d5780632f54bf6e1461019757806333330fe0146101d357806342cde4e8146101fd576100df565b366100df577fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c33346040516100d59291906109b2565b60405180910390a1005b335f357fffffffff0000000000000000000000000000000000000000000000000000000016346040517fc46a58f800000000000000000000000000000000000000000000000000000000815260040161013a93929190610a13565b60405180910390fd5b34801561014e575f5ffd5b50610157610321565b6040516101649190610a60565b60405180910390f35b348015610178575f5ffd5b50610181610347565b60405161018e9190610a60565b60405180910390f35b3480156101a2575f5ffd5b506101bd60048036038101906101b89190610ab4565b61036d565b6040516101ca9190610af9565b60405180910390f35b3480156101de575f5ffd5b506101e761038a565b6040516101f49190610a60565b60405180910390f35b348015610208575f5ffd5b506102116103b0565b60405161021e9190610b12565b60405180910390f35b348015610232575f5ffd5b5061023b6103b6565b6040516102489190610a60565b60405180910390f35b34801561025c575f5ffd5b5061027760048036038101906102729190610eb0565b6103dc565b005b348015610284575f5ffd5b5061028d610888565b60405161029a9190611088565b60405180910390f35b3480156102ae575f5ffd5b506102b7610913565b6040516102c49190610b12565b60405180910390f35b3480156102d8575f5ffd5b506102e1610918565b6040516102ee9190610a60565b60405180910390f35b348015610302575f5ffd5b5061030b61093e565b6040516103189190610a60565b60405180910390f35b7f32f3de0d7fc1cdd909bb4d992a94061e800669c611b9d07f137df1f4bb85f0975f1b81565b7f3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d75f1b81565b6002602052805f5260405f205f915054906101000a900460ff1681565b7fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564725f1b81565b60015481565b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc65f1b81565b600154875114610418576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551875114801561042a575087518751145b610460576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806104c557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8290610507576040517f3221267a0000000000000000000000000000000000000000000000000000000081526004016104fe91906110a8565b60405180910390fd5b505f7f3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d75f1b868686805190602001205f54878760405160200161055097969594939291906110d0565b6040516020818303038152906040528051906020012090505f6003548260405160200161057e9291906111b1565b6040516020818303038152906040528051906020012090505f5f90505f5f90505b60015481101561073c575f6001848e84815181106105c0576105bf6111e7565b5b60200260200101518e85815181106105db576105da6111e7565b5b60200260200101518e86815181106105f6576105f56111e7565b5b60200260200101516040515f815260200160405260405161061a9493929190611223565b6020604051602081039080840390855afa15801561063a573d5f5f3e3d5ffd5b5050506020604051035190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116106ab576040517f39d43e8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661072b576040517f5d652eb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050808060010191505061059f565b5060015f5461074b9190611293565b5f819055505f865111156107995761076288610944565b610798576040517f27033d6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f8873ffffffffffffffffffffffffffffffffffffffff16888690896040516107c29190611318565b5f60405180830381858888f193505050503d805f81146107fd576040519150601f19603f3d011682016040523d82523d5f602084013e610802565b606091505b505090508061083d576040517f75cfdcce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f187ae0bfb8619f02a4db1cfef70a54e5722d00d8fcfe6811f1a1f044633ca0a7868a8a8a60405161087294939291906113d1565b60405180910390a1505050505050505050505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561090957602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116108c0575b5050505050905090565b5f5481565b7f72dc1dc597006ea524d75bd3377c4663827629e52e27fd2169cca6f90f6d1ef95f1b81565b60035481565b5f5f823b90505f8163ffffffff1611915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6109848261095b565b9050919050565b6109948161097a565b82525050565b5f819050919050565b6109ac8161099a565b82525050565b5f6040820190506109c55f83018561098b565b6109d260208301846109a3565b9392505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610a0d816109d9565b82525050565b5f606082019050610a265f83018661098b565b610a336020830185610a04565b610a4060408301846109a3565b949350505050565b5f819050919050565b610a5a81610a48565b82525050565b5f602082019050610a735f830184610a51565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b610a938161097a565b8114610a9d575f5ffd5b50565b5f81359050610aae81610a8a565b92915050565b5f60208284031215610ac957610ac8610a82565b5b5f610ad684828501610aa0565b91505092915050565b5f8115159050919050565b610af381610adf565b82525050565b5f602082019050610b0c5f830184610aea565b92915050565b5f602082019050610b255f8301846109a3565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610b7582610b2f565b810181811067ffffffffffffffff82111715610b9457610b93610b3f565b5b80604052505050565b5f610ba6610a79565b9050610bb28282610b6c565b919050565b5f67ffffffffffffffff821115610bd157610bd0610b3f565b5b602082029050602081019050919050565b5f5ffd5b5f60ff82169050919050565b610bfb81610be6565b8114610c05575f5ffd5b50565b5f81359050610c1681610bf2565b92915050565b5f610c2e610c2984610bb7565b610b9d565b90508083825260208201905060208402830185811115610c5157610c50610be2565b5b835b81811015610c7a5780610c668882610c08565b845260208401935050602081019050610c53565b5050509392505050565b5f82601f830112610c9857610c97610b2b565b5b8135610ca8848260208601610c1c565b91505092915050565b5f67ffffffffffffffff821115610ccb57610cca610b3f565b5b602082029050602081019050919050565b610ce581610a48565b8114610cef575f5ffd5b50565b5f81359050610d0081610cdc565b92915050565b5f610d18610d1384610cb1565b610b9d565b90508083825260208201905060208402830185811115610d3b57610d3a610be2565b5b835b81811015610d645780610d508882610cf2565b845260208401935050602081019050610d3d565b5050509392505050565b5f82601f830112610d8257610d81610b2b565b5b8135610d92848260208601610d06565b91505092915050565b5f610da58261095b565b9050919050565b610db581610d9b565b8114610dbf575f5ffd5b50565b5f81359050610dd081610dac565b92915050565b610ddf8161099a565b8114610de9575f5ffd5b50565b5f81359050610dfa81610dd6565b92915050565b5f5ffd5b5f67ffffffffffffffff821115610e1e57610e1d610b3f565b5b610e2782610b2f565b9050602081019050919050565b828183375f83830152505050565b5f610e54610e4f84610e04565b610b9d565b905082815260208101848484011115610e7057610e6f610e00565b5b610e7b848285610e34565b509392505050565b5f82601f830112610e9757610e96610b2b565b5b8135610ea7848260208601610e42565b91505092915050565b5f5f5f5f5f5f5f5f610100898b031215610ecd57610ecc610a82565b5b5f89013567ffffffffffffffff811115610eea57610ee9610a86565b5b610ef68b828c01610c84565b985050602089013567ffffffffffffffff811115610f1757610f16610a86565b5b610f238b828c01610d6e565b975050604089013567ffffffffffffffff811115610f4457610f43610a86565b5b610f508b828c01610d6e565b9650506060610f618b828c01610dc2565b9550506080610f728b828c01610dec565b94505060a089013567ffffffffffffffff811115610f9357610f92610a86565b5b610f9f8b828c01610e83565b93505060c0610fb08b828c01610aa0565b92505060e0610fc18b828c01610dec565b9150509295985092959890939650565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6110038161097a565b82525050565b5f6110148383610ffa565b60208301905092915050565b5f602082019050919050565b5f61103682610fd1565b6110408185610fdb565b935061104b83610feb565b805f5b8381101561107b5781516110628882611009565b975061106d83611020565b92505060018101905061104e565b5085935050505092915050565b5f6020820190508181035f8301526110a0818461102c565b905092915050565b5f6020820190506110bb5f83018461098b565b92915050565b6110ca81610d9b565b82525050565b5f60e0820190506110e35f83018a610a51565b6110f060208301896110c1565b6110fd60408301886109a3565b61110a6060830187610a51565b61111760808301866109a3565b61112460a083018561098b565b61113160c08301846109a3565b98975050505050505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f61117b60028361113d565b915061118682611147565b600282019050919050565b5f819050919050565b6111ab6111a682610a48565b611191565b82525050565b5f6111bb8261116f565b91506111c7828561119a565b6020820191506111d7828461119a565b6020820191508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61121d81610be6565b82525050565b5f6080820190506112365f830187610a51565b6112436020830186611214565b6112506040830185610a51565b61125d6060830184610a51565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61129d8261099a565b91506112a88361099a565b92508282019050808211156112c0576112bf611266565b5b92915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6112f2826112c6565b6112fc81856112d0565b935061130c8185602086016112da565b80840191505092915050565b5f61132382846112e8565b915081905092915050565b5f819050919050565b5f61135161134c6113478461095b565b61132e565b61095b565b9050919050565b5f61136282611337565b9050919050565b5f61137382611358565b9050919050565b61138381611369565b82525050565b5f82825260208201905092915050565b5f6113a3826112c6565b6113ad8185611389565b93506113bd8185602086016112da565b6113c681610b2f565b840191505092915050565b5f6080820190506113e45f83018761098b565b6113f1602083018661137a565b6113fe60408301856109a3565b81810360608301526114108184611399565b90509594505050505056fea26469706673582212201c1c501529f986e5b363882530da2c263d7d66c1567338bf66d8aa861bfcab8564736f6c634300081b0033
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Preparing to analyze bytecode for vulnerabilities**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import sys
[codex:1413553] hexstr=open('BYTECODE_BUNDLE.txt').read().split('runtime_bytecode.hex')[1]
[codex:1413553] # extract hex after 0x
[codex:1413553] import re
[codex:1413553] m=re.search(r'0x([0-9a-fA-F]+)',hexstr)
[codex:1413553] code=m.group(1)
[codex:1413553] # opcode map
[codex:1413553] opcodes={
[codex:1413553] 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:1413553] 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:1413553] 0x20:'SHA3',
[codex:1413553] 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:1413553] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1413553] 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:1413553] 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:1413553] 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:1413553] 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:1413553] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1413553] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1413553] }
[codex:1413553] code_bytes=bytes.fromhex(code)
[codex:1413553] # disassemble printing offset, opcode, immediate
[codex:1413553] out=[]
[codex:1413553] i=0
[codex:1413553] while i<len(code_bytes):
[codex:1413553]     op=code_bytes[i]
[codex:1413553]     name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553]     if 0x60 <= op <= 0x7f:
[codex:1413553]         n=op-0x5f
[codex:1413553]         imm=code_bytes[i+1:i+1+n]
[codex:1413553]         out.append((i, name, '0x'+imm.hex()))
[codex:1413553]         i+=1+n
[codex:1413553]     else:
[codex:1413553]         out.append((i, name, None))
[codex:1413553]         i+=1
[codex:1413553] 
[codex:1413553] # print with offsets
[codex:1413553] for off,name,imm in out:
[codex:1413553]     if imm is None:
[codex:1413553]         print(f'{off:04x}: {name}')
[codex:1413553]     else:
[codex:1413553]         print(f'{off:04x}: {name} {imm}')
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 28ms:
[codex:1413553] 0000: PUSH1 0x80
[codex:1413553] 0002: PUSH1 0x40
[codex:1413553] 0004: MSTORE
[codex:1413553] 0005: PUSH1 0x04
[codex:1413553] 0007: CALLDATASIZE
[codex:1413553] 0008: LT
[codex:1413553] 0009: PUSH2 0x009f
[codex:1413553] 000c: JUMPI
[codex:1413553] 000d: OP_5f
[codex:1413553] 000e: CALLDATALOAD
[codex:1413553] 000f: PUSH1 0xe0
[codex:1413553] 0011: SHR
[codex:1413553] 0012: DUP1
[codex:1413553] 0013: PUSH4 0x9e4e7318
[codex:1413553] 0018: GT
[codex:1413553] 0019: PUSH2 0x0063
[codex:1413553] 001c: JUMPI
[codex:1413553] 001d: DUP1
[codex:1413553] 001e: PUSH4 0x9e4e7318
[codex:1413553] 0023: EQ
[codex:1413553] 
[codex:1413553] 
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing multisig contract bytecode structure**
[codex:1413553] thinking
[codex:1413553] **Decoding intricate calldata and verifying meta-transaction logic**
[codex:1413553] 
[codex:1413553] I’m dissecting the complex calldata decoder that parses multiple static and dynamic parameters, matching a function resembling a meta-transaction executor. It verifies the caller against an authorized executor address or allows anyone if zero, then constructs EIP-712 hashes using stored constants and nonce values. The subsequent signature verification loop enforces sorted, unique signers and likely applies threshold checks for multisig approval.
[codex:1413553] thinking
[codex:1413553] **Analyzing owner mapping and storage layout correlations**
[codex:1413553] 
[codex:1413553] I’m examining how the contract verifies owners against a stored mapping, mapping this logic to Gnosis Safe’s typical storage layout and function selectors. It looks like slot2 holds the owners mapping, slot0 the nonce, and the contract supports standard Safe functions like getOwners(), suggesting this is a variant of Gnosis Safe or strongly inspired by it. I’m also considering subtle differences in selector mappings and storage orders to confirm exact correspondence.
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] try:
[codex:1413553]     import sha3
[codex:1413553]     k=sha3.keccak_256()
[codex:1413553]     k.update(b'isOwner(address)')
[codex:1413553]     print(k.hexdigest()[:8])
[codex:1413553] except Exception as e:
[codex:1413553]     print('err',e)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 18ms:
[codex:1413553] err No module named 'sha3'
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing Gnosis Safe function selectors and calldata decoding**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read()
[codex:1413553] m=re.search(r'0x([0-9a-fA-F]+)',code)
[codex:1413553] hexstr=m.group(1)
[codex:1413553] code_bytes=bytes.fromhex(hexstr)
[codex:1413553] # opcode map
[codex:1413553] opcodes={
[codex:1413553] 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:1413553] 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:1413553] 0x20:'SHA3',
[codex:1413553] 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:1413553] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1413553] 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:1413553] 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:1413553] 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:1413553] 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:1413553] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1413553] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1413553] }
[codex:1413553] 
[codex:1413553] def disasm(start,end):
[codex:1413553]     i=start
[codex:1413553]     while i<end:
[codex:1413553]         op=code_bytes[i]
[codex:1413553]         name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553]         if 0x60<=op<=0x7f:
[codex:1413553]             n=op-0x5f
[codex:1413553]             imm=code_bytes[i+1:i+1+n]
[codex:1413553]             print(f'{i:04x}: {name} 0x{imm.hex()}')
[codex:1413553]             i+=1+n
[codex:1413553]         else:
[codex:1413553]             print(f'{i:04x}: {name}')
[codex:1413553]             i+=1
[codex:1413553] 
[codex:1413553] # print around 0x0ab4
[codex:1413553] start=0x0aa0; end=0x0b10
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 27ms:
[codex:1413553] ---
[codex:1413553] 0aa0: JUMPDEST
[codex:1413553] 0aa1: OP_5f
[codex:1413553] 0aa2: DUP2
[codex:1413553] 0aa3: CALLDATALOAD
[codex:1413553] 0aa4: SWAP1
[codex:1413553] 0aa5: POP
[codex:1413553] 0aa6: PUSH2 0x0aae
[codex:1413553] 0aa9: DUP2
[codex:1413553] 0aaa: PUSH2 0x0a8a
[codex:1413553] 0aad: JUMP
[codex:1413553] 0aae: JUMPDEST
[codex:1413553] 0aaf: SWAP3
[codex:1413553] 0ab0: SWAP2
[codex:1413553] 0ab1: POP
[codex:1413553] 0ab2: POP
[codex:1413553] 0ab3: JUMP
[codex:1413553] 0ab4: JUMPDEST
[codex:1413553] 0ab5: OP_5f
[codex:1413553] 0ab6: PUSH1 0x20
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing bytecode decoder structure**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 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:1413553] 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:1413553] 0x20:'SHA3',
[codex:1413553] 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:1413553] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1413553] 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:1413553] 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:1413553] 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:1413553] 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:1413553] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1413553] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1413553] }
[codex:1413553] 
[codex:1413553] def disasm(start,end):
[codex:1413553]     i=start
[codex:1413553]     while i<end:
[codex:1413553]         op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553]         if 0x60<=op<=0x7f:
[codex:1413553]             n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553]             print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553]         else:
[codex:1413553]             print(f'{i:04x}: {name}'); i+=1
[codex:1413553] 
[codex:1413553] # print around 0x0a82
[codex:1413553] start=0x0a70; end=0x0ab4
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 24ms:
[codex:1413553] ---
[codex:1413553] 0a70: EXP
[codex:1413553] 0a71: MLOAD
[codex:1413553] 0a72: JUMP
[codex:1413553] 0a73: JUMPDEST
[codex:1413553] 0a74: SWAP3
[codex:1413553] 0a75: SWAP2
[codex:1413553] 0a76: POP
[codex:1413553] 0a77: POP
[codex:1413553] 0a78: JUMP
[codex:1413553] 0a79: JUMPDEST
[codex:1413553] 0a7a: OP_5f
[codex:1413553] 0a7b: PUSH1 0x40
[codex:1413553] 0a7d: MLOAD
[codex:1413553] 0a7e: SWAP1
[codex:1413553] 0a7f: POP
[codex:1413553] 0a80: SWAP1
[codex:1413553] 0a81: JUMP
[codex:1413553] 0a82: JUMPDEST
[codex:1413553] 0a83: OP_5f
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing function selectors and validation logic**
[codex:1413553] 
[codex:1413553] I'm mapping the functions by their selectors and observing how addresses are decoded and validated, especially focusing on a likely `isOwner(address)` function. It seems similar to a Gnosis Safe contract with standard signature checks and EIP-1271 staticcalls. I'm also considering potential vulnerabilities by examining signature verification and calldata construction around specific opcode locations.
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read()
[codex:1413553] if '1626ba7e' in code:
[codex:1413553]     print('found')
[codex:1413553] else:
[codex:1413553]     # search hexstring for 1626ba7e
[codex:1413553]     import re
[codex:1413553]     m=re.search(r'0x([0-9a-fA-F]+)',code)
[codex:1413553]     hexstr=m.group(1)
[codex:1413553]     print('found' if '1626ba7e' in hexstr else 'not found')
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 25ms:
[codex:1413553] not found
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Investigating signature verification selector**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',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',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',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',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1413553] 
[codex:1413553] def disasm(start,end):
[codex:1413553]     i=start
[codex:1413553]     while i<end:
[codex:1413553]         op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553]         if 0x60<=op<=0x7f:
[codex:1413553]             n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553]             print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553]         else:
[codex:1413553]             print(f'{i:04x}: {name}'); i+=1
[codex:1413553] 
[codex:1413553] start=0x1210; end=0x1266
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 28ms:
[codex:1413553] ---
[codex:1413553] 1210: PUSH1 0x24
[codex:1413553] 1212: OP_5f
[codex:1413553] 1213: REVERT
[codex:1413553] 1214: JUMPDEST
[codex:1413553] 1215: PUSH2 0x121d
[codex:1413553] 1218: DUP2
[codex:1413553] 1219: PUSH2 0x0be6
[codex:1413553] 121c: JUMP
[codex:1413553] 121d: JUMPDEST
[codex:1413553] 121e: DUP3
[codex:1413553] 121f: MSTORE
[codex:1413553] 1220: POP
[codex:1413553] 1221: POP
[codex:1413553] 1222: JUMP
[codex:1413553] 1223: JUMPDEST
[codex:1413553] 1224: OP_5f
[codex:1413553] 1225: PUSH1 0x80
[codex:1413553] 1227: DUP3
[codex:1413553] 1228: ADD
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing ecrecover call and signature checks**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',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',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',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',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1413553] 
[codex:1413553] def disasm(start,end):
[codex:1413553]     i=start
[codex:1413553]     while i<end:
[codex:1413553]         op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553]         if 0x60<=op<=0x7f:
[codex:1413553]             n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553]             print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553]         else:
[codex:1413553]             print(f'{i:04x}: {name}'); i+=1
[codex:1413553] 
[codex:1413553] start=0x0730; end=0x07a5
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 25ms:
[codex:1413553] ---
[codex:1413553] 0730: DUP1
[codex:1413553] 0731: DUP1
[codex:1413553] 0732: PUSH1 0x01
[codex:1413553] 0734: ADD
[codex:1413553] 0735: SWAP2
[codex:1413553] 0736: POP
[codex:1413553] 0737: POP
[codex:1413553] 0738: PUSH2 0x059f
[codex:1413553] 073b: JUMP
[codex:1413553] 073c: JUMPDEST
[codex:1413553] 073d: POP
[codex:1413553] 073e: PUSH1 0x01
[codex:1413553] 0740: OP_5f
[codex:1413553] 0741: SLOAD
[codex:1413553] 0742: PUSH2 0x074b
[codex:1413553] 0745: SWAP2
[codex:1413553] 0746: SWAP1
[codex:1413553] 0747: PUSH2 0x1293
[codex:1413553] 074a: JUMP
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing refund and nonce handling logic**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] try:
[codex:1413553]     from Crypto.Hash import keccak
[codex:1413553]     k=keccak.new(digest_bits=256)
[codex:1413553]     k.update(b'getThreshold()')
[codex:1413553]     print(k.hexdigest()[:8])
[codex:1413553] except Exception as e:
[codex:1413553]     print('err',e)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 55ms:
[codex:1413553] e75235b8
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Computing function selectors**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] from Crypto.Hash import keccak
[codex:1413553] 
[codex:1413553] def selector(sig):
[codex:1413553]     k=keccak.new(digest_bits=256)
[codex:1413553]     k.update(sig.encode())
[codex:1413553]     return k.hexdigest()[:8]
[codex:1413553] 
[codex:1413553] sigs=[
[codex:1413553]     'getOwners()',
[codex:1413553]     'getThreshold()',
[codex:1413553]     'isOwner(address)',
[codex:1413553]     'nonce()',
[codex:1413553]     'getChainId()',
[codex:1413553]     'domainSeparator()',
[codex:1413553]     'getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)',
[codex:1413553]     'execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)',
[codex:1413553]     'approveHash(bytes32)',
[codex:1413553]     'approvedHashes(address,bytes32)',
[codex:1413553]     'getOwners()'
[codex:1413553] ]
[codex:1413553] for s in sigs:
[codex:1413553]     print(s, selector(s))
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 37ms:
[codex:1413553] getOwners() a0e67e2b
[codex:1413553] getThreshold() e75235b8
[codex:1413553] isOwner(address) 2f54bf6e
[codex:1413553] nonce() affed0e0
[codex:1413553] getChainId() 3408e470
[codex:1413553] domainSeparator() f698da25
[codex:1413553] getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256) d8d11f78
[codex:1413553] execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes) 6a761202
[codex:1413553] approveHash(bytes32) d4d9bdcd
[codex:1413553] approvedHashes(address,bytes32) 7d832974
[codex:1413553] getOwners() a0e67e2b
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing contract function selectors**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] from Crypto.Hash import keccak
[codex:1413553] 
[codex:1413553] def sel(sig):
[codex:1413553]     k=keccak.new(digest_bits=256); k.update(sig.encode()); return k.hexdigest()[:8]
[codex:1413553] 
[codex:1413553] candidates=[
[codex:1413553]     'execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)',
[codex:1413553]     'execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes)',
[codex:1413553]     'executeTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)',
[codex:1413553]     'executeTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes)',
[codex:1413553]     'execute(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)',
[codex:1413553]     'execute(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes)',
[codex:1413553]     'getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)',
[codex:1413553]     'encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)',
[codex:1413553]     'getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes32)',
[codex:1413553]     'checkSignatures(bytes32,bytes,bytes)',
[codex:1413553]     'execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)',
[codex:1413553]     'execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes)',
[codex:1413553] ]
[codex:1413553] for c in candidates:
[codex:1413553]     print(c, sel(c))
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 39ms:
[codex:1413553] execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes) 6a761202
[codex:1413553] execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes) b4a2ee9d
[codex:1413553] executeTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes) 3f9f3d09
[codex:1413553] executeTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes) 1dc4e463
[codex:1413553] execute(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes) 6a4d7651
[codex:1413553] execute(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes) c32c9294
[codex:1413553] getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256) d8d11f78
[codex:1413553] encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256) e86637db
[codex:1413553] getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes32) 0ab6e0a2
[codex:1413553] checkSignatures(bytes32,bytes,bytes) 934f3a11
[codex:1413553] execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256) caad0464
[codex:1413553] execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes) b4a2ee9d
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing function parameter decoding**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',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',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',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',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1413553] 
[codex:1413553] def disasm(start,end):
[codex:1413553]     i=start
[codex:1413553]     while i<end:
[codex:1413553]         op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553]         if 0x60<=op<=0x7f:
[codex:1413553]             n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553]             print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553]         else:
[codex:1413553]             print(f'{i:04x}: {name}'); i+=1
[codex:1413553] 
[codex:1413553] start=0x0d00; end=0x0d90
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 25ms:
[codex:1413553] ---
[codex:1413553] 0d00: JUMPDEST
[codex:1413553] 0d01: SWAP3
[codex:1413553] 0d02: SWAP2
[codex:1413553] 0d03: POP
[codex:1413553] 0d04: POP
[codex:1413553] 0d05: JUMP
[codex:1413553] 0d06: JUMPDEST
[codex:1413553] 0d07: OP_5f
[codex:1413553] 0d08: PUSH2 0x0d18
[codex:1413553] 0d0b: PUSH2 0x0d13
[codex:1413553] 0d0e: DUP5
[codex:1413553] 0d0f: PUSH2 0x0cb1
[codex:1413553] 0d12: JUMP
[codex:1413553] 0d13: JUMPDEST
[codex:1413553] 0d14: PUSH2 0x0b9d
[codex:1413553] 0d17: JUMP
[codex:1413553] 0d18: JUMPDEST
[codex:1413553] 0d19: SWAP1
[codex:1413553] 0d1a: POP
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing dynamic array decoding and function selectors**
[codex:1413553] 
[codex:1413553] I'm unpacking how the bytecode decodes dynamic arrays like `uint256[]` and `bytes`, checking length validation with uint64 bounds, and trying to map function selectors to Gnosis Safe variants. The goal is to identify parameter types and potential vulnerabilities, especially in signature verification and transaction execution. I'm tracing the logic behind signature checks and domain separator consistency to see if replay or unauthorized execution risks exist.
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] from Crypto.Hash import keccak
[codex:1413553] 
[codex:1413553] def keccak_hex(s):
[codex:1413553]     k=keccak.new(digest_bits=256); k.update(s.encode()); return k.hexdigest()
[codex:1413553] 
[codex:1413553] cands={
[codex:1413553]     'EIP712Domain(uint256 chainId,address verifyingContract)':None,
[codex:1413553]     'SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)':None,
[codex:1413553]     'SafeMessage(bytes message)':None,
[codex:1413553]     'EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)':None,
[codex:1413553]     'Transaction(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)':None,
[codex:1413553]     'Execution(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)':None,
[codex:1413553]     'Execute(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)':None,
[codex:1413553]     'SafeMessage(bytes message)':None,
[codex:1413553] }
[codex:1413553] for s in list(cands):
[codex:1413553]     print(s, keccak_hex(s))
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 35ms:
[codex:1413553] EIP712Domain(uint256 chainId,address verifyingContract) 47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218
[codex:1413553] SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce) bb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8
[codex:1413553] SafeMessage(bytes message) 60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca
[codex:1413553] EIP712Domain(string name,string version,uint256 chainId,address verifyingContract) 8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f
[codex:1413553] Transaction(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce) f6a8e4354614ba5f3f1d6e653b1f3e68c8e37c36dfaa21d783839cee1d6831b2
[codex:1413553] Execution(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce) 31e976cbd047d7e9d55a4ca16fb7eadc05a3b0350f2a97e4527b46ccd4837ae1
[codex:1413553] Execute(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce) 68518d42e51fde82d7833fa3ada9aab3e4f75261bcc8505d329b5a53ad9b07cb
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing bytecode hashes and signature patterns**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] # find SSTORE opcodes
[codex:1413553] sstore_offsets=[i for i,b in enumerate(code_bytes) if b==0x55]
[codex:1413553] print('SSTORE offsets', [hex(o) for o in sstore_offsets])
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 29ms:
[codex:1413553] SSTORE offsets ['0x74f']
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Checking for delegatecall usage**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] ops=[('DELEGATECALL',0xf4),('CALL',0xf1),('CALLCODE',0xf2),('STATICCALL',0xfa),('SELFDESTRUCT',0xff)]
[codex:1413553] for name,op in ops:
[codex:1413553]     offs=[hex(i) for i,b in enumerate(code_bytes) if b==op]
[codex:1413553]     print(name, offs)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 25ms:
[codex:1413553] DELEGATECALL ['0xaf', '0x1ed', '0x33e', '0x35b', '0x51d']
[codex:1413553] CALL ['0x33d', '0x39f', '0x7ce', '0x857', '0x13e7']
[codex:1413553] CALLCODE ['0x3be', '0xc14', '0xd4e', '0x12ec']
[codex:1413553] STATICCALL ['0x62b', '0xdf4', '0x1012']
[codex:1413553] SELFDESTRUCT ['0xa7', '0xe4', '0xe5', '0xe6', '0xe7', '0x386', '0x463', '0x464', '0x465', '0x466', '0x467', '0x468', '0x469', '0x46a', '0x46b', '0x46c', '0x46d', '0x46e', '0x46f', '0x470', '0x471', '0x472', '0x473', '0x474', '0x475', '0x476', '0x47a', '0x47b', '0x47c', '0x47d', '0x47e', '0x47f', '0x480', '0x481', '0x482', '0x483', '0x484', '0x485', '0x486', '0x487', '0x488', '0x489', '0x48a', '0x48b', '0x48c', '0x48d', '0x498', '0x499', '0x49a', '0x49b', '0x49c', '0x49d', '0x49e', '0x49f', '0x4a0', '0x4a1', '0x4a2', '0x4a3', '0x4a4', '0x4a5', '0x4a6', '0x4a7', '0x4a8', '0x4a9', '0x4aa', '0x4ab', '0x4af', '0x4b0', '0x4b1', '0x4b2', '0x4b3', '0x4b4', '0x4b5', '0x4b6', '0x4b7', '0x4b8', '0x4b9', '0x4ba', '0x4bb', '0x4bc', '0x4bd', '0x4be', '0x4bf', '0x4c0', '0x4c1', '0x4c2', '0x649', '0x64a', '0x64b', '0x64c', '0x64d', '0x64e', '0x64f', '0x650', '0x651', '0x652', '0x653', '0x654', '0x655', '0x656', '0x657', '0x658', '0x659', '0x65a', '0x65b', '0x65c', '0x660', '0x661', '0x662', '0x663', '0x664', '0x665', '0x666', '0x667', '0x668', '0x669', '0x66a', '0x66b', '0x66c', '0x66d', '0x66e', '0x66f', '0x670', '0x671', '0x672', '0x673', '0x6b1', '0x6b2', '0x6b3', '0x6b4', '0x6b5', '0x6b6', '0x6b7', '0x6b8', '0x6b9', '0x6ba', '0x6bb', '0x6bc', '0x6bd', '0x6be', '0x6bf', '0x6c0', '0x6c1', '0x6c2', '0x6c3', '0x6c4', '0x6c7', '0x6c8', '0x6c9', '0x6ca', '0x6cb', '0x6cc', '0x6cd', '0x6ce', '0x6cf', '0x6d0', '0x6d1', '0x6d2', '0x6d3', '0x6d4', '0x6d5', '0x6d6', '0x6d7', '0x6d8', '0x6d9', '0x6da', '0x6f4', '0x79d', '0x79e', '0x79f', '0x7a0', '0x7a1', '0x7a2', '0x7a3', '0x7a4', '0x7a5', '0x7a6', '0x7a7', '0x7a8', '0x7a9', '0x7aa', '0x7ab', '0x7ac', '0x7ad', '0x7ae', '0x7af', '0x7b0', '0x8cd', '0x8ce', '0x8cf', '0x8d0', '0x8d1', '0x8d2', '0x8d3', '0x8d4', '0x8d5', '0x8d6', '0x8d7', '0x8d8', '0x8d9', '0x8da', '0x8db', '0x8dc', '0x8dd', '0x8de', '0x8df', '0x8e0', '0x8e3', '0x8e4', '0x8e5', '0x8e6', '0x8e7', '0x8e8', '0x8e9', '0x8ea', '0x8eb', '0x8ec', '0x8ed', '0x8ee', '0x8ef', '0x8f0', '0x8f1', '0x8f2', '0x8f3', '0x8f4', '0x8f5', '0x8f6', '0x94e', '0x94f', '0x950', '0x951', '0x95e', '0x95f', '0x960', '0x961', '0x962', '0x963', '0x964', '0x965', '0x966', '0x967', '0x968', '0x969', '0x96a', '0x96b', '0x96c', '0x96d', '0x96e', '0x96f', '0x970', '0x971', '0x9dc', '0x9dd', '0x9de', '0x9df', '0xb7c', '0xb7d', '0xb7e', '0xb7f', '0xb80', '0xb81', '0xb82', '0xb83', '0xbba', '0xbbb', '0xbbc', '0xbbd', '0xbbe', '0xbbf', '0xbc0', '0xbc1', '0xbe9', '0xcb4', '0xcb5', '0xcb6', '0xcb7', '0xcb8', '0xcb9', '0xcba', '0xcbb', '0xe07', '0xe08', '0xe09', '0xe0a', '0xe0b', '0xe0c', '0xe0d', '0xe0e', '0xed3', '0xed4', '0xed5', '0xed6', '0xed7', '0xed8', '0xed9', '0xeda', '0xf00', '0xf01', '0xf02', '0xf03', '0xf04', '0xf05', '0xf06', '0xf07', '0xf2d', '0xf2e', '0xf2f', '0xf30', '0xf31', '0xf32', '0xf33', '0xf34', '0xf7c', '0xf7d', '0xf7e', '0xf7f', '0xf80', '0xf81', '0xf82', '0xf83']
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing opcode accuracy and storage mapping**
[codex:1413553] 
[codex:1413553] I'm verifying real opcode locations versus data bytes to avoid false positives like misreading PUSH data as calls. I’m also starting to map storage slots and constants to known wallet types, aiming to identify any exploitable vulnerabilities or confirm no findings per the user's strict criteria.
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',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',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',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',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1413553] 
[codex:1413553] def disasm(start,end):
[codex:1413553]     i=start
[codex:1413553]     while i<end:
[codex:1413553]         op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553]         if 0x60<=op<=0x7f:
[codex:1413553]             n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553]             print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553]         else:
[codex:1413553]             print(f'{i:04x}: {name}'); i+=1
[codex:1413553] 
[codex:1413553] start=0x0500; end=0x05a0
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 24ms:
[codex:1413553] ---
[codex:1413553] 0500: BLOCKHASH
[codex:1413553] 0501: MLOAD
[codex:1413553] 0502: DUP1
[codex:1413553] 0503: SWAP2
[codex:1413553] 0504: SUB
[codex:1413553] 0505: SWAP1
[codex:1413553] 0506: REVERT
[codex:1413553] 0507: JUMPDEST
[codex:1413553] 0508: POP
[codex:1413553] 0509: OP_5f
[codex:1413553] 050a: PUSH32 0x3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d7
[codex:1413553] 052b: OP_5f
[codex:1413553] 052c: SHL
[codex:1413553] 052d: DUP7
[codex:1413553] 052e: DUP7
[codex:1413553] 052f: DUP7
[codex:1413553] 0530: DUP1
[codex:1413553] 0531: MLOAD
[codex:1413553] 0532: SWAP1
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing memory construction and hashing steps**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',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',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',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',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1413553] 
[codex:1413553] def disasm(start,end):
[codex:1413553]     i=start
[codex:1413553]     while i<end:
[codex:1413553]         op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553]         if 0x60<=op<=0x7f:
[codex:1413553]             n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553]             print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553]         else:
[codex:1413553]             print(f'{i:04x}: {name}'); i+=1
[codex:1413553] 
[codex:1413553] start=0x10d0; end=0x113d
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 26ms:
[codex:1413553] ---
[codex:1413553] 10d0: JUMPDEST
[codex:1413553] 10d1: OP_5f
[codex:1413553] 10d2: PUSH1 0xe0
[codex:1413553] 10d4: DUP3
[codex:1413553] 10d5: ADD
[codex:1413553] 10d6: SWAP1
[codex:1413553] 10d7: POP
[codex:1413553] 10d8: PUSH2 0x10e3
[codex:1413553] 10db: OP_5f
[codex:1413553] 10dc: DUP4
[codex:1413553] 10dd: ADD
[codex:1413553] 10de: DUP11
[codex:1413553] 10df: PUSH2 0x0a51
[codex:1413553] 10e2: JUMP
[codex:1413553] 10e3: JUMPDEST
[codex:1413553] 10e4: PUSH2 0x10f0
[codex:1413553] 10e7: PUSH1 0x20
[codex:1413553] 10e9: DUP4
[codex:1413553] 10ea: ADD
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing struct field layout and hash computation**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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',0x20:'SHA3',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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',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',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',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',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1413553] 
[codex:1413553] def disasm(start,end):
[codex:1413553]     i=start
[codex:1413553]     while i<end:
[codex:1413553]         op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553]         if 0x60<=op<=0x7f:
[codex:1413553]             n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553]             print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553]         else:
[codex:1413553]             print(f'{i:04x}: {name}'); i+=1
[codex:1413553] 
[codex:1413553] start=0x11b0; end=0x11e8
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 24ms:
[codex:1413553] ---
[codex:1413553] 11b0: JUMP
[codex:1413553] 11b1: JUMPDEST
[codex:1413553] 11b2: OP_5f
[codex:1413553] 11b3: PUSH2 0x11bb
[codex:1413553] 11b6: DUP3
[codex:1413553] 11b7: PUSH2 0x116f
[codex:1413553] 11ba: JUMP
[codex:1413553] 11bb: JUMPDEST
[codex:1413553] 11bc: SWAP2
[codex:1413553] 11bd: POP
[codex:1413553] 11be: PUSH2 0x11c7
[codex:1413553] 11c1: DUP3
[codex:1413553] 11c2: DUP6
[codex:1413553] 11c3: PUSH2 0x119a
[codex:1413553] 11c6: JUMP
[codex:1413553] 11c7: JUMPDEST
[codex:1413553] 11c8: PUSH1 0x20
[codex:1413553] 11ca: DUP3
[codex:1413553] 11cb: ADD
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing multi-signature verification flow**
[codex:1413553] 
[codex:1413553] I'm inspecting the signature verification logic in detail to confirm it always runs and can't be bypassed. I'm cross-checking potential shortcut branches, how `v` values are handled in signatures, and looking for approved hash mechanics, comparing to known Safe contract signature schemes. I'll also explore nearby bytecode for constants like 27/28 to understand signature parsing fully.
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] 
[codex:1413553] values=[]
[codex:1413553] i=0
[codex:1413553] while i < len(code_bytes):
[codex:1413553]     op=code_bytes[i]
[codex:1413553]     if 0x60<=op<=0x7f:
[codex:1413553]         n=op-0x5f
[codex:1413553]         imm=code_bytes[i+1:i+1+n]
[codex:1413553]         if op==0x60:
[codex:1413553]             values.append((i, imm[0]))
[codex:1413553]         i+=1+n
[codex:1413553]     else:
[codex:1413553]         i+=1
[codex:1413553] 
[codex:1413553] # filter between 0x0500 and 0x0800
[codex:1413553] vals=[(off,val) for off,val in values if 0x0500<=off<=0x0800]
[codex:1413553] # show push1 values 0x1b,0x1c,0x1f,0x20,0x24,0x40 etc maybe
[codex:1413553] interesting={0x1b,0x1c,0x1f,0x20,0x24,0x27,0x28,0x2a,0x40}
[codex:1413553] for off,val in vals:
[codex:1413553]     if val in interesting:
[codex:1413553]         print(hex(off), hex(val))
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 26ms:
[codex:1413553] 0x533 0x20
[codex:1413553] 0x53b 0x40
[codex:1413553] 0x53e 0x20
[codex:1413553] 0x551 0x40
[codex:1413553] 0x554 0x20
[codex:1413553] 0x55d 0x40
[codex:1413553] 0x563 0x20
[codex:1413553] 0x56e 0x40
[codex:1413553] 0x571 0x20
[codex:1413553] 0x57f 0x40
[codex:1413553] 0x582 0x20
[codex:1413553] 0x58b 0x40
[codex:1413553] 0x591 0x20
[codex:1413553] 0x5c1 0x20
[codex:1413553] 0x5c4 0x20
[codex:1413553] 0x5dc 0x20
[codex:1413553] 0x5df 0x20
[codex:1413553] 0x5f7 0x20
[codex:1413553] 0x5fa 0x20
[codex:1413553] 0x5ff 0x40
[codex:1413553] 
[codex:1413553] thinking
[codex:1413553] **Analyzing signature verification and call flow**
[codex:1413553] codex
[codex:1413553] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the provided runtime bytecode bundle.","findings":[]}
[codex:1413553] tokens used
[codex:1413553] 111,538
[codex:1413553] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the provided runtime bytecode bundle.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-03T22:31:25.787640+00:00",
        "returncode": 0
    },
    "summary": "No concrete, exploitable value-extraction path identified from the provided runtime bytecode bundle.",
    "raw_final": {
        "summary": "No concrete, exploitable value-extraction path identified from the provided runtime bytecode bundle.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
2
EXT*/BALANCE
1
Total opcodes
3145
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x009f
0000000c: JUMPI
0000000d: PUSH0
0000000e: CALLDATALOAD
0000000f: PUSH1 0xe0
00000011: SHR
00000012: DUP1
00000013: PUSH4 0x9e4e7318
00000018: GT
00000019: PUSH2 0x0063
0000001c: JUMPI
0000001d: DUP1
0000001e: PUSH4 0x9e4e7318
00000023: EQ
00000024: PUSH2 0x0227
00000027: JUMPI
00000028: DUP1
00000029: PUSH4 0xa0ab9653
0000002e: EQ
0000002f: PUSH2 0x0251
00000032: JUMPI
00000033: DUP1
00000034: PUSH4 0xa0e67e2b
00000039: EQ
0000003a: PUSH2 0x0279
0000003d: JUMPI
0000003e: DUP1
0000003f: PUSH4 0xaffed0e0
00000044: EQ
00000045: PUSH2 0x02a3
00000048: JUMPI
00000049: DUP1
0000004a: PUSH4 0xba9a91a5
0000004f: EQ
00000050: PUSH2 0x02cd
00000053: JUMPI
00000054: DUP1
00000055: PUSH4 0xf698da25
0000005a: EQ
0000005b: PUSH2 0x02f7
0000005e: JUMPI
0000005f: PUSH2 0x00df
00000062: JUMP
00000063: JUMPDEST
00000064: DUP1
00000065: PUSH4 0x04622c2e
0000006a: EQ
0000006b: PUSH2 0x0143
0000006e: JUMPI
0000006f: DUP1
00000070: PUSH4 0x1279991b
00000075: EQ
00000076: PUSH2 0x016d
00000079: JUMPI
0000007a: DUP1
0000007b: PUSH4 0x2f54bf6e
00000080: EQ
00000081: PUSH2 0x0197
00000084: JUMPI
00000085: DUP1
00000086: PUSH4 0x33330fe0
0000008b: EQ
0000008c: PUSH2 0x01d3
0000008f: JUMPI
00000090: DUP1
00000091: PUSH4 0x42cde4e8
00000096: EQ
00000097: PUSH2 0x01fd
0000009a: JUMPI
0000009b: PUSH2 0x00df
0000009e: JUMP
0000009f: JUMPDEST
000000a0: CALLDATASIZE
000000a1: PUSH2 0x00df
000000a4: JUMPI
000000a5: PUSH32 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c
000000c6: CALLER
000000c7: CALLVALUE
000000c8: PUSH1 0x40
000000ca: MLOAD
000000cb: PUSH2 0x00d5
000000ce: SWAP3
000000cf: SWAP2
000000d0: SWAP1
000000d1: PUSH2 0x09b2
000000d4: JUMP
000000d5: JUMPDEST
000000d6: PUSH1 0x40
000000d8: MLOAD
000000d9: DUP1
000000da: SWAP2
000000db: SUB
000000dc: SWAP1
000000dd: LOG1
000000de: STOP
000000df: JUMPDEST
000000e0: CALLER
000000e1: PUSH0
000000e2: CALLDATALOAD
000000e3: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000
00000104: AND
00000105: CALLVALUE
00000106: PUSH1 0x40
00000108: MLOAD
00000109: PUSH32 0xc46a58f800000000000000000000000000000000000000000000000000000000
0000012a: DUP2
0000012b: MSTORE
0000012c: PUSH1 0x04
0000012e: ADD
0000012f: PUSH2 0x013a
00000132: SWAP4
00000133: SWAP3
00000134: SWAP2
00000135: SWAP1
00000136: PUSH2 0x0a13
00000139: JUMP
0000013a: JUMPDEST
0000013b: PUSH1 0x40
0000013d: MLOAD
0000013e: DUP1
0000013f: SWAP2
00000140: SUB
00000141: SWAP1
00000142: REVERT
00000143: JUMPDEST
00000144: CALLVALUE
00000145: DUP1
00000146: ISZERO
00000147: PUSH2 0x014e
0000014a: JUMPI
0000014b: PUSH0
0000014c: PUSH0
0000014d: REVERT
0000014e: JUMPDEST
0000014f: POP
00000150: PUSH2 0x0157
00000153: PUSH2 0x0321
00000156: JUMP
00000157: JUMPDEST
00000158: PUSH1 0x40
0000015a: MLOAD
0000015b: PUSH2 0x0164
0000015e: SWAP2
0000015f: SWAP1
00000160: PUSH2 0x0a60
00000163: JUMP
00000164: JUMPDEST
00000165: PUSH1 0x40
00000167: MLOAD
00000168: DUP1
00000169: SWAP2
0000016a: SUB
0000016b: SWAP1
0000016c: RETURN
0000016d: JUMPDEST
0000016e: CALLVALUE
0000016f: DUP1
00000170: ISZERO
00000171: PUSH2 0x0178
00000174: JUMPI
00000175: PUSH0
00000176: PUSH0
00000177: REVERT
00000178: JUMPDEST
00000179: POP
0000017a: PUSH2 0x0181
0000017d: PUSH2 0x0347
00000180: JUMP
00000181: JUMPDEST
00000182: PUSH1 0x40
00000184: MLOAD
00000185: PUSH2 0x018e
00000188: SWAP2
00000189: SWAP1
0000018a: PUSH2 0x0a60
0000018d: JUMP
0000018e: JUMPDEST
0000018f: PUSH1 0x40
00000191: MLOAD
00000192: DUP1
00000193: SWAP2
00000194: SUB
00000195: SWAP1
00000196: RETURN
00000197: JUMPDEST
00000198: CALLVALUE
00000199: DUP1
0000019a: ISZERO
0000019b: PUSH2 0x01a2
0000019e: JUMPI
0000019f: PUSH0
000001a0: PUSH0
000001a1: REVERT
000001a2: JUMPDEST
000001a3: POP
000001a4: PUSH2 0x01bd
000001a7: PUSH1 0x04
000001a9: DUP1
000001aa: CALLDATASIZE
000001ab: SUB
000001ac: DUP2
000001ad: ADD
000001ae: SWAP1
000001af: PUSH2 0x01b8
000001b2: SWAP2
000001b3: SWAP1
000001b4: PUSH2 0x0ab4
000001b7: JUMP
000001b8: JUMPDEST
000001b9: PUSH2 0x036d
000001bc: JUMP
000001bd: JUMPDEST
000001be: PUSH1 0x40
000001c0: MLOAD
000001c1: PUSH2 0x01ca
000001c4: SWAP2
000001c5: SWAP1
000001c6: PUSH2 0x0af9
000001c9: JUMP
000001ca: JUMPDEST
000001cb: PUSH1 0x40
000001cd: MLOAD
000001ce: DUP1
000001cf: SWAP2
000001d0: SUB
000001d1: SWAP1
000001d2: RETURN
000001d3: JUMPDEST
000001d4: CALLVALUE
000001d5: DUP1
000001d6: ISZERO
000001d7: PUSH2 0x01de
000001da: JUMPI
000001db: PUSH0
000001dc: PUSH0
000001dd: REVERT
000001de: JUMPDEST
000001df: POP
000001e0: PUSH2 0x01e7
000001e3: PUSH2 0x038a
000001e6: JUMP
000001e7: JUMPDEST
000001e8: PUSH1 0x40
000001ea: MLOAD
000001eb: PUSH2 0x01f4
000001ee: SWAP2
000001ef: SWAP1
000001f0: PUSH2 0x0a60
000001f3: JUMP
000001f4: JUMPDEST
000001f5: PUSH1 0x40
000001f7: MLOAD
000001f8: DUP1
000001f9: SWAP2
000001fa: SUB
000001fb: SWAP1
000001fc: RETURN
000001fd: JUMPDEST
000001fe: CALLVALUE
000001ff: DUP1
00000200: ISZERO
00000201: PUSH2 0x0208
00000204: JUMPI
00000205: PUSH0
00000206: PUSH0
00000207: REVERT
00000208: JUMPDEST
00000209: POP
0000020a: PUSH2 0x0211
0000020d: PUSH2 0x03b0
00000210: JUMP
00000211: JUMPDEST
00000212: PUSH1 0x40
00000214: MLOAD
00000215: PUSH2 0x021e
00000218: SWAP2
00000219: SWAP1
0000021a: PUSH2 0x0b12
0000021d: JUMP
0000021e: JUMPDEST
0000021f: PUSH1 0x40
00000221: MLOAD
00000222: DUP1
00000223: SWAP2
00000224: SUB
00000225: SWAP1
00000226: RETURN
00000227: JUMPDEST
00000228: CALLVALUE
00000229: DUP1
0000022a: ISZERO
0000022b: PUSH2 0x0232
0000022e: JUMPI
0000022f: PUSH0
00000230: PUSH0
00000231: REVERT
00000232: JUMPDEST
00000233: POP
00000234: PUSH2 0x023b
00000237: PUSH2 0x03b6
0000023a: JUMP
0000023b: JUMPDEST
0000023c: PUSH1 0x40
0000023e: MLOAD
0000023f: PUSH2 0x0248
00000242: SWAP2
00000243: SWAP1
00000244: PUSH2 0x0a60
00000247: JUMP
00000248: JUMPDEST
00000249: PUSH1 0x40
0000024b: MLOAD
0000024c: DUP1
0000024d: SWAP2
0000024e: SUB
0000024f: SWAP1
00000250: RETURN
00000251: JUMPDEST
00000252: CALLVALUE
00000253: DUP1
00000254: ISZERO
00000255: PUSH2 0x025c
00000258: JUMPI
00000259: PUSH0
0000025a: PUSH0
0000025b: REVERT
0000025c: JUMPDEST
0000025d: POP
0000025e: PUSH2 0x0277
00000261: PUSH1 0x04
00000263: DUP1
00000264: CALLDATASIZE
00000265: SUB
00000266: DUP2
00000267: ADD
00000268: SWAP1
00000269: PUSH2 0x0272
0000026c: SWAP2
0000026d: SWAP1
0000026e: PUSH2 0x0eb0
00000271: JUMP
00000272: JUMPDEST
00000273: PUSH2 0x03dc
00000276: JUMP
00000277: JUMPDEST
00000278: STOP
00000279: JUMPDEST
0000027a: CALLVALUE
0000027b: DUP1
0000027c: ISZERO
0000027d: PUSH2 0x0284
00000280: JUMPI
00000281: PUSH0
00000282: PUSH0
00000283: REVERT
00000284: JUMPDEST
00000285: POP
00000286: PUSH2 0x028d
00000289: PUSH2 0x0888
0000028c: JUMP
0000028d: JUMPDEST
0000028e: PUSH1 0x40
00000290: MLOAD
00000291: PUSH2 0x029a
00000294: SWAP2
00000295: SWAP1
00000296: PUSH2 0x1088
00000299: JUMP
0000029a: JUMPDEST
0000029b: PUSH1 0x40
0000029d: MLOAD
0000029e: DUP1
0000029f: SWAP2
000002a0: SUB
000002a1: SWAP1
000002a2: RETURN
000002a3: JUMPDEST
000002a4: CALLVALUE
000002a5: DUP1
000002a6: ISZERO
000002a7: PUSH2 0x02ae
000002aa: JUMPI
000002ab: PUSH0
000002ac: PUSH0
000002ad: REVERT
000002ae: JUMPDEST
000002af: POP
000002b0: PUSH2 0x02b7
000002b3: PUSH2 0x0913
000002b6: JUMP
000002b7: JUMPDEST
000002b8: PUSH1 0x40
000002ba: MLOAD
000002bb: PUSH2 0x02c4
000002be: SWAP2
000002bf: SWAP1
000002c0: PUSH2 0x0b12
000002c3: JUMP
000002c4: JUMPDEST
000002c5: PUSH1 0x40
000002c7: MLOAD
000002c8: DUP1
000002c9: SWAP2
000002ca: SUB
000002cb: SWAP1
000002cc: RETURN
000002cd: JUMPDEST
000002ce: CALLVALUE
000002cf: DUP1
000002d0: ISZERO
000002d1: PUSH2 0x02d8
000002d4: JUMPI
000002d5: PUSH0
000002d6: PUSH0
000002d7: REVERT
000002d8: JUMPDEST
000002d9: POP
000002da: PUSH2 0x02e1
000002dd: PUSH2 0x0918
000002e0: JUMP
000002e1: JUMPDEST
000002e2: PUSH1 0x40
000002e4: MLOAD
000002e5: PUSH2 0x02ee
000002e8: SWAP2
000002e9: SWAP1
000002ea: PUSH2 0x0a60
000002ed: JUMP
000002ee: JUMPDEST
000002ef: PUSH1 0x40
000002f1: MLOAD
000002f2: DUP1
000002f3: SWAP2
000002f4: SUB
000002f5: SWAP1
000002f6: RETURN
000002f7: JUMPDEST
000002f8: CALLVALUE
000002f9: DUP1
000002fa: ISZERO
000002fb: PUSH2 0x0302
000002fe: JUMPI
000002ff: PUSH0
00000300: PUSH0
00000301: REVERT
00000302: JUMPDEST
00000303: POP
00000304: PUSH2 0x030b
00000307: PUSH2 0x093e
0000030a: JUMP
0000030b: JUMPDEST
0000030c: PUSH1 0x40
0000030e: MLOAD
0000030f: PUSH2 0x0318
00000312: SWAP2
00000313: SWAP1
00000314: PUSH2 0x0a60
00000317: JUMP
00000318: JUMPDEST
00000319: PUSH1 0x40
0000031b: MLOAD
0000031c: DUP1
0000031d: SWAP2
0000031e: SUB
0000031f: SWAP1
00000320: RETURN
00000321: JUMPDEST
00000322: PUSH32 0x32f3de0d7fc1cdd909bb4d992a94061e800669c611b9d07f137df1f4bb85f097
00000343: PUSH0
00000344: SHL
00000345: DUP2
00000346: JUMP
00000347: JUMPDEST
00000348: PUSH32 0x3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d7
00000369: PUSH0
0000036a: SHL
0000036b: DUP2
0000036c: JUMP
0000036d: JUMPDEST
0000036e: PUSH1 0x02
00000370: PUSH1 0x20
00000372: MSTORE
00000373: DUP1
00000374: PUSH0
00000375: MSTORE
00000376: PUSH1 0x40
00000378: PUSH0
00000379: KECCAK256
0000037a: PUSH0
0000037b: SWAP2
0000037c: POP
0000037d: SLOAD
0000037e: SWAP1
0000037f: PUSH2 0x0100
00000382: EXP
00000383: SWAP1
00000384: DIV
00000385: PUSH1 0xff
00000387: AND
00000388: DUP2
00000389: JUMP
0000038a: JUMPDEST
0000038b: PUSH32 0xd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac56472
000003ac: PUSH0
000003ad: SHL
000003ae: DUP2
000003af: JUMP
000003b0: JUMPDEST
000003b1: PUSH1 0x01
000003b3: SLOAD
000003b4: DUP2
000003b5: JUMP
000003b6: JUMPDEST
000003b7: PUSH32 0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6
000003d8: PUSH0
000003d9: SHL
000003da: DUP2
000003db: JUMP
000003dc: JUMPDEST
000003dd: PUSH1 0x01
000003df: SLOAD
000003e0: DUP8
000003e1: MLOAD
000003e2: EQ
000003e3: PUSH2 0x0418
000003e6: JUMPI
000003e7: PUSH1 0x40
000003e9: MLOAD
000003ea: PUSH32 0x4be6321b00000000000000000000000000000000000000000000000000000000
0000040b: DUP2
0000040c: MSTORE
0000040d: PUSH1 0x04
0000040f: ADD
00000410: PUSH1 0x40
00000412: MLOAD
00000413: DUP1
00000414: SWAP2
00000415: SUB
00000416: SWAP1
00000417: REVERT
00000418: JUMPDEST
00000419: DUP6
0000041a: MLOAD
0000041b: DUP8
0000041c: MLOAD
0000041d: EQ
0000041e: DUP1
0000041f: ISZERO
00000420: PUSH2 0x042a
00000423: JUMPI
00000424: POP
00000425: DUP8
00000426: MLOAD
00000427: DUP8
00000428: MLOAD
00000429: EQ
0000042a: JUMPDEST
0000042b: PUSH2 0x0460
0000042e: JUMPI
0000042f: PUSH1 0x40
00000431: MLOAD
00000432: PUSH32 0x4be6321b00000000000000000000000000000000000000000000000000000000
00000453: DUP2
00000454: MSTORE
00000455: PUSH1 0x04
00000457: ADD
00000458: PUSH1 0x40
0000045a: MLOAD
0000045b: DUP1
0000045c: SWAP2
0000045d: SUB
0000045e: SWAP1
0000045f: REVERT
00000460: JUMPDEST
00000461: CALLER
00000462: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000477: AND
00000478: DUP3
00000479: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000048e: AND
0000048f: EQ
00000490: DUP1
00000491: PUSH2 0x04c5
00000494: JUMPI
00000495: POP
00000496: PUSH0
00000497: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000004ac: AND
000004ad: DUP3
000004ae: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000004c3: AND
000004c4: EQ
000004c5: JUMPDEST
000004c6: DUP3
000004c7: SWAP1
000004c8: PUSH2 0x0507
000004cb: JUMPI
000004cc: PUSH1 0x40
000004ce: MLOAD
000004cf: PUSH32 0x3221267a00000000000000000000000000000000000000000000000000000000
000004f0: DUP2
000004f1: MSTORE
000004f2: PUSH1 0x04
000004f4: ADD
000004f5: PUSH2 0x04fe
000004f8: SWAP2
000004f9: SWAP1
000004fa: PUSH2 0x10a8
000004fd: JUMP
000004fe: JUMPDEST
000004ff: PUSH1 0x40
00000501: MLOAD
00000502: DUP1
00000503: SWAP2
00000504: SUB
00000505: SWAP1
00000506: REVERT
00000507: JUMPDEST
00000508: POP
00000509: PUSH0
0000050a: PUSH32 0x3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d7
0000052b: PUSH0
0000052c: SHL
0000052d: DUP7
0000052e: DUP7
0000052f: DUP7
00000530: DUP1
00000531: MLOAD
00000532: SWAP1
00000533: PUSH1 0x20
00000535: ADD
00000536: KECCAK256
00000537: PUSH0
00000538: SLOAD
00000539: DUP8
0000053a: DUP8
0000053b: PUSH1 0x40
0000053d: MLOAD
0000053e: PUSH1 0x20
00000540: ADD
00000541: PUSH2 0x0550
00000544: SWAP8
00000545: SWAP7
00000546: SWAP6
00000547: SWAP5
00000548: SWAP4
00000549: SWAP3
0000054a: SWAP2
0000054b: SWAP1
0000054c: PUSH2 0x10d0
0000054f: JUMP
00000550: JUMPDEST
00000551: PUSH1 0x40
00000553: MLOAD
00000554: PUSH1 0x20
00000556: DUP2
00000557: DUP4
00000558: SUB
00000559: SUB
0000055a: DUP2
0000055b: MSTORE
0000055c: SWAP1
0000055d: PUSH1 0x40
0000055f: MSTORE
00000560: DUP1
00000561: MLOAD
00000562: SWAP1
00000563: PUSH1 0x20
00000565: ADD
00000566: KECCAK256
00000567: SWAP1
00000568: POP
00000569: PUSH0
0000056a: PUSH1 0x03
0000056c: SLOAD
0000056d: DUP3
0000056e: PUSH1 0x40
00000570: MLOAD
00000571: PUSH1 0x20
00000573: ADD
00000574: PUSH2 0x057e
00000577: SWAP3
00000578: SWAP2
00000579: SWAP1
0000057a: PUSH2 0x11b1
0000057d: JUMP
0000057e: JUMPDEST
0000057f: PUSH1 0x40
00000581: MLOAD
00000582: PUSH1 0x20
00000584: DUP2
00000585: DUP4
00000586: SUB
00000587: SUB
00000588: DUP2
00000589: MSTORE
0000058a: SWAP1
0000058b: PUSH1 0x40
0000058d: MSTORE
0000058e: DUP1
0000058f: MLOAD
00000590: SWAP1
00000591: PUSH1 0x20
00000593: ADD
00000594: KECCAK256
00000595: SWAP1
00000596: POP
00000597: PUSH0
00000598: PUSH0
00000599: SWAP1
0000059a: POP
0000059b: PUSH0
0000059c: PUSH0
0000059d: SWAP1
0000059e: POP
0000059f: JUMPDEST
000005a0: PUSH1 0x01
000005a2: SLOAD
000005a3: DUP2
000005a4: LT
000005a5: ISZERO
000005a6: PUSH2 0x073c
000005a9: JUMPI
000005aa: PUSH0
000005ab: PUSH1 0x01
000005ad: DUP5
000005ae: DUP15
000005af: DUP5
000005b0: DUP2
000005b1: MLOAD
000005b2: DUP2
000005b3: LT
000005b4: PUSH2 0x05c0
000005b7: JUMPI
000005b8: PUSH2 0x05bf
000005bb: PUSH2 0x11e7
000005be: JUMP
000005bf: JUMPDEST
000005c0: JUMPDEST
000005c1: PUSH1 0x20
000005c3: MUL
000005c4: PUSH1 0x20
000005c6: ADD
000005c7: ADD
000005c8: MLOAD
000005c9: DUP15
000005ca: DUP6
000005cb: DUP2
000005cc: MLOAD
000005cd: DUP2
000005ce: LT
000005cf: PUSH2 0x05db
000005d2: JUMPI
000005d3: PUSH2 0x05da
000005d6: PUSH2 0x11e7
000005d9: JUMP
000005da: JUMPDEST
000005db: JUMPDEST
000005dc: PUSH1 0x20
000005de: MUL
000005df: PUSH1 0x20
000005e1: ADD
000005e2: ADD
000005e3: MLOAD
000005e4: DUP15
000005e5: DUP7
000005e6: DUP2
000005e7: MLOAD
000005e8: DUP2
000005e9: LT
000005ea: PUSH2 0x05f6
000005ed: JUMPI
000005ee: PUSH2 0x05f5
000005f1: PUSH2 0x11e7
000005f4: JUMP
000005f5: JUMPDEST
000005f6: JUMPDEST
000005f7: PUSH1 0x20
000005f9: MUL
000005fa: PUSH1 0x20
000005fc: ADD
000005fd: ADD
000005fe: MLOAD
000005ff: PUSH1 0x40
00000601: MLOAD
00000602: PUSH0
00000603: DUP2
00000604: MSTORE
00000605: PUSH1 0x20
00000607: ADD
00000608: PUSH1 0x40
0000060a: MSTORE
0000060b: PUSH1 0x40
0000060d: MLOAD
0000060e: PUSH2 0x061a
00000611: SWAP5
00000612: SWAP4
00000613: SWAP3
00000614: SWAP2
00000615: SWAP1
00000616: PUSH2 0x1223
00000619: JUMP
0000061a: JUMPDEST
0000061b: PUSH1 0x20
0000061d: PUSH1 0x40
0000061f: MLOAD
00000620: PUSH1 0x20
00000622: DUP2
00000623: SUB
00000624: SWAP1
00000625: DUP1
00000626: DUP5
00000627: SUB
00000628: SWAP1
00000629: DUP6
0000062a: GAS
0000062b: STATICCALL
0000062c: ISZERO
0000062d: DUP1
0000062e: ISZERO
0000062f: PUSH2 0x063a
00000632: JUMPI
00000633: RETURNDATASIZE
00000634: PUSH0
00000635: PUSH0
00000636: RETURNDATACOPY
00000637: RETURNDATASIZE
00000638: PUSH0
00000639: REVERT
0000063a: JUMPDEST
0000063b: POP
0000063c: POP
0000063d: POP
0000063e: PUSH1 0x20
00000640: PUSH1 0x40
00000642: MLOAD
00000643: SUB
00000644: MLOAD
00000645: SWAP1
00000646: POP
00000647: DUP3
00000648: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000065d: AND
0000065e: DUP2
0000065f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000674: AND
00000675: GT
00000676: PUSH2 0x06ab
00000679: JUMPI
0000067a: PUSH1 0x40
0000067c: MLOAD
0000067d: PUSH32 0x39d43e8800000000000000000000000000000000000000000000000000000000
0000069e: DUP2
0000069f: MSTORE
000006a0: PUSH1 0x04
000006a2: ADD
000006a3: PUSH1 0x40
000006a5: MLOAD
000006a6: DUP1
000006a7: SWAP2
000006a8: SUB
000006a9: SWAP1
000006aa: REVERT
000006ab: JUMPDEST
000006ac: PUSH1 0x02
000006ae: PUSH0
000006af: DUP3
000006b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000006c5: AND
000006c6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000006db: AND
000006dc: DUP2
000006dd: MSTORE
000006de: PUSH1 0x20
000006e0: ADD
000006e1: SWAP1
000006e2: DUP2
000006e3: MSTORE
000006e4: PUSH1 0x20
000006e6: ADD
000006e7: PUSH0
000006e8: KECCAK256
000006e9: PUSH0
000006ea: SWAP1
000006eb: SLOAD
000006ec: SWAP1
000006ed: PUSH2 0x0100
000006f0: EXP
000006f1: SWAP1
000006f2: DIV
000006f3: PUSH1 0xff
000006f5: AND
000006f6: PUSH2 0x072b
000006f9: JUMPI
000006fa: PUSH1 0x40
000006fc: MLOAD
000006fd: PUSH32 0x5d652eb100000000000000000000000000000000000000000000000000000000
0000071e: DUP2
0000071f: MSTORE
00000720: PUSH1 0x04
00000722: ADD
00000723: PUSH1 0x40
00000725: MLOAD
00000726: DUP1
00000727: SWAP2
00000728: SUB
00000729: SWAP1
0000072a: REVERT
0000072b: JUMPDEST
0000072c: DUP1
0000072d: SWAP3
0000072e: POP
0000072f: POP
00000730: DUP1
00000731: DUP1
00000732: PUSH1 0x01
00000734: ADD
00000735: SWAP2
00000736: POP
00000737: POP
00000738: PUSH2 0x059f
0000073b: JUMP
0000073c: JUMPDEST
0000073d: POP
0000073e: PUSH1 0x01
00000740: PUSH0
00000741: SLOAD
00000742: PUSH2 0x074b
00000745: SWAP2
00000746: SWAP1
00000747: PUSH2 0x1293
0000074a: JUMP
0000074b: JUMPDEST
0000074c: PUSH0
0000074d: DUP2
0000074e: SWAP1
0000074f: SSTORE
00000750: POP
00000751: PUSH0
00000752: DUP7
00000753: MLOAD
00000754: GT
00000755: ISZERO
00000756: PUSH2 0x0799
00000759: JUMPI
0000075a: PUSH2 0x0762
0000075d: DUP9
0000075e: PUSH2 0x0944
00000761: JUMP
00000762: JUMPDEST
00000763: PUSH2 0x0798
00000766: JUMPI
00000767: PUSH1 0x40
00000769: MLOAD
0000076a: PUSH32 0x27033d6600000000000000000000000000000000000000000000000000000000
0000078b: DUP2
0000078c: MSTORE
0000078d: PUSH1 0x04
0000078f: ADD
00000790: PUSH1 0x40
00000792: MLOAD
00000793: DUP1
00000794: SWAP2
00000795: SUB
00000796: SWAP1
00000797: REVERT
00000798: JUMPDEST
00000799: JUMPDEST
0000079a: PUSH0
0000079b: DUP9
0000079c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007b1: AND
000007b2: DUP9
000007b3: DUP7
000007b4: SWAP1
000007b5: DUP10
000007b6: PUSH1 0x40
000007b8: MLOAD
000007b9: PUSH2 0x07c2
000007bc: SWAP2
000007bd: SWAP1
000007be: PUSH2 0x1318
000007c1: JUMP
000007c2: JUMPDEST
000007c3: PUSH0
000007c4: PUSH1 0x40
000007c6: MLOAD
000007c7: DUP1
000007c8: DUP4
000007c9: SUB
000007ca: DUP2
000007cb: DUP6
000007cc: DUP9
000007cd: DUP9
000007ce: CALL
000007cf: SWAP4
000007d0: POP
000007d1: POP
000007d2: POP
000007d3: POP
000007d4: RETURNDATASIZE
000007d5: DUP1
000007d6: PUSH0
000007d7: DUP2
000007d8: EQ
000007d9: PUSH2 0x07fd
000007dc: JUMPI
000007dd: PUSH1 0x40
000007df: MLOAD
000007e0: SWAP2
000007e1: POP
000007e2: PUSH1 0x1f
000007e4: NOT
000007e5: PUSH1 0x3f
000007e7: RETURNDATASIZE
000007e8: ADD
000007e9: AND
000007ea: DUP3
000007eb: ADD
000007ec: PUSH1 0x40
000007ee: MSTORE
000007ef: RETURNDATASIZE
000007f0: DUP3
000007f1: MSTORE
000007f2: RETURNDATASIZE
000007f3: PUSH0
000007f4: PUSH1 0x20
000007f6: DUP5
000007f7: ADD
000007f8: RETURNDATACOPY
000007f9: PUSH2 0x0802
000007fc: JUMP
000007fd: JUMPDEST
000007fe: PUSH1 0x60
00000800: SWAP2
00000801: POP
00000802: JUMPDEST
00000803: POP
00000804: POP
00000805: SWAP1
00000806: POP
00000807: DUP1
00000808: PUSH2 0x083d
0000080b: JUMPI
0000080c: PUSH1 0x40
0000080e: MLOAD
0000080f: PUSH32 0x75cfdcce00000000000000000000000000000000000000000000000000000000
00000830: DUP2
00000831: MSTORE
00000832: PUSH1 0x04
00000834: ADD
00000835: PUSH1 0x40
00000837: MLOAD
00000838: DUP1
00000839: SWAP2
0000083a: SUB
0000083b: SWAP1
0000083c: REVERT
0000083d: JUMPDEST
0000083e: PUSH32 0x187ae0bfb8619f02a4db1cfef70a54e5722d00d8fcfe6811f1a1f044633ca0a7
0000085f: DUP7
00000860: DUP11
00000861: DUP11
00000862: DUP11
00000863: PUSH1 0x40
00000865: MLOAD
00000866: PUSH2 0x0872
00000869: SWAP5
0000086a: SWAP4
0000086b: SWAP3
0000086c: SWAP2
0000086d: SWAP1
0000086e: PUSH2 0x13d1
00000871: JUMP
00000872: JUMPDEST
00000873: PUSH1 0x40
00000875: MLOAD
00000876: DUP1
00000877: SWAP2
00000878: SUB
00000879: SWAP1
0000087a: LOG1
0000087b: POP
0000087c: POP
0000087d: POP
0000087e: POP
0000087f: POP
00000880: POP
00000881: POP
00000882: POP
00000883: POP
00000884: POP
00000885: POP
00000886: POP
00000887: JUMP
00000888: JUMPDEST
00000889: PUSH1 0x60
0000088b: PUSH1 0x04
0000088d: DUP1
0000088e: SLOAD
0000088f: DUP1
00000890: PUSH1 0x20
00000892: MUL
00000893: PUSH1 0x20
00000895: ADD
00000896: PUSH1 0x40
00000898: MLOAD
00000899: SWAP1
0000089a: DUP2
0000089b: ADD
0000089c: PUSH1 0x40
0000089e: MSTORE
0000089f: DUP1
000008a0: SWAP3
000008a1: SWAP2
000008a2: SWAP1
000008a3: DUP2
000008a4: DUP2
000008a5: MSTORE
000008a6: PUSH1 0x20
000008a8: ADD
000008a9: DUP3
000008aa: DUP1
000008ab: SLOAD
000008ac: DUP1
000008ad: ISZERO
000008ae: PUSH2 0x0909
000008b1: JUMPI
000008b2: PUSH1 0x20
000008b4: MUL
000008b5: DUP3
000008b6: ADD
000008b7: SWAP2
000008b8: SWAP1
000008b9: PUSH0
000008ba: MSTORE
000008bb: PUSH1 0x20
000008bd: PUSH0
000008be: KECCAK256
000008bf: SWAP1
000008c0: JUMPDEST
000008c1: DUP2
000008c2: PUSH0
000008c3: SWAP1
000008c4: SLOAD
000008c5: SWAP1
000008c6: PUSH2 0x0100
000008c9: EXP
000008ca: SWAP1
000008cb: DIV
000008cc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000008e1: AND
000008e2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000008f7: AND
000008f8: DUP2
000008f9: MSTORE
000008fa: PUSH1 0x20
000008fc: ADD
000008fd: SWAP1
000008fe: PUSH1 0x01
00000900: ADD
00000901: SWAP1
00000902: DUP1
00000903: DUP4
00000904: GT
00000905: PUSH2 0x08c0
00000908: JUMPI
00000909: JUMPDEST
0000090a: POP
0000090b: POP
0000090c: POP
0000090d: POP
0000090e: POP
0000090f: SWAP1
00000910: POP
00000911: SWAP1
00000912: JUMP
00000913: JUMPDEST
00000914: PUSH0
00000915: SLOAD
00000916: DUP2
00000917: JUMP
00000918: JUMPDEST
00000919: PUSH32 0x72dc1dc597006ea524d75bd3377c4663827629e52e27fd2169cca6f90f6d1ef9
0000093a: PUSH0
0000093b: SHL
0000093c: DUP2
0000093d: JUMP
0000093e: JUMPDEST
0000093f: PUSH1 0x03
00000941: SLOAD
00000942: DUP2
00000943: JUMP
00000944: JUMPDEST
00000945: PUSH0
00000946: PUSH0
00000947: DUP3
00000948: EXTCODESIZE
00000949: SWAP1
0000094a: POP
0000094b: PUSH0
0000094c: DUP2
0000094d: PUSH4 0xffffffff
00000952: AND
00000953: GT
00000954: SWAP2
00000955: POP
00000956: POP
00000957: SWAP2
00000958: SWAP1
00000959: POP
0000095a: JUMP
0000095b: JUMPDEST
0000095c: PUSH0
0000095d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000972: DUP3
00000973: AND
00000974: SWAP1
00000975: POP
00000976: SWAP2
00000977: SWAP1
00000978: POP
00000979: JUMP
0000097a: JUMPDEST
0000097b: PUSH0
0000097c: PUSH2 0x0984
0000097f: DUP3
00000980: PUSH2 0x095b
00000983: JUMP
00000984: JUMPDEST
00000985: SWAP1
00000986: POP
00000987: SWAP2
00000988: SWAP1
00000989: POP
0000098a: JUMP
0000098b: JUMPDEST
0000098c: PUSH2 0x0994
0000098f: DUP2
00000990: PUSH2 0x097a
00000993: JUMP
00000994: JUMPDEST
00000995: DUP3
00000996: MSTORE
00000997: POP
00000998: POP
00000999: JUMP
0000099a: JUMPDEST
0000099b: PUSH0
0000099c: DUP2
0000099d: SWAP1
0000099e: POP
0000099f: SWAP2
000009a0: SWAP1
000009a1: POP
000009a2: JUMP
000009a3: JUMPDEST
000009a4: PUSH2 0x09ac
000009a7: DUP2
000009a8: PUSH2 0x099a
000009ab: JUMP
000009ac: JUMPDEST
000009ad: DUP3
000009ae: MSTORE
000009af: POP
000009b0: POP
000009b1: JUMP
000009b2: JUMPDEST
000009b3: PUSH0
000009b4: PUSH1 0x40
000009b6: DUP3
000009b7: ADD
000009b8: SWAP1
000009b9: POP
000009ba: PUSH2 0x09c5
000009bd: PUSH0
000009be: DUP4
000009bf: ADD
000009c0: DUP6
000009c1: PUSH2 0x098b
000009c4: JUMP
000009c5: JUMPDEST
000009c6: PUSH2 0x09d2
000009c9: PUSH1 0x20
000009cb: DUP4
000009cc: ADD
000009cd: DUP5
000009ce: PUSH2 0x09a3
000009d1: JUMP
000009d2: JUMPDEST
000009d3: SWAP4
000009d4: SWAP3
000009d5: POP
000009d6: POP
000009d7: POP
000009d8: JUMP
000009d9: JUMPDEST
000009da: PUSH0
000009db: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000
000009fc: DUP3
000009fd: AND
000009fe: SWAP1
000009ff: POP
00000a00: SWAP2
00000a01: SWAP1
00000a02: POP
00000a03: JUMP
00000a04: JUMPDEST
00000a05: PUSH2 0x0a0d
00000a08: DUP2
00000a09: PUSH2 0x09d9
00000a0c: JUMP
00000a0d: JUMPDEST
00000a0e: DUP3
00000a0f: MSTORE
00000a10: POP
00000a11: POP
00000a12: JUMP
00000a13: JUMPDEST
00000a14: PUSH0
00000a15: PUSH1 0x60
00000a17: DUP3
00000a18: ADD
00000a19: SWAP1
00000a1a: POP
00000a1b: PUSH2 0x0a26
00000a1e: PUSH0
00000a1f: DUP4
00000a20: ADD
00000a21: DUP7
00000a22: PUSH2 0x098b
00000a25: JUMP
00000a26: JUMPDEST
00000a27: PUSH2 0x0a33
00000a2a: PUSH1 0x20
00000a2c: DUP4
00000a2d: ADD
00000a2e: DUP6
00000a2f: PUSH2 0x0a04
00000a32: JUMP
00000a33: JUMPDEST
00000a34: PUSH2 0x0a40
00000a37: PUSH1 0x40
00000a39: DUP4
00000a3a: ADD
00000a3b: DUP5
00000a3c: PUSH2 0x09a3
00000a3f: JUMP
00000a40: JUMPDEST
00000a41: SWAP5
00000a42: SWAP4
00000a43: POP
00000a44: POP
00000a45: POP
00000a46: POP
00000a47: JUMP
00000a48: JUMPDEST
00000a49: PUSH0
00000a4a: DUP2
00000a4b: SWAP1
00000a4c: POP
00000a4d: SWAP2
00000a4e: SWAP1
00000a4f: POP
00000a50: JUMP
00000a51: JUMPDEST
00000a52: PUSH2 0x0a5a
00000a55: DUP2
00000a56: PUSH2 0x0a48
00000a59: JUMP
00000a5a: JUMPDEST
00000a5b: DUP3
00000a5c: MSTORE
00000a5d: POP
00000a5e: POP
00000a5f: JUMP
00000a60: JUMPDEST
00000a61: PUSH0
00000a62: PUSH1 0x20
00000a64: DUP3
00000a65: ADD
00000a66: SWAP1
00000a67: POP
00000a68: PUSH2 0x0a73
00000a6b: PUSH0
00000a6c: DUP4
00000a6d: ADD
00000a6e: DUP5
00000a6f: PUSH2 0x0a51
00000a72: JUMP
00000a73: JUMPDEST
00000a74: SWAP3
00000a75: SWAP2
00000a76: POP
00000a77: POP
00000a78: JUMP
00000a79: JUMPDEST
00000a7a: PUSH0
00000a7b: PUSH1 0x40
00000a7d: MLOAD
00000a7e: SWAP1
00000a7f: POP
00000a80: SWAP1
00000a81: JUMP
00000a82: JUMPDEST
00000a83: PUSH0
00000a84: PUSH0
00000a85: REVERT
00000a86: JUMPDEST
00000a87: PUSH0
00000a88: PUSH0
00000a89: REVERT
00000a8a: JUMPDEST
00000a8b: PUSH2 0x0a93
00000a8e: DUP2
00000a8f: PUSH2 0x097a
00000a92: JUMP
00000a93: JUMPDEST
00000a94: DUP2
00000a95: EQ
00000a96: PUSH2 0x0a9d
00000a99: JUMPI
00000a9a: PUSH0
00000a9b: PUSH0
00000a9c: REVERT
00000a9d: JUMPDEST
00000a9e: POP
00000a9f: JUMP
00000aa0: JUMPDEST
00000aa1: PUSH0
00000aa2: DUP2
00000aa3: CALLDATALOAD
00000aa4: SWAP1
00000aa5: POP
00000aa6: PUSH2 0x0aae
00000aa9: DUP2
00000aaa: PUSH2 0x0a8a
00000aad: JUMP
00000aae: JUMPDEST
00000aaf: SWAP3
00000ab0: SWAP2
00000ab1: POP
00000ab2: POP
00000ab3: JUMP
00000ab4: JUMPDEST
00000ab5: PUSH0
00000ab6: PUSH1 0x20
00000ab8: DUP3
00000ab9: DUP5
00000aba: SUB
00000abb: SLT
00000abc: ISZERO
00000abd: PUSH2 0x0ac9
00000ac0: JUMPI
00000ac1: PUSH2 0x0ac8
00000ac4: PUSH2 0x0a82
00000ac7: JUMP
00000ac8: JUMPDEST
00000ac9: JUMPDEST
00000aca: PUSH0
00000acb: PUSH2 0x0ad6
00000ace: DUP5
00000acf: DUP3
00000ad0: DUP6
00000ad1: ADD
00000ad2: PUSH2 0x0aa0
00000ad5: JUMP
00000ad6: JUMPDEST
00000ad7: SWAP2
00000ad8: POP
00000ad9: POP
00000ada: SWAP3
00000adb: SWAP2
00000adc: POP
00000add: POP
00000ade: JUMP
00000adf: JUMPDEST
00000ae0: PUSH0
00000ae1: DUP2
00000ae2: ISZERO
00000ae3: ISZERO
00000ae4: SWAP1
00000ae5: POP
00000ae6: SWAP2
00000ae7: SWAP1
00000ae8: POP
00000ae9: JUMP
00000aea: JUMPDEST
00000aeb: PUSH2 0x0af3
00000aee: DUP2
00000aef: PUSH2 0x0adf
00000af2: JUMP
00000af3: JUMPDEST
00000af4: DUP3
00000af5: MSTORE
00000af6: POP
00000af7: POP
00000af8: JUMP
00000af9: JUMPDEST
00000afa: PUSH0
00000afb: PUSH1 0x20
00000afd: DUP3
00000afe: ADD
00000aff: SWAP1
00000b00: POP
00000b01: PUSH2 0x0b0c
00000b04: PUSH0
00000b05: DUP4
00000b06: ADD
00000b07: DUP5
00000b08: PUSH2 0x0aea
00000b0b: JUMP
00000b0c: JUMPDEST
00000b0d: SWAP3
00000b0e: SWAP2
00000b0f: POP
00000b10: POP
00000b11: JUMP
00000b12: JUMPDEST
00000b13: PUSH0
00000b14: PUSH1 0x20
00000b16: DUP3
00000b17: ADD
00000b18: SWAP1
00000b19: POP
00000b1a: PUSH2 0x0b25
00000b1d: PUSH0
00000b1e: DUP4
00000b1f: ADD
00000b20: DUP5
00000b21: PUSH2 0x09a3
00000b24: JUMP
00000b25: JUMPDEST
00000b26: SWAP3
00000b27: SWAP2
00000b28: POP
00000b29: POP
00000b2a: JUMP
00000b2b: JUMPDEST
00000b2c: PUSH0
00000b2d: PUSH0
00000b2e: REVERT
00000b2f: JUMPDEST
00000b30: PUSH0
00000b31: PUSH1 0x1f
00000b33: NOT
00000b34: PUSH1 0x1f
00000b36: DUP4
00000b37: ADD
00000b38: AND
00000b39: SWAP1
00000b3a: POP
00000b3b: SWAP2
00000b3c: SWAP1
00000b3d: POP
00000b3e: JUMP
00000b3f: JUMPDEST
00000b40: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00000b61: PUSH0
00000b62: MSTORE
00000b63: PUSH1 0x41
00000b65: PUSH1 0x04
00000b67: MSTORE
00000b68: PUSH1 0x24
00000b6a: PUSH0
00000b6b: REVERT
00000b6c: JUMPDEST
00000b6d: PUSH2 0x0b75
00000b70: DUP3
00000b71: PUSH2 0x0b2f
00000b74: JUMP
00000b75: JUMPDEST
00000b76: DUP2
00000b77: ADD
00000b78: DUP2
00000b79: DUP2
00000b7a: LT
00000b7b: PUSH8 0xffffffffffffffff
00000b84: DUP3
00000b85: GT
00000b86: OR
00000b87: ISZERO
00000b88: PUSH2 0x0b94
00000b8b: JUMPI
00000b8c: PUSH2 0x0b93
00000b8f: PUSH2 0x0b3f
00000b92: JUMP
00000b93: JUMPDEST
00000b94: JUMPDEST
00000b95: DUP1
00000b96: PUSH1 0x40
00000b98: MSTORE
00000b99: POP
00000b9a: POP
00000b9b: POP
00000b9c: JUMP
00000b9d: JUMPDEST
00000b9e: PUSH0
00000b9f: PUSH2 0x0ba6
00000ba2: PUSH2 0x0a79
00000ba5: JUMP
00000ba6: JUMPDEST
00000ba7: SWAP1
00000ba8: POP
00000ba9: PUSH2 0x0bb2
00000bac: DUP3
00000bad: DUP3
00000bae: PUSH2 0x0b6c
00000bb1: JUMP
00000bb2: JUMPDEST
00000bb3: SWAP2
00000bb4: SWAP1
00000bb5: POP
00000bb6: JUMP
00000bb7: JUMPDEST
00000bb8: PUSH0
00000bb9: PUSH8 0xffffffffffffffff
00000bc2: DUP3
00000bc3: GT
00000bc4: ISZERO
00000bc5: PUSH2 0x0bd1
00000bc8: JUMPI
00000bc9: PUSH2 0x0bd0
00000bcc: PUSH2 0x0b3f
00000bcf: JUMP
00000bd0: JUMPDEST
00000bd1: JUMPDEST
00000bd2: PUSH1 0x20
00000bd4: DUP3
00000bd5: MUL
00000bd6: SWAP1
00000bd7: POP
00000bd8: PUSH1 0x20
00000bda: DUP2
00000bdb: ADD
00000bdc: SWAP1
00000bdd: POP
00000bde: SWAP2
00000bdf: SWAP1
00000be0: POP
00000be1: JUMP
00000be2: JUMPDEST
00000be3: PUSH0
00000be4: PUSH0
00000be5: REVERT
00000be6: JUMPDEST
00000be7: PUSH0
00000be8: PUSH1 0xff
00000bea: DUP3
00000beb: AND
00000bec: SWAP1
00000bed: POP
00000bee: SWAP2
00000bef: SWAP1
00000bf0: POP
00000bf1: JUMP
00000bf2: JUMPDEST
00000bf3: PUSH2 0x0bfb
00000bf6: DUP2
00000bf7: PUSH2 0x0be6
00000bfa: JUMP
00000bfb: JUMPDEST
00000bfc: DUP2
00000bfd: EQ
00000bfe: PUSH2 0x0c05
00000c01: JUMPI
00000c02: PUSH0
00000c03: PUSH0
00000c04: REVERT
00000c05: JUMPDEST
00000c06: POP
00000c07: JUMP
00000c08: JUMPDEST
00000c09: PUSH0
00000c0a: DUP2
00000c0b: CALLDATALOAD
00000c0c: SWAP1
00000c0d: POP
00000c0e: PUSH2 0x0c16
00000c11: DUP2
00000c12: PUSH2 0x0bf2
00000c15: JUMP
00000c16: JUMPDEST
00000c17: SWAP3
00000c18: SWAP2
00000c19: POP
00000c1a: POP
00000c1b: JUMP
00000c1c: JUMPDEST
00000c1d: PUSH0
00000c1e: PUSH2 0x0c2e
00000c21: PUSH2 0x0c29
00000c24: DUP5
00000c25: PUSH2 0x0bb7
00000c28: JUMP
00000c29: JUMPDEST
00000c2a: PUSH2 0x0b9d
00000c2d: JUMP
00000c2e: JUMPDEST
00000c2f: SWAP1
00000c30: POP
00000c31: DUP1
00000c32: DUP4
00000c33: DUP3
00000c34: MSTORE
00000c35: PUSH1 0x20
00000c37: DUP3
00000c38: ADD
00000c39: SWAP1
00000c3a: POP
00000c3b: PUSH1 0x20
00000c3d: DUP5
00000c3e: MUL
00000c3f: DUP4
00000c40: ADD
00000c41: DUP6
00000c42: DUP2
00000c43: GT
00000c44: ISZERO
00000c45: PUSH2 0x0c51
00000c48: JUMPI
00000c49: PUSH2 0x0c50
00000c4c: PUSH2 0x0be2
00000c4f: JUMP
00000c50: JUMPDEST
00000c51: JUMPDEST
00000c52: DUP4
00000c53: JUMPDEST
00000c54: DUP2
00000c55: DUP2
00000c56: LT
00000c57: ISZERO
00000c58: PUSH2 0x0c7a
00000c5b: JUMPI
00000c5c: DUP1
00000c5d: PUSH2 0x0c66
00000c60: DUP9
00000c61: DUP3
00000c62: PUSH2 0x0c08
00000c65: JUMP
00000c66: JUMPDEST
00000c67: DUP5
00000c68: MSTORE
00000c69: PUSH1 0x20
00000c6b: DUP5
00000c6c: ADD
00000c6d: SWAP4
00000c6e: POP
00000c6f: POP
00000c70: PUSH1 0x20
00000c72: DUP2
00000c73: ADD
00000c74: SWAP1
00000c75: POP
00000c76: PUSH2 0x0c53
00000c79: JUMP
00000c7a: JUMPDEST
00000c7b: POP
00000c7c: POP
00000c7d: POP
00000c7e: SWAP4
00000c7f: SWAP3
00000c80: POP
00000c81: POP
00000c82: POP
00000c83: JUMP
00000c84: JUMPDEST
00000c85: PUSH0
00000c86: DUP3
00000c87: PUSH1 0x1f
00000c89: DUP4
00000c8a: ADD
00000c8b: SLT
00000c8c: PUSH2 0x0c98
00000c8f: JUMPI
00000c90: PUSH2 0x0c97
00000c93: PUSH2 0x0b2b
00000c96: JUMP
00000c97: JUMPDEST
00000c98: JUMPDEST
00000c99: DUP2
00000c9a: CALLDATALOAD
00000c9b: PUSH2 0x0ca8
00000c9e: DUP5
00000c9f: DUP3
00000ca0: PUSH1 0x20
00000ca2: DUP7
00000ca3: ADD
00000ca4: PUSH2 0x0c1c
00000ca7: JUMP
00000ca8: JUMPDEST
00000ca9: SWAP2
00000caa: POP
00000cab: POP
00000cac: SWAP3
00000cad: SWAP2
00000cae: POP
00000caf: POP
00000cb0: JUMP
00000cb1: JUMPDEST
00000cb2: PUSH0
00000cb3: PUSH8 0xffffffffffffffff
00000cbc: DUP3
00000cbd: GT
00000cbe: ISZERO
00000cbf: PUSH2 0x0ccb
00000cc2: JUMPI
00000cc3: PUSH2 0x0cca
00000cc6: PUSH2 0x0b3f
00000cc9: JUMP
00000cca: JUMPDEST
00000ccb: JUMPDEST
00000ccc: PUSH1 0x20
00000cce: DUP3
00000ccf: MUL
00000cd0: SWAP1
00000cd1: POP
00000cd2: PUSH1 0x20
00000cd4: DUP2
00000cd5: ADD
00000cd6: SWAP1
00000cd7: POP
00000cd8: SWAP2
00000cd9: SWAP1
00000cda: POP
00000cdb: JUMP
00000cdc: JUMPDEST
00000cdd: PUSH2 0x0ce5
00000ce0: DUP2
00000ce1: PUSH2 0x0a48
00000ce4: JUMP
00000ce5: JUMPDEST
00000ce6: DUP2
00000ce7: EQ
00000ce8: PUSH2 0x0cef
00000ceb: JUMPI
00000cec: PUSH0
00000ced: PUSH0
00000cee: REVERT
00000cef: JUMPDEST
00000cf0: POP
00000cf1: JUMP
00000cf2: JUMPDEST
00000cf3: PUSH0
00000cf4: DUP2
00000cf5: CALLDATALOAD
00000cf6: SWAP1
00000cf7: POP
00000cf8: PUSH2 0x0d00
00000cfb: DUP2
00000cfc: PUSH2 0x0cdc
00000cff: JUMP
00000d00: JUMPDEST
00000d01: SWAP3
00000d02: SWAP2
00000d03: POP
00000d04: POP
00000d05: JUMP
00000d06: JUMPDEST
00000d07: PUSH0
00000d08: PUSH2 0x0d18
00000d0b: PUSH2 0x0d13
00000d0e: DUP5
00000d0f: PUSH2 0x0cb1
00000d12: JUMP
00000d13: JUMPDEST
00000d14: PUSH2 0x0b9d
00000d17: JUMP
00000d18: JUMPDEST
00000d19: SWAP1
00000d1a: POP
00000d1b: DUP1
00000d1c: DUP4
00000d1d: DUP3
00000d1e: MSTORE
00000d1f: PUSH1 0x20
00000d21: DUP3
00000d22: ADD
00000d23: SWAP1
00000d24: POP
00000d25: PUSH1 0x20
00000d27: DUP5
00000d28: MUL
00000d29: DUP4
00000d2a: ADD
00000d2b: DUP6
00000d2c: DUP2
00000d2d: GT
00000d2e: ISZERO
00000d2f: PUSH2 0x0d3b
00000d32: JUMPI
00000d33: PUSH2 0x0d3a
00000d36: PUSH2 0x0be2
00000d39: JUMP
00000d3a: JUMPDEST
00000d3b: JUMPDEST
00000d3c: DUP4
00000d3d: JUMPDEST
00000d3e: DUP2
00000d3f: DUP2
00000d40: LT
00000d41: ISZERO
00000d42: PUSH2 0x0d64
00000d45: JUMPI
00000d46: DUP1
00000d47: PUSH2 0x0d50
00000d4a: DUP9
00000d4b: DUP3
00000d4c: PUSH2 0x0cf2
00000d4f: JUMP
00000d50: JUMPDEST
00000d51: DUP5
00000d52: MSTORE
00000d53: PUSH1 0x20
00000d55: DUP5
00000d56: ADD
00000d57: SWAP4
00000d58: POP
00000d59: POP
00000d5a: PUSH1 0x20
00000d5c: DUP2
00000d5d: ADD
00000d5e: SWAP1
00000d5f: POP
00000d60: PUSH2 0x0d3d
00000d63: JUMP
00000d64: JUMPDEST
00000d65: POP
00000d66: POP
00000d67: POP
00000d68: SWAP4
00000d69: SWAP3
00000d6a: POP
00000d6b: POP
00000d6c: POP
00000d6d: JUMP
00000d6e: JUMPDEST
00000d6f: PUSH0
00000d70: DUP3
00000d71: PUSH1 0x1f
00000d73: DUP4
00000d74: ADD
00000d75: SLT
00000d76: PUSH2 0x0d82
00000d79: JUMPI
00000d7a: PUSH2 0x0d81
00000d7d: PUSH2 0x0b2b
00000d80: JUMP
00000d81: JUMPDEST
00000d82: JUMPDEST
00000d83: DUP2
00000d84: CALLDATALOAD
00000d85: PUSH2 0x0d92
00000d88: DUP5
00000d89: DUP3
00000d8a: PUSH1 0x20
00000d8c: DUP7
00000d8d: ADD
00000d8e: PUSH2 0x0d06
00000d91: JUMP
00000d92: JUMPDEST
00000d93: SWAP2
00000d94: POP
00000d95: POP
00000d96: SWAP3
00000d97: SWAP2
00000d98: POP
00000d99: POP
00000d9a: JUMP
00000d9b: JUMPDEST
00000d9c: PUSH0
00000d9d: PUSH2 0x0da5
00000da0: DUP3
00000da1: PUSH2 0x095b
00000da4: JUMP
00000da5: JUMPDEST
00000da6: SWAP1
00000da7: POP
00000da8: SWAP2
00000da9: SWAP1
00000daa: POP
00000dab: JUMP
00000dac: JUMPDEST
00000dad: PUSH2 0x0db5
00000db0: DUP2
00000db1: PUSH2 0x0d9b
00000db4: JUMP
00000db5: JUMPDEST
00000db6: DUP2
00000db7: EQ
00000db8: PUSH2 0x0dbf
00000dbb: JUMPI
00000dbc: PUSH0
00000dbd: PUSH0
00000dbe: REVERT
00000dbf: JUMPDEST
00000dc0: POP
00000dc1: JUMP
00000dc2: JUMPDEST
00000dc3: PUSH0
00000dc4: DUP2
00000dc5: CALLDATALOAD
00000dc6: SWAP1
00000dc7: POP
00000dc8: PUSH2 0x0dd0
00000dcb: DUP2
00000dcc: PUSH2 0x0dac
00000dcf: JUMP
00000dd0: JUMPDEST
00000dd1: SWAP3
00000dd2: SWAP2
00000dd3: POP
00000dd4: POP
00000dd5: JUMP
00000dd6: JUMPDEST
00000dd7: PUSH2 0x0ddf
00000dda: DUP2
00000ddb: PUSH2 0x099a
00000dde: JUMP
00000ddf: JUMPDEST
00000de0: DUP2
00000de1: EQ
00000de2: PUSH2 0x0de9
00000de5: JUMPI
00000de6: PUSH0
00000de7: PUSH0
00000de8: REVERT
00000de9: JUMPDEST
00000dea: POP
00000deb: JUMP
00000dec: JUMPDEST
00000ded: PUSH0
00000dee: DUP2
00000def: CALLDATALOAD
00000df0: SWAP1
00000df1: POP
00000df2: PUSH2 0x0dfa
00000df5: DUP2
00000df6: PUSH2 0x0dd6
00000df9: JUMP
00000dfa: JUMPDEST
00000dfb: SWAP3
00000dfc: SWAP2
00000dfd: POP
00000dfe: POP
00000dff: JUMP
00000e00: JUMPDEST
00000e01: PUSH0
00000e02: PUSH0
00000e03: REVERT
00000e04: JUMPDEST
00000e05: PUSH0
00000e06: PUSH8 0xffffffffffffffff
00000e0f: DUP3
00000e10: GT
00000e11: ISZERO
00000e12: PUSH2 0x0e1e
00000e15: JUMPI
00000e16: PUSH2 0x0e1d
00000e19: PUSH2 0x0b3f
00000e1c: JUMP
00000e1d: JUMPDEST
00000e1e: JUMPDEST
00000e1f: PUSH2 0x0e27
00000e22: DUP3
00000e23: PUSH2 0x0b2f
00000e26: JUMP
00000e27: JUMPDEST
00000e28: SWAP1
00000e29: POP
00000e2a: PUSH1 0x20
00000e2c: DUP2
00000e2d: ADD
00000e2e: SWAP1
00000e2f: POP
00000e30: SWAP2
00000e31: SWAP1
00000e32: POP
00000e33: JUMP
00000e34: JUMPDEST
00000e35: DUP3
00000e36: DUP2
00000e37: DUP4
00000e38: CALLDATACOPY
00000e39: PUSH0
00000e3a: DUP4
00000e3b: DUP4
00000e3c: ADD
00000e3d: MSTORE
00000e3e: POP
00000e3f: POP
00000e40: POP
00000e41: JUMP
00000e42: JUMPDEST
00000e43: PUSH0
00000e44: PUSH2 0x0e54
00000e47: PUSH2 0x0e4f
00000e4a: DUP5
00000e4b: PUSH2 0x0e04
00000e4e: JUMP
00000e4f: JUMPDEST
00000e50: PUSH2 0x0b9d
00000e53: JUMP
00000e54: JUMPDEST
00000e55: SWAP1
00000e56: POP
00000e57: DUP3
00000e58: DUP2
00000e59: MSTORE
00000e5a: PUSH1 0x20
00000e5c: DUP2
00000e5d: ADD
00000e5e: DUP5
00000e5f: DUP5
00000e60: DUP5
00000e61: ADD
00000e62: GT
00000e63: ISZERO
00000e64: PUSH2 0x0e70
00000e67: JUMPI
00000e68: PUSH2 0x0e6f
00000e6b: PUSH2 0x0e00
00000e6e: JUMP
00000e6f: JUMPDEST
00000e70: JUMPDEST
00000e71: PUSH2 0x0e7b
00000e74: DUP5
00000e75: DUP3
00000e76: DUP6
00000e77: PUSH2 0x0e34
00000e7a: JUMP
00000e7b: JUMPDEST
00000e7c: POP
00000e7d: SWAP4
00000e7e: SWAP3
00000e7f: POP
00000e80: POP
00000e81: POP
00000e82: JUMP
00000e83: JUMPDEST
00000e84: PUSH0
00000e85: DUP3
00000e86: PUSH1 0x1f
00000e88: DUP4
00000e89: ADD
00000e8a: SLT
00000e8b: PUSH2 0x0e97
00000e8e: JUMPI
00000e8f: PUSH2 0x0e96
00000e92: PUSH2 0x0b2b
00000e95: JUMP
00000e96: JUMPDEST
00000e97: JUMPDEST
00000e98: DUP2
00000e99: CALLDATALOAD
00000e9a: PUSH2 0x0ea7
00000e9d: DUP5
00000e9e: DUP3
00000e9f: PUSH1 0x20
00000ea1: DUP7
00000ea2: ADD
00000ea3: PUSH2 0x0e42
00000ea6: JUMP
00000ea7: JUMPDEST
00000ea8: SWAP2
00000ea9: POP
00000eaa: POP
00000eab: SWAP3
00000eac: SWAP2
00000ead: POP
00000eae: POP
00000eaf: JUMP
00000eb0: JUMPDEST
00000eb1: PUSH0
00000eb2: PUSH0
00000eb3: PUSH0
00000eb4: PUSH0
00000eb5: PUSH0
00000eb6: PUSH0
00000eb7: PUSH0
00000eb8: PUSH0
00000eb9: PUSH2 0x0100
00000ebc: DUP10
00000ebd: DUP12
00000ebe: SUB
00000ebf: SLT
00000ec0: ISZERO
00000ec1: PUSH2 0x0ecd
00000ec4: JUMPI
00000ec5: PUSH2 0x0ecc
00000ec8: PUSH2 0x0a82
00000ecb: JUMP
00000ecc: JUMPDEST
00000ecd: JUMPDEST
00000ece: PUSH0
00000ecf: DUP10
00000ed0: ADD
00000ed1: CALLDATALOAD
00000ed2: PUSH8 0xffffffffffffffff
00000edb: DUP2
00000edc: GT
00000edd: ISZERO
00000ede: PUSH2 0x0eea
00000ee1: JUMPI
00000ee2: PUSH2 0x0ee9
00000ee5: PUSH2 0x0a86
00000ee8: JUMP
00000ee9: JUMPDEST
00000eea: JUMPDEST
00000eeb: PUSH2 0x0ef6
00000eee: DUP12
00000eef: DUP3
00000ef0: DUP13
00000ef1: ADD
00000ef2: PUSH2 0x0c84
00000ef5: JUMP
00000ef6: JUMPDEST
00000ef7: SWAP9
00000ef8: POP
00000ef9: POP
00000efa: PUSH1 0x20
00000efc: DUP10
00000efd: ADD
00000efe: CALLDATALOAD
00000eff: PUSH8 0xffffffffffffffff
00000f08: DUP2
00000f09: GT
00000f0a: ISZERO
00000f0b: PUSH2 0x0f17
00000f0e: JUMPI
00000f0f: PUSH2 0x0f16
00000f12: PUSH2 0x0a86
00000f15: JUMP
00000f16: JUMPDEST
00000f17: JUMPDEST
00000f18: PUSH2 0x0f23
00000f1b: DUP12
00000f1c: DUP3
00000f1d: DUP13
00000f1e: ADD
00000f1f: PUSH2 0x0d6e
00000f22: JUMP
00000f23: JUMPDEST
00000f24: SWAP8
00000f25: POP
00000f26: POP
00000f27: PUSH1 0x40
00000f29: DUP10
00000f2a: ADD
00000f2b: CALLDATALOAD
00000f2c: PUSH8 0xffffffffffffffff
00000f35: DUP2
00000f36: GT
00000f37: ISZERO
00000f38: PUSH2 0x0f44
00000f3b: JUMPI
00000f3c: PUSH2 0x0f43
00000f3f: PUSH2 0x0a86
00000f42: JUMP
00000f43: JUMPDEST
00000f44: JUMPDEST
00000f45: PUSH2 0x0f50
00000f48: DUP12
00000f49: DUP3
00000f4a: DUP13
00000f4b: ADD
00000f4c: PUSH2 0x0d6e
00000f4f: JUMP
00000f50: JUMPDEST
00000f51: SWAP7
00000f52: POP
00000f53: POP
00000f54: PUSH1 0x60
00000f56: PUSH2 0x0f61
00000f59: DUP12
00000f5a: DUP3
00000f5b: DUP13
00000f5c: ADD
00000f5d: PUSH2 0x0dc2
00000f60: JUMP
00000f61: JUMPDEST
00000f62: SWAP6
00000f63: POP
00000f64: POP
00000f65: PUSH1 0x80
00000f67: PUSH2 0x0f72
00000f6a: DUP12
00000f6b: DUP3
00000f6c: DUP13
00000f6d: ADD
00000f6e: PUSH2 0x0dec
00000f71: JUMP
00000f72: JUMPDEST
00000f73: SWAP5
00000f74: POP
00000f75: POP
00000f76: PUSH1 0xa0
00000f78: DUP10
00000f79: ADD
00000f7a: CALLDATALOAD
00000f7b: PUSH8 0xffffffffffffffff
00000f84: DUP2
00000f85: GT
00000f86: ISZERO
00000f87: PUSH2 0x0f93
00000f8a: JUMPI
00000f8b: PUSH2 0x0f92
00000f8e: PUSH2 0x0a86
00000f91: JUMP
00000f92: JUMPDEST
00000f93: JUMPDEST
00000f94: PUSH2 0x0f9f
00000f97: DUP12
00000f98: DUP3
00000f99: DUP13
00000f9a: ADD
00000f9b: PUSH2 0x0e83
00000f9e: JUMP
00000f9f: JUMPDEST
00000fa0: SWAP4
00000fa1: POP
00000fa2: POP
00000fa3: PUSH1 0xc0
00000fa5: PUSH2 0x0fb0
00000fa8: DUP12
00000fa9: DUP3
00000faa: DUP13
00000fab: ADD
00000fac: PUSH2 0x0aa0
00000faf: JUMP
00000fb0: JUMPDEST
00000fb1: SWAP3
00000fb2: POP
00000fb3: POP
00000fb4: PUSH1 0xe0
00000fb6: PUSH2 0x0fc1
00000fb9: DUP12
00000fba: DUP3
00000fbb: DUP13
00000fbc: ADD
00000fbd: PUSH2 0x0dec
00000fc0: JUMP
00000fc1: JUMPDEST
00000fc2: SWAP2
00000fc3: POP
00000fc4: POP
00000fc5: SWAP3
00000fc6: SWAP6
00000fc7: SWAP9
00000fc8: POP
00000fc9: SWAP3
00000fca: SWAP6
00000fcb: SWAP9
00000fcc: SWAP1
00000fcd: SWAP4
00000fce: SWAP7
00000fcf: POP
00000fd0: JUMP
00000fd1: JUMPDEST
00000fd2: PUSH0
00000fd3: DUP2
00000fd4: MLOAD
00000fd5: SWAP1
00000fd6: POP
00000fd7: SWAP2
00000fd8: SWAP1
00000fd9: POP
00000fda: JUMP
00000fdb: JUMPDEST
00000fdc: PUSH0
00000fdd: DUP3
00000fde: DUP3
00000fdf: MSTORE
00000fe0: PUSH1 0x20
00000fe2: DUP3
00000fe3: ADD
00000fe4: SWAP1
00000fe5: POP
00000fe6: SWAP3
00000fe7: SWAP2
00000fe8: POP
00000fe9: POP
00000fea: JUMP
00000feb: JUMPDEST
00000fec: PUSH0
00000fed: DUP2
00000fee: SWAP1
00000fef: POP
00000ff0: PUSH1 0x20
00000ff2: DUP3
00000ff3: ADD
00000ff4: SWAP1
00000ff5: POP
00000ff6: SWAP2
00000ff7: SWAP1
00000ff8: POP
00000ff9: JUMP
00000ffa: JUMPDEST
00000ffb: PUSH2 0x1003
00000ffe: DUP2
00000fff: PUSH2 0x097a
00001002: JUMP
00001003: JUMPDEST
00001004: DUP3
00001005: MSTORE
00001006: POP
00001007: POP
00001008: JUMP
00001009: JUMPDEST
0000100a: PUSH0
0000100b: PUSH2 0x1014
0000100e: DUP4
0000100f: DUP4
00001010: PUSH2 0x0ffa
00001013: JUMP
00001014: JUMPDEST
00001015: PUSH1 0x20
00001017: DUP4
00001018: ADD
00001019: SWAP1
0000101a: POP
0000101b: SWAP3
0000101c: SWAP2
0000101d: POP
0000101e: POP
0000101f: JUMP
00001020: JUMPDEST
00001021: PUSH0
00001022: PUSH1 0x20
00001024: DUP3
00001025: ADD
00001026: SWAP1
00001027: POP
00001028: SWAP2
00001029: SWAP1
0000102a: POP
0000102b: JUMP
0000102c: JUMPDEST
0000102d: PUSH0
0000102e: PUSH2 0x1036
00001031: DUP3
00001032: PUSH2 0x0fd1
00001035: JUMP
00001036: JUMPDEST
00001037: PUSH2 0x1040
0000103a: DUP2
0000103b: DUP6
0000103c: PUSH2 0x0fdb
0000103f: JUMP
00001040: JUMPDEST
00001041: SWAP4
00001042: POP
00001043: PUSH2 0x104b
00001046: DUP4
00001047: PUSH2 0x0feb
0000104a: JUMP
0000104b: JUMPDEST
0000104c: DUP1
0000104d: PUSH0
0000104e: JUMPDEST
0000104f: DUP4
00001050: DUP2
00001051: LT
00001052: ISZERO
00001053: PUSH2 0x107b
00001056: JUMPI
00001057: DUP2
00001058: MLOAD
00001059: PUSH2 0x1062
0000105c: DUP9
0000105d: DUP3
0000105e: PUSH2 0x1009
00001061: JUMP
00001062: JUMPDEST
00001063: SWAP8
00001064: POP
00001065: PUSH2 0x106d
00001068: DUP4
00001069: PUSH2 0x1020
0000106c: JUMP
0000106d: JUMPDEST
0000106e: SWAP3
0000106f: POP
00001070: POP
00001071: PUSH1 0x01
00001073: DUP2
00001074: ADD
00001075: SWAP1
00001076: POP
00001077: PUSH2 0x104e
0000107a: JUMP
0000107b: JUMPDEST
0000107c: POP
0000107d: DUP6
0000107e: SWAP4
0000107f: POP
00001080: POP
00001081: POP
00001082: POP
00001083: SWAP3
00001084: SWAP2
00001085: POP
00001086: POP
00001087: JUMP
00001088: JUMPDEST
00001089: PUSH0
0000108a: PUSH1 0x20
0000108c: DUP3
0000108d: ADD
0000108e: SWAP1
0000108f: POP
00001090: DUP2
00001091: DUP2
00001092: SUB
00001093: PUSH0
00001094: DUP4
00001095: ADD
00001096: MSTORE
00001097: PUSH2 0x10a0
0000109a: DUP2
0000109b: DUP5
0000109c: PUSH2 0x102c
0000109f: JUMP
000010a0: JUMPDEST
000010a1: SWAP1
000010a2: POP
000010a3: SWAP3
000010a4: SWAP2
000010a5: POP
000010a6: POP
000010a7: JUMP
000010a8: JUMPDEST
000010a9: PUSH0
000010aa: PUSH1 0x20
000010ac: DUP3
000010ad: ADD
000010ae: SWAP1
000010af: POP
000010b0: PUSH2 0x10bb
000010b3: PUSH0
000010b4: DUP4
000010b5: ADD
000010b6: DUP5
000010b7: PUSH2 0x098b
000010ba: JUMP
000010bb: JUMPDEST
000010bc: SWAP3
000010bd: SWAP2
000010be: POP
000010bf: POP
000010c0: JUMP
000010c1: JUMPDEST
000010c2: PUSH2 0x10ca
000010c5: DUP2
000010c6: PUSH2 0x0d9b
000010c9: JUMP
000010ca: JUMPDEST
000010cb: DUP3
000010cc: MSTORE
000010cd: POP
000010ce: POP
000010cf: JUMP
000010d0: JUMPDEST
000010d1: PUSH0
000010d2: PUSH1 0xe0
000010d4: DUP3
000010d5: ADD
000010d6: SWAP1
000010d7: POP
000010d8: PUSH2 0x10e3
000010db: PUSH0
000010dc: DUP4
000010dd: ADD
000010de: DUP11
000010df: PUSH2 0x0a51
000010e2: JUMP
000010e3: JUMPDEST
000010e4: PUSH2 0x10f0
000010e7: PUSH1 0x20
000010e9: DUP4
000010ea: ADD
000010eb: DUP10
000010ec: PUSH2 0x10c1
000010ef: JUMP
000010f0: JUMPDEST
000010f1: PUSH2 0x10fd
000010f4: PUSH1 0x40
000010f6: DUP4
000010f7: ADD
000010f8: DUP9
000010f9: PUSH2 0x09a3
000010fc: JUMP
000010fd: JUMPDEST
000010fe: PUSH2 0x110a
00001101: PUSH1 0x60
00001103: DUP4
00001104: ADD
00001105: DUP8
00001106: PUSH2 0x0a51
00001109: JUMP
0000110a: JUMPDEST
0000110b: PUSH2 0x1117
0000110e: PUSH1 0x80
00001110: DUP4
00001111: ADD
00001112: DUP7
00001113: PUSH2 0x09a3
00001116: JUMP
00001117: JUMPDEST
00001118: PUSH2 0x1124
0000111b: PUSH1 0xa0
0000111d: DUP4
0000111e: ADD
0000111f: DUP6
00001120: PUSH2 0x098b
00001123: JUMP
00001124: JUMPDEST
00001125: PUSH2 0x1131
00001128: PUSH1 0xc0
0000112a: DUP4
0000112b: ADD
0000112c: DUP5
0000112d: PUSH2 0x09a3
00001130: JUMP
00001131: JUMPDEST
00001132: SWAP9
00001133: SWAP8
00001134: POP
00001135: POP
00001136: POP
00001137: POP
00001138: POP
00001139: POP
0000113a: POP
0000113b: POP
0000113c: JUMP
0000113d: JUMPDEST
0000113e: PUSH0
0000113f: DUP2
00001140: SWAP1
00001141: POP
00001142: SWAP3
00001143: SWAP2
00001144: POP
00001145: POP
00001146: JUMP
00001147: JUMPDEST
00001148: PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000
00001169: PUSH0
0000116a: DUP3
0000116b: ADD
0000116c: MSTORE
0000116d: POP
0000116e: JUMP
0000116f: JUMPDEST
00001170: PUSH0
00001171: PUSH2 0x117b
00001174: PUSH1 0x02
00001176: DUP4
00001177: PUSH2 0x113d
0000117a: JUMP
0000117b: JUMPDEST
0000117c: SWAP2
0000117d: POP
0000117e: PUSH2 0x1186
00001181: DUP3
00001182: PUSH2 0x1147
00001185: JUMP
00001186: JUMPDEST
00001187: PUSH1 0x02
00001189: DUP3
0000118a: ADD
0000118b: SWAP1
0000118c: POP
0000118d: SWAP2
0000118e: SWAP1
0000118f: POP
00001190: JUMP
00001191: JUMPDEST
00001192: PUSH0
00001193: DUP2
00001194: SWAP1
00001195: POP
00001196: SWAP2
00001197: SWAP1
00001198: POP
00001199: JUMP
0000119a: JUMPDEST
0000119b: PUSH2 0x11ab
0000119e: PUSH2 0x11a6
000011a1: DUP3
000011a2: PUSH2 0x0a48
000011a5: JUMP
000011a6: JUMPDEST
000011a7: PUSH2 0x1191
000011aa: JUMP
000011ab: JUMPDEST
000011ac: DUP3
000011ad: MSTORE
000011ae: POP
000011af: POP
000011b0: JUMP
000011b1: JUMPDEST
000011b2: PUSH0
000011b3: PUSH2 0x11bb
000011b6: DUP3
000011b7: PUSH2 0x116f
000011ba: JUMP
000011bb: JUMPDEST
000011bc: SWAP2
000011bd: POP
000011be: PUSH2 0x11c7
000011c1: DUP3
000011c2: DUP6
000011c3: PUSH2 0x119a
000011c6: JUMP
000011c7: JUMPDEST
000011c8: PUSH1 0x20
000011ca: DUP3
000011cb: ADD
000011cc: SWAP2
000011cd: POP
000011ce: PUSH2 0x11d7
000011d1: DUP3
000011d2: DUP5
000011d3: PUSH2 0x119a
000011d6: JUMP
000011d7: JUMPDEST
000011d8: PUSH1 0x20
000011da: DUP3
000011db: ADD
000011dc: SWAP2
000011dd: POP
000011de: DUP2
000011df: SWAP1
000011e0: POP
000011e1: SWAP4
000011e2: SWAP3
000011e3: POP
000011e4: POP
000011e5: POP
000011e6: JUMP
000011e7: JUMPDEST
000011e8: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00001209: PUSH0
0000120a: MSTORE
0000120b: PUSH1 0x32
0000120d: PUSH1 0x04
0000120f: MSTORE
00001210: PUSH1 0x24
00001212: PUSH0
00001213: REVERT
00001214: JUMPDEST
00001215: PUSH2 0x121d
00001218: DUP2
00001219: PUSH2 0x0be6
0000121c: JUMP
0000121d: JUMPDEST
0000121e: DUP3
0000121f: MSTORE
00001220: POP
00001221: POP
00001222: JUMP
00001223: JUMPDEST
00001224: PUSH0
00001225: PUSH1 0x80
00001227: DUP3
00001228: ADD
00001229: SWAP1
0000122a: POP
0000122b: PUSH2 0x1236
0000122e: PUSH0
0000122f: DUP4
00001230: ADD
00001231: DUP8
00001232: PUSH2 0x0a51
00001235: JUMP
00001236: JUMPDEST
00001237: PUSH2 0x1243
0000123a: PUSH1 0x20
0000123c: DUP4
0000123d: ADD
0000123e: DUP7
0000123f: PUSH2 0x1214
00001242: JUMP
00001243: JUMPDEST
00001244: PUSH2 0x1250
00001247: PUSH1 0x40
00001249: DUP4
0000124a: ADD
0000124b: DUP6
0000124c: PUSH2 0x0a51
0000124f: JUMP
00001250: JUMPDEST
00001251: PUSH2 0x125d
00001254: PUSH1 0x60
00001256: DUP4
00001257: ADD
00001258: DUP5
00001259: PUSH2 0x0a51
0000125c: JUMP
0000125d: JUMPDEST
0000125e: SWAP6
0000125f: SWAP5
00001260: POP
00001261: POP
00001262: POP
00001263: POP
00001264: POP
00001265: JUMP
00001266: JUMPDEST
00001267: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00001288: PUSH0
00001289: MSTORE
0000128a: PUSH1 0x11
0000128c: PUSH1 0x04
0000128e: MSTORE
0000128f: PUSH1 0x24
00001291: PUSH0
00001292: REVERT
00001293: JUMPDEST
00001294: PUSH0
00001295: PUSH2 0x129d
00001298: DUP3
00001299: PUSH2 0x099a
0000129c: JUMP
0000129d: JUMPDEST
0000129e: SWAP2
0000129f: POP
000012a0: PUSH2 0x12a8
000012a3: DUP4
000012a4: PUSH2 0x099a
000012a7: JUMP
000012a8: JUMPDEST
000012a9: SWAP3
000012aa: POP
000012ab: DUP3
000012ac: DUP3
000012ad: ADD
000012ae: SWAP1
000012af: POP
000012b0: DUP1
000012b1: DUP3
000012b2: GT
000012b3: ISZERO
000012b4: PUSH2 0x12c0
000012b7: JUMPI
000012b8: PUSH2 0x12bf
000012bb: PUSH2 0x1266
000012be: JUMP
000012bf: JUMPDEST
000012c0: JUMPDEST
000012c1: SWAP3
000012c2: SWAP2
000012c3: POP
000012c4: POP
000012c5: JUMP
000012c6: JUMPDEST
000012c7: PUSH0
000012c8: DUP2
000012c9: MLOAD
000012ca: SWAP1
000012cb: POP
000012cc: SWAP2
000012cd: SWAP1
000012ce: POP
000012cf: JUMP
000012d0: JUMPDEST
000012d1: PUSH0
000012d2: DUP2
000012d3: SWAP1
000012d4: POP
000012d5: SWAP3
000012d6: SWAP2
000012d7: POP
000012d8: POP
000012d9: JUMP
000012da: JUMPDEST
000012db: DUP3
000012dc: DUP2
000012dd: DUP4
000012de: MCOPY
000012df: PUSH0
000012e0: DUP4
000012e1: DUP4
000012e2: ADD
000012e3: MSTORE
000012e4: POP
000012e5: POP
000012e6: POP
000012e7: JUMP
000012e8: JUMPDEST
000012e9: PUSH0
000012ea: PUSH2 0x12f2
000012ed: DUP3
000012ee: PUSH2 0x12c6
000012f1: JUMP
000012f2: JUMPDEST
000012f3: PUSH2 0x12fc
000012f6: DUP2
000012f7: DUP6
000012f8: PUSH2 0x12d0
000012fb: JUMP
000012fc: JUMPDEST
000012fd: SWAP4
000012fe: POP
000012ff: PUSH2 0x130c
00001302: DUP2
00001303: DUP6
00001304: PUSH1 0x20
00001306: DUP7
00001307: ADD
00001308: PUSH2 0x12da
0000130b: JUMP
0000130c: JUMPDEST
0000130d: DUP1
0000130e: DUP5
0000130f: ADD
00001310: SWAP2
00001311: POP
00001312: POP
00001313: SWAP3
00001314: SWAP2
00001315: POP
00001316: POP
00001317: JUMP
00001318: JUMPDEST
00001319: PUSH0
0000131a: PUSH2 0x1323
0000131d: DUP3
0000131e: DUP5
0000131f: PUSH2 0x12e8
00001322: JUMP
00001323: JUMPDEST
00001324: SWAP2
00001325: POP
00001326: DUP2
00001327: SWAP1
00001328: POP
00001329: SWAP3
0000132a: SWAP2
0000132b: POP
0000132c: POP
0000132d: JUMP
0000132e: JUMPDEST
0000132f: PUSH0
00001330: DUP2
00001331: SWAP1
00001332: POP
00001333: SWAP2
00001334: SWAP1
00001335: POP
00001336: JUMP
00001337: JUMPDEST
00001338: PUSH0
00001339: PUSH2 0x1351
0000133c: PUSH2 0x134c
0000133f: PUSH2 0x1347
00001342: DUP5
00001343: PUSH2 0x095b
00001346: JUMP
00001347: JUMPDEST
00001348: PUSH2 0x132e
0000134b: JUMP
0000134c: JUMPDEST
0000134d: PUSH2 0x095b
00001350: JUMP
00001351: JUMPDEST
00001352: SWAP1
00001353: POP
00001354: SWAP2
00001355: SWAP1
00001356: POP
00001357: JUMP
00001358: JUMPDEST
00001359: PUSH0
0000135a: PUSH2 0x1362
0000135d: DUP3
0000135e: PUSH2 0x1337
00001361: JUMP
00001362: JUMPDEST
00001363: SWAP1
00001364: POP
00001365: SWAP2
00001366: SWAP1
00001367: POP
00001368: JUMP
00001369: JUMPDEST
0000136a: PUSH0
0000136b: PUSH2 0x1373
0000136e: DUP3
0000136f: PUSH2 0x1358
00001372: JUMP
00001373: JUMPDEST
00001374: SWAP1
00001375: POP
00001376: SWAP2
00001377: SWAP1
00001378: POP
00001379: JUMP
0000137a: JUMPDEST
0000137b: PUSH2 0x1383
0000137e: DUP2
0000137f: PUSH2 0x1369
00001382: JUMP
00001383: JUMPDEST
00001384: DUP3
00001385: MSTORE
00001386: POP
00001387: POP
00001388: JUMP
00001389: JUMPDEST
0000138a: PUSH0
0000138b: DUP3
0000138c: DUP3
0000138d: MSTORE
0000138e: PUSH1 0x20
00001390: DUP3
00001391: ADD
00001392: SWAP1
00001393: POP
00001394: SWAP3
00001395: SWAP2
00001396: POP
00001397: POP
00001398: JUMP
00001399: JUMPDEST
0000139a: PUSH0
0000139b: PUSH2 0x13a3
0000139e: DUP3
0000139f: PUSH2 0x12c6
000013a2: JUMP
000013a3: JUMPDEST
000013a4: PUSH2 0x13ad
000013a7: DUP2
000013a8: DUP6
000013a9: PUSH2 0x1389
000013ac: JUMP
000013ad: JUMPDEST
000013ae: SWAP4
000013af: POP
000013b0: PUSH2 0x13bd
000013b3: DUP2
000013b4: DUP6
000013b5: PUSH1 0x20
000013b7: DUP7
000013b8: ADD
000013b9: PUSH2 0x12da
000013bc: JUMP
000013bd: JUMPDEST
000013be: PUSH2 0x13c6
000013c1: DUP2
000013c2: PUSH2 0x0b2f
000013c5: JUMP
000013c6: JUMPDEST
000013c7: DUP5
000013c8: ADD
000013c9: SWAP2
000013ca: POP
000013cb: POP
000013cc: SWAP3
000013cd: SWAP2
000013ce: POP
000013cf: POP
000013d0: JUMP
000013d1: JUMPDEST
000013d2: PUSH0
000013d3: PUSH1 0x80
000013d5: DUP3
000013d6: ADD
000013d7: SWAP1
000013d8: POP
000013d9: PUSH2 0x13e4
000013dc: PUSH0
000013dd: DUP4
000013de: ADD
000013df: DUP8
000013e0: PUSH2 0x098b
000013e3: JUMP
000013e4: JUMPDEST
000013e5: PUSH2 0x13f1
000013e8: PUSH1 0x20
000013ea: DUP4
000013eb: ADD
000013ec: DUP7
000013ed: PUSH2 0x137a
000013f0: JUMP
000013f1: JUMPDEST
000013f2: PUSH2 0x13fe
000013f5: PUSH1 0x40
000013f7: DUP4
000013f8: ADD
000013f9: DUP6
000013fa: PUSH2 0x09a3
000013fd: JUMP
000013fe: JUMPDEST
000013ff: DUP2
00001400: DUP2
00001401: SUB
00001402: PUSH1 0x60
00001404: DUP4
00001405: ADD
00001406: MSTORE
00001407: PUSH2 0x1410
0000140a: DUP2
0000140b: DUP5
0000140c: PUSH2 0x1399
0000140f: JUMP
00001410: JUMPDEST
00001411: SWAP1
00001412: POP
00001413: SWAP6
00001414: SWAP5
00001415: POP
00001416: POP
00001417: POP
00001418: POP
00001419: POP
0000141a: JUMP
0000141b: INVALID
0000141c: LOG2
0000141d: PUSH5 0x6970667358
00001423: UNKNOWN(0x22)
00001424: SLT
00001425: KECCAK256
00001426: SHR
00001427: SHR
00001428: POP
00001429: ISZERO
0000142a: UNKNOWN(0x29)
0000142b: UNKNOWN(0xF9)
0000142c: DUP7
0000142d: UNKNOWN(0xE5)
0000142e: UNKNOWN(0xB3)
0000142f: PUSH4 0x882530da
00001434: UNKNOWN(0x2C)
00001435: UNKNOWN(0x26)
00001436: RETURNDATASIZE
00001437: PUSH30

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x3eda19de8ceb41aa099553469200eff7e9318f3885ab219ea940ada9ec73ed2e
call_targets: 0xe99127b5f02e4840c02688d3bba4cb051bcdd47d
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x3eda19de8ceb41aa099553469200eff7e9318f3885ab219ea940ada9ec73ed2e",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xe99127b5f02e4840c02688d3bba4cb051bcdd47d"
    ],
    "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": "0x9e4e7318",
            "selector": "0x9e4e7318",
            "calldata_variants": [
                "0x9e4e7318",
                "0x9e4e73180000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa0ab9653",
            "selector": "0xa0ab9653",
            "calldata_variants": [
                "0xa0ab9653",
                "0xa0ab96530000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa0e67e2b",
            "selector": "0xa0e67e2b",
            "calldata_variants": [
                "0xa0e67e2b",
                "0xa0e67e2b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xaffed0e0",
            "selector": "0xaffed0e0",
            "calldata_variants": [
                "0xaffed0e0",
                "0xaffed0e00000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xba9a91a5",
            "selector": "0xba9a91a5",
            "calldata_variants": [
                "0xba9a91a5",
                "0xba9a91a50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf698da25",
            "selector": "0xf698da25",
            "calldata_variants": [
                "0xf698da25",
                "0xf698da250000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x04622c2e",
            "selector": "0x04622c2e",
            "calldata_variants": [
                "0x04622c2e",
                "0x04622c2e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1279991b",
            "selector": "0x1279991b",
            "calldata_variants": [
                "0x1279991b",
                "0x1279991b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1998,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 1,
    "guards_detected": [],
    "untrusted_call_count": 1
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x3eda19de8ceb41aa099553469200eff7e9318f3885ab219ea940ada9ec73ed2e
call_targets: 0xe99127b5f02e4840c02688d3bba4cb051bcdd47d
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x3eda19de8ceb41aa099553469200eff7e9318f3885ab219ea940ada9ec73ed2e",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xe99127b5f02e4840c02688d3bba4cb051bcdd47d"
    ],
    "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": "0x9e4e7318",
            "selector": "0x9e4e7318",
            "calldata_variants": [
                "0x9e4e7318",
                "0x9e4e73180000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa0ab9653",
            "selector": "0xa0ab9653",
            "calldata_variants": [
                "0xa0ab9653",
                "0xa0ab96530000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa0e67e2b",
            "selector": "0xa0e67e2b",
            "calldata_variants": [
                "0xa0e67e2b",
                "0xa0e67e2b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xaffed0e0",
            "selector": "0xaffed0e0",
            "calldata_variants": [
                "0xaffed0e0",
                "0xaffed0e00000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xba9a91a5",
            "selector": "0xba9a91a5",
            "calldata_variants": [
                "0xba9a91a5",
                "0xba9a91a50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf698da25",
            "selector": "0xf698da25",
            "calldata_variants": [
                "0xf698da25",
                "0xf698da250000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x04622c2e",
            "selector": "0x04622c2e",
            "calldata_variants": [
                "0x04622c2e",
                "0x04622c2e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1279991b",
            "selector": "0x1279991b",
            "calldata_variants": [
                "0x1279991b",
                "0x1279991b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1998,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 1,
    "guards_detected": []
}