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

Analysis Run

f0df3f70-8245-4124-b2f7-2a2fe0b0bb48

complete
Chain ID
1
Address
Block Number
Created
Thu, Jan 1, 2026 6:23 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
31104 report.consolidate complete 1 / 1 3 months ago
76438 artifact.fetch complete 1 / 3 1 week ago
76439 tool.cast_disasm complete 1 / 3 1 week ago
76440 analysis.bundle complete 1 / 3 1 week ago
76441 capability.graph complete 1 / 3 1 week ago
76442 detector.run complete 1 / 3 1 week ago
76443 validation.fork complete 1 / 3 1 week 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 in the provided bytecode; value transfer is gated by signature/nonce checks and no delegatecall/selfdestruct paths are present.
View stderr
[codex:893503] OpenAI Codex v0.77.0 (research preview)
[codex:893503] --------
[codex:893503] workdir: /tmp/codex-multi-xo09dn_7
[codex:893503] model: gpt-5.2-codex
[codex:893503] provider: openai
[codex:893503] approval: never
[codex:893503] sandbox: read-only
[codex:893503] reasoning effort: xhigh
[codex:893503] reasoning summaries: auto
[codex:893503] session id: 019b7ac3-cef3-7c11-a256-d4d0d0ff8a29
[codex:893503] --------
[codex:893503] user
[codex:893503] 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:893503] 
[codex:893503] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:893503] 
[codex:893503] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:893503] - Gas inefficiency, code quality, or best practices
[codex:893503] - Theoretical vulnerabilities without a clear extraction path
[codex:893503] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:893503] - Issues requiring social engineering or off-chain coordination
[codex:893503] 
[codex:893503] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:893503] - CALL/DELEGATECALL with controllable destination or calldata
[codex:893503] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:893503] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:893503] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:893503] - External calls before state updates (reentrancy)
[codex:893503] - SELFDESTRUCT with controllable beneficiary
[codex:893503] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:893503] 
[codex:893503] For each finding, you MUST explain:
[codex:893503] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:893503] 2. The concrete sequence of transactions to extract value
[codex:893503] 3. Why you believe this is exploitable (not just suspicious)
[codex:893503] 
[codex:893503] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:893503] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:893503] 
[codex:893503] Output MUST be valid JSON matching the provided schema.
[codex:893503] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:893503] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:893503] mcp startup: no servers
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Reading file contents**
[codex:893503] exec
[codex:893503] /bin/bash -lc ls in /tmp/codex-multi-xo09dn_7 succeeded in 5ms:
[codex:893503] BYTECODE_BUNDLE.txt
[codex:893503] codex-output-schema.json
[codex:893503] exec
[codex:893503] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-xo09dn_7 succeeded in 5ms:
[codex:893503] Runtime bytecode bundle for best-effort auditing.
[codex:893503] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:893503] 
[codex:893503] FILE: runtime_bytecode.hex
[codex:893503] 0x60806040526004361061004e5760003560e01c80632f54bf6e1461005a57806342cde4e8146100975780635bebe4ee146100c25780637ecebe00146100eb578063daccfbb41461012857610055565b3661005557005b600080fd5b34801561006657600080fd5b50610081600480360381019061007c9190610b39565b610165565b60405161008e9190610df4565b60405180910390f35b3480156100a357600080fd5b506100ac610185565b6040516100b99190610f2f565b60405180910390f35b3480156100ce57600080fd5b506100e960048036038101906100e49190610b62565b610198565b005b3480156100f757600080fd5b50610112600480360381019061010d9190610b39565b61042f565b60405161011f9190610f14565b60405180910390f35b34801561013457600080fd5b5061014f600480360381019061014a9190610b39565b610447565b60405161015c9190610f14565b60405180910390f35b60006020528060005260406000206000915054906101000a900460ff1681565b600160009054906101000a900460ff1681565b6101a888888888888888886104e2565b6000806000806000806101fe88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061079a565b95509550955095509550955061021333610447565b8614610254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024b90610e94565b60405180910390fd5b3a851015610297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028e90610e54565b60405180910390fd5b6102a0836108df565b6102df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d690610eb4565b60405180910390fd5b6001600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461032b9190610f71565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008373ffffffffffffffffffffffffffffffffffffffff168584846040516103979190610ddd565b600060405180830381858888f193505050503d80600081146103d5576040519150601f19603f3d011682016040523d82523d6000602084013e6103da565b606091505b505090508061041e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041590610ef4565b60405180910390fd5b505050505050505050505050505050565b60026020528060005260406000206000915090505481565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546401000000008373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff166104c79190610f71565b6104d19190610fc7565b6104db9190610f71565b9050919050565b600160009054906101000a900460ff1660ff168686905014610539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053090610e74565b60405180910390fd5b838390508686905014801561055357508787905086869050145b610592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058990610ed4565b60405180910390fd5b600082826040516105a4929190610dc4565b604051809103902090506000805b600160009054906101000a900460ff1660ff1681101561078d5760006001848d8d8581811061060a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061061f9190610c37565b8c8c86818110610658577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201358b8b87818110610698577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135604051600081526020016040526040516106bc9493929190610e0f565b6020604051602081039080840390855afa1580156106de573d6000803e3d6000fd5b5050506020604051035190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611801561076d57506000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61077657600080fd5b809250508080610785906110f6565b9150506105b2565b5050505050505050505050565b6000806000806000606060008751116107b257600080fd5b600080600060208a0192506107c6836108ea565b809250819350505089518184846107dd9190611021565b6107e79190610f71565b146107f157600080fd5b6107fa82610957565b809250819350505061080c82826109dc565b9850610822818361081d9190610f71565b610957565b809250819350505061083482826109dc565b975061084a81836108459190610f71565b610957565b809250819350505061085c82826109dc565b9650610872818361086d9190610f71565b610957565b80925081935050506108848282610a11565b955061089a81836108959190610f71565b610957565b80925081935050506108ac82826109dc565b94506108c281836108bd9190610f71565b610957565b809250819350505060208203935080845250505091939550919395565b600060019050919050565b6000806000835160001a905060f881106109205760f78103806020036101000a6001860151049250808501600101935050610951565b60c0811061094b5760c0816109359190611021565b91506001846109449190610f71565b9250610950565b600080fd5b5b50915091565b6000806000835160001a9050608081101561097857600191508392506109d6565b60b88110156109a45760808161098e9190611021565b915060018461099d9190610f71565b92506109d5565b60c08110156109cf5760b78103806020036101000a60018601510492508085016001019350506109d4565b600080fd5b5b5b50915091565b6000808214156109ef5760009050610a0b565b60208211156109fd57600080fd5b816020036101000a83510490505b92915050565b600060148214610a2057600080fd5b600c6101000a835104905092915050565b600081359050610a4081611264565b92915050565b60008083601f840112610a5857600080fd5b8235905067ffffffffffffffff811115610a7157600080fd5b602083019150836020820283011115610a8957600080fd5b9250929050565b60008083601f840112610aa257600080fd5b8235905067ffffffffffffffff811115610abb57600080fd5b602083019150836020820283011115610ad357600080fd5b9250929050565b60008083601f840112610aec57600080fd5b8235905067ffffffffffffffff811115610b0557600080fd5b602083019150836001820283011115610b1d57600080fd5b9250929050565b600081359050610b338161127b565b92915050565b600060208284031215610b4b57600080fd5b6000610b5984828501610a31565b91505092915050565b6000806000806000806000806080898b031215610b7e57600080fd5b600089013567ffffffffffffffff811115610b9857600080fd5b610ba48b828c01610a90565b9850985050602089013567ffffffffffffffff811115610bc357600080fd5b610bcf8b828c01610a46565b9650965050604089013567ffffffffffffffff811115610bee57600080fd5b610bfa8b828c01610a46565b9450945050606089013567ffffffffffffffff811115610c1957600080fd5b610c258b828c01610ada565b92509250509295985092959890939650565b600060208284031215610c4957600080fd5b6000610c5784828501610b24565b91505092915050565b610c6981611067565b82525050565b610c7881611073565b82525050565b6000610c8a8385610f55565b9350610c978385846110b4565b82840190509392505050565b6000610cae82610f4a565b610cb88185610f55565b9350610cc88185602086016110c3565b80840191505092915050565b6000610ce1601183610f60565b9150610cec8261116e565b602082019050919050565b6000610d04601583610f60565b9150610d0f82611197565b602082019050919050565b6000610d27600d83610f60565b9150610d32826111c0565b602082019050919050565b6000610d4a600e83610f60565b9150610d55826111e9565b602082019050919050565b6000610d6d601283610f60565b9150610d7882611212565b602082019050919050565b6000610d90601283610f60565b9150610d9b8261123b565b602082019050919050565b610daf8161109d565b82525050565b610dbe816110a7565b82525050565b6000610dd1828486610c7e565b91508190509392505050565b6000610de98284610ca3565b915081905092915050565b6000602082019050610e096000830184610c60565b92915050565b6000608082019050610e246000830187610c6f565b610e316020830186610db5565b610e3e6040830185610c6f565b610e4b6060830184610c6f565b95945050505050565b60006020820190508181036000830152610e6d81610cd4565b9050919050565b60006020820190508181036000830152610e8d81610cf7565b9050919050565b60006020820190508181036000830152610ead81610d1a565b9050919050565b60006020820190508181036000830152610ecd81610d3d565b9050919050565b60006020820190508181036000830152610eed81610d60565b9050919050565b60006020820190508181036000830152610f0d81610d83565b9050919050565b6000602082019050610f296000830184610da6565b92915050565b6000602082019050610f446000830184610db5565b92915050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000610f7c8261109d565b9150610f878361109d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610fbc57610fbb61113f565b5b828201905092915050565b6000610fd28261109d565b9150610fdd8361109d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156110165761101561113f565b5b828202905092915050565b600061102c8261109d565b91506110378361109d565b92508282101561104a5761104961113f565b5b828203905092915050565b60006110608261107d565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156110e15780820151818401526020810190506110c6565b838111156110f0576000848401525b50505050565b60006111018261109d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156111345761113361113f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f696e76616c696420676173207072696365000000000000000000000000000000600082015250565b7f6e6f7420656e6f756768207369676e6174757265730000000000000000000000600082015250565b7f696e76616c6964206e6f6e636500000000000000000000000000000000000000600082015250565b7f666f7262696464656e2063616c6c000000000000000000000000000000000000600082015250565b7f696e76616c6964207369676e6174757265730000000000000000000000000000600082015250565b7f7472616e73616374696f6e206661696c65640000000000000000000000000000600082015250565b61126d81611055565b811461127857600080fd5b50565b611284816110a7565b811461128f57600080fd5b5056fea26469706673582212204a7f120bb59664a117e9cff81052047e6388cc2463a615d4fe4867e55005891164736f6c63430008040033
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Decoding bytecode for exploit analysis**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] 
[codex:893503] hexdata = Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[1].strip()
[codex:893503] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:893503] 
[codex:893503] # EVM opcodes map
[codex:893503] opcodes = {i: f'OP_{i:02x}' for i in range(256)}
[codex:893503] # fill known
[codex:893503] names = {
[codex:893503] 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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:893503] }
[codex:893503] for k,v in names.items(): opcodes[k]=v
[codex:893503] 
[codex:893503] code = bytes.fromhex(hexdata)
[codex:893503] 
[codex:893503] # disassemble to list of (pc, op, imm)
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc < len(code):
[codex:893503]     op=code[pc]
[codex:893503]     name=opcodes[op]
[codex:893503]     if 0x60 <= op <= 0x7f:
[codex:893503]         n=op-0x5f
[codex:893503]         imm=code[pc+1:pc+1+n]
[codex:893503]         res.append((pc,name,imm.hex()))
[codex:893503]         pc += 1+n
[codex:893503]     else:
[codex:893503]         res.append((pc,name,''))
[codex:893503]         pc += 1
[codex:893503] 
[codex:893503] # print a subset around key pcs
[codex:893503] # find jumpdests
[codex:893503] jumpdests=[pc for pc,name,imm in res if name=='JUMPDEST']
[codex:893503] print('jumpdests',jumpdests[:20],'... total',len(jumpdests))
[codex:893503] 
[codex:893503] # print from 0x160 to 0x250
[codex:893503] for pc,name,imm in res:
[codex:893503]     if 0x150 <= pc <= 0x260:
[codex:893503]         print(f'{pc:04x}: {name} {imm}')
[codex:893503] 
[codex:893503] print('--- 0x420-0x520 ---')
[codex:893503] for pc,name,imm in res:
[codex:893503]     if 0x420 <= pc <= 0x520:
[codex:893503]         print(f'{pc:04x}: {name} {imm}')
[codex:893503] 
[codex:893503] print('--- 0x1a8-0x3f0 ---')
[codex:893503] for pc,name,imm in res:
[codex:893503]     if 0x1a8 <= pc <= 0x3f0:
[codex:893503]         print(f'{pc:04x}: {name} {imm}')
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 exited 1 in 35ms:
[codex:893503] Traceback (most recent call last):
[codex:893503]   File "<stdin>", line 4, in <module>
[codex:893503] IndexError: list index out of range
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Examining file structure**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] # find first 0x... hex string
[codex:893503] m=re.search(r'0x[0-9a-fA-F]+', text)
[codex:893503] print('found', m.group(0)[:20], 'len', len(m.group(0)))
[codex:893503] hexdata=m.group(0)[2:]
[codex:893503] print('hexlen', len(hexdata))
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 29ms:
[codex:893503] found 0x608060405260043610 len 9618
[codex:893503] hexlen 9616
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Choosing regex approach**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] 
[codex:893503] opcodes={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] # fill known opcodes
[codex:893503] names={
[codex:893503] 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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:893503] }
[codex:893503] for k,v in names.items(): opcodes[k]=v
[codex:893503] 
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503]     op=code[pc]
[codex:893503]     name=opcodes[op]
[codex:893503]     if 0x60<=op<=0x7f:
[codex:893503]         n=op-0x5f
[codex:893503]         imm=code[pc+1:pc+1+n]
[codex:893503]         res.append((pc,name,imm.hex()))
[codex:893503]         pc+=1+n
[codex:893503]     else:
[codex:893503]         res.append((pc,name,''))
[codex:893503]         pc+=1
[codex:893503] 
[codex:893503] # helper to print region
[codex:893503] 
[codex:893503] def dump(start,end):
[codex:893503]     for pc,name,imm in res:
[codex:893503]         if start<=pc<=end:
[codex:893503]             if imm:
[codex:893503]                 print(f'{pc:04x}: {name} 0x{imm}')
[codex:893503]             else:
[codex:893503]                 print(f'{pc:04x}: {name}')
[codex:893503] 
[codex:893503] print('--- 0x150-0x220 ---')
[codex:893503] dump(0x150,0x220)
[codex:893503] print('--- 0x220-0x3f0 ---')
[codex:893503] dump(0x220,0x3f0)
[codex:893503] print('--- 0x420-0x520 ---')
[codex:893503] dump(0x420,0x520)
[codex:893503] print('--- 0x520-0x700 ---')
[codex:893503] dump(0x520,0x700)
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 33ms:
[codex:893503] --- 0x150-0x220 ---
[codex:893503] 0150: PUSH1 0x40
[codex:893503] 0152: MLOAD
[codex:893503] 0153: PUSH2 0x015c
[codex:893503] 0156: SWAP2
[codex:893503] 0157: SWAP1
[codex:893503] 0158: PUSH2 0x0f14
[codex:893503] 015b: JUMP
[codex:893503] 015c: JUMPDEST
[codex:893503] 015d: PUSH1 0x40
[codex:893503] 015f: MLOAD
[codex:893503] 0160: DUP1
[codex:893503] 0161: SWAP2
[codex:893503] 0162: SUB
[codex:893503] 0163: SWAP1
[codex:893503] 0164: RETURN
[codex:893503] 0165: JUMPDEST
[codex:893503] 0166: PUSH1 0x00
[codex:893503] 0168: PUSH1 0x20
[codex:893503] 016a: MSTORE
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Reviewing additional code section**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] 
[codex:893503] # opcode names (reuse from earlier minimal)
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] known={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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:893503] for k,v in known.items(): ops[k]=v
[codex:893503] 
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503]     op=code[pc]
[codex:893503]     name=ops[op]
[codex:893503]     if 0x60<=op<=0x7f:
[codex:893503]         n=op-0x5f
[codex:893503]         imm=code[pc+1:pc+1+n]
[codex:893503]         res.append((pc,name,imm.hex()))
[codex:893503]         pc+=1+n
[codex:893503]     else:
[codex:893503]         res.append((pc,name,''))
[codex:893503]         pc+=1
[codex:893503] 
[codex:893503] # dump 0x6e0-0x820
[codex:893503] for pc,name,imm in res:
[codex:893503]     if 0x6e0 <= pc <= 0x820:
[codex:893503]         if imm:
[codex:893503]             print(f'{pc:04x}: {name} 0x{imm}')
[codex:893503]         else:
[codex:893503]             print(f'{pc:04x}: {name}')
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 31ms:
[codex:893503] 06e0: POP
[codex:893503] 06e1: POP
[codex:893503] 06e2: PUSH1 0x20
[codex:893503] 06e4: PUSH1 0x40
[codex:893503] 06e6: MLOAD
[codex:893503] 06e7: SUB
[codex:893503] 06e8: MLOAD
[codex:893503] 06e9: SWAP1
[codex:893503] 06ea: POP
[codex:893503] 06eb: DUP3
[codex:893503] 06ec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:893503] 0701: AND
[codex:893503] 0702: DUP2
[codex:893503] 0703: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:893503] 0718: AND
[codex:893503] 0719: GT
[codex:893503] 071a: DUP1
[codex:893503] 071b: ISZERO
[codex:893503] 071c: PUSH2 0x076d
[codex:893503] 071f: JUMPI
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Analyzing authorization and signature checks**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] 
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] known={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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:893503] for k,v in known.items(): ops[k]=v
[codex:893503] 
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503]     op=code[pc]
[codex:893503]     name=ops[op]
[codex:893503]     if 0x60<=op<=0x7f:
[codex:893503]         n=op-0x5f
[codex:893503]         imm=code[pc+1:pc+1+n]
[codex:893503]         res.append((pc,name,imm.hex()))
[codex:893503]         pc+=1+n
[codex:893503]     else:
[codex:893503]         res.append((pc,name,''))
[codex:893503]         pc+=1
[codex:893503] 
[codex:893503] # dump around 0x0f60-0x0fd0
[codex:893503] for pc,name,imm in res:
[codex:893503]     if 0x0f50 <= pc <= 0x0fd0:
[codex:893503]         if imm:
[codex:893503]             print(f'{pc:04x}: {name} 0x{imm}')
[codex:893503]         else:
[codex:893503]             print(f'{pc:04x}: {name}')
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 33ms:
[codex:893503] 0f50: POP
[codex:893503] 0f51: SWAP2
[codex:893503] 0f52: SWAP1
[codex:893503] 0f53: POP
[codex:893503] 0f54: JUMP
[codex:893503] 0f55: JUMPDEST
[codex:893503] 0f56: PUSH1 0x00
[codex:893503] 0f58: DUP2
[codex:893503] 0f59: SWAP1
[codex:893503] 0f5a: POP
[codex:893503] 0f5b: SWAP3
[codex:893503] 0f5c: SWAP2
[codex:893503] 0f5d: POP
[codex:893503] 0f5e: POP
[codex:893503] 0f5f: JUMP
[codex:893503] 0f60: JUMPDEST
[codex:893503] 0f61: PUSH1 0x00
[codex:893503] 0f63: DUP3
[codex:893503] 0f64: DUP3
[codex:893503] 0f65: MSTORE
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Analyzing SafeMath helper functions**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] 
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] known={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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:893503] for k,v in known.items(): ops[k]=v
[codex:893503] 
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503]     op=code[pc]
[codex:893503]     name=ops[op]
[codex:893503]     if 0x60<=op<=0x7f:
[codex:893503]         n=op-0x5f
[codex:893503]         imm=code[pc+1:pc+1+n]
[codex:893503]         res.append((pc,name,imm.hex()))
[codex:893503]         pc+=1+n
[codex:893503]     else:
[codex:893503]         res.append((pc,name,''))
[codex:893503]         pc+=1
[codex:893503] 
[codex:893503] # dump around 0x0fc7-0x1025
[codex:893503] for pc,name,imm in res:
[codex:893503]     if 0x0fc7 <= pc <= 0x1025:
[codex:893503]         if imm:
[codex:893503]             print(f'{pc:04x}: {name} 0x{imm}')
[codex:893503]         else:
[codex:893503]             print(f'{pc:04x}: {name}')
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 33ms:
[codex:893503] 0fc7: JUMPDEST
[codex:893503] 0fc8: PUSH1 0x00
[codex:893503] 0fca: PUSH2 0x0fd2
[codex:893503] 0fcd: DUP3
[codex:893503] 0fce: PUSH2 0x109d
[codex:893503] 0fd1: JUMP
[codex:893503] 0fd2: JUMPDEST
[codex:893503] 0fd3: SWAP2
[codex:893503] 0fd4: POP
[codex:893503] 0fd5: PUSH2 0x0fdd
[codex:893503] 0fd8: DUP4
[codex:893503] 0fd9: PUSH2 0x109d
[codex:893503] 0fdc: JUMP
[codex:893503] 0fdd: JUMPDEST
[codex:893503] 0fde: SWAP3
[codex:893503] 0fdf: POP
[codex:893503] 0fe0: DUP2
[codex:893503] 0fe1: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
[codex:893503] 1002: DIV
[codex:893503] 1003: DUP4
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Analyzing storage access and parameter usage**
[codex:893503] 
[codex:893503] I'm unpacking how the function at 0x42f uses storage by computing keccak hashes of slot and key values, trying to understand if it reads from a mapping or dynamic array. I'm exploring how parameters are passed on the stack or stored in memory to clarify where keys come from, as it’s not straightforward from the raw instructions. This investigation might uncover how nonce or threshold values are fetched using calldata decoding and function dispatch.
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] 
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] known={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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:893503] for k,v in known.items(): ops[k]=v
[codex:893503] 
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503]     op=code[pc]
[codex:893503]     name=ops[op]
[codex:893503]     if 0x60<=op<=0x7f:
[codex:893503]         n=op-0x5f
[codex:893503]         imm=code[pc+1:pc+1+n]
[codex:893503]         res.append((pc,name,imm.hex()))
[codex:893503]         pc+=1+n
[codex:893503]     else:
[codex:893503]         res.append((pc,name,''))
[codex:893503]         pc+=1
[codex:893503] 
[codex:893503] # dump around 0x0b20-0x0b80
[codex:893503] for pc,name,imm in res:
[codex:893503]     if 0x0b20 <= pc <= 0x0b80:
[codex:893503]         if imm:
[codex:893503]             print(f'{pc:04x}: {name} 0x{imm}')
[codex:893503]         else:
[codex:893503]             print(f'{pc:04x}: {name}')
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 29ms:
[codex:893503] 0b20: SWAP3
[codex:893503] 0b21: SWAP1
[codex:893503] 0b22: POP
[codex:893503] 0b23: JUMP
[codex:893503] 0b24: JUMPDEST
[codex:893503] 0b25: PUSH1 0x00
[codex:893503] 0b27: DUP2
[codex:893503] 0b28: CALLDATALOAD
[codex:893503] 0b29: SWAP1
[codex:893503] 0b2a: POP
[codex:893503] 0b2b: PUSH2 0x0b33
[codex:893503] 0b2e: DUP2
[codex:893503] 0b2f: PUSH2 0x127b
[codex:893503] 0b32: JUMP
[codex:893503] 0b33: JUMPDEST
[codex:893503] 0b34: SWAP3
[codex:893503] 0b35: SWAP2
[codex:893503] 0b36: POP
[codex:893503] 0b37: POP
[codex:893503] 0b38: JUMP
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Analyzing stack usage and function behavior**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] # symbolic stack execution for snippet 0x447-0x4e1
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] 
[codex:893503] # map opcodes for snippet
[codex:893503] ops = {
[codex:893503] 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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xf1:'CALL',0xf3:'RETURN',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:893503] }
[codex:893503] 
[codex:893503] # disassemble snippet
[codex:893503] start=0x447
[codex:893503] end=0x4e1
[codex:893503] 
[codex:893503] # build list of (pc,op,imm)
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503]     op=code[pc]
[codex:893503]     if 0x60<=op<=0x7f:
[codex:893503]         n=op-0x5f
[codex:893503]         imm=code[pc+1:pc+1+n]
[codex:893503]         res.append((pc,op,imm))
[codex:893503]         pc+=1+n
[codex:893503]     else:
[codex:893503]         res.append((pc,op,None))
[codex:893503]         pc+=1
[codex:893503] 
[codex:893503] # filter snippet
[codex:893503] snippet=[x for x in res if start<=x[0]<=end]
[codex:893503] 
[codex:893503] stack=['A']  # parameter
[codex:893503] 
[codex:893503] # symbolic memory for two slots
[codex:893503] memory={}
[codex:893503] 
[codex:893503] def pop():
[codex:893503]     return stack.pop(0)
[codex:893503] 
[codex:893503] # We treat top of stack as index 0 for simplicity; but EVM stack uses top as end.
[codex:893503] # We'll implement top at end to be accurate.
[codex:893503] stack=['A']
[codex:893503] 
[codex:893503] for pc,op,imm in snippet:
[codex:893503]     name=ops.get(op,f'OP_{op:02x}')
[codex:893503]     if name.startswith('PUSH'):
[codex:893503]         val=int(imm.hex(),16) if imm else 0
[codex:893503]         stack.append(f'0x{val:x}')
[codex:893503]     elif name.startswith('DUP'):
[codex:893503]         n=int(name[3:])
[codex:893503]         stack.append(stack[-n])
[codex:893503]     elif name.startswith('SWAP'):
[codex:893503]         n=int(name[4:])
[codex:893503]         stack[-1],stack[-1-n]=stack[-1-n],stack[-1]
[codex:893503]     elif name=='POP':
[codex:893503]         stack.pop()
[codex:893503]     elif name=='MSTORE':
[codex:893503]         offset=stack.pop(); val=stack.pop();
[codex:893503]         memory[offset]=val
[codex:893503]     elif name=='SHA3':
[codex:893503]         size=stack.pop(); offset=stack.pop();
[codex:893503]         # assume offset 0 and size 0x40, build from memory[0] and memory[0x20]
[codex:893503]         a=memory.get('0x0','?')
[codex:893503]         b=memory.get('0x20','?')
[codex:893503]         stack.append(f'keccak({a},{b})')
[codex:893503]     elif name=='SLOAD':
[codex:893503]         key=stack.pop();
[codex:893503]         stack.append(f'sload({key})')
[codex:893503]     elif name=='ADDRESS':
[codex:893503]         stack.append('address(this)')
[codex:893503]     elif name=='AND':
[codex:893503]         b=stack.pop(); a=stack.pop();
[codex:893503]         # if AND with mask, ignore
[codex:893503]         if b.startswith('0xffff') or a.startswith('0xffff'):
[codex:893503]             stack.append(a if b.startswith('0xffff') else b)
[codex:893503]         else:
[codex:893503]             stack.append(f'({a}&{b})')
[codex:893503]     elif name=='ADD':
[codex:893503]         b=stack.pop(); a=stack.pop(); stack.append(f'({a}+{b})')
[codex:893503]     elif name=='MUL':
[codex:893503]         b=stack.pop(); a=stack.pop(); stack.append(f'({a}*{b})')
[codex:893503]     elif name=='DIV':
[codex:893503]         b=stack.pop(); a=stack.pop(); stack.append(f'({a}/{b})')
[codex:893503]     elif name=='JUMP' or name=='JUMPI':
[codex:893503]         pass
[codex:893503]     else:
[codex:893503]         # ignore unhandled
[codex:893503]         pass
[codex:893503] 
[codex:893503] print('stack end:', stack)
[codex:893503] print('memory:', memory)
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 40ms:
[codex:893503] stack end: ['A', '0x0', 'sload(keccak(A,?))', '0x100000000', '0x4c7', 'A', '0x4d1', 'address(this)', '0xf71', '0x4db']
[codex:893503] memory: {'0x0': 'A', '(0x0+0x20)': '0x2'}
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Analyzing symbolic interpreter and EVM stack behavior**
[codex:893503] 
[codex:893503] I’m stepping through the symbolic interpreter’s memory handling and stack behavior in detail, correcting how memory offsets are treated—shifting from string offsets to numeric where possible. I’m also manually tracing EVM instructions around address 0x447 to understand stack operations, memory stores, and the logic behind signature and nonce checks that seem to secure the contract’s transaction execution. This careful walkthrough helps me verify whether the contract implements robust replay protection and signature validation, hinting it might be a multi-signature wallet or minimal forwarder.
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] 
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] # fill known names
[codex:893503] known={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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:893503] for k,v in known.items(): ops[k]=v
[codex:893503] 
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503]     op=code[pc]
[codex:893503]     name=ops[op]
[codex:893503]     if 0x60<=op<=0x7f:
[codex:893503]         n=op-0x5f
[codex:893503]         imm=code[pc+1:pc+1+n]
[codex:893503]         res.append((pc,name,imm.hex()))
[codex:893503]         pc+=1+n
[codex:893503]     else:
[codex:893503]         res.append((pc,name,''))
[codex:893503]         pc+=1
[codex:893503] 
[codex:893503] # dump around 0x08df-0x095f
[codex:893503] for pc,name,imm in res:
[codex:893503]     if 0x08df <= pc <= 0x0960:
[codex:893503]         if imm:
[codex:893503]             print(f'{pc:04x}: {name} 0x{imm}')
[codex:893503]         else:
[codex:893503]             print(f'{pc:04x}: {name}')
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 35ms:
[codex:893503] 08df: JUMPDEST
[codex:893503] 08e0: PUSH1 0x00
[codex:893503] 08e2: PUSH1 0x01
[codex:893503] 08e4: SWAP1
[codex:893503] 08e5: POP
[codex:893503] 08e6: SWAP2
[codex:893503] 08e7: SWAP1
[codex:893503] 08e8: POP
[codex:893503] 08e9: JUMP
[codex:893503] 08ea: JUMPDEST
[codex:893503] 08eb: PUSH1 0x00
[codex:893503] 08ed: DUP1
[codex:893503] 08ee: PUSH1 0x00
[codex:893503] 08f0: DUP4
[codex:893503] 08f1: MLOAD
[codex:893503] 08f2: PUSH1 0x00
[codex:893503] 08f4: BYTE
[codex:893503] 08f5: SWAP1
[codex:893503] 08f6: POP
[codex:893503] 08f7: PUSH1 0xf8
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Examining signature verification and delegatecall risk**
[codex:893503] 
[codex:893503] I'm analyzing bytecode related to signature parsing, likely ECDSA or MultiSig validation, focusing on the staticcall to ecrecover and checks enforcing sorted unique signers. I'm also verifying if any delegatecall opcode (0xf4) appears, which could indicate unprotected upgrade or arbitrary call risks. So far, signature validation appears robust with nonce and ownership checks, but I want to be certain no exploitable path exists before concluding.
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] # find delegatecall
[codex:893503] indices=[i for i,b in enumerate(code) if b==0xf4]
[codex:893503] print('delegatecall offsets', indices)
[codex:893503] # find selfdestruct
[codex:893503] indices2=[i for i,b in enumerate(code) if b==0xff]
[codex:893503] print('selfdestruct offsets', indices2)
[codex:893503] # find call opcode 0xf1
[codex:893503] indices3=[i for i,b in enumerate(code) if b==0xf1]
[codex:893503] print('call offsets', indices3[:10], 'count', len(indices3))
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 27ms:
[codex:893503] delegatecall offsets [140, 1043]
[codex:893503] selfdestruct offsets [385, 404, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1265, 1268, 1473, 1476, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1899, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241, 4242, 4243, 4244, 4267, 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369, 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, 4380, 4381, 4382, 4383, 4384, 4385, 4386, 4387, 4388]
[codex:893503] call offsets [932, 2027] count 2
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Analyzing opcode occurrences**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] 
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] # fill known
[codex:893503] names={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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:893503] for k,v in names.items(): ops[k]=v
[codex:893503] 
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503]     op=code[pc]
[codex:893503]     name=ops[op]
[codex:893503]     if 0x60<=op<=0x7f:
[codex:893503]         n=op-0x5f
[codex:893503]         imm=code[pc+1:pc+1+n]
[codex:893503]         res.append((pc,name,imm.hex()))
[codex:893503]         pc+=1+n
[codex:893503]     else:
[codex:893503]         res.append((pc,name,''))
[codex:893503]         pc+=1
[codex:893503] 
[codex:893503] # print delegatecall occurrences
[codex:893503] for pc,name,imm in res:
[codex:893503]     if name=='DELEGATECALL':
[codex:893503]         print('DELEGATECALL at', hex(pc))
[codex:893503] 
[codex:893503] for pc,name,imm in res:
[codex:893503]     if name=='SELFDESTRUCT':
[codex:893503]         print('SELFDESTRUCT at', hex(pc))
[codex:893503] 
[codex:893503] for pc,name,imm in res:
[codex:893503]     if name=='CALL':
[codex:893503]         print('CALL at', hex(pc))
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 31ms:
[codex:893503] CALL at 0x3a4
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Analyzing multi-signature execution flow**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] 
[codex:893503] # simple disasm to show pushes of string constants around 0x1100? Actually strings in data at end; we just locate by reading ascii.
[codex:893503] 
[codex:893503] # find ascii strings
[codex:893503] for m in re.finditer(b'invalid|not enough|forbidden|transaction failed', code):
[codex:893503]     start=max(m.start()-20,0)
[codex:893503]     end=m.start()+40
[codex:893503]     print(m.start(), code[start:end])
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 26ms:
[codex:893503] 4464 b'\x00\x00\x00\x00\x00`\x00R`\x11`\x04R`$`\x00\xfd[\x7finvalid gas price\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV['
[codex:893503] 4505 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV[\x7fnot enough signatures\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV['
[codex:893503] 4546 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV[\x7finvalid nonce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV['
[codex:893503] 4587 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV[\x7fforbidden call\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV['
[codex:893503] 4628 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV[\x7finvalid signatures\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV['
[codex:893503] 4669 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV[\x7ftransaction failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV['
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Mapping revert reason strings in disassembly**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] 
[codex:893503] # print ascii strings near each address
[codex:893503] for addr in [0x0e54,0x0e74,0x0e94,0x0eb4,0x0ed4,0x0ef4]:
[codex:893503]     # find printable substring after addr
[codex:893503]     snippet=code[addr:addr+80]
[codex:893503]     # extract ascii letters
[codex:893503]     s=''.join(chr(b) if 32<=b<127 else '.' for b in snippet)
[codex:893503]     print(hex(addr), s)
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 28ms:
[codex:893503] 0xe54 [`.` ...P...`...Ra.m.a..V[.P..PV[`.` ...P...`...Ra...a..V[.P..PV[`.` ...P...`...
[codex:893503] 0xe74 [`.` ...P...`...Ra...a..V[.P..PV[`.` ...P...`...Ra...a..V[.P..PV[`.` ...P...`...
[codex:893503] 0xe94 [`.` ...P...`...Ra...a..V[.P..PV[`.` ...P...`...Ra...a.=V[.P..PV[`.` ...P...`...
[codex:893503] 0xeb4 [`.` ...P...`...Ra...a.=V[.P..PV[`.` ...P...`...Ra...a.`V[.P..PV[`.` ...P...`...
[codex:893503] 0xed4 [`.` ...P...`...Ra...a.`V[.P..PV[`.` ...P...`...Ra...a..V[.P..PV[`.` ...Pa.)`...
[codex:893503] 0xef4 [`.` ...P...`...Ra...a..V[.P..PV[`.` ...Pa.)`....a..V[..PPV[`.` ...Pa.D`....a..V
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Analyzing potential execute function risks**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] # disassemble minimal to count ORIGIN usage
[codex:893503] origin_ops=[]
[codex:893503] for i,b in enumerate(code):
[codex:893503]     if b==0x32:
[codex:893503]         origin_ops.append(i)
[codex:893503] print('ORIGIN byte occurrences', origin_ops[:10], 'count', len(origin_ops))
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 28ms:
[codex:893503] ORIGIN byte occurrences [1537, 1615, 1679, 3372] count 4
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Locating ORIGIN opcode via disassembly**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] 
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] # minimal names
[codex:893503] ops[0x32]='ORIGIN'
[codex:893503] ops[0x60]='PUSH1'
[codex:893503] ops[0x61]='PUSH2'
[codex:893503] ops[0x62]='PUSH3'
[codex:893503] ops[0x63]='PUSH4'
[codex:893503] ops[0x64]='PUSH5'
[codex:893503] ops[0x65]='PUSH6'
[codex:893503] ops[0x66]='PUSH7'
[codex:893503] ops[0x67]='PUSH8'
[codex:893503] ops[0x68]='PUSH9'
[codex:893503] ops[0x69]='PUSH10'
[codex:893503] ops[0x6a]='PUSH11'
[codex:893503] ops[0x6b]='PUSH12'
[codex:893503] ops[0x6c]='PUSH13'
[codex:893503] ops[0x6d]='PUSH14'
[codex:893503] ops[0x6e]='PUSH15'
[codex:893503] ops[0x6f]='PUSH16'
[codex:893503] ops[0x70]='PUSH17'
[codex:893503] ops[0x71]='PUSH18'
[codex:893503] ops[0x72]='PUSH19'
[codex:893503] ops[0x73]='PUSH20'
[codex:893503] ops[0x74]='PUSH21'
[codex:893503] ops[0x75]='PUSH22'
[codex:893503] ops[0x76]='PUSH23'
[codex:893503] ops[0x77]='PUSH24'
[codex:893503] ops[0x78]='PUSH25'
[codex:893503] ops[0x79]='PUSH26'
[codex:893503] ops[0x7a]='PUSH27'
[codex:893503] ops[0x7b]='PUSH28'
[codex:893503] ops[0x7c]='PUSH29'
[codex:893503] ops[0x7d]='PUSH30'
[codex:893503] ops[0x7e]='PUSH31'
[codex:893503] ops[0x7f]='PUSH32'
[codex:893503] 
[codex:893503] # disassemble and find ORIGIN
[codex:893503] pc=0
[codex:893503] res=[]
[codex:893503] while pc<len(code):
[codex:893503]     op=code[pc]
[codex:893503]     name=ops.get(op, f'OP_{op:02x}')
[codex:893503]     if 0x60<=op<=0x7f:
[codex:893503]         n=op-0x5f
[codex:893503]         pc += 1+n
[codex:893503]     else:
[codex:893503]         if name=='ORIGIN':
[codex:893503]             res.append(pc)
[codex:893503]         pc += 1
[codex:893503] 
[codex:893503] print('ORIGIN opcodes at', res)
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 32ms:
[codex:893503] ORIGIN opcodes at []
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Analyzing contract call and signature verification**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] stack=['ret','arg']  # top is rightmost
[codex:893503] 
[codex:893503] def push(x):
[codex:893503]     stack.append(x)
[codex:893503] 
[codex:893503] def pop():
[codex:893503]     return stack.pop()
[codex:893503] 
[codex:893503] # instructions in 0x08df
[codex:893503] push('0')
[codex:893503] push('1')
[codex:893503] # SWAP1
[codex:893503] stack[-1],stack[-2]=stack[-2],stack[-1]
[codex:893503] # POP
[codex:893503] pop()
[codex:893503] # SWAP2
[codex:893503] stack[-1],stack[-3]=stack[-3],stack[-1]
[codex:893503] # SWAP1
[codex:893503] stack[-1],stack[-2]=stack[-2],stack[-1]
[codex:893503] # POP
[codex:893503] pop()
[codex:893503] print(stack)
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 19ms:
[codex:893503] ['1', 'ret']
[codex:893503] 
[codex:893503] thinking
[codex:893503] **Analyzing function call structure and signature checks**
[codex:893503] 
[codex:893503] I'm tracing the bytecode’s flow to understand which functions verify signatures, nonces, and gas prices, noting that 0x08df returns true unconditionally and likely isn’t a signature check. The main signature validation seems to occur in 0x4e2 with complex parameter comparisons and loops verifying signatures. I’m carefully inspecting code paths and conditions to confirm that authorized signature validation gates sensitive operations, looking for potential bypasses or exploits via caller or parameter manipulation.
[codex:893503] codex
[codex:893503] {"no_findings":true,"summary":"No concrete exploitable value-extraction path identified in the provided bytecode; value transfer is gated by signature/nonce checks and no delegatecall/selfdestruct paths are present.","findings":[]}
[codex:893503] tokens used
[codex:893503] 121,242
[codex:893503] {"no_findings":true,"summary":"No concrete exploitable value-extraction path identified in the provided bytecode; value transfer is gated by signature/nonce checks and no delegatecall/selfdestruct paths are present.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-01T18:23:32.098955+00:00",
        "returncode": 0
    },
    "summary": "No concrete exploitable value-extraction path identified in the provided bytecode; value transfer is gated by signature/nonce checks and no delegatecall/selfdestruct paths are present.",
    "raw_final": {
        "summary": "No concrete exploitable value-extraction path identified in the provided bytecode; value transfer is gated by signature/nonce checks and no delegatecall/selfdestruct paths are present.",
        "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
0
Total opcodes
2850
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 0x004e
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x2f54bf6e
00000019: EQ
0000001a: PUSH2 0x005a
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0x42cde4e8
00000024: EQ
00000025: PUSH2 0x0097
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0x5bebe4ee
0000002f: EQ
00000030: PUSH2 0x00c2
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0x7ecebe00
0000003a: EQ
0000003b: PUSH2 0x00eb
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xdaccfbb4
00000045: EQ
00000046: PUSH2 0x0128
00000049: JUMPI
0000004a: PUSH2 0x0055
0000004d: JUMP
0000004e: JUMPDEST
0000004f: CALLDATASIZE
00000050: PUSH2 0x0055
00000053: JUMPI
00000054: STOP
00000055: JUMPDEST
00000056: PUSH1 0x00
00000058: DUP1
00000059: REVERT
0000005a: JUMPDEST
0000005b: CALLVALUE
0000005c: DUP1
0000005d: ISZERO
0000005e: PUSH2 0x0066
00000061: JUMPI
00000062: PUSH1 0x00
00000064: DUP1
00000065: REVERT
00000066: JUMPDEST
00000067: POP
00000068: PUSH2 0x0081
0000006b: PUSH1 0x04
0000006d: DUP1
0000006e: CALLDATASIZE
0000006f: SUB
00000070: DUP2
00000071: ADD
00000072: SWAP1
00000073: PUSH2 0x007c
00000076: SWAP2
00000077: SWAP1
00000078: PUSH2 0x0b39
0000007b: JUMP
0000007c: JUMPDEST
0000007d: PUSH2 0x0165
00000080: JUMP
00000081: JUMPDEST
00000082: PUSH1 0x40
00000084: MLOAD
00000085: PUSH2 0x008e
00000088: SWAP2
00000089: SWAP1
0000008a: PUSH2 0x0df4
0000008d: JUMP
0000008e: JUMPDEST
0000008f: PUSH1 0x40
00000091: MLOAD
00000092: DUP1
00000093: SWAP2
00000094: SUB
00000095: SWAP1
00000096: RETURN
00000097: JUMPDEST
00000098: CALLVALUE
00000099: DUP1
0000009a: ISZERO
0000009b: PUSH2 0x00a3
0000009e: JUMPI
0000009f: PUSH1 0x00
000000a1: DUP1
000000a2: REVERT
000000a3: JUMPDEST
000000a4: POP
000000a5: PUSH2 0x00ac
000000a8: PUSH2 0x0185
000000ab: JUMP
000000ac: JUMPDEST
000000ad: PUSH1 0x40
000000af: MLOAD
000000b0: PUSH2 0x00b9
000000b3: SWAP2
000000b4: SWAP1
000000b5: PUSH2 0x0f2f
000000b8: JUMP
000000b9: JUMPDEST
000000ba: PUSH1 0x40
000000bc: MLOAD
000000bd: DUP1
000000be: SWAP2
000000bf: SUB
000000c0: SWAP1
000000c1: RETURN
000000c2: JUMPDEST
000000c3: CALLVALUE
000000c4: DUP1
000000c5: ISZERO
000000c6: PUSH2 0x00ce
000000c9: JUMPI
000000ca: PUSH1 0x00
000000cc: DUP1
000000cd: REVERT
000000ce: JUMPDEST
000000cf: POP
000000d0: PUSH2 0x00e9
000000d3: PUSH1 0x04
000000d5: DUP1
000000d6: CALLDATASIZE
000000d7: SUB
000000d8: DUP2
000000d9: ADD
000000da: SWAP1
000000db: PUSH2 0x00e4
000000de: SWAP2
000000df: SWAP1
000000e0: PUSH2 0x0b62
000000e3: JUMP
000000e4: JUMPDEST
000000e5: PUSH2 0x0198
000000e8: JUMP
000000e9: JUMPDEST
000000ea: STOP
000000eb: JUMPDEST
000000ec: CALLVALUE
000000ed: DUP1
000000ee: ISZERO
000000ef: PUSH2 0x00f7
000000f2: JUMPI
000000f3: PUSH1 0x00
000000f5: DUP1
000000f6: REVERT
000000f7: JUMPDEST
000000f8: POP
000000f9: PUSH2 0x0112
000000fc: PUSH1 0x04
000000fe: DUP1
000000ff: CALLDATASIZE
00000100: SUB
00000101: DUP2
00000102: ADD
00000103: SWAP1
00000104: PUSH2 0x010d
00000107: SWAP2
00000108: SWAP1
00000109: PUSH2 0x0b39
0000010c: JUMP
0000010d: JUMPDEST
0000010e: PUSH2 0x042f
00000111: JUMP
00000112: JUMPDEST
00000113: PUSH1 0x40
00000115: MLOAD
00000116: PUSH2 0x011f
00000119: SWAP2
0000011a: SWAP1
0000011b: PUSH2 0x0f14
0000011e: JUMP
0000011f: JUMPDEST
00000120: PUSH1 0x40
00000122: MLOAD
00000123: DUP1
00000124: SWAP2
00000125: SUB
00000126: SWAP1
00000127: RETURN
00000128: JUMPDEST
00000129: CALLVALUE
0000012a: DUP1
0000012b: ISZERO
0000012c: PUSH2 0x0134
0000012f: JUMPI
00000130: PUSH1 0x00
00000132: DUP1
00000133: REVERT
00000134: JUMPDEST
00000135: POP
00000136: PUSH2 0x014f
00000139: PUSH1 0x04
0000013b: DUP1
0000013c: CALLDATASIZE
0000013d: SUB
0000013e: DUP2
0000013f: ADD
00000140: SWAP1
00000141: PUSH2 0x014a
00000144: SWAP2
00000145: SWAP1
00000146: PUSH2 0x0b39
00000149: JUMP
0000014a: JUMPDEST
0000014b: PUSH2 0x0447
0000014e: JUMP
0000014f: JUMPDEST
00000150: PUSH1 0x40
00000152: MLOAD
00000153: PUSH2 0x015c
00000156: SWAP2
00000157: SWAP1
00000158: PUSH2 0x0f14
0000015b: JUMP
0000015c: JUMPDEST
0000015d: PUSH1 0x40
0000015f: MLOAD
00000160: DUP1
00000161: SWAP2
00000162: SUB
00000163: SWAP1
00000164: RETURN
00000165: JUMPDEST
00000166: PUSH1 0x00
00000168: PUSH1 0x20
0000016a: MSTORE
0000016b: DUP1
0000016c: PUSH1 0x00
0000016e: MSTORE
0000016f: PUSH1 0x40
00000171: PUSH1 0x00
00000173: KECCAK256
00000174: PUSH1 0x00
00000176: SWAP2
00000177: POP
00000178: SLOAD
00000179: SWAP1
0000017a: PUSH2 0x0100
0000017d: EXP
0000017e: SWAP1
0000017f: DIV
00000180: PUSH1 0xff
00000182: AND
00000183: DUP2
00000184: JUMP
00000185: JUMPDEST
00000186: PUSH1 0x01
00000188: PUSH1 0x00
0000018a: SWAP1
0000018b: SLOAD
0000018c: SWAP1
0000018d: PUSH2 0x0100
00000190: EXP
00000191: SWAP1
00000192: DIV
00000193: PUSH1 0xff
00000195: AND
00000196: DUP2
00000197: JUMP
00000198: JUMPDEST
00000199: PUSH2 0x01a8
0000019c: DUP9
0000019d: DUP9
0000019e: DUP9
0000019f: DUP9
000001a0: DUP9
000001a1: DUP9
000001a2: DUP9
000001a3: DUP9
000001a4: PUSH2 0x04e2
000001a7: JUMP
000001a8: JUMPDEST
000001a9: PUSH1 0x00
000001ab: DUP1
000001ac: PUSH1 0x00
000001ae: DUP1
000001af: PUSH1 0x00
000001b1: DUP1
000001b2: PUSH2 0x01fe
000001b5: DUP9
000001b6: DUP9
000001b7: DUP1
000001b8: DUP1
000001b9: PUSH1 0x1f
000001bb: ADD
000001bc: PUSH1 0x20
000001be: DUP1
000001bf: SWAP2
000001c0: DIV
000001c1: MUL
000001c2: PUSH1 0x20
000001c4: ADD
000001c5: PUSH1 0x40
000001c7: MLOAD
000001c8: SWAP1
000001c9: DUP2
000001ca: ADD
000001cb: PUSH1 0x40
000001cd: MSTORE
000001ce: DUP1
000001cf: SWAP4
000001d0: SWAP3
000001d1: SWAP2
000001d2: SWAP1
000001d3: DUP2
000001d4: DUP2
000001d5: MSTORE
000001d6: PUSH1 0x20
000001d8: ADD
000001d9: DUP4
000001da: DUP4
000001db: DUP1
000001dc: DUP3
000001dd: DUP5
000001de: CALLDATACOPY
000001df: PUSH1 0x00
000001e1: DUP2
000001e2: DUP5
000001e3: ADD
000001e4: MSTORE
000001e5: PUSH1 0x1f
000001e7: NOT
000001e8: PUSH1 0x1f
000001ea: DUP3
000001eb: ADD
000001ec: AND
000001ed: SWAP1
000001ee: POP
000001ef: DUP1
000001f0: DUP4
000001f1: ADD
000001f2: SWAP3
000001f3: POP
000001f4: POP
000001f5: POP
000001f6: POP
000001f7: POP
000001f8: POP
000001f9: POP
000001fa: PUSH2 0x079a
000001fd: JUMP
000001fe: JUMPDEST
000001ff: SWAP6
00000200: POP
00000201: SWAP6
00000202: POP
00000203: SWAP6
00000204: POP
00000205: SWAP6
00000206: POP
00000207: SWAP6
00000208: POP
00000209: SWAP6
0000020a: POP
0000020b: PUSH2 0x0213
0000020e: CALLER
0000020f: PUSH2 0x0447
00000212: JUMP
00000213: JUMPDEST
00000214: DUP7
00000215: EQ
00000216: PUSH2 0x0254
00000219: JUMPI
0000021a: PUSH1 0x40
0000021c: MLOAD
0000021d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000023e: DUP2
0000023f: MSTORE
00000240: PUSH1 0x04
00000242: ADD
00000243: PUSH2 0x024b
00000246: SWAP1
00000247: PUSH2 0x0e94
0000024a: JUMP
0000024b: JUMPDEST
0000024c: PUSH1 0x40
0000024e: MLOAD
0000024f: DUP1
00000250: SWAP2
00000251: SUB
00000252: SWAP1
00000253: REVERT
00000254: JUMPDEST
00000255: GASPRICE
00000256: DUP6
00000257: LT
00000258: ISZERO
00000259: PUSH2 0x0297
0000025c: JUMPI
0000025d: PUSH1 0x40
0000025f: MLOAD
00000260: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000281: DUP2
00000282: MSTORE
00000283: PUSH1 0x04
00000285: ADD
00000286: PUSH2 0x028e
00000289: SWAP1
0000028a: PUSH2 0x0e54
0000028d: JUMP
0000028e: JUMPDEST
0000028f: PUSH1 0x40
00000291: MLOAD
00000292: DUP1
00000293: SWAP2
00000294: SUB
00000295: SWAP1
00000296: REVERT
00000297: JUMPDEST
00000298: PUSH2 0x02a0
0000029b: DUP4
0000029c: PUSH2 0x08df
0000029f: JUMP
000002a0: JUMPDEST
000002a1: PUSH2 0x02df
000002a4: JUMPI
000002a5: PUSH1 0x40
000002a7: MLOAD
000002a8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000002c9: DUP2
000002ca: MSTORE
000002cb: PUSH1 0x04
000002cd: ADD
000002ce: PUSH2 0x02d6
000002d1: SWAP1
000002d2: PUSH2 0x0eb4
000002d5: JUMP
000002d6: JUMPDEST
000002d7: PUSH1 0x40
000002d9: MLOAD
000002da: DUP1
000002db: SWAP2
000002dc: SUB
000002dd: SWAP1
000002de: REVERT
000002df: JUMPDEST
000002e0: PUSH1 0x01
000002e2: PUSH1 0x02
000002e4: PUSH1 0x00
000002e6: CALLER
000002e7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000002fc: AND
000002fd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000312: AND
00000313: DUP2
00000314: MSTORE
00000315: PUSH1 0x20
00000317: ADD
00000318: SWAP1
00000319: DUP2
0000031a: MSTORE
0000031b: PUSH1 0x20
0000031d: ADD
0000031e: PUSH1 0x00
00000320: KECCAK256
00000321: SLOAD
00000322: PUSH2 0x032b
00000325: SWAP2
00000326: SWAP1
00000327: PUSH2 0x0f71
0000032a: JUMP
0000032b: JUMPDEST
0000032c: PUSH1 0x02
0000032e: PUSH1 0x00
00000330: CALLER
00000331: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000346: AND
00000347: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000035c: AND
0000035d: DUP2
0000035e: MSTORE
0000035f: PUSH1 0x20
00000361: ADD
00000362: SWAP1
00000363: DUP2
00000364: MSTORE
00000365: PUSH1 0x20
00000367: ADD
00000368: PUSH1 0x00
0000036a: KECCAK256
0000036b: DUP2
0000036c: SWAP1
0000036d: SSTORE
0000036e: POP
0000036f: PUSH1 0x00
00000371: DUP4
00000372: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000387: AND
00000388: DUP6
00000389: DUP5
0000038a: DUP5
0000038b: PUSH1 0x40
0000038d: MLOAD
0000038e: PUSH2 0x0397
00000391: SWAP2
00000392: SWAP1
00000393: PUSH2 0x0ddd
00000396: JUMP
00000397: JUMPDEST
00000398: PUSH1 0x00
0000039a: PUSH1 0x40
0000039c: MLOAD
0000039d: DUP1
0000039e: DUP4
0000039f: SUB
000003a0: DUP2
000003a1: DUP6
000003a2: DUP9
000003a3: DUP9
000003a4: CALL
000003a5: SWAP4
000003a6: POP
000003a7: POP
000003a8: POP
000003a9: POP
000003aa: RETURNDATASIZE
000003ab: DUP1
000003ac: PUSH1 0x00
000003ae: DUP2
000003af: EQ
000003b0: PUSH2 0x03d5
000003b3: JUMPI
000003b4: PUSH1 0x40
000003b6: MLOAD
000003b7: SWAP2
000003b8: POP
000003b9: PUSH1 0x1f
000003bb: NOT
000003bc: PUSH1 0x3f
000003be: RETURNDATASIZE
000003bf: ADD
000003c0: AND
000003c1: DUP3
000003c2: ADD
000003c3: PUSH1 0x40
000003c5: MSTORE
000003c6: RETURNDATASIZE
000003c7: DUP3
000003c8: MSTORE
000003c9: RETURNDATASIZE
000003ca: PUSH1 0x00
000003cc: PUSH1 0x20
000003ce: DUP5
000003cf: ADD
000003d0: RETURNDATACOPY
000003d1: PUSH2 0x03da
000003d4: JUMP
000003d5: JUMPDEST
000003d6: PUSH1 0x60
000003d8: SWAP2
000003d9: POP
000003da: JUMPDEST
000003db: POP
000003dc: POP
000003dd: SWAP1
000003de: POP
000003df: DUP1
000003e0: PUSH2 0x041e
000003e3: JUMPI
000003e4: PUSH1 0x40
000003e6: MLOAD
000003e7: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000408: DUP2
00000409: MSTORE
0000040a: PUSH1 0x04
0000040c: ADD
0000040d: PUSH2 0x0415
00000410: SWAP1
00000411: PUSH2 0x0ef4
00000414: JUMP
00000415: JUMPDEST
00000416: PUSH1 0x40
00000418: MLOAD
00000419: DUP1
0000041a: SWAP2
0000041b: SUB
0000041c: SWAP1
0000041d: REVERT
0000041e: JUMPDEST
0000041f: POP
00000420: POP
00000421: POP
00000422: POP
00000423: POP
00000424: POP
00000425: POP
00000426: POP
00000427: POP
00000428: POP
00000429: POP
0000042a: POP
0000042b: POP
0000042c: POP
0000042d: POP
0000042e: JUMP
0000042f: JUMPDEST
00000430: PUSH1 0x02
00000432: PUSH1 0x20
00000434: MSTORE
00000435: DUP1
00000436: PUSH1 0x00
00000438: MSTORE
00000439: PUSH1 0x40
0000043b: PUSH1 0x00
0000043d: KECCAK256
0000043e: PUSH1 0x00
00000440: SWAP2
00000441: POP
00000442: SWAP1
00000443: POP
00000444: SLOAD
00000445: DUP2
00000446: JUMP
00000447: JUMPDEST
00000448: PUSH1 0x00
0000044a: PUSH1 0x02
0000044c: PUSH1 0x00
0000044e: DUP4
0000044f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000464: AND
00000465: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000047a: AND
0000047b: DUP2
0000047c: MSTORE
0000047d: PUSH1 0x20
0000047f: ADD
00000480: SWAP1
00000481: DUP2
00000482: MSTORE
00000483: PUSH1 0x20
00000485: ADD
00000486: PUSH1 0x00
00000488: KECCAK256
00000489: SLOAD
0000048a: PUSH5 0x0100000000
00000490: DUP4
00000491: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000004a6: AND
000004a7: ADDRESS
000004a8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000004bd: AND
000004be: PUSH2 0x04c7
000004c1: SWAP2
000004c2: SWAP1
000004c3: PUSH2 0x0f71
000004c6: JUMP
000004c7: JUMPDEST
000004c8: PUSH2 0x04d1
000004cb: SWAP2
000004cc: SWAP1
000004cd: PUSH2 0x0fc7
000004d0: JUMP
000004d1: JUMPDEST
000004d2: PUSH2 0x04db
000004d5: SWAP2
000004d6: SWAP1
000004d7: PUSH2 0x0f71
000004da: JUMP
000004db: JUMPDEST
000004dc: SWAP1
000004dd: POP
000004de: SWAP2
000004df: SWAP1
000004e0: POP
000004e1: JUMP
000004e2: JUMPDEST
000004e3: PUSH1 0x01
000004e5: PUSH1 0x00
000004e7: SWAP1
000004e8: SLOAD
000004e9: SWAP1
000004ea: PUSH2 0x0100
000004ed: EXP
000004ee: SWAP1
000004ef: DIV
000004f0: PUSH1 0xff
000004f2: AND
000004f3: PUSH1 0xff
000004f5: AND
000004f6: DUP7
000004f7: DUP7
000004f8: SWAP1
000004f9: POP
000004fa: EQ
000004fb: PUSH2 0x0539
000004fe: JUMPI
000004ff: PUSH1 0x40
00000501: MLOAD
00000502: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000523: DUP2
00000524: MSTORE
00000525: PUSH1 0x04
00000527: ADD
00000528: PUSH2 0x0530
0000052b: SWAP1
0000052c: PUSH2 0x0e74
0000052f: JUMP
00000530: JUMPDEST
00000531: PUSH1 0x40
00000533: MLOAD
00000534: DUP1
00000535: SWAP2
00000536: SUB
00000537: SWAP1
00000538: REVERT
00000539: JUMPDEST
0000053a: DUP4
0000053b: DUP4
0000053c: SWAP1
0000053d: POP
0000053e: DUP7
0000053f: DUP7
00000540: SWAP1
00000541: POP
00000542: EQ
00000543: DUP1
00000544: ISZERO
00000545: PUSH2 0x0553
00000548: JUMPI
00000549: POP
0000054a: DUP8
0000054b: DUP8
0000054c: SWAP1
0000054d: POP
0000054e: DUP7
0000054f: DUP7
00000550: SWAP1
00000551: POP
00000552: EQ
00000553: JUMPDEST
00000554: PUSH2 0x0592
00000557: JUMPI
00000558: PUSH1 0x40
0000055a: MLOAD
0000055b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000057c: DUP2
0000057d: MSTORE
0000057e: PUSH1 0x04
00000580: ADD
00000581: PUSH2 0x0589
00000584: SWAP1
00000585: PUSH2 0x0ed4
00000588: JUMP
00000589: JUMPDEST
0000058a: PUSH1 0x40
0000058c: MLOAD
0000058d: DUP1
0000058e: SWAP2
0000058f: SUB
00000590: SWAP1
00000591: REVERT
00000592: JUMPDEST
00000593: PUSH1 0x00
00000595: DUP3
00000596: DUP3
00000597: PUSH1 0x40
00000599: MLOAD
0000059a: PUSH2 0x05a4
0000059d: SWAP3
0000059e: SWAP2
0000059f: SWAP1
000005a0: PUSH2 0x0dc4
000005a3: JUMP
000005a4: JUMPDEST
000005a5: PUSH1 0x40
000005a7: MLOAD
000005a8: DUP1
000005a9: SWAP2
000005aa: SUB
000005ab: SWAP1
000005ac: KECCAK256
000005ad: SWAP1
000005ae: POP
000005af: PUSH1 0x00
000005b1: DUP1
000005b2: JUMPDEST
000005b3: PUSH1 0x01
000005b5: PUSH1 0x00
000005b7: SWAP1
000005b8: SLOAD
000005b9: SWAP1
000005ba: PUSH2 0x0100
000005bd: EXP
000005be: SWAP1
000005bf: DIV
000005c0: PUSH1 0xff
000005c2: AND
000005c3: PUSH1 0xff
000005c5: AND
000005c6: DUP2
000005c7: LT
000005c8: ISZERO
000005c9: PUSH2 0x078d
000005cc: JUMPI
000005cd: PUSH1 0x00
000005cf: PUSH1 0x01
000005d1: DUP5
000005d2: DUP14
000005d3: DUP14
000005d4: DUP6
000005d5: DUP2
000005d6: DUP2
000005d7: LT
000005d8: PUSH2 0x060a
000005db: JUMPI
000005dc: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
000005fd: PUSH1 0x00
000005ff: MSTORE
00000600: PUSH1 0x32
00000602: PUSH1 0x04
00000604: MSTORE
00000605: PUSH1 0x24
00000607: PUSH1 0x00
00000609: REVERT
0000060a: JUMPDEST
0000060b: SWAP1
0000060c: POP
0000060d: PUSH1 0x20
0000060f: MUL
00000610: ADD
00000611: PUSH1 0x20
00000613: DUP2
00000614: ADD
00000615: SWAP1
00000616: PUSH2 0x061f
00000619: SWAP2
0000061a: SWAP1
0000061b: PUSH2 0x0c37
0000061e: JUMP
0000061f: JUMPDEST
00000620: DUP13
00000621: DUP13
00000622: DUP7
00000623: DUP2
00000624: DUP2
00000625: LT
00000626: PUSH2 0x0658
00000629: JUMPI
0000062a: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
0000064b: PUSH1 0x00
0000064d: MSTORE
0000064e: PUSH1 0x32
00000650: PUSH1 0x04
00000652: MSTORE
00000653: PUSH1 0x24
00000655: PUSH1 0x00
00000657: REVERT
00000658: JUMPDEST
00000659: SWAP1
0000065a: POP
0000065b: PUSH1 0x20
0000065d: MUL
0000065e: ADD
0000065f: CALLDATALOAD
00000660: DUP12
00000661: DUP12
00000662: DUP8
00000663: DUP2
00000664: DUP2
00000665: LT
00000666: PUSH2 0x0698
00000669: JUMPI
0000066a: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
0000068b: PUSH1 0x00
0000068d: MSTORE
0000068e: PUSH1 0x32
00000690: PUSH1 0x04
00000692: MSTORE
00000693: PUSH1 0x24
00000695: PUSH1 0x00
00000697: REVERT
00000698: JUMPDEST
00000699: SWAP1
0000069a: POP
0000069b: PUSH1 0x20
0000069d: MUL
0000069e: ADD
0000069f: CALLDATALOAD
000006a0: PUSH1 0x40
000006a2: MLOAD
000006a3: PUSH1 0x00
000006a5: DUP2
000006a6: MSTORE
000006a7: PUSH1 0x20
000006a9: ADD
000006aa: PUSH1 0x40
000006ac: MSTORE
000006ad: PUSH1 0x40
000006af: MLOAD
000006b0: PUSH2 0x06bc
000006b3: SWAP5
000006b4: SWAP4
000006b5: SWAP3
000006b6: SWAP2
000006b7: SWAP1
000006b8: PUSH2 0x0e0f
000006bb: JUMP
000006bc: JUMPDEST
000006bd: PUSH1 0x20
000006bf: PUSH1 0x40
000006c1: MLOAD
000006c2: PUSH1 0x20
000006c4: DUP2
000006c5: SUB
000006c6: SWAP1
000006c7: DUP1
000006c8: DUP5
000006c9: SUB
000006ca: SWAP1
000006cb: DUP6
000006cc: GAS
000006cd: STATICCALL
000006ce: ISZERO
000006cf: DUP1
000006d0: ISZERO
000006d1: PUSH2 0x06de
000006d4: JUMPI
000006d5: RETURNDATASIZE
000006d6: PUSH1 0x00
000006d8: DUP1
000006d9: RETURNDATACOPY
000006da: RETURNDATASIZE
000006db: PUSH1 0x00
000006dd: REVERT
000006de: JUMPDEST
000006df: POP
000006e0: POP
000006e1: POP
000006e2: PUSH1 0x20
000006e4: PUSH1 0x40
000006e6: MLOAD
000006e7: SUB
000006e8: MLOAD
000006e9: SWAP1
000006ea: POP
000006eb: DUP3
000006ec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000701: AND
00000702: DUP2
00000703: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000718: AND
00000719: GT
0000071a: DUP1
0000071b: ISZERO
0000071c: PUSH2 0x076d
0000071f: JUMPI
00000720: POP
00000721: PUSH1 0x00
00000723: DUP1
00000724: DUP3
00000725: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000073a: AND
0000073b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000750: AND
00000751: DUP2
00000752: MSTORE
00000753: PUSH1 0x20
00000755: ADD
00000756: SWAP1
00000757: DUP2
00000758: MSTORE
00000759: PUSH1 0x20
0000075b: ADD
0000075c: PUSH1 0x00
0000075e: KECCAK256
0000075f: PUSH1 0x00
00000761: SWAP1
00000762: SLOAD
00000763: SWAP1
00000764: PUSH2 0x0100
00000767: EXP
00000768: SWAP1
00000769: DIV
0000076a: PUSH1 0xff
0000076c: AND
0000076d: JUMPDEST
0000076e: PUSH2 0x0776
00000771: JUMPI
00000772: PUSH1 0x00
00000774: DUP1
00000775: REVERT
00000776: JUMPDEST
00000777: DUP1
00000778: SWAP3
00000779: POP
0000077a: POP
0000077b: DUP1
0000077c: DUP1
0000077d: PUSH2 0x0785
00000780: SWAP1
00000781: PUSH2 0x10f6
00000784: JUMP
00000785: JUMPDEST
00000786: SWAP2
00000787: POP
00000788: POP
00000789: PUSH2 0x05b2
0000078c: JUMP
0000078d: JUMPDEST
0000078e: POP
0000078f: POP
00000790: POP
00000791: POP
00000792: POP
00000793: POP
00000794: POP
00000795: POP
00000796: POP
00000797: POP
00000798: POP
00000799: JUMP
0000079a: JUMPDEST
0000079b: PUSH1 0x00
0000079d: DUP1
0000079e: PUSH1 0x00
000007a0: DUP1
000007a1: PUSH1 0x00
000007a3: PUSH1 0x60
000007a5: PUSH1 0x00
000007a7: DUP8
000007a8: MLOAD
000007a9: GT
000007aa: PUSH2 0x07b2
000007ad: JUMPI
000007ae: PUSH1 0x00
000007b0: DUP1
000007b1: REVERT
000007b2: JUMPDEST
000007b3: PUSH1 0x00
000007b5: DUP1
000007b6: PUSH1 0x00
000007b8: PUSH1 0x20
000007ba: DUP11
000007bb: ADD
000007bc: SWAP3
000007bd: POP
000007be: PUSH2 0x07c6
000007c1: DUP4
000007c2: PUSH2 0x08ea
000007c5: JUMP
000007c6: JUMPDEST
000007c7: DUP1
000007c8: SWAP3
000007c9: POP
000007ca: DUP2
000007cb: SWAP4
000007cc: POP
000007cd: POP
000007ce: POP
000007cf: DUP10
000007d0: MLOAD
000007d1: DUP2
000007d2: DUP5
000007d3: DUP5
000007d4: PUSH2 0x07dd
000007d7: SWAP2
000007d8: SWAP1
000007d9: PUSH2 0x1021
000007dc: JUMP
000007dd: JUMPDEST
000007de: PUSH2 0x07e7
000007e1: SWAP2
000007e2: SWAP1
000007e3: PUSH2 0x0f71
000007e6: JUMP
000007e7: JUMPDEST
000007e8: EQ
000007e9: PUSH2 0x07f1
000007ec: JUMPI
000007ed: PUSH1 0x00
000007ef: DUP1
000007f0: REVERT
000007f1: JUMPDEST
000007f2: PUSH2 0x07fa
000007f5: DUP3
000007f6: PUSH2 0x0957
000007f9: JUMP
000007fa: JUMPDEST
000007fb: DUP1
000007fc: SWAP3
000007fd: POP
000007fe: DUP2
000007ff: SWAP4
00000800: POP
00000801: POP
00000802: POP
00000803: PUSH2 0x080c
00000806: DUP3
00000807: DUP3
00000808: PUSH2 0x09dc
0000080b: JUMP
0000080c: JUMPDEST
0000080d: SWAP9
0000080e: POP
0000080f: PUSH2 0x0822
00000812: DUP2
00000813: DUP4
00000814: PUSH2 0x081d
00000817: SWAP2
00000818: SWAP1
00000819: PUSH2 0x0f71
0000081c: JUMP
0000081d: JUMPDEST
0000081e: PUSH2 0x0957
00000821: JUMP
00000822: JUMPDEST
00000823: DUP1
00000824: SWAP3
00000825: POP
00000826: DUP2
00000827: SWAP4
00000828: POP
00000829: POP
0000082a: POP
0000082b: PUSH2 0x0834
0000082e: DUP3
0000082f: DUP3
00000830: PUSH2 0x09dc
00000833: JUMP
00000834: JUMPDEST
00000835: SWAP8
00000836: POP
00000837: PUSH2 0x084a
0000083a: DUP2
0000083b: DUP4
0000083c: PUSH2 0x0845
0000083f: SWAP2
00000840: SWAP1
00000841: PUSH2 0x0f71
00000844: JUMP
00000845: JUMPDEST
00000846: PUSH2 0x0957
00000849: JUMP
0000084a: JUMPDEST
0000084b: DUP1
0000084c: SWAP3
0000084d: POP
0000084e: DUP2
0000084f: SWAP4
00000850: POP
00000851: POP
00000852: POP
00000853: PUSH2 0x085c
00000856: DUP3
00000857: DUP3
00000858: PUSH2 0x09dc
0000085b: JUMP
0000085c: JUMPDEST
0000085d: SWAP7
0000085e: POP
0000085f: PUSH2 0x0872
00000862: DUP2
00000863: DUP4
00000864: PUSH2 0x086d
00000867: SWAP2
00000868: SWAP1
00000869: PUSH2 0x0f71
0000086c: JUMP
0000086d: JUMPDEST
0000086e: PUSH2 0x0957
00000871: JUMP
00000872: JUMPDEST
00000873: DUP1
00000874: SWAP3
00000875: POP
00000876: DUP2
00000877: SWAP4
00000878: POP
00000879: POP
0000087a: POP
0000087b: PUSH2 0x0884
0000087e: DUP3
0000087f: DUP3
00000880: PUSH2 0x0a11
00000883: JUMP
00000884: JUMPDEST
00000885: SWAP6
00000886: POP
00000887: PUSH2 0x089a
0000088a: DUP2
0000088b: DUP4
0000088c: PUSH2 0x0895
0000088f: SWAP2
00000890: SWAP1
00000891: PUSH2 0x0f71
00000894: JUMP
00000895: JUMPDEST
00000896: PUSH2 0x0957
00000899: JUMP
0000089a: JUMPDEST
0000089b: DUP1
0000089c: SWAP3
0000089d: POP
0000089e: DUP2
0000089f: SWAP4
000008a0: POP
000008a1: POP
000008a2: POP
000008a3: PUSH2 0x08ac
000008a6: DUP3
000008a7: DUP3
000008a8: PUSH2 0x09dc
000008ab: JUMP
000008ac: JUMPDEST
000008ad: SWAP5
000008ae: POP
000008af: PUSH2 0x08c2
000008b2: DUP2
000008b3: DUP4
000008b4: PUSH2 0x08bd
000008b7: SWAP2
000008b8: SWAP1
000008b9: PUSH2 0x0f71
000008bc: JUMP
000008bd: JUMPDEST
000008be: PUSH2 0x0957
000008c1: JUMP
000008c2: JUMPDEST
000008c3: DUP1
000008c4: SWAP3
000008c5: POP
000008c6: DUP2
000008c7: SWAP4
000008c8: POP
000008c9: POP
000008ca: POP
000008cb: PUSH1 0x20
000008cd: DUP3
000008ce: SUB
000008cf: SWAP4
000008d0: POP
000008d1: DUP1
000008d2: DUP5
000008d3: MSTORE
000008d4: POP
000008d5: POP
000008d6: POP
000008d7: SWAP2
000008d8: SWAP4
000008d9: SWAP6
000008da: POP
000008db: SWAP2
000008dc: SWAP4
000008dd: SWAP6
000008de: JUMP
000008df: JUMPDEST
000008e0: PUSH1 0x00
000008e2: PUSH1 0x01
000008e4: SWAP1
000008e5: POP
000008e6: SWAP2
000008e7: SWAP1
000008e8: POP
000008e9: JUMP
000008ea: JUMPDEST
000008eb: PUSH1 0x00
000008ed: DUP1
000008ee: PUSH1 0x00
000008f0: DUP4
000008f1: MLOAD
000008f2: PUSH1 0x00
000008f4: BYTE
000008f5: SWAP1
000008f6: POP
000008f7: PUSH1 0xf8
000008f9: DUP2
000008fa: LT
000008fb: PUSH2 0x0920
000008fe: JUMPI
000008ff: PUSH1 0xf7
00000901: DUP2
00000902: SUB
00000903: DUP1
00000904: PUSH1 0x20
00000906: SUB
00000907: PUSH2 0x0100
0000090a: EXP
0000090b: PUSH1 0x01
0000090d: DUP7
0000090e: ADD
0000090f: MLOAD
00000910: DIV
00000911: SWAP3
00000912: POP
00000913: DUP1
00000914: DUP6
00000915: ADD
00000916: PUSH1 0x01
00000918: ADD
00000919: SWAP4
0000091a: POP
0000091b: POP
0000091c: PUSH2 0x0951
0000091f: JUMP
00000920: JUMPDEST
00000921: PUSH1 0xc0
00000923: DUP2
00000924: LT
00000925: PUSH2 0x094b
00000928: JUMPI
00000929: PUSH1 0xc0
0000092b: DUP2
0000092c: PUSH2 0x0935
0000092f: SWAP2
00000930: SWAP1
00000931: PUSH2 0x1021
00000934: JUMP
00000935: JUMPDEST
00000936: SWAP2
00000937: POP
00000938: PUSH1 0x01
0000093a: DUP5
0000093b: PUSH2 0x0944
0000093e: SWAP2
0000093f: SWAP1
00000940: PUSH2 0x0f71
00000943: JUMP
00000944: JUMPDEST
00000945: SWAP3
00000946: POP
00000947: PUSH2 0x0950
0000094a: JUMP
0000094b: JUMPDEST
0000094c: PUSH1 0x00
0000094e: DUP1
0000094f: REVERT
00000950: JUMPDEST
00000951: JUMPDEST
00000952: POP
00000953: SWAP2
00000954: POP
00000955: SWAP2
00000956: JUMP
00000957: JUMPDEST
00000958: PUSH1 0x00
0000095a: DUP1
0000095b: PUSH1 0x00
0000095d: DUP4
0000095e: MLOAD
0000095f: PUSH1 0x00
00000961: BYTE
00000962: SWAP1
00000963: POP
00000964: PUSH1 0x80
00000966: DUP2
00000967: LT
00000968: ISZERO
00000969: PUSH2 0x0978
0000096c: JUMPI
0000096d: PUSH1 0x01
0000096f: SWAP2
00000970: POP
00000971: DUP4
00000972: SWAP3
00000973: POP
00000974: PUSH2 0x09d6
00000977: JUMP
00000978: JUMPDEST
00000979: PUSH1 0xb8
0000097b: DUP2
0000097c: LT
0000097d: ISZERO
0000097e: PUSH2 0x09a4
00000981: JUMPI
00000982: PUSH1 0x80
00000984: DUP2
00000985: PUSH2 0x098e
00000988: SWAP2
00000989: SWAP1
0000098a: PUSH2 0x1021
0000098d: JUMP
0000098e: JUMPDEST
0000098f: SWAP2
00000990: POP
00000991: PUSH1 0x01
00000993: DUP5
00000994: PUSH2 0x099d
00000997: SWAP2
00000998: SWAP1
00000999: PUSH2 0x0f71
0000099c: JUMP
0000099d: JUMPDEST
0000099e: SWAP3
0000099f: POP
000009a0: PUSH2 0x09d5
000009a3: JUMP
000009a4: JUMPDEST
000009a5: PUSH1 0xc0
000009a7: DUP2
000009a8: LT
000009a9: ISZERO
000009aa: PUSH2 0x09cf
000009ad: JUMPI
000009ae: PUSH1 0xb7
000009b0: DUP2
000009b1: SUB
000009b2: DUP1
000009b3: PUSH1 0x20
000009b5: SUB
000009b6: PUSH2 0x0100
000009b9: EXP
000009ba: PUSH1 0x01
000009bc: DUP7
000009bd: ADD
000009be: MLOAD
000009bf: DIV
000009c0: SWAP3
000009c1: POP
000009c2: DUP1
000009c3: DUP6
000009c4: ADD
000009c5: PUSH1 0x01
000009c7: ADD
000009c8: SWAP4
000009c9: POP
000009ca: POP
000009cb: PUSH2 0x09d4
000009ce: JUMP
000009cf: JUMPDEST
000009d0: PUSH1 0x00
000009d2: DUP1
000009d3: REVERT
000009d4: JUMPDEST
000009d5: JUMPDEST
000009d6: JUMPDEST
000009d7: POP
000009d8: SWAP2
000009d9: POP
000009da: SWAP2
000009db: JUMP
000009dc: JUMPDEST
000009dd: PUSH1 0x00
000009df: DUP1
000009e0: DUP3
000009e1: EQ
000009e2: ISZERO
000009e3: PUSH2 0x09ef
000009e6: JUMPI
000009e7: PUSH1 0x00
000009e9: SWAP1
000009ea: POP
000009eb: PUSH2 0x0a0b
000009ee: JUMP
000009ef: JUMPDEST
000009f0: PUSH1 0x20
000009f2: DUP3
000009f3: GT
000009f4: ISZERO
000009f5: PUSH2 0x09fd
000009f8: JUMPI
000009f9: PUSH1 0x00
000009fb: DUP1
000009fc: REVERT
000009fd: JUMPDEST
000009fe: DUP2
000009ff: PUSH1 0x20
00000a01: SUB
00000a02: PUSH2 0x0100
00000a05: EXP
00000a06: DUP4
00000a07: MLOAD
00000a08: DIV
00000a09: SWAP1
00000a0a: POP
00000a0b: JUMPDEST
00000a0c: SWAP3
00000a0d: SWAP2
00000a0e: POP
00000a0f: POP
00000a10: JUMP
00000a11: JUMPDEST
00000a12: PUSH1 0x00
00000a14: PUSH1 0x14
00000a16: DUP3
00000a17: EQ
00000a18: PUSH2 0x0a20
00000a1b: JUMPI
00000a1c: PUSH1 0x00
00000a1e: DUP1
00000a1f: REVERT
00000a20: JUMPDEST
00000a21: PUSH1 0x0c
00000a23: PUSH2 0x0100
00000a26: EXP
00000a27: DUP4
00000a28: MLOAD
00000a29: DIV
00000a2a: SWAP1
00000a2b: POP
00000a2c: SWAP3
00000a2d: SWAP2
00000a2e: POP
00000a2f: POP
00000a30: JUMP
00000a31: JUMPDEST
00000a32: PUSH1 0x00
00000a34: DUP2
00000a35: CALLDATALOAD
00000a36: SWAP1
00000a37: POP
00000a38: PUSH2 0x0a40
00000a3b: DUP2
00000a3c: PUSH2 0x1264
00000a3f: JUMP
00000a40: JUMPDEST
00000a41: SWAP3
00000a42: SWAP2
00000a43: POP
00000a44: POP
00000a45: JUMP
00000a46: JUMPDEST
00000a47: PUSH1 0x00
00000a49: DUP1
00000a4a: DUP4
00000a4b: PUSH1 0x1f
00000a4d: DUP5
00000a4e: ADD
00000a4f: SLT
00000a50: PUSH2 0x0a58
00000a53: JUMPI
00000a54: PUSH1 0x00
00000a56: DUP1
00000a57: REVERT
00000a58: JUMPDEST
00000a59: DUP3
00000a5a: CALLDATALOAD
00000a5b: SWAP1
00000a5c: POP
00000a5d: PUSH8 0xffffffffffffffff
00000a66: DUP2
00000a67: GT
00000a68: ISZERO
00000a69: PUSH2 0x0a71
00000a6c: JUMPI
00000a6d: PUSH1 0x00
00000a6f: DUP1
00000a70: REVERT
00000a71: JUMPDEST
00000a72: PUSH1 0x20
00000a74: DUP4
00000a75: ADD
00000a76: SWAP2
00000a77: POP
00000a78: DUP4
00000a79: PUSH1 0x20
00000a7b: DUP3
00000a7c: MUL
00000a7d: DUP4
00000a7e: ADD
00000a7f: GT
00000a80: ISZERO
00000a81: PUSH2 0x0a89
00000a84: JUMPI
00000a85: PUSH1 0x00
00000a87: DUP1
00000a88: REVERT
00000a89: JUMPDEST
00000a8a: SWAP3
00000a8b: POP
00000a8c: SWAP3
00000a8d: SWAP1
00000a8e: POP
00000a8f: JUMP
00000a90: JUMPDEST
00000a91: PUSH1 0x00
00000a93: DUP1
00000a94: DUP4
00000a95: PUSH1 0x1f
00000a97: DUP5
00000a98: ADD
00000a99: SLT
00000a9a: PUSH2 0x0aa2
00000a9d: JUMPI
00000a9e: PUSH1 0x00
00000aa0: DUP1
00000aa1: REVERT
00000aa2: JUMPDEST
00000aa3: DUP3
00000aa4: CALLDATALOAD
00000aa5: SWAP1
00000aa6: POP
00000aa7: PUSH8 0xffffffffffffffff
00000ab0: DUP2
00000ab1: GT
00000ab2: ISZERO
00000ab3: PUSH2 0x0abb
00000ab6: JUMPI
00000ab7: PUSH1 0x00
00000ab9: DUP1
00000aba: REVERT
00000abb: JUMPDEST
00000abc: PUSH1 0x20
00000abe: DUP4
00000abf: ADD
00000ac0: SWAP2
00000ac1: POP
00000ac2: DUP4
00000ac3: PUSH1 0x20
00000ac5: DUP3
00000ac6: MUL
00000ac7: DUP4
00000ac8: ADD
00000ac9: GT
00000aca: ISZERO
00000acb: PUSH2 0x0ad3
00000ace: JUMPI
00000acf: PUSH1 0x00
00000ad1: DUP1
00000ad2: REVERT
00000ad3: JUMPDEST
00000ad4: SWAP3
00000ad5: POP
00000ad6: SWAP3
00000ad7: SWAP1
00000ad8: POP
00000ad9: JUMP
00000ada: JUMPDEST
00000adb: PUSH1 0x00
00000add: DUP1
00000ade: DUP4
00000adf: PUSH1 0x1f
00000ae1: DUP5
00000ae2: ADD
00000ae3: SLT
00000ae4: PUSH2 0x0aec
00000ae7: JUMPI
00000ae8: PUSH1 0x00
00000aea: DUP1
00000aeb: REVERT
00000aec: JUMPDEST
00000aed: DUP3
00000aee: CALLDATALOAD
00000aef: SWAP1
00000af0: POP
00000af1: PUSH8 0xffffffffffffffff
00000afa: DUP2
00000afb: GT
00000afc: ISZERO
00000afd: PUSH2 0x0b05
00000b00: JUMPI
00000b01: PUSH1 0x00
00000b03: DUP1
00000b04: REVERT
00000b05: JUMPDEST
00000b06: PUSH1 0x20
00000b08: DUP4
00000b09: ADD
00000b0a: SWAP2
00000b0b: POP
00000b0c: DUP4
00000b0d: PUSH1 0x01
00000b0f: DUP3
00000b10: MUL
00000b11: DUP4
00000b12: ADD
00000b13: GT
00000b14: ISZERO
00000b15: PUSH2 0x0b1d
00000b18: JUMPI
00000b19: PUSH1 0x00
00000b1b: DUP1
00000b1c: REVERT
00000b1d: JUMPDEST
00000b1e: SWAP3
00000b1f: POP
00000b20: SWAP3
00000b21: SWAP1
00000b22: POP
00000b23: JUMP
00000b24: JUMPDEST
00000b25: PUSH1 0x00
00000b27: DUP2
00000b28: CALLDATALOAD
00000b29: SWAP1
00000b2a: POP
00000b2b: PUSH2 0x0b33
00000b2e: DUP2
00000b2f: PUSH2 0x127b
00000b32: JUMP
00000b33: JUMPDEST
00000b34: SWAP3
00000b35: SWAP2
00000b36: POP
00000b37: POP
00000b38: JUMP
00000b39: JUMPDEST
00000b3a: PUSH1 0x00
00000b3c: PUSH1 0x20
00000b3e: DUP3
00000b3f: DUP5
00000b40: SUB
00000b41: SLT
00000b42: ISZERO
00000b43: PUSH2 0x0b4b
00000b46: JUMPI
00000b47: PUSH1 0x00
00000b49: DUP1
00000b4a: REVERT
00000b4b: JUMPDEST
00000b4c: PUSH1 0x00
00000b4e: PUSH2 0x0b59
00000b51: DUP5
00000b52: DUP3
00000b53: DUP6
00000b54: ADD
00000b55: PUSH2 0x0a31
00000b58: JUMP
00000b59: JUMPDEST
00000b5a: SWAP2
00000b5b: POP
00000b5c: POP
00000b5d: SWAP3
00000b5e: SWAP2
00000b5f: POP
00000b60: POP
00000b61: JUMP
00000b62: JUMPDEST
00000b63: PUSH1 0x00
00000b65: DUP1
00000b66: PUSH1 0x00
00000b68: DUP1
00000b69: PUSH1 0x00
00000b6b: DUP1
00000b6c: PUSH1 0x00
00000b6e: DUP1
00000b6f: PUSH1 0x80
00000b71: DUP10
00000b72: DUP12
00000b73: SUB
00000b74: SLT
00000b75: ISZERO
00000b76: PUSH2 0x0b7e
00000b79: JUMPI
00000b7a: PUSH1 0x00
00000b7c: DUP1
00000b7d: REVERT
00000b7e: JUMPDEST
00000b7f: PUSH1 0x00
00000b81: DUP10
00000b82: ADD
00000b83: CALLDATALOAD
00000b84: PUSH8 0xffffffffffffffff
00000b8d: DUP2
00000b8e: GT
00000b8f: ISZERO
00000b90: PUSH2 0x0b98
00000b93: JUMPI
00000b94: PUSH1 0x00
00000b96: DUP1
00000b97: REVERT
00000b98: JUMPDEST
00000b99: PUSH2 0x0ba4
00000b9c: DUP12
00000b9d: DUP3
00000b9e: DUP13
00000b9f: ADD
00000ba0: PUSH2 0x0a90
00000ba3: JUMP
00000ba4: JUMPDEST
00000ba5: SWAP9
00000ba6: POP
00000ba7: SWAP9
00000ba8: POP
00000ba9: POP
00000baa: PUSH1 0x20
00000bac: DUP10
00000bad: ADD
00000bae: CALLDATALOAD
00000baf: PUSH8 0xffffffffffffffff
00000bb8: DUP2
00000bb9: GT
00000bba: ISZERO
00000bbb: PUSH2 0x0bc3
00000bbe: JUMPI
00000bbf: PUSH1 0x00
00000bc1: DUP1
00000bc2: REVERT
00000bc3: JUMPDEST
00000bc4: PUSH2 0x0bcf
00000bc7: DUP12
00000bc8: DUP3
00000bc9: DUP13
00000bca: ADD
00000bcb: PUSH2 0x0a46
00000bce: JUMP
00000bcf: JUMPDEST
00000bd0: SWAP7
00000bd1: POP
00000bd2: SWAP7
00000bd3: POP
00000bd4: POP
00000bd5: PUSH1 0x40
00000bd7: DUP10
00000bd8: ADD
00000bd9: CALLDATALOAD
00000bda: PUSH8 0xffffffffffffffff
00000be3: DUP2
00000be4: GT
00000be5: ISZERO
00000be6: PUSH2 0x0bee
00000be9: JUMPI
00000bea: PUSH1 0x00
00000bec: DUP1
00000bed: REVERT
00000bee: JUMPDEST
00000bef: PUSH2 0x0bfa
00000bf2: DUP12
00000bf3: DUP3
00000bf4: DUP13
00000bf5: ADD
00000bf6: PUSH2 0x0a46
00000bf9: JUMP
00000bfa: JUMPDEST
00000bfb: SWAP5
00000bfc: POP
00000bfd: SWAP5
00000bfe: POP
00000bff: POP
00000c00: PUSH1 0x60
00000c02: DUP10
00000c03: ADD
00000c04: CALLDATALOAD
00000c05: PUSH8 0xffffffffffffffff
00000c0e: DUP2
00000c0f: GT
00000c10: ISZERO
00000c11: PUSH2 0x0c19
00000c14: JUMPI
00000c15: PUSH1 0x00
00000c17: DUP1
00000c18: REVERT
00000c19: JUMPDEST
00000c1a: PUSH2 0x0c25
00000c1d: DUP12
00000c1e: DUP3
00000c1f: DUP13
00000c20: ADD
00000c21: PUSH2 0x0ada
00000c24: JUMP
00000c25: JUMPDEST
00000c26: SWAP3
00000c27: POP
00000c28: SWAP3
00000c29: POP
00000c2a: POP
00000c2b: SWAP3
00000c2c: SWAP6
00000c2d: SWAP9
00000c2e: POP
00000c2f: SWAP3
00000c30: SWAP6
00000c31: SWAP9
00000c32: SWAP1
00000c33: SWAP4
00000c34: SWAP7
00000c35: POP
00000c36: JUMP
00000c37: JUMPDEST
00000c38: PUSH1 0x00
00000c3a: PUSH1 0x20
00000c3c: DUP3
00000c3d: DUP5
00000c3e: SUB
00000c3f: SLT
00000c40: ISZERO
00000c41: PUSH2 0x0c49
00000c44: JUMPI
00000c45: PUSH1 0x00
00000c47: DUP1
00000c48: REVERT
00000c49: JUMPDEST
00000c4a: PUSH1 0x00
00000c4c: PUSH2 0x0c57
00000c4f: DUP5
00000c50: DUP3
00000c51: DUP6
00000c52: ADD
00000c53: PUSH2 0x0b24
00000c56: JUMP
00000c57: JUMPDEST
00000c58: SWAP2
00000c59: POP
00000c5a: POP
00000c5b: SWAP3
00000c5c: SWAP2
00000c5d: POP
00000c5e: POP
00000c5f: JUMP
00000c60: JUMPDEST
00000c61: PUSH2 0x0c69
00000c64: DUP2
00000c65: PUSH2 0x1067
00000c68: JUMP
00000c69: JUMPDEST
00000c6a: DUP3
00000c6b: MSTORE
00000c6c: POP
00000c6d: POP
00000c6e: JUMP
00000c6f: JUMPDEST
00000c70: PUSH2 0x0c78
00000c73: DUP2
00000c74: PUSH2 0x1073
00000c77: JUMP
00000c78: JUMPDEST
00000c79: DUP3
00000c7a: MSTORE
00000c7b: POP
00000c7c: POP
00000c7d: JUMP
00000c7e: JUMPDEST
00000c7f: PUSH1 0x00
00000c81: PUSH2 0x0c8a
00000c84: DUP4
00000c85: DUP6
00000c86: PUSH2 0x0f55
00000c89: JUMP
00000c8a: JUMPDEST
00000c8b: SWAP4
00000c8c: POP
00000c8d: PUSH2 0x0c97
00000c90: DUP4
00000c91: DUP6
00000c92: DUP5
00000c93: PUSH2 0x10b4
00000c96: JUMP
00000c97: JUMPDEST
00000c98: DUP3
00000c99: DUP5
00000c9a: ADD
00000c9b: SWAP1
00000c9c: POP
00000c9d: SWAP4
00000c9e: SWAP3
00000c9f: POP
00000ca0: POP
00000ca1: POP
00000ca2: JUMP
00000ca3: JUMPDEST
00000ca4: PUSH1 0x00
00000ca6: PUSH2 0x0cae
00000ca9: DUP3
00000caa: PUSH2 0x0f4a
00000cad: JUMP
00000cae: JUMPDEST
00000caf: PUSH2 0x0cb8
00000cb2: DUP2
00000cb3: DUP6
00000cb4: PUSH2 0x0f55
00000cb7: JUMP
00000cb8: JUMPDEST
00000cb9: SWAP4
00000cba: POP
00000cbb: PUSH2 0x0cc8
00000cbe: DUP2
00000cbf: DUP6
00000cc0: PUSH1 0x20
00000cc2: DUP7
00000cc3: ADD
00000cc4: PUSH2 0x10c3
00000cc7: JUMP
00000cc8: JUMPDEST
00000cc9: DUP1
00000cca: DUP5
00000ccb: ADD
00000ccc: SWAP2
00000ccd: POP
00000cce: POP
00000ccf: SWAP3
00000cd0: SWAP2
00000cd1: POP
00000cd2: POP
00000cd3: JUMP
00000cd4: JUMPDEST
00000cd5: PUSH1 0x00
00000cd7: PUSH2 0x0ce1
00000cda: PUSH1 0x11
00000cdc: DUP4
00000cdd: PUSH2 0x0f60
00000ce0: JUMP
00000ce1: JUMPDEST
00000ce2: SWAP2
00000ce3: POP
00000ce4: PUSH2 0x0cec
00000ce7: DUP3
00000ce8: PUSH2 0x116e
00000ceb: JUMP
00000cec: JUMPDEST
00000ced: PUSH1 0x20
00000cef: DUP3
00000cf0: ADD
00000cf1: SWAP1
00000cf2: POP
00000cf3: SWAP2
00000cf4: SWAP1
00000cf5: POP
00000cf6: JUMP
00000cf7: JUMPDEST
00000cf8: PUSH1 0x00
00000cfa: PUSH2 0x0d04
00000cfd: PUSH1 0x15
00000cff: DUP4
00000d00: PUSH2 0x0f60
00000d03: JUMP
00000d04: JUMPDEST
00000d05: SWAP2
00000d06: POP
00000d07: PUSH2 0x0d0f
00000d0a: DUP3
00000d0b: PUSH2 0x1197
00000d0e: JUMP
00000d0f: JUMPDEST
00000d10: PUSH1 0x20
00000d12: DUP3
00000d13: ADD
00000d14: SWAP1
00000d15: POP
00000d16: SWAP2
00000d17: SWAP1
00000d18: POP
00000d19: JUMP
00000d1a: JUMPDEST
00000d1b: PUSH1 0x00
00000d1d: PUSH2 0x0d27
00000d20: PUSH1 0x0d
00000d22: DUP4
00000d23: PUSH2 0x0f60
00000d26: JUMP
00000d27: JUMPDEST
00000d28: SWAP2
00000d29: POP
00000d2a: PUSH2 0x0d32
00000d2d: DUP3
00000d2e: PUSH2 0x11c0
00000d31: JUMP
00000d32: JUMPDEST
00000d33: PUSH1 0x20
00000d35: DUP3
00000d36: ADD
00000d37: SWAP1
00000d38: POP
00000d39: SWAP2
00000d3a: SWAP1
00000d3b: POP
00000d3c: JUMP
00000d3d: JUMPDEST
00000d3e: PUSH1 0x00
00000d40: PUSH2 0x0d4a
00000d43: PUSH1 0x0e
00000d45: DUP4
00000d46: PUSH2 0x0f60
00000d49: JUMP
00000d4a: JUMPDEST
00000d4b: SWAP2
00000d4c: POP
00000d4d: PUSH2 0x0d55
00000d50: DUP3
00000d51: PUSH2 0x11e9
00000d54: JUMP
00000d55: JUMPDEST
00000d56: PUSH1 0x20
00000d58: DUP3
00000d59: ADD
00000d5a: SWAP1
00000d5b: POP
00000d5c: SWAP2
00000d5d: SWAP1
00000d5e: POP
00000d5f: JUMP
00000d60: JUMPDEST
00000d61: PUSH1 0x00
00000d63: PUSH2 0x0d6d
00000d66: PUSH1 0x12
00000d68: DUP4
00000d69: PUSH2 0x0f60
00000d6c: JUMP
00000d6d: JUMPDEST
00000d6e: SWAP2
00000d6f: POP
00000d70: PUSH2 0x0d78
00000d73: DUP3
00000d74: PUSH2 0x1212
00000d77: JUMP
00000d78: JUMPDEST
00000d79: PUSH1 0x20
00000d7b: DUP3
00000d7c: ADD
00000d7d: SWAP1
00000d7e: POP
00000d7f: SWAP2
00000d80: SWAP1
00000d81: POP
00000d82: JUMP
00000d83: JUMPDEST
00000d84: PUSH1 0x00
00000d86: PUSH2 0x0d90
00000d89: PUSH1 0x12
00000d8b: DUP4
00000d8c: PUSH2 0x0f60
00000d8f: JUMP
00000d90: JUMPDEST
00000d91: SWAP2
00000d92: POP
00000d93: PUSH2 0x0d9b
00000d96: DUP3
00000d97: PUSH2 0x123b
00000d9a: JUMP
00000d9b: JUMPDEST
00000d9c: PUSH1 0x20
00000d9e: DUP3
00000d9f: ADD
00000da0: SWAP1
00000da1: POP
00000da2: SWAP2
00000da3: SWAP1
00000da4: POP
00000da5: JUMP
00000da6: JUMPDEST
00000da7: PUSH2 0x0daf
00000daa: DUP2
00000dab: PUSH2 0x109d
00000dae: JUMP
00000daf: JUMPDEST
00000db0: DUP3
00000db1: MSTORE
00000db2: POP
00000db3: POP
00000db4: JUMP
00000db5: JUMPDEST
00000db6: PUSH2 0x0dbe
00000db9: DUP2
00000dba: PUSH2 0x10a7
00000dbd: JUMP
00000dbe: JUMPDEST
00000dbf: DUP3
00000dc0: MSTORE
00000dc1: POP
00000dc2: POP
00000dc3: JUMP
00000dc4: JUMPDEST
00000dc5: PUSH1 0x00
00000dc7: PUSH2 0x0dd1
00000dca: DUP3
00000dcb: DUP5
00000dcc: DUP7
00000dcd: PUSH2 0x0c7e
00000dd0: JUMP
00000dd1: JUMPDEST
00000dd2: SWAP2
00000dd3: POP
00000dd4: DUP2
00000dd5: SWAP1
00000dd6: POP
00000dd7: SWAP4
00000dd8: SWAP3
00000dd9: POP
00000dda: POP
00000ddb: POP
00000ddc: JUMP
00000ddd: JUMPDEST
00000dde: PUSH1 0x00
00000de0: PUSH2 0x0de9
00000de3: DUP3
00000de4: DUP5
00000de5: PUSH2 0x0ca3
00000de8: JUMP
00000de9: JUMPDEST
00000dea: SWAP2
00000deb: POP
00000dec: DUP2
00000ded: SWAP1
00000dee: POP
00000def: SWAP3
00000df0: SWAP2
00000df1: POP
00000df2: POP
00000df3: JUMP
00000df4: JUMPDEST
00000df5: PUSH1 0x00
00000df7: PUSH1 0x20
00000df9: DUP3
00000dfa: ADD
00000dfb: SWAP1
00000dfc: POP
00000dfd: PUSH2 0x0e09
00000e00: PUSH1 0x00
00000e02: DUP4
00000e03: ADD
00000e04: DUP5
00000e05: PUSH2 0x0c60
00000e08: JUMP
00000e09: JUMPDEST
00000e0a: SWAP3
00000e0b: SWAP2
00000e0c: POP
00000e0d: POP
00000e0e: JUMP
00000e0f: JUMPDEST
00000e10: PUSH1 0x00
00000e12: PUSH1 0x80
00000e14: DUP3
00000e15: ADD
00000e16: SWAP1
00000e17: POP
00000e18: PUSH2 0x0e24
00000e1b: PUSH1 0x00
00000e1d: DUP4
00000e1e: ADD
00000e1f: DUP8
00000e20: PUSH2 0x0c6f
00000e23: JUMP
00000e24: JUMPDEST
00000e25: PUSH2 0x0e31
00000e28: PUSH1 0x20
00000e2a: DUP4
00000e2b: ADD
00000e2c: DUP7
00000e2d: PUSH2 0x0db5
00000e30: JUMP
00000e31: JUMPDEST
00000e32: PUSH2 0x0e3e
00000e35: PUSH1 0x40
00000e37: DUP4
00000e38: ADD
00000e39: DUP6
00000e3a: PUSH2 0x0c6f
00000e3d: JUMP
00000e3e: JUMPDEST
00000e3f: PUSH2 0x0e4b
00000e42: PUSH1 0x60
00000e44: DUP4
00000e45: ADD
00000e46: DUP5
00000e47: PUSH2 0x0c6f
00000e4a: JUMP
00000e4b: JUMPDEST
00000e4c: SWAP6
00000e4d: SWAP5
00000e4e: POP
00000e4f: POP
00000e50: POP
00000e51: POP
00000e52: POP
00000e53: JUMP
00000e54: JUMPDEST
00000e55: PUSH1 0x00
00000e57: PUSH1 0x20
00000e59: DUP3
00000e5a: ADD
00000e5b: SWAP1
00000e5c: POP
00000e5d: DUP2
00000e5e: DUP2
00000e5f: SUB
00000e60: PUSH1 0x00
00000e62: DUP4
00000e63: ADD
00000e64: MSTORE
00000e65: PUSH2 0x0e6d
00000e68: DUP2
00000e69: PUSH2 0x0cd4
00000e6c: JUMP
00000e6d: JUMPDEST
00000e6e: SWAP1
00000e6f: POP
00000e70: SWAP2
00000e71: SWAP1
00000e72: POP
00000e73: JUMP
00000e74: JUMPDEST
00000e75: PUSH1 0x00
00000e77: PUSH1 0x20
00000e79: DUP3
00000e7a: ADD
00000e7b: SWAP1
00000e7c: POP
00000e7d: DUP2
00000e7e: DUP2
00000e7f: SUB
00000e80: PUSH1 0x00
00000e82: DUP4
00000e83: ADD
00000e84: MSTORE
00000e85: PUSH2 0x0e8d
00000e88: DUP2
00000e89: PUSH2 0x0cf7
00000e8c: JUMP
00000e8d: JUMPDEST
00000e8e: SWAP1
00000e8f: POP
00000e90: SWAP2
00000e91: SWAP1
00000e92: POP
00000e93: JUMP
00000e94: JUMPDEST
00000e95: PUSH1 0x00
00000e97: PUSH1 0x20
00000e99: DUP3
00000e9a: ADD
00000e9b: SWAP1
00000e9c: POP
00000e9d: DUP2
00000e9e: DUP2
00000e9f: SUB
00000ea0: PUSH1 0x00
00000ea2: DUP4
00000ea3: ADD
00000ea4: MSTORE
00000ea5: PUSH2 0x0ead
00000ea8: DUP2
00000ea9: PUSH2 0x0d1a
00000eac: JUMP
00000ead: JUMPDEST
00000eae: SWAP1
00000eaf: POP
00000eb0: SWAP2
00000eb1: SWAP1
00000eb2: POP
00000eb3: JUMP
00000eb4: JUMPDEST
00000eb5: PUSH1 0x00
00000eb7: PUSH1 0x20
00000eb9: DUP3
00000eba: ADD
00000ebb: SWAP1
00000ebc: POP
00000ebd: DUP2
00000ebe: DUP2
00000ebf: SUB
00000ec0: PUSH1 0x00
00000ec2: DUP4
00000ec3: ADD
00000ec4: MSTORE
00000ec5: PUSH2 0x0ecd
00000ec8: DUP2
00000ec9: PUSH2 0x0d3d
00000ecc: JUMP
00000ecd: JUMPDEST
00000ece: SWAP1
00000ecf: POP
00000ed0: SWAP2
00000ed1: SWAP1
00000ed2: POP
00000ed3: JUMP
00000ed4: JUMPDEST
00000ed5: PUSH1 0x00
00000ed7: PUSH1 0x20
00000ed9: DUP3
00000eda: ADD
00000edb: SWAP1
00000edc: POP
00000edd: DUP2
00000ede: DUP2
00000edf: SUB
00000ee0: PUSH1 0x00
00000ee2: DUP4
00000ee3: ADD
00000ee4: MSTORE
00000ee5: PUSH2 0x0eed
00000ee8: DUP2
00000ee9: PUSH2 0x0d60
00000eec: JUMP
00000eed: JUMPDEST
00000eee: SWAP1
00000eef: POP
00000ef0: SWAP2
00000ef1: SWAP1
00000ef2: POP
00000ef3: JUMP
00000ef4: JUMPDEST
00000ef5: PUSH1 0x00
00000ef7: PUSH1 0x20
00000ef9: DUP3
00000efa: ADD
00000efb: SWAP1
00000efc: POP
00000efd: DUP2
00000efe: DUP2
00000eff: SUB
00000f00: PUSH1 0x00
00000f02: DUP4
00000f03: ADD
00000f04: MSTORE
00000f05: PUSH2 0x0f0d
00000f08: DUP2
00000f09: PUSH2 0x0d83
00000f0c: JUMP
00000f0d: JUMPDEST
00000f0e: SWAP1
00000f0f: POP
00000f10: SWAP2
00000f11: SWAP1
00000f12: POP
00000f13: JUMP
00000f14: JUMPDEST
00000f15: PUSH1 0x00
00000f17: PUSH1 0x20
00000f19: DUP3
00000f1a: ADD
00000f1b: SWAP1
00000f1c: POP
00000f1d: PUSH2 0x0f29
00000f20: PUSH1 0x00
00000f22: DUP4
00000f23: ADD
00000f24: DUP5
00000f25: PUSH2 0x0da6
00000f28: JUMP
00000f29: JUMPDEST
00000f2a: SWAP3
00000f2b: SWAP2
00000f2c: POP
00000f2d: POP
00000f2e: JUMP
00000f2f: JUMPDEST
00000f30: PUSH1 0x00
00000f32: PUSH1 0x20
00000f34: DUP3
00000f35: ADD
00000f36: SWAP1
00000f37: POP
00000f38: PUSH2 0x0f44
00000f3b: PUSH1 0x00
00000f3d: DUP4
00000f3e: ADD
00000f3f: DUP5
00000f40: PUSH2 0x0db5
00000f43: JUMP
00000f44: JUMPDEST
00000f45: SWAP3
00000f46: SWAP2
00000f47: POP
00000f48: POP
00000f49: JUMP
00000f4a: JUMPDEST
00000f4b: PUSH1 0x00
00000f4d: DUP2
00000f4e: MLOAD
00000f4f: SWAP1
00000f50: POP
00000f51: SWAP2
00000f52: SWAP1
00000f53: POP
00000f54: JUMP
00000f55: JUMPDEST
00000f56: PUSH1 0x00
00000f58: DUP2
00000f59: SWAP1
00000f5a: POP
00000f5b: SWAP3
00000f5c: SWAP2
00000f5d: POP
00000f5e: POP
00000f5f: JUMP
00000f60: JUMPDEST
00000f61: PUSH1 0x00
00000f63: DUP3
00000f64: DUP3
00000f65: MSTORE
00000f66: PUSH1 0x20
00000f68: DUP3
00000f69: ADD
00000f6a: SWAP1
00000f6b: POP
00000f6c: SWAP3
00000f6d: SWAP2
00000f6e: POP
00000f6f: POP
00000f70: JUMP
00000f71: JUMPDEST
00000f72: PUSH1 0x00
00000f74: PUSH2 0x0f7c
00000f77: DUP3
00000f78: PUSH2 0x109d
00000f7b: JUMP
00000f7c: JUMPDEST
00000f7d: SWAP2
00000f7e: POP
00000f7f: PUSH2 0x0f87
00000f82: DUP4
00000f83: PUSH2 0x109d
00000f86: JUMP
00000f87: JUMPDEST
00000f88: SWAP3
00000f89: POP
00000f8a: DUP3
00000f8b: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00000fac: SUB
00000fad: DUP3
00000fae: GT
00000faf: ISZERO
00000fb0: PUSH2 0x0fbc
00000fb3: JUMPI
00000fb4: PUSH2 0x0fbb
00000fb7: PUSH2 0x113f
00000fba: JUMP
00000fbb: JUMPDEST
00000fbc: JUMPDEST
00000fbd: DUP3
00000fbe: DUP3
00000fbf: ADD
00000fc0: SWAP1
00000fc1: POP
00000fc2: SWAP3
00000fc3: SWAP2
00000fc4: POP
00000fc5: POP
00000fc6: JUMP
00000fc7: JUMPDEST
00000fc8: PUSH1 0x00
00000fca: PUSH2 0x0fd2
00000fcd: DUP3
00000fce: PUSH2 0x109d
00000fd1: JUMP
00000fd2: JUMPDEST
00000fd3: SWAP2
00000fd4: POP
00000fd5: PUSH2 0x0fdd
00000fd8: DUP4
00000fd9: PUSH2 0x109d
00000fdc: JUMP
00000fdd: JUMPDEST
00000fde: SWAP3
00000fdf: POP
00000fe0: DUP2
00000fe1: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00001002: DIV
00001003: DUP4
00001004: GT
00001005: DUP3
00001006: ISZERO
00001007: ISZERO
00001008: AND
00001009: ISZERO
0000100a: PUSH2 0x1016
0000100d: JUMPI
0000100e: PUSH2 0x1015
00001011: PUSH2 0x113f
00001014: JUMP
00001015: JUMPDEST
00001016: JUMPDEST
00001017: DUP3
00001018: DUP3
00001019: MUL
0000101a: SWAP1
0000101b: POP
0000101c: SWAP3
0000101d: SWAP2
0000101e: POP
0000101f: POP
00001020: JUMP
00001021: JUMPDEST
00001022: PUSH1 0x00
00001024: PUSH2 0x102c
00001027: DUP3
00001028: PUSH2 0x109d
0000102b: JUMP
0000102c: JUMPDEST
0000102d: SWAP2
0000102e: POP
0000102f: PUSH2 0x1037
00001032: DUP4
00001033: PUSH2 0x109d
00001036: JUMP
00001037: JUMPDEST
00001038: SWAP3
00001039: POP
0000103a: DUP3
0000103b: DUP3
0000103c: LT
0000103d: ISZERO
0000103e: PUSH2 0x104a
00001041: JUMPI
00001042: PUSH2 0x1049
00001045: PUSH2 0x113f
00001048: JUMP
00001049: JUMPDEST
0000104a: JUMPDEST
0000104b: DUP3
0000104c: DUP3
0000104d: SUB
0000104e: SWAP1
0000104f: POP
00001050: SWAP3
00001051: SWAP2
00001052: POP
00001053: POP
00001054: JUMP
00001055: JUMPDEST
00001056: PUSH1 0x00
00001058: PUSH2 0x1060
0000105b: DUP3
0000105c: PUSH2 0x107d
0000105f: JUMP
00001060: JUMPDEST
00001061: SWAP1
00001062: POP
00001063: SWAP2
00001064: SWAP1
00001065: POP
00001066: JUMP
00001067: JUMPDEST
00001068: PUSH1 0x00
0000106a: DUP2
0000106b: ISZERO
0000106c: ISZERO
0000106d: SWAP1
0000106e: POP
0000106f: SWAP2
00001070: SWAP1
00001071: POP
00001072: JUMP
00001073: JUMPDEST
00001074: PUSH1 0x00
00001076: DUP2
00001077: SWAP1
00001078: POP
00001079: SWAP2
0000107a: SWAP1
0000107b: POP
0000107c: JUMP
0000107d: JUMPDEST
0000107e: PUSH1 0x00
00001080: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001095: DUP3
00001096: AND
00001097: SWAP1
00001098: POP
00001099: SWAP2
0000109a: SWAP1
0000109b: POP
0000109c: JUMP
0000109d: JUMPDEST
0000109e: PUSH1 0x00
000010a0: DUP2
000010a1: SWAP1
000010a2: POP
000010a3: SWAP2
000010a4: SWAP1
000010a5: POP
000010a6: JUMP
000010a7: JUMPDEST
000010a8: PUSH1 0x00
000010aa: PUSH1 0xff
000010ac: DUP3
000010ad: AND
000010ae: SWAP1
000010af: POP
000010b0: SWAP2
000010b1: SWAP1
000010b2: POP
000010b3: JUMP
000010b4: JUMPDEST
000010b5: DUP3
000010b6: DUP2
000010b7: DUP4
000010b8: CALLDATACOPY
000010b9: PUSH1 0x00
000010bb: DUP4
000010bc: DUP4
000010bd: ADD
000010be: MSTORE
000010bf: POP
000010c0: POP
000010c1: POP
000010c2: JUMP
000010c3: JUMPDEST
000010c4: PUSH1 0x00
000010c6: JUMPDEST
000010c7: DUP4
000010c8: DUP2
000010c9: LT
000010ca: ISZERO
000010cb: PUSH2 0x10e1
000010ce: JUMPI
000010cf: DUP1
000010d0: DUP3
000010d1: ADD
000010d2: MLOAD
000010d3: DUP2
000010d4: DUP5
000010d5: ADD
000010d6: MSTORE
000010d7: PUSH1 0x20
000010d9: DUP2
000010da: ADD
000010db: SWAP1
000010dc: POP
000010dd: PUSH2 0x10c6
000010e0: JUMP
000010e1: JUMPDEST
000010e2: DUP4
000010e3: DUP2
000010e4: GT
000010e5: ISZERO
000010e6: PUSH2 0x10f0
000010e9: JUMPI
000010ea: PUSH1 0x00
000010ec: DUP5
000010ed: DUP5
000010ee: ADD
000010ef: MSTORE
000010f0: JUMPDEST
000010f1: POP
000010f2: POP
000010f3: POP
000010f4: POP
000010f5: JUMP
000010f6: JUMPDEST
000010f7: PUSH1 0x00
000010f9: PUSH2 0x1101
000010fc: DUP3
000010fd: PUSH2 0x109d
00001100: JUMP
00001101: JUMPDEST
00001102: SWAP2
00001103: POP
00001104: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00001125: DUP3
00001126: EQ
00001127: ISZERO
00001128: PUSH2 0x1134
0000112b: JUMPI
0000112c: PUSH2 0x1133
0000112f: PUSH2 0x113f
00001132: JUMP
00001133: JUMPDEST
00001134: JUMPDEST
00001135: PUSH1 0x01
00001137: DUP3
00001138: ADD
00001139: SWAP1
0000113a: POP
0000113b: SWAP2
0000113c: SWAP1
0000113d: POP
0000113e: JUMP
0000113f: JUMPDEST
00001140: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00001161: PUSH1 0x00
00001163: MSTORE
00001164: PUSH1 0x11
00001166: PUSH1 0x04
00001168: MSTORE
00001169: PUSH1 0x24
0000116b: PUSH1 0x00
0000116d: REVERT
0000116e: JUMPDEST
0000116f: PUSH32 0x696e76616c696420676173207072696365000000000000000000000000000000
00001190: PUSH1 0x00
00001192: DUP3
00001193: ADD
00001194: MSTORE
00001195: POP
00001196: JUMP
00001197: JUMPDEST
00001198: PUSH32 0x6e6f7420656e6f756768207369676e6174757265730000000000000000000000
000011b9: PUSH1 0x00
000011bb: DUP3
000011bc: ADD
000011bd: MSTORE
000011be: POP
000011bf: JUMP
000011c0: JUMPDEST
000011c1: PUSH32 0x696e76616c6964206e6f6e636500000000000000000000000000000000000000
000011e2: PUSH1 0x00
000011e4: DUP3
000011e5: ADD
000011e6: MSTORE
000011e7: POP
000011e8: JUMP
000011e9: JUMPDEST
000011ea: PUSH32 0x666f7262696464656e2063616c6c000000000000000000000000000000000000
0000120b: PUSH1 0x00
0000120d: DUP3
0000120e: ADD
0000120f: MSTORE
00001210: POP
00001211: JUMP
00001212: JUMPDEST
00001213: PUSH32 0x696e76616c6964207369676e6174757265730000000000000000000000000000
00001234: PUSH1 0x00
00001236: DUP3
00001237: ADD
00001238: MSTORE
00001239: POP
0000123a: JUMP
0000123b: JUMPDEST
0000123c: PUSH32 0x7472616e73616374696f6e206661696c65640000000000000000000000000000
0000125d: PUSH1 0x00
0000125f: DUP3
00001260: ADD
00001261: MSTORE
00001262: POP
00001263: JUMP
00001264: JUMPDEST
00001265: PUSH2 0x126d
00001268: DUP2
00001269: PUSH2 0x1055
0000126c: JUMP
0000126d: JUMPDEST
0000126e: DUP2
0000126f: EQ
00001270: PUSH2 0x1278
00001273: JUMPI
00001274: PUSH1 0x00
00001276: DUP1
00001277: REVERT
00001278: JUMPDEST
00001279: POP
0000127a: JUMP
0000127b: JUMPDEST
0000127c: PUSH2 0x1284
0000127f: DUP2
00001280: PUSH2 0x10a7
00001283: JUMP
00001284: JUMPDEST
00001285: DUP2
00001286: EQ
00001287: PUSH2 0x128f
0000128a: JUMPI
0000128b: PUSH1 0x00
0000128d: DUP1
0000128e: REVERT
0000128f: JUMPDEST
00001290: POP
00001291: JUMP
00001292: INVALID
00001293: LOG2
00001294: PUSH5 0x6970667358
0000129a: UNKNOWN(0x22)
0000129b: SLT
0000129c: KECCAK256
0000129d: BLOBBASEFEE
0000129e: PUSH32 0x120bb59664a117e9cff81052047e6388cc2463a615d4fe4867e5500589116473
000012bf: PUSH16

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: 0xb68b2b619e4aa4169398661f88a941221f8075c1dc7de56a26800bd0746d695d
call_targets: 0x8c33d309157553d69413d98ea853424689c0c2b1
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xb68b2b619e4aa4169398661f88a941221f8075c1dc7de56a26800bd0746d695d",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x8c33d309157553d69413d98ea853424689c0c2b1"
    ],
    "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": "0x2f54bf6e",
            "selector": "0x2f54bf6e",
            "calldata_variants": [
                "0x2f54bf6e",
                "0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x42cde4e8",
            "selector": "0x42cde4e8",
            "calldata_variants": [
                "0x42cde4e8",
                "0x42cde4e80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x5bebe4ee",
            "selector": "0x5bebe4ee",
            "calldata_variants": [
                "0x5bebe4ee",
                "0x5bebe4ee0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x7ecebe00",
            "selector": "0x7ecebe00",
            "calldata_variants": [
                "0x7ecebe00",
                "0x7ecebe000000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdaccfbb4",
            "selector": "0xdaccfbb4",
            "calldata_variants": [
                "0xdaccfbb4",
                "0xdaccfbb40000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 932,
            "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: 0xb68b2b619e4aa4169398661f88a941221f8075c1dc7de56a26800bd0746d695d
call_targets: 0x8c33d309157553d69413d98ea853424689c0c2b1
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xb68b2b619e4aa4169398661f88a941221f8075c1dc7de56a26800bd0746d695d",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x8c33d309157553d69413d98ea853424689c0c2b1"
    ],
    "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": "0x2f54bf6e",
            "selector": "0x2f54bf6e",
            "calldata_variants": [
                "0x2f54bf6e",
                "0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x42cde4e8",
            "selector": "0x42cde4e8",
            "calldata_variants": [
                "0x42cde4e8",
                "0x42cde4e80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x5bebe4ee",
            "selector": "0x5bebe4ee",
            "calldata_variants": [
                "0x5bebe4ee",
                "0x5bebe4ee0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x7ecebe00",
            "selector": "0x7ecebe00",
            "calldata_variants": [
                "0x7ecebe00",
                "0x7ecebe000000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdaccfbb4",
            "selector": "0xdaccfbb4",
            "calldata_variants": [
                "0xdaccfbb4",
                "0xdaccfbb40000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 932,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 1,
    "guards_detected": []
}