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

Analysis Run

86ffcb0f-c176-4eb3-bd5c-53eb6a02beb1

complete
Chain ID
1
Address
Block Number
Created
Fri, Jan 2, 2026 3:06 AM
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
31197 report.consolidate complete 1 / 1 3 months ago
76996 artifact.fetch complete 1 / 3 2 weeks ago
76997 tool.cast_disasm complete 1 / 3 2 weeks ago
76998 analysis.bundle complete 1 / 3 2 weeks ago
76999 capability.graph complete 1 / 3 2 weeks ago
77000 detector.run complete 1 / 3 2 weeks ago
77001 validation.fork complete 1 / 3 2 weeks ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
0
No findings?
yes
Summary
No concrete, exploitable value-extraction path identified from the provided bytecode alone.
View stderr
[codex:719182] OpenAI Codex v0.77.0 (research preview)
[codex:719182] --------
[codex:719182] workdir: /tmp/codex-multi-512cwfyn
[codex:719182] model: gpt-5.2-codex
[codex:719182] provider: openai
[codex:719182] approval: never
[codex:719182] sandbox: read-only
[codex:719182] reasoning effort: xhigh
[codex:719182] reasoning summaries: auto
[codex:719182] session id: 019b7ca4-443f-7123-b4ed-adc964e03f4c
[codex:719182] --------
[codex:719182] user
[codex:719182] 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:719182] 
[codex:719182] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:719182] 
[codex:719182] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:719182] - Gas inefficiency, code quality, or best practices
[codex:719182] - Theoretical vulnerabilities without a clear extraction path
[codex:719182] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:719182] - Issues requiring social engineering or off-chain coordination
[codex:719182] 
[codex:719182] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:719182] - CALL/DELEGATECALL with controllable destination or calldata
[codex:719182] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:719182] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:719182] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:719182] - External calls before state updates (reentrancy)
[codex:719182] - SELFDESTRUCT with controllable beneficiary
[codex:719182] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:719182] 
[codex:719182] For each finding, you MUST explain:
[codex:719182] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:719182] 2. The concrete sequence of transactions to extract value
[codex:719182] 3. Why you believe this is exploitable (not just suspicious)
[codex:719182] 
[codex:719182] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:719182] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:719182] 
[codex:719182] Output MUST be valid JSON matching the provided schema.
[codex:719182] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:719182] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:719182] mcp startup: no servers
[codex:719182] 
[codex:719182] thinking
[codex:719182] **Reading BYTECODE_BUNDLE file**
[codex:719182] exec
[codex:719182] /bin/bash -lc ls in /tmp/codex-multi-512cwfyn succeeded in 5ms:
[codex:719182] BYTECODE_BUNDLE.txt
[codex:719182] codex-output-schema.json
[codex:719182] exec
[codex:719182] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-512cwfyn succeeded in 5ms:
[codex:719182] Runtime bytecode bundle for best-effort auditing.
[codex:719182] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:719182] 
[codex:719182] FILE: runtime_bytecode.hex
[codex:719182] 0x606060405236156101015763ffffffff60e060020a600035041663025e7c278114610153578063173825d91461018257806320ea8d86146101a05780632f54bf6e146101b55780633411c81c146101e557806354741525146102185780637065cb4814610244578063784547a7146102625780638b51d13f146102895780639ace38c2146102ae578063a0e67e2b1461036b578063a8abe69a146103d6578063b5dc40c314610451578063b77bf600146104bf578063ba51a6df146104e1578063c01a8c84146104f6578063c64274741461050b578063d74f8edd14610580578063dc8452cd146105a2578063e20056e6146105c4578063ee22610b146105e8575b6101515b600034111561014e57604080513481529051600160a060020a033316917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25b5b565b005b341561015b57fe5b6101666004356105fd565b60408051600160a060020a039092168252519081900360200190f35b341561018a57fe5b610151600160a060020a036004351661062f565b005b34156101a857fe5b6101516004356107e0565b005b34156101bd57fe5b6101d1600160a060020a03600435166108bd565b604080519115158252519081900360200190f35b34156101ed57fe5b6101d1600435600160a060020a03602435166108d2565b604080519115158252519081900360200190f35b341561022057fe5b610232600435151560243515156108f2565b60408051918252519081900360200190f35b341561024c57fe5b610151600160a060020a0360043516610961565b005b341561026a57fe5b6101d1600435610a98565b604080519115158252519081900360200190f35b341561029157fe5b610232600435610b2c565b60408051918252519081900360200190f35b34156102b657fe5b6102c1600435610bab565b60408051600160a060020a03861681526020810185905282151560608201526080918101828152845460026000196101006001841615020190911604928201839052909160a0830190859080156103595780601f1061032e57610100808354040283529160200191610359565b820191906000526020600020905b81548152906001019060200180831161033c57829003601f168201915b50509550505050505060405180910390f35b341561037357fe5b61037b610bdf565b60408051602080825283518183015283519192839290830191858101910280838382156103c3575b8051825260208311156103c357601f1990920191602091820191016103a3565b5050509050019250505060405180910390f35b34156103de57fe5b61037b60043560243560443515156064351515610c48565b60408051602080825283518183015283519192839290830191858101910280838382156103c3575b8051825260208311156103c357601f1990920191602091820191016103a3565b5050509050019250505060405180910390f35b341561045957fe5b61037b600435610d7d565b60408051602080825283518183015283519192839290830191858101910280838382156103c3575b8051825260208311156103c357601f1990920191602091820191016103a3565b5050509050019250505060405180910390f35b34156104c757fe5b610232610f05565b60408051918252519081900360200190f35b34156104e957fe5b610151600435610f0b565b005b34156104fe57fe5b610151600435610f9b565b005b341561051357fe5b604080516020600460443581810135601f8101849004840285018401909552848452610232948235600160a060020a031694602480359560649492939190920191819084018382808284375094965061108995505050505050565b60408051918252519081900360200190f35b341561058857fe5b6102326110a9565b60408051918252519081900360200190f35b34156105aa57fe5b6102326110ae565b60408051918252519081900360200190f35b34156105cc57fe5b610151600160a060020a03600435811690602435166110b4565b005b34156105f057fe5b610151600435611270565b005b600380548290811061060b57fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600030600160a060020a031633600160a060020a03161415156106525760006000fd5b600160a060020a038216600090815260026020526040902054829060ff16151561067c5760006000fd5b600160a060020a0383166000908152600260205260408120805460ff1916905591505b600354600019018210156107775782600160a060020a03166003838154811015156106c657fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316141561076b5760038054600019810190811061070757fe5b906000526020600020900160005b9054906101000a9004600160a060020a031660038381548110151561073657fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a03160217905550610777565b5b60019091019061069f565b60038054600019019061078a90826114cb565b5060035460045411156107a3576003546107a390610f0b565b5b604051600160a060020a038416907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a25b5b505b5050565b33600160a060020a03811660009081526002602052604090205460ff1615156108095760006000fd5b600082815260016020908152604080832033600160a060020a038116855292529091205483919060ff16151561083f5760006000fd5b600084815260208190526040902060030154849060ff16156108615760006000fd5b6000858152600160209081526040808320600160a060020a0333168085529252808320805460ff191690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35b5b505b50505b5050565b60026020526000908152604090205460ff1681565b600160209081526000928352604080842090915290825290205460ff1681565b6000805b6005548110156109595783801561091f575060008181526020819052604090206003015460ff16155b806109435750828015610943575060008181526020819052604090206003015460ff165b5b15610950576001820191505b5b6001016108f6565b5b5092915050565b30600160a060020a031633600160a060020a03161415156109825760006000fd5b600160a060020a038116600090815260026020526040902054819060ff16156109ab5760006000fd5b81600160a060020a03811615156109c25760006000fd5b60038054905060010160045460068211806109dc57508181115b806109e5575080155b806109ee575081155b156109f95760006000fd5b600160a060020a0385166000908152600260205260409020805460ff191660019081179091556003805490918101610a3183826114cb565b916000526020600020900160005b8154600160a060020a03808a166101009390930a838102910219909116179091556040519091507ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25b5b50505b505b505b50565b600080805b600354811015610b245760008481526001602052604081206003805491929184908110610ac657fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610b08576001820191505b600454821415610b1b5760019250610b24565b5b600101610a9d565b5b5050919050565b6000805b600354811015610ba45760008381526001602052604081206003805491929184908110610b5957fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610b9b576001820191505b5b600101610b30565b5b50919050565b6000602081905290815260409020805460018201546003830154600160a060020a0390921692909160029091019060ff1684565b610be761151f565b6003805480602002602001604051908101604052809291908181526020018280548015610c3d57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610c1f575b505050505090505b90565b610c5061151f565b610c5861151f565b60006000600554604051805910610c6c5750595b908082528060200260200182016040525b50925060009150600090505b600554811015610d0657858015610cb2575060008181526020819052604090206003015460ff16155b80610cd65750848015610cd6575060008181526020819052604090206003015460ff165b5b15610cfd57808383815181101515610ceb57fe5b60209081029091010152600191909101905b5b600101610c89565b878703604051805910610d165750595b908082528060200260200182016040525b5093508790505b86811015610d71578281815181101515610d4457fe5b9060200190602002015184898303815181101515610d5e57fe5b602090810290910101525b600101610d2e565b5b505050949350505050565b610d8561151f565b610d8d61151f565b6003546040516000918291805910610da25750595b908082528060200260200182016040525b50925060009150600090505b600354811015610e875760008581526001602052604081206003805491929184908110610de857fe5b906000526020600020900160005b9054600160a060020a036101009290920a900416815260208101919091526040016000205460ff1615610e7e576003805482908110610e3157fe5b906000526020600020900160005b9054906101000a9004600160a060020a03168383815181101515610e5f57fe5b600160a060020a03909216602092830290910190910152600191909101905b5b600101610dbf565b81604051805910610e955750595b908082528060200260200182016040525b509350600090505b81811015610efc578281815181101515610ec457fe5b906020019060200201518482815181101515610edc57fe5b600160a060020a039092166020928302909101909101525b600101610eae565b5b505050919050565b60055481565b30600160a060020a031633600160a060020a0316141515610f2c5760006000fd5b600354816006821180610f3e57508181115b80610f47575080155b80610f50575081155b15610f5b5760006000fd5b60048390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a15b5b50505b50565b33600160a060020a03811660009081526002602052604090205460ff161515610fc45760006000fd5b6000828152602081905260409020548290600160a060020a03161515610fea5760006000fd5b600083815260016020908152604080832033600160a060020a038116855292529091205484919060ff161561101f5760006000fd5b6000858152600160208181526040808420600160a060020a0333168086529252808420805460ff1916909317909255905187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a36108b385611270565b5b5b50505b505b5050565b60006110968484846113d8565b90506110a181610f9b565b5b9392505050565b600681565b60045481565b600030600160a060020a031633600160a060020a03161415156110d75760006000fd5b600160a060020a038316600090815260026020526040902054839060ff1615156111015760006000fd5b600160a060020a038316600090815260026020526040902054839060ff161561112a5760006000fd5b600092505b6003548310156111d25784600160a060020a031660038481548110151561115257fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031614156111c6578360038481548110151561119157fe5b906000526020600020900160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506111d2565b5b60019092019161112f565b600160a060020a03808616600081815260026020526040808220805460ff1990811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a2604051600160a060020a038516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25b5b505b505b505050565b600081815260208190526040812060030154829060ff16156112925760006000fd5b61129b83610a98565b156107d9576000838152602081905260409081902060038101805460ff19166001908117909155815481830154935160028085018054959850600160a060020a03909316959492939192839285926000199183161561010002919091019091160480156113495780601f1061131e57610100808354040283529160200191611349565b820191906000526020600020905b81548152906001019060200180831161132c57829003601f168201915b505091505060006040518083038185876185025a03f192505050156113985760405183907f33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed7590600090a26107d9565b60405183907f526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b7923690600090a260038201805460ff191690555b5b5b5b505050565b600083600160a060020a03811615156113f15760006000fd5b60055460408051608081018252600160a060020a0388811682526020808301898152838501898152600060608601819052878152808452959095208451815473ffffffffffffffffffffffffffffffffffffffff191694169390931783555160018301559251805194965091939092611471926002850192910190611543565b50606091909101516003909101805460ff191691151591909117905560058054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a25b5b509392505050565b8154818355818115116107d9576000838152602090206107d99181019083016115c2565b5b505050565b8154818355818115116107d9576000838152602090206107d99181019083016115c2565b5b505050565b60408051602081019091526000815290565b60408051602081019091526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061158457805160ff19168380011785556115b1565b828001600101855582156115b1579182015b828111156115b1578251825591602001919060010190611596565b5b506115be9291506115c2565b5090565b610c4591905b808211156115be57600081556001016115c8565b5090565b905600a165627a7a723058208eb8f030d0c8220c52ec98193e7659b9b2bc747d3b869347ae76e4ccbb7f7f330029
[codex:719182] 
[codex:719182] thinking
[codex:719182] **Preparing bytecode analysis script**
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import sys, textwrap
[codex:719182] hexstr=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].strip().split('\\n')[0]
[codex:719182] # Actually file has 'FILE: runtime_bytecode.hex' then '0x...' one line. We'll parse using find.
[codex:719182] import re
[codex:719182] m=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read())
[codex:719182] hexstr=m.group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182] # opcode map
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 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:719182] 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:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182] 
[codex:719182] # disassemble; gather offsets for key ops
[codex:719182] key_ops={0xf1:'CALL',0xf2:'CALLCODE',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xff:'SELFDESTRUCT'}
[codex:719182] 
[codex:719182] pc=0
[codex:719182] ops=[]
[codex:719182] while pc<len(code):
[codex:719182]     op=code[pc]
[codex:719182]     name=opnames.get(op, f'OP_{op:02x}')
[codex:719182]     start=pc
[codex:719182]     pc+=1
[codex:719182]     imm=None
[codex:719182]     if 0x60 <= op <= 0x7f:
[codex:719182]         n=op-0x5f
[codex:719182]         imm=code[pc:pc+n]
[codex:719182]         pc+=n
[codex:719182]     ops.append((start, op, name, imm))
[codex:719182] 
[codex:719182] # print key ops with context
[codex:719182] for i,(pc,op,name,imm) in enumerate(ops):
[codex:719182]     if op in key_ops:
[codex:719182]         ctx=ops[max(0,i-5):i+6]
[codex:719182]         print(f'@{pc:04x} {name}')
[codex:719182]         for (cpc,cop,cname,cimm) in ctx:
[codex:719182]             if cimm is not None:
[codex:719182]                 print(f'  {cpc:04x}: {cname} 0x{cimm.hex()}')
[codex:719182]             else:
[codex:719182]                 print(f'  {cpc:04x}: {cname}')
[codex:719182]         print('---')
[codex:719182] 
[codex:719182] # print any SELFDESTRUCT
[codex:719182] print('selfdestructs:', [pc for pc,op,_,_ in ops if op==0xff])
[codex:719182] 
[codex:719182] # Count DELEGATECALL etc
[codex:719182] from collections import Counter
[codex:719182] ctr=Counter(op for _,op,_,_ in ops)
[codex:719182] print('counts', {opnames[k]:ctr.get(k,0) for k in [0xf1,0xf2,0xf4,0xfa,0xff]})
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 32ms:
[codex:719182] @135f CALL
[codex:719182]   1358: DUP6
[codex:719182]   1359: DUP8
[codex:719182]   135a: PUSH2 0x8502
[codex:719182]   135d: GAS
[codex:719182]   135e: SUB
[codex:719182]   135f: CALL
[codex:719182]   1360: SWAP3
[codex:719182]   1361: POP
[codex:719182]   1362: POP
[codex:719182]   1363: POP
[codex:719182]   1364: ISZERO
[codex:719182] ---
[codex:719182] selfdestructs: []
[codex:719182] counts {'CALL': 1, 'CALLCODE': 0, 'DELEGATECALL': 0, 'STATICCALL': 0, 'SELFDESTRUCT': 0}
[codex:719182] 
[codex:719182] thinking
[codex:719182] **Analyzing CALL instruction context**
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182] # simple disassembler
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 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:719182] 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:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182] 
[codex:719182] # disassemble all, but focus on region around 0x12a0-0x13a0
[codex:719182] start=0x1280
[codex:719182] end=0x13d0
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182]     op=code[pc]
[codex:719182]     name=opnames.get(op, f'OP_{op:02x}')
[codex:719182]     pc0=pc
[codex:719182]     pc+=1
[codex:719182]     imm=None
[codex:719182]     if 0x60 <= op <= 0x7f:
[codex:719182]         n=op-0x5f
[codex:719182]         imm=code[pc:pc+n]
[codex:719182]         pc+=n
[codex:719182]     if start <= pc0 <= end:
[codex:719182]         if imm is not None:
[codex:719182]             print(f'{pc0:04x}: {name} 0x{imm.hex()}')
[codex:719182]         else:
[codex:719182]             print(f'{pc0:04x}: {name}')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 26ms:
[codex:719182] 1281: ADD
[codex:719182] 1282: SLOAD
[codex:719182] 1283: DUP3
[codex:719182] 1284: SWAP1
[codex:719182] 1285: PUSH1 0xff
[codex:719182] 1287: AND
[codex:719182] 1288: ISZERO
[codex:719182] 1289: PUSH2 0x1292
[codex:719182] 128c: JUMPI
[codex:719182] 128d: PUSH1 0x00
[codex:719182] 128f: PUSH1 0x00
[codex:719182] 1291: REVERT
[codex:719182] 1292: JUMPDEST
[codex:719182] 1293: PUSH2 0x129b
[codex:719182] 1296: DUP4
[codex:719182] 1297: PUSH2 0x0a98
[codex:719182] 129a: JUMP
[codex:719182] 129b: JUMPDEST
[codex:719182] 129c: ISZERO
[codex:719182] 129d: PUSH2 0x07d9
[codex:719182] 
[codex:719182] thinking
[codex:719182] **Analyzing EVM call behavior and potential vulnerabilities**
[codex:719182] 
[codex:719182] I'm piecing together how the CALL instruction operates here, trying to determine if it's a safe token transfer or a risky external call with value and gas. I’m tracing the stack state and function selectors to spot any unauthorized value transfers or admin functions, considering if reentrancy protections or access controls are in place. It’s complex, but I’m simulating the stack symbolically and parsing dispatch logic to uncover any exploitable paths.
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182] # disassembler
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 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:719182] 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:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182] 
[codex:719182] start=0x0a80
[codex:719182] end=0x0b20
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182]     op=code[pc]; name=opnames.get(op, f'OP_{op:02x}')
[codex:719182]     pc0=pc; pc+=1
[codex:719182]     imm=None
[codex:719182]     if 0x60 <= op <= 0x7f:
[codex:719182]         n=op-0x5f
[codex:719182]         imm=code[pc:pc+n]; pc+=n
[codex:719182]     if start <= pc0 <= end:
[codex:719182]         if imm is not None:
[codex:719182]             print(f'{pc0:04x}: {name} 0x{imm.hex()}')
[codex:719182]         else:
[codex:719182]             print(f'{pc0:04x}: {name}')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 33ms:
[codex:719182] 0a88: SWAP1
[codex:719182] 0a89: PUSH1 0x00
[codex:719182] 0a8b: SWAP1
[codex:719182] 0a8c: LOG2
[codex:719182] 0a8d: JUMPDEST
[codex:719182] 0a8e: JUMPDEST
[codex:719182] 0a8f: POP
[codex:719182] 0a90: POP
[codex:719182] 0a91: JUMPDEST
[codex:719182] 0a92: POP
[codex:719182] 0a93: JUMPDEST
[codex:719182] 0a94: POP
[codex:719182] 0a95: JUMPDEST
[codex:719182] 0a96: POP
[codex:719182] 0a97: JUMP
[codex:719182] 0a98: JUMPDEST
[codex:719182] 0a99: PUSH1 0x00
[codex:719182] 0a9b: DUP1
[codex:719182] 0a9c: DUP1
[codex:719182] 0a9d: JUMPDEST
[codex:719182] 
[codex:719182] thinking
[codex:719182] **Analyzing contract call sequence and state updates**
[codex:719182] 
[codex:719182] I'm digging into a tricky EVM function that seems related to ERC721's safeTransferFrom, focusing on how it updates state before making an external call—likely to onERC721Received—and checking if that call could enable reentrancy or vulnerabilities. I’m tracing the stack and memory around the CALL opcode carefully to understand if value is transferred or if the state updates properly guard against exploits. It’s a dense puzzle, but I want to clarify how the contract manages state and external calls to rule out risks.
[codex:719182] exec
[codex:719182] /bin/bash -lc 'which evm || which evmdasm || which hevm || which solc' in /tmp/codex-multi-512cwfyn exited 1 in 9ms:
[codex:719182] 
[codex:719182] 
[codex:719182] 
[codex:719182] thinking
[codex:719182] **Designing symbolic stack execution for call arguments**
[codex:719182] 
[codex:719182] I'm working through building a symbolic interpreter in Python to track the EVM stack around a function call site, starting at a jump destination with a symbolic initial stack; my goal is to identify which symbolic stack elements correspond to the call arguments—especially to check if the call value is zero—while approximating the effects of internal calls and loops to stay focused on the straight-line path leading to the CALL instruction.
[codex:719182] thinking
[codex:719182] **Planning symbolic path exploration for stack analysis**
[codex:719182] 
[codex:719182] I’m preparing to build a symbolic executor in Python that explores possible execution paths between two points in the bytecode, handling branches by exploring both sides with bounded depth to avoid state explosion; this will help me accurately track the stack state at the CALL instruction by modeling symbolic values for memory and storage loads, while approximating or skipping loops to focus on the core call argument computations.
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182] 
[codex:719182] # opcode info
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 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:719182] 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:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182] 
[codex:719182] # decode into ops list with pc
[codex:719182] ops=[]
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182]     op=code[pc]; name=opnames.get(op, f'OP_{op:02x}')
[codex:719182]     pc0=pc; pc+=1; imm=None
[codex:719182]     if 0x60 <= op <= 0x7f:
[codex:719182]         n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:719182]     ops.append((pc0,op,name,imm))
[codex:719182] 
[codex:719182] # map pc->index
[codex:719182] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:719182] 
[codex:719182] # simple symbolic stack value class
[codex:719182] class Val:
[codex:719182]     def __init__(self, kind, data=None):
[codex:719182]         self.kind=kind; self.data=data
[codex:719182]     def __repr__(self):
[codex:719182]         if self.kind=='const':
[codex:719182]             return hex(self.data)
[codex:719182]         return f\"{self.kind}({self.data})\" if self.data is not None else self.kind
[codex:719182] 
[codex:719182] def const(v): return Val('const', v)
[codex:719182] 
[codex:719182] def simplify(op, a, b=None):
[codex:719182]     # only some ops
[codex:719182]     if b is None:
[codex:719182]         if op=='ISZERO' and a.kind=='const':
[codex:719182]             return const(1 if a.data==0 else 0)
[codex:719182]     if b is not None and a.kind=='const' and b.kind=='const':
[codex:719182]         if op=='ADD': return const((a.data+b.data)&((1<<256)-1))
[codex:719182]         if op=='SUB': return const((a.data-b.data)&((1<<256)-1))
[codex:719182]         if op=='MUL': return const((a.data*b.data)&((1<<256)-1))
[codex:719182]         if op=='DIV': return const(0 if b.data==0 else a.data//b.data)
[codex:719182]         if op=='AND': return const(a.data & b.data)
[codex:719182]         if op=='OR': return const(a.data | b.data)
[codex:719182]         if op=='EQ': return const(1 if a.data==b.data else 0)
[codex:719182]         if op=='LT': return const(1 if a.data<b.data else 0)
[codex:719182]         if op=='GT': return const(1 if a.data>b.data else 0)
[codex:719182]     return None
[codex:719182] 
[codex:719182] # We explore from pc=0x129b to CALL at 0x135f
[codex:719182] start_pc=0x129b
[codex:719182] call_pc=0x135f
[codex:719182] 
[codex:719182] # initial stack depth guess: let's use 10 unknowns
[codex:719182] init_stack=[Val('arg', i) for i in range(10)]
[codex:719182] 
[codex:719182] from collections import deque
[codex:719182] State=tuple
[codex:719182] start_idx=pc_to_idx[start_pc]
[codex:719182] 
[codex:719182] # use BFS with limited steps
[codex:719182] max_steps=500
[codex:719182] visited=set()
[codex:719182] queue=deque()
[codex:719182] queue.append((start_idx, init_stack.copy(), 0))
[codex:719182] 
[codex:719182] found=None
[codex:719182] 
[codex:719182] while queue:
[codex:719182]     idx, stack, steps = queue.popleft()
[codex:719182]     if steps>max_steps: continue
[codex:719182]     pc,op,name,imm=ops[idx]
[codex:719182]     state_key=(idx, tuple(v.kind for v in stack), len(stack))
[codex:719182]     if state_key in visited: continue
[codex:719182]     visited.add(state_key)
[codex:719182]     # if reached call
[codex:719182]     if pc==call_pc and op==0xf1:
[codex:719182]         found=(stack.copy(), steps)
[codex:719182]         break
[codex:719182]     # execute op
[codex:719182]     # If op is JUMPDEST, just move to next
[codex:719182]     def next_idx(nidx):
[codex:719182]         if nidx is None: return
[codex:719182]         queue.append((nidx, stack.copy(), steps+1))
[codex:719182]     # handle PUSH
[codex:719182]     if 0x60 <= op <= 0x7f:
[codex:719182]         n=op-0x5f
[codex:719182]         stack.append(const(int.from_bytes(imm, 'big')))
[codex:719182]         next_idx(idx+1)
[codex:719182]         continue
[codex:719182]     if 0x80 <= op <= 0x8f: # DUP
[codex:719182]         n=op-0x7f
[codex:719182]         if len(stack)>=n:
[codex:719182]             stack.append(stack[-n])
[codex:719182]         else:
[codex:719182]             stack.append(Val('dup_undef'))
[codex:719182]         next_idx(idx+1); continue
[codex:719182]     if 0x90 <= op <= 0x9f: # SWAP
[codex:719182]         n=op-0x8f
[codex:719182]         if len(stack)>=n+1:
[codex:719182]             stack[-1], stack[-1-n] = stack[-1-n], stack[-1]
[codex:719182]         next_idx(idx+1); continue
[codex:719182]     # opcodes that push a new symbolic value
[codex:719182]     if op in [0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x5a,0x58,0x59]:
[codex:719182]         stack.append(Val(name.lower()))
[codex:719182]         next_idx(idx+1); continue
[codex:719182]     # binary ops
[codex:719182]     if op in [0x01,0x02,0x03,0x04,0x10,0x11,0x14,0x16,0x17,0x18,0x1b,0x1c,0x1d,0x1a,0x20]:
[codex:719182]         if len(stack)>=2:
[codex:719182]             b=stack.pop(); a=stack.pop()
[codex:719182]             simp=simplify(opnames[op], a, b)
[codex:719182]             if simp is None:
[codex:719182]                 stack.append(Val(opnames[op].lower(), (a,b)))
[codex:719182]             else:
[codex:719182]                 stack.append(simp)
[codex:719182]         else:
[codex:719182]             stack.append(Val(opnames[op].lower()))
[codex:719182]         next_idx(idx+1); continue
[codex:719182]     # unary ops
[codex:719182]     if op in [0x15,0x19]:
[codex:719182]         if len(stack)>=1:
[codex:719182]             a=stack.pop(); simp=simplify(opnames[op], a)
[codex:719182]             if simp is None:
[codex:719182]                 stack.append(Val(opnames[op].lower(), a))
[codex:719182]             else:
[codex:719182]                 stack.append(simp)
[codex:719182]         else:
[codex:719182]             stack.append(Val(opnames[op].lower()))
[codex:719182]         next_idx(idx+1); continue
[codex:719182]     # MLOAD/SLOAD
[codex:719182]     if op in [0x51,0x54]:
[codex:719182]         if stack: stack.pop()
[codex:719182]         stack.append(Val(opnames[op].lower(), pc))
[codex:719182]         next_idx(idx+1); continue
[codex:719182]     # MSTORE/SSTORE/POP
[codex:719182]     if op in [0x52,0x55,0x50,0x53]:
[codex:719182]         # pop required args
[codex:719182]         pops=2 if op in [0x52,0x55] else 1
[codex:719182]         for _ in range(pops):
[codex:719182]             if stack: stack.pop()
[codex:719182]         next_idx(idx+1); continue
[codex:719182]     # JUMP
[codex:719182]     if op==0x56:
[codex:719182]         # jump to dest if constant
[codex:719182]         if stack:
[codex:719182]             dest=stack.pop()
[codex:719182]             if dest.kind=='const' and dest.data in pc_to_idx:
[codex:719182]                 next_idx(pc_to_idx[dest.data])
[codex:719182]             else:
[codex:719182]                 # unknown jump, stop this path
[codex:719182]                 pass
[codex:719182]         continue
[codex:719182]     # JUMPI
[codex:719182]     if op==0x57:
[codex:719182]         # pop dest and cond
[codex:719182]         dest=stack.pop() if stack else Val('undef')
[codex:719182]         cond=stack.pop() if stack else Val('undef')
[codex:719182]         # branch not taken: continue to next
[codex:719182]         next_idx(idx+1)
[codex:719182]         # branch taken if dest constant
[codex:719182]         if dest.kind=='const' and dest.data in pc_to_idx:
[codex:719182]             # add taken branch
[codex:719182]             queue.append((pc_to_idx[dest.data], stack.copy(), steps+1))
[codex:719182]         continue
[codex:719182]     # JUMPDEST
[codex:719182]     if op==0x5b:
[codex:719182]         next_idx(idx+1); continue
[codex:719182]     # CALL
[codex:719182]     if op==0xf1:
[codex:719182]         # nothing to do
[codex:719182]         next_idx(idx+1); continue
[codex:719182]     # RETURN/REVERT/STOP
[codex:719182]     if op in [0xf3,0xfd,0x00,0xfe]:
[codex:719182]         continue
[codex:719182]     # default: just move on
[codex:719182]     next_idx(idx+1)
[codex:719182] 
[codex:719182] if found:
[codex:719182]     stack,steps=found
[codex:719182]     print('Found call stack depth', len(stack), 'steps', steps)
[codex:719182]     print('Top 12 stack items:')
[codex:719182]     for i,v in enumerate(stack[-12:]):
[codex:719182]         print(len(stack)-12+i, v)
[codex:719182]     # show top 7 (call args)
[codex:719182]     print('Call args (top7, top first):')
[codex:719182]     for v in stack[-1:-8:-1]:
[codex:719182]         print(v)
[codex:719182] else:
[codex:719182]     print('call not reached')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 36ms:
[codex:719182] Found call stack depth 20 steps 105
[codex:719182] Top 12 stack items:
[codex:719182] 8 arg(8)
[codex:719182] 9 sload(4808)
[codex:719182] 10 and((0x9e, mload(4810)))
[codex:719182] 11 sload(4817)
[codex:719182] 12 0x2
[codex:719182] 13 0x0
[codex:719182] 14 mload(4947)
[codex:719182] 15 sub((mload(4947), 0x2))
[codex:719182] 16 mload(4947)
[codex:719182] 17 sload(4817)
[codex:719182] 18 and((0x9e, mload(4810)))
[codex:719182] 19 sub((0x8502, gas))
[codex:719182] Call args (top7, top first):
[codex:719182] sub((0x8502, gas))
[codex:719182] and((0x9e, mload(4810)))
[codex:719182] sload(4817)
[codex:719182] mload(4947)
[codex:719182] sub((mload(4947), 0x2))
[codex:719182] 
[codex:719182] thinking
[codex:719182] **Analyzing symbolic execution call arguments**
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182] 
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 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:719182] 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:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182] 
[codex:719182] ops=[]
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182]     op=code[pc]; name=opnames.get(op, f'OP_{op:02x}')
[codex:719182]     pc0=pc; pc+=1; imm=None
[codex:719182]     if 0x60 <= op <= 0x7f:
[codex:719182]         n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:719182]     ops.append((pc0,op,name,imm))
[codex:719182] 
[codex:719182] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:719182] 
[codex:719182] class Val:
[codex:719182]     def __init__(self, kind, data=None):
[codex:719182]         self.kind=kind; self.data=data
[codex:719182]     def __repr__(self):
[codex:719182]         if self.kind=='const': return hex(self.data)
[codex:719182]         return f\"{self.kind}({self.data})\" if self.data is not None else self.kind
[codex:719182] 
[codex:719182] def const(v): return Val('const', v)
[codex:719182] 
[codex:719182] mask256=(1<<256)-1
[codex:719182] 
[codex:719182] def eval_bin(op, a, b):
[codex:719182]     # EVM pops a (top), b (next), result = b op a
[codex:719182]     if a.kind=='const' and b.kind=='const':
[codex:719182]         if op=='ADD': return const((b.data+a.data)&mask256)
[codex:719182]         if op=='SUB': return const((b.data-a.data)&mask256)
[codex:719182]         if op=='MUL': return const((b.data*a.data)&mask256)
[codex:719182]         if op=='DIV': return const(0 if a.data==0 else b.data//a.data)
[codex:719182]         if op=='AND': return const(b.data & a.data)
[codex:719182]         if op=='OR': return const(b.data | a.data)
[codex:719182]         if op=='EQ': return const(1 if b.data==a.data else 0)
[codex:719182]         if op=='LT': return const(1 if b.data<a.data else 0)
[codex:719182]         if op=='GT': return const(1 if b.data>a.data else 0)
[codex:719182]     return Val(op.lower(), (b,a))
[codex:719182] 
[codex:719182] 
[codex:719182] def eval_un(op, a):
[codex:719182]     if a.kind=='const':
[codex:719182]         if op=='ISZERO': return const(1 if a.data==0 else 0)
[codex:719182]         if op=='NOT': return const((~a.data)&mask256)
[codex:719182]     return Val(op.lower(), a)
[codex:719182] 
[codex:719182] # BFS exploration from start pc
[codex:719182] start_pc=0x129b
[codex:719182] call_pc=0x135f
[codex:719182] start_idx=pc_to_idx[start_pc]
[codex:719182] init_stack=[Val('arg', i) for i in range(12)]
[codex:719182] 
[codex:719182] from collections import deque
[codex:719182] queue=deque()
[codex:719182] queue.append((start_idx, init_stack.copy(), 0))
[codex:719182] visited=set()
[codex:719182] max_steps=600
[codex:719182] found=None
[codex:719182] 
[codex:719182] while queue:
[codex:719182]     idx, stack, steps = queue.popleft()
[codex:719182]     if steps>max_steps: continue
[codex:719182]     pc,op,name,imm=ops[idx]
[codex:719182]     state_key=(idx, tuple(v.kind for v in stack), len(stack))
[codex:719182]     if state_key in visited: continue
[codex:719182]     visited.add(state_key)
[codex:719182]     if pc==call_pc and op==0xf1:
[codex:719182]         found=(stack.copy(), steps)
[codex:719182]         break
[codex:719182]     # execute
[codex:719182]     if 0x60 <= op <= 0x7f:
[codex:719182]         stack.append(const(int.from_bytes(imm,'big')))
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if 0x80 <= op <= 0x8f:
[codex:719182]         n=op-0x7f
[codex:719182]         stack.append(stack[-n] if len(stack)>=n else Val('dup_undef'))
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if 0x90 <= op <= 0x9f:
[codex:719182]         n=op-0x8f
[codex:719182]         if len(stack)>=n+1:
[codex:719182]             stack[-1], stack[-1-n] = stack[-1-n], stack[-1]
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op in [0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x5a,0x58,0x59]:
[codex:719182]         stack.append(Val(name.lower(), pc))
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op in [0x01,0x02,0x03,0x04,0x10,0x11,0x14,0x16,0x17,0x18,0x1b,0x1c,0x1d,0x1a,0x20]:
[codex:719182]         if len(stack)>=2:
[codex:719182]             a=stack.pop(); b=stack.pop()
[codex:719182]             stack.append(eval_bin(opnames[op], a, b))
[codex:719182]         else:
[codex:719182]             stack.append(Val(opnames[op].lower()))
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op in [0x15,0x19]:
[codex:719182]         if len(stack)>=1:
[codex:719182]             a=stack.pop(); stack.append(eval_un(opnames[op], a))
[codex:719182]         else:
[codex:719182]             stack.append(Val(opnames[op].lower()))
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op in [0x51,0x54]:
[codex:719182]         if stack: stack.pop()
[codex:719182]         stack.append(Val(opnames[op].lower(), pc))
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op in [0x52,0x55,0x50,0x53]:
[codex:719182]         pops=2 if op in [0x52,0x55] else 1
[codex:719182]         for _ in range(pops):
[codex:719182]             if stack: stack.pop()
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op==0x56:
[codex:719182]         if stack:
[codex:719182]             dest=stack.pop()
[codex:719182]             if dest.kind=='const' and dest.data in pc_to_idx:
[codex:719182]                 queue.append((pc_to_idx[dest.data], stack.copy(), steps+1))
[codex:719182]         continue
[codex:719182]     if op==0x57:
[codex:719182]         dest=stack.pop() if stack else Val('undef')
[codex:719182]         cond=stack.pop() if stack else Val('undef')
[codex:719182]         # not taken
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1))
[codex:719182]         # taken if constant dest
[codex:719182]         if dest.kind=='const' and dest.data in pc_to_idx:
[codex:719182]             queue.append((pc_to_idx[dest.data], stack.copy(), steps+1))
[codex:719182]         continue
[codex:719182]     if op==0x5b:
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op in [0xf1,0xf3,0xfd,0x00,0xfe]:
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     # default
[codex:719182]     queue.append((idx+1, stack.copy(), steps+1))
[codex:719182] 
[codex:719182] if found:
[codex:719182]     stack,steps=found
[codex:719182]     print('Found call, stack depth', len(stack))
[codex:719182]     print('Top 10 stack items (bottom->top):')
[codex:719182]     for v in stack[-10:]:
[codex:719182]         print(v)
[codex:719182]     print('Call args (top7, top first):')
[codex:719182]     for v in stack[-1:-8:-1]:
[codex:719182]         print(v)
[codex:719182] else:
[codex:719182]     print('call not reached')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 30ms:
[codex:719182] Found call, stack depth 22
[codex:719182] Top 10 stack items (bottom->top):
[codex:719182] and((0x9e, mload(4810)))
[codex:719182] sload(4817)
[codex:719182] 0x2
[codex:719182] 0x0
[codex:719182] mload(4947)
[codex:719182] sub((mload(4947), 0x2))
[codex:719182] mload(4947)
[codex:719182] sload(4817)
[codex:719182] and((0x9e, mload(4810)))
[codex:719182] sub((0x8502, gas(4957)))
[codex:719182] Call args (top7, top first):
[codex:719182] sub((0x8502, gas(4957)))
[codex:719182] and((0x9e, mload(4810)))
[codex:719182] sload(4817)
[codex:719182] mload(4947)
[codex:719182] sub((mload(4947), 0x2))
[codex:719182] mload(4947)
[codex:719182] 0x0
[codex:719182] 
[codex:719182] thinking
[codex:719182] **Analyzing storage loads and EVM call construction**
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182] 
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 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:719182] 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:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182] 
[codex:719182] ops=[]
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182]     op=code[pc]; name=opnames.get(op, f'OP_{op:02x}')
[codex:719182]     pc0=pc; pc+=1; imm=None
[codex:719182]     if 0x60 <= op <= 0x7f:
[codex:719182]         n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:719182]     ops.append((pc0,op,name,imm))
[codex:719182] 
[codex:719182] pc_to_idx={pc:i for i,(pc,_,_,_) in enumerate(ops)}
[codex:719182] 
[codex:719182] class Val:
[codex:719182]     def __init__(self, kind, data=None):
[codex:719182]         self.kind=kind; self.data=data
[codex:719182]     def __repr__(self):
[codex:719182]         if self.kind=='const': return hex(self.data)
[codex:719182]         return f\"{self.kind}({self.data})\" if self.data is not None else self.kind
[codex:719182] 
[codex:719182] def const(v): return Val('const', v)
[codex:719182] 
[codex:719182] mask256=(1<<256)-1
[codex:719182] 
[codex:719182] def eval_bin(op, a, b):
[codex:719182]     # pops a (top), b (next), result = b op a
[codex:719182]     if a.kind=='const' and b.kind=='const':
[codex:719182]         if op=='ADD': return const((b.data+a.data)&mask256)
[codex:719182]         if op=='SUB': return const((b.data-a.data)&mask256)
[codex:719182]         if op=='MUL': return const((b.data*a.data)&mask256)
[codex:719182]         if op=='DIV': return const(0 if a.data==0 else b.data//a.data)
[codex:719182]         if op=='AND': return const(b.data & a.data)
[codex:719182]         if op=='OR': return const(b.data | a.data)
[codex:719182]         if op=='XOR': return const(b.data "'^ a.data)
[codex:719182]         if op=='"'EQ': return const(1 if b.data==a.data else 0)
[codex:719182]         if op=='LT': return const(1 if b.data<a.data else 0)
[codex:719182]         if op=='GT': return const(1 if b.data>a.data else 0)
[codex:719182]         if op=='EXP':
[codex:719182]             return const(pow(b.data, a.data, 1<<256))
[codex:719182]         if op=='SHL': return const((b.data << a.data)&mask256)
[codex:719182]         if op=='SHR': return const((b.data >> a.data)&mask256)
[codex:719182]         if op=='SAR':
[codex:719182]             # sign-extend b.data then shift
[codex:719182]             val=b.data
[codex:719182]             if val & (1<<255):
[codex:719182]                 val = val - (1<<256)
[codex:719182]             return const((val >> a.data)&mask256)
[codex:719182]         if op=='BYTE':
[codex:719182]             # byte(a, b)
[codex:719182]             if a.data>=32: return const(0)
[codex:719182]             return const((b.data >> (8*(31-a.data))) & 0xff)
[codex:719182]     return Val(op.lower(), (b,a))
[codex:719182] 
[codex:719182] 
[codex:719182] def eval_un(op, a):
[codex:719182]     if a.kind=='const':
[codex:719182]         if op=='ISZERO': return const(1 if a.data==0 else 0)
[codex:719182]         if op=='NOT': return const((~a.data)&mask256)
[codex:719182]     return Val(op.lower(), a)
[codex:719182] 
[codex:719182] start_pc=0x129b
[codex:719182] call_pc=0x135f
[codex:719182] start_idx=pc_to_idx[start_pc]
[codex:719182] init_stack=[Val('arg', i) for i in range(12)]
[codex:719182] 
[codex:719182] from collections import deque
[codex:719182] queue=deque()
[codex:719182] queue.append((start_idx, init_stack.copy(), 0))
[codex:719182] visited=set()
[codex:719182] max_steps=800
[codex:719182] found=None
[codex:719182] 
[codex:719182] while queue:
[codex:719182]     idx, stack, steps = queue.popleft()
[codex:719182]     if steps>max_steps: continue
[codex:719182]     pc,op,name,imm=ops[idx]
[codex:719182]     state_key=(idx, tuple(v.kind for v in stack), len(stack))
[codex:719182]     if state_key in visited: continue
[codex:719182]     visited.add(state_key)
[codex:719182]     if pc==call_pc and op==0xf1:
[codex:719182]         found=(stack.copy(), steps)
[codex:719182]         break
[codex:719182]     if 0x60 <= op <= 0x7f:
[codex:719182]         stack.append(const(int.from_bytes(imm,'big')))
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if 0x80 <= op <= 0x8f:
[codex:719182]         n=op-0x7f
[codex:719182]         stack.append(stack[-n] if len(stack)>=n else Val('dup_undef'))
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if 0x90 <= op <= 0x9f:
[codex:719182]         n=op-0x8f
[codex:719182]         if len(stack)>=n+1:
[codex:719182]             stack[-1], stack[-1-n] = stack[-1-n], stack[-1]
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op in [0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x5a,0x58,0x59]:
[codex:719182]         stack.append(Val(name.lower(), pc))
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op in [0x01,0x02,0x03,0x04,0x08,0x09,0x0a,0x10,0x11,0x12,0x13,0x14,0x16,0x17,0x18,0x1a,0x1b,0x1c,0x1d,0x20]:
[codex:719182]         if len(stack)>=2:
[codex:719182]             a=stack.pop(); b=stack.pop()
[codex:719182]             stack.append(eval_bin(opnames[op], a, b))
[codex:719182]         else:
[codex:719182]             stack.append(Val(opnames[op].lower()))
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op in [0x15,0x19]:
[codex:719182]         if len(stack)>=1:
[codex:719182]             a=stack.pop(); stack.append(eval_un(opnames[op], a))
[codex:719182]         else:
[codex:719182]             stack.append(Val(opnames[op].lower()))
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op in [0x51,0x54]:
[codex:719182]         if stack: stack.pop()
[codex:719182]         stack.append(Val(opnames[op].lower(), pc))
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op in [0x52,0x55,0x50,0x53]:
[codex:719182]         pops=2 if op in [0x52,0x55] else 1
[codex:719182]         for _ in range(pops):
[codex:719182]             if stack: stack.pop()
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op==0x56:
[codex:719182]         if stack:
[codex:719182]             dest=stack.pop()
[codex:719182]             if dest.kind=='const' and dest.data in pc_to_idx:
[codex:719182]                 queue.append((pc_to_idx[dest.data], stack.copy(), steps+1))
[codex:719182]         continue
[codex:719182]     if op==0x57:
[codex:719182]         dest=stack.pop() if stack else Val('undef')
[codex:719182]         cond=stack.pop() if stack else Val('undef')
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1))
[codex:719182]         if dest.kind=='const' and dest.data in pc_to_idx:
[codex:719182]             queue.append((pc_to_idx[dest.data], stack.copy(), steps+1))
[codex:719182]         continue
[codex:719182]     if op==0x5b:
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     if op in [0xf1,0xf3,0xfd,0x00,0xfe]:
[codex:719182]         queue.append((idx+1, stack.copy(), steps+1)); continue
[codex:719182]     queue.append((idx+1, stack.copy(), steps+1))
[codex:719182] 
[codex:719182] if found:
[codex:719182]     stack,steps=found
[codex:719182]     print('Found call, stack depth', len(stack))
[codex:719182]     print('Call args (top7, top first):')
[codex:719182]     for v in stack[-1:-8:-1]:
[codex:719182]         print(v)
[codex:719182] else:
[codex:719182]     print('call not reached')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 32ms:
[codex:719182] Found call, stack depth 21
[codex:719182] Call args (top7, top first):
[codex:719182] sub((0x8502, gas(4957)))
[codex:719182] and((0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c01, sload(4804)))
[codex:719182] sload(4808)
[codex:719182] mload(4947)
[codex:719182] sub((mload(4947), mload(4810)))
[codex:719182] mload(4947)
[codex:719182] 0x0
[codex:719182] 
[codex:719182] thinking
[codex:719182] **Analyzing CALL destination and storage writes**
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182] 
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 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:719182] 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:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182] 
[codex:719182] ops=[]
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182]     op=code[pc]; name=opnames.get(op, f'OP_{op:02x}')
[codex:719182]     pc0=pc; pc+=1; imm=None
[codex:719182]     if 0x60 <= op <= 0x7f:
[codex:719182]         n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:719182]     ops.append((pc0,op,name,imm))
[codex:719182] 
[codex:719182] # find SSTOREs
[codex:719182] for i,(pc,op,name,imm) in enumerate(ops):
[codex:719182]     if op==0x55:
[codex:719182]         print(f'SSTORE at {pc:04x}')
[codex:719182]         # print previous 12 ops
[codex:719182]         for j in range(max(0,i-12), i+1):
[codex:719182]             p,o,n,im=ops[j]
[codex:719182]             if im is not None:
[codex:719182]                 print(f'  {p:04x}: {n} 0x{im.hex()}')
[codex:719182]             else:
[codex:719182]                 print(f'  {p:04x}: {n}')
[codex:719182]         print('---')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 30ms:
[codex:719182] SSTORE at 069c
[codex:719182]   068c: PUSH1 0x02
[codex:719182]   068e: PUSH1 0x20
[codex:719182]   0690: MSTORE
[codex:719182]   0691: PUSH1 0x40
[codex:719182]   0693: DUP2
[codex:719182]   0694: SHA3
[codex:719182]   0695: DUP1
[codex:719182]   0696: SLOAD
[codex:719182]   0697: PUSH1 0xff
[codex:719182]   0699: NOT
[codex:719182]   069a: AND
[codex:719182]   069b: SWAP1
[codex:719182]   069c: SSTORE
[codex:719182] ---
[codex:719182] SSTORE at 0765
[codex:719182]   0756: AND
[codex:719182]   0757: SWAP1
[codex:719182]   0758: DUP4
[codex:719182]   0759: PUSH1 0x01
[codex:719182] 
[codex:719182] thinking
[codex:719182] **Examining SSTORE operations and access checks**
[codex:719182] exec
[codex:719182] /bin/bash -lc "python - <<'PY'
[codex:719182] import re
[codex:719182] hexstr=re.search(r'0x[0-9a-fA-F]+', open('BYTECODE_BUNDLE.txt').read()).group(0)[2:]
[codex:719182] code=bytes.fromhex(hexstr)
[codex:719182] 
[codex:719182] opnames={
[codex:719182] 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:719182] 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:719182] 0x20:'SHA3',
[codex:719182] 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:719182] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:719182] 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:719182] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:719182] 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:719182] 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:719182] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:719182] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:719182] }
[codex:719182] 
[codex:719182] # disassemble region
[codex:719182] start=0x0f00
[codex:719182] end=0x0f80
[codex:719182] pc=0
[codex:719182] while pc<len(code):
[codex:719182]     op=code[pc]; name=opnames.get(op, f'OP_{op:02x}')
[codex:719182]     pc0=pc; pc+=1; imm=None
[codex:719182]     if 0x60 <= op <= 0x7f:
[codex:719182]         n=op-0x5f; imm=code[pc:pc+n]; pc+=n
[codex:719182]     if start <= pc0 <= end:
[codex:719182]         if imm is not None:
[codex:719182]             print(f'{pc0:04x}: {name} 0x{imm.hex()}')
[codex:719182]         else:
[codex:719182]             print(f'{pc0:04x}: {name}')
[codex:719182] PY" in /tmp/codex-multi-512cwfyn succeeded in 27ms:
[codex:719182] 0f00: POP
[codex:719182] 0f01: SWAP2
[codex:719182] 0f02: SWAP1
[codex:719182] 0f03: POP
[codex:719182] 0f04: JUMP
[codex:719182] 0f05: JUMPDEST
[codex:719182] 0f06: PUSH1 0x05
[codex:719182] 0f08: SLOAD
[codex:719182] 0f09: DUP2
[codex:719182] 0f0a: JUMP
[codex:719182] 0f0b: JUMPDEST
[codex:719182] 0f0c: ADDRESS
[codex:719182] 0f0d: PUSH1 0x01
[codex:719182] 0f0f: PUSH1 0xa0
[codex:719182] 0f11: PUSH1 0x02
[codex:719182] 0f13: EXP
[codex:719182] 0f14: SUB
[codex:719182] 0f15: AND
[codex:719182] 0f16: CALLER
[codex:719182] 0f17: PUSH1 0x01
[codex:719182] 
[codex:719182] thinking
[codex:719182] **Analyzing contract call protections**
[codex:719182] exec
[codex:719182] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-512cwfyn succeeded in 5ms:
[codex:719182] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:719182] 
[codex:719182] thinking
[codex:719182] **Preparing final JSON output**
[codex:719182] codex
[codex:719182] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the provided bytecode alone.","findings":[]}
[codex:719182] tokens used
[codex:719182] 68,795
[codex:719182] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the provided bytecode alone.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-02T03:06:27.180677+00:00",
        "returncode": 0
    },
    "summary": "No concrete, exploitable value-extraction path identified from the provided bytecode alone.",
    "raw_final": {
        "summary": "No concrete, exploitable value-extraction path identified from the provided bytecode alone.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
1
EXT*/BALANCE
0
Total opcodes
3997
Flags
create_opcodes_present
View cast disassembly output
00000000: PUSH1 0x60
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLDATASIZE
00000006: ISZERO
00000007: PUSH2 0x0101
0000000a: JUMPI
0000000b: PUSH4 0xffffffff
00000010: PUSH1 0xe0
00000012: PUSH1 0x02
00000014: EXP
00000015: PUSH1 0x00
00000017: CALLDATALOAD
00000018: DIV
00000019: AND
0000001a: PUSH4 0x025e7c27
0000001f: DUP2
00000020: EQ
00000021: PUSH2 0x0153
00000024: JUMPI
00000025: DUP1
00000026: PUSH4 0x173825d9
0000002b: EQ
0000002c: PUSH2 0x0182
0000002f: JUMPI
00000030: DUP1
00000031: PUSH4 0x20ea8d86
00000036: EQ
00000037: PUSH2 0x01a0
0000003a: JUMPI
0000003b: DUP1
0000003c: PUSH4 0x2f54bf6e
00000041: EQ
00000042: PUSH2 0x01b5
00000045: JUMPI
00000046: DUP1
00000047: PUSH4 0x3411c81c
0000004c: EQ
0000004d: PUSH2 0x01e5
00000050: JUMPI
00000051: DUP1
00000052: PUSH4 0x54741525
00000057: EQ
00000058: PUSH2 0x0218
0000005b: JUMPI
0000005c: DUP1
0000005d: PUSH4 0x7065cb48
00000062: EQ
00000063: PUSH2 0x0244
00000066: JUMPI
00000067: DUP1
00000068: PUSH4 0x784547a7
0000006d: EQ
0000006e: PUSH2 0x0262
00000071: JUMPI
00000072: DUP1
00000073: PUSH4 0x8b51d13f
00000078: EQ
00000079: PUSH2 0x0289
0000007c: JUMPI
0000007d: DUP1
0000007e: PUSH4 0x9ace38c2
00000083: EQ
00000084: PUSH2 0x02ae
00000087: JUMPI
00000088: DUP1
00000089: PUSH4 0xa0e67e2b
0000008e: EQ
0000008f: PUSH2 0x036b
00000092: JUMPI
00000093: DUP1
00000094: PUSH4 0xa8abe69a
00000099: EQ
0000009a: PUSH2 0x03d6
0000009d: JUMPI
0000009e: DUP1
0000009f: PUSH4 0xb5dc40c3
000000a4: EQ
000000a5: PUSH2 0x0451
000000a8: JUMPI
000000a9: DUP1
000000aa: PUSH4 0xb77bf600
000000af: EQ
000000b0: PUSH2 0x04bf
000000b3: JUMPI
000000b4: DUP1
000000b5: PUSH4 0xba51a6df
000000ba: EQ
000000bb: PUSH2 0x04e1
000000be: JUMPI
000000bf: DUP1
000000c0: PUSH4 0xc01a8c84
000000c5: EQ
000000c6: PUSH2 0x04f6
000000c9: JUMPI
000000ca: DUP1
000000cb: PUSH4 0xc6427474
000000d0: EQ
000000d1: PUSH2 0x050b
000000d4: JUMPI
000000d5: DUP1
000000d6: PUSH4 0xd74f8edd
000000db: EQ
000000dc: PUSH2 0x0580
000000df: JUMPI
000000e0: DUP1
000000e1: PUSH4 0xdc8452cd
000000e6: EQ
000000e7: PUSH2 0x05a2
000000ea: JUMPI
000000eb: DUP1
000000ec: PUSH4 0xe20056e6
000000f1: EQ
000000f2: PUSH2 0x05c4
000000f5: JUMPI
000000f6: DUP1
000000f7: PUSH4 0xee22610b
000000fc: EQ
000000fd: PUSH2 0x05e8
00000100: JUMPI
00000101: JUMPDEST
00000102: PUSH2 0x0151
00000105: JUMPDEST
00000106: PUSH1 0x00
00000108: CALLVALUE
00000109: GT
0000010a: ISZERO
0000010b: PUSH2 0x014e
0000010e: JUMPI
0000010f: PUSH1 0x40
00000111: DUP1
00000112: MLOAD
00000113: CALLVALUE
00000114: DUP2
00000115: MSTORE
00000116: SWAP1
00000117: MLOAD
00000118: PUSH1 0x01
0000011a: PUSH1 0xa0
0000011c: PUSH1 0x02
0000011e: EXP
0000011f: SUB
00000120: CALLER
00000121: AND
00000122: SWAP2
00000123: PUSH32 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c
00000144: SWAP2
00000145: SWAP1
00000146: DUP2
00000147: SWAP1
00000148: SUB
00000149: PUSH1 0x20
0000014b: ADD
0000014c: SWAP1
0000014d: LOG2
0000014e: JUMPDEST
0000014f: JUMPDEST
00000150: JUMP
00000151: JUMPDEST
00000152: STOP
00000153: JUMPDEST
00000154: CALLVALUE
00000155: ISZERO
00000156: PUSH2 0x015b
00000159: JUMPI
0000015a: INVALID
0000015b: JUMPDEST
0000015c: PUSH2 0x0166
0000015f: PUSH1 0x04
00000161: CALLDATALOAD
00000162: PUSH2 0x05fd
00000165: JUMP
00000166: JUMPDEST
00000167: PUSH1 0x40
00000169: DUP1
0000016a: MLOAD
0000016b: PUSH1 0x01
0000016d: PUSH1 0xa0
0000016f: PUSH1 0x02
00000171: EXP
00000172: SUB
00000173: SWAP1
00000174: SWAP3
00000175: AND
00000176: DUP3
00000177: MSTORE
00000178: MLOAD
00000179: SWAP1
0000017a: DUP2
0000017b: SWAP1
0000017c: SUB
0000017d: PUSH1 0x20
0000017f: ADD
00000180: SWAP1
00000181: RETURN
00000182: JUMPDEST
00000183: CALLVALUE
00000184: ISZERO
00000185: PUSH2 0x018a
00000188: JUMPI
00000189: INVALID
0000018a: JUMPDEST
0000018b: PUSH2 0x0151
0000018e: PUSH1 0x01
00000190: PUSH1 0xa0
00000192: PUSH1 0x02
00000194: EXP
00000195: SUB
00000196: PUSH1 0x04
00000198: CALLDATALOAD
00000199: AND
0000019a: PUSH2 0x062f
0000019d: JUMP
0000019e: JUMPDEST
0000019f: STOP
000001a0: JUMPDEST
000001a1: CALLVALUE
000001a2: ISZERO
000001a3: PUSH2 0x01a8
000001a6: JUMPI
000001a7: INVALID
000001a8: JUMPDEST
000001a9: PUSH2 0x0151
000001ac: PUSH1 0x04
000001ae: CALLDATALOAD
000001af: PUSH2 0x07e0
000001b2: JUMP
000001b3: JUMPDEST
000001b4: STOP
000001b5: JUMPDEST
000001b6: CALLVALUE
000001b7: ISZERO
000001b8: PUSH2 0x01bd
000001bb: JUMPI
000001bc: INVALID
000001bd: JUMPDEST
000001be: PUSH2 0x01d1
000001c1: PUSH1 0x01
000001c3: PUSH1 0xa0
000001c5: PUSH1 0x02
000001c7: EXP
000001c8: SUB
000001c9: PUSH1 0x04
000001cb: CALLDATALOAD
000001cc: AND
000001cd: PUSH2 0x08bd
000001d0: JUMP
000001d1: JUMPDEST
000001d2: PUSH1 0x40
000001d4: DUP1
000001d5: MLOAD
000001d6: SWAP2
000001d7: ISZERO
000001d8: ISZERO
000001d9: DUP3
000001da: MSTORE
000001db: MLOAD
000001dc: SWAP1
000001dd: DUP2
000001de: SWAP1
000001df: SUB
000001e0: PUSH1 0x20
000001e2: ADD
000001e3: SWAP1
000001e4: RETURN
000001e5: JUMPDEST
000001e6: CALLVALUE
000001e7: ISZERO
000001e8: PUSH2 0x01ed
000001eb: JUMPI
000001ec: INVALID
000001ed: JUMPDEST
000001ee: PUSH2 0x01d1
000001f1: PUSH1 0x04
000001f3: CALLDATALOAD
000001f4: PUSH1 0x01
000001f6: PUSH1 0xa0
000001f8: PUSH1 0x02
000001fa: EXP
000001fb: SUB
000001fc: PUSH1 0x24
000001fe: CALLDATALOAD
000001ff: AND
00000200: PUSH2 0x08d2
00000203: JUMP
00000204: JUMPDEST
00000205: PUSH1 0x40
00000207: DUP1
00000208: MLOAD
00000209: SWAP2
0000020a: ISZERO
0000020b: ISZERO
0000020c: DUP3
0000020d: MSTORE
0000020e: MLOAD
0000020f: SWAP1
00000210: DUP2
00000211: SWAP1
00000212: SUB
00000213: PUSH1 0x20
00000215: ADD
00000216: SWAP1
00000217: RETURN
00000218: JUMPDEST
00000219: CALLVALUE
0000021a: ISZERO
0000021b: PUSH2 0x0220
0000021e: JUMPI
0000021f: INVALID
00000220: JUMPDEST
00000221: PUSH2 0x0232
00000224: PUSH1 0x04
00000226: CALLDATALOAD
00000227: ISZERO
00000228: ISZERO
00000229: PUSH1 0x24
0000022b: CALLDATALOAD
0000022c: ISZERO
0000022d: ISZERO
0000022e: PUSH2 0x08f2
00000231: JUMP
00000232: JUMPDEST
00000233: PUSH1 0x40
00000235: DUP1
00000236: MLOAD
00000237: SWAP2
00000238: DUP3
00000239: MSTORE
0000023a: MLOAD
0000023b: SWAP1
0000023c: DUP2
0000023d: SWAP1
0000023e: SUB
0000023f: PUSH1 0x20
00000241: ADD
00000242: SWAP1
00000243: RETURN
00000244: JUMPDEST
00000245: CALLVALUE
00000246: ISZERO
00000247: PUSH2 0x024c
0000024a: JUMPI
0000024b: INVALID
0000024c: JUMPDEST
0000024d: PUSH2 0x0151
00000250: PUSH1 0x01
00000252: PUSH1 0xa0
00000254: PUSH1 0x02
00000256: EXP
00000257: SUB
00000258: PUSH1 0x04
0000025a: CALLDATALOAD
0000025b: AND
0000025c: PUSH2 0x0961
0000025f: JUMP
00000260: JUMPDEST
00000261: STOP
00000262: JUMPDEST
00000263: CALLVALUE
00000264: ISZERO
00000265: PUSH2 0x026a
00000268: JUMPI
00000269: INVALID
0000026a: JUMPDEST
0000026b: PUSH2 0x01d1
0000026e: PUSH1 0x04
00000270: CALLDATALOAD
00000271: PUSH2 0x0a98
00000274: JUMP
00000275: JUMPDEST
00000276: PUSH1 0x40
00000278: DUP1
00000279: MLOAD
0000027a: SWAP2
0000027b: ISZERO
0000027c: ISZERO
0000027d: DUP3
0000027e: MSTORE
0000027f: MLOAD
00000280: SWAP1
00000281: DUP2
00000282: SWAP1
00000283: SUB
00000284: PUSH1 0x20
00000286: ADD
00000287: SWAP1
00000288: RETURN
00000289: JUMPDEST
0000028a: CALLVALUE
0000028b: ISZERO
0000028c: PUSH2 0x0291
0000028f: JUMPI
00000290: INVALID
00000291: JUMPDEST
00000292: PUSH2 0x0232
00000295: PUSH1 0x04
00000297: CALLDATALOAD
00000298: PUSH2 0x0b2c
0000029b: JUMP
0000029c: JUMPDEST
0000029d: PUSH1 0x40
0000029f: DUP1
000002a0: MLOAD
000002a1: SWAP2
000002a2: DUP3
000002a3: MSTORE
000002a4: MLOAD
000002a5: SWAP1
000002a6: DUP2
000002a7: SWAP1
000002a8: SUB
000002a9: PUSH1 0x20
000002ab: ADD
000002ac: SWAP1
000002ad: RETURN
000002ae: JUMPDEST
000002af: CALLVALUE
000002b0: ISZERO
000002b1: PUSH2 0x02b6
000002b4: JUMPI
000002b5: INVALID
000002b6: JUMPDEST
000002b7: PUSH2 0x02c1
000002ba: PUSH1 0x04
000002bc: CALLDATALOAD
000002bd: PUSH2 0x0bab
000002c0: JUMP
000002c1: JUMPDEST
000002c2: PUSH1 0x40
000002c4: DUP1
000002c5: MLOAD
000002c6: PUSH1 0x01
000002c8: PUSH1 0xa0
000002ca: PUSH1 0x02
000002cc: EXP
000002cd: SUB
000002ce: DUP7
000002cf: AND
000002d0: DUP2
000002d1: MSTORE
000002d2: PUSH1 0x20
000002d4: DUP2
000002d5: ADD
000002d6: DUP6
000002d7: SWAP1
000002d8: MSTORE
000002d9: DUP3
000002da: ISZERO
000002db: ISZERO
000002dc: PUSH1 0x60
000002de: DUP3
000002df: ADD
000002e0: MSTORE
000002e1: PUSH1 0x80
000002e3: SWAP2
000002e4: DUP2
000002e5: ADD
000002e6: DUP3
000002e7: DUP2
000002e8: MSTORE
000002e9: DUP5
000002ea: SLOAD
000002eb: PUSH1 0x02
000002ed: PUSH1 0x00
000002ef: NOT
000002f0: PUSH2 0x0100
000002f3: PUSH1 0x01
000002f5: DUP5
000002f6: AND
000002f7: ISZERO
000002f8: MUL
000002f9: ADD
000002fa: SWAP1
000002fb: SWAP2
000002fc: AND
000002fd: DIV
000002fe: SWAP3
000002ff: DUP3
00000300: ADD
00000301: DUP4
00000302: SWAP1
00000303: MSTORE
00000304: SWAP1
00000305: SWAP2
00000306: PUSH1 0xa0
00000308: DUP4
00000309: ADD
0000030a: SWAP1
0000030b: DUP6
0000030c: SWAP1
0000030d: DUP1
0000030e: ISZERO
0000030f: PUSH2 0x0359
00000312: JUMPI
00000313: DUP1
00000314: PUSH1 0x1f
00000316: LT
00000317: PUSH2 0x032e
0000031a: JUMPI
0000031b: PUSH2 0x0100
0000031e: DUP1
0000031f: DUP4
00000320: SLOAD
00000321: DIV
00000322: MUL
00000323: DUP4
00000324: MSTORE
00000325: SWAP2
00000326: PUSH1 0x20
00000328: ADD
00000329: SWAP2
0000032a: PUSH2 0x0359
0000032d: JUMP
0000032e: JUMPDEST
0000032f: DUP3
00000330: ADD
00000331: SWAP2
00000332: SWAP1
00000333: PUSH1 0x00
00000335: MSTORE
00000336: PUSH1 0x20
00000338: PUSH1 0x00
0000033a: KECCAK256
0000033b: SWAP1
0000033c: JUMPDEST
0000033d: DUP2
0000033e: SLOAD
0000033f: DUP2
00000340: MSTORE
00000341: SWAP1
00000342: PUSH1 0x01
00000344: ADD
00000345: SWAP1
00000346: PUSH1 0x20
00000348: ADD
00000349: DUP1
0000034a: DUP4
0000034b: GT
0000034c: PUSH2 0x033c
0000034f: JUMPI
00000350: DUP3
00000351: SWAP1
00000352: SUB
00000353: PUSH1 0x1f
00000355: AND
00000356: DUP3
00000357: ADD
00000358: SWAP2
00000359: JUMPDEST
0000035a: POP
0000035b: POP
0000035c: SWAP6
0000035d: POP
0000035e: POP
0000035f: POP
00000360: POP
00000361: POP
00000362: POP
00000363: PUSH1 0x40
00000365: MLOAD
00000366: DUP1
00000367: SWAP2
00000368: SUB
00000369: SWAP1
0000036a: RETURN
0000036b: JUMPDEST
0000036c: CALLVALUE
0000036d: ISZERO
0000036e: PUSH2 0x0373
00000371: JUMPI
00000372: INVALID
00000373: JUMPDEST
00000374: PUSH2 0x037b
00000377: PUSH2 0x0bdf
0000037a: JUMP
0000037b: JUMPDEST
0000037c: PUSH1 0x40
0000037e: DUP1
0000037f: MLOAD
00000380: PUSH1 0x20
00000382: DUP1
00000383: DUP3
00000384: MSTORE
00000385: DUP4
00000386: MLOAD
00000387: DUP2
00000388: DUP4
00000389: ADD
0000038a: MSTORE
0000038b: DUP4
0000038c: MLOAD
0000038d: SWAP2
0000038e: SWAP3
0000038f: DUP4
00000390: SWAP3
00000391: SWAP1
00000392: DUP4
00000393: ADD
00000394: SWAP2
00000395: DUP6
00000396: DUP2
00000397: ADD
00000398: SWAP2
00000399: MUL
0000039a: DUP1
0000039b: DUP4
0000039c: DUP4
0000039d: DUP3
0000039e: ISZERO
0000039f: PUSH2 0x03c3
000003a2: JUMPI
000003a3: JUMPDEST
000003a4: DUP1
000003a5: MLOAD
000003a6: DUP3
000003a7: MSTORE
000003a8: PUSH1 0x20
000003aa: DUP4
000003ab: GT
000003ac: ISZERO
000003ad: PUSH2 0x03c3
000003b0: JUMPI
000003b1: PUSH1 0x1f
000003b3: NOT
000003b4: SWAP1
000003b5: SWAP3
000003b6: ADD
000003b7: SWAP2
000003b8: PUSH1 0x20
000003ba: SWAP2
000003bb: DUP3
000003bc: ADD
000003bd: SWAP2
000003be: ADD
000003bf: PUSH2 0x03a3
000003c2: JUMP
000003c3: JUMPDEST
000003c4: POP
000003c5: POP
000003c6: POP
000003c7: SWAP1
000003c8: POP
000003c9: ADD
000003ca: SWAP3
000003cb: POP
000003cc: POP
000003cd: POP
000003ce: PUSH1 0x40
000003d0: MLOAD
000003d1: DUP1
000003d2: SWAP2
000003d3: SUB
000003d4: SWAP1
000003d5: RETURN
000003d6: JUMPDEST
000003d7: CALLVALUE
000003d8: ISZERO
000003d9: PUSH2 0x03de
000003dc: JUMPI
000003dd: INVALID
000003de: JUMPDEST
000003df: PUSH2 0x037b
000003e2: PUSH1 0x04
000003e4: CALLDATALOAD
000003e5: PUSH1 0x24
000003e7: CALLDATALOAD
000003e8: PUSH1 0x44
000003ea: CALLDATALOAD
000003eb: ISZERO
000003ec: ISZERO
000003ed: PUSH1 0x64
000003ef: CALLDATALOAD
000003f0: ISZERO
000003f1: ISZERO
000003f2: PUSH2 0x0c48
000003f5: JUMP
000003f6: JUMPDEST
000003f7: PUSH1 0x40
000003f9: DUP1
000003fa: MLOAD
000003fb: PUSH1 0x20
000003fd: DUP1
000003fe: DUP3
000003ff: MSTORE
00000400: DUP4
00000401: MLOAD
00000402: DUP2
00000403: DUP4
00000404: ADD
00000405: MSTORE
00000406: DUP4
00000407: MLOAD
00000408: SWAP2
00000409: SWAP3
0000040a: DUP4
0000040b: SWAP3
0000040c: SWAP1
0000040d: DUP4
0000040e: ADD
0000040f: SWAP2
00000410: DUP6
00000411: DUP2
00000412: ADD
00000413: SWAP2
00000414: MUL
00000415: DUP1
00000416: DUP4
00000417: DUP4
00000418: DUP3
00000419: ISZERO
0000041a: PUSH2 0x03c3
0000041d: JUMPI
0000041e: JUMPDEST
0000041f: DUP1
00000420: MLOAD
00000421: DUP3
00000422: MSTORE
00000423: PUSH1 0x20
00000425: DUP4
00000426: GT
00000427: ISZERO
00000428: PUSH2 0x03c3
0000042b: JUMPI
0000042c: PUSH1 0x1f
0000042e: NOT
0000042f: SWAP1
00000430: SWAP3
00000431: ADD
00000432: SWAP2
00000433: PUSH1 0x20
00000435: SWAP2
00000436: DUP3
00000437: ADD
00000438: SWAP2
00000439: ADD
0000043a: PUSH2 0x03a3
0000043d: JUMP
0000043e: JUMPDEST
0000043f: POP
00000440: POP
00000441: POP
00000442: SWAP1
00000443: POP
00000444: ADD
00000445: SWAP3
00000446: POP
00000447: POP
00000448: POP
00000449: PUSH1 0x40
0000044b: MLOAD
0000044c: DUP1
0000044d: SWAP2
0000044e: SUB
0000044f: SWAP1
00000450: RETURN
00000451: JUMPDEST
00000452: CALLVALUE
00000453: ISZERO
00000454: PUSH2 0x0459
00000457: JUMPI
00000458: INVALID
00000459: JUMPDEST
0000045a: PUSH2 0x037b
0000045d: PUSH1 0x04
0000045f: CALLDATALOAD
00000460: PUSH2 0x0d7d
00000463: JUMP
00000464: JUMPDEST
00000465: PUSH1 0x40
00000467: DUP1
00000468: MLOAD
00000469: PUSH1 0x20
0000046b: DUP1
0000046c: DUP3
0000046d: MSTORE
0000046e: DUP4
0000046f: MLOAD
00000470: DUP2
00000471: DUP4
00000472: ADD
00000473: MSTORE
00000474: DUP4
00000475: MLOAD
00000476: SWAP2
00000477: SWAP3
00000478: DUP4
00000479: SWAP3
0000047a: SWAP1
0000047b: DUP4
0000047c: ADD
0000047d: SWAP2
0000047e: DUP6
0000047f: DUP2
00000480: ADD
00000481: SWAP2
00000482: MUL
00000483: DUP1
00000484: DUP4
00000485: DUP4
00000486: DUP3
00000487: ISZERO
00000488: PUSH2 0x03c3
0000048b: JUMPI
0000048c: JUMPDEST
0000048d: DUP1
0000048e: MLOAD
0000048f: DUP3
00000490: MSTORE
00000491: PUSH1 0x20
00000493: DUP4
00000494: GT
00000495: ISZERO
00000496: PUSH2 0x03c3
00000499: JUMPI
0000049a: PUSH1 0x1f
0000049c: NOT
0000049d: SWAP1
0000049e: SWAP3
0000049f: ADD
000004a0: SWAP2
000004a1: PUSH1 0x20
000004a3: SWAP2
000004a4: DUP3
000004a5: ADD
000004a6: SWAP2
000004a7: ADD
000004a8: PUSH2 0x03a3
000004ab: JUMP
000004ac: JUMPDEST
000004ad: POP
000004ae: POP
000004af: POP
000004b0: SWAP1
000004b1: POP
000004b2: ADD
000004b3: SWAP3
000004b4: POP
000004b5: POP
000004b6: POP
000004b7: PUSH1 0x40
000004b9: MLOAD
000004ba: DUP1
000004bb: SWAP2
000004bc: SUB
000004bd: SWAP1
000004be: RETURN
000004bf: JUMPDEST
000004c0: CALLVALUE
000004c1: ISZERO
000004c2: PUSH2 0x04c7
000004c5: JUMPI
000004c6: INVALID
000004c7: JUMPDEST
000004c8: PUSH2 0x0232
000004cb: PUSH2 0x0f05
000004ce: JUMP
000004cf: JUMPDEST
000004d0: PUSH1 0x40
000004d2: DUP1
000004d3: MLOAD
000004d4: SWAP2
000004d5: DUP3
000004d6: MSTORE
000004d7: MLOAD
000004d8: SWAP1
000004d9: DUP2
000004da: SWAP1
000004db: SUB
000004dc: PUSH1 0x20
000004de: ADD
000004df: SWAP1
000004e0: RETURN
000004e1: JUMPDEST
000004e2: CALLVALUE
000004e3: ISZERO
000004e4: PUSH2 0x04e9
000004e7: JUMPI
000004e8: INVALID
000004e9: JUMPDEST
000004ea: PUSH2 0x0151
000004ed: PUSH1 0x04
000004ef: CALLDATALOAD
000004f0: PUSH2 0x0f0b
000004f3: JUMP
000004f4: JUMPDEST
000004f5: STOP
000004f6: JUMPDEST
000004f7: CALLVALUE
000004f8: ISZERO
000004f9: PUSH2 0x04fe
000004fc: JUMPI
000004fd: INVALID
000004fe: JUMPDEST
000004ff: PUSH2 0x0151
00000502: PUSH1 0x04
00000504: CALLDATALOAD
00000505: PUSH2 0x0f9b
00000508: JUMP
00000509: JUMPDEST
0000050a: STOP
0000050b: JUMPDEST
0000050c: CALLVALUE
0000050d: ISZERO
0000050e: PUSH2 0x0513
00000511: JUMPI
00000512: INVALID
00000513: JUMPDEST
00000514: PUSH1 0x40
00000516: DUP1
00000517: MLOAD
00000518: PUSH1 0x20
0000051a: PUSH1 0x04
0000051c: PUSH1 0x44
0000051e: CALLDATALOAD
0000051f: DUP2
00000520: DUP2
00000521: ADD
00000522: CALLDATALOAD
00000523: PUSH1 0x1f
00000525: DUP2
00000526: ADD
00000527: DUP5
00000528: SWAP1
00000529: DIV
0000052a: DUP5
0000052b: MUL
0000052c: DUP6
0000052d: ADD
0000052e: DUP5
0000052f: ADD
00000530: SWAP1
00000531: SWAP6
00000532: MSTORE
00000533: DUP5
00000534: DUP5
00000535: MSTORE
00000536: PUSH2 0x0232
00000539: SWAP5
0000053a: DUP3
0000053b: CALLDATALOAD
0000053c: PUSH1 0x01
0000053e: PUSH1 0xa0
00000540: PUSH1 0x02
00000542: EXP
00000543: SUB
00000544: AND
00000545: SWAP5
00000546: PUSH1 0x24
00000548: DUP1
00000549: CALLDATALOAD
0000054a: SWAP6
0000054b: PUSH1 0x64
0000054d: SWAP5
0000054e: SWAP3
0000054f: SWAP4
00000550: SWAP2
00000551: SWAP1
00000552: SWAP3
00000553: ADD
00000554: SWAP2
00000555: DUP2
00000556: SWAP1
00000557: DUP5
00000558: ADD
00000559: DUP4
0000055a: DUP3
0000055b: DUP1
0000055c: DUP3
0000055d: DUP5
0000055e: CALLDATACOPY
0000055f: POP
00000560: SWAP5
00000561: SWAP7
00000562: POP
00000563: PUSH2 0x1089
00000566: SWAP6
00000567: POP
00000568: POP
00000569: POP
0000056a: POP
0000056b: POP
0000056c: POP
0000056d: JUMP
0000056e: JUMPDEST
0000056f: PUSH1 0x40
00000571: DUP1
00000572: MLOAD
00000573: SWAP2
00000574: DUP3
00000575: MSTORE
00000576: MLOAD
00000577: SWAP1
00000578: DUP2
00000579: SWAP1
0000057a: SUB
0000057b: PUSH1 0x20
0000057d: ADD
0000057e: SWAP1
0000057f: RETURN
00000580: JUMPDEST
00000581: CALLVALUE
00000582: ISZERO
00000583: PUSH2 0x0588
00000586: JUMPI
00000587: INVALID
00000588: JUMPDEST
00000589: PUSH2 0x0232
0000058c: PUSH2 0x10a9
0000058f: JUMP
00000590: JUMPDEST
00000591: PUSH1 0x40
00000593: DUP1
00000594: MLOAD
00000595: SWAP2
00000596: DUP3
00000597: MSTORE
00000598: MLOAD
00000599: SWAP1
0000059a: DUP2
0000059b: SWAP1
0000059c: SUB
0000059d: PUSH1 0x20
0000059f: ADD
000005a0: SWAP1
000005a1: RETURN
000005a2: JUMPDEST
000005a3: CALLVALUE
000005a4: ISZERO
000005a5: PUSH2 0x05aa
000005a8: JUMPI
000005a9: INVALID
000005aa: JUMPDEST
000005ab: PUSH2 0x0232
000005ae: PUSH2 0x10ae
000005b1: JUMP
000005b2: JUMPDEST
000005b3: PUSH1 0x40
000005b5: DUP1
000005b6: MLOAD
000005b7: SWAP2
000005b8: DUP3
000005b9: MSTORE
000005ba: MLOAD
000005bb: SWAP1
000005bc: DUP2
000005bd: SWAP1
000005be: SUB
000005bf: PUSH1 0x20
000005c1: ADD
000005c2: SWAP1
000005c3: RETURN
000005c4: JUMPDEST
000005c5: CALLVALUE
000005c6: ISZERO
000005c7: PUSH2 0x05cc
000005ca: JUMPI
000005cb: INVALID
000005cc: JUMPDEST
000005cd: PUSH2 0x0151
000005d0: PUSH1 0x01
000005d2: PUSH1 0xa0
000005d4: PUSH1 0x02
000005d6: EXP
000005d7: SUB
000005d8: PUSH1 0x04
000005da: CALLDATALOAD
000005db: DUP2
000005dc: AND
000005dd: SWAP1
000005de: PUSH1 0x24
000005e0: CALLDATALOAD
000005e1: AND
000005e2: PUSH2 0x10b4
000005e5: JUMP
000005e6: JUMPDEST
000005e7: STOP
000005e8: JUMPDEST
000005e9: CALLVALUE
000005ea: ISZERO
000005eb: PUSH2 0x05f0
000005ee: JUMPI
000005ef: INVALID
000005f0: JUMPDEST
000005f1: PUSH2 0x0151
000005f4: PUSH1 0x04
000005f6: CALLDATALOAD
000005f7: PUSH2 0x1270
000005fa: JUMP
000005fb: JUMPDEST
000005fc: STOP
000005fd: JUMPDEST
000005fe: PUSH1 0x03
00000600: DUP1
00000601: SLOAD
00000602: DUP3
00000603: SWAP1
00000604: DUP2
00000605: LT
00000606: PUSH2 0x060b
00000609: JUMPI
0000060a: INVALID
0000060b: JUMPDEST
0000060c: SWAP1
0000060d: PUSH1 0x00
0000060f: MSTORE
00000610: PUSH1 0x20
00000612: PUSH1 0x00
00000614: KECCAK256
00000615: SWAP1
00000616: ADD
00000617: PUSH1 0x00
00000619: JUMPDEST
0000061a: SWAP2
0000061b: POP
0000061c: SLOAD
0000061d: SWAP1
0000061e: PUSH2 0x0100
00000621: EXP
00000622: SWAP1
00000623: DIV
00000624: PUSH1 0x01
00000626: PUSH1 0xa0
00000628: PUSH1 0x02
0000062a: EXP
0000062b: SUB
0000062c: AND
0000062d: DUP2
0000062e: JUMP
0000062f: JUMPDEST
00000630: PUSH1 0x00
00000632: ADDRESS
00000633: PUSH1 0x01
00000635: PUSH1 0xa0
00000637: PUSH1 0x02
00000639: EXP
0000063a: SUB
0000063b: AND
0000063c: CALLER
0000063d: PUSH1 0x01
0000063f: PUSH1 0xa0
00000641: PUSH1 0x02
00000643: EXP
00000644: SUB
00000645: AND
00000646: EQ
00000647: ISZERO
00000648: ISZERO
00000649: PUSH2 0x0652
0000064c: JUMPI
0000064d: PUSH1 0x00
0000064f: PUSH1 0x00
00000651: REVERT
00000652: JUMPDEST
00000653: PUSH1 0x01
00000655: PUSH1 0xa0
00000657: PUSH1 0x02
00000659: EXP
0000065a: SUB
0000065b: DUP3
0000065c: AND
0000065d: PUSH1 0x00
0000065f: SWAP1
00000660: DUP2
00000661: MSTORE
00000662: PUSH1 0x02
00000664: PUSH1 0x20
00000666: MSTORE
00000667: PUSH1 0x40
00000669: SWAP1
0000066a: KECCAK256
0000066b: SLOAD
0000066c: DUP3
0000066d: SWAP1
0000066e: PUSH1 0xff
00000670: AND
00000671: ISZERO
00000672: ISZERO
00000673: PUSH2 0x067c
00000676: JUMPI
00000677: PUSH1 0x00
00000679: PUSH1 0x00
0000067b: REVERT
0000067c: JUMPDEST
0000067d: PUSH1 0x01
0000067f: PUSH1 0xa0
00000681: PUSH1 0x02
00000683: EXP
00000684: SUB
00000685: DUP4
00000686: AND
00000687: PUSH1 0x00
00000689: SWAP1
0000068a: DUP2
0000068b: MSTORE
0000068c: PUSH1 0x02
0000068e: PUSH1 0x20
00000690: MSTORE
00000691: PUSH1 0x40
00000693: DUP2
00000694: KECCAK256
00000695: DUP1
00000696: SLOAD
00000697: PUSH1 0xff
00000699: NOT
0000069a: AND
0000069b: SWAP1
0000069c: SSTORE
0000069d: SWAP2
0000069e: POP
0000069f: JUMPDEST
000006a0: PUSH1 0x03
000006a2: SLOAD
000006a3: PUSH1 0x00
000006a5: NOT
000006a6: ADD
000006a7: DUP3
000006a8: LT
000006a9: ISZERO
000006aa: PUSH2 0x0777
000006ad: JUMPI
000006ae: DUP3
000006af: PUSH1 0x01
000006b1: PUSH1 0xa0
000006b3: PUSH1 0x02
000006b5: EXP
000006b6: SUB
000006b7: AND
000006b8: PUSH1 0x03
000006ba: DUP4
000006bb: DUP2
000006bc: SLOAD
000006bd: DUP2
000006be: LT
000006bf: ISZERO
000006c0: ISZERO
000006c1: PUSH2 0x06c6
000006c4: JUMPI
000006c5: INVALID
000006c6: JUMPDEST
000006c7: SWAP1
000006c8: PUSH1 0x00
000006ca: MSTORE
000006cb: PUSH1 0x20
000006cd: PUSH1 0x00
000006cf: KECCAK256
000006d0: SWAP1
000006d1: ADD
000006d2: PUSH1 0x00
000006d4: JUMPDEST
000006d5: SWAP1
000006d6: SLOAD
000006d7: SWAP1
000006d8: PUSH2 0x0100
000006db: EXP
000006dc: SWAP1
000006dd: DIV
000006de: PUSH1 0x01
000006e0: PUSH1 0xa0
000006e2: PUSH1 0x02
000006e4: EXP
000006e5: SUB
000006e6: AND
000006e7: PUSH1 0x01
000006e9: PUSH1 0xa0
000006eb: PUSH1 0x02
000006ed: EXP
000006ee: SUB
000006ef: AND
000006f0: EQ
000006f1: ISZERO
000006f2: PUSH2 0x076b
000006f5: JUMPI
000006f6: PUSH1 0x03
000006f8: DUP1
000006f9: SLOAD
000006fa: PUSH1 0x00
000006fc: NOT
000006fd: DUP2
000006fe: ADD
000006ff: SWAP1
00000700: DUP2
00000701: LT
00000702: PUSH2 0x0707
00000705: JUMPI
00000706: INVALID
00000707: JUMPDEST
00000708: SWAP1
00000709: PUSH1 0x00
0000070b: MSTORE
0000070c: PUSH1 0x20
0000070e: PUSH1 0x00
00000710: KECCAK256
00000711: SWAP1
00000712: ADD
00000713: PUSH1 0x00
00000715: JUMPDEST
00000716: SWAP1
00000717: SLOAD
00000718: SWAP1
00000719: PUSH2 0x0100
0000071c: EXP
0000071d: SWAP1
0000071e: DIV
0000071f: PUSH1 0x01
00000721: PUSH1 0xa0
00000723: PUSH1 0x02
00000725: EXP
00000726: SUB
00000727: AND
00000728: PUSH1 0x03
0000072a: DUP4
0000072b: DUP2
0000072c: SLOAD
0000072d: DUP2
0000072e: LT
0000072f: ISZERO
00000730: ISZERO
00000731: PUSH2 0x0736
00000734: JUMPI
00000735: INVALID
00000736: JUMPDEST
00000737: SWAP1
00000738: PUSH1 0x00
0000073a: MSTORE
0000073b: PUSH1 0x20
0000073d: PUSH1 0x00
0000073f: KECCAK256
00000740: SWAP1
00000741: ADD
00000742: PUSH1 0x00
00000744: JUMPDEST
00000745: PUSH2 0x0100
00000748: EXP
00000749: DUP2
0000074a: SLOAD
0000074b: DUP2
0000074c: PUSH1 0x01
0000074e: PUSH1 0xa0
00000750: PUSH1 0x02
00000752: EXP
00000753: SUB
00000754: MUL
00000755: NOT
00000756: AND
00000757: SWAP1
00000758: DUP4
00000759: PUSH1 0x01
0000075b: PUSH1 0xa0
0000075d: PUSH1 0x02
0000075f: EXP
00000760: SUB
00000761: AND
00000762: MUL
00000763: OR
00000764: SWAP1
00000765: SSTORE
00000766: POP
00000767: PUSH2 0x0777
0000076a: JUMP
0000076b: JUMPDEST
0000076c: JUMPDEST
0000076d: PUSH1 0x01
0000076f: SWAP1
00000770: SWAP2
00000771: ADD
00000772: SWAP1
00000773: PUSH2 0x069f
00000776: JUMP
00000777: JUMPDEST
00000778: PUSH1 0x03
0000077a: DUP1
0000077b: SLOAD
0000077c: PUSH1 0x00
0000077e: NOT
0000077f: ADD
00000780: SWAP1
00000781: PUSH2 0x078a
00000784: SWAP1
00000785: DUP3
00000786: PUSH2 0x14cb
00000789: JUMP
0000078a: JUMPDEST
0000078b: POP
0000078c: PUSH1 0x03
0000078e: SLOAD
0000078f: PUSH1 0x04
00000791: SLOAD
00000792: GT
00000793: ISZERO
00000794: PUSH2 0x07a3
00000797: JUMPI
00000798: PUSH1 0x03
0000079a: SLOAD
0000079b: PUSH2 0x07a3
0000079e: SWAP1
0000079f: PUSH2 0x0f0b
000007a2: JUMP
000007a3: JUMPDEST
000007a4: JUMPDEST
000007a5: PUSH1 0x40
000007a7: MLOAD
000007a8: PUSH1 0x01
000007aa: PUSH1 0xa0
000007ac: PUSH1 0x02
000007ae: EXP
000007af: SUB
000007b0: DUP5
000007b1: AND
000007b2: SWAP1
000007b3: PUSH32 0x8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90
000007d4: SWAP1
000007d5: PUSH1 0x00
000007d7: SWAP1
000007d8: LOG2
000007d9: JUMPDEST
000007da: JUMPDEST
000007db: POP
000007dc: JUMPDEST
000007dd: POP
000007de: POP
000007df: JUMP
000007e0: JUMPDEST
000007e1: CALLER
000007e2: PUSH1 0x01
000007e4: PUSH1 0xa0
000007e6: PUSH1 0x02
000007e8: EXP
000007e9: SUB
000007ea: DUP2
000007eb: AND
000007ec: PUSH1 0x00
000007ee: SWAP1
000007ef: DUP2
000007f0: MSTORE
000007f1: PUSH1 0x02
000007f3: PUSH1 0x20
000007f5: MSTORE
000007f6: PUSH1 0x40
000007f8: SWAP1
000007f9: KECCAK256
000007fa: SLOAD
000007fb: PUSH1 0xff
000007fd: AND
000007fe: ISZERO
000007ff: ISZERO
00000800: PUSH2 0x0809
00000803: JUMPI
00000804: PUSH1 0x00
00000806: PUSH1 0x00
00000808: REVERT
00000809: JUMPDEST
0000080a: PUSH1 0x00
0000080c: DUP3
0000080d: DUP2
0000080e: MSTORE
0000080f: PUSH1 0x01
00000811: PUSH1 0x20
00000813: SWAP1
00000814: DUP2
00000815: MSTORE
00000816: PUSH1 0x40
00000818: DUP1
00000819: DUP4
0000081a: KECCAK256
0000081b: CALLER
0000081c: PUSH1 0x01
0000081e: PUSH1 0xa0
00000820: PUSH1 0x02
00000822: EXP
00000823: SUB
00000824: DUP2
00000825: AND
00000826: DUP6
00000827: MSTORE
00000828: SWAP3
00000829: MSTORE
0000082a: SWAP1
0000082b: SWAP2
0000082c: KECCAK256
0000082d: SLOAD
0000082e: DUP4
0000082f: SWAP2
00000830: SWAP1
00000831: PUSH1 0xff
00000833: AND
00000834: ISZERO
00000835: ISZERO
00000836: PUSH2 0x083f
00000839: JUMPI
0000083a: PUSH1 0x00
0000083c: PUSH1 0x00
0000083e: REVERT
0000083f: JUMPDEST
00000840: PUSH1 0x00
00000842: DUP5
00000843: DUP2
00000844: MSTORE
00000845: PUSH1 0x20
00000847: DUP2
00000848: SWAP1
00000849: MSTORE
0000084a: PUSH1 0x40
0000084c: SWAP1
0000084d: KECCAK256
0000084e: PUSH1 0x03
00000850: ADD
00000851: SLOAD
00000852: DUP5
00000853: SWAP1
00000854: PUSH1 0xff
00000856: AND
00000857: ISZERO
00000858: PUSH2 0x0861
0000085b: JUMPI
0000085c: PUSH1 0x00
0000085e: PUSH1 0x00
00000860: REVERT
00000861: JUMPDEST
00000862: PUSH1 0x00
00000864: DUP6
00000865: DUP2
00000866: MSTORE
00000867: PUSH1 0x01
00000869: PUSH1 0x20
0000086b: SWAP1
0000086c: DUP2
0000086d: MSTORE
0000086e: PUSH1 0x40
00000870: DUP1
00000871: DUP4
00000872: KECCAK256
00000873: PUSH1 0x01
00000875: PUSH1 0xa0
00000877: PUSH1 0x02
00000879: EXP
0000087a: SUB
0000087b: CALLER
0000087c: AND
0000087d: DUP1
0000087e: DUP6
0000087f: MSTORE
00000880: SWAP3
00000881: MSTORE
00000882: DUP1
00000883: DUP4
00000884: KECCAK256
00000885: DUP1
00000886: SLOAD
00000887: PUSH1 0xff
00000889: NOT
0000088a: AND
0000088b: SWAP1
0000088c: SSTORE
0000088d: MLOAD
0000088e: DUP8
0000088f: SWAP3
00000890: PUSH32 0xf6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e9
000008b1: SWAP2
000008b2: LOG3
000008b3: JUMPDEST
000008b4: JUMPDEST
000008b5: POP
000008b6: JUMPDEST
000008b7: POP
000008b8: POP
000008b9: JUMPDEST
000008ba: POP
000008bb: POP
000008bc: JUMP
000008bd: JUMPDEST
000008be: PUSH1 0x02
000008c0: PUSH1 0x20
000008c2: MSTORE
000008c3: PUSH1 0x00
000008c5: SWAP1
000008c6: DUP2
000008c7: MSTORE
000008c8: PUSH1 0x40
000008ca: SWAP1
000008cb: KECCAK256
000008cc: SLOAD
000008cd: PUSH1 0xff
000008cf: AND
000008d0: DUP2
000008d1: JUMP
000008d2: JUMPDEST
000008d3: PUSH1 0x01
000008d5: PUSH1 0x20
000008d7: SWAP1
000008d8: DUP2
000008d9: MSTORE
000008da: PUSH1 0x00
000008dc: SWAP3
000008dd: DUP4
000008de: MSTORE
000008df: PUSH1 0x40
000008e1: DUP1
000008e2: DUP5
000008e3: KECCAK256
000008e4: SWAP1
000008e5: SWAP2
000008e6: MSTORE
000008e7: SWAP1
000008e8: DUP3
000008e9: MSTORE
000008ea: SWAP1
000008eb: KECCAK256
000008ec: SLOAD
000008ed: PUSH1 0xff
000008ef: AND
000008f0: DUP2
000008f1: JUMP
000008f2: JUMPDEST
000008f3: PUSH1 0x00
000008f5: DUP1
000008f6: JUMPDEST
000008f7: PUSH1 0x05
000008f9: SLOAD
000008fa: DUP2
000008fb: LT
000008fc: ISZERO
000008fd: PUSH2 0x0959
00000900: JUMPI
00000901: DUP4
00000902: DUP1
00000903: ISZERO
00000904: PUSH2 0x091f
00000907: JUMPI
00000908: POP
00000909: PUSH1 0x00
0000090b: DUP2
0000090c: DUP2
0000090d: MSTORE
0000090e: PUSH1 0x20
00000910: DUP2
00000911: SWAP1
00000912: MSTORE
00000913: PUSH1 0x40
00000915: SWAP1
00000916: KECCAK256
00000917: PUSH1 0x03
00000919: ADD
0000091a: SLOAD
0000091b: PUSH1 0xff
0000091d: AND
0000091e: ISZERO
0000091f: JUMPDEST
00000920: DUP1
00000921: PUSH2 0x0943
00000924: JUMPI
00000925: POP
00000926: DUP3
00000927: DUP1
00000928: ISZERO
00000929: PUSH2 0x0943
0000092c: JUMPI
0000092d: POP
0000092e: PUSH1 0x00
00000930: DUP2
00000931: DUP2
00000932: MSTORE
00000933: PUSH1 0x20
00000935: DUP2
00000936: SWAP1
00000937: MSTORE
00000938: PUSH1 0x40
0000093a: SWAP1
0000093b: KECCAK256
0000093c: PUSH1 0x03
0000093e: ADD
0000093f: SLOAD
00000940: PUSH1 0xff
00000942: AND
00000943: JUMPDEST
00000944: JUMPDEST
00000945: ISZERO
00000946: PUSH2 0x0950
00000949: JUMPI
0000094a: PUSH1 0x01
0000094c: DUP3
0000094d: ADD
0000094e: SWAP2
0000094f: POP
00000950: JUMPDEST
00000951: JUMPDEST
00000952: PUSH1 0x01
00000954: ADD
00000955: PUSH2 0x08f6
00000958: JUMP
00000959: JUMPDEST
0000095a: JUMPDEST
0000095b: POP
0000095c: SWAP3
0000095d: SWAP2
0000095e: POP
0000095f: POP
00000960: JUMP
00000961: JUMPDEST
00000962: ADDRESS
00000963: PUSH1 0x01
00000965: PUSH1 0xa0
00000967: PUSH1 0x02
00000969: EXP
0000096a: SUB
0000096b: AND
0000096c: CALLER
0000096d: PUSH1 0x01
0000096f: PUSH1 0xa0
00000971: PUSH1 0x02
00000973: EXP
00000974: SUB
00000975: AND
00000976: EQ
00000977: ISZERO
00000978: ISZERO
00000979: PUSH2 0x0982
0000097c: JUMPI
0000097d: PUSH1 0x00
0000097f: PUSH1 0x00
00000981: REVERT
00000982: JUMPDEST
00000983: PUSH1 0x01
00000985: PUSH1 0xa0
00000987: PUSH1 0x02
00000989: EXP
0000098a: SUB
0000098b: DUP2
0000098c: AND
0000098d: PUSH1 0x00
0000098f: SWAP1
00000990: DUP2
00000991: MSTORE
00000992: PUSH1 0x02
00000994: PUSH1 0x20
00000996: MSTORE
00000997: PUSH1 0x40
00000999: SWAP1
0000099a: KECCAK256
0000099b: SLOAD
0000099c: DUP2
0000099d: SWAP1
0000099e: PUSH1 0xff
000009a0: AND
000009a1: ISZERO
000009a2: PUSH2 0x09ab
000009a5: JUMPI
000009a6: PUSH1 0x00
000009a8: PUSH1 0x00
000009aa: REVERT
000009ab: JUMPDEST
000009ac: DUP2
000009ad: PUSH1 0x01
000009af: PUSH1 0xa0
000009b1: PUSH1 0x02
000009b3: EXP
000009b4: SUB
000009b5: DUP2
000009b6: AND
000009b7: ISZERO
000009b8: ISZERO
000009b9: PUSH2 0x09c2
000009bc: JUMPI
000009bd: PUSH1 0x00
000009bf: PUSH1 0x00
000009c1: REVERT
000009c2: JUMPDEST
000009c3: PUSH1 0x03
000009c5: DUP1
000009c6: SLOAD
000009c7: SWAP1
000009c8: POP
000009c9: PUSH1 0x01
000009cb: ADD
000009cc: PUSH1 0x04
000009ce: SLOAD
000009cf: PUSH1 0x06
000009d1: DUP3
000009d2: GT
000009d3: DUP1
000009d4: PUSH2 0x09dc
000009d7: JUMPI
000009d8: POP
000009d9: DUP2
000009da: DUP2
000009db: GT
000009dc: JUMPDEST
000009dd: DUP1
000009de: PUSH2 0x09e5
000009e1: JUMPI
000009e2: POP
000009e3: DUP1
000009e4: ISZERO
000009e5: JUMPDEST
000009e6: DUP1
000009e7: PUSH2 0x09ee
000009ea: JUMPI
000009eb: POP
000009ec: DUP2
000009ed: ISZERO
000009ee: JUMPDEST
000009ef: ISZERO
000009f0: PUSH2 0x09f9
000009f3: JUMPI
000009f4: PUSH1 0x00
000009f6: PUSH1 0x00
000009f8: REVERT
000009f9: JUMPDEST
000009fa: PUSH1 0x01
000009fc: PUSH1 0xa0
000009fe: PUSH1 0x02
00000a00: EXP
00000a01: SUB
00000a02: DUP6
00000a03: AND
00000a04: PUSH1 0x00
00000a06: SWAP1
00000a07: DUP2
00000a08: MSTORE
00000a09: PUSH1 0x02
00000a0b: PUSH1 0x20
00000a0d: MSTORE
00000a0e: PUSH1 0x40
00000a10: SWAP1
00000a11: KECCAK256
00000a12: DUP1
00000a13: SLOAD
00000a14: PUSH1 0xff
00000a16: NOT
00000a17: AND
00000a18: PUSH1 0x01
00000a1a: SWAP1
00000a1b: DUP2
00000a1c: OR
00000a1d: SWAP1
00000a1e: SWAP2
00000a1f: SSTORE
00000a20: PUSH1 0x03
00000a22: DUP1
00000a23: SLOAD
00000a24: SWAP1
00000a25: SWAP2
00000a26: DUP2
00000a27: ADD
00000a28: PUSH2 0x0a31
00000a2b: DUP4
00000a2c: DUP3
00000a2d: PUSH2 0x14cb
00000a30: JUMP
00000a31: JUMPDEST
00000a32: SWAP2
00000a33: PUSH1 0x00
00000a35: MSTORE
00000a36: PUSH1 0x20
00000a38: PUSH1 0x00
00000a3a: KECCAK256
00000a3b: SWAP1
00000a3c: ADD
00000a3d: PUSH1 0x00
00000a3f: JUMPDEST
00000a40: DUP2
00000a41: SLOAD
00000a42: PUSH1 0x01
00000a44: PUSH1 0xa0
00000a46: PUSH1 0x02
00000a48: EXP
00000a49: SUB
00000a4a: DUP1
00000a4b: DUP11
00000a4c: AND
00000a4d: PUSH2 0x0100
00000a50: SWAP4
00000a51: SWAP1
00000a52: SWAP4
00000a53: EXP
00000a54: DUP4
00000a55: DUP2
00000a56: MUL
00000a57: SWAP2
00000a58: MUL
00000a59: NOT
00000a5a: SWAP1
00000a5b: SWAP2
00000a5c: AND
00000a5d: OR
00000a5e: SWAP1
00000a5f: SWAP2
00000a60: SSTORE
00000a61: PUSH1 0x40
00000a63: MLOAD
00000a64: SWAP1
00000a65: SWAP2
00000a66: POP
00000a67: PUSH32 0xf39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d
00000a88: SWAP1
00000a89: PUSH1 0x00
00000a8b: SWAP1
00000a8c: LOG2
00000a8d: JUMPDEST
00000a8e: JUMPDEST
00000a8f: POP
00000a90: POP
00000a91: JUMPDEST
00000a92: POP
00000a93: JUMPDEST
00000a94: POP
00000a95: JUMPDEST
00000a96: POP
00000a97: JUMP
00000a98: JUMPDEST
00000a99: PUSH1 0x00
00000a9b: DUP1
00000a9c: DUP1
00000a9d: JUMPDEST
00000a9e: PUSH1 0x03
00000aa0: SLOAD
00000aa1: DUP2
00000aa2: LT
00000aa3: ISZERO
00000aa4: PUSH2 0x0b24
00000aa7: JUMPI
00000aa8: PUSH1 0x00
00000aaa: DUP5
00000aab: DUP2
00000aac: MSTORE
00000aad: PUSH1 0x01
00000aaf: PUSH1 0x20
00000ab1: MSTORE
00000ab2: PUSH1 0x40
00000ab4: DUP2
00000ab5: KECCAK256
00000ab6: PUSH1 0x03
00000ab8: DUP1
00000ab9: SLOAD
00000aba: SWAP2
00000abb: SWAP3
00000abc: SWAP2
00000abd: DUP5
00000abe: SWAP1
00000abf: DUP2
00000ac0: LT
00000ac1: PUSH2 0x0ac6
00000ac4: JUMPI
00000ac5: INVALID
00000ac6: JUMPDEST
00000ac7: SWAP1
00000ac8: PUSH1 0x00
00000aca: MSTORE
00000acb: PUSH1 0x20
00000acd: PUSH1 0x00
00000acf: KECCAK256
00000ad0: SWAP1
00000ad1: ADD
00000ad2: PUSH1 0x00
00000ad4: JUMPDEST
00000ad5: SWAP1
00000ad6: SLOAD
00000ad7: PUSH1 0x01
00000ad9: PUSH1 0xa0
00000adb: PUSH1 0x02
00000add: EXP
00000ade: SUB
00000adf: PUSH2 0x0100
00000ae2: SWAP3
00000ae3: SWAP1
00000ae4: SWAP3
00000ae5: EXP
00000ae6: SWAP1
00000ae7: DIV
00000ae8: AND
00000ae9: DUP2
00000aea: MSTORE
00000aeb: PUSH1 0x20
00000aed: DUP2
00000aee: ADD
00000aef: SWAP2
00000af0: SWAP1
00000af1: SWAP2
00000af2: MSTORE
00000af3: PUSH1 0x40
00000af5: ADD
00000af6: PUSH1 0x00
00000af8: KECCAK256
00000af9: SLOAD
00000afa: PUSH1 0xff
00000afc: AND
00000afd: ISZERO
00000afe: PUSH2 0x0b08
00000b01: JUMPI
00000b02: PUSH1 0x01
00000b04: DUP3
00000b05: ADD
00000b06: SWAP2
00000b07: POP
00000b08: JUMPDEST
00000b09: PUSH1 0x04
00000b0b: SLOAD
00000b0c: DUP3
00000b0d: EQ
00000b0e: ISZERO
00000b0f: PUSH2 0x0b1b
00000b12: JUMPI
00000b13: PUSH1 0x01
00000b15: SWAP3
00000b16: POP
00000b17: PUSH2 0x0b24
00000b1a: JUMP
00000b1b: JUMPDEST
00000b1c: JUMPDEST
00000b1d: PUSH1 0x01
00000b1f: ADD
00000b20: PUSH2 0x0a9d
00000b23: JUMP
00000b24: JUMPDEST
00000b25: JUMPDEST
00000b26: POP
00000b27: POP
00000b28: SWAP2
00000b29: SWAP1
00000b2a: POP
00000b2b: JUMP
00000b2c: JUMPDEST
00000b2d: PUSH1 0x00
00000b2f: DUP1
00000b30: JUMPDEST
00000b31: PUSH1 0x03
00000b33: SLOAD
00000b34: DUP2
00000b35: LT
00000b36: ISZERO
00000b37: PUSH2 0x0ba4
00000b3a: JUMPI
00000b3b: PUSH1 0x00
00000b3d: DUP4
00000b3e: DUP2
00000b3f: MSTORE
00000b40: PUSH1 0x01
00000b42: PUSH1 0x20
00000b44: MSTORE
00000b45: PUSH1 0x40
00000b47: DUP2
00000b48: KECCAK256
00000b49: PUSH1 0x03
00000b4b: DUP1
00000b4c: SLOAD
00000b4d: SWAP2
00000b4e: SWAP3
00000b4f: SWAP2
00000b50: DUP5
00000b51: SWAP1
00000b52: DUP2
00000b53: LT
00000b54: PUSH2 0x0b59
00000b57: JUMPI
00000b58: INVALID
00000b59: JUMPDEST
00000b5a: SWAP1
00000b5b: PUSH1 0x00
00000b5d: MSTORE
00000b5e: PUSH1 0x20
00000b60: PUSH1 0x00
00000b62: KECCAK256
00000b63: SWAP1
00000b64: ADD
00000b65: PUSH1 0x00
00000b67: JUMPDEST
00000b68: SWAP1
00000b69: SLOAD
00000b6a: PUSH1 0x01
00000b6c: PUSH1 0xa0
00000b6e: PUSH1 0x02
00000b70: EXP
00000b71: SUB
00000b72: PUSH2 0x0100
00000b75: SWAP3
00000b76: SWAP1
00000b77: SWAP3
00000b78: EXP
00000b79: SWAP1
00000b7a: DIV
00000b7b: AND
00000b7c: DUP2
00000b7d: MSTORE
00000b7e: PUSH1 0x20
00000b80: DUP2
00000b81: ADD
00000b82: SWAP2
00000b83: SWAP1
00000b84: SWAP2
00000b85: MSTORE
00000b86: PUSH1 0x40
00000b88: ADD
00000b89: PUSH1 0x00
00000b8b: KECCAK256
00000b8c: SLOAD
00000b8d: PUSH1 0xff
00000b8f: AND
00000b90: ISZERO
00000b91: PUSH2 0x0b9b
00000b94: JUMPI
00000b95: PUSH1 0x01
00000b97: DUP3
00000b98: ADD
00000b99: SWAP2
00000b9a: POP
00000b9b: JUMPDEST
00000b9c: JUMPDEST
00000b9d: PUSH1 0x01
00000b9f: ADD
00000ba0: PUSH2 0x0b30
00000ba3: JUMP
00000ba4: JUMPDEST
00000ba5: JUMPDEST
00000ba6: POP
00000ba7: SWAP2
00000ba8: SWAP1
00000ba9: POP
00000baa: JUMP
00000bab: JUMPDEST
00000bac: PUSH1 0x00
00000bae: PUSH1 0x20
00000bb0: DUP2
00000bb1: SWAP1
00000bb2: MSTORE
00000bb3: SWAP1
00000bb4: DUP2
00000bb5: MSTORE
00000bb6: PUSH1 0x40
00000bb8: SWAP1
00000bb9: KECCAK256
00000bba: DUP1
00000bbb: SLOAD
00000bbc: PUSH1 0x01
00000bbe: DUP3
00000bbf: ADD
00000bc0: SLOAD
00000bc1: PUSH1 0x03
00000bc3: DUP4
00000bc4: ADD
00000bc5: SLOAD
00000bc6: PUSH1 0x01
00000bc8: PUSH1 0xa0
00000bca: PUSH1 0x02
00000bcc: EXP
00000bcd: SUB
00000bce: SWAP1
00000bcf: SWAP3
00000bd0: AND
00000bd1: SWAP3
00000bd2: SWAP1
00000bd3: SWAP2
00000bd4: PUSH1 0x02
00000bd6: SWAP1
00000bd7: SWAP2
00000bd8: ADD
00000bd9: SWAP1
00000bda: PUSH1 0xff
00000bdc: AND
00000bdd: DUP5
00000bde: JUMP
00000bdf: JUMPDEST
00000be0: PUSH2 0x0be7
00000be3: PUSH2 0x151f
00000be6: JUMP
00000be7: JUMPDEST
00000be8: PUSH1 0x03
00000bea: DUP1
00000beb: SLOAD
00000bec: DUP1
00000bed: PUSH1 0x20
00000bef: MUL
00000bf0: PUSH1 0x20
00000bf2: ADD
00000bf3: PUSH1 0x40
00000bf5: MLOAD
00000bf6: SWAP1
00000bf7: DUP2
00000bf8: ADD
00000bf9: PUSH1 0x40
00000bfb: MSTORE
00000bfc: DUP1
00000bfd: SWAP3
00000bfe: SWAP2
00000bff: SWAP1
00000c00: DUP2
00000c01: DUP2
00000c02: MSTORE
00000c03: PUSH1 0x20
00000c05: ADD
00000c06: DUP3
00000c07: DUP1
00000c08: SLOAD
00000c09: DUP1
00000c0a: ISZERO
00000c0b: PUSH2 0x0c3d
00000c0e: JUMPI
00000c0f: PUSH1 0x20
00000c11: MUL
00000c12: DUP3
00000c13: ADD
00000c14: SWAP2
00000c15: SWAP1
00000c16: PUSH1 0x00
00000c18: MSTORE
00000c19: PUSH1 0x20
00000c1b: PUSH1 0x00
00000c1d: KECCAK256
00000c1e: SWAP1
00000c1f: JUMPDEST
00000c20: DUP2
00000c21: SLOAD
00000c22: PUSH1 0x01
00000c24: PUSH1 0xa0
00000c26: PUSH1 0x02
00000c28: EXP
00000c29: SUB
00000c2a: AND
00000c2b: DUP2
00000c2c: MSTORE
00000c2d: PUSH1 0x01
00000c2f: SWAP1
00000c30: SWAP2
00000c31: ADD
00000c32: SWAP1
00000c33: PUSH1 0x20
00000c35: ADD
00000c36: DUP1
00000c37: DUP4
00000c38: GT
00000c39: PUSH2 0x0c1f
00000c3c: JUMPI
00000c3d: JUMPDEST
00000c3e: POP
00000c3f: POP
00000c40: POP
00000c41: POP
00000c42: POP
00000c43: SWAP1
00000c44: POP
00000c45: JUMPDEST
00000c46: SWAP1
00000c47: JUMP
00000c48: JUMPDEST
00000c49: PUSH2 0x0c50
00000c4c: PUSH2 0x151f
00000c4f: JUMP
00000c50: JUMPDEST
00000c51: PUSH2 0x0c58
00000c54: PUSH2 0x151f
00000c57: JUMP
00000c58: JUMPDEST
00000c59: PUSH1 0x00
00000c5b: PUSH1 0x00
00000c5d: PUSH1 0x05
00000c5f: SLOAD
00000c60: PUSH1 0x40
00000c62: MLOAD
00000c63: DUP1
00000c64: MSIZE
00000c65: LT
00000c66: PUSH2 0x0c6c
00000c69: JUMPI
00000c6a: POP
00000c6b: MSIZE
00000c6c: JUMPDEST
00000c6d: SWAP1
00000c6e: DUP1
00000c6f: DUP3
00000c70: MSTORE
00000c71: DUP1
00000c72: PUSH1 0x20
00000c74: MUL
00000c75: PUSH1 0x20
00000c77: ADD
00000c78: DUP3
00000c79: ADD
00000c7a: PUSH1 0x40
00000c7c: MSTORE
00000c7d: JUMPDEST
00000c7e: POP
00000c7f: SWAP3
00000c80: POP
00000c81: PUSH1 0x00
00000c83: SWAP2
00000c84: POP
00000c85: PUSH1 0x00
00000c87: SWAP1
00000c88: POP
00000c89: JUMPDEST
00000c8a: PUSH1 0x05
00000c8c: SLOAD
00000c8d: DUP2
00000c8e: LT
00000c8f: ISZERO
00000c90: PUSH2 0x0d06
00000c93: JUMPI
00000c94: DUP6
00000c95: DUP1
00000c96: ISZERO
00000c97: PUSH2 0x0cb2
00000c9a: JUMPI
00000c9b: POP
00000c9c: PUSH1 0x00
00000c9e: DUP2
00000c9f: DUP2
00000ca0: MSTORE
00000ca1: PUSH1 0x20
00000ca3: DUP2
00000ca4: SWAP1
00000ca5: MSTORE
00000ca6: PUSH1 0x40
00000ca8: SWAP1
00000ca9: KECCAK256
00000caa: PUSH1 0x03
00000cac: ADD
00000cad: SLOAD
00000cae: PUSH1 0xff
00000cb0: AND
00000cb1: ISZERO
00000cb2: JUMPDEST
00000cb3: DUP1
00000cb4: PUSH2 0x0cd6
00000cb7: JUMPI
00000cb8: POP
00000cb9: DUP5
00000cba: DUP1
00000cbb: ISZERO
00000cbc: PUSH2 0x0cd6
00000cbf: JUMPI
00000cc0: POP
00000cc1: PUSH1 0x00
00000cc3: DUP2
00000cc4: DUP2
00000cc5: MSTORE
00000cc6: PUSH1 0x20
00000cc8: DUP2
00000cc9: SWAP1
00000cca: MSTORE
00000ccb: PUSH1 0x40
00000ccd: SWAP1
00000cce: KECCAK256
00000ccf: PUSH1 0x03
00000cd1: ADD
00000cd2: SLOAD
00000cd3: PUSH1 0xff
00000cd5: AND
00000cd6: JUMPDEST
00000cd7: JUMPDEST
00000cd8: ISZERO
00000cd9: PUSH2 0x0cfd
00000cdc: JUMPI
00000cdd: DUP1
00000cde: DUP4
00000cdf: DUP4
00000ce0: DUP2
00000ce1: MLOAD
00000ce2: DUP2
00000ce3: LT
00000ce4: ISZERO
00000ce5: ISZERO
00000ce6: PUSH2 0x0ceb
00000ce9: JUMPI
00000cea: INVALID
00000ceb: JUMPDEST
00000cec: PUSH1 0x20
00000cee: SWAP1
00000cef: DUP2
00000cf0: MUL
00000cf1: SWAP1
00000cf2: SWAP2
00000cf3: ADD
00000cf4: ADD
00000cf5: MSTORE
00000cf6: PUSH1 0x01
00000cf8: SWAP2
00000cf9: SWAP1
00000cfa: SWAP2
00000cfb: ADD
00000cfc: SWAP1
00000cfd: JUMPDEST
00000cfe: JUMPDEST
00000cff: PUSH1 0x01
00000d01: ADD
00000d02: PUSH2 0x0c89
00000d05: JUMP
00000d06: JUMPDEST
00000d07: DUP8
00000d08: DUP8
00000d09: SUB
00000d0a: PUSH1 0x40
00000d0c: MLOAD
00000d0d: DUP1
00000d0e: MSIZE
00000d0f: LT
00000d10: PUSH2 0x0d16
00000d13: JUMPI
00000d14: POP
00000d15: MSIZE
00000d16: JUMPDEST
00000d17: SWAP1
00000d18: DUP1
00000d19: DUP3
00000d1a: MSTORE
00000d1b: DUP1
00000d1c: PUSH1 0x20
00000d1e: MUL
00000d1f: PUSH1 0x20
00000d21: ADD
00000d22: DUP3
00000d23: ADD
00000d24: PUSH1 0x40
00000d26: MSTORE
00000d27: JUMPDEST
00000d28: POP
00000d29: SWAP4
00000d2a: POP
00000d2b: DUP8
00000d2c: SWAP1
00000d2d: POP
00000d2e: JUMPDEST
00000d2f: DUP7
00000d30: DUP2
00000d31: LT
00000d32: ISZERO
00000d33: PUSH2 0x0d71
00000d36: JUMPI
00000d37: DUP3
00000d38: DUP2
00000d39: DUP2
00000d3a: MLOAD
00000d3b: DUP2
00000d3c: LT
00000d3d: ISZERO
00000d3e: ISZERO
00000d3f: PUSH2 0x0d44
00000d42: JUMPI
00000d43: INVALID
00000d44: JUMPDEST
00000d45: SWAP1
00000d46: PUSH1 0x20
00000d48: ADD
00000d49: SWAP1
00000d4a: PUSH1 0x20
00000d4c: MUL
00000d4d: ADD
00000d4e: MLOAD
00000d4f: DUP5
00000d50: DUP10
00000d51: DUP4
00000d52: SUB
00000d53: DUP2
00000d54: MLOAD
00000d55: DUP2
00000d56: LT
00000d57: ISZERO
00000d58: ISZERO
00000d59: PUSH2 0x0d5e
00000d5c: JUMPI
00000d5d: INVALID
00000d5e: JUMPDEST
00000d5f: PUSH1 0x20
00000d61: SWAP1
00000d62: DUP2
00000d63: MUL
00000d64: SWAP1
00000d65: SWAP2
00000d66: ADD
00000d67: ADD
00000d68: MSTORE
00000d69: JUMPDEST
00000d6a: PUSH1 0x01
00000d6c: ADD
00000d6d: PUSH2 0x0d2e
00000d70: JUMP
00000d71: JUMPDEST
00000d72: JUMPDEST
00000d73: POP
00000d74: POP
00000d75: POP
00000d76: SWAP5
00000d77: SWAP4
00000d78: POP
00000d79: POP
00000d7a: POP
00000d7b: POP
00000d7c: JUMP
00000d7d: JUMPDEST
00000d7e: PUSH2 0x0d85
00000d81: PUSH2 0x151f
00000d84: JUMP
00000d85: JUMPDEST
00000d86: PUSH2 0x0d8d
00000d89: PUSH2 0x151f
00000d8c: JUMP
00000d8d: JUMPDEST
00000d8e: PUSH1 0x03
00000d90: SLOAD
00000d91: PUSH1 0x40
00000d93: MLOAD
00000d94: PUSH1 0x00
00000d96: SWAP2
00000d97: DUP3
00000d98: SWAP2
00000d99: DUP1
00000d9a: MSIZE
00000d9b: LT
00000d9c: PUSH2 0x0da2
00000d9f: JUMPI
00000da0: POP
00000da1: MSIZE
00000da2: JUMPDEST
00000da3: SWAP1
00000da4: DUP1
00000da5: DUP3
00000da6: MSTORE
00000da7: DUP1
00000da8: PUSH1 0x20
00000daa: MUL
00000dab: PUSH1 0x20
00000dad: ADD
00000dae: DUP3
00000daf: ADD
00000db0: PUSH1 0x40
00000db2: MSTORE
00000db3: JUMPDEST
00000db4: POP
00000db5: SWAP3
00000db6: POP
00000db7: PUSH1 0x00
00000db9: SWAP2
00000dba: POP
00000dbb: PUSH1 0x00
00000dbd: SWAP1
00000dbe: POP
00000dbf: JUMPDEST
00000dc0: PUSH1 0x03
00000dc2: SLOAD
00000dc3: DUP2
00000dc4: LT
00000dc5: ISZERO
00000dc6: PUSH2 0x0e87
00000dc9: JUMPI
00000dca: PUSH1 0x00
00000dcc: DUP6
00000dcd: DUP2
00000dce: MSTORE
00000dcf: PUSH1 0x01
00000dd1: PUSH1 0x20
00000dd3: MSTORE
00000dd4: PUSH1 0x40
00000dd6: DUP2
00000dd7: KECCAK256
00000dd8: PUSH1 0x03
00000dda: DUP1
00000ddb: SLOAD
00000ddc: SWAP2
00000ddd: SWAP3
00000dde: SWAP2
00000ddf: DUP5
00000de0: SWAP1
00000de1: DUP2
00000de2: LT
00000de3: PUSH2 0x0de8
00000de6: JUMPI
00000de7: INVALID
00000de8: JUMPDEST
00000de9: SWAP1
00000dea: PUSH1 0x00
00000dec: MSTORE
00000ded: PUSH1 0x20
00000def: PUSH1 0x00
00000df1: KECCAK256
00000df2: SWAP1
00000df3: ADD
00000df4: PUSH1 0x00
00000df6: JUMPDEST
00000df7: SWAP1
00000df8: SLOAD
00000df9: PUSH1 0x01
00000dfb: PUSH1 0xa0
00000dfd: PUSH1 0x02
00000dff: EXP
00000e00: SUB
00000e01: PUSH2 0x0100
00000e04: SWAP3
00000e05: SWAP1
00000e06: SWAP3
00000e07: EXP
00000e08: SWAP1
00000e09: DIV
00000e0a: AND
00000e0b: DUP2
00000e0c: MSTORE
00000e0d: PUSH1 0x20
00000e0f: DUP2
00000e10: ADD
00000e11: SWAP2
00000e12: SWAP1
00000e13: SWAP2
00000e14: MSTORE
00000e15: PUSH1 0x40
00000e17: ADD
00000e18: PUSH1 0x00
00000e1a: KECCAK256
00000e1b: SLOAD
00000e1c: PUSH1 0xff
00000e1e: AND
00000e1f: ISZERO
00000e20: PUSH2 0x0e7e
00000e23: JUMPI
00000e24: PUSH1 0x03
00000e26: DUP1
00000e27: SLOAD
00000e28: DUP3
00000e29: SWAP1
00000e2a: DUP2
00000e2b: LT
00000e2c: PUSH2 0x0e31
00000e2f: JUMPI
00000e30: INVALID
00000e31: JUMPDEST
00000e32: SWAP1
00000e33: PUSH1 0x00
00000e35: MSTORE
00000e36: PUSH1 0x20
00000e38: PUSH1 0x00
00000e3a: KECCAK256
00000e3b: SWAP1
00000e3c: ADD
00000e3d: PUSH1 0x00
00000e3f: JUMPDEST
00000e40: SWAP1
00000e41: SLOAD
00000e42: SWAP1
00000e43: PUSH2 0x0100
00000e46: EXP
00000e47: SWAP1
00000e48: DIV
00000e49: PUSH1 0x01
00000e4b: PUSH1 0xa0
00000e4d: PUSH1 0x02
00000e4f: EXP
00000e50: SUB
00000e51: AND
00000e52: DUP4
00000e53: DUP4
00000e54: DUP2
00000e55: MLOAD
00000e56: DUP2
00000e57: LT
00000e58: ISZERO
00000e59: ISZERO
00000e5a: PUSH2 0x0e5f
00000e5d: JUMPI
00000e5e: INVALID
00000e5f: JUMPDEST
00000e60: PUSH1 0x01
00000e62: PUSH1 0xa0
00000e64: PUSH1 0x02
00000e66: EXP
00000e67: SUB
00000e68: SWAP1
00000e69: SWAP3
00000e6a: AND
00000e6b: PUSH1 0x20
00000e6d: SWAP3
00000e6e: DUP4
00000e6f: MUL
00000e70: SWAP1
00000e71: SWAP2
00000e72: ADD
00000e73: SWAP1
00000e74: SWAP2
00000e75: ADD
00000e76: MSTORE
00000e77: PUSH1 0x01
00000e79: SWAP2
00000e7a: SWAP1
00000e7b: SWAP2
00000e7c: ADD
00000e7d: SWAP1
00000e7e: JUMPDEST
00000e7f: JUMPDEST
00000e80: PUSH1 0x01
00000e82: ADD
00000e83: PUSH2 0x0dbf
00000e86: JUMP
00000e87: JUMPDEST
00000e88: DUP2
00000e89: PUSH1 0x40
00000e8b: MLOAD
00000e8c: DUP1
00000e8d: MSIZE
00000e8e: LT
00000e8f: PUSH2 0x0e95
00000e92: JUMPI
00000e93: POP
00000e94: MSIZE
00000e95: JUMPDEST
00000e96: SWAP1
00000e97: DUP1
00000e98: DUP3
00000e99: MSTORE
00000e9a: DUP1
00000e9b: PUSH1 0x20
00000e9d: MUL
00000e9e: PUSH1 0x20
00000ea0: ADD
00000ea1: DUP3
00000ea2: ADD
00000ea3: PUSH1 0x40
00000ea5: MSTORE
00000ea6: JUMPDEST
00000ea7: POP
00000ea8: SWAP4
00000ea9: POP
00000eaa: PUSH1 0x00
00000eac: SWAP1
00000ead: POP
00000eae: JUMPDEST
00000eaf: DUP2
00000eb0: DUP2
00000eb1: LT
00000eb2: ISZERO
00000eb3: PUSH2 0x0efc
00000eb6: JUMPI
00000eb7: DUP3
00000eb8: DUP2
00000eb9: DUP2
00000eba: MLOAD
00000ebb: DUP2
00000ebc: LT
00000ebd: ISZERO
00000ebe: ISZERO
00000ebf: PUSH2 0x0ec4
00000ec2: JUMPI
00000ec3: INVALID
00000ec4: JUMPDEST
00000ec5: SWAP1
00000ec6: PUSH1 0x20
00000ec8: ADD
00000ec9: SWAP1
00000eca: PUSH1 0x20
00000ecc: MUL
00000ecd: ADD
00000ece: MLOAD
00000ecf: DUP5
00000ed0: DUP3
00000ed1: DUP2
00000ed2: MLOAD
00000ed3: DUP2
00000ed4: LT
00000ed5: ISZERO
00000ed6: ISZERO
00000ed7: PUSH2 0x0edc
00000eda: JUMPI
00000edb: INVALID
00000edc: JUMPDEST
00000edd: PUSH1 0x01
00000edf: PUSH1 0xa0
00000ee1: PUSH1 0x02
00000ee3: EXP
00000ee4: SUB
00000ee5: SWAP1
00000ee6: SWAP3
00000ee7: AND
00000ee8: PUSH1 0x20
00000eea: SWAP3
00000eeb: DUP4
00000eec: MUL
00000eed: SWAP1
00000eee: SWAP2
00000eef: ADD
00000ef0: SWAP1
00000ef1: SWAP2
00000ef2: ADD
00000ef3: MSTORE
00000ef4: JUMPDEST
00000ef5: PUSH1 0x01
00000ef7: ADD
00000ef8: PUSH2 0x0eae
00000efb: JUMP
00000efc: JUMPDEST
00000efd: JUMPDEST
00000efe: POP
00000eff: POP
00000f00: POP
00000f01: SWAP2
00000f02: SWAP1
00000f03: POP
00000f04: JUMP
00000f05: JUMPDEST
00000f06: PUSH1 0x05
00000f08: SLOAD
00000f09: DUP2
00000f0a: JUMP
00000f0b: JUMPDEST
00000f0c: ADDRESS
00000f0d: PUSH1 0x01
00000f0f: PUSH1 0xa0
00000f11: PUSH1 0x02
00000f13: EXP
00000f14: SUB
00000f15: AND
00000f16: CALLER
00000f17: PUSH1 0x01
00000f19: PUSH1 0xa0
00000f1b: PUSH1 0x02
00000f1d: EXP
00000f1e: SUB
00000f1f: AND
00000f20: EQ
00000f21: ISZERO
00000f22: ISZERO
00000f23: PUSH2 0x0f2c
00000f26: JUMPI
00000f27: PUSH1 0x00
00000f29: PUSH1 0x00
00000f2b: REVERT
00000f2c: JUMPDEST
00000f2d: PUSH1 0x03
00000f2f: SLOAD
00000f30: DUP2
00000f31: PUSH1 0x06
00000f33: DUP3
00000f34: GT
00000f35: DUP1
00000f36: PUSH2 0x0f3e
00000f39: JUMPI
00000f3a: POP
00000f3b: DUP2
00000f3c: DUP2
00000f3d: GT
00000f3e: JUMPDEST
00000f3f: DUP1
00000f40: PUSH2 0x0f47
00000f43: JUMPI
00000f44: POP
00000f45: DUP1
00000f46: ISZERO
00000f47: JUMPDEST
00000f48: DUP1
00000f49: PUSH2 0x0f50
00000f4c: JUMPI
00000f4d: POP
00000f4e: DUP2
00000f4f: ISZERO
00000f50: JUMPDEST
00000f51: ISZERO
00000f52: PUSH2 0x0f5b
00000f55: JUMPI
00000f56: PUSH1 0x00
00000f58: PUSH1 0x00
00000f5a: REVERT
00000f5b: JUMPDEST
00000f5c: PUSH1 0x04
00000f5e: DUP4
00000f5f: SWAP1
00000f60: SSTORE
00000f61: PUSH1 0x40
00000f63: DUP1
00000f64: MLOAD
00000f65: DUP5
00000f66: DUP2
00000f67: MSTORE
00000f68: SWAP1
00000f69: MLOAD
00000f6a: PUSH32 0xa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a
00000f8b: SWAP2
00000f8c: DUP2
00000f8d: SWAP1
00000f8e: SUB
00000f8f: PUSH1 0x20
00000f91: ADD
00000f92: SWAP1
00000f93: LOG1
00000f94: JUMPDEST
00000f95: JUMPDEST
00000f96: POP
00000f97: POP
00000f98: JUMPDEST
00000f99: POP
00000f9a: JUMP
00000f9b: JUMPDEST
00000f9c: CALLER
00000f9d: PUSH1 0x01
00000f9f: PUSH1 0xa0
00000fa1: PUSH1 0x02
00000fa3: EXP
00000fa4: SUB
00000fa5: DUP2
00000fa6: AND
00000fa7: PUSH1 0x00
00000fa9: SWAP1
00000faa: DUP2
00000fab: MSTORE
00000fac: PUSH1 0x02
00000fae: PUSH1 0x20
00000fb0: MSTORE
00000fb1: PUSH1 0x40
00000fb3: SWAP1
00000fb4: KECCAK256
00000fb5: SLOAD
00000fb6: PUSH1 0xff
00000fb8: AND
00000fb9: ISZERO
00000fba: ISZERO
00000fbb: PUSH2 0x0fc4
00000fbe: JUMPI
00000fbf: PUSH1 0x00
00000fc1: PUSH1 0x00
00000fc3: REVERT
00000fc4: JUMPDEST
00000fc5: PUSH1 0x00
00000fc7: DUP3
00000fc8: DUP2
00000fc9: MSTORE
00000fca: PUSH1 0x20
00000fcc: DUP2
00000fcd: SWAP1
00000fce: MSTORE
00000fcf: PUSH1 0x40
00000fd1: SWAP1
00000fd2: KECCAK256
00000fd3: SLOAD
00000fd4: DUP3
00000fd5: SWAP1
00000fd6: PUSH1 0x01
00000fd8: PUSH1 0xa0
00000fda: PUSH1 0x02
00000fdc: EXP
00000fdd: SUB
00000fde: AND
00000fdf: ISZERO
00000fe0: ISZERO
00000fe1: PUSH2 0x0fea
00000fe4: JUMPI
00000fe5: PUSH1 0x00
00000fe7: PUSH1 0x00
00000fe9: REVERT
00000fea: JUMPDEST
00000feb: PUSH1 0x00
00000fed: DUP4
00000fee: DUP2
00000fef: MSTORE
00000ff0: PUSH1 0x01
00000ff2: PUSH1 0x20
00000ff4: SWAP1
00000ff5: DUP2
00000ff6: MSTORE
00000ff7: PUSH1 0x40
00000ff9: DUP1
00000ffa: DUP4
00000ffb: KECCAK256
00000ffc: CALLER
00000ffd: PUSH1 0x01
00000fff: PUSH1 0xa0
00001001: PUSH1 0x02
00001003: EXP
00001004: SUB
00001005: DUP2
00001006: AND
00001007: DUP6
00001008: MSTORE
00001009: SWAP3
0000100a: MSTORE
0000100b: SWAP1
0000100c: SWAP2
0000100d: KECCAK256
0000100e: SLOAD
0000100f: DUP5
00001010: SWAP2
00001011: SWAP1
00001012: PUSH1 0xff
00001014: AND
00001015: ISZERO
00001016: PUSH2 0x101f
00001019: JUMPI
0000101a: PUSH1 0x00
0000101c: PUSH1 0x00
0000101e: REVERT
0000101f: JUMPDEST
00001020: PUSH1 0x00
00001022: DUP6
00001023: DUP2
00001024: MSTORE
00001025: PUSH1 0x01
00001027: PUSH1 0x20
00001029: DUP2
0000102a: DUP2
0000102b: MSTORE
0000102c: PUSH1 0x40
0000102e: DUP1
0000102f: DUP5
00001030: KECCAK256
00001031: PUSH1 0x01
00001033: PUSH1 0xa0
00001035: PUSH1 0x02
00001037: EXP
00001038: SUB
00001039: CALLER
0000103a: AND
0000103b: DUP1
0000103c: DUP7
0000103d: MSTORE
0000103e: SWAP3
0000103f: MSTORE
00001040: DUP1
00001041: DUP5
00001042: KECCAK256
00001043: DUP1
00001044: SLOAD
00001045: PUSH1 0xff
00001047: NOT
00001048: AND
00001049: SWAP1
0000104a: SWAP4
0000104b: OR
0000104c: SWAP1
0000104d: SWAP3
0000104e: SSTORE
0000104f: SWAP1
00001050: MLOAD
00001051: DUP8
00001052: SWAP3
00001053: PUSH32 0x4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef
00001074: SWAP2
00001075: LOG3
00001076: PUSH2 0x08b3
00001079: DUP6
0000107a: PUSH2 0x1270
0000107d: JUMP
0000107e: JUMPDEST
0000107f: JUMPDEST
00001080: JUMPDEST
00001081: POP
00001082: POP
00001083: JUMPDEST
00001084: POP
00001085: JUMPDEST
00001086: POP
00001087: POP
00001088: JUMP
00001089: JUMPDEST
0000108a: PUSH1 0x00
0000108c: PUSH2 0x1096
0000108f: DUP5
00001090: DUP5
00001091: DUP5
00001092: PUSH2 0x13d8
00001095: JUMP
00001096: JUMPDEST
00001097: SWAP1
00001098: POP
00001099: PUSH2 0x10a1
0000109c: DUP2
0000109d: PUSH2 0x0f9b
000010a0: JUMP
000010a1: JUMPDEST
000010a2: JUMPDEST
000010a3: SWAP4
000010a4: SWAP3
000010a5: POP
000010a6: POP
000010a7: POP
000010a8: JUMP
000010a9: JUMPDEST
000010aa: PUSH1 0x06
000010ac: DUP2
000010ad: JUMP
000010ae: JUMPDEST
000010af: PUSH1 0x04
000010b1: SLOAD
000010b2: DUP2
000010b3: JUMP
000010b4: JUMPDEST
000010b5: PUSH1 0x00
000010b7: ADDRESS
000010b8: PUSH1 0x01
000010ba: PUSH1 0xa0
000010bc: PUSH1 0x02
000010be: EXP
000010bf: SUB
000010c0: AND
000010c1: CALLER
000010c2: PUSH1 0x01
000010c4: PUSH1 0xa0
000010c6: PUSH1 0x02
000010c8: EXP
000010c9: SUB
000010ca: AND
000010cb: EQ
000010cc: ISZERO
000010cd: ISZERO
000010ce: PUSH2 0x10d7
000010d1: JUMPI
000010d2: PUSH1 0x00
000010d4: PUSH1 0x00
000010d6: REVERT
000010d7: JUMPDEST
000010d8: PUSH1 0x01
000010da: PUSH1 0xa0
000010dc: PUSH1 0x02
000010de: EXP
000010df: SUB
000010e0: DUP4
000010e1: AND
000010e2: PUSH1 0x00
000010e4: SWAP1
000010e5: DUP2
000010e6: MSTORE
000010e7: PUSH1 0x02
000010e9: PUSH1 0x20
000010eb: MSTORE
000010ec: PUSH1 0x40
000010ee: SWAP1
000010ef: KECCAK256
000010f0: SLOAD
000010f1: DUP4
000010f2: SWAP1
000010f3: PUSH1 0xff
000010f5: AND
000010f6: ISZERO
000010f7: ISZERO
000010f8: PUSH2 0x1101
000010fb: JUMPI
000010fc: PUSH1 0x00
000010fe: PUSH1 0x00
00001100: REVERT
00001101: JUMPDEST
00001102: PUSH1 0x01
00001104: PUSH1 0xa0
00001106: PUSH1 0x02
00001108: EXP
00001109: SUB
0000110a: DUP4
0000110b: AND
0000110c: PUSH1 0x00
0000110e: SWAP1
0000110f: DUP2
00001110: MSTORE
00001111: PUSH1 0x02
00001113: PUSH1 0x20
00001115: MSTORE
00001116: PUSH1 0x40
00001118: SWAP1
00001119: KECCAK256
0000111a: SLOAD
0000111b: DUP4
0000111c: SWAP1
0000111d: PUSH1 0xff
0000111f: AND
00001120: ISZERO
00001121: PUSH2 0x112a
00001124: JUMPI
00001125: PUSH1 0x00
00001127: PUSH1 0x00
00001129: REVERT
0000112a: JUMPDEST
0000112b: PUSH1 0x00
0000112d: SWAP3
0000112e: POP
0000112f: JUMPDEST
00001130: PUSH1 0x03
00001132: SLOAD
00001133: DUP4
00001134: LT
00001135: ISZERO
00001136: PUSH2 0x11d2
00001139: JUMPI
0000113a: DUP5
0000113b: PUSH1 0x01
0000113d: PUSH1 0xa0
0000113f: PUSH1 0x02
00001141: EXP
00001142: SUB
00001143: AND
00001144: PUSH1 0x03
00001146: DUP5
00001147: DUP2
00001148: SLOAD
00001149: DUP2
0000114a: LT
0000114b: ISZERO
0000114c: ISZERO
0000114d: PUSH2 0x1152
00001150: JUMPI
00001151: INVALID
00001152: JUMPDEST
00001153: SWAP1
00001154: PUSH1 0x00
00001156: MSTORE
00001157: PUSH1 0x20
00001159: PUSH1 0x00
0000115b: KECCAK256
0000115c: SWAP1
0000115d: ADD
0000115e: PUSH1 0x00
00001160: JUMPDEST
00001161: SWAP1
00001162: SLOAD
00001163: SWAP1
00001164: PUSH2 0x0100
00001167: EXP
00001168: SWAP1
00001169: DIV
0000116a: PUSH1 0x01
0000116c: PUSH1 0xa0
0000116e: PUSH1 0x02
00001170: EXP
00001171: SUB
00001172: AND
00001173: PUSH1 0x01
00001175: PUSH1 0xa0
00001177: PUSH1 0x02
00001179: EXP
0000117a: SUB
0000117b: AND
0000117c: EQ
0000117d: ISZERO
0000117e: PUSH2 0x11c6
00001181: JUMPI
00001182: DUP4
00001183: PUSH1 0x03
00001185: DUP5
00001186: DUP2
00001187: SLOAD
00001188: DUP2
00001189: LT
0000118a: ISZERO
0000118b: ISZERO
0000118c: PUSH2 0x1191
0000118f: JUMPI
00001190: INVALID
00001191: JUMPDEST
00001192: SWAP1
00001193: PUSH1 0x00
00001195: MSTORE
00001196: PUSH1 0x20
00001198: PUSH1 0x00
0000119a: KECCAK256
0000119b: SWAP1
0000119c: ADD
0000119d: PUSH1 0x00
0000119f: JUMPDEST
000011a0: PUSH2 0x0100
000011a3: EXP
000011a4: DUP2
000011a5: SLOAD
000011a6: DUP2
000011a7: PUSH1 0x01
000011a9: PUSH1 0xa0
000011ab: PUSH1 0x02
000011ad: EXP
000011ae: SUB
000011af: MUL
000011b0: NOT
000011b1: AND
000011b2: SWAP1
000011b3: DUP4
000011b4: PUSH1 0x01
000011b6: PUSH1 0xa0
000011b8: PUSH1 0x02
000011ba: EXP
000011bb: SUB
000011bc: AND
000011bd: MUL
000011be: OR
000011bf: SWAP1
000011c0: SSTORE
000011c1: POP
000011c2: PUSH2 0x11d2
000011c5: JUMP
000011c6: JUMPDEST
000011c7: JUMPDEST
000011c8: PUSH1 0x01
000011ca: SWAP1
000011cb: SWAP3
000011cc: ADD
000011cd: SWAP2
000011ce: PUSH2 0x112f
000011d1: JUMP
000011d2: JUMPDEST
000011d3: PUSH1 0x01
000011d5: PUSH1 0xa0
000011d7: PUSH1 0x02
000011d9: EXP
000011da: SUB
000011db: DUP1
000011dc: DUP7
000011dd: AND
000011de: PUSH1 0x00
000011e0: DUP2
000011e1: DUP2
000011e2: MSTORE
000011e3: PUSH1 0x02
000011e5: PUSH1 0x20
000011e7: MSTORE
000011e8: PUSH1 0x40
000011ea: DUP1
000011eb: DUP3
000011ec: KECCAK256
000011ed: DUP1
000011ee: SLOAD
000011ef: PUSH1 0xff
000011f1: NOT
000011f2: SWAP1
000011f3: DUP2
000011f4: AND
000011f5: SWAP1
000011f6: SWAP2
000011f7: SSTORE
000011f8: SWAP4
000011f9: DUP9
000011fa: AND
000011fb: DUP3
000011fc: MSTORE
000011fd: DUP1
000011fe: DUP3
000011ff: KECCAK256
00001200: DUP1
00001201: SLOAD
00001202: SWAP1
00001203: SWAP5
00001204: AND
00001205: PUSH1 0x01
00001207: OR
00001208: SWAP1
00001209: SWAP4
0000120a: SSTORE
0000120b: SWAP2
0000120c: MLOAD
0000120d: SWAP1
0000120e: SWAP2
0000120f: PUSH32 0x8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b90
00001230: SWAP2
00001231: LOG2
00001232: PUSH1 0x40
00001234: MLOAD
00001235: PUSH1 0x01
00001237: PUSH1 0xa0
00001239: PUSH1 0x02
0000123b: EXP
0000123c: SUB
0000123d: DUP6
0000123e: AND
0000123f: SWAP1
00001240: PUSH32 0xf39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d
00001261: SWAP1
00001262: PUSH1 0x00
00001264: SWAP1
00001265: LOG2
00001266: JUMPDEST
00001267: JUMPDEST
00001268: POP
00001269: JUMPDEST
0000126a: POP
0000126b: JUMPDEST
0000126c: POP
0000126d: POP
0000126e: POP
0000126f: JUMP
00001270: JUMPDEST
00001271: PUSH1 0x00
00001273: DUP2
00001274: DUP2
00001275: MSTORE
00001276: PUSH1 0x20
00001278: DUP2
00001279: SWAP1
0000127a: MSTORE
0000127b: PUSH1 0x40
0000127d: DUP2
0000127e: KECCAK256
0000127f: PUSH1 0x03
00001281: ADD
00001282: SLOAD
00001283: DUP3
00001284: SWAP1
00001285: PUSH1 0xff
00001287: AND
00001288: ISZERO
00001289: PUSH2 0x1292
0000128c: JUMPI
0000128d: PUSH1 0x00
0000128f: PUSH1 0x00
00001291: REVERT
00001292: JUMPDEST
00001293: PUSH2 0x129b
00001296: DUP4
00001297: PUSH2 0x0a98
0000129a: JUMP
0000129b: JUMPDEST
0000129c: ISZERO
0000129d: PUSH2 0x07d9
000012a0: JUMPI
000012a1: PUSH1 0x00
000012a3: DUP4
000012a4: DUP2
000012a5: MSTORE
000012a6: PUSH1 0x20
000012a8: DUP2
000012a9: SWAP1
000012aa: MSTORE
000012ab: PUSH1 0x40
000012ad: SWAP1
000012ae: DUP2
000012af: SWAP1
000012b0: KECCAK256
000012b1: PUSH1 0x03
000012b3: DUP2
000012b4: ADD
000012b5: DUP1
000012b6: SLOAD
000012b7: PUSH1 0xff
000012b9: NOT
000012ba: AND
000012bb: PUSH1 0x01
000012bd: SWAP1
000012be: DUP2
000012bf: OR
000012c0: SWAP1
000012c1: SWAP2
000012c2: SSTORE
000012c3: DUP2
000012c4: SLOAD
000012c5: DUP2
000012c6: DUP4
000012c7: ADD
000012c8: SLOAD
000012c9: SWAP4
000012ca: MLOAD
000012cb: PUSH1 0x02
000012cd: DUP1
000012ce: DUP6
000012cf: ADD
000012d0: DUP1
000012d1: SLOAD
000012d2: SWAP6
000012d3: SWAP9
000012d4: POP
000012d5: PUSH1 0x01
000012d7: PUSH1 0xa0
000012d9: PUSH1 0x02
000012db: EXP
000012dc: SUB
000012dd: SWAP1
000012de: SWAP4
000012df: AND
000012e0: SWAP6
000012e1: SWAP5
000012e2: SWAP3
000012e3: SWAP4
000012e4: SWAP2
000012e5: SWAP3
000012e6: DUP4
000012e7: SWAP3
000012e8: DUP6
000012e9: SWAP3
000012ea: PUSH1 0x00
000012ec: NOT
000012ed: SWAP2
000012ee: DUP4
000012ef: AND
000012f0: ISZERO
000012f1: PUSH2 0x0100
000012f4: MUL
000012f5: SWAP2
000012f6: SWAP1
000012f7: SWAP2
000012f8: ADD
000012f9: SWAP1
000012fa: SWAP2
000012fb: AND
000012fc: DIV
000012fd: DUP1
000012fe: ISZERO
000012ff: PUSH2 0x1349
00001302: JUMPI
00001303: DUP1
00001304: PUSH1 0x1f
00001306: LT
00001307: PUSH2 0x131e
0000130a: JUMPI
0000130b: PUSH2 0x0100
0000130e: DUP1
0000130f: DUP4
00001310: SLOAD
00001311: DIV
00001312: MUL
00001313: DUP4
00001314: MSTORE
00001315: SWAP2
00001316: PUSH1 0x20
00001318: ADD
00001319: SWAP2
0000131a: PUSH2 0x1349
0000131d: JUMP
0000131e: JUMPDEST
0000131f: DUP3
00001320: ADD
00001321: SWAP2
00001322: SWAP1
00001323: PUSH1 0x00
00001325: MSTORE
00001326: PUSH1 0x20
00001328: PUSH1 0x00
0000132a: KECCAK256
0000132b: SWAP1
0000132c: JUMPDEST
0000132d: DUP2
0000132e: SLOAD
0000132f: DUP2
00001330: MSTORE
00001331: SWAP1
00001332: PUSH1 0x01
00001334: ADD
00001335: SWAP1
00001336: PUSH1 0x20
00001338: ADD
00001339: DUP1
0000133a: DUP4
0000133b: GT
0000133c: PUSH2 0x132c
0000133f: JUMPI
00001340: DUP3
00001341: SWAP1
00001342: SUB
00001343: PUSH1 0x1f
00001345: AND
00001346: DUP3
00001347: ADD
00001348: SWAP2
00001349: JUMPDEST
0000134a: POP
0000134b: POP
0000134c: SWAP2
0000134d: POP
0000134e: POP
0000134f: PUSH1 0x00
00001351: PUSH1 0x40
00001353: MLOAD
00001354: DUP1
00001355: DUP4
00001356: SUB
00001357: DUP2
00001358: DUP6
00001359: DUP8
0000135a: PUSH2 0x8502
0000135d: GAS
0000135e: SUB
0000135f: CALL
00001360: SWAP3
00001361: POP
00001362: POP
00001363: POP
00001364: ISZERO
00001365: PUSH2 0x1398
00001368: JUMPI
00001369: PUSH1 0x40
0000136b: MLOAD
0000136c: DUP4
0000136d: SWAP1
0000136e: PUSH32 0x33e13ecb54c3076d8e8bb8c2881800a4d972b792045ffae98fdf46df365fed75
0000138f: SWAP1
00001390: PUSH1 0x00
00001392: SWAP1
00001393: LOG2
00001394: PUSH2 0x07d9
00001397: JUMP
00001398: JUMPDEST
00001399: PUSH1 0x40
0000139b: MLOAD
0000139c: DUP4
0000139d: SWAP1
0000139e: PUSH32 0x526441bb6c1aba3c9a4a6ca1d6545da9c2333c8c48343ef398eb858d72b79236
000013bf: SWAP1
000013c0: PUSH1 0x00
000013c2: SWAP1
000013c3: LOG2
000013c4: PUSH1 0x03
000013c6: DUP3
000013c7: ADD
000013c8: DUP1
000013c9: SLOAD
000013ca: PUSH1 0xff
000013cc: NOT
000013cd: AND
000013ce: SWAP1
000013cf: SSTORE
000013d0: JUMPDEST
000013d1: JUMPDEST
000013d2: JUMPDEST
000013d3: JUMPDEST
000013d4: POP
000013d5: POP
000013d6: POP
000013d7: JUMP
000013d8: JUMPDEST
000013d9: PUSH1 0x00
000013db: DUP4
000013dc: PUSH1 0x01
000013de: PUSH1 0xa0
000013e0: PUSH1 0x02
000013e2: EXP
000013e3: SUB
000013e4: DUP2
000013e5: AND
000013e6: ISZERO
000013e7: ISZERO
000013e8: PUSH2 0x13f1
000013eb: JUMPI
000013ec: PUSH1 0x00
000013ee: PUSH1 0x00
000013f0: REVERT
000013f1: JUMPDEST
000013f2: PUSH1 0x05
000013f4: SLOAD
000013f5: PUSH1 0x40
000013f7: DUP1
000013f8: MLOAD
000013f9: PUSH1 0x80
000013fb: DUP2
000013fc: ADD
000013fd: DUP3
000013fe: MSTORE
000013ff: PUSH1 0x01
00001401: PUSH1 0xa0
00001403: PUSH1 0x02
00001405: EXP
00001406: SUB
00001407: DUP9
00001408: DUP2
00001409: AND
0000140a: DUP3
0000140b: MSTORE
0000140c: PUSH1 0x20
0000140e: DUP1
0000140f: DUP4
00001410: ADD
00001411: DUP10
00001412: DUP2
00001413: MSTORE
00001414: DUP4
00001415: DUP6
00001416: ADD
00001417: DUP10
00001418: DUP2
00001419: MSTORE
0000141a: PUSH1 0x00
0000141c: PUSH1 0x60
0000141e: DUP7
0000141f: ADD
00001420: DUP2
00001421: SWAP1
00001422: MSTORE
00001423: DUP8
00001424: DUP2
00001425: MSTORE
00001426: DUP1
00001427: DUP5
00001428: MSTORE
00001429: SWAP6
0000142a: SWAP1
0000142b: SWAP6
0000142c: KECCAK256
0000142d: DUP5
0000142e: MLOAD
0000142f: DUP2
00001430: SLOAD
00001431: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001446: NOT
00001447: AND
00001448: SWAP5
00001449: AND
0000144a: SWAP4
0000144b: SWAP1
0000144c: SWAP4
0000144d: OR
0000144e: DUP4
0000144f: SSTORE
00001450: MLOAD
00001451: PUSH1 0x01
00001453: DUP4
00001454: ADD
00001455: SSTORE
00001456: SWAP3
00001457: MLOAD
00001458: DUP1
00001459: MLOAD
0000145a: SWAP5
0000145b: SWAP7
0000145c: POP
0000145d: SWAP2
0000145e: SWAP4
0000145f: SWAP1
00001460: SWAP3
00001461: PUSH2 0x1471
00001464: SWAP3
00001465: PUSH1 0x02
00001467: DUP6
00001468: ADD
00001469: SWAP3
0000146a: SWAP2
0000146b: ADD
0000146c: SWAP1
0000146d: PUSH2 0x1543
00001470: JUMP
00001471: JUMPDEST
00001472: POP
00001473: PUSH1 0x60
00001475: SWAP2
00001476: SWAP1
00001477: SWAP2
00001478: ADD
00001479: MLOAD
0000147a: PUSH1 0x03
0000147c: SWAP1
0000147d: SWAP2
0000147e: ADD
0000147f: DUP1
00001480: SLOAD
00001481: PUSH1 0xff
00001483: NOT
00001484: AND
00001485: SWAP2
00001486: ISZERO
00001487: ISZERO
00001488: SWAP2
00001489: SWAP1
0000148a: SWAP2
0000148b: OR
0000148c: SWAP1
0000148d: SSTORE
0000148e: PUSH1 0x05
00001490: DUP1
00001491: SLOAD
00001492: PUSH1 0x01
00001494: ADD
00001495: SWAP1
00001496: SSTORE
00001497: PUSH1 0x40
00001499: MLOAD
0000149a: DUP3
0000149b: SWAP1
0000149c: PUSH32 0xc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e51
000014bd: SWAP1
000014be: PUSH1 0x00
000014c0: SWAP1
000014c1: LOG2
000014c2: JUMPDEST
000014c3: JUMPDEST
000014c4: POP
000014c5: SWAP4
000014c6: SWAP3
000014c7: POP
000014c8: POP
000014c9: POP
000014ca: JUMP
000014cb: JUMPDEST
000014cc: DUP2
000014cd: SLOAD
000014ce: DUP2
000014cf: DUP4
000014d0: SSTORE
000014d1: DUP2
000014d2: DUP2
000014d3: ISZERO
000014d4: GT
000014d5: PUSH2 0x07d9
000014d8: JUMPI
000014d9: PUSH1 0x00
000014db: DUP4
000014dc: DUP2
000014dd: MSTORE
000014de: PUSH1 0x20
000014e0: SWAP1
000014e1: KECCAK256
000014e2: PUSH2 0x07d9
000014e5: SWAP2
000014e6: DUP2
000014e7: ADD
000014e8: SWAP1
000014e9: DUP4
000014ea: ADD
000014eb: PUSH2 0x15c2
000014ee: JUMP
000014ef: JUMPDEST
000014f0: JUMPDEST
000014f1: POP
000014f2: POP
000014f3: POP
000014f4: JUMP
000014f5: JUMPDEST
000014f6: DUP2
000014f7: SLOAD
000014f8: DUP2
000014f9: DUP4
000014fa: SSTORE
000014fb: DUP2
000014fc: DUP2
000014fd: ISZERO
000014fe: GT
000014ff: PUSH2 0x07d9
00001502: JUMPI
00001503: PUSH1 0x00
00001505: DUP4
00001506: DUP2
00001507: MSTORE
00001508: PUSH1 0x20
0000150a: SWAP1
0000150b: KECCAK256
0000150c: PUSH2 0x07d9
0000150f: SWAP2
00001510: DUP2
00001511: ADD
00001512: SWAP1
00001513: DUP4
00001514: ADD
00001515: PUSH2 0x15c2
00001518: JUMP
00001519: JUMPDEST
0000151a: JUMPDEST
0000151b: POP
0000151c: POP
0000151d: POP
0000151e: JUMP
0000151f: JUMPDEST
00001520: PUSH1 0x40
00001522: DUP1
00001523: MLOAD
00001524: PUSH1 0x20
00001526: DUP2
00001527: ADD
00001528: SWAP1
00001529: SWAP2
0000152a: MSTORE
0000152b: PUSH1 0x00
0000152d: DUP2
0000152e: MSTORE
0000152f: SWAP1
00001530: JUMP
00001531: JUMPDEST
00001532: PUSH1 0x40
00001534: DUP1
00001535: MLOAD
00001536: PUSH1 0x20
00001538: DUP2
00001539: ADD
0000153a: SWAP1
0000153b: SWAP2
0000153c: MSTORE
0000153d: PUSH1 0x00
0000153f: DUP2
00001540: MSTORE
00001541: SWAP1
00001542: JUMP
00001543: JUMPDEST
00001544: DUP3
00001545: DUP1
00001546: SLOAD
00001547: PUSH1 0x01
00001549: DUP2
0000154a: PUSH1 0x01
0000154c: AND
0000154d: ISZERO
0000154e: PUSH2 0x0100
00001551: MUL
00001552: SUB
00001553: AND
00001554: PUSH1 0x02
00001556: SWAP1
00001557: DIV
00001558: SWAP1
00001559: PUSH1 0x00
0000155b: MSTORE
0000155c: PUSH1 0x20
0000155e: PUSH1 0x00
00001560: KECCAK256
00001561: SWAP1
00001562: PUSH1 0x1f
00001564: ADD
00001565: PUSH1 0x20
00001567: SWAP1
00001568: DIV
00001569: DUP2
0000156a: ADD
0000156b: SWAP3
0000156c: DUP3
0000156d: PUSH1 0x1f
0000156f: LT
00001570: PUSH2 0x1584
00001573: JUMPI
00001574: DUP1
00001575: MLOAD
00001576: PUSH1 0xff
00001578: NOT
00001579: AND
0000157a: DUP4
0000157b: DUP1
0000157c: ADD
0000157d: OR
0000157e: DUP6
0000157f: SSTORE
00001580: PUSH2 0x15b1
00001583: JUMP
00001584: JUMPDEST
00001585: DUP3
00001586: DUP1
00001587: ADD
00001588: PUSH1 0x01
0000158a: ADD
0000158b: DUP6
0000158c: SSTORE
0000158d: DUP3
0000158e: ISZERO
0000158f: PUSH2 0x15b1
00001592: JUMPI
00001593: SWAP2
00001594: DUP3
00001595: ADD
00001596: JUMPDEST
00001597: DUP3
00001598: DUP2
00001599: GT
0000159a: ISZERO
0000159b: PUSH2 0x15b1
0000159e: JUMPI
0000159f: DUP3
000015a0: MLOAD
000015a1: DUP3
000015a2: SSTORE
000015a3: SWAP2
000015a4: PUSH1 0x20
000015a6: ADD
000015a7: SWAP2
000015a8: SWAP1
000015a9: PUSH1 0x01
000015ab: ADD
000015ac: SWAP1
000015ad: PUSH2 0x1596
000015b0: JUMP
000015b1: JUMPDEST
000015b2: JUMPDEST
000015b3: POP
000015b4: PUSH2 0x15be
000015b7: SWAP3
000015b8: SWAP2
000015b9: POP
000015ba: PUSH2 0x15c2
000015bd: JUMP
000015be: JUMPDEST
000015bf: POP
000015c0: SWAP1
000015c1: JUMP
000015c2: JUMPDEST
000015c3: PUSH2 0x0c45
000015c6: SWAP2
000015c7: SWAP1
000015c8: JUMPDEST
000015c9: DUP1
000015ca: DUP3
000015cb: GT
000015cc: ISZERO
000015cd: PUSH2 0x15be
000015d0: JUMPI
000015d1: PUSH1 0x00
000015d3: DUP2
000015d4: SSTORE
000015d5: PUSH1 0x01
000015d7: ADD
000015d8: PUSH2 0x15c8
000015db: JUMP
000015dc: JUMPDEST
000015dd: POP
000015de: SWAP1
000015df: JUMP
000015e0: JUMPDEST
000015e1: SWAP1
000015e2: JUMP
000015e3: STOP
000015e4: LOG1
000015e5: PUSH6 0x627a7a723058
000015ec: KECCAK256
000015ed: DUP15
000015ee: UNKNOWN(0xB8)
000015ef: CREATE
000015f0: ADDRESS
000015f1: UNKNOWN(0xD0)
000015f2: UNKNOWN(0xC8)
000015f3: UNKNOWN(0x22)
000015f4: UNKNOWN(0x0C)
000015f5: MSTORE
000015f6: UNKNOWN(0xEC)
000015f7: SWAP9
000015f8: NOT
000015f9: RETURNDATACOPY
000015fa: PUSH23

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: 0x8f2b6e2015b4b27e39ea17bcdc9b9d3b6be086a432bed1adcefa19303400cf56
call_targets: 0x6cd67b2155cdd5144a567b8fe47cae2825df1db7
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x8f2b6e2015b4b27e39ea17bcdc9b9d3b6be086a432bed1adcefa19303400cf56",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x6cd67b2155cdd5144a567b8fe47cae2825df1db7"
    ],
    "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": "0x025e7c27",
            "selector": "0x025e7c27",
            "calldata_variants": [
                "0x025e7c27",
                "0x025e7c270000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x173825d9",
            "selector": "0x173825d9",
            "calldata_variants": [
                "0x173825d9",
                "0x173825d90000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x20ea8d86",
            "selector": "0x20ea8d86",
            "calldata_variants": [
                "0x20ea8d86",
                "0x20ea8d860000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2f54bf6e",
            "selector": "0x2f54bf6e",
            "calldata_variants": [
                "0x2f54bf6e",
                "0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3411c81c",
            "selector": "0x3411c81c",
            "calldata_variants": [
                "0x3411c81c",
                "0x3411c81c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x54741525",
            "selector": "0x54741525",
            "calldata_variants": [
                "0x54741525",
                "0x547415250000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x7065cb48",
            "selector": "0x7065cb48",
            "calldata_variants": [
                "0x7065cb48",
                "0x7065cb480000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x784547a7",
            "selector": "0x784547a7",
            "calldata_variants": [
                "0x784547a7",
                "0x784547a70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4959,
            "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: 0x8f2b6e2015b4b27e39ea17bcdc9b9d3b6be086a432bed1adcefa19303400cf56
call_targets: 0x6cd67b2155cdd5144a567b8fe47cae2825df1db7
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x8f2b6e2015b4b27e39ea17bcdc9b9d3b6be086a432bed1adcefa19303400cf56",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x6cd67b2155cdd5144a567b8fe47cae2825df1db7"
    ],
    "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": "0x025e7c27",
            "selector": "0x025e7c27",
            "calldata_variants": [
                "0x025e7c27",
                "0x025e7c270000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x173825d9",
            "selector": "0x173825d9",
            "calldata_variants": [
                "0x173825d9",
                "0x173825d90000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x20ea8d86",
            "selector": "0x20ea8d86",
            "calldata_variants": [
                "0x20ea8d86",
                "0x20ea8d860000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2f54bf6e",
            "selector": "0x2f54bf6e",
            "calldata_variants": [
                "0x2f54bf6e",
                "0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3411c81c",
            "selector": "0x3411c81c",
            "calldata_variants": [
                "0x3411c81c",
                "0x3411c81c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x54741525",
            "selector": "0x54741525",
            "calldata_variants": [
                "0x54741525",
                "0x547415250000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x7065cb48",
            "selector": "0x7065cb48",
            "calldata_variants": [
                "0x7065cb48",
                "0x7065cb480000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x784547a7",
            "selector": "0x784547a7",
            "calldata_variants": [
                "0x784547a7",
                "0x784547a70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4959,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 1,
    "guards_detected": []
}
medium other detector CREATE/CREATE2 reachable 45 no no
view
trace_id: 0x0c8aa774f05bcf7c948a98ce47d101bd197f8e013102b9bac2fece15b4ddf2ff
validation_json
{
    "sink": "CREATE",
    "errors": 0,
    "status": "unknown",
    "attempts": 32,
    "trace_id": "0x0c8aa774f05bcf7c948a98ce47d101bd197f8e013102b9bac2fece15b4ddf2ff",
    "confirmed": false,
    "trace_mode": "structLogs",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x025e7c27",
            "selector": "0x025e7c27",
            "calldata_variants": [
                "0x025e7c27",
                "0x025e7c270000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x173825d9",
            "selector": "0x173825d9",
            "calldata_variants": [
                "0x173825d9",
                "0x173825d90000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x20ea8d86",
            "selector": "0x20ea8d86",
            "calldata_variants": [
                "0x20ea8d86",
                "0x20ea8d860000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2f54bf6e",
            "selector": "0x2f54bf6e",
            "calldata_variants": [
                "0x2f54bf6e",
                "0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3411c81c",
            "selector": "0x3411c81c",
            "calldata_variants": [
                "0x3411c81c",
                "0x3411c81c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x54741525",
            "selector": "0x54741525",
            "calldata_variants": [
                "0x54741525",
                "0x547415250000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x7065cb48",
            "selector": "0x7065cb48",
            "calldata_variants": [
                "0x7065cb48",
                "0x7065cb480000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x784547a7",
            "selector": "0x784547a7",
            "calldata_variants": [
                "0x784547a7",
                "0x784547a70000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "create_count": 1,
    "create2_count": 0
}
low other cast Contract creation opcode present 60 no
view
evidence_json
{
    "notes": "runtime can deploy contracts dynamically via CREATE/CREATE2",
    "create_count": 1,
    "create2_count": 0
}