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

Analysis Run

d1286134-7700-419d-830f-190a774ff945

complete
Chain ID
1
Address
Block Number
Created
Sun, Jan 4, 2026 9:45 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 DELEGATECALL target 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
31620 report.consolidate complete 1 / 1 3 months ago
111518 artifact.fetch complete 1 / 3 1 week ago
111519 tool.cast_disasm complete 1 / 3 1 week ago
111520 analysis.bundle complete 1 / 3 1 week ago
111521 capability.graph complete 1 / 3 1 week ago
111522 detector.run complete 1 / 3 1 week ago
111523 validation.fork complete 1 / 3 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
0
No findings?
yes
Summary
Reviewed runtime bytecode in BYTECODE_BUNDLE.txt. External value-moving CALL/DELEGATECALL sites are gated by owner/whitelist checks or DEX callback caller verification (pool address checks), and proxy upgrade slots are only mutable under owner checks. No concrete, attacker-controlled path to extract ETH/tokens/NFTs found from bytecode alone.
View stderr
[codex:1519865] OpenAI Codex v0.77.0 (research preview)
[codex:1519865] --------
[codex:1519865] workdir: /tmp/codex-multi-fas47c04
[codex:1519865] model: gpt-5.2-codex
[codex:1519865] provider: openai
[codex:1519865] approval: never
[codex:1519865] sandbox: read-only
[codex:1519865] reasoning effort: xhigh
[codex:1519865] reasoning summaries: auto
[codex:1519865] session id: 019b8859-f1aa-77c2-b734-e21432f25e75
[codex:1519865] --------
[codex:1519865] user
[codex:1519865] 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:1519865] 
[codex:1519865] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:1519865] 
[codex:1519865] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:1519865] - Gas inefficiency, code quality, or best practices
[codex:1519865] - Theoretical vulnerabilities without a clear extraction path
[codex:1519865] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:1519865] - Issues requiring social engineering or off-chain coordination
[codex:1519865] 
[codex:1519865] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:1519865] - CALL/DELEGATECALL with controllable destination or calldata
[codex:1519865] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:1519865] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:1519865] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:1519865] - External calls before state updates (reentrancy)
[codex:1519865] - SELFDESTRUCT with controllable beneficiary
[codex:1519865] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:1519865] 
[codex:1519865] For each finding, you MUST explain:
[codex:1519865] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:1519865] 2. The concrete sequence of transactions to extract value
[codex:1519865] 3. Why you believe this is exploitable (not just suspicious)
[codex:1519865] 
[codex:1519865] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:1519865] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:1519865] 
[codex:1519865] Output MUST be valid JSON matching the provided schema.
[codex:1519865] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:1519865] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:1519865] mcp startup: no servers
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Reviewing instructions and BYTECODE_BUNDLE**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc ls in /tmp/codex-multi-fas47c04 succeeded in 6ms:
[codex:1519865] BYTECODE_BUNDLE.txt
[codex:1519865] codex-output-schema.json
[codex:1519865] exec
[codex:1519865] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-fas47c04 succeeded in 5ms:
[codex:1519865] Runtime bytecode bundle for best-effort auditing.
[codex:1519865] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1519865] 
[codex:1519865] FILE: runtime_bytecode.hex
[codex:1519865] 0x608060405260043610610173575f3560e01c80636fefbbc2116100ca578063c311d0491161007e578063eed2f25211610058578063eed2f2521461043b578063f08a032314610467578063fa461e33146104865761017a565b8063c311d049146103de578063d0ebdbe7146103fd578063d34628cc1461041c5761017a565b80639e281a98116100af5780639e281a9814610362578063bdb25d0e14610381578063bfd79284146103a05761017a565b80636fefbbc2146103245780637580a1bc146103435761017a565b806323a69e751161012c578063481c6a7511610106578063481c6a75146102ba57806351b9b0fa146102e65780636c3bbfd7146103055761017a565b806323a69e751461025d5780632c8958f61461027c57806331f570721461029b5761017a565b80630b58f97d1161015d5780630b58f97d146101c557806313af40351461021a5780631cfed885146102395761017a565b801561019c57806307d47d97146101a65761017a565b3661017a57005b604051365f82375f5f36836002545af43d5f833e80610197573d82fd5b503d81f35b6101a46104a5565b005b3480156101b1575f5ffd5b506101a46101c03660046126eb565b610827565b3480156101d0575f5ffd5b505f546101f09073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610225575f5ffd5b506101a461023436600461274d565b6108f0565b348015610244575f5ffd5b506101f0610253366004612776565b63deadbeef015490565b348015610268575f5ffd5b506101a461027736600461278f565b6109bd565b348015610287575f5ffd5b506101a461029636600461278f565b610a13565b3480156102a6575f5ffd5b506101a46102b536600461280b565b610b3e565b3480156102c5575f5ffd5b506001546101f09073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f1575f5ffd5b506101a4610300366004612946565b610c95565b348015610310575f5ffd5b506101a461031f3660046129a6565b610e2c565b34801561032f575f5ffd5b506101a461033e3660046129d9565b610f47565b34801561034e575f5ffd5b506101a461035d3660046129f0565b6110a3565b34801561036d575f5ffd5b506101a461037c366004612a21565b611135565b34801561038c575f5ffd5b506101a461039b366004612946565b6111dd565b3480156103ab575f5ffd5b506103ce6103ba36600461274d565b60036020525f908152604090205460ff1681565b6040519015158152602001610211565b3480156103e9575f5ffd5b506101a46103f83660046129d9565b61135f565b348015610408575f5ffd5b506101a461041736600461274d565b611407565b348015610427575f5ffd5b506101a46104363660046129a6565b6114d5565b348015610446575f5ffd5b506002546101f09073ffffffffffffffffffffffffffffffffffffffff1681565b348015610472575f5ffd5b506101a461048136600461274d565b6115ec565b348015610491575f5ffd5b506101a46104a036600461278f565b6116ba565b335f90815260036020908152604091829020548251808401909352600483527f4d303032000000000000000000000000000000000000000000000000000000009183019190915260ff1661052f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b60405180910390fd5b5060053560601c60193560393560593560f890811c90600435901c5f80808461056c57605a3560f81c9250605b359150607b3560f81c9050610582565b605a3560f81c9250605b359150609b3560f81c90505b7f70a08231000000000000000000000000000000000000000000000000000000005f9081523060045247906020816024818d5afa6105c2573d5f5f3e3d5ffd5b505f80519060018760028111156105db576105db612aa7565b036105f2576105eb888c8c6117d0565b9050610676565b600287600281111561060657610606612aa7565b03610614576105eb886118bc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c696420666c617368457865637574696f6e000000000000000000006044820152606401610526565b80610688575050505050505050505050565b5f86600581111561069b5761069b612aa7565b141580156106a857505f85115b15610739575f6106b98787876118e0565b5090508364e8d4a5100082470101116040518060400160405280600481526020017f4d3031380000000000000000000000000000000000000000000000000000000081525090610736576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b50505b7f70a08231000000000000000000000000000000000000000000000000000000005f908152306004526020816024818f5afa610777573d5f5f3e3d5ffd5b505f5160408051808201909152600481527f4d3031340000000000000000000000000000000000000000000000000000000060208201528382116107e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b5089811115610819575f546108199073ffffffffffffffffffffffffffffffffffffffff8e811691168c8403611b70565b505050505050505050505050565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1633146108ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b506108ec82828080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611bf192505050565b5050565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610976576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610a0d848484847f6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e27f00000000000000000000000041ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c96060611c84565b50505050565b602b82013560f81c6002819003610a7957610a74858585857f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006040611c84565b610b37565b8060ff16600503610ad457610a74858585857f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006040611c84565b60408051808201825260048082527f4d30323200000000000000000000000000000000000000000000000000000000602083015291517f08c379a00000000000000000000000000000000000000000000000000000000081526105269201612a95565b5050505050565b60408051808201909152600481527f4d3032310000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb1614610be2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b50325f90815260036020908152604091829020548251808401909352600483527f4d303032000000000000000000000000000000000000000000000000000000009183019190915260ff16610c64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b50602081015160f81c8063deadbeef0154905060018251035f5f8260218601855af4610a0d576040513d5f823e3d81fd5b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610d1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b5060408051808201909152600481527f4d303035000000000000000000000000000000000000000000000000000000006020820152838214610d8a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f5b83811015610b3757610e24838383818110610daa57610daa612ad4565b9050602002016020810190610dbf919061274d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff878785818110610df257610df2612ad4565b9050602002016020810190610e07919061274d565b73ffffffffffffffffffffffffffffffffffffffff169190611e9c565b600101610d8d565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610eb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f5b81811015610f42575f60035f858585818110610ed357610ed3612ad4565b9050602002016020810190610ee8919061274d565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101610eb5565b505050565b60015460408051808201909152600481527f4d3030330000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314610fce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f805460405173ffffffffffffffffffffffffffffffffffffffff9091169083905b5f6040518083038185875af1925050503d805f811461102b576040519150601f19603f3d011682016040523d82523d5f602084013e611030565b606091505b50509050806040518060400160405280600481526020017f4d3030340000000000000000000000000000000000000000000000000000000081525090610f42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b5063deadbeef90910155565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1633146111bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b506108ec73ffffffffffffffffffffffffffffffffffffffff83163383611b70565b60015460408051808201909152600481527f4d3030330000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611264576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b5060408051808201909152600481527f4d3030350000000000000000000000000000000000000000000000000000000060208201528382146112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f5b83811015610b37575f546113579073ffffffffffffffffffffffffffffffffffffffff1684848481811061130c5761130c612ad4565b9050602002013587878581811061132557611325612ad4565b905060200201602081019061133a919061274d565b73ffffffffffffffffffffffffffffffffffffffff169190611b70565b6001016112d6565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff1633146113e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f3373ffffffffffffffffffffffffffffffffffffffff1682604051610ff1565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff16331461148d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b50600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff16331461155b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f5b81811015610f4257600160035f85858581811061157d5761157d612ad4565b9050602002016020810190611592919061274d565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560010161155e565b5f5460408051808201909152600481527f4d3030310000000000000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff163314611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b602b82013560f81c5f81900361171a57610a74858585857fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b547f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f9846060611c84565b8060ff1660030361177557610a74858585857f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006060611c84565b8060ff16600403610ad457610a74858585857f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006060611c84565b5f60608160ff86166117ee576117e4611f73565b90925090506117fc565b6117f66120b0565b90925090505b8061180b575f925050506118b5565b6040517fe0232b4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb169063e0232b429061188190889088908790600401612b01565b5f604051808303815f87803b158015611898575f5ffd5b505af11580156118aa573d5f5f3e3d5ffd5b505050506001925050505b9392505050565b5f60ff82166118d3576118cd612221565b92915050565b6118cd612365565b919050565b5f808061191060ff7f00000000000000000000000000000000000000000000000000000000000000031647612b3e565b905060ff84166119c957808511156119c1576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018690528592507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d906024015f604051808303815f87803b1580156119aa575f5ffd5b505af11580156119bc573d5f5f3e3d5ffd5b505050505b8492506119d9565b808511156119d5578094505b8492505b5f60018760058111156119ee576119ee612aa7565b036119fa575041611b5d565b6002876005811115611a0e57611a0e612aa7565b03611a3a57507f0000000000000000000000000000000000000000000000000000000000000000611b5d565b6003876005811115611a4e57611a4e612aa7565b03611a7a57507f0000000000000000000000000000000000000000000000000000000000000000611b5d565b6004876005811115611a8e57611a8e612aa7565b03611aba57507f0000000000000000000000000000000000000000000000000000000000000000611b5d565b6005876005811115611ace57611ace612aa7565b03611afa57507f0000000000000000000000000000000000000000000000000000000000000000611b5d565b60408051808201825260048082527f4d30313600000000000000000000000000000000000000000000000000000000602083015291517f08c379a00000000000000000000000000000000000000000000000000000000081526105269201612a95565b5f5f5f5f89855af1505050935093915050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052610f4291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612597565b5f5b81518110156108ec575f611c078383612636565b90505f611c2184611c19856014612b76565b016020015190565b90505f611c3385611c19866034612b76565b90505f611c4c86611c45876054612b76565b0160200190565b90505f5f838386886113885a03f180611c63575f5ffd5b50611c6f826054612b76565b611c799086612b76565b945050505050611bf3565b6040518535606090811c91601488013590911c90602888013560e81c90602c89013560f81c905f9084861060018114611cc557858252866020830152611ccf565b8682528560208301525b5060608703611cdf578360408201525b8681207fff000000000000000000000000000000000000000000000000000000000000008252606089901b60018301526015820152603581018990526055902060408051808201909152600481527f4d30313100000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091169150338214611da7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105269190612a95565b505f5f8d13611db6578b611db8565b8c5b90508215611e455763deadbeef602d8c013560f81c01546040517f39f85306000000000000000000000000000000000000000000000000000000008152602e8d0191907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28d01808460048401375f5f6004830184865af4611e405760405193503d5f853e3d84fd5b505050505b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081528260048201528160248201525f5f6044835f8b5af1611e8c573d5f823e3d81fd5b5050505050505050505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052611f288482612650565b610a0d5760405173ffffffffffffffffffffffffffffffffffffffff84811660248301525f6044830152611f6991869182169063095ea7b390606401611baa565b610a0d8482612597565b63deadbeef5460408051367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf810182528082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf019092526060925f926001918491605a803560f81c92917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa60185605960208901377c0100000000000000000000000000000000000000000000000000000000602188015260146005602589013780826039890137836120655760205f6019830160218a015f875af16120605760405191503d5f833e3d82fd5b5f5194505b505050602584015160201c7c0200000000000000000000000000000000000000000000000000000000176021850152808061209d5750815b6120a5575f92505b509194909350915050565b60605f5f5f5f5f5f6060600163deadbeef0154605a3560f81c9650607b359450609c35935060bc3560f81c9250605a3603600481016040850260c00180600101820160405195508086528060208701016040525060016020860153806021017c01000000000000000000000000000000000000000000000000000000008187015283605a836025018801375f5f84838901885af46121555760405193503d5f853e3d84fd5b50505050503d7c02000000000000000000000000000000000000000000000000000000006021830152806025830152805f604584013e50604581015194508284860312156122135785156122065760408051808201825260048082527f4d30313400000000000000000000000000000000000000000000000000000000602083015291517f08c379a00000000000000000000000000000000000000000000000000000000081526105269201612a95565b975f975095505050505050565b976001975095505050505050565b5f605a803560f81c9060053560601c907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa63601607c35846122c8575f5f63deadbeef01546040517c010000000000000000000000000000000000000000000000000000000081528660048201528486601883013760205f6018870183855af46122af576040513d5f823e3d81fd5b50505f519050806122c6575f965050505050505090565b505b63deadbeef546040517fff0f2b9a000000000000000000000000000000000000000000000000000000008152609c91906003609d3560f01c01808460048401375f8160040183015388816005018301538760601b816006018301528481601a01830152808401360381850182603a01840137505f5f603a8536030183855af4612356576040513d5f823e3d81fd5b50506001965050505050505090565b5f606061239160405180608001604052805f151581526020015f81526020015f81526020015f81525090565b5f5f5f5f605a3560f81c8552609c356020860152607b35604086015260bc3560f81c935060bd90508036039150600181013560f01c9250600383019250604051955083604002820161010601808701604052505f5f5f5f5f605a91508136039050600163deadbeef01546040517c01000000000000000000000000000000000000000000000000000000008152828460048301375f5f6004850183855af461243e576040513d5f823e3d81fd5b50503d9450876045018b01858152855f602083013e602081015160608c015260a0810151945060808101516020810260c0018201519450505089602001518a604001518b60600151031215612508578951156124f75760408051808201825260048082527f4d30313400000000000000000000000000000000000000000000000000000000602083015291517f08c379a00000000000000000000000000000000000000000000000000000000081526105269201612a95565b5f9b50505050505050505050505090565b600163deadbeef01547fff0f2b9a000000000000000000000000000000000000000000000000000000008c528460048d01528360248d0152888760448e01376001896044018d015389868a016065018d0153888803898801878b016066018e01375f5f606688018a018e845af4612584576040513d5f823e3d81fd5b5060019b50505050505050505050505090565b5f5f60205f8451602086015f885af1806125b6576040513d5f823e3d81fd5b50505f513d915081156125cd5780600114156125e7565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15610a0d576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610526565b5f5f6126458484016020015190565b60601c949350505050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f51905082801561269c57508115612681578060011461269c565b5f8673ffffffffffffffffffffffffffffffffffffffff163b115b9695505050505050565b5f5f83601f8401126126b6575f5ffd5b50813567ffffffffffffffff8111156126cd575f5ffd5b6020830191508360208285010111156126e4575f5ffd5b9250929050565b5f5f602083850312156126fc575f5ffd5b823567ffffffffffffffff811115612712575f5ffd5b61271e858286016126a6565b90969095509350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146118db575f5ffd5b5f6020828403121561275d575f5ffd5b6118b58261272a565b803560ff811681146118db575f5ffd5b5f60208284031215612786575f5ffd5b6118b582612766565b5f5f5f5f606085870312156127a2575f5ffd5b8435935060208501359250604085013567ffffffffffffffff8111156127c6575f5ffd5b6127d2878288016126a6565b95989497509550505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f5f6040838503121561281c575f5ffd5b82359150602083013567ffffffffffffffff811115612839575f5ffd5b8301601f81018513612849575f5ffd5b803567ffffffffffffffff811115612863576128636127de565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156128cf576128cf6127de565b6040528181528282016020018710156128e6575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f83601f840112612915575f5ffd5b50813567ffffffffffffffff81111561292c575f5ffd5b6020830191508360208260051b85010111156126e4575f5ffd5b5f5f5f5f60408587031215612959575f5ffd5b843567ffffffffffffffff81111561296f575f5ffd5b61297b87828801612905565b909550935050602085013567ffffffffffffffff81111561299a575f5ffd5b6127d287828801612905565b5f5f602083850312156129b7575f5ffd5b823567ffffffffffffffff8111156129cd575f5ffd5b61271e85828601612905565b5f602082840312156129e9575f5ffd5b5035919050565b5f5f60408385031215612a01575f5ffd5b612a0a83612766565b9150612a186020840161272a565b90509250929050565b5f5f60408385031215612a32575f5ffd5b612a3b8361272a565b946020939093013593505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6118b56020830184612a49565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f612b356060830184612a49565b95945050505050565b5f82612b71577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b808201808211156118cd577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing bytecode for exploit paths**
[codex:1519865] 
[codex:1519865] I'm carefully inspecting the contract bytecode to identify any unprotected delegatecalls or external calls that could lead to unauthorized token or ETH transfers. I’m focusing on the dispatch table, fallback logic, access controls, and whether storage slots controlling the implementation address can be altered without ownership checks, all to find a concrete exploit route.
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import binascii, re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] # extract hex after 0x
[codex:1519865] m=re.search(r'0x[0-9a-fA-F]+',hexdata)
[codex:1519865] code=bytes.fromhex(m.group(0)[2:])
[codex:1519865] # opcode map
[codex:1519865] opcodes={
[codex:1519865] 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:1519865] 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:1519865] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865] # disassemble and record offsets of call-like opcodes
[codex:1519865] call_ops={'CALL','DELEGATECALL','STATICCALL','CALLCODE','SELFDESTRUCT'}
[codex:1519865] idx=0
[codex:1519865] call_offsets=[]
[codex:1519865] while idx < len(code):
[codex:1519865]     op=code[idx]
[codex:1519865]     name=opcodes.get(op,'UNKNOWN')
[codex:1519865]     if name in call_ops:
[codex:1519865]         call_offsets.append((idx,name))
[codex:1519865]     if 0x60 <= op <= 0x7f:
[codex:1519865]         n=op-0x5f
[codex:1519865]         idx += 1+n
[codex:1519865]         continue
[codex:1519865]     idx += 1
[codex:1519865] 
[codex:1519865] print('code size',len(code))
[codex:1519865] print('call ops count',len(call_offsets))
[codex:1519865] print('first 20 call ops',call_offsets[:20])
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 29ms:
[codex:1519865] code size 11182
[codex:1519865] call ops count 19
[codex:1519865] first 20 call ops [(394, 'DELEGATECALL'), (1462, 'STATICCALL'), (1899, 'STATICCALL'), (3206, 'DELEGATECALL'), (4093, 'CALL'), (6299, 'CALL'), (6573, 'CALL'), (7013, 'CALL'), (7258, 'CALL'), (7727, 'DELEGATECALL'), (7808, 'CALL'), (8271, 'CALL'), (8516, 'DELEGATECALL'), (8864, 'DELEGATECALL'), (9031, 'DELEGATECALL'), (9263, 'DELEGATECALL'), (9589, 'DELEGATECALL'), (9638, 'CALL'), (9825, 'CALL')]
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing contract function boundaries and access controls**
[codex:1519865] 
[codex:1519865] I'm working on mapping function boundaries and disassembling near call instructions to find suspicious external calls. I want to detect owner checks by spotting SLOAD at slot 0 and CALLER comparisons, and identify functions without access restrictions that might allow unauthorized ETH or token transfers. I'll script this analysis using Python to parse function selectors and disassemble EVM bytecode around jump destinations, aiming to uncover vulnerabilities related to delegatecalls or token transfers.
[codex:1519865] exec
[codex:1519865] /bin/bash -lc 'which evm || true' in /tmp/codex-multi-fas47c04 succeeded in 6ms:
[codex:1519865] 
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Planning Python script for call disassembly**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import binascii, re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # opcode map
[codex:1519865] op={
[codex:1519865] 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:1519865] 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:1519865] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865] 
[codex:1519865] # decode into list of (offset, op, immbytes)
[codex:1519865] ops=[]
[codex:1519865] i=0
[codex:1519865] while i < len(code):
[codex:1519865]     off=i
[codex:1519865]     opcode=code[i]
[codex:1519865]     name=op.get(opcode,'UNKNOWN')
[codex:1519865]     i+=1
[codex:1519865]     imm=b''
[codex:1519865]     if 0x60 <= opcode <= 0x7f:
[codex:1519865]         n=opcode-0x5f
[codex:1519865]         imm=code[i:i+n]
[codex:1519865]         i+=n
[codex:1519865]     ops.append((off,name,imm))
[codex:1519865] 
[codex:1519865] # index by offset
[codex:1519865] op_index={off:idx for idx,(off,_,_) in enumerate(ops)}
[codex:1519865] 
[codex:1519865] # find call-like
[codex:1519865] call_ops={'CALL','DELEGATECALL','STATICCALL','CALLCODE','SELFDESTRUCT'}
[codex:1519865] call_offsets=[off for off,name,_ in ops if name in call_ops]
[codex:1519865] 
[codex:1519865] # print around each
[codex:1519865] for off in call_offsets:
[codex:1519865]     idx=op_index[off]
[codex:1519865]     start=max(0,idx-8)
[codex:1519865]     end=min(len(ops),idx+8)
[codex:1519865]     print('\\n---- around offset',off,'----')
[codex:1519865]     for off2,name,imm in ops[start:end]:
[codex:1519865]         immhex=imm.hex()
[codex:1519865]         if imm:
[codex:1519865]             print(f'{off2:04x}: {name} 0x{immhex}')
[codex:1519865]         else:
[codex:1519865]             print(f'{off2:04x}: {name}')
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 31ms:
[codex:1519865] 
[codex:1519865] ---- around offset 394 ----
[codex:1519865] 0181: CALLDATACOPY
[codex:1519865] 0182: UNKNOWN
[codex:1519865] 0183: UNKNOWN
[codex:1519865] 0184: CALLDATASIZE
[codex:1519865] 0185: DUP4
[codex:1519865] 0186: PUSH1 0x02
[codex:1519865] 0188: SLOAD
[codex:1519865] 0189: GAS
[codex:1519865] 018a: DELEGATECALL
[codex:1519865] 018b: RETURNDATASIZE
[codex:1519865] 018c: UNKNOWN
[codex:1519865] 018d: DUP4
[codex:1519865] 018e: RETURNDATACOPY
[codex:1519865] 018f: DUP1
[codex:1519865] 0190: PUSH2 0x0197
[codex:1519865] 0193: JUMPI
[codex:1519865] 
[codex:1519865] ---- around offset 1462 ----
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing delegatecall targets and opcode mapping**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # map
[codex:1519865] op={
[codex:1519865] 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:1519865] 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:1519865] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865] 
[codex:1519865] # decode ops list
[codex:1519865] ops=[]
[codex:1519865] i=0
[codex:1519865] while i<len(code):
[codex:1519865]     off=i
[codex:1519865]     opcode=code[i]
[codex:1519865]     i+=1
[codex:1519865]     imm=b''
[codex:1519865]     if 0x60<=opcode<=0x7f:
[codex:1519865]         n=opcode-0x5f
[codex:1519865]         imm=code[i:i+n]
[codex:1519865]         i+=n
[codex:1519865]     ops.append((off,opcode,imm))
[codex:1519865] 
[codex:1519865] # show unknown count
[codex:1519865] unknown=[(off,opcode) for off,opcode,_ in ops if opcode not in op]
[codex:1519865] print('unknown opcode count',len(unknown))
[codex:1519865] print('unique unknown',sorted(set(opc for _,opc in unknown))[:10])
[codex:1519865] # show few unknown occurrences
[codex:1519865] for off,opc in unknown[:20]:
[codex:1519865]     print(f'0x{off:04x}: 0x{opc:02x}')
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 30ms:
[codex:1519865] unknown opcode count 300
[codex:1519865] unique unknown [94, 95]
[codex:1519865] 0x000d: 0x5f
[codex:1519865] 0x017f: 0x5f
[codex:1519865] 0x0182: 0x5f
[codex:1519865] 0x0183: 0x5f
[codex:1519865] 0x018c: 0x5f
[codex:1519865] 0x01ae: 0x5f
[codex:1519865] 0x01af: 0x5f
[codex:1519865] 0x01cd: 0x5f
[codex:1519865] 0x01ce: 0x5f
[codex:1519865] 0x01d2: 0x5f
[codex:1519865] 0x0222: 0x5f
[codex:1519865] 0x0223: 0x5f
[codex:1519865] 0x0241: 0x5f
[codex:1519865] 0x0242: 0x5f
[codex:1519865] 0x0265: 0x5f
[codex:1519865] 0x0266: 0x5f
[codex:1519865] 0x0284: 0x5f
[codex:1519865] 0x0285: 0x5f
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Updating opcode mappings for new instructions**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] 
[codex:1519865] op={
[codex:1519865] 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:1519865] 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:1519865] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865] # decode ops list
[codex:1519865] ops=[]
[codex:1519865] i=0
[codex:1519865] while i<len(code):
[codex:1519865]     off=i
[codex:1519865]     opcode=code[i]
[codex:1519865]     i+=1
[codex:1519865]     imm=b''
[codex:1519865]     if 0x60<=opcode<=0x7f:
[codex:1519865]         n=opcode-0x5f
[codex:1519865]         imm=code[i:i+n]
[codex:1519865]         i+=n
[codex:1519865]     ops.append((off,opcode,imm))
[codex:1519865] 
[codex:1519865] op_index={off:idx for idx,(off,_,_) in enumerate(ops)}
[codex:1519865] call_ops={'CALL','DELEGATECALL','STATICCALL','CALLCODE','SELFDESTRUCT'}
[codex:1519865] call_offsets=[off for off,opc,_ in ops if op.get(opc,'') in call_ops]
[codex:1519865] 
[codex:1519865] for off in call_offsets:
[codex:1519865]     idx=op_index[off]
[codex:1519865]     start=max(0,idx-10)
[codex:1519865]     end=min(len(ops),idx+10)
[codex:1519865]     print('\\n---- around offset',hex(off),'----')
[codex:1519865]     for off2,opc,imm in ops[start:end]:
[codex:1519865]         name=op.get(opc,f'0x{opc:02x}')
[codex:1519865]         if imm:
[codex:1519865]             print(f'{off2:04x}: {name} 0x{imm.hex()}')
[codex:1519865]         else:
[codex:1519865]             print(f'{off2:04x}: {name}')
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 32ms:
[codex:1519865] 
[codex:1519865] ---- around offset 0x18a ----
[codex:1519865] 017f: PUSH0
[codex:1519865] 0180: DUP3
[codex:1519865] 0181: CALLDATACOPY
[codex:1519865] 0182: PUSH0
[codex:1519865] 0183: PUSH0
[codex:1519865] 0184: CALLDATASIZE
[codex:1519865] 0185: DUP4
[codex:1519865] 0186: PUSH1 0x02
[codex:1519865] 0188: SLOAD
[codex:1519865] 0189: GAS
[codex:1519865] 018a: DELEGATECALL
[codex:1519865] 018b: RETURNDATASIZE
[codex:1519865] 018c: PUSH0
[codex:1519865] 018d: DUP4
[codex:1519865] 018e: RETURNDATACOPY
[codex:1519865] 018f: DUP1
[codex:1519865] 0190: PUSH2 0x0197
[codex:1519865] 0193: JUMPI
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing delegatecall targets and ownership checks**
[codex:1519865] 
[codex:1519865] I'm digging into how delegatecalls determine their targets by examining surrounding bytecode and stack usage, identifying dynamic address patterns, and considering proxies. At the same time, I'm inspecting function ownership guards using custom error codes like "M001" and parsing the dispatch table to map selectors to functions to find any potentially unrestricted access points. This way, I can piece together which functions might let unauthorized users interact or transfer funds.
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # simple scan: look for pattern PUSH4 <sel> EQ PUSH2 <dest> JUMPI
[codex:1519865] # actual pattern: 63 <sel> 14 61 <dest> 57
[codex:1519865] sel_map=[]
[codex:1519865] for i in range(len(code)-8):
[codex:1519865]     if code[i]==0x63 and code[i+5]==0x14 and code[i+6]==0x61 and code[i+9]==0x57:
[codex:1519865]         sel=code[i+1:i+5].hex()
[codex:1519865]         dest=int.from_bytes(code[i+7:i+9], 'big')
[codex:1519865]         sel_map.append((sel,dest,i))
[codex:1519865] 
[codex:1519865] print('selectors found',len(sel_map))
[codex:1519865] for sel,dest,off in sel_map:
[codex:1519865]     print(sel,hex(dest), 'at',hex(off))
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 28ms:
[codex:1519865] selectors found 21
[codex:1519865] eed2f252 0x43b at 0x34
[codex:1519865] f08a0323 0x467 at 0x3f
[codex:1519865] fa461e33 0x486 at 0x4a
[codex:1519865] c311d049 0x3de at 0x5a
[codex:1519865] d0ebdbe7 0x3fd at 0x65
[codex:1519865] d34628cc 0x41c at 0x70
[codex:1519865] 9e281a98 0x362 at 0x8b
[codex:1519865] bdb25d0e 0x381 at 0x96
[codex:1519865] bfd79284 0x3a0 at 0xa1
[codex:1519865] 6fefbbc2 0x324 at 0xb1
[codex:1519865] 7580a1bc 0x343 at 0xbc
[codex:1519865] 481c6a75 0x2ba at 0xe2
[codex:1519865] 51b9b0fa 0x2e6 at 0xed
[codex:1519865] 6c3bbfd7 0x305 at 0xf8
[codex:1519865] 23a69e75 0x25d at 0x108
[codex:1519865] 2c8958f6 0x27c at 0x113
[codex:1519865] 31f57072 0x29b at 0x11e
[codex:1519865] 0b58f97d 0x1c5 at 0x139
[codex:1519865] 13af4035 0x21a at 0x144
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Preparing function disassembly script**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] 
[codex:1519865] op={
[codex:1519865] 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:1519865] 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:1519865] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865] 
[codex:1519865] def disasm(start, count=40):
[codex:1519865]     i=start
[codex:1519865]     out=[]
[codex:1519865]     while i < len(code) and len(out)<count:
[codex:1519865]         off=i
[codex:1519865]         opcode=code[i]; i+=1
[codex:1519865]         imm=b''
[codex:1519865]         if 0x60<=opcode<=0x7f:
[codex:1519865]             n=opcode-0x5f
[codex:1519865]             imm=code[i:i+n]; i+=n
[codex:1519865]         name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865]         out.append((off,name,imm))
[codex:1519865]     return out
[codex:1519865] 
[codex:1519865] # selectors mapping
[codex:1519865] sel_map=[]
[codex:1519865] for i in range(len(code)-8):
[codex:1519865]     if code[i]==0x63 and code[i+5]==0x14 and code[i+6]==0x61 and code[i+9]==0x57:
[codex:1519865]         sel=code[i+1:i+5].hex()
[codex:1519865]         dest=int.from_bytes(code[i+7:i+9], 'big')
[codex:1519865]         sel_map.append((sel,dest))
[codex:1519865] 
[codex:1519865] for sel,dest in sel_map:
[codex:1519865]     print(f\"\\n== selector {sel} dest 0x{dest:04x} ==\")
[codex:1519865]     for off,name,imm in disasm(dest, count=30):
[codex:1519865]         if imm:
[codex:1519865]             print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865]         else:
[codex:1519865]             print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 29ms:
[codex:1519865] 
[codex:1519865] == selector eed2f252 dest 0x043b ==
[codex:1519865] 043b: JUMPDEST
[codex:1519865] 043c: CALLVALUE
[codex:1519865] 043d: DUP1
[codex:1519865] 043e: ISZERO
[codex:1519865] 043f: PUSH2 0x0446
[codex:1519865] 0442: JUMPI
[codex:1519865] 0443: PUSH0
[codex:1519865] 0444: PUSH0
[codex:1519865] 0445: REVERT
[codex:1519865] 0446: JUMPDEST
[codex:1519865] 0447: POP
[codex:1519865] 0448: PUSH1 0x02
[codex:1519865] 044a: SLOAD
[codex:1519865] 044b: PUSH2 0x01f0
[codex:1519865] 044e: SWAP1
[codex:1519865] 044f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:1519865] 0464: AND
[codex:1519865] 0465: DUP2
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing internal functions for access control**
[codex:1519865] 
[codex:1519865] I'm focusing on the internal functions like 0x0827 and others since the main functions mostly check callvalue and then jump there. I want to see if these internal parts implement access controls, especially owner-only guards, and ensure no critical function is missing protections. The 0x04a5 function might be a fallback or mapping updater, so I'll check that too. Starting with 0x0827 to deeply inspect its disassembly.
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map with PUSH0
[codex:1519865] op={
[codex:1519865] 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:1519865] 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:1519865] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865] 
[codex:1519865] def disasm(start, count=80):
[codex:1519865]     i=start
[codex:1519865]     out=[]
[codex:1519865]     while i < len(code) and len(out)<count:
[codex:1519865]         off=i
[codex:1519865]         opcode=code[i]; i+=1
[codex:1519865]         imm=b''
[codex:1519865]         if 0x60<=opcode<=0x7f:
[codex:1519865]             n=opcode-0x5f
[codex:1519865]             imm=code[i:i+n]; i+=n
[codex:1519865]         name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865]         out.append((off,name,imm))
[codex:1519865]     return out
[codex:1519865] 
[codex:1519865] # inspect function bodies
[codex:1519865] targets=[0x0827,0x08f0,0x09bd,0x0a13,0x0b3e,0x0c95,0x0e2c,0x0f47,0x10a3,0x1135,0x11dd,0x135f,0x1407,0x14d5,0x15ec,0x16ba,0x04a5]
[codex:1519865] for t in targets:
[codex:1519865]     print(f\"\\n== function at 0x{t:04x} ==\")
[codex:1519865]     for off,name,imm in disasm(t, count=60):
[codex:1519865]         if imm:
[codex:1519865]             print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865]         else:
[codex:1519865]             print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 29ms:
[codex:1519865] 
[codex:1519865] == function at 0x0827 ==
[codex:1519865] 0827: JUMPDEST
[codex:1519865] 0828: PUSH0
[codex:1519865] 0829: SLOAD
[codex:1519865] 082a: PUSH1 0x40
[codex:1519865] 082c: DUP1
[codex:1519865] 082d: MLOAD
[codex:1519865] 082e: DUP1
[codex:1519865] 082f: DUP3
[codex:1519865] 0830: ADD
[codex:1519865] 0831: SWAP1
[codex:1519865] 0832: SWAP2
[codex:1519865] 0833: MSTORE
[codex:1519865] 0834: PUSH1 0x04
[codex:1519865] 0836: DUP2
[codex:1519865] 0837: MSTORE
[codex:1519865] 0838: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000
[codex:1519865] 0859: PUSH1 0x20
[codex:1519865] 085b: DUP3
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing function ownership checks**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # find PUSH2 0x04a5 occurrences
[codex:1519865] for i in range(len(code)-2):
[codex:1519865]     if code[i]==0x61 and code[i+1]==0x04 and code[i+2]==0xa5:
[codex:1519865]         print('PUSH2 0x04a5 at',hex(i))
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 27ms:
[codex:1519865] PUSH2 0x04a5 at 0x1a0
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing jump and function offsets**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] 
[codex:1519865] # disassemble around 0x190-0x1b0
[codex:1519865] op={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:1519865] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 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:1519865] 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:1519865] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1519865] 
[codex:1519865] i=0x190
[codex:1519865] end=0x1b5
[codex:1519865] while i<end:
[codex:1519865]     off=i
[codex:1519865]     opcode=code[i]; i+=1
[codex:1519865]     imm=b''
[codex:1519865]     if 0x60<=opcode<=0x7f:
[codex:1519865]         n=opcode-0x5f
[codex:1519865]         imm=code[i:i+n]; i+=n
[codex:1519865]     name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865]     if imm:
[codex:1519865]         print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865]     else:
[codex:1519865]         print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 27ms:
[codex:1519865] 0190: PUSH2 0x0197
[codex:1519865] 0193: JUMPI
[codex:1519865] 0194: RETURNDATASIZE
[codex:1519865] 0195: DUP3
[codex:1519865] 0196: REVERT
[codex:1519865] 0197: JUMPDEST
[codex:1519865] 0198: POP
[codex:1519865] 0199: RETURNDATASIZE
[codex:1519865] 019a: DUP2
[codex:1519865] 019b: RETURN
[codex:1519865] 019c: JUMPDEST
[codex:1519865] 019d: PUSH2 0x01a4
[codex:1519865] 01a0: PUSH2 0x04a5
[codex:1519865] 01a3: JUMP
[codex:1519865] 01a4: JUMPDEST
[codex:1519865] 01a5: STOP
[codex:1519865] 01a6: JUMPDEST
[codex:1519865] 01a7: CALLVALUE
[codex:1519865] 01a8: DUP1
[codex:1519865] 01a9: ISZERO
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing fallback and internal function calls**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map with PUSH0
[codex:1519865] op={
[codex:1519865] 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:1519865] 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:1519865] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1519865] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1519865] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 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:1519865] 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:1519865] 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:1519865] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1519865] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1519865] }
[codex:1519865] 
[codex:1519865] def disasm(start, count=120):
[codex:1519865]     i=start
[codex:1519865]     out=[]
[codex:1519865]     while i < len(code) and len(out)<count:
[codex:1519865]         off=i
[codex:1519865]         opcode=code[i]; i+=1
[codex:1519865]         imm=b''
[codex:1519865]         if 0x60<=opcode<=0x7f:
[codex:1519865]             n=opcode-0x5f
[codex:1519865]             imm=code[i:i+n]; i+=n
[codex:1519865]         name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865]         out.append((off,name,imm))
[codex:1519865]     return out
[codex:1519865] 
[codex:1519865] for off,name,imm in disasm(0x1c84, count=120):
[codex:1519865]     if imm:
[codex:1519865]         print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865]     else:
[codex:1519865]         print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 28ms:
[codex:1519865] 1c84: JUMPDEST
[codex:1519865] 1c85: PUSH1 0x40
[codex:1519865] 1c87: MLOAD
[codex:1519865] 1c88: DUP6
[codex:1519865] 1c89: CALLDATALOAD
[codex:1519865] 1c8a: PUSH1 0x60
[codex:1519865] 1c8c: SWAP1
[codex:1519865] 1c8d: DUP2
[codex:1519865] 1c8e: SHR
[codex:1519865] 1c8f: SWAP2
[codex:1519865] 1c90: PUSH1 0x14
[codex:1519865] 1c92: DUP9
[codex:1519865] 1c93: ADD
[codex:1519865] 1c94: CALLDATALOAD
[codex:1519865] 1c95: SWAP1
[codex:1519865] 1c96: SWAP2
[codex:1519865] 1c97: SHR
[codex:1519865] 1c98: SWAP1
[codex:1519865] 1c99: PUSH1 0x28
[codex:1519865] 1c9b: DUP9
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Continuing from previous position**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1519865] 
[codex:1519865] def disasm(start, count=120):
[codex:1519865]     i=start
[codex:1519865]     out=[]
[codex:1519865]     while i < len(code) and len(out)<count:
[codex:1519865]         off=i
[codex:1519865]         opcode=code[i]; i+=1
[codex:1519865]         imm=b''
[codex:1519865]         if 0x60<=opcode<=0x7f:
[codex:1519865]             n=opcode-0x5f
[codex:1519865]             imm=code[i:i+n]; i+=n
[codex:1519865]         name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865]         out.append((off,name,imm))
[codex:1519865]     return out
[codex:1519865] 
[codex:1519865] for off,name,imm in disasm(0x1d69, count=120):
[codex:1519865]     if imm:
[codex:1519865]         print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865]     else:
[codex:1519865]         print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 28ms:
[codex:1519865] 1d69: SWAP1
[codex:1519865] 1d6a: SWAP2
[codex:1519865] 1d6b: AND
[codex:1519865] 1d6c: SWAP2
[codex:1519865] 1d6d: POP
[codex:1519865] 1d6e: CALLER
[codex:1519865] 1d6f: DUP3
[codex:1519865] 1d70: EQ
[codex:1519865] 1d71: PUSH2 0x1da7
[codex:1519865] 1d74: JUMPI
[codex:1519865] 1d75: PUSH1 0x40
[codex:1519865] 1d77: MLOAD
[codex:1519865] 1d78: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:1519865] 1d99: DUP2
[codex:1519865] 1d9a: MSTORE
[codex:1519865] 1d9b: PUSH1 0x04
[codex:1519865] 1d9d: ADD
[codex:1519865] 1d9e: PUSH2 0x0526
[codex:1519865] 1da1: SWAP2
[codex:1519865] 1da2: SWAP1
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1519865] 
[codex:1519865] def disasm(start, count=120):
[codex:1519865]     i=start
[codex:1519865]     out=[]
[codex:1519865]     while i < len(code) and len(out)<count:
[codex:1519865]         off=i
[codex:1519865]         opcode=code[i]; i+=1
[codex:1519865]         imm=b''
[codex:1519865]         if 0x60<=opcode<=0x7f:
[codex:1519865]             n=opcode-0x5f
[codex:1519865]             imm=code[i:i+n]; i+=n
[codex:1519865]         name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865]         out.append((off,name,imm))
[codex:1519865]     return out
[codex:1519865] 
[codex:1519865] for off,name,imm in disasm(0x1e78, count=80):
[codex:1519865]     if imm:
[codex:1519865]         print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865]     else:
[codex:1519865]         print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 32ms:
[codex:1519865] 1e78: PUSH0
[codex:1519865] 1e79: PUSH0
[codex:1519865] 1e7a: PUSH1 0x44
[codex:1519865] 1e7c: DUP4
[codex:1519865] 1e7d: PUSH0
[codex:1519865] 1e7e: DUP12
[codex:1519865] 1e7f: GAS
[codex:1519865] 1e80: CALL
[codex:1519865] 1e81: PUSH2 0x1e8c
[codex:1519865] 1e84: JUMPI
[codex:1519865] 1e85: RETURNDATASIZE
[codex:1519865] 1e86: PUSH0
[codex:1519865] 1e87: DUP3
[codex:1519865] 1e88: RETURNDATACOPY
[codex:1519865] 1e89: RETURNDATASIZE
[codex:1519865] 1e8a: DUP2
[codex:1519865] 1e8b: REVERT
[codex:1519865] 1e8c: JUMPDEST
[codex:1519865] 1e8d: POP
[codex:1519865] 1e8e: POP
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Continuing code inspection**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map as before
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1519865] 
[codex:1519865] def disasm(start, count=120):
[codex:1519865]     i=start
[codex:1519865]     out=[]
[codex:1519865]     while i < len(code) and len(out)<count:
[codex:1519865]         off=i
[codex:1519865]         opcode=code[i]; i+=1
[codex:1519865]         imm=b''
[codex:1519865]         if 0x60<=opcode<=0x7f:
[codex:1519865]             n=opcode-0x5f
[codex:1519865]             imm=code[i:i+n]; i+=n
[codex:1519865]         name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865]         out.append((off,name,imm))
[codex:1519865]     return out
[codex:1519865] 
[codex:1519865] for off,name,imm in disasm(0x1f28, count=80):
[codex:1519865]     if imm:
[codex:1519865]         print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865]     else:
[codex:1519865]         print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 27ms:
[codex:1519865] 1f28: JUMPDEST
[codex:1519865] 1f29: PUSH2 0x0a0d
[codex:1519865] 1f2c: JUMPI
[codex:1519865] 1f2d: PUSH1 0x40
[codex:1519865] 1f2f: MLOAD
[codex:1519865] 1f30: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:1519865] 1f45: DUP5
[codex:1519865] 1f46: DUP2
[codex:1519865] 1f47: AND
[codex:1519865] 1f48: PUSH1 0x24
[codex:1519865] 1f4a: DUP4
[codex:1519865] 1f4b: ADD
[codex:1519865] 1f4c: MSTORE
[codex:1519865] 1f4d: PUSH0
[codex:1519865] 1f4e: PUSH1 0x44
[codex:1519865] 1f50: DUP4
[codex:1519865] 1f51: ADD
[codex:1519865] 1f52: MSTORE
[codex:1519865] 1f53: PUSH2 0x1f69
[codex:1519865] 1f56: SWAP2
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing contract’s callback function logic**
[codex:1519865] 
[codex:1519865] I'm digging into the function at 0x1c84, which seems to handle Uniswap V3 callbacks by verifying the caller matches a computed pool address using the create2 formula. This involves decoding calldata, hashing data for address checks, and enforcing that only the expected Uniswap pool can call it, which suggests access control designed to prevent unauthorized calls. I want to confirm whether any open functions let users exploit these callbacks to drain tokens by forcing swaps or flashes through pools the contract controls. I'll also examine if the selectors 0x23a69e75 and 0x2c8958f6 match other Uniswap callback functions to understand vulnerabilities or protections.
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] try:
[codex:1519865]     import sha3
[codex:1519865]     print('sha3 available')
[codex:1519865]     print(sha3.keccak_256(b'uniswapV3SwapCallback(int256,int256,bytes)').hexdigest()[:8])
[codex:1519865] except Exception as e:
[codex:1519865]     print('sha3 not available',e)
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 16ms:
[codex:1519865] sha3 not available No module named 'sha3'
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing function selectors and callbacks**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] # minimal keccak-256 implementation for selector checks
[codex:1519865] # source: small pure python
[codex:1519865] 
[codex:1519865] ROT = [
[codex:1519865]     [0, 36, 3, 41, 18],
[codex:1519865]     [1, 44, 10, 45, 2],
[codex:1519865]     [62, 6, 43, 15, 61],
[codex:1519865]     [28, 55, 25, 21, 56],
[codex:1519865]     [27, 20, 39, 8, 14]
[codex:1519865] ]
[codex:1519865] RC = [
[codex:1519865]     0x0000000000000001, 0x0000000000008082,
[codex:1519865]     0x800000000000808A, 0x8000000080008000,
[codex:1519865]     0x000000000000808B, 0x0000000080000001,
[codex:1519865]     0x8000000080008081, 0x8000000000008009,
[codex:1519865]     0x000000000000008A, 0x0000000000000088,
[codex:1519865]     0x0000000080008009, 0x000000008000000A,
[codex:1519865]     0x000000008000808B, 0x800000000000008B,
[codex:1519865]     0x8000000000008089, 0x8000000000008003,
[codex:1519865]     0x8000000000008002, 0x8000000000000080,
[codex:1519865]     0x000000000000800A, 0x800000008000000A,
[codex:1519865]     0x8000000080008081, 0x8000000000008080,
[codex:1519865]     0x0000000080000001, 0x8000000080008008,
[codex:1519865] ]
[codex:1519865] 
[codex:1519865] def keccak_f(s):
[codex:1519865]     # s is 5x5 of 64-bit
[codex:1519865]     for rc in RC:
[codex:1519865]         # theta
[codex:1519865]         C = [s[x][0]"'^s[x][1]''^s[x][2]''^s[x][3]''^s[x][4] for x in range(5)]
[codex:1519865]         D = [C[(x-1)%5]''^((C[(x+1)%5] << 1 | C[(x+1)%5] >> (64-1)) & ((1<<64)-1)) for x in range(5)]
[codex:1519865]         for x in range(5):
[codex:1519865]             for y in range(5):
[codex:1519865]                 s[x][y] ''^= D[x]
[codex:1519865]         # rho+pi
[codex:1519865]         B = [[0]*5 for _ in range(5)]
[codex:1519865]         for x in range(5):
[codex:1519865]             for y in range(5):
[codex:1519865]                 v = s[x][y]
[codex:1519865]                 r = ROT[x][y]
[codex:1519865]                 v = ((v << r) | (v >> (64-r))) & ((1<<64)-1)
[codex:1519865]                 B[y][(2*x+3*y)%5] = v
[codex:1519865]         # chi
[codex:1519865]         for x in range(5):
[codex:1519865]             for y in range(5):
[codex:1519865]                 s[x][y] = B[x][y] ''^ ((~B[(x+1)%5][y]) & B[(x+2)%5][y])
[codex:1519865]         # iota
[codex:1519865]         s[0][0] ''^= rc
[codex:1519865]     return s
[codex:1519865] 
[codex:1519865] def keccak256(data: bytes) -> bytes:
[codex:1519865]     # parameters for keccak-256
[codex:1519865]     rate = 1088 // 8
[codex:1519865]     capacity = 512 // 8
[codex:1519865]     # init state
[codex:1519865]     s = [[0]*5 for _ in range(5)]
[codex:1519865]     # padding: 0x01 ... 0x80
[codex:1519865]     padded = bytearray(data)
[codex:1519865]     padded.append(0x01)
[codex:1519865]     while (len(padded) % rate) != rate-1:
[codex:1519865]         padded.append(0x00)
[codex:1519865]     padded.append(0x80)
[codex:1519865]     # absorb
[codex:1519865]     for off in range(0, len(padded), rate):
[codex:1519865]         block = padded[off:off+rate]
[codex:1519865]         # xor into state
[codex:1519865]         for i in range(0, rate, 8):
[codex:1519865]             lane = int.from_bytes(block[i:i+8], '"'little')
[codex:1519865]             x = (i//8) % 5
[codex:1519865]             y = (i//8) // 5
[codex:1519865]             s[x][y] "'^= lane
[codex:1519865]         s = keccak_f(s)
[codex:1519865]     # squeeze
[codex:1519865]     out = bytearray()
[codex:1519865]     while len(out) < 32:
[codex:1519865]         for i in range(0, rate, 8):
[codex:1519865]             lane = s[(i//8)%5][(i//8)//5]
[codex:1519865]             out += lane.to_bytes(8, '"'little')
[codex:1519865]             if len(out) >= 32:
[codex:1519865]                 break
[codex:1519865]         if len(out) < 32:
[codex:1519865]             s = keccak_f(s)
[codex:1519865]     return bytes(out[:32])
[codex:1519865] 
[codex:1519865] # test: known selector for uniswapV3SwapCallback
[codex:1519865] sig='uniswapV3SwapCallback(int256,int256,bytes)'
[codex:1519865] print('swap callback selector',keccak256(sig.encode()).hex()[:8])
[codex:1519865] # compute flash callback
[codex:1519865] sig2='uniswapV3FlashCallback(uint256,uint256,bytes)'
[codex:1519865] print('flash callback selector',keccak256(sig2.encode()).hex()[:8])
[codex:1519865] # other callbacks
[codex:1519865] sig3='uniswapV2Call(address,uint256,uint256,bytes)'
[codex:1519865] print('uniswapV2Call selector',keccak256(sig3.encode()).hex()[:8])
[codex:1519865] 
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 22ms:
[codex:1519865] swap callback selector fa461e33
[codex:1519865] flash callback selector e9cbafb0
[codex:1519865] uniswapV2Call selector 10d1e85c
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing callback selectors**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] # using keccak implemented above
[codex:1519865] ROT=[[0,36,3,41,18],[1,44,10,45,2],[62,6,43,15,61],[28,55,25,21,56],[27,20,39,8,14]]
[codex:1519865] RC=[0x0000000000000001,0x0000000000008082,0x800000000000808A,0x8000000080008000,0x000000000000808B,0x0000000080000001,0x8000000080008081,0x8000000000008009,0x000000000000008A,0x0000000000000088,0x0000000080008009,0x000000008000000A,0x000000008000808B,0x800000000000008B,0x8000000000008089,0x8000000000008003,0x8000000000008002,0x8000000000000080,0x000000000000800A,0x800000008000000A,0x8000000080008081,0x8000000000008080,0x0000000080000001,0x8000000080008008]
[codex:1519865] 
[codex:1519865] def keccak_f(s):
[codex:1519865]     for rc in RC:
[codex:1519865]         C=[s[x][0]"'^s[x][1]''^s[x][2]''^s[x][3]''^s[x][4] for x in range(5)]
[codex:1519865]         D=[C[(x-1)%5]''^((C[(x+1)%5]<<1 | C[(x+1)%5]>>(64-1)) & ((1<<64)-1)) for x in range(5)]
[codex:1519865]         for x in range(5):
[codex:1519865]             for y in range(5):
[codex:1519865]                 s[x][y]''^=D[x]
[codex:1519865]         B=[[0]*5 for _ in range(5)]
[codex:1519865]         for x in range(5):
[codex:1519865]             for y in range(5):
[codex:1519865]                 v=s[x][y]
[codex:1519865]                 r=ROT[x][y]
[codex:1519865]                 v=((v<<r)|(v>>(64-r))) & ((1<<64)-1)
[codex:1519865]                 B[y][(2*x+3*y)%5]=v
[codex:1519865]         for x in range(5):
[codex:1519865]             for y in range(5):
[codex:1519865]                 s[x][y]=B[x][y]''^((~B[(x+1)%5][y]) & B[(x+2)%5][y])
[codex:1519865]         s[0][0]''^=rc
[codex:1519865]     return s
[codex:1519865] 
[codex:1519865] def keccak256(data: bytes)->bytes:
[codex:1519865]     rate=1088//8
[codex:1519865]     padded=bytearray(data)
[codex:1519865]     padded.append(0x01)
[codex:1519865]     while len(padded)%rate != rate-1:
[codex:1519865]         padded.append(0)
[codex:1519865]     padded.append(0x80)
[codex:1519865]     s=[[0]*5 for _ in range(5)]
[codex:1519865]     for off in range(0,len(padded),rate):
[codex:1519865]         block=padded[off:off+rate]
[codex:1519865]         for i in range(0,rate,8):
[codex:1519865]             lane=int.from_bytes(block[i:i+8],'"'little')
[codex:1519865]             x=(i//8)%5; y=(i//8)//5
[codex:1519865]             s[x][y]"'^=lane
[codex:1519865]         s=keccak_f(s)
[codex:1519865]     out=bytearray()
[codex:1519865]     while len(out)<32:
[codex:1519865]         for i in range(0,rate,8):
[codex:1519865]             lane=s[(i//8)%5][(i//8)//5]
[codex:1519865]             out+=lane.to_bytes(8,'"'little')
[codex:1519865]             if len(out)>=32:
[codex:1519865]                 break
[codex:1519865]         if len(out)<32:
[codex:1519865]             s=keccak_f(s)
[codex:1519865]     return bytes(out[:32])
[codex:1519865] 
[codex:1519865] sigs=['algebraSwapCallback(int256,int256,bytes)','algebraFlashCallback(uint256,uint256,bytes)','pancakeV3SwapCallback(int256,int256,bytes)','pancakeV3FlashCallback(uint256,uint256,bytes)','ramsesV2SwapCallback(int256,int256,bytes)']
[codex:1519865] for sig in sigs:
[codex:1519865]     print(sig, keccak256(sig.encode()).hex()[:8])
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 21ms:
[codex:1519865] algebraSwapCallback(int256,int256,bytes) 2c8958f6
[codex:1519865] algebraFlashCallback(uint256,uint256,bytes) a60b0d3c
[codex:1519865] pancakeV3SwapCallback(int256,int256,bytes) 23a69e75
[codex:1519865] pancakeV3FlashCallback(uint256,uint256,bytes) a1d48336
[codex:1519865] ramsesV2SwapCallback(int256,int256,bytes) 654b6487
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing callback and access restrictions**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1519865] 
[codex:1519865] def disasm(start, count=120):
[codex:1519865]     i=start
[codex:1519865]     out=[]
[codex:1519865]     while i < len(code) and len(out)<count:
[codex:1519865]         off=i
[codex:1519865]         opcode=code[i]; i+=1
[codex:1519865]         imm=b''
[codex:1519865]         if 0x60<=opcode<=0x7f:
[codex:1519865]             n=opcode-0x5f
[codex:1519865]             imm=code[i:i+n]; i+=n
[codex:1519865]         name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865]         out.append((off,name,imm))
[codex:1519865]     return out
[codex:1519865] 
[codex:1519865] for off,name,imm in disasm(0x0f47, count=140):
[codex:1519865]     if imm:
[codex:1519865]         print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865]     else:
[codex:1519865]         print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 27ms:
[codex:1519865] 0f47: JUMPDEST
[codex:1519865] 0f48: PUSH1 0x01
[codex:1519865] 0f4a: SLOAD
[codex:1519865] 0f4b: PUSH1 0x40
[codex:1519865] 0f4d: DUP1
[codex:1519865] 0f4e: MLOAD
[codex:1519865] 0f4f: DUP1
[codex:1519865] 0f50: DUP3
[codex:1519865] 0f51: ADD
[codex:1519865] 0f52: SWAP1
[codex:1519865] 0f53: SWAP2
[codex:1519865] 0f54: MSTORE
[codex:1519865] 0f55: PUSH1 0x04
[codex:1519865] 0f57: DUP2
[codex:1519865] 0f58: MSTORE
[codex:1519865] 0f59: PUSH32 0x4d30303300000000000000000000000000000000000000000000000000000000
[codex:1519865] 0f7a: PUSH1 0x20
[codex:1519865] 0f7c: DUP3
[codex:1519865] 0f7d: ADD
[codex:1519865] 0f7e: MSTORE
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing contract storage and access controls**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map with PUSH0
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1519865] 
[codex:1519865] 
[codex:1519865] def disasm(start, end):
[codex:1519865]     i=start
[codex:1519865]     while i < end:
[codex:1519865]         off=i
[codex:1519865]         opcode=code[i]; i+=1
[codex:1519865]         imm=b''
[codex:1519865]         if 0x60<=opcode<=0x7f:
[codex:1519865]             n=opcode-0x5f
[codex:1519865]             imm=code[i:i+n]; i+=n
[codex:1519865]         name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865]         if imm:
[codex:1519865]             print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865]         else:
[codex:1519865]             print(f\"{off:04x}: {name}\")
[codex:1519865] 
[codex:1519865] # disassemble region around fallback
[codex:1519865] print('--- region 0x0160-0x01b5 ---')
[codex:1519865] disasm(0x0160,0x01b5)
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 27ms:
[codex:1519865] --- region 0x0160-0x01b5 ---
[codex:1519865] 0160: PUSH2 0x019c
[codex:1519865] 0163: JUMPI
[codex:1519865] 0164: DUP1
[codex:1519865] 0165: PUSH4 0x07d47d97
[codex:1519865] 016a: EQ
[codex:1519865] 016b: PUSH2 0x01a6
[codex:1519865] 016e: JUMPI
[codex:1519865] 016f: PUSH2 0x017a
[codex:1519865] 0172: JUMP
[codex:1519865] 0173: JUMPDEST
[codex:1519865] 0174: CALLDATASIZE
[codex:1519865] 0175: PUSH2 0x017a
[codex:1519865] 0178: JUMPI
[codex:1519865] 0179: STOP
[codex:1519865] 017a: JUMPDEST
[codex:1519865] 017b: PUSH1 0x40
[codex:1519865] 017d: MLOAD
[codex:1519865] 017e: CALLDATASIZE
[codex:1519865] 017f: PUSH0
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing dispatch jump conditions**
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map with PUSH0
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1519865] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1519865] 
[codex:1519865] def disasm(start, end):
[codex:1519865]     i=start
[codex:1519865]     while i<end:
[codex:1519865]         off=i
[codex:1519865]         opcode=code[i]; i+=1
[codex:1519865]         imm=b''
[codex:1519865]         if 0x60<=opcode<=0x7f:
[codex:1519865]             n=opcode-0x5f
[codex:1519865]             imm=code[i:i+n]; i+=n
[codex:1519865]         name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865]         if imm:
[codex:1519865]             print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865]         else:
[codex:1519865]             print(f\"{off:04x}: {name}\")
[codex:1519865] 
[codex:1519865] print('--- 0x0120-0x0165 ---')
[codex:1519865] disasm(0x0120,0x0165)
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 28ms:
[codex:1519865] --- 0x0120-0x0165 ---
[codex:1519865] 0120: CREATE2
[codex:1519865] 0121: PUSH17 0x721461029b5761017a565b80630b58f97d
[codex:1519865] 0133: GT
[codex:1519865] 0134: PUSH2 0x015d
[codex:1519865] 0137: JUMPI
[codex:1519865] 0138: DUP1
[codex:1519865] 0139: PUSH4 0x0b58f97d
[codex:1519865] 013e: EQ
[codex:1519865] 013f: PUSH2 0x01c5
[codex:1519865] 0142: JUMPI
[codex:1519865] 0143: DUP1
[codex:1519865] 0144: PUSH4 0x13af4035
[codex:1519865] 0149: EQ
[codex:1519865] 014a: PUSH2 0x021a
[codex:1519865] 014d: JUMPI
[codex:1519865] 014e: DUP1
[codex:1519865] 014f: PUSH4 0x1cfed885
[codex:1519865] 0154: EQ
[codex:1519865] 0155: PUSH2 0x0239
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing dispatch and whitelist logic**
[codex:1519865] 
[codex:1519865] I'm examining the bytecode dispatch around 0x0120, noticing misalignment likely caused by starting mid-instruction. The dispatch checks for a zero selector to jump to a fallback handler at 0x019c, which leads to a main execution block at 0x04a5 that uses a mapping-based whitelist. Owner-only functions modify this mapping, and there's a special forwarder at 0x0b3e that authorizes addresses via tx.origin under strict conditions. I'll dig further into 0x0b3e to understand how this whitelist control works.
[codex:1519865] exec
[codex:1519865] /bin/bash -lc "python - <<'PY'
[codex:1519865] import re
[codex:1519865] from pathlib import Path
[codex:1519865] hexdata=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:1519865] code=bytes.fromhex(re.search(r'0x[0-9a-fA-F]+',hexdata).group(0)[2:])
[codex:1519865] # op map with PUSH0
[codex:1519865] op={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1519865] 
[codex:1519865] def disasm(start, count=200):
[codex:1519865]     i=start
[codex:1519865]     out=[]
[codex:1519865]     while i < len(code) and len(out)<count:
[codex:1519865]         off=i
[codex:1519865]         opcode=code[i]; i+=1
[codex:1519865]         imm=b''
[codex:1519865]         if 0x60<=opcode<=0x7f:
[codex:1519865]             n=opcode-0x5f
[codex:1519865]             imm=code[i:i+n]; i+=n
[codex:1519865]         name=op.get(opcode,f'0x{opcode:02x}')
[codex:1519865]         out.append((off,name,imm))
[codex:1519865]     return out
[codex:1519865] 
[codex:1519865] for off,name,imm in disasm(0x0b3e, count=160):
[codex:1519865]     if imm:
[codex:1519865]         print(f\"{off:04x}: {name} 0x{imm.hex()}\")
[codex:1519865]     else:
[codex:1519865]         print(f\"{off:04x}: {name}\")
[codex:1519865] PY" in /tmp/codex-multi-fas47c04 succeeded in 28ms:
[codex:1519865] 0b3e: JUMPDEST
[codex:1519865] 0b3f: PUSH1 0x40
[codex:1519865] 0b41: DUP1
[codex:1519865] 0b42: MLOAD
[codex:1519865] 0b43: DUP1
[codex:1519865] 0b44: DUP3
[codex:1519865] 0b45: ADD
[codex:1519865] 0b46: SWAP1
[codex:1519865] 0b47: SWAP2
[codex:1519865] 0b48: MSTORE
[codex:1519865] 0b49: PUSH1 0x04
[codex:1519865] 0b4b: DUP2
[codex:1519865] 0b4c: MSTORE
[codex:1519865] 0b4d: PUSH32 0x4d30323100000000000000000000000000000000000000000000000000000000
[codex:1519865] 0b6e: PUSH1 0x20
[codex:1519865] 0b70: DUP3
[codex:1519865] 0b71: ADD
[codex:1519865] 0b72: MSTORE
[codex:1519865] 0b73: CALLER
[codex:1519865] 0b74: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:1519865] 
[codex:1519865] thinking
[codex:1519865] **Analyzing potential exploit paths**
[codex:1519865] codex
[codex:1519865] {"no_findings":true,"summary":"Reviewed runtime bytecode in BYTECODE_BUNDLE.txt. External value-moving CALL/DELEGATECALL sites are gated by owner/whitelist checks or DEX callback caller verification (pool address checks), and proxy upgrade slots are only mutable under owner checks. No concrete, attacker-controlled path to extract ETH/tokens/NFTs found from bytecode alone.","findings":[]}
[codex:1519865] tokens used
[codex:1519865] 153,048
[codex:1519865] {"no_findings":true,"summary":"Reviewed runtime bytecode in BYTECODE_BUNDLE.txt. External value-moving CALL/DELEGATECALL sites are gated by owner/whitelist checks or DEX callback caller verification (pool address checks), and proxy upgrade slots are only mutable under owner checks. No concrete, attacker-controlled path to extract ETH/tokens/NFTs found from bytecode alone.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-04T09:45:29.997116+00:00",
        "returncode": 0
    },
    "summary": "Reviewed runtime bytecode in BYTECODE_BUNDLE.txt. External value-moving CALL/DELEGATECALL sites are gated by owner/whitelist checks or DEX callback caller verification (pool address checks), and proxy upgrade slots are only mutable under owner checks. No concrete, attacker-controlled path to extract ETH/tokens/NFTs found from bytecode alone.",
    "raw_final": {
        "summary": "Reviewed runtime bytecode in BYTECODE_BUNDLE.txt. External value-moving CALL/DELEGATECALL sites are gated by owner/whitelist checks or DEX callback caller verification (pool address checks), and proxy upgrade slots are only mutable under owner checks. No concrete, attacker-controlled path to extract ETH/tokens/NFTs found from bytecode alone.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
8
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
11
EXT*/BALANCE
4
Total opcodes
5161
Flags
delegatecall_present
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x0173
0000000c: JUMPI
0000000d: PUSH0
0000000e: CALLDATALOAD
0000000f: PUSH1 0xe0
00000011: SHR
00000012: DUP1
00000013: PUSH4 0x6fefbbc2
00000018: GT
00000019: PUSH2 0x00ca
0000001c: JUMPI
0000001d: DUP1
0000001e: PUSH4 0xc311d049
00000023: GT
00000024: PUSH2 0x007e
00000027: JUMPI
00000028: DUP1
00000029: PUSH4 0xeed2f252
0000002e: GT
0000002f: PUSH2 0x0058
00000032: JUMPI
00000033: DUP1
00000034: PUSH4 0xeed2f252
00000039: EQ
0000003a: PUSH2 0x043b
0000003d: JUMPI
0000003e: DUP1
0000003f: PUSH4 0xf08a0323
00000044: EQ
00000045: PUSH2 0x0467
00000048: JUMPI
00000049: DUP1
0000004a: PUSH4 0xfa461e33
0000004f: EQ
00000050: PUSH2 0x0486
00000053: JUMPI
00000054: PUSH2 0x017a
00000057: JUMP
00000058: JUMPDEST
00000059: DUP1
0000005a: PUSH4 0xc311d049
0000005f: EQ
00000060: PUSH2 0x03de
00000063: JUMPI
00000064: DUP1
00000065: PUSH4 0xd0ebdbe7
0000006a: EQ
0000006b: PUSH2 0x03fd
0000006e: JUMPI
0000006f: DUP1
00000070: PUSH4 0xd34628cc
00000075: EQ
00000076: PUSH2 0x041c
00000079: JUMPI
0000007a: PUSH2 0x017a
0000007d: JUMP
0000007e: JUMPDEST
0000007f: DUP1
00000080: PUSH4 0x9e281a98
00000085: GT
00000086: PUSH2 0x00af
00000089: JUMPI
0000008a: DUP1
0000008b: PUSH4 0x9e281a98
00000090: EQ
00000091: PUSH2 0x0362
00000094: JUMPI
00000095: DUP1
00000096: PUSH4 0xbdb25d0e
0000009b: EQ
0000009c: PUSH2 0x0381
0000009f: JUMPI
000000a0: DUP1
000000a1: PUSH4 0xbfd79284
000000a6: EQ
000000a7: PUSH2 0x03a0
000000aa: JUMPI
000000ab: PUSH2 0x017a
000000ae: JUMP
000000af: JUMPDEST
000000b0: DUP1
000000b1: PUSH4 0x6fefbbc2
000000b6: EQ
000000b7: PUSH2 0x0324
000000ba: JUMPI
000000bb: DUP1
000000bc: PUSH4 0x7580a1bc
000000c1: EQ
000000c2: PUSH2 0x0343
000000c5: JUMPI
000000c6: PUSH2 0x017a
000000c9: JUMP
000000ca: JUMPDEST
000000cb: DUP1
000000cc: PUSH4 0x23a69e75
000000d1: GT
000000d2: PUSH2 0x012c
000000d5: JUMPI
000000d6: DUP1
000000d7: PUSH4 0x481c6a75
000000dc: GT
000000dd: PUSH2 0x0106
000000e0: JUMPI
000000e1: DUP1
000000e2: PUSH4 0x481c6a75
000000e7: EQ
000000e8: PUSH2 0x02ba
000000eb: JUMPI
000000ec: DUP1
000000ed: PUSH4 0x51b9b0fa
000000f2: EQ
000000f3: PUSH2 0x02e6
000000f6: JUMPI
000000f7: DUP1
000000f8: PUSH4 0x6c3bbfd7
000000fd: EQ
000000fe: PUSH2 0x0305
00000101: JUMPI
00000102: PUSH2 0x017a
00000105: JUMP
00000106: JUMPDEST
00000107: DUP1
00000108: PUSH4 0x23a69e75
0000010d: EQ
0000010e: PUSH2 0x025d
00000111: JUMPI
00000112: DUP1
00000113: PUSH4 0x2c8958f6
00000118: EQ
00000119: PUSH2 0x027c
0000011c: JUMPI
0000011d: DUP1
0000011e: PUSH4 0x31f57072
00000123: EQ
00000124: PUSH2 0x029b
00000127: JUMPI
00000128: PUSH2 0x017a
0000012b: JUMP
0000012c: JUMPDEST
0000012d: DUP1
0000012e: PUSH4 0x0b58f97d
00000133: GT
00000134: PUSH2 0x015d
00000137: JUMPI
00000138: DUP1
00000139: PUSH4 0x0b58f97d
0000013e: EQ
0000013f: PUSH2 0x01c5
00000142: JUMPI
00000143: DUP1
00000144: PUSH4 0x13af4035
00000149: EQ
0000014a: PUSH2 0x021a
0000014d: JUMPI
0000014e: DUP1
0000014f: PUSH4 0x1cfed885
00000154: EQ
00000155: PUSH2 0x0239
00000158: JUMPI
00000159: PUSH2 0x017a
0000015c: JUMP
0000015d: JUMPDEST
0000015e: DUP1
0000015f: ISZERO
00000160: PUSH2 0x019c
00000163: JUMPI
00000164: DUP1
00000165: PUSH4 0x07d47d97
0000016a: EQ
0000016b: PUSH2 0x01a6
0000016e: JUMPI
0000016f: PUSH2 0x017a
00000172: JUMP
00000173: JUMPDEST
00000174: CALLDATASIZE
00000175: PUSH2 0x017a
00000178: JUMPI
00000179: STOP
0000017a: JUMPDEST
0000017b: PUSH1 0x40
0000017d: MLOAD
0000017e: CALLDATASIZE
0000017f: PUSH0
00000180: DUP3
00000181: CALLDATACOPY
00000182: PUSH0
00000183: PUSH0
00000184: CALLDATASIZE
00000185: DUP4
00000186: PUSH1 0x02
00000188: SLOAD
00000189: GAS
0000018a: DELEGATECALL
0000018b: RETURNDATASIZE
0000018c: PUSH0
0000018d: DUP4
0000018e: RETURNDATACOPY
0000018f: DUP1
00000190: PUSH2 0x0197
00000193: JUMPI
00000194: RETURNDATASIZE
00000195: DUP3
00000196: REVERT
00000197: JUMPDEST
00000198: POP
00000199: RETURNDATASIZE
0000019a: DUP2
0000019b: RETURN
0000019c: JUMPDEST
0000019d: PUSH2 0x01a4
000001a0: PUSH2 0x04a5
000001a3: JUMP
000001a4: JUMPDEST
000001a5: STOP
000001a6: JUMPDEST
000001a7: CALLVALUE
000001a8: DUP1
000001a9: ISZERO
000001aa: PUSH2 0x01b1
000001ad: JUMPI
000001ae: PUSH0
000001af: PUSH0
000001b0: REVERT
000001b1: JUMPDEST
000001b2: POP
000001b3: PUSH2 0x01a4
000001b6: PUSH2 0x01c0
000001b9: CALLDATASIZE
000001ba: PUSH1 0x04
000001bc: PUSH2 0x26eb
000001bf: JUMP
000001c0: JUMPDEST
000001c1: PUSH2 0x0827
000001c4: JUMP
000001c5: JUMPDEST
000001c6: CALLVALUE
000001c7: DUP1
000001c8: ISZERO
000001c9: PUSH2 0x01d0
000001cc: JUMPI
000001cd: PUSH0
000001ce: PUSH0
000001cf: REVERT
000001d0: JUMPDEST
000001d1: POP
000001d2: PUSH0
000001d3: SLOAD
000001d4: PUSH2 0x01f0
000001d7: SWAP1
000001d8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000001ed: AND
000001ee: DUP2
000001ef: JUMP
000001f0: JUMPDEST
000001f1: PUSH1 0x40
000001f3: MLOAD
000001f4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000209: SWAP1
0000020a: SWAP2
0000020b: AND
0000020c: DUP2
0000020d: MSTORE
0000020e: PUSH1 0x20
00000210: ADD
00000211: JUMPDEST
00000212: PUSH1 0x40
00000214: MLOAD
00000215: DUP1
00000216: SWAP2
00000217: SUB
00000218: SWAP1
00000219: RETURN
0000021a: JUMPDEST
0000021b: CALLVALUE
0000021c: DUP1
0000021d: ISZERO
0000021e: PUSH2 0x0225
00000221: JUMPI
00000222: PUSH0
00000223: PUSH0
00000224: REVERT
00000225: JUMPDEST
00000226: POP
00000227: PUSH2 0x01a4
0000022a: PUSH2 0x0234
0000022d: CALLDATASIZE
0000022e: PUSH1 0x04
00000230: PUSH2 0x274d
00000233: JUMP
00000234: JUMPDEST
00000235: PUSH2 0x08f0
00000238: JUMP
00000239: JUMPDEST
0000023a: CALLVALUE
0000023b: DUP1
0000023c: ISZERO
0000023d: PUSH2 0x0244
00000240: JUMPI
00000241: PUSH0
00000242: PUSH0
00000243: REVERT
00000244: JUMPDEST
00000245: POP
00000246: PUSH2 0x01f0
00000249: PUSH2 0x0253
0000024c: CALLDATASIZE
0000024d: PUSH1 0x04
0000024f: PUSH2 0x2776
00000252: JUMP
00000253: JUMPDEST
00000254: PUSH4 0xdeadbeef
00000259: ADD
0000025a: SLOAD
0000025b: SWAP1
0000025c: JUMP
0000025d: JUMPDEST
0000025e: CALLVALUE
0000025f: DUP1
00000260: ISZERO
00000261: PUSH2 0x0268
00000264: JUMPI
00000265: PUSH0
00000266: PUSH0
00000267: REVERT
00000268: JUMPDEST
00000269: POP
0000026a: PUSH2 0x01a4
0000026d: PUSH2 0x0277
00000270: CALLDATASIZE
00000271: PUSH1 0x04
00000273: PUSH2 0x278f
00000276: JUMP
00000277: JUMPDEST
00000278: PUSH2 0x09bd
0000027b: JUMP
0000027c: JUMPDEST
0000027d: CALLVALUE
0000027e: DUP1
0000027f: ISZERO
00000280: PUSH2 0x0287
00000283: JUMPI
00000284: PUSH0
00000285: PUSH0
00000286: REVERT
00000287: JUMPDEST
00000288: POP
00000289: PUSH2 0x01a4
0000028c: PUSH2 0x0296
0000028f: CALLDATASIZE
00000290: PUSH1 0x04
00000292: PUSH2 0x278f
00000295: JUMP
00000296: JUMPDEST
00000297: PUSH2 0x0a13
0000029a: JUMP
0000029b: JUMPDEST
0000029c: CALLVALUE
0000029d: DUP1
0000029e: ISZERO
0000029f: PUSH2 0x02a6
000002a2: JUMPI
000002a3: PUSH0
000002a4: PUSH0
000002a5: REVERT
000002a6: JUMPDEST
000002a7: POP
000002a8: PUSH2 0x01a4
000002ab: PUSH2 0x02b5
000002ae: CALLDATASIZE
000002af: PUSH1 0x04
000002b1: PUSH2 0x280b
000002b4: JUMP
000002b5: JUMPDEST
000002b6: PUSH2 0x0b3e
000002b9: JUMP
000002ba: JUMPDEST
000002bb: CALLVALUE
000002bc: DUP1
000002bd: ISZERO
000002be: PUSH2 0x02c5
000002c1: JUMPI
000002c2: PUSH0
000002c3: PUSH0
000002c4: REVERT
000002c5: JUMPDEST
000002c6: POP
000002c7: PUSH1 0x01
000002c9: SLOAD
000002ca: PUSH2 0x01f0
000002cd: SWAP1
000002ce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000002e3: AND
000002e4: DUP2
000002e5: JUMP
000002e6: JUMPDEST
000002e7: CALLVALUE
000002e8: DUP1
000002e9: ISZERO
000002ea: PUSH2 0x02f1
000002ed: JUMPI
000002ee: PUSH0
000002ef: PUSH0
000002f0: REVERT
000002f1: JUMPDEST
000002f2: POP
000002f3: PUSH2 0x01a4
000002f6: PUSH2 0x0300
000002f9: CALLDATASIZE
000002fa: PUSH1 0x04
000002fc: PUSH2 0x2946
000002ff: JUMP
00000300: JUMPDEST
00000301: PUSH2 0x0c95
00000304: JUMP
00000305: JUMPDEST
00000306: CALLVALUE
00000307: DUP1
00000308: ISZERO
00000309: PUSH2 0x0310
0000030c: JUMPI
0000030d: PUSH0
0000030e: PUSH0
0000030f: REVERT
00000310: JUMPDEST
00000311: POP
00000312: PUSH2 0x01a4
00000315: PUSH2 0x031f
00000318: CALLDATASIZE
00000319: PUSH1 0x04
0000031b: PUSH2 0x29a6
0000031e: JUMP
0000031f: JUMPDEST
00000320: PUSH2 0x0e2c
00000323: JUMP
00000324: JUMPDEST
00000325: CALLVALUE
00000326: DUP1
00000327: ISZERO
00000328: PUSH2 0x032f
0000032b: JUMPI
0000032c: PUSH0
0000032d: PUSH0
0000032e: REVERT
0000032f: JUMPDEST
00000330: POP
00000331: PUSH2 0x01a4
00000334: PUSH2 0x033e
00000337: CALLDATASIZE
00000338: PUSH1 0x04
0000033a: PUSH2 0x29d9
0000033d: JUMP
0000033e: JUMPDEST
0000033f: PUSH2 0x0f47
00000342: JUMP
00000343: JUMPDEST
00000344: CALLVALUE
00000345: DUP1
00000346: ISZERO
00000347: PUSH2 0x034e
0000034a: JUMPI
0000034b: PUSH0
0000034c: PUSH0
0000034d: REVERT
0000034e: JUMPDEST
0000034f: POP
00000350: PUSH2 0x01a4
00000353: PUSH2 0x035d
00000356: CALLDATASIZE
00000357: PUSH1 0x04
00000359: PUSH2 0x29f0
0000035c: JUMP
0000035d: JUMPDEST
0000035e: PUSH2 0x10a3
00000361: JUMP
00000362: JUMPDEST
00000363: CALLVALUE
00000364: DUP1
00000365: ISZERO
00000366: PUSH2 0x036d
00000369: JUMPI
0000036a: PUSH0
0000036b: PUSH0
0000036c: REVERT
0000036d: JUMPDEST
0000036e: POP
0000036f: PUSH2 0x01a4
00000372: PUSH2 0x037c
00000375: CALLDATASIZE
00000376: PUSH1 0x04
00000378: PUSH2 0x2a21
0000037b: JUMP
0000037c: JUMPDEST
0000037d: PUSH2 0x1135
00000380: JUMP
00000381: JUMPDEST
00000382: CALLVALUE
00000383: DUP1
00000384: ISZERO
00000385: PUSH2 0x038c
00000388: JUMPI
00000389: PUSH0
0000038a: PUSH0
0000038b: REVERT
0000038c: JUMPDEST
0000038d: POP
0000038e: PUSH2 0x01a4
00000391: PUSH2 0x039b
00000394: CALLDATASIZE
00000395: PUSH1 0x04
00000397: PUSH2 0x2946
0000039a: JUMP
0000039b: JUMPDEST
0000039c: PUSH2 0x11dd
0000039f: JUMP
000003a0: JUMPDEST
000003a1: CALLVALUE
000003a2: DUP1
000003a3: ISZERO
000003a4: PUSH2 0x03ab
000003a7: JUMPI
000003a8: PUSH0
000003a9: PUSH0
000003aa: REVERT
000003ab: JUMPDEST
000003ac: POP
000003ad: PUSH2 0x03ce
000003b0: PUSH2 0x03ba
000003b3: CALLDATASIZE
000003b4: PUSH1 0x04
000003b6: PUSH2 0x274d
000003b9: JUMP
000003ba: JUMPDEST
000003bb: PUSH1 0x03
000003bd: PUSH1 0x20
000003bf: MSTORE
000003c0: PUSH0
000003c1: SWAP1
000003c2: DUP2
000003c3: MSTORE
000003c4: PUSH1 0x40
000003c6: SWAP1
000003c7: KECCAK256
000003c8: SLOAD
000003c9: PUSH1 0xff
000003cb: AND
000003cc: DUP2
000003cd: JUMP
000003ce: JUMPDEST
000003cf: PUSH1 0x40
000003d1: MLOAD
000003d2: SWAP1
000003d3: ISZERO
000003d4: ISZERO
000003d5: DUP2
000003d6: MSTORE
000003d7: PUSH1 0x20
000003d9: ADD
000003da: PUSH2 0x0211
000003dd: JUMP
000003de: JUMPDEST
000003df: CALLVALUE
000003e0: DUP1
000003e1: ISZERO
000003e2: PUSH2 0x03e9
000003e5: JUMPI
000003e6: PUSH0
000003e7: PUSH0
000003e8: REVERT
000003e9: JUMPDEST
000003ea: POP
000003eb: PUSH2 0x01a4
000003ee: PUSH2 0x03f8
000003f1: CALLDATASIZE
000003f2: PUSH1 0x04
000003f4: PUSH2 0x29d9
000003f7: JUMP
000003f8: JUMPDEST
000003f9: PUSH2 0x135f
000003fc: JUMP
000003fd: JUMPDEST
000003fe: CALLVALUE
000003ff: DUP1
00000400: ISZERO
00000401: PUSH2 0x0408
00000404: JUMPI
00000405: PUSH0
00000406: PUSH0
00000407: REVERT
00000408: JUMPDEST
00000409: POP
0000040a: PUSH2 0x01a4
0000040d: PUSH2 0x0417
00000410: CALLDATASIZE
00000411: PUSH1 0x04
00000413: PUSH2 0x274d
00000416: JUMP
00000417: JUMPDEST
00000418: PUSH2 0x1407
0000041b: JUMP
0000041c: JUMPDEST
0000041d: CALLVALUE
0000041e: DUP1
0000041f: ISZERO
00000420: PUSH2 0x0427
00000423: JUMPI
00000424: PUSH0
00000425: PUSH0
00000426: REVERT
00000427: JUMPDEST
00000428: POP
00000429: PUSH2 0x01a4
0000042c: PUSH2 0x0436
0000042f: CALLDATASIZE
00000430: PUSH1 0x04
00000432: PUSH2 0x29a6
00000435: JUMP
00000436: JUMPDEST
00000437: PUSH2 0x14d5
0000043a: JUMP
0000043b: JUMPDEST
0000043c: CALLVALUE
0000043d: DUP1
0000043e: ISZERO
0000043f: PUSH2 0x0446
00000442: JUMPI
00000443: PUSH0
00000444: PUSH0
00000445: REVERT
00000446: JUMPDEST
00000447: POP
00000448: PUSH1 0x02
0000044a: SLOAD
0000044b: PUSH2 0x01f0
0000044e: SWAP1
0000044f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000464: AND
00000465: DUP2
00000466: JUMP
00000467: JUMPDEST
00000468: CALLVALUE
00000469: DUP1
0000046a: ISZERO
0000046b: PUSH2 0x0472
0000046e: JUMPI
0000046f: PUSH0
00000470: PUSH0
00000471: REVERT
00000472: JUMPDEST
00000473: POP
00000474: PUSH2 0x01a4
00000477: PUSH2 0x0481
0000047a: CALLDATASIZE
0000047b: PUSH1 0x04
0000047d: PUSH2 0x274d
00000480: JUMP
00000481: JUMPDEST
00000482: PUSH2 0x15ec
00000485: JUMP
00000486: JUMPDEST
00000487: CALLVALUE
00000488: DUP1
00000489: ISZERO
0000048a: PUSH2 0x0491
0000048d: JUMPI
0000048e: PUSH0
0000048f: PUSH0
00000490: REVERT
00000491: JUMPDEST
00000492: POP
00000493: PUSH2 0x01a4
00000496: PUSH2 0x04a0
00000499: CALLDATASIZE
0000049a: PUSH1 0x04
0000049c: PUSH2 0x278f
0000049f: JUMP
000004a0: JUMPDEST
000004a1: PUSH2 0x16ba
000004a4: JUMP
000004a5: JUMPDEST
000004a6: CALLER
000004a7: PUSH0
000004a8: SWAP1
000004a9: DUP2
000004aa: MSTORE
000004ab: PUSH1 0x03
000004ad: PUSH1 0x20
000004af: SWAP1
000004b0: DUP2
000004b1: MSTORE
000004b2: PUSH1 0x40
000004b4: SWAP2
000004b5: DUP3
000004b6: SWAP1
000004b7: KECCAK256
000004b8: SLOAD
000004b9: DUP3
000004ba: MLOAD
000004bb: DUP1
000004bc: DUP5
000004bd: ADD
000004be: SWAP1
000004bf: SWAP4
000004c0: MSTORE
000004c1: PUSH1 0x04
000004c3: DUP4
000004c4: MSTORE
000004c5: PUSH32 0x4d30303200000000000000000000000000000000000000000000000000000000
000004e6: SWAP2
000004e7: DUP4
000004e8: ADD
000004e9: SWAP2
000004ea: SWAP1
000004eb: SWAP2
000004ec: MSTORE
000004ed: PUSH1 0xff
000004ef: AND
000004f0: PUSH2 0x052f
000004f3: JUMPI
000004f4: PUSH1 0x40
000004f6: MLOAD
000004f7: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000518: DUP2
00000519: MSTORE
0000051a: PUSH1 0x04
0000051c: ADD
0000051d: PUSH2 0x0526
00000520: SWAP2
00000521: SWAP1
00000522: PUSH2 0x2a95
00000525: JUMP
00000526: JUMPDEST
00000527: PUSH1 0x40
00000529: MLOAD
0000052a: DUP1
0000052b: SWAP2
0000052c: SUB
0000052d: SWAP1
0000052e: REVERT
0000052f: JUMPDEST
00000530: POP
00000531: PUSH1 0x05
00000533: CALLDATALOAD
00000534: PUSH1 0x60
00000536: SHR
00000537: PUSH1 0x19
00000539: CALLDATALOAD
0000053a: PUSH1 0x39
0000053c: CALLDATALOAD
0000053d: PUSH1 0x59
0000053f: CALLDATALOAD
00000540: PUSH1 0xf8
00000542: SWAP1
00000543: DUP2
00000544: SHR
00000545: SWAP1
00000546: PUSH1 0x04
00000548: CALLDATALOAD
00000549: SWAP1
0000054a: SHR
0000054b: PUSH0
0000054c: DUP1
0000054d: DUP1
0000054e: DUP5
0000054f: PUSH2 0x056c
00000552: JUMPI
00000553: PUSH1 0x5a
00000555: CALLDATALOAD
00000556: PUSH1 0xf8
00000558: SHR
00000559: SWAP3
0000055a: POP
0000055b: PUSH1 0x5b
0000055d: CALLDATALOAD
0000055e: SWAP2
0000055f: POP
00000560: PUSH1 0x7b
00000562: CALLDATALOAD
00000563: PUSH1 0xf8
00000565: SHR
00000566: SWAP1
00000567: POP
00000568: PUSH2 0x0582
0000056b: JUMP
0000056c: JUMPDEST
0000056d: PUSH1 0x5a
0000056f: CALLDATALOAD
00000570: PUSH1 0xf8
00000572: SHR
00000573: SWAP3
00000574: POP
00000575: PUSH1 0x5b
00000577: CALLDATALOAD
00000578: SWAP2
00000579: POP
0000057a: PUSH1 0x9b
0000057c: CALLDATALOAD
0000057d: PUSH1 0xf8
0000057f: SHR
00000580: SWAP1
00000581: POP
00000582: JUMPDEST
00000583: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000
000005a4: PUSH0
000005a5: SWAP1
000005a6: DUP2
000005a7: MSTORE
000005a8: ADDRESS
000005a9: PUSH1 0x04
000005ab: MSTORE
000005ac: SELFBALANCE
000005ad: SWAP1
000005ae: PUSH1 0x20
000005b0: DUP2
000005b1: PUSH1 0x24
000005b3: DUP2
000005b4: DUP14
000005b5: GAS
000005b6: STATICCALL
000005b7: PUSH2 0x05c2
000005ba: JUMPI
000005bb: RETURNDATASIZE
000005bc: PUSH0
000005bd: PUSH0
000005be: RETURNDATACOPY
000005bf: RETURNDATASIZE
000005c0: PUSH0
000005c1: REVERT
000005c2: JUMPDEST
000005c3: POP
000005c4: PUSH0
000005c5: DUP1
000005c6: MLOAD
000005c7: SWAP1
000005c8: PUSH1 0x01
000005ca: DUP8
000005cb: PUSH1 0x02
000005cd: DUP2
000005ce: GT
000005cf: ISZERO
000005d0: PUSH2 0x05db
000005d3: JUMPI
000005d4: PUSH2 0x05db
000005d7: PUSH2 0x2aa7
000005da: JUMP
000005db: JUMPDEST
000005dc: SUB
000005dd: PUSH2 0x05f2
000005e0: JUMPI
000005e1: PUSH2 0x05eb
000005e4: DUP9
000005e5: DUP13
000005e6: DUP13
000005e7: PUSH2 0x17d0
000005ea: JUMP
000005eb: JUMPDEST
000005ec: SWAP1
000005ed: POP
000005ee: PUSH2 0x0676
000005f1: JUMP
000005f2: JUMPDEST
000005f3: PUSH1 0x02
000005f5: DUP8
000005f6: PUSH1 0x02
000005f8: DUP2
000005f9: GT
000005fa: ISZERO
000005fb: PUSH2 0x0606
000005fe: JUMPI
000005ff: PUSH2 0x0606
00000602: PUSH2 0x2aa7
00000605: JUMP
00000606: JUMPDEST
00000607: SUB
00000608: PUSH2 0x0614
0000060b: JUMPI
0000060c: PUSH2 0x05eb
0000060f: DUP9
00000610: PUSH2 0x18bc
00000613: JUMP
00000614: JUMPDEST
00000615: PUSH1 0x40
00000617: MLOAD
00000618: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000639: DUP2
0000063a: MSTORE
0000063b: PUSH1 0x20
0000063d: PUSH1 0x04
0000063f: DUP3
00000640: ADD
00000641: MSTORE
00000642: PUSH1 0x16
00000644: PUSH1 0x24
00000646: DUP3
00000647: ADD
00000648: MSTORE
00000649: PUSH32 0x696e76616c696420666c617368457865637574696f6e00000000000000000000
0000066a: PUSH1 0x44
0000066c: DUP3
0000066d: ADD
0000066e: MSTORE
0000066f: PUSH1 0x64
00000671: ADD
00000672: PUSH2 0x0526
00000675: JUMP
00000676: JUMPDEST
00000677: DUP1
00000678: PUSH2 0x0688
0000067b: JUMPI
0000067c: POP
0000067d: POP
0000067e: POP
0000067f: POP
00000680: POP
00000681: POP
00000682: POP
00000683: POP
00000684: POP
00000685: POP
00000686: POP
00000687: JUMP
00000688: JUMPDEST
00000689: PUSH0
0000068a: DUP7
0000068b: PUSH1 0x05
0000068d: DUP2
0000068e: GT
0000068f: ISZERO
00000690: PUSH2 0x069b
00000693: JUMPI
00000694: PUSH2 0x069b
00000697: PUSH2 0x2aa7
0000069a: JUMP
0000069b: JUMPDEST
0000069c: EQ
0000069d: ISZERO
0000069e: DUP1
0000069f: ISZERO
000006a0: PUSH2 0x06a8
000006a3: JUMPI
000006a4: POP
000006a5: PUSH0
000006a6: DUP6
000006a7: GT
000006a8: JUMPDEST
000006a9: ISZERO
000006aa: PUSH2 0x0739
000006ad: JUMPI
000006ae: PUSH0
000006af: PUSH2 0x06b9
000006b2: DUP8
000006b3: DUP8
000006b4: DUP8
000006b5: PUSH2 0x18e0
000006b8: JUMP
000006b9: JUMPDEST
000006ba: POP
000006bb: SWAP1
000006bc: POP
000006bd: DUP4
000006be: PUSH5 0xe8d4a51000
000006c4: DUP3
000006c5: SELFBALANCE
000006c6: ADD
000006c7: ADD
000006c8: GT
000006c9: PUSH1 0x40
000006cb: MLOAD
000006cc: DUP1
000006cd: PUSH1 0x40
000006cf: ADD
000006d0: PUSH1 0x40
000006d2: MSTORE
000006d3: DUP1
000006d4: PUSH1 0x04
000006d6: DUP2
000006d7: MSTORE
000006d8: PUSH1 0x20
000006da: ADD
000006db: PUSH32 0x4d30313800000000000000000000000000000000000000000000000000000000
000006fc: DUP2
000006fd: MSTORE
000006fe: POP
000006ff: SWAP1
00000700: PUSH2 0x0736
00000703: JUMPI
00000704: PUSH1 0x40
00000706: MLOAD
00000707: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000728: DUP2
00000729: MSTORE
0000072a: PUSH1 0x04
0000072c: ADD
0000072d: PUSH2 0x0526
00000730: SWAP2
00000731: SWAP1
00000732: PUSH2 0x2a95
00000735: JUMP
00000736: JUMPDEST
00000737: POP
00000738: POP
00000739: JUMPDEST
0000073a: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000
0000075b: PUSH0
0000075c: SWAP1
0000075d: DUP2
0000075e: MSTORE
0000075f: ADDRESS
00000760: PUSH1 0x04
00000762: MSTORE
00000763: PUSH1 0x20
00000765: DUP2
00000766: PUSH1 0x24
00000768: DUP2
00000769: DUP16
0000076a: GAS
0000076b: STATICCALL
0000076c: PUSH2 0x0777
0000076f: JUMPI
00000770: RETURNDATASIZE
00000771: PUSH0
00000772: PUSH0
00000773: RETURNDATACOPY
00000774: RETURNDATASIZE
00000775: PUSH0
00000776: REVERT
00000777: JUMPDEST
00000778: POP
00000779: PUSH0
0000077a: MLOAD
0000077b: PUSH1 0x40
0000077d: DUP1
0000077e: MLOAD
0000077f: DUP1
00000780: DUP3
00000781: ADD
00000782: SWAP1
00000783: SWAP2
00000784: MSTORE
00000785: PUSH1 0x04
00000787: DUP2
00000788: MSTORE
00000789: PUSH32 0x4d30313400000000000000000000000000000000000000000000000000000000
000007aa: PUSH1 0x20
000007ac: DUP3
000007ad: ADD
000007ae: MSTORE
000007af: DUP4
000007b0: DUP3
000007b1: GT
000007b2: PUSH2 0x07e8
000007b5: JUMPI
000007b6: PUSH1 0x40
000007b8: MLOAD
000007b9: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000007da: DUP2
000007db: MSTORE
000007dc: PUSH1 0x04
000007de: ADD
000007df: PUSH2 0x0526
000007e2: SWAP2
000007e3: SWAP1
000007e4: PUSH2 0x2a95
000007e7: JUMP
000007e8: JUMPDEST
000007e9: POP
000007ea: DUP10
000007eb: DUP2
000007ec: GT
000007ed: ISZERO
000007ee: PUSH2 0x0819
000007f1: JUMPI
000007f2: PUSH0
000007f3: SLOAD
000007f4: PUSH2 0x0819
000007f7: SWAP1
000007f8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000080d: DUP15
0000080e: DUP2
0000080f: AND
00000810: SWAP2
00000811: AND
00000812: DUP13
00000813: DUP5
00000814: SUB
00000815: PUSH2 0x1b70
00000818: JUMP
00000819: JUMPDEST
0000081a: POP
0000081b: POP
0000081c: POP
0000081d: POP
0000081e: POP
0000081f: POP
00000820: POP
00000821: POP
00000822: POP
00000823: POP
00000824: POP
00000825: POP
00000826: JUMP
00000827: JUMPDEST
00000828: PUSH0
00000829: SLOAD
0000082a: PUSH1 0x40
0000082c: DUP1
0000082d: MLOAD
0000082e: DUP1
0000082f: DUP3
00000830: ADD
00000831: SWAP1
00000832: SWAP2
00000833: MSTORE
00000834: PUSH1 0x04
00000836: DUP2
00000837: MSTORE
00000838: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000
00000859: PUSH1 0x20
0000085b: DUP3
0000085c: ADD
0000085d: MSTORE
0000085e: SWAP1
0000085f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000874: AND
00000875: CALLER
00000876: EQ
00000877: PUSH2 0x08ad
0000087a: JUMPI
0000087b: PUSH1 0x40
0000087d: MLOAD
0000087e: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000089f: DUP2
000008a0: MSTORE
000008a1: PUSH1 0x04
000008a3: ADD
000008a4: PUSH2 0x0526
000008a7: SWAP2
000008a8: SWAP1
000008a9: PUSH2 0x2a95
000008ac: JUMP
000008ad: JUMPDEST
000008ae: POP
000008af: PUSH2 0x08ec
000008b2: DUP3
000008b3: DUP3
000008b4: DUP1
000008b5: DUP1
000008b6: PUSH1 0x1f
000008b8: ADD
000008b9: PUSH1 0x20
000008bb: DUP1
000008bc: SWAP2
000008bd: DIV
000008be: MUL
000008bf: PUSH1 0x20
000008c1: ADD
000008c2: PUSH1 0x40
000008c4: MLOAD
000008c5: SWAP1
000008c6: DUP2
000008c7: ADD
000008c8: PUSH1 0x40
000008ca: MSTORE
000008cb: DUP1
000008cc: SWAP4
000008cd: SWAP3
000008ce: SWAP2
000008cf: SWAP1
000008d0: DUP2
000008d1: DUP2
000008d2: MSTORE
000008d3: PUSH1 0x20
000008d5: ADD
000008d6: DUP4
000008d7: DUP4
000008d8: DUP1
000008d9: DUP3
000008da: DUP5
000008db: CALLDATACOPY
000008dc: PUSH0
000008dd: SWAP3
000008de: ADD
000008df: SWAP2
000008e0: SWAP1
000008e1: SWAP2
000008e2: MSTORE
000008e3: POP
000008e4: PUSH2 0x1bf1
000008e7: SWAP3
000008e8: POP
000008e9: POP
000008ea: POP
000008eb: JUMP
000008ec: JUMPDEST
000008ed: POP
000008ee: POP
000008ef: JUMP
000008f0: JUMPDEST
000008f1: PUSH0
000008f2: SLOAD
000008f3: PUSH1 0x40
000008f5: DUP1
000008f6: MLOAD
000008f7: DUP1
000008f8: DUP3
000008f9: ADD
000008fa: SWAP1
000008fb: SWAP2
000008fc: MSTORE
000008fd: PUSH1 0x04
000008ff: DUP2
00000900: MSTORE
00000901: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000
00000922: PUSH1 0x20
00000924: DUP3
00000925: ADD
00000926: MSTORE
00000927: SWAP1
00000928: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000093d: AND
0000093e: CALLER
0000093f: EQ
00000940: PUSH2 0x0976
00000943: JUMPI
00000944: PUSH1 0x40
00000946: MLOAD
00000947: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000968: DUP2
00000969: MSTORE
0000096a: PUSH1 0x04
0000096c: ADD
0000096d: PUSH2 0x0526
00000970: SWAP2
00000971: SWAP1
00000972: PUSH2 0x2a95
00000975: JUMP
00000976: JUMPDEST
00000977: POP
00000978: PUSH0
00000979: DUP1
0000097a: SLOAD
0000097b: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
0000099c: AND
0000099d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000009b2: SWAP3
000009b3: SWAP1
000009b4: SWAP3
000009b5: AND
000009b6: SWAP2
000009b7: SWAP1
000009b8: SWAP2
000009b9: OR
000009ba: SWAP1
000009bb: SSTORE
000009bc: JUMP
000009bd: JUMPDEST
000009be: PUSH2 0x0a0d
000009c1: DUP5
000009c2: DUP5
000009c3: DUP5
000009c4: DUP5
000009c5: PUSH32 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2
000009e6: PUSH32 0x00000000000000000000000041ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c9
00000a07: PUSH1 0x60
00000a09: PUSH2 0x1c84
00000a0c: JUMP
00000a0d: JUMPDEST
00000a0e: POP
00000a0f: POP
00000a10: POP
00000a11: POP
00000a12: JUMP
00000a13: JUMPDEST
00000a14: PUSH1 0x2b
00000a16: DUP3
00000a17: ADD
00000a18: CALLDATALOAD
00000a19: PUSH1 0xf8
00000a1b: SHR
00000a1c: PUSH1 0x02
00000a1e: DUP2
00000a1f: SWAP1
00000a20: SUB
00000a21: PUSH2 0x0a79
00000a24: JUMPI
00000a25: PUSH2 0x0a74
00000a28: DUP6
00000a29: DUP6
00000a2a: DUP6
00000a2b: DUP6
00000a2c: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
00000a4d: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
00000a6e: PUSH1 0x40
00000a70: PUSH2 0x1c84
00000a73: JUMP
00000a74: JUMPDEST
00000a75: PUSH2 0x0b37
00000a78: JUMP
00000a79: JUMPDEST
00000a7a: DUP1
00000a7b: PUSH1 0xff
00000a7d: AND
00000a7e: PUSH1 0x05
00000a80: SUB
00000a81: PUSH2 0x0ad4
00000a84: JUMPI
00000a85: PUSH2 0x0a74
00000a88: DUP6
00000a89: DUP6
00000a8a: DUP6
00000a8b: DUP6
00000a8c: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
00000aad: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
00000ace: PUSH1 0x40
00000ad0: PUSH2 0x1c84
00000ad3: JUMP
00000ad4: JUMPDEST
00000ad5: PUSH1 0x40
00000ad7: DUP1
00000ad8: MLOAD
00000ad9: DUP1
00000ada: DUP3
00000adb: ADD
00000adc: DUP3
00000add: MSTORE
00000ade: PUSH1 0x04
00000ae0: DUP1
00000ae1: DUP3
00000ae2: MSTORE
00000ae3: PUSH32 0x4d30323200000000000000000000000000000000000000000000000000000000
00000b04: PUSH1 0x20
00000b06: DUP4
00000b07: ADD
00000b08: MSTORE
00000b09: SWAP2
00000b0a: MLOAD
00000b0b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000b2c: DUP2
00000b2d: MSTORE
00000b2e: PUSH2 0x0526
00000b31: SWAP3
00000b32: ADD
00000b33: PUSH2 0x2a95
00000b36: JUMP
00000b37: JUMPDEST
00000b38: POP
00000b39: POP
00000b3a: POP
00000b3b: POP
00000b3c: POP
00000b3d: JUMP
00000b3e: JUMPDEST
00000b3f: PUSH1 0x40
00000b41: DUP1
00000b42: MLOAD
00000b43: DUP1
00000b44: DUP3
00000b45: ADD
00000b46: SWAP1
00000b47: SWAP2
00000b48: MSTORE
00000b49: PUSH1 0x04
00000b4b: DUP2
00000b4c: MSTORE
00000b4d: PUSH32 0x4d30323100000000000000000000000000000000000000000000000000000000
00000b6e: PUSH1 0x20
00000b70: DUP3
00000b71: ADD
00000b72: MSTORE
00000b73: CALLER
00000b74: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000b89: PUSH32 0x000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb
00000baa: AND
00000bab: EQ
00000bac: PUSH2 0x0be2
00000baf: JUMPI
00000bb0: PUSH1 0x40
00000bb2: MLOAD
00000bb3: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000bd4: DUP2
00000bd5: MSTORE
00000bd6: PUSH1 0x04
00000bd8: ADD
00000bd9: PUSH2 0x0526
00000bdc: SWAP2
00000bdd: SWAP1
00000bde: PUSH2 0x2a95
00000be1: JUMP
00000be2: JUMPDEST
00000be3: POP
00000be4: ORIGIN
00000be5: PUSH0
00000be6: SWAP1
00000be7: DUP2
00000be8: MSTORE
00000be9: PUSH1 0x03
00000beb: PUSH1 0x20
00000bed: SWAP1
00000bee: DUP2
00000bef: MSTORE
00000bf0: PUSH1 0x40
00000bf2: SWAP2
00000bf3: DUP3
00000bf4: SWAP1
00000bf5: KECCAK256
00000bf6: SLOAD
00000bf7: DUP3
00000bf8: MLOAD
00000bf9: DUP1
00000bfa: DUP5
00000bfb: ADD
00000bfc: SWAP1
00000bfd: SWAP4
00000bfe: MSTORE
00000bff: PUSH1 0x04
00000c01: DUP4
00000c02: MSTORE
00000c03: PUSH32 0x4d30303200000000000000000000000000000000000000000000000000000000
00000c24: SWAP2
00000c25: DUP4
00000c26: ADD
00000c27: SWAP2
00000c28: SWAP1
00000c29: SWAP2
00000c2a: MSTORE
00000c2b: PUSH1 0xff
00000c2d: AND
00000c2e: PUSH2 0x0c64
00000c31: JUMPI
00000c32: PUSH1 0x40
00000c34: MLOAD
00000c35: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000c56: DUP2
00000c57: MSTORE
00000c58: PUSH1 0x04
00000c5a: ADD
00000c5b: PUSH2 0x0526
00000c5e: SWAP2
00000c5f: SWAP1
00000c60: PUSH2 0x2a95
00000c63: JUMP
00000c64: JUMPDEST
00000c65: POP
00000c66: PUSH1 0x20
00000c68: DUP2
00000c69: ADD
00000c6a: MLOAD
00000c6b: PUSH1 0xf8
00000c6d: SHR
00000c6e: DUP1
00000c6f: PUSH4 0xdeadbeef
00000c74: ADD
00000c75: SLOAD
00000c76: SWAP1
00000c77: POP
00000c78: PUSH1 0x01
00000c7a: DUP3
00000c7b: MLOAD
00000c7c: SUB
00000c7d: PUSH0
00000c7e: PUSH0
00000c7f: DUP3
00000c80: PUSH1 0x21
00000c82: DUP7
00000c83: ADD
00000c84: DUP6
00000c85: GAS
00000c86: DELEGATECALL
00000c87: PUSH2 0x0a0d
00000c8a: JUMPI
00000c8b: PUSH1 0x40
00000c8d: MLOAD
00000c8e: RETURNDATASIZE
00000c8f: PUSH0
00000c90: DUP3
00000c91: RETURNDATACOPY
00000c92: RETURNDATASIZE
00000c93: DUP2
00000c94: REVERT
00000c95: JUMPDEST
00000c96: PUSH0
00000c97: SLOAD
00000c98: PUSH1 0x40
00000c9a: DUP1
00000c9b: MLOAD
00000c9c: DUP1
00000c9d: DUP3
00000c9e: ADD
00000c9f: SWAP1
00000ca0: SWAP2
00000ca1: MSTORE
00000ca2: PUSH1 0x04
00000ca4: DUP2
00000ca5: MSTORE
00000ca6: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000
00000cc7: PUSH1 0x20
00000cc9: DUP3
00000cca: ADD
00000ccb: MSTORE
00000ccc: SWAP1
00000ccd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ce2: AND
00000ce3: CALLER
00000ce4: EQ
00000ce5: PUSH2 0x0d1b
00000ce8: JUMPI
00000ce9: PUSH1 0x40
00000ceb: MLOAD
00000cec: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000d0d: DUP2
00000d0e: MSTORE
00000d0f: PUSH1 0x04
00000d11: ADD
00000d12: PUSH2 0x0526
00000d15: SWAP2
00000d16: SWAP1
00000d17: PUSH2 0x2a95
00000d1a: JUMP
00000d1b: JUMPDEST
00000d1c: POP
00000d1d: PUSH1 0x40
00000d1f: DUP1
00000d20: MLOAD
00000d21: DUP1
00000d22: DUP3
00000d23: ADD
00000d24: SWAP1
00000d25: SWAP2
00000d26: MSTORE
00000d27: PUSH1 0x04
00000d29: DUP2
00000d2a: MSTORE
00000d2b: PUSH32 0x4d30303500000000000000000000000000000000000000000000000000000000
00000d4c: PUSH1 0x20
00000d4e: DUP3
00000d4f: ADD
00000d50: MSTORE
00000d51: DUP4
00000d52: DUP3
00000d53: EQ
00000d54: PUSH2 0x0d8a
00000d57: JUMPI
00000d58: PUSH1 0x40
00000d5a: MLOAD
00000d5b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000d7c: DUP2
00000d7d: MSTORE
00000d7e: PUSH1 0x04
00000d80: ADD
00000d81: PUSH2 0x0526
00000d84: SWAP2
00000d85: SWAP1
00000d86: PUSH2 0x2a95
00000d89: JUMP
00000d8a: JUMPDEST
00000d8b: POP
00000d8c: PUSH0
00000d8d: JUMPDEST
00000d8e: DUP4
00000d8f: DUP2
00000d90: LT
00000d91: ISZERO
00000d92: PUSH2 0x0b37
00000d95: JUMPI
00000d96: PUSH2 0x0e24
00000d99: DUP4
00000d9a: DUP4
00000d9b: DUP4
00000d9c: DUP2
00000d9d: DUP2
00000d9e: LT
00000d9f: PUSH2 0x0daa
00000da2: JUMPI
00000da3: PUSH2 0x0daa
00000da6: PUSH2 0x2ad4
00000da9: JUMP
00000daa: JUMPDEST
00000dab: SWAP1
00000dac: POP
00000dad: PUSH1 0x20
00000daf: MUL
00000db0: ADD
00000db1: PUSH1 0x20
00000db3: DUP2
00000db4: ADD
00000db5: SWAP1
00000db6: PUSH2 0x0dbf
00000db9: SWAP2
00000dba: SWAP1
00000dbb: PUSH2 0x274d
00000dbe: JUMP
00000dbf: JUMPDEST
00000dc0: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00000de1: DUP8
00000de2: DUP8
00000de3: DUP6
00000de4: DUP2
00000de5: DUP2
00000de6: LT
00000de7: PUSH2 0x0df2
00000dea: JUMPI
00000deb: PUSH2 0x0df2
00000dee: PUSH2 0x2ad4
00000df1: JUMP
00000df2: JUMPDEST
00000df3: SWAP1
00000df4: POP
00000df5: PUSH1 0x20
00000df7: MUL
00000df8: ADD
00000df9: PUSH1 0x20
00000dfb: DUP2
00000dfc: ADD
00000dfd: SWAP1
00000dfe: PUSH2 0x0e07
00000e01: SWAP2
00000e02: SWAP1
00000e03: PUSH2 0x274d
00000e06: JUMP
00000e07: JUMPDEST
00000e08: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e1d: AND
00000e1e: SWAP2
00000e1f: SWAP1
00000e20: PUSH2 0x1e9c
00000e23: JUMP
00000e24: JUMPDEST
00000e25: PUSH1 0x01
00000e27: ADD
00000e28: PUSH2 0x0d8d
00000e2b: JUMP
00000e2c: JUMPDEST
00000e2d: PUSH0
00000e2e: SLOAD
00000e2f: PUSH1 0x40
00000e31: DUP1
00000e32: MLOAD
00000e33: DUP1
00000e34: DUP3
00000e35: ADD
00000e36: SWAP1
00000e37: SWAP2
00000e38: MSTORE
00000e39: PUSH1 0x04
00000e3b: DUP2
00000e3c: MSTORE
00000e3d: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000
00000e5e: PUSH1 0x20
00000e60: DUP3
00000e61: ADD
00000e62: MSTORE
00000e63: SWAP1
00000e64: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e79: AND
00000e7a: CALLER
00000e7b: EQ
00000e7c: PUSH2 0x0eb2
00000e7f: JUMPI
00000e80: PUSH1 0x40
00000e82: MLOAD
00000e83: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000ea4: DUP2
00000ea5: MSTORE
00000ea6: PUSH1 0x04
00000ea8: ADD
00000ea9: PUSH2 0x0526
00000eac: SWAP2
00000ead: SWAP1
00000eae: PUSH2 0x2a95
00000eb1: JUMP
00000eb2: JUMPDEST
00000eb3: POP
00000eb4: PUSH0
00000eb5: JUMPDEST
00000eb6: DUP2
00000eb7: DUP2
00000eb8: LT
00000eb9: ISZERO
00000eba: PUSH2 0x0f42
00000ebd: JUMPI
00000ebe: PUSH0
00000ebf: PUSH1 0x03
00000ec1: PUSH0
00000ec2: DUP6
00000ec3: DUP6
00000ec4: DUP6
00000ec5: DUP2
00000ec6: DUP2
00000ec7: LT
00000ec8: PUSH2 0x0ed3
00000ecb: JUMPI
00000ecc: PUSH2 0x0ed3
00000ecf: PUSH2 0x2ad4
00000ed2: JUMP
00000ed3: JUMPDEST
00000ed4: SWAP1
00000ed5: POP
00000ed6: PUSH1 0x20
00000ed8: MUL
00000ed9: ADD
00000eda: PUSH1 0x20
00000edc: DUP2
00000edd: ADD
00000ede: SWAP1
00000edf: PUSH2 0x0ee8
00000ee2: SWAP2
00000ee3: SWAP1
00000ee4: PUSH2 0x274d
00000ee7: JUMP
00000ee8: JUMPDEST
00000ee9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000efe: AND
00000eff: DUP2
00000f00: MSTORE
00000f01: PUSH1 0x20
00000f03: DUP2
00000f04: ADD
00000f05: SWAP2
00000f06: SWAP1
00000f07: SWAP2
00000f08: MSTORE
00000f09: PUSH1 0x40
00000f0b: ADD
00000f0c: PUSH0
00000f0d: KECCAK256
00000f0e: DUP1
00000f0f: SLOAD
00000f10: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
00000f31: AND
00000f32: SWAP2
00000f33: ISZERO
00000f34: ISZERO
00000f35: SWAP2
00000f36: SWAP1
00000f37: SWAP2
00000f38: OR
00000f39: SWAP1
00000f3a: SSTORE
00000f3b: PUSH1 0x01
00000f3d: ADD
00000f3e: PUSH2 0x0eb5
00000f41: JUMP
00000f42: JUMPDEST
00000f43: POP
00000f44: POP
00000f45: POP
00000f46: JUMP
00000f47: JUMPDEST
00000f48: PUSH1 0x01
00000f4a: SLOAD
00000f4b: PUSH1 0x40
00000f4d: DUP1
00000f4e: MLOAD
00000f4f: DUP1
00000f50: DUP3
00000f51: ADD
00000f52: SWAP1
00000f53: SWAP2
00000f54: MSTORE
00000f55: PUSH1 0x04
00000f57: DUP2
00000f58: MSTORE
00000f59: PUSH32 0x4d30303300000000000000000000000000000000000000000000000000000000
00000f7a: PUSH1 0x20
00000f7c: DUP3
00000f7d: ADD
00000f7e: MSTORE
00000f7f: SWAP1
00000f80: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f95: AND
00000f96: CALLER
00000f97: EQ
00000f98: PUSH2 0x0fce
00000f9b: JUMPI
00000f9c: PUSH1 0x40
00000f9e: MLOAD
00000f9f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000fc0: DUP2
00000fc1: MSTORE
00000fc2: PUSH1 0x04
00000fc4: ADD
00000fc5: PUSH2 0x0526
00000fc8: SWAP2
00000fc9: SWAP1
00000fca: PUSH2 0x2a95
00000fcd: JUMP
00000fce: JUMPDEST
00000fcf: POP
00000fd0: PUSH0
00000fd1: DUP1
00000fd2: SLOAD
00000fd3: PUSH1 0x40
00000fd5: MLOAD
00000fd6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000feb: SWAP1
00000fec: SWAP2
00000fed: AND
00000fee: SWAP1
00000fef: DUP4
00000ff0: SWAP1
00000ff1: JUMPDEST
00000ff2: PUSH0
00000ff3: PUSH1 0x40
00000ff5: MLOAD
00000ff6: DUP1
00000ff7: DUP4
00000ff8: SUB
00000ff9: DUP2
00000ffa: DUP6
00000ffb: DUP8
00000ffc: GAS
00000ffd: CALL
00000ffe: SWAP3
00000fff: POP
00001000: POP
00001001: POP
00001002: RETURNDATASIZE
00001003: DUP1
00001004: PUSH0
00001005: DUP2
00001006: EQ
00001007: PUSH2 0x102b
0000100a: JUMPI
0000100b: PUSH1 0x40
0000100d: MLOAD
0000100e: SWAP2
0000100f: POP
00001010: PUSH1 0x1f
00001012: NOT
00001013: PUSH1 0x3f
00001015: RETURNDATASIZE
00001016: ADD
00001017: AND
00001018: DUP3
00001019: ADD
0000101a: PUSH1 0x40
0000101c: MSTORE
0000101d: RETURNDATASIZE
0000101e: DUP3
0000101f: MSTORE
00001020: RETURNDATASIZE
00001021: PUSH0
00001022: PUSH1 0x20
00001024: DUP5
00001025: ADD
00001026: RETURNDATACOPY
00001027: PUSH2 0x1030
0000102a: JUMP
0000102b: JUMPDEST
0000102c: PUSH1 0x60
0000102e: SWAP2
0000102f: POP
00001030: JUMPDEST
00001031: POP
00001032: POP
00001033: SWAP1
00001034: POP
00001035: DUP1
00001036: PUSH1 0x40
00001038: MLOAD
00001039: DUP1
0000103a: PUSH1 0x40
0000103c: ADD
0000103d: PUSH1 0x40
0000103f: MSTORE
00001040: DUP1
00001041: PUSH1 0x04
00001043: DUP2
00001044: MSTORE
00001045: PUSH1 0x20
00001047: ADD
00001048: PUSH32 0x4d30303400000000000000000000000000000000000000000000000000000000
00001069: DUP2
0000106a: MSTORE
0000106b: POP
0000106c: SWAP1
0000106d: PUSH2 0x0f42
00001070: JUMPI
00001071: PUSH1 0x40
00001073: MLOAD
00001074: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001095: DUP2
00001096: MSTORE
00001097: PUSH1 0x04
00001099: ADD
0000109a: PUSH2 0x0526
0000109d: SWAP2
0000109e: SWAP1
0000109f: PUSH2 0x2a95
000010a2: JUMP
000010a3: JUMPDEST
000010a4: PUSH0
000010a5: SLOAD
000010a6: PUSH1 0x40
000010a8: DUP1
000010a9: MLOAD
000010aa: DUP1
000010ab: DUP3
000010ac: ADD
000010ad: SWAP1
000010ae: SWAP2
000010af: MSTORE
000010b0: PUSH1 0x04
000010b2: DUP2
000010b3: MSTORE
000010b4: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000
000010d5: PUSH1 0x20
000010d7: DUP3
000010d8: ADD
000010d9: MSTORE
000010da: SWAP1
000010db: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000010f0: AND
000010f1: CALLER
000010f2: EQ
000010f3: PUSH2 0x1129
000010f6: JUMPI
000010f7: PUSH1 0x40
000010f9: MLOAD
000010fa: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000111b: DUP2
0000111c: MSTORE
0000111d: PUSH1 0x04
0000111f: ADD
00001120: PUSH2 0x0526
00001123: SWAP2
00001124: SWAP1
00001125: PUSH2 0x2a95
00001128: JUMP
00001129: JUMPDEST
0000112a: POP
0000112b: PUSH4 0xdeadbeef
00001130: SWAP1
00001131: SWAP2
00001132: ADD
00001133: SSTORE
00001134: JUMP
00001135: JUMPDEST
00001136: PUSH0
00001137: SLOAD
00001138: PUSH1 0x40
0000113a: DUP1
0000113b: MLOAD
0000113c: DUP1
0000113d: DUP3
0000113e: ADD
0000113f: SWAP1
00001140: SWAP2
00001141: MSTORE
00001142: PUSH1 0x04
00001144: DUP2
00001145: MSTORE
00001146: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000
00001167: PUSH1 0x20
00001169: DUP3
0000116a: ADD
0000116b: MSTORE
0000116c: SWAP1
0000116d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001182: AND
00001183: CALLER
00001184: EQ
00001185: PUSH2 0x11bb
00001188: JUMPI
00001189: PUSH1 0x40
0000118b: MLOAD
0000118c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000011ad: DUP2
000011ae: MSTORE
000011af: PUSH1 0x04
000011b1: ADD
000011b2: PUSH2 0x0526
000011b5: SWAP2
000011b6: SWAP1
000011b7: PUSH2 0x2a95
000011ba: JUMP
000011bb: JUMPDEST
000011bc: POP
000011bd: PUSH2 0x08ec
000011c0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000011d5: DUP4
000011d6: AND
000011d7: CALLER
000011d8: DUP4
000011d9: PUSH2 0x1b70
000011dc: JUMP
000011dd: JUMPDEST
000011de: PUSH1 0x01
000011e0: SLOAD
000011e1: PUSH1 0x40
000011e3: DUP1
000011e4: MLOAD
000011e5: DUP1
000011e6: DUP3
000011e7: ADD
000011e8: SWAP1
000011e9: SWAP2
000011ea: MSTORE
000011eb: PUSH1 0x04
000011ed: DUP2
000011ee: MSTORE
000011ef: PUSH32 0x4d30303300000000000000000000000000000000000000000000000000000000
00001210: PUSH1 0x20
00001212: DUP3
00001213: ADD
00001214: MSTORE
00001215: SWAP1
00001216: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000122b: AND
0000122c: CALLER
0000122d: EQ
0000122e: PUSH2 0x1264
00001231: JUMPI
00001232: PUSH1 0x40
00001234: MLOAD
00001235: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001256: DUP2
00001257: MSTORE
00001258: PUSH1 0x04
0000125a: ADD
0000125b: PUSH2 0x0526
0000125e: SWAP2
0000125f: SWAP1
00001260: PUSH2 0x2a95
00001263: JUMP
00001264: JUMPDEST
00001265: POP
00001266: PUSH1 0x40
00001268: DUP1
00001269: MLOAD
0000126a: DUP1
0000126b: DUP3
0000126c: ADD
0000126d: SWAP1
0000126e: SWAP2
0000126f: MSTORE
00001270: PUSH1 0x04
00001272: DUP2
00001273: MSTORE
00001274: PUSH32 0x4d30303500000000000000000000000000000000000000000000000000000000
00001295: PUSH1 0x20
00001297: DUP3
00001298: ADD
00001299: MSTORE
0000129a: DUP4
0000129b: DUP3
0000129c: EQ
0000129d: PUSH2 0x12d3
000012a0: JUMPI
000012a1: PUSH1 0x40
000012a3: MLOAD
000012a4: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000012c5: DUP2
000012c6: MSTORE
000012c7: PUSH1 0x04
000012c9: ADD
000012ca: PUSH2 0x0526
000012cd: SWAP2
000012ce: SWAP1
000012cf: PUSH2 0x2a95
000012d2: JUMP
000012d3: JUMPDEST
000012d4: POP
000012d5: PUSH0
000012d6: JUMPDEST
000012d7: DUP4
000012d8: DUP2
000012d9: LT
000012da: ISZERO
000012db: PUSH2 0x0b37
000012de: JUMPI
000012df: PUSH0
000012e0: SLOAD
000012e1: PUSH2 0x1357
000012e4: SWAP1
000012e5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000012fa: AND
000012fb: DUP5
000012fc: DUP5
000012fd: DUP5
000012fe: DUP2
000012ff: DUP2
00001300: LT
00001301: PUSH2 0x130c
00001304: JUMPI
00001305: PUSH2 0x130c
00001308: PUSH2 0x2ad4
0000130b: JUMP
0000130c: JUMPDEST
0000130d: SWAP1
0000130e: POP
0000130f: PUSH1 0x20
00001311: MUL
00001312: ADD
00001313: CALLDATALOAD
00001314: DUP8
00001315: DUP8
00001316: DUP6
00001317: DUP2
00001318: DUP2
00001319: LT
0000131a: PUSH2 0x1325
0000131d: JUMPI
0000131e: PUSH2 0x1325
00001321: PUSH2 0x2ad4
00001324: JUMP
00001325: JUMPDEST
00001326: SWAP1
00001327: POP
00001328: PUSH1 0x20
0000132a: MUL
0000132b: ADD
0000132c: PUSH1 0x20
0000132e: DUP2
0000132f: ADD
00001330: SWAP1
00001331: PUSH2 0x133a
00001334: SWAP2
00001335: SWAP1
00001336: PUSH2 0x274d
00001339: JUMP
0000133a: JUMPDEST
0000133b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001350: AND
00001351: SWAP2
00001352: SWAP1
00001353: PUSH2 0x1b70
00001356: JUMP
00001357: JUMPDEST
00001358: PUSH1 0x01
0000135a: ADD
0000135b: PUSH2 0x12d6
0000135e: JUMP
0000135f: JUMPDEST
00001360: PUSH0
00001361: SLOAD
00001362: PUSH1 0x40
00001364: DUP1
00001365: MLOAD
00001366: DUP1
00001367: DUP3
00001368: ADD
00001369: SWAP1
0000136a: SWAP2
0000136b: MSTORE
0000136c: PUSH1 0x04
0000136e: DUP2
0000136f: MSTORE
00001370: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000
00001391: PUSH1 0x20
00001393: DUP3
00001394: ADD
00001395: MSTORE
00001396: SWAP1
00001397: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000013ac: AND
000013ad: CALLER
000013ae: EQ
000013af: PUSH2 0x13e5
000013b2: JUMPI
000013b3: PUSH1 0x40
000013b5: MLOAD
000013b6: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000013d7: DUP2
000013d8: MSTORE
000013d9: PUSH1 0x04
000013db: ADD
000013dc: PUSH2 0x0526
000013df: SWAP2
000013e0: SWAP1
000013e1: PUSH2 0x2a95
000013e4: JUMP
000013e5: JUMPDEST
000013e6: POP
000013e7: PUSH0
000013e8: CALLER
000013e9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000013fe: AND
000013ff: DUP3
00001400: PUSH1 0x40
00001402: MLOAD
00001403: PUSH2 0x0ff1
00001406: JUMP
00001407: JUMPDEST
00001408: PUSH0
00001409: SLOAD
0000140a: PUSH1 0x40
0000140c: DUP1
0000140d: MLOAD
0000140e: DUP1
0000140f: DUP3
00001410: ADD
00001411: SWAP1
00001412: SWAP2
00001413: MSTORE
00001414: PUSH1 0x04
00001416: DUP2
00001417: MSTORE
00001418: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000
00001439: PUSH1 0x20
0000143b: DUP3
0000143c: ADD
0000143d: MSTORE
0000143e: SWAP1
0000143f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001454: AND
00001455: CALLER
00001456: EQ
00001457: PUSH2 0x148d
0000145a: JUMPI
0000145b: PUSH1 0x40
0000145d: MLOAD
0000145e: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000147f: DUP2
00001480: MSTORE
00001481: PUSH1 0x04
00001483: ADD
00001484: PUSH2 0x0526
00001487: SWAP2
00001488: SWAP1
00001489: PUSH2 0x2a95
0000148c: JUMP
0000148d: JUMPDEST
0000148e: POP
0000148f: PUSH1 0x01
00001491: DUP1
00001492: SLOAD
00001493: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
000014b4: AND
000014b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014ca: SWAP3
000014cb: SWAP1
000014cc: SWAP3
000014cd: AND
000014ce: SWAP2
000014cf: SWAP1
000014d0: SWAP2
000014d1: OR
000014d2: SWAP1
000014d3: SSTORE
000014d4: JUMP
000014d5: JUMPDEST
000014d6: PUSH0
000014d7: SLOAD
000014d8: PUSH1 0x40
000014da: DUP1
000014db: MLOAD
000014dc: DUP1
000014dd: DUP3
000014de: ADD
000014df: SWAP1
000014e0: SWAP2
000014e1: MSTORE
000014e2: PUSH1 0x04
000014e4: DUP2
000014e5: MSTORE
000014e6: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000
00001507: PUSH1 0x20
00001509: DUP3
0000150a: ADD
0000150b: MSTORE
0000150c: SWAP1
0000150d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001522: AND
00001523: CALLER
00001524: EQ
00001525: PUSH2 0x155b
00001528: JUMPI
00001529: PUSH1 0x40
0000152b: MLOAD
0000152c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000154d: DUP2
0000154e: MSTORE
0000154f: PUSH1 0x04
00001551: ADD
00001552: PUSH2 0x0526
00001555: SWAP2
00001556: SWAP1
00001557: PUSH2 0x2a95
0000155a: JUMP
0000155b: JUMPDEST
0000155c: POP
0000155d: PUSH0
0000155e: JUMPDEST
0000155f: DUP2
00001560: DUP2
00001561: LT
00001562: ISZERO
00001563: PUSH2 0x0f42
00001566: JUMPI
00001567: PUSH1 0x01
00001569: PUSH1 0x03
0000156b: PUSH0
0000156c: DUP6
0000156d: DUP6
0000156e: DUP6
0000156f: DUP2
00001570: DUP2
00001571: LT
00001572: PUSH2 0x157d
00001575: JUMPI
00001576: PUSH2 0x157d
00001579: PUSH2 0x2ad4
0000157c: JUMP
0000157d: JUMPDEST
0000157e: SWAP1
0000157f: POP
00001580: PUSH1 0x20
00001582: MUL
00001583: ADD
00001584: PUSH1 0x20
00001586: DUP2
00001587: ADD
00001588: SWAP1
00001589: PUSH2 0x1592
0000158c: SWAP2
0000158d: SWAP1
0000158e: PUSH2 0x274d
00001591: JUMP
00001592: JUMPDEST
00001593: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000015a8: AND
000015a9: DUP2
000015aa: MSTORE
000015ab: PUSH1 0x20
000015ad: DUP2
000015ae: ADD
000015af: SWAP2
000015b0: SWAP1
000015b1: SWAP2
000015b2: MSTORE
000015b3: PUSH1 0x40
000015b5: ADD
000015b6: PUSH0
000015b7: KECCAK256
000015b8: DUP1
000015b9: SLOAD
000015ba: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
000015db: AND
000015dc: SWAP2
000015dd: ISZERO
000015de: ISZERO
000015df: SWAP2
000015e0: SWAP1
000015e1: SWAP2
000015e2: OR
000015e3: SWAP1
000015e4: SSTORE
000015e5: PUSH1 0x01
000015e7: ADD
000015e8: PUSH2 0x155e
000015eb: JUMP
000015ec: JUMPDEST
000015ed: PUSH0
000015ee: SLOAD
000015ef: PUSH1 0x40
000015f1: DUP1
000015f2: MLOAD
000015f3: DUP1
000015f4: DUP3
000015f5: ADD
000015f6: SWAP1
000015f7: SWAP2
000015f8: MSTORE
000015f9: PUSH1 0x04
000015fb: DUP2
000015fc: MSTORE
000015fd: PUSH32 0x4d30303100000000000000000000000000000000000000000000000000000000
0000161e: PUSH1 0x20
00001620: DUP3
00001621: ADD
00001622: MSTORE
00001623: SWAP1
00001624: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001639: AND
0000163a: CALLER
0000163b: EQ
0000163c: PUSH2 0x1672
0000163f: JUMPI
00001640: PUSH1 0x40
00001642: MLOAD
00001643: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001664: DUP2
00001665: MSTORE
00001666: PUSH1 0x04
00001668: ADD
00001669: PUSH2 0x0526
0000166c: SWAP2
0000166d: SWAP1
0000166e: PUSH2 0x2a95
00001671: JUMP
00001672: JUMPDEST
00001673: POP
00001674: PUSH1 0x02
00001676: DUP1
00001677: SLOAD
00001678: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00001699: AND
0000169a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000016af: SWAP3
000016b0: SWAP1
000016b1: SWAP3
000016b2: AND
000016b3: SWAP2
000016b4: SWAP1
000016b5: SWAP2
000016b6: OR
000016b7: SWAP1
000016b8: SSTORE
000016b9: JUMP
000016ba: JUMPDEST
000016bb: PUSH1 0x2b
000016bd: DUP3
000016be: ADD
000016bf: CALLDATALOAD
000016c0: PUSH1 0xf8
000016c2: SHR
000016c3: PUSH0
000016c4: DUP2
000016c5: SWAP1
000016c6: SUB
000016c7: PUSH2 0x171a
000016ca: JUMPI
000016cb: PUSH2 0x0a74
000016ce: DUP6
000016cf: DUP6
000016d0: DUP6
000016d1: DUP6
000016d2: PUSH32 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54
000016f3: PUSH32 0x0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984
00001714: PUSH1 0x60
00001716: PUSH2 0x1c84
00001719: JUMP
0000171a: JUMPDEST
0000171b: DUP1
0000171c: PUSH1 0xff
0000171e: AND
0000171f: PUSH1 0x03
00001721: SUB
00001722: PUSH2 0x1775
00001725: JUMPI
00001726: PUSH2 0x0a74
00001729: DUP6
0000172a: DUP6
0000172b: DUP6
0000172c: DUP6
0000172d: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
0000174e: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
0000176f: PUSH1 0x60
00001771: PUSH2 0x1c84
00001774: JUMP
00001775: JUMPDEST
00001776: DUP1
00001777: PUSH1 0xff
00001779: AND
0000177a: PUSH1 0x04
0000177c: SUB
0000177d: PUSH2 0x0ad4
00001780: JUMPI
00001781: PUSH2 0x0a74
00001784: DUP6
00001785: DUP6
00001786: DUP6
00001787: DUP6
00001788: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
000017a9: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
000017ca: PUSH1 0x60
000017cc: PUSH2 0x1c84
000017cf: JUMP
000017d0: JUMPDEST
000017d1: PUSH0
000017d2: PUSH1 0x60
000017d4: DUP2
000017d5: PUSH1 0xff
000017d7: DUP7
000017d8: AND
000017d9: PUSH2 0x17ee
000017dc: JUMPI
000017dd: PUSH2 0x17e4
000017e0: PUSH2 0x1f73
000017e3: JUMP
000017e4: JUMPDEST
000017e5: SWAP1
000017e6: SWAP3
000017e7: POP
000017e8: SWAP1
000017e9: POP
000017ea: PUSH2 0x17fc
000017ed: JUMP
000017ee: JUMPDEST
000017ef: PUSH2 0x17f6
000017f2: PUSH2 0x20b0
000017f5: JUMP
000017f6: JUMPDEST
000017f7: SWAP1
000017f8: SWAP3
000017f9: POP
000017fa: SWAP1
000017fb: POP
000017fc: JUMPDEST
000017fd: DUP1
000017fe: PUSH2 0x180b
00001801: JUMPI
00001802: PUSH0
00001803: SWAP3
00001804: POP
00001805: POP
00001806: POP
00001807: PUSH2 0x18b5
0000180a: JUMP
0000180b: JUMPDEST
0000180c: PUSH1 0x40
0000180e: MLOAD
0000180f: PUSH32 0xe0232b4200000000000000000000000000000000000000000000000000000000
00001830: DUP2
00001831: MSTORE
00001832: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001847: PUSH32 0x000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb
00001868: AND
00001869: SWAP1
0000186a: PUSH4 0xe0232b42
0000186f: SWAP1
00001870: PUSH2 0x1881
00001873: SWAP1
00001874: DUP9
00001875: SWAP1
00001876: DUP9
00001877: SWAP1
00001878: DUP8
00001879: SWAP1
0000187a: PUSH1 0x04
0000187c: ADD
0000187d: PUSH2 0x2b01
00001880: JUMP
00001881: JUMPDEST
00001882: PUSH0
00001883: PUSH1 0x40
00001885: MLOAD
00001886: DUP1
00001887: DUP4
00001888: SUB
00001889: DUP2
0000188a: PUSH0
0000188b: DUP8
0000188c: DUP1
0000188d: EXTCODESIZE
0000188e: ISZERO
0000188f: DUP1
00001890: ISZERO
00001891: PUSH2 0x1898
00001894: JUMPI
00001895: PUSH0
00001896: PUSH0
00001897: REVERT
00001898: JUMPDEST
00001899: POP
0000189a: GAS
0000189b: CALL
0000189c: ISZERO
0000189d: DUP1
0000189e: ISZERO
0000189f: PUSH2 0x18aa
000018a2: JUMPI
000018a3: RETURNDATASIZE
000018a4: PUSH0
000018a5: PUSH0
000018a6: RETURNDATACOPY
000018a7: RETURNDATASIZE
000018a8: PUSH0
000018a9: REVERT
000018aa: JUMPDEST
000018ab: POP
000018ac: POP
000018ad: POP
000018ae: POP
000018af: PUSH1 0x01
000018b1: SWAP3
000018b2: POP
000018b3: POP
000018b4: POP
000018b5: JUMPDEST
000018b6: SWAP4
000018b7: SWAP3
000018b8: POP
000018b9: POP
000018ba: POP
000018bb: JUMP
000018bc: JUMPDEST
000018bd: PUSH0
000018be: PUSH1 0xff
000018c0: DUP3
000018c1: AND
000018c2: PUSH2 0x18d3
000018c5: JUMPI
000018c6: PUSH2 0x18cd
000018c9: PUSH2 0x2221
000018cc: JUMP
000018cd: JUMPDEST
000018ce: SWAP3
000018cf: SWAP2
000018d0: POP
000018d1: POP
000018d2: JUMP
000018d3: JUMPDEST
000018d4: PUSH2 0x18cd
000018d7: PUSH2 0x2365
000018da: JUMP
000018db: JUMPDEST
000018dc: SWAP2
000018dd: SWAP1
000018de: POP
000018df: JUMP
000018e0: JUMPDEST
000018e1: PUSH0
000018e2: DUP1
000018e3: DUP1
000018e4: PUSH2 0x1910
000018e7: PUSH1 0xff
000018e9: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000003
0000190a: AND
0000190b: SELFBALANCE
0000190c: PUSH2 0x2b3e
0000190f: JUMP
00001910: JUMPDEST
00001911: SWAP1
00001912: POP
00001913: PUSH1 0xff
00001915: DUP5
00001916: AND
00001917: PUSH2 0x19c9
0000191a: JUMPI
0000191b: DUP1
0000191c: DUP6
0000191d: GT
0000191e: ISZERO
0000191f: PUSH2 0x19c1
00001922: JUMPI
00001923: PUSH1 0x40
00001925: MLOAD
00001926: PUSH32 0x2e1a7d4d00000000000000000000000000000000000000000000000000000000
00001947: DUP2
00001948: MSTORE
00001949: PUSH1 0x04
0000194b: DUP2
0000194c: ADD
0000194d: DUP7
0000194e: SWAP1
0000194f: MSTORE
00001950: DUP6
00001951: SWAP3
00001952: POP
00001953: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00001974: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001989: AND
0000198a: SWAP1
0000198b: PUSH4 0x2e1a7d4d
00001990: SWAP1
00001991: PUSH1 0x24
00001993: ADD
00001994: PUSH0
00001995: PUSH1 0x40
00001997: MLOAD
00001998: DUP1
00001999: DUP4
0000199a: SUB
0000199b: DUP2
0000199c: PUSH0
0000199d: DUP8
0000199e: DUP1
0000199f: EXTCODESIZE
000019a0: ISZERO
000019a1: DUP1
000019a2: ISZERO
000019a3: PUSH2 0x19aa
000019a6: JUMPI
000019a7: PUSH0
000019a8: PUSH0
000019a9: REVERT
000019aa: JUMPDEST
000019ab: POP
000019ac: GAS
000019ad: CALL
000019ae: ISZERO
000019af: DUP1
000019b0: ISZERO
000019b1: PUSH2 0x19bc
000019b4: JUMPI
000019b5: RETURNDATASIZE
000019b6: PUSH0
000019b7: PUSH0
000019b8: RETURNDATACOPY
000019b9: RETURNDATASIZE
000019ba: PUSH0
000019bb: REVERT
000019bc: JUMPDEST
000019bd: POP
000019be: POP
000019bf: POP
000019c0: POP
000019c1: JUMPDEST
000019c2: DUP5
000019c3: SWAP3
000019c4: POP
000019c5: PUSH2 0x19d9
000019c8: JUMP
000019c9: JUMPDEST
000019ca: DUP1
000019cb: DUP6
000019cc: GT
000019cd: ISZERO
000019ce: PUSH2 0x19d5
000019d1: JUMPI
000019d2: DUP1
000019d3: SWAP5
000019d4: POP
000019d5: JUMPDEST
000019d6: DUP5
000019d7: SWAP3
000019d8: POP
000019d9: JUMPDEST
000019da: PUSH0
000019db: PUSH1 0x01
000019dd: DUP8
000019de: PUSH1 0x05
000019e0: DUP2
000019e1: GT
000019e2: ISZERO
000019e3: PUSH2 0x19ee
000019e6: JUMPI
000019e7: PUSH2 0x19ee
000019ea: PUSH2 0x2aa7
000019ed: JUMP
000019ee: JUMPDEST
000019ef: SUB
000019f0: PUSH2 0x19fa
000019f3: JUMPI
000019f4: POP
000019f5: COINBASE
000019f6: PUSH2 0x1b5d
000019f9: JUMP
000019fa: JUMPDEST
000019fb: PUSH1 0x02
000019fd: DUP8
000019fe: PUSH1 0x05
00001a00: DUP2
00001a01: GT
00001a02: ISZERO
00001a03: PUSH2 0x1a0e
00001a06: JUMPI
00001a07: PUSH2 0x1a0e
00001a0a: PUSH2 0x2aa7
00001a0d: JUMP
00001a0e: JUMPDEST
00001a0f: SUB
00001a10: PUSH2 0x1a3a
00001a13: JUMPI
00001a14: POP
00001a15: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
00001a36: PUSH2 0x1b5d
00001a39: JUMP
00001a3a: JUMPDEST
00001a3b: PUSH1 0x03
00001a3d: DUP8
00001a3e: PUSH1 0x05
00001a40: DUP2
00001a41: GT
00001a42: ISZERO
00001a43: PUSH2 0x1a4e
00001a46: JUMPI
00001a47: PUSH2 0x1a4e
00001a4a: PUSH2 0x2aa7
00001a4d: JUMP
00001a4e: JUMPDEST
00001a4f: SUB
00001a50: PUSH2 0x1a7a
00001a53: JUMPI
00001a54: POP
00001a55: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
00001a76: PUSH2 0x1b5d
00001a79: JUMP
00001a7a: JUMPDEST
00001a7b: PUSH1 0x04
00001a7d: DUP8
00001a7e: PUSH1 0x05
00001a80: DUP2
00001a81: GT
00001a82: ISZERO
00001a83: PUSH2 0x1a8e
00001a86: JUMPI
00001a87: PUSH2 0x1a8e
00001a8a: PUSH2 0x2aa7
00001a8d: JUMP
00001a8e: JUMPDEST
00001a8f: SUB
00001a90: PUSH2 0x1aba
00001a93: JUMPI
00001a94: POP
00001a95: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
00001ab6: PUSH2 0x1b5d
00001ab9: JUMP
00001aba: JUMPDEST
00001abb: PUSH1 0x05
00001abd: DUP8
00001abe: PUSH1 0x05
00001ac0: DUP2
00001ac1: GT
00001ac2: ISZERO
00001ac3: PUSH2 0x1ace
00001ac6: JUMPI
00001ac7: PUSH2 0x1ace
00001aca: PUSH2 0x2aa7
00001acd: JUMP
00001ace: JUMPDEST
00001acf: SUB
00001ad0: PUSH2 0x1afa
00001ad3: JUMPI
00001ad4: POP
00001ad5: PUSH32 0x0000000000000000000000000000000000000000000000000000000000000000
00001af6: PUSH2 0x1b5d
00001af9: JUMP
00001afa: JUMPDEST
00001afb: PUSH1 0x40
00001afd: DUP1
00001afe: MLOAD
00001aff: DUP1
00001b00: DUP3
00001b01: ADD
00001b02: DUP3
00001b03: MSTORE
00001b04: PUSH1 0x04
00001b06: DUP1
00001b07: DUP3
00001b08: MSTORE
00001b09: PUSH32 0x4d30313600000000000000000000000000000000000000000000000000000000
00001b2a: PUSH1 0x20
00001b2c: DUP4
00001b2d: ADD
00001b2e: MSTORE
00001b2f: SWAP2
00001b30: MLOAD
00001b31: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001b52: DUP2
00001b53: MSTORE
00001b54: PUSH2 0x0526
00001b57: SWAP3
00001b58: ADD
00001b59: PUSH2 0x2a95
00001b5c: JUMP
00001b5d: JUMPDEST
00001b5e: PUSH0
00001b5f: PUSH0
00001b60: PUSH0
00001b61: PUSH0
00001b62: DUP10
00001b63: DUP6
00001b64: GAS
00001b65: CALL
00001b66: POP
00001b67: POP
00001b68: POP
00001b69: SWAP4
00001b6a: POP
00001b6b: SWAP4
00001b6c: SWAP2
00001b6d: POP
00001b6e: POP
00001b6f: JUMP
00001b70: JUMPDEST
00001b71: PUSH1 0x40
00001b73: MLOAD
00001b74: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001b89: DUP4
00001b8a: DUP2
00001b8b: AND
00001b8c: PUSH1 0x24
00001b8e: DUP4
00001b8f: ADD
00001b90: MSTORE
00001b91: PUSH1 0x44
00001b93: DUP3
00001b94: ADD
00001b95: DUP4
00001b96: SWAP1
00001b97: MSTORE
00001b98: PUSH2 0x0f42
00001b9b: SWAP2
00001b9c: DUP6
00001b9d: SWAP2
00001b9e: DUP3
00001b9f: AND
00001ba0: SWAP1
00001ba1: PUSH4 0xa9059cbb
00001ba6: SWAP1
00001ba7: PUSH1 0x64
00001ba9: ADD
00001baa: JUMPDEST
00001bab: PUSH1 0x40
00001bad: MLOAD
00001bae: PUSH1 0x20
00001bb0: DUP2
00001bb1: DUP4
00001bb2: SUB
00001bb3: SUB
00001bb4: DUP2
00001bb5: MSTORE
00001bb6: SWAP1
00001bb7: PUSH1 0x40
00001bb9: MSTORE
00001bba: SWAP2
00001bbb: POP
00001bbc: PUSH1 0xe0
00001bbe: SHL
00001bbf: PUSH1 0x20
00001bc1: DUP3
00001bc2: ADD
00001bc3: DUP1
00001bc4: MLOAD
00001bc5: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00001be2: DUP4
00001be3: DUP2
00001be4: DUP4
00001be5: AND
00001be6: OR
00001be7: DUP4
00001be8: MSTORE
00001be9: POP
00001bea: POP
00001beb: POP
00001bec: POP
00001bed: PUSH2 0x2597
00001bf0: JUMP
00001bf1: JUMPDEST
00001bf2: PUSH0
00001bf3: JUMPDEST
00001bf4: DUP2
00001bf5: MLOAD
00001bf6: DUP2
00001bf7: LT
00001bf8: ISZERO
00001bf9: PUSH2 0x08ec
00001bfc: JUMPI
00001bfd: PUSH0
00001bfe: PUSH2 0x1c07
00001c01: DUP4
00001c02: DUP4
00001c03: PUSH2 0x2636
00001c06: JUMP
00001c07: JUMPDEST
00001c08: SWAP1
00001c09: POP
00001c0a: PUSH0
00001c0b: PUSH2 0x1c21
00001c0e: DUP5
00001c0f: PUSH2 0x1c19
00001c12: DUP6
00001c13: PUSH1 0x14
00001c15: PUSH2 0x2b76
00001c18: JUMP
00001c19: JUMPDEST
00001c1a: ADD
00001c1b: PUSH1 0x20
00001c1d: ADD
00001c1e: MLOAD
00001c1f: SWAP1
00001c20: JUMP
00001c21: JUMPDEST
00001c22: SWAP1
00001c23: POP
00001c24: PUSH0
00001c25: PUSH2 0x1c33
00001c28: DUP6
00001c29: PUSH2 0x1c19
00001c2c: DUP7
00001c2d: PUSH1 0x34
00001c2f: PUSH2 0x2b76
00001c32: JUMP
00001c33: JUMPDEST
00001c34: SWAP1
00001c35: POP
00001c36: PUSH0
00001c37: PUSH2 0x1c4c
00001c3a: DUP7
00001c3b: PUSH2 0x1c45
00001c3e: DUP8
00001c3f: PUSH1 0x54
00001c41: PUSH2 0x2b76
00001c44: JUMP
00001c45: JUMPDEST
00001c46: ADD
00001c47: PUSH1 0x20
00001c49: ADD
00001c4a: SWAP1
00001c4b: JUMP
00001c4c: JUMPDEST
00001c4d: SWAP1
00001c4e: POP
00001c4f: PUSH0
00001c50: PUSH0
00001c51: DUP4
00001c52: DUP4
00001c53: DUP7
00001c54: DUP9
00001c55: PUSH2 0x1388
00001c58: GAS
00001c59: SUB
00001c5a: CALL
00001c5b: DUP1
00001c5c: PUSH2 0x1c63
00001c5f: JUMPI
00001c60: PUSH0
00001c61: PUSH0
00001c62: REVERT
00001c63: JUMPDEST
00001c64: POP
00001c65: PUSH2 0x1c6f
00001c68: DUP3
00001c69: PUSH1 0x54
00001c6b: PUSH2 0x2b76
00001c6e: JUMP
00001c6f: JUMPDEST
00001c70: PUSH2 0x1c79
00001c73: SWAP1
00001c74: DUP7
00001c75: PUSH2 0x2b76
00001c78: JUMP
00001c79: JUMPDEST
00001c7a: SWAP5
00001c7b: POP
00001c7c: POP
00001c7d: POP
00001c7e: POP
00001c7f: POP
00001c80: PUSH2 0x1bf3
00001c83: JUMP
00001c84: JUMPDEST
00001c85: PUSH1 0x40
00001c87: MLOAD
00001c88: DUP6
00001c89: CALLDATALOAD
00001c8a: PUSH1 0x60
00001c8c: SWAP1
00001c8d: DUP2
00001c8e: SHR
00001c8f: SWAP2
00001c90: PUSH1 0x14
00001c92: DUP9
00001c93: ADD
00001c94: CALLDATALOAD
00001c95: SWAP1
00001c96: SWAP2
00001c97: SHR
00001c98: SWAP1
00001c99: PUSH1 0x28
00001c9b: DUP9
00001c9c: ADD
00001c9d: CALLDATALOAD
00001c9e: PUSH1 0xe8
00001ca0: SHR
00001ca1: SWAP1
00001ca2: PUSH1 0x2c
00001ca4: DUP10
00001ca5: ADD
00001ca6: CALLDATALOAD
00001ca7: PUSH1 0xf8
00001ca9: SHR
00001caa: SWAP1
00001cab: PUSH0
00001cac: SWAP1
00001cad: DUP5
00001cae: DUP7
00001caf: LT
00001cb0: PUSH1 0x01
00001cb2: DUP2
00001cb3: EQ
00001cb4: PUSH2 0x1cc5
00001cb7: JUMPI
00001cb8: DUP6
00001cb9: DUP3
00001cba: MSTORE
00001cbb: DUP7
00001cbc: PUSH1 0x20
00001cbe: DUP4
00001cbf: ADD
00001cc0: MSTORE
00001cc1: PUSH2 0x1ccf
00001cc4: JUMP
00001cc5: JUMPDEST
00001cc6: DUP7
00001cc7: DUP3
00001cc8: MSTORE
00001cc9: DUP6
00001cca: PUSH1 0x20
00001ccc: DUP4
00001ccd: ADD
00001cce: MSTORE
00001ccf: JUMPDEST
00001cd0: POP
00001cd1: PUSH1 0x60
00001cd3: DUP8
00001cd4: SUB
00001cd5: PUSH2 0x1cdf
00001cd8: JUMPI
00001cd9: DUP4
00001cda: PUSH1 0x40
00001cdc: DUP3
00001cdd: ADD
00001cde: MSTORE
00001cdf: JUMPDEST
00001ce0: DUP7
00001ce1: DUP2
00001ce2: KECCAK256
00001ce3: PUSH32 0xff00000000000000000000000000000000000000000000000000000000000000
00001d04: DUP3
00001d05: MSTORE
00001d06: PUSH1 0x60
00001d08: DUP10
00001d09: SWAP1
00001d0a: SHL
00001d0b: PUSH1 0x01
00001d0d: DUP4
00001d0e: ADD
00001d0f: MSTORE
00001d10: PUSH1 0x15
00001d12: DUP3
00001d13: ADD
00001d14: MSTORE
00001d15: PUSH1 0x35
00001d17: DUP2
00001d18: ADD
00001d19: DUP10
00001d1a: SWAP1
00001d1b: MSTORE
00001d1c: PUSH1 0x55
00001d1e: SWAP1
00001d1f: KECCAK256
00001d20: PUSH1 0x40
00001d22: DUP1
00001d23: MLOAD
00001d24: DUP1
00001d25: DUP3
00001d26: ADD
00001d27: SWAP1
00001d28: SWAP2
00001d29: MSTORE
00001d2a: PUSH1 0x04
00001d2c: DUP2
00001d2d: MSTORE
00001d2e: PUSH32 0x4d30313100000000000000000000000000000000000000000000000000000000
00001d4f: PUSH1 0x20
00001d51: DUP3
00001d52: ADD
00001d53: MSTORE
00001d54: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001d69: SWAP1
00001d6a: SWAP2
00001d6b: AND
00001d6c: SWAP2
00001d6d: POP
00001d6e: CALLER
00001d6f: DUP3
00001d70: EQ
00001d71: PUSH2 0x1da7
00001d74: JUMPI
00001d75: PUSH1 0x40
00001d77: MLOAD
00001d78: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00001d99: DUP2
00001d9a: MSTORE
00001d9b: PUSH1 0x04
00001d9d: ADD
00001d9e: PUSH2 0x0526
00001da1: SWAP2
00001da2: SWAP1
00001da3: PUSH2 0x2a95
00001da6: JUMP
00001da7: JUMPDEST
00001da8: POP
00001da9: PUSH0
00001daa: PUSH0
00001dab: DUP14
00001dac: SGT
00001dad: PUSH2 0x1db6
00001db0: JUMPI
00001db1: DUP12
00001db2: PUSH2 0x1db8
00001db5: JUMP
00001db6: JUMPDEST
00001db7: DUP13
00001db8: JUMPDEST
00001db9: SWAP1
00001dba: POP
00001dbb: DUP3
00001dbc: ISZERO
00001dbd: PUSH2 0x1e45
00001dc0: JUMPI
00001dc1: PUSH4 0xdeadbeef
00001dc6: PUSH1 0x2d
00001dc8: DUP13
00001dc9: ADD
00001dca: CALLDATALOAD
00001dcb: PUSH1 0xf8
00001dcd: SHR
00001dce: ADD
00001dcf: SLOAD
00001dd0: PUSH1 0x40
00001dd2: MLOAD
00001dd3: PUSH32 0x39f8530600000000000000000000000000000000000000000000000000000000
00001df4: DUP2
00001df5: MSTORE
00001df6: PUSH1 0x2e
00001df8: DUP14
00001df9: ADD
00001dfa: SWAP2
00001dfb: SWAP1
00001dfc: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2
00001e1d: DUP14
00001e1e: ADD
00001e1f: DUP1
00001e20: DUP5
00001e21: PUSH1 0x04
00001e23: DUP5
00001e24: ADD
00001e25: CALLDATACOPY
00001e26: PUSH0
00001e27: PUSH0
00001e28: PUSH1 0x04
00001e2a: DUP4
00001e2b: ADD
00001e2c: DUP5
00001e2d: DUP7
00001e2e: GAS
00001e2f: DELEGATECALL
00001e30: PUSH2 0x1e40
00001e33: JUMPI
00001e34: PUSH1 0x40
00001e36: MLOAD
00001e37: SWAP4
00001e38: POP
00001e39: RETURNDATASIZE
00001e3a: PUSH0
00001e3b: DUP6
00001e3c: RETURNDATACOPY
00001e3d: RETURNDATASIZE
00001e3e: DUP5
00001e3f: REVERT
00001e40: JUMPDEST
00001e41: POP
00001e42: POP
00001e43: POP
00001e44: POP
00001e45: JUMPDEST
00001e46: PUSH1 0x40
00001e48: MLOAD
00001e49: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
00001e6a: DUP2
00001e6b: MSTORE
00001e6c: DUP3
00001e6d: PUSH1 0x04
00001e6f: DUP3
00001e70: ADD
00001e71: MSTORE
00001e72: DUP2
00001e73: PUSH1 0x24
00001e75: DUP3
00001e76: ADD
00001e77: MSTORE
00001e78: PUSH0
00001e79: PUSH0
00001e7a: PUSH1 0x44
00001e7c: DUP4
00001e7d: PUSH0
00001e7e: DUP12
00001e7f: GAS
00001e80: CALL
00001e81: PUSH2 0x1e8c
00001e84: JUMPI
00001e85: RETURNDATASIZE
00001e86: PUSH0
00001e87: DUP3
00001e88: RETURNDATACOPY
00001e89: RETURNDATASIZE
00001e8a: DUP2
00001e8b: REVERT
00001e8c: JUMPDEST
00001e8d: POP
00001e8e: POP
00001e8f: POP
00001e90: POP
00001e91: POP
00001e92: POP
00001e93: POP
00001e94: POP
00001e95: POP
00001e96: POP
00001e97: POP
00001e98: POP
00001e99: POP
00001e9a: POP
00001e9b: JUMP
00001e9c: JUMPDEST
00001e9d: PUSH1 0x40
00001e9f: DUP1
00001ea0: MLOAD
00001ea1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001eb6: DUP5
00001eb7: AND
00001eb8: PUSH1 0x24
00001eba: DUP3
00001ebb: ADD
00001ebc: MSTORE
00001ebd: PUSH1 0x44
00001ebf: DUP1
00001ec0: DUP3
00001ec1: ADD
00001ec2: DUP5
00001ec3: SWAP1
00001ec4: MSTORE
00001ec5: DUP3
00001ec6: MLOAD
00001ec7: DUP1
00001ec8: DUP4
00001ec9: SUB
00001eca: SWAP1
00001ecb: SWAP2
00001ecc: ADD
00001ecd: DUP2
00001ece: MSTORE
00001ecf: PUSH1 0x64
00001ed1: SWAP1
00001ed2: SWAP2
00001ed3: ADD
00001ed4: SWAP1
00001ed5: SWAP2
00001ed6: MSTORE
00001ed7: PUSH1 0x20
00001ed9: DUP2
00001eda: ADD
00001edb: DUP1
00001edc: MLOAD
00001edd: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00001efa: AND
00001efb: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
00001f1c: OR
00001f1d: SWAP1
00001f1e: MSTORE
00001f1f: PUSH2 0x1f28
00001f22: DUP5
00001f23: DUP3
00001f24: PUSH2 0x2650
00001f27: JUMP
00001f28: JUMPDEST
00001f29: PUSH2 0x0a0d
00001f2c: JUMPI
00001f2d: PUSH1 0x40
00001f2f: MLOAD
00001f30: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001f45: DUP5
00001f46: DUP2
00001f47: AND
00001f48: PUSH1 0x24
00001f4a: DUP4
00001f4b: ADD
00001f4c: MSTORE
00001f4d: PUSH0
00001f4e: PUSH1 0x44
00001f50: DUP4
00001f51: ADD
00001f52: MSTORE
00001f53: PUSH2 0x1f69
00001f56: SWAP2
00001f57: DUP7
00001f58: SWAP2
00001f59: DUP3
00001f5a: AND
00001f5b: SWAP1
00001f5c: PUSH4 0x095ea7b3
00001f61: SWAP1
00001f62: PUSH1 0x64
00001f64: ADD
00001f65: PUSH2 0x1baa
00001f68: JUMP
00001f69: JUMPDEST
00001f6a: PUSH2 0x0a0d
00001f6d: DUP5
00001f6e: DUP3
00001f6f: PUSH2 0x2597
00001f72: JUMP
00001f73: JUMPDEST
00001f74: PUSH4 0xdeadbeef
00001f79: SLOAD
00001f7a: PUSH1 0x40
00001f7c: DUP1
00001f7d: MLOAD
00001f7e: CALLDATASIZE
00001f7f: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf
00001fa0: DUP2
00001fa1: ADD
00001fa2: DUP3
00001fa3: MSTORE
00001fa4: DUP1
00001fa5: DUP3
00001fa6: ADD
00001fa7: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf
00001fc8: ADD
00001fc9: SWAP1
00001fca: SWAP3
00001fcb: MSTORE
00001fcc: PUSH1 0x60
00001fce: SWAP3
00001fcf: PUSH0
00001fd0: SWAP3
00001fd1: PUSH1 0x01
00001fd3: SWAP2
00001fd4: DUP5
00001fd5: SWAP2
00001fd6: PUSH1 0x5a
00001fd8: DUP1
00001fd9: CALLDATALOAD
00001fda: PUSH1 0xf8
00001fdc: SHR
00001fdd: SWAP3
00001fde: SWAP2
00001fdf: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6
00002000: ADD
00002001: DUP6
00002002: PUSH1 0x59
00002004: PUSH1 0x20
00002006: DUP10
00002007: ADD
00002008: CALLDATACOPY
00002009: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
00002027: PUSH1 0x21
00002029: DUP9
0000202a: ADD
0000202b: MSTORE
0000202c: PUSH1 0x14
0000202e: PUSH1 0x05
00002030: PUSH1 0x25
00002032: DUP10
00002033: ADD
00002034: CALLDATACOPY
00002035: DUP1
00002036: DUP3
00002037: PUSH1 0x39
00002039: DUP10
0000203a: ADD
0000203b: CALLDATACOPY
0000203c: DUP4
0000203d: PUSH2 0x2065
00002040: JUMPI
00002041: PUSH1 0x20
00002043: PUSH0
00002044: PUSH1 0x19
00002046: DUP4
00002047: ADD
00002048: PUSH1 0x21
0000204a: DUP11
0000204b: ADD
0000204c: PUSH0
0000204d: DUP8
0000204e: GAS
0000204f: CALL
00002050: PUSH2 0x2060
00002053: JUMPI
00002054: PUSH1 0x40
00002056: MLOAD
00002057: SWAP2
00002058: POP
00002059: RETURNDATASIZE
0000205a: PUSH0
0000205b: DUP4
0000205c: RETURNDATACOPY
0000205d: RETURNDATASIZE
0000205e: DUP3
0000205f: REVERT
00002060: JUMPDEST
00002061: PUSH0
00002062: MLOAD
00002063: SWAP5
00002064: POP
00002065: JUMPDEST
00002066: POP
00002067: POP
00002068: POP
00002069: PUSH1 0x25
0000206b: DUP5
0000206c: ADD
0000206d: MLOAD
0000206e: PUSH1 0x20
00002070: SHR
00002071: PUSH29 0x0200000000000000000000000000000000000000000000000000000000
0000208f: OR
00002090: PUSH1 0x21
00002092: DUP6
00002093: ADD
00002094: MSTORE
00002095: DUP1
00002096: DUP1
00002097: PUSH2 0x209d
0000209a: JUMPI
0000209b: POP
0000209c: DUP2
0000209d: JUMPDEST
0000209e: PUSH2 0x20a5
000020a1: JUMPI
000020a2: PUSH0
000020a3: SWAP3
000020a4: POP
000020a5: JUMPDEST
000020a6: POP
000020a7: SWAP2
000020a8: SWAP5
000020a9: SWAP1
000020aa: SWAP4
000020ab: POP
000020ac: SWAP2
000020ad: POP
000020ae: POP
000020af: JUMP
000020b0: JUMPDEST
000020b1: PUSH1 0x60
000020b3: PUSH0
000020b4: PUSH0
000020b5: PUSH0
000020b6: PUSH0
000020b7: PUSH0
000020b8: PUSH0
000020b9: PUSH1 0x60
000020bb: PUSH1 0x01
000020bd: PUSH4 0xdeadbeef
000020c2: ADD
000020c3: SLOAD
000020c4: PUSH1 0x5a
000020c6: CALLDATALOAD
000020c7: PUSH1 0xf8
000020c9: SHR
000020ca: SWAP7
000020cb: POP
000020cc: PUSH1 0x7b
000020ce: CALLDATALOAD
000020cf: SWAP5
000020d0: POP
000020d1: PUSH1 0x9c
000020d3: CALLDATALOAD
000020d4: SWAP4
000020d5: POP
000020d6: PUSH1 0xbc
000020d8: CALLDATALOAD
000020d9: PUSH1 0xf8
000020db: SHR
000020dc: SWAP3
000020dd: POP
000020de: PUSH1 0x5a
000020e0: CALLDATASIZE
000020e1: SUB
000020e2: PUSH1 0x04
000020e4: DUP2
000020e5: ADD
000020e6: PUSH1 0x40
000020e8: DUP6
000020e9: MUL
000020ea: PUSH1 0xc0
000020ec: ADD
000020ed: DUP1
000020ee: PUSH1 0x01
000020f0: ADD
000020f1: DUP3
000020f2: ADD
000020f3: PUSH1 0x40
000020f5: MLOAD
000020f6: SWAP6
000020f7: POP
000020f8: DUP1
000020f9: DUP7
000020fa: MSTORE
000020fb: DUP1
000020fc: PUSH1 0x20
000020fe: DUP8
000020ff: ADD
00002100: ADD
00002101: PUSH1 0x40
00002103: MSTORE
00002104: POP
00002105: PUSH1 0x01
00002107: PUSH1 0x20
00002109: DUP7
0000210a: ADD
0000210b: MSTORE8
0000210c: DUP1
0000210d: PUSH1 0x21
0000210f: ADD
00002110: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
0000212e: DUP2
0000212f: DUP8
00002130: ADD
00002131: MSTORE
00002132: DUP4
00002133: PUSH1 0x5a
00002135: DUP4
00002136: PUSH1 0x25
00002138: ADD
00002139: DUP9
0000213a: ADD
0000213b: CALLDATACOPY
0000213c: PUSH0
0000213d: PUSH0
0000213e: DUP5
0000213f: DUP4
00002140: DUP10
00002141: ADD
00002142: DUP9
00002143: GAS
00002144: DELEGATECALL
00002145: PUSH2 0x2155
00002148: JUMPI
00002149: PUSH1 0x40
0000214b: MLOAD
0000214c: SWAP4
0000214d: POP
0000214e: RETURNDATASIZE
0000214f: PUSH0
00002150: DUP6
00002151: RETURNDATACOPY
00002152: RETURNDATASIZE
00002153: DUP5
00002154: REVERT
00002155: JUMPDEST
00002156: POP
00002157: POP
00002158: POP
00002159: POP
0000215a: POP
0000215b: RETURNDATASIZE
0000215c: PUSH29 0x0200000000000000000000000000000000000000000000000000000000
0000217a: PUSH1 0x21
0000217c: DUP4
0000217d: ADD
0000217e: MSTORE
0000217f: DUP1
00002180: PUSH1 0x25
00002182: DUP4
00002183: ADD
00002184: MSTORE
00002185: DUP1
00002186: PUSH0
00002187: PUSH1 0x45
00002189: DUP5
0000218a: ADD
0000218b: RETURNDATACOPY
0000218c: POP
0000218d: PUSH1 0x45
0000218f: DUP2
00002190: ADD
00002191: MLOAD
00002192: SWAP5
00002193: POP
00002194: DUP3
00002195: DUP5
00002196: DUP7
00002197: SUB
00002198: SLT
00002199: ISZERO
0000219a: PUSH2 0x2213
0000219d: JUMPI
0000219e: DUP6
0000219f: ISZERO
000021a0: PUSH2 0x2206
000021a3: JUMPI
000021a4: PUSH1 0x40
000021a6: DUP1
000021a7: MLOAD
000021a8: DUP1
000021a9: DUP3
000021aa: ADD
000021ab: DUP3
000021ac: MSTORE
000021ad: PUSH1 0x04
000021af: DUP1
000021b0: DUP3
000021b1: MSTORE
000021b2: PUSH32 0x4d30313400000000000000000000000000000000000000000000000000000000
000021d3: PUSH1 0x20
000021d5: DUP4
000021d6: ADD
000021d7: MSTORE
000021d8: SWAP2
000021d9: MLOAD
000021da: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000021fb: DUP2
000021fc: MSTORE
000021fd: PUSH2 0x0526
00002200: SWAP3
00002201: ADD
00002202: PUSH2 0x2a95
00002205: JUMP
00002206: JUMPDEST
00002207: SWAP8
00002208: PUSH0
00002209: SWAP8
0000220a: POP
0000220b: SWAP6
0000220c: POP
0000220d: POP
0000220e: POP
0000220f: POP
00002210: POP
00002211: POP
00002212: JUMP
00002213: JUMPDEST
00002214: SWAP8
00002215: PUSH1 0x01
00002217: SWAP8
00002218: POP
00002219: SWAP6
0000221a: POP
0000221b: POP
0000221c: POP
0000221d: POP
0000221e: POP
0000221f: POP
00002220: JUMP
00002221: JUMPDEST
00002222: PUSH0
00002223: PUSH1 0x5a
00002225: DUP1
00002226: CALLDATALOAD
00002227: PUSH1 0xf8
00002229: SHR
0000222a: SWAP1
0000222b: PUSH1 0x05
0000222d: CALLDATALOAD
0000222e: PUSH1 0x60
00002230: SHR
00002231: SWAP1
00002232: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6
00002253: CALLDATASIZE
00002254: ADD
00002255: PUSH1 0x7c
00002257: CALLDATALOAD
00002258: DUP5
00002259: PUSH2 0x22c8
0000225c: JUMPI
0000225d: PUSH0
0000225e: PUSH0
0000225f: PUSH4 0xdeadbeef
00002264: ADD
00002265: SLOAD
00002266: PUSH1 0x40
00002268: MLOAD
00002269: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
00002287: DUP2
00002288: MSTORE
00002289: DUP7
0000228a: PUSH1 0x04
0000228c: DUP3
0000228d: ADD
0000228e: MSTORE
0000228f: DUP5
00002290: DUP7
00002291: PUSH1 0x18
00002293: DUP4
00002294: ADD
00002295: CALLDATACOPY
00002296: PUSH1 0x20
00002298: PUSH0
00002299: PUSH1 0x18
0000229b: DUP8
0000229c: ADD
0000229d: DUP4
0000229e: DUP6
0000229f: GAS
000022a0: DELEGATECALL
000022a1: PUSH2 0x22af
000022a4: JUMPI
000022a5: PUSH1 0x40
000022a7: MLOAD
000022a8: RETURNDATASIZE
000022a9: PUSH0
000022aa: DUP3
000022ab: RETURNDATACOPY
000022ac: RETURNDATASIZE
000022ad: DUP2
000022ae: REVERT
000022af: JUMPDEST
000022b0: POP
000022b1: POP
000022b2: PUSH0
000022b3: MLOAD
000022b4: SWAP1
000022b5: POP
000022b6: DUP1
000022b7: PUSH2 0x22c6
000022ba: JUMPI
000022bb: PUSH0
000022bc: SWAP7
000022bd: POP
000022be: POP
000022bf: POP
000022c0: POP
000022c1: POP
000022c2: POP
000022c3: POP
000022c4: SWAP1
000022c5: JUMP
000022c6: JUMPDEST
000022c7: POP
000022c8: JUMPDEST
000022c9: PUSH4 0xdeadbeef
000022ce: SLOAD
000022cf: PUSH1 0x40
000022d1: MLOAD
000022d2: PUSH32 0xff0f2b9a00000000000000000000000000000000000000000000000000000000
000022f3: DUP2
000022f4: MSTORE
000022f5: PUSH1 0x9c
000022f7: SWAP2
000022f8: SWAP1
000022f9: PUSH1 0x03
000022fb: PUSH1 0x9d
000022fd: CALLDATALOAD
000022fe: PUSH1 0xf0
00002300: SHR
00002301: ADD
00002302: DUP1
00002303: DUP5
00002304: PUSH1 0x04
00002306: DUP5
00002307: ADD
00002308: CALLDATACOPY
00002309: PUSH0
0000230a: DUP2
0000230b: PUSH1 0x04
0000230d: ADD
0000230e: DUP4
0000230f: ADD
00002310: MSTORE8
00002311: DUP9
00002312: DUP2
00002313: PUSH1 0x05
00002315: ADD
00002316: DUP4
00002317: ADD
00002318: MSTORE8
00002319: DUP8
0000231a: PUSH1 0x60
0000231c: SHL
0000231d: DUP2
0000231e: PUSH1 0x06
00002320: ADD
00002321: DUP4
00002322: ADD
00002323: MSTORE
00002324: DUP5
00002325: DUP2
00002326: PUSH1 0x1a
00002328: ADD
00002329: DUP4
0000232a: ADD
0000232b: MSTORE
0000232c: DUP1
0000232d: DUP5
0000232e: ADD
0000232f: CALLDATASIZE
00002330: SUB
00002331: DUP2
00002332: DUP6
00002333: ADD
00002334: DUP3
00002335: PUSH1 0x3a
00002337: ADD
00002338: DUP5
00002339: ADD
0000233a: CALLDATACOPY
0000233b: POP
0000233c: PUSH0
0000233d: PUSH0
0000233e: PUSH1 0x3a
00002340: DUP6
00002341: CALLDATASIZE
00002342: SUB
00002343: ADD
00002344: DUP4
00002345: DUP6
00002346: GAS
00002347: DELEGATECALL
00002348: PUSH2 0x2356
0000234b: JUMPI
0000234c: PUSH1 0x40
0000234e: MLOAD
0000234f: RETURNDATASIZE
00002350: PUSH0
00002351: DUP3
00002352: RETURNDATACOPY
00002353: RETURNDATASIZE
00002354: DUP2
00002355: REVERT
00002356: JUMPDEST
00002357: POP
00002358: POP
00002359: PUSH1 0x01
0000235b: SWAP7
0000235c: POP
0000235d: POP
0000235e: POP
0000235f: POP
00002360: POP
00002361: POP
00002362: POP
00002363: SWAP1
00002364: JUMP
00002365: JUMPDEST
00002366: PUSH0
00002367: PUSH1 0x60
00002369: PUSH2 0x2391
0000236c: PUSH1 0x40
0000236e: MLOAD
0000236f: DUP1
00002370: PUSH1 0x80
00002372: ADD
00002373: PUSH1 0x40
00002375: MSTORE
00002376: DUP1
00002377: PUSH0
00002378: ISZERO
00002379: ISZERO
0000237a: DUP2
0000237b: MSTORE
0000237c: PUSH1 0x20
0000237e: ADD
0000237f: PUSH0
00002380: DUP2
00002381: MSTORE
00002382: PUSH1 0x20
00002384: ADD
00002385: PUSH0
00002386: DUP2
00002387: MSTORE
00002388: PUSH1 0x20
0000238a: ADD
0000238b: PUSH0
0000238c: DUP2
0000238d: MSTORE
0000238e: POP
0000238f: SWAP1
00002390: JUMP
00002391: JUMPDEST
00002392: PUSH0
00002393: PUSH0
00002394: PUSH0
00002395: PUSH0
00002396: PUSH1 0x5a
00002398: CALLDATALOAD
00002399: PUSH1 0xf8
0000239b: SHR
0000239c: DUP6
0000239d: MSTORE
0000239e: PUSH1 0x9c
000023a0: CALLDATALOAD
000023a1: PUSH1 0x20
000023a3: DUP7
000023a4: ADD
000023a5: MSTORE
000023a6: PUSH1 0x7b
000023a8: CALLDATALOAD
000023a9: PUSH1 0x40
000023ab: DUP7
000023ac: ADD
000023ad: MSTORE
000023ae: PUSH1 0xbc
000023b0: CALLDATALOAD
000023b1: PUSH1 0xf8
000023b3: SHR
000023b4: SWAP4
000023b5: POP
000023b6: PUSH1 0xbd
000023b8: SWAP1
000023b9: POP
000023ba: DUP1
000023bb: CALLDATASIZE
000023bc: SUB
000023bd: SWAP2
000023be: POP
000023bf: PUSH1 0x01
000023c1: DUP2
000023c2: ADD
000023c3: CALLDATALOAD
000023c4: PUSH1 0xf0
000023c6: SHR
000023c7: SWAP3
000023c8: POP
000023c9: PUSH1 0x03
000023cb: DUP4
000023cc: ADD
000023cd: SWAP3
000023ce: POP
000023cf: PUSH1 0x40
000023d1: MLOAD
000023d2: SWAP6
000023d3: POP
000023d4: DUP4
000023d5: PUSH1 0x40
000023d7: MUL
000023d8: DUP3
000023d9: ADD
000023da: PUSH2 0x0106
000023dd: ADD
000023de: DUP1
000023df: DUP8
000023e0: ADD
000023e1: PUSH1 0x40
000023e3: MSTORE
000023e4: POP
000023e5: PUSH0
000023e6: PUSH0
000023e7: PUSH0
000023e8: PUSH0
000023e9: PUSH0
000023ea: PUSH1 0x5a
000023ec: SWAP2
000023ed: POP
000023ee: DUP2
000023ef: CALLDATASIZE
000023f0: SUB
000023f1: SWAP1
000023f2: POP
000023f3: PUSH1 0x01
000023f5: PUSH4 0xdeadbeef
000023fa: ADD
000023fb: SLOAD
000023fc: PUSH1 0x40
000023fe: MLOAD
000023ff: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
0000241d: DUP2
0000241e: MSTORE
0000241f: DUP3
00002420: DUP5
00002421: PUSH1 0x04
00002423: DUP4
00002424: ADD
00002425: CALLDATACOPY
00002426: PUSH0
00002427: PUSH0
00002428: PUSH1 0x04
0000242a: DUP6
0000242b: ADD
0000242c: DUP4
0000242d: DUP6
0000242e: GAS
0000242f: DELEGATECALL
00002430: PUSH2 0x243e
00002433: JUMPI
00002434: PUSH1 0x40
00002436: MLOAD
00002437: RETURNDATASIZE
00002438: PUSH0
00002439: DUP3
0000243a: RETURNDATACOPY
0000243b: RETURNDATASIZE
0000243c: DUP2
0000243d: REVERT
0000243e: JUMPDEST
0000243f: POP
00002440: POP
00002441: RETURNDATASIZE
00002442: SWAP5
00002443: POP
00002444: DUP8
00002445: PUSH1 0x45
00002447: ADD
00002448: DUP12
00002449: ADD
0000244a: DUP6
0000244b: DUP2
0000244c: MSTORE
0000244d: DUP6
0000244e: PUSH0
0000244f: PUSH1 0x20
00002451: DUP4
00002452: ADD
00002453: RETURNDATACOPY
00002454: PUSH1 0x20
00002456: DUP2
00002457: ADD
00002458: MLOAD
00002459: PUSH1 0x60
0000245b: DUP13
0000245c: ADD
0000245d: MSTORE
0000245e: PUSH1 0xa0
00002460: DUP2
00002461: ADD
00002462: MLOAD
00002463: SWAP5
00002464: POP
00002465: PUSH1 0x80
00002467: DUP2
00002468: ADD
00002469: MLOAD
0000246a: PUSH1 0x20
0000246c: DUP2
0000246d: MUL
0000246e: PUSH1 0xc0
00002470: ADD
00002471: DUP3
00002472: ADD
00002473: MLOAD
00002474: SWAP5
00002475: POP
00002476: POP
00002477: POP
00002478: DUP10
00002479: PUSH1 0x20
0000247b: ADD
0000247c: MLOAD
0000247d: DUP11
0000247e: PUSH1 0x40
00002480: ADD
00002481: MLOAD
00002482: DUP12
00002483: PUSH1 0x60
00002485: ADD
00002486: MLOAD
00002487: SUB
00002488: SLT
00002489: ISZERO
0000248a: PUSH2 0x2508
0000248d: JUMPI
0000248e: DUP10
0000248f: MLOAD
00002490: ISZERO
00002491: PUSH2 0x24f7
00002494: JUMPI
00002495: PUSH1 0x40
00002497: DUP1
00002498: MLOAD
00002499: DUP1
0000249a: DUP3
0000249b: ADD
0000249c: DUP3
0000249d: MSTORE
0000249e: PUSH1 0x04
000024a0: DUP1
000024a1: DUP3
000024a2: MSTORE
000024a3: PUSH32 0x4d30313400000000000000000000000000000000000000000000000000000000
000024c4: PUSH1 0x20
000024c6: DUP4
000024c7: ADD
000024c8: MSTORE
000024c9: SWAP2
000024ca: MLOAD
000024cb: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000024ec: DUP2
000024ed: MSTORE
000024ee: PUSH2 0x0526
000024f1: SWAP3
000024f2: ADD
000024f3: PUSH2 0x2a95
000024f6: JUMP
000024f7: JUMPDEST
000024f8: PUSH0
000024f9: SWAP12
000024fa: POP
000024fb: POP
000024fc: POP
000024fd: POP
000024fe: POP
000024ff: POP
00002500: POP
00002501: POP
00002502: POP
00002503: POP
00002504: POP
00002505: POP
00002506: SWAP1
00002507: JUMP
00002508: JUMPDEST
00002509: PUSH1 0x01
0000250b: PUSH4 0xdeadbeef
00002510: ADD
00002511: SLOAD
00002512: PUSH32 0xff0f2b9a00000000000000000000000000000000000000000000000000000000
00002533: DUP13
00002534: MSTORE
00002535: DUP5
00002536: PUSH1 0x04
00002538: DUP14
00002539: ADD
0000253a: MSTORE
0000253b: DUP4
0000253c: PUSH1 0x24
0000253e: DUP14
0000253f: ADD
00002540: MSTORE
00002541: DUP9
00002542: DUP8
00002543: PUSH1 0x44
00002545: DUP15
00002546: ADD
00002547: CALLDATACOPY
00002548: PUSH1 0x01
0000254a: DUP10
0000254b: PUSH1 0x44
0000254d: ADD
0000254e: DUP14
0000254f: ADD
00002550: MSTORE8
00002551: DUP10
00002552: DUP7
00002553: DUP11
00002554: ADD
00002555: PUSH1 0x65
00002557: ADD
00002558: DUP14
00002559: ADD
0000255a: MSTORE8
0000255b: DUP9
0000255c: DUP9
0000255d: SUB
0000255e: DUP10
0000255f: DUP9
00002560: ADD
00002561: DUP8
00002562: DUP12
00002563: ADD
00002564: PUSH1 0x66
00002566: ADD
00002567: DUP15
00002568: ADD
00002569: CALLDATACOPY
0000256a: PUSH0
0000256b: PUSH0
0000256c: PUSH1 0x66
0000256e: DUP9
0000256f: ADD
00002570: DUP11
00002571: ADD
00002572: DUP15
00002573: DUP5
00002574: GAS
00002575: DELEGATECALL
00002576: PUSH2 0x2584
00002579: JUMPI
0000257a: PUSH1 0x40
0000257c: MLOAD
0000257d: RETURNDATASIZE
0000257e: PUSH0
0000257f: DUP3
00002580: RETURNDATACOPY
00002581: RETURNDATASIZE
00002582: DUP2
00002583: REVERT
00002584: JUMPDEST
00002585: POP
00002586: PUSH1 0x01
00002588: SWAP12
00002589: POP
0000258a: POP
0000258b: POP
0000258c: POP
0000258d: POP
0000258e: POP
0000258f: POP
00002590: POP
00002591: POP
00002592: POP
00002593: POP
00002594: POP
00002595: SWAP1
00002596: JUMP
00002597: JUMPDEST
00002598: PUSH0
00002599: PUSH0
0000259a: PUSH1 0x20
0000259c: PUSH0
0000259d: DUP5
0000259e: MLOAD
0000259f: PUSH1 0x20
000025a1: DUP7
000025a2: ADD
000025a3: PUSH0
000025a4: DUP9
000025a5: GAS
000025a6: CALL
000025a7: DUP1
000025a8: PUSH2 0x25b6
000025ab: JUMPI
000025ac: PUSH1 0x40
000025ae: MLOAD
000025af: RETURNDATASIZE
000025b0: PUSH0
000025b1: DUP3
000025b2: RETURNDATACOPY
000025b3: RETURNDATASIZE
000025b4: DUP2
000025b5: REVERT
000025b6: JUMPDEST
000025b7: POP
000025b8: POP
000025b9: PUSH0
000025ba: MLOAD
000025bb: RETURNDATASIZE
000025bc: SWAP2
000025bd: POP
000025be: DUP2
000025bf: ISZERO
000025c0: PUSH2 0x25cd
000025c3: JUMPI
000025c4: DUP1
000025c5: PUSH1 0x01
000025c7: EQ
000025c8: ISZERO
000025c9: PUSH2 0x25e7
000025cc: JUMP
000025cd: JUMPDEST
000025ce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000025e3: DUP5
000025e4: AND
000025e5: EXTCODESIZE
000025e6: ISZERO
000025e7: JUMPDEST
000025e8: ISZERO
000025e9: PUSH2 0x0a0d
000025ec: JUMPI
000025ed: PUSH1 0x40
000025ef: MLOAD
000025f0: PUSH32 0x5274afe700000000000000000000000000000000000000000000000000000000
00002611: DUP2
00002612: MSTORE
00002613: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002628: DUP6
00002629: AND
0000262a: PUSH1 0x04
0000262c: DUP3
0000262d: ADD
0000262e: MSTORE
0000262f: PUSH1 0x24
00002631: ADD
00002632: PUSH2 0x0526
00002635: JUMP
00002636: JUMPDEST
00002637: PUSH0
00002638: PUSH0
00002639: PUSH2 0x2645
0000263c: DUP5
0000263d: DUP5
0000263e: ADD
0000263f: PUSH1 0x20
00002641: ADD
00002642: MLOAD
00002643: SWAP1
00002644: JUMP
00002645: JUMPDEST
00002646: PUSH1 0x60
00002648: SHR
00002649: SWAP5
0000264a: SWAP4
0000264b: POP
0000264c: POP
0000264d: POP
0000264e: POP
0000264f: JUMP
00002650: JUMPDEST
00002651: PUSH0
00002652: PUSH0
00002653: PUSH0
00002654: PUSH0
00002655: PUSH1 0x20
00002657: PUSH0
00002658: DUP7
00002659: MLOAD
0000265a: PUSH1 0x20
0000265c: DUP9
0000265d: ADD
0000265e: PUSH0
0000265f: DUP11
00002660: GAS
00002661: CALL
00002662: SWAP3
00002663: POP
00002664: RETURNDATASIZE
00002665: SWAP2
00002666: POP
00002667: PUSH0
00002668: MLOAD
00002669: SWAP1
0000266a: POP
0000266b: DUP3
0000266c: DUP1
0000266d: ISZERO
0000266e: PUSH2 0x269c
00002671: JUMPI
00002672: POP
00002673: DUP2
00002674: ISZERO
00002675: PUSH2 0x2681
00002678: JUMPI
00002679: DUP1
0000267a: PUSH1 0x01
0000267c: EQ
0000267d: PUSH2 0x269c
00002680: JUMP
00002681: JUMPDEST
00002682: PUSH0
00002683: DUP7
00002684: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002699: AND
0000269a: EXTCODESIZE
0000269b: GT
0000269c: JUMPDEST
0000269d: SWAP7
0000269e: SWAP6
0000269f: POP
000026a0: POP
000026a1: POP
000026a2: POP
000026a3: POP
000026a4: POP
000026a5: JUMP
000026a6: JUMPDEST
000026a7: PUSH0
000026a8: PUSH0
000026a9: DUP4
000026aa: PUSH1 0x1f
000026ac: DUP5
000026ad: ADD
000026ae: SLT
000026af: PUSH2 0x26b6
000026b2: JUMPI
000026b3: PUSH0
000026b4: PUSH0
000026b5: REVERT
000026b6: JUMPDEST
000026b7: POP
000026b8: DUP2
000026b9: CALLDATALOAD
000026ba: PUSH8 0xffffffffffffffff
000026c3: DUP2
000026c4: GT
000026c5: ISZERO
000026c6: PUSH2 0x26cd
000026c9: JUMPI
000026ca: PUSH0
000026cb: PUSH0
000026cc: REVERT
000026cd: JUMPDEST
000026ce: PUSH1 0x20
000026d0: DUP4
000026d1: ADD
000026d2: SWAP2
000026d3: POP
000026d4: DUP4
000026d5: PUSH1 0x20
000026d7: DUP3
000026d8: DUP6
000026d9: ADD
000026da: ADD
000026db: GT
000026dc: ISZERO
000026dd: PUSH2 0x26e4
000026e0: JUMPI
000026e1: PUSH0
000026e2: PUSH0
000026e3: REVERT
000026e4: JUMPDEST
000026e5: SWAP3
000026e6: POP
000026e7: SWAP3
000026e8: SWAP1
000026e9: POP
000026ea: JUMP
000026eb: JUMPDEST
000026ec: PUSH0
000026ed: PUSH0
000026ee: PUSH1 0x20
000026f0: DUP4
000026f1: DUP6
000026f2: SUB
000026f3: SLT
000026f4: ISZERO
000026f5: PUSH2 0x26fc
000026f8: JUMPI
000026f9: PUSH0
000026fa: PUSH0
000026fb: REVERT
000026fc: JUMPDEST
000026fd: DUP3
000026fe: CALLDATALOAD
000026ff: PUSH8 0xffffffffffffffff
00002708: DUP2
00002709: GT
0000270a: ISZERO
0000270b: PUSH2 0x2712
0000270e: JUMPI
0000270f: PUSH0
00002710: PUSH0
00002711: REVERT
00002712: JUMPDEST
00002713: PUSH2 0x271e
00002716: DUP6
00002717: DUP3
00002718: DUP7
00002719: ADD
0000271a: PUSH2 0x26a6
0000271d: JUMP
0000271e: JUMPDEST
0000271f: SWAP1
00002720: SWAP7
00002721: SWAP1
00002722: SWAP6
00002723: POP
00002724: SWAP4
00002725: POP
00002726: POP
00002727: POP
00002728: POP
00002729: JUMP
0000272a: JUMPDEST
0000272b: DUP1
0000272c: CALLDATALOAD
0000272d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002742: DUP2
00002743: AND
00002744: DUP2
00002745: EQ
00002746: PUSH2 0x18db
00002749: JUMPI
0000274a: PUSH0
0000274b: PUSH0
0000274c: REVERT
0000274d: JUMPDEST
0000274e: PUSH0
0000274f: PUSH1 0x20
00002751: DUP3
00002752: DUP5
00002753: SUB
00002754: SLT
00002755: ISZERO
00002756: PUSH2 0x275d
00002759: JUMPI
0000275a: PUSH0
0000275b: PUSH0
0000275c: REVERT
0000275d: JUMPDEST
0000275e: PUSH2 0x18b5
00002761: DUP3
00002762: PUSH2 0x272a
00002765: JUMP
00002766: JUMPDEST
00002767: DUP1
00002768: CALLDATALOAD
00002769: PUSH1 0xff
0000276b: DUP2
0000276c: AND
0000276d: DUP2
0000276e: EQ
0000276f: PUSH2 0x18db
00002772: JUMPI
00002773: PUSH0
00002774: PUSH0
00002775: REVERT
00002776: JUMPDEST
00002777: PUSH0
00002778: PUSH1 0x20
0000277a: DUP3
0000277b: DUP5
0000277c: SUB
0000277d: SLT
0000277e: ISZERO
0000277f: PUSH2 0x2786
00002782: JUMPI
00002783: PUSH0
00002784: PUSH0
00002785: REVERT
00002786: JUMPDEST
00002787: PUSH2 0x18b5
0000278a: DUP3
0000278b: PUSH2 0x2766
0000278e: JUMP
0000278f: JUMPDEST
00002790: PUSH0
00002791: PUSH0
00002792: PUSH0
00002793: PUSH0
00002794: PUSH1 0x60
00002796: DUP6
00002797: DUP8
00002798: SUB
00002799: SLT
0000279a: ISZERO
0000279b: PUSH2 0x27a2
0000279e: JUMPI
0000279f: PUSH0
000027a0: PUSH0
000027a1: REVERT
000027a2: JUMPDEST
000027a3: DUP5
000027a4: CALLDATALOAD
000027a5: SWAP4
000027a6: POP
000027a7: PUSH1 0x20
000027a9: DUP6
000027aa: ADD
000027ab: CALLDATALOAD
000027ac: SWAP3
000027ad: POP
000027ae: PUSH1 0x40
000027b0: DUP6
000027b1: ADD
000027b2: CALLDATALOAD
000027b3: PUSH8 0xffffffffffffffff
000027bc: DUP2
000027bd: GT
000027be: ISZERO
000027bf: PUSH2 0x27c6
000027c2: JUMPI
000027c3: PUSH0
000027c4: PUSH0
000027c5: REVERT
000027c6: JUMPDEST
000027c7: PUSH2 0x27d2
000027ca: DUP8
000027cb: DUP3
000027cc: DUP9
000027cd: ADD
000027ce: PUSH2 0x26a6
000027d1: JUMP
000027d2: JUMPDEST
000027d3: SWAP6
000027d4: SWAP9
000027d5: SWAP5
000027d6: SWAP8
000027d7: POP
000027d8: SWAP6
000027d9: POP
000027da: POP
000027db: POP
000027dc: POP
000027dd: JUMP
000027de: JUMPDEST
000027df: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002800: PUSH0
00002801: MSTORE
00002802: PUSH1 0x41
00002804: PUSH1 0x04
00002806: MSTORE
00002807: PUSH1 0x24
00002809: PUSH0
0000280a: REVERT
0000280b: JUMPDEST
0000280c: PUSH0
0000280d: PUSH0
0000280e: PUSH1 0x40
00002810: DUP4
00002811: DUP6
00002812: SUB
00002813: SLT
00002814: ISZERO
00002815: PUSH2 0x281c
00002818: JUMPI
00002819: PUSH0
0000281a: PUSH0
0000281b: REVERT
0000281c: JUMPDEST
0000281d: DUP3
0000281e: CALLDATALOAD
0000281f: SWAP2
00002820: POP
00002821: PUSH1 0x20
00002823: DUP4
00002824: ADD
00002825: CALLDATALOAD
00002826: PUSH8 0xffffffffffffffff
0000282f: DUP2
00002830: GT
00002831: ISZERO
00002832: PUSH2 0x2839
00002835: JUMPI
00002836: PUSH0
00002837: PUSH0
00002838: REVERT
00002839: JUMPDEST
0000283a: DUP4
0000283b: ADD
0000283c: PUSH1 0x1f
0000283e: DUP2
0000283f: ADD
00002840: DUP6
00002841: SGT
00002842: PUSH2 0x2849
00002845: JUMPI
00002846: PUSH0
00002847: PUSH0
00002848: REVERT
00002849: JUMPDEST
0000284a: DUP1
0000284b: CALLDATALOAD
0000284c: PUSH8 0xffffffffffffffff
00002855: DUP2
00002856: GT
00002857: ISZERO
00002858: PUSH2 0x2863
0000285b: JUMPI
0000285c: PUSH2 0x2863
0000285f: PUSH2 0x27de
00002862: JUMP
00002863: JUMPDEST
00002864: PUSH1 0x40
00002866: MLOAD
00002867: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00002888: PUSH1 0x3f
0000288a: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000028ab: PUSH1 0x1f
000028ad: DUP6
000028ae: ADD
000028af: AND
000028b0: ADD
000028b1: AND
000028b2: DUP2
000028b3: ADD
000028b4: DUP2
000028b5: DUP2
000028b6: LT
000028b7: PUSH8 0xffffffffffffffff
000028c0: DUP3
000028c1: GT
000028c2: OR
000028c3: ISZERO
000028c4: PUSH2 0x28cf
000028c7: JUMPI
000028c8: PUSH2 0x28cf
000028cb: PUSH2 0x27de
000028ce: JUMP
000028cf: JUMPDEST
000028d0: PUSH1 0x40
000028d2: MSTORE
000028d3: DUP2
000028d4: DUP2
000028d5: MSTORE
000028d6: DUP3
000028d7: DUP3
000028d8: ADD
000028d9: PUSH1 0x20
000028db: ADD
000028dc: DUP8
000028dd: LT
000028de: ISZERO
000028df: PUSH2 0x28e6
000028e2: JUMPI
000028e3: PUSH0
000028e4: PUSH0
000028e5: REVERT
000028e6: JUMPDEST
000028e7: DUP2
000028e8: PUSH1 0x20
000028ea: DUP5
000028eb: ADD
000028ec: PUSH1 0x20
000028ee: DUP4
000028ef: ADD
000028f0: CALLDATACOPY
000028f1: PUSH0
000028f2: PUSH1 0x20
000028f4: DUP4
000028f5: DUP4
000028f6: ADD
000028f7: ADD
000028f8: MSTORE
000028f9: DUP1
000028fa: SWAP4
000028fb: POP
000028fc: POP
000028fd: POP
000028fe: POP
000028ff: SWAP3
00002900: POP
00002901: SWAP3
00002902: SWAP1
00002903: POP
00002904: JUMP
00002905: JUMPDEST
00002906: PUSH0
00002907: PUSH0
00002908: DUP4
00002909: PUSH1 0x1f
0000290b: DUP5
0000290c: ADD
0000290d: SLT
0000290e: PUSH2 0x2915
00002911: JUMPI
00002912: PUSH0
00002913: PUSH0
00002914: REVERT
00002915: JUMPDEST
00002916: POP
00002917: DUP2
00002918: CALLDATALOAD
00002919: PUSH8 0xffffffffffffffff
00002922: DUP2
00002923: GT
00002924: ISZERO
00002925: PUSH2 0x292c
00002928: JUMPI
00002929: PUSH0
0000292a: PUSH0
0000292b: REVERT
0000292c: JUMPDEST
0000292d: PUSH1 0x20
0000292f: DUP4
00002930: ADD
00002931: SWAP2
00002932: POP
00002933: DUP4
00002934: PUSH1 0x20
00002936: DUP3
00002937: PUSH1 0x05
00002939: SHL
0000293a: DUP6
0000293b: ADD
0000293c: ADD
0000293d: GT
0000293e: ISZERO
0000293f: PUSH2 0x26e4
00002942: JUMPI
00002943: PUSH0
00002944: PUSH0
00002945: REVERT
00002946: JUMPDEST
00002947: PUSH0
00002948: PUSH0
00002949: PUSH0
0000294a: PUSH0
0000294b: PUSH1 0x40
0000294d: DUP6
0000294e: DUP8
0000294f: SUB
00002950: SLT
00002951: ISZERO
00002952: PUSH2 0x2959
00002955: JUMPI
00002956: PUSH0
00002957: PUSH0
00002958: REVERT
00002959: JUMPDEST
0000295a: DUP5
0000295b: CALLDATALOAD
0000295c: PUSH8 0xffffffffffffffff
00002965: DUP2
00002966: GT
00002967: ISZERO
00002968: PUSH2 0x296f
0000296b: JUMPI
0000296c: PUSH0
0000296d: PUSH0
0000296e: REVERT
0000296f: JUMPDEST
00002970: PUSH2 0x297b
00002973: DUP8
00002974: DUP3
00002975: DUP9
00002976: ADD
00002977: PUSH2 0x2905
0000297a: JUMP
0000297b: JUMPDEST
0000297c: SWAP1
0000297d: SWAP6
0000297e: POP
0000297f: SWAP4
00002980: POP
00002981: POP
00002982: PUSH1 0x20
00002984: DUP6
00002985: ADD
00002986: CALLDATALOAD
00002987: PUSH8 0xffffffffffffffff
00002990: DUP2
00002991: GT
00002992: ISZERO
00002993: PUSH2 0x299a
00002996: JUMPI
00002997: PUSH0
00002998: PUSH0
00002999: REVERT
0000299a: JUMPDEST
0000299b: PUSH2 0x27d2
0000299e: DUP8
0000299f: DUP3
000029a0: DUP9
000029a1: ADD
000029a2: PUSH2 0x2905
000029a5: JUMP
000029a6: JUMPDEST
000029a7: PUSH0
000029a8: PUSH0
000029a9: PUSH1 0x20
000029ab: DUP4
000029ac: DUP6
000029ad: SUB
000029ae: SLT
000029af: ISZERO
000029b0: PUSH2 0x29b7
000029b3: JUMPI
000029b4: PUSH0
000029b5: PUSH0
000029b6: REVERT
000029b7: JUMPDEST
000029b8: DUP3
000029b9: CALLDATALOAD
000029ba: PUSH8 0xffffffffffffffff
000029c3: DUP2
000029c4: GT
000029c5: ISZERO
000029c6: PUSH2 0x29cd
000029c9: JUMPI
000029ca: PUSH0
000029cb: PUSH0
000029cc: REVERT
000029cd: JUMPDEST
000029ce: PUSH2 0x271e
000029d1: DUP6
000029d2: DUP3
000029d3: DUP7
000029d4: ADD
000029d5: PUSH2 0x2905
000029d8: JUMP
000029d9: JUMPDEST
000029da: PUSH0
000029db: PUSH1 0x20
000029dd: DUP3
000029de: DUP5
000029df: SUB
000029e0: SLT
000029e1: ISZERO
000029e2: PUSH2 0x29e9
000029e5: JUMPI
000029e6: PUSH0
000029e7: PUSH0
000029e8: REVERT
000029e9: JUMPDEST
000029ea: POP
000029eb: CALLDATALOAD
000029ec: SWAP2
000029ed: SWAP1
000029ee: POP
000029ef: JUMP
000029f0: JUMPDEST
000029f1: PUSH0
000029f2: PUSH0
000029f3: PUSH1 0x40
000029f5: DUP4
000029f6: DUP6
000029f7: SUB
000029f8: SLT
000029f9: ISZERO
000029fa: PUSH2 0x2a01
000029fd: JUMPI
000029fe: PUSH0
000029ff: PUSH0
00002a00: REVERT
00002a01: JUMPDEST
00002a02: PUSH2 0x2a0a
00002a05: DUP4
00002a06: PUSH2 0x2766
00002a09: JUMP
00002a0a: JUMPDEST
00002a0b: SWAP2
00002a0c: POP
00002a0d: PUSH2 0x2a18
00002a10: PUSH1 0x20
00002a12: DUP5
00002a13: ADD
00002a14: PUSH2 0x272a
00002a17: JUMP
00002a18: JUMPDEST
00002a19: SWAP1
00002a1a: POP
00002a1b: SWAP3
00002a1c: POP
00002a1d: SWAP3
00002a1e: SWAP1
00002a1f: POP
00002a20: JUMP
00002a21: JUMPDEST
00002a22: PUSH0
00002a23: PUSH0
00002a24: PUSH1 0x40
00002a26: DUP4
00002a27: DUP6
00002a28: SUB
00002a29: SLT
00002a2a: ISZERO
00002a2b: PUSH2 0x2a32
00002a2e: JUMPI
00002a2f: PUSH0
00002a30: PUSH0
00002a31: REVERT
00002a32: JUMPDEST
00002a33: PUSH2 0x2a3b
00002a36: DUP4
00002a37: PUSH2 0x272a
00002a3a: JUMP
00002a3b: JUMPDEST
00002a3c: SWAP5
00002a3d: PUSH1 0x20
00002a3f: SWAP4
00002a40: SWAP1
00002a41: SWAP4
00002a42: ADD
00002a43: CALLDATALOAD
00002a44: SWAP4
00002a45: POP
00002a46: POP
00002a47: POP
00002a48: JUMP
00002a49: JUMPDEST
00002a4a: PUSH0
00002a4b: DUP2
00002a4c: MLOAD
00002a4d: DUP1
00002a4e: DUP5
00002a4f: MSTORE
00002a50: DUP1
00002a51: PUSH1 0x20
00002a53: DUP5
00002a54: ADD
00002a55: PUSH1 0x20
00002a57: DUP7
00002a58: ADD
00002a59: MCOPY
00002a5a: PUSH0
00002a5b: PUSH1 0x20
00002a5d: DUP3
00002a5e: DUP7
00002a5f: ADD
00002a60: ADD
00002a61: MSTORE
00002a62: PUSH1 0x20
00002a64: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00002a85: PUSH1 0x1f
00002a87: DUP4
00002a88: ADD
00002a89: AND
00002a8a: DUP6
00002a8b: ADD
00002a8c: ADD
00002a8d: SWAP2
00002a8e: POP
00002a8f: POP
00002a90: SWAP3
00002a91: SWAP2
00002a92: POP
00002a93: POP
00002a94: JUMP
00002a95: JUMPDEST
00002a96: PUSH1 0x20
00002a98: DUP2
00002a99: MSTORE
00002a9a: PUSH0
00002a9b: PUSH2 0x18b5
00002a9e: PUSH1 0x20
00002aa0: DUP4
00002aa1: ADD
00002aa2: DUP5
00002aa3: PUSH2 0x2a49
00002aa6: JUMP
00002aa7: JUMPDEST
00002aa8: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002ac9: PUSH0
00002aca: MSTORE
00002acb: PUSH1 0x21
00002acd: PUSH1 0x04
00002acf: MSTORE
00002ad0: PUSH1 0x24
00002ad2: PUSH0
00002ad3: REVERT
00002ad4: JUMPDEST
00002ad5: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002af6: PUSH0
00002af7: MSTORE
00002af8: PUSH1 0x32
00002afa: PUSH1 0x04
00002afc: MSTORE
00002afd: PUSH1 0x24
00002aff: PUSH0
00002b00: REVERT
00002b01: JUMPDEST
00002b02: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002b17: DUP5
00002b18: AND
00002b19: DUP2
00002b1a: MSTORE
00002b1b: DUP3
00002b1c: PUSH1 0x20
00002b1e: DUP3
00002b1f: ADD
00002b20: MSTORE
00002b21: PUSH1 0x60
00002b23: PUSH1 0x40
00002b25: DUP3
00002b26: ADD
00002b27: MSTORE
00002b28: PUSH0
00002b29: PUSH2 0x2b35
00002b2c: PUSH1 0x60
00002b2e: DUP4
00002b2f: ADD
00002b30: DUP5
00002b31: PUSH2 0x2a49
00002b34: JUMP
00002b35: JUMPDEST
00002b36: SWAP6
00002b37: SWAP5
00002b38: POP
00002b39: POP
00002b3a: POP
00002b3b: POP
00002b3c: POP
00002b3d: JUMP
00002b3e: JUMPDEST
00002b3f: PUSH0
00002b40: DUP3
00002b41: PUSH2 0x2b71
00002b44: JUMPI
00002b45: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002b66: PUSH0
00002b67: MSTORE
00002b68: PUSH1 0x12
00002b6a: PUSH1 0x04
00002b6c: MSTORE
00002b6d: PUSH1 0x24
00002b6f: PUSH0
00002b70: REVERT
00002b71: JUMPDEST
00002b72: POP
00002b73: DIV
00002b74: SWAP1
00002b75: JUMP
00002b76: JUMPDEST
00002b77: DUP1
00002b78: DUP3
00002b79: ADD
00002b7a: DUP1
00002b7b: DUP3
00002b7c: GT
00002b7d: ISZERO
00002b7e: PUSH2 0x18cd
00002b81: JUMPI
00002b82: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002ba3: PUSH0
00002ba4: MSTORE
00002ba5: PUSH1 0x11
00002ba7: PUSH1 0x04
00002ba9: MSTORE
00002baa: PUSH1 0x24
00002bac: PUSH0
00002bad: REVERT

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high upgradeability detector Untrusted DELEGATECALL target reachable 55 no no
view
trace_id: 0x81517f58b6a1a7d4845599dbce1821cc3c926bba9c8259c1ee1a89ec8b2a08d3
validation_json
{
    "sink": "DELEGATECALL",
    "errors": 0,
    "status": "unknown",
    "attempts": 192,
    "trace_id": "0x81517f58b6a1a7d4845599dbce1821cc3c926bba9c8259c1ee1a89ec8b2a08d3",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xeed2f252",
            "selector": "0xeed2f252",
            "calldata_variants": [
                "0xeed2f252",
                "0xeed2f2520000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf08a0323",
            "selector": "0xf08a0323",
            "calldata_variants": [
                "0xf08a0323",
                "0xf08a03230000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfa461e33",
            "selector": "0xfa461e33",
            "calldata_variants": [
                "0xfa461e33",
                "0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc311d049",
            "selector": "0xc311d049",
            "calldata_variants": [
                "0xc311d049",
                "0xc311d0490000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd0ebdbe7",
            "selector": "0xd0ebdbe7",
            "calldata_variants": [
                "0xd0ebdbe7",
                "0xd0ebdbe70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd34628cc",
            "selector": "0xd34628cc",
            "calldata_variants": [
                "0xd34628cc",
                "0xd34628cc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9e281a98",
            "selector": "0x9e281a98",
            "calldata_variants": [
                "0x9e281a98",
                "0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xbdb25d0e",
            "selector": "0xbdb25d0e",
            "calldata_variants": [
                "0xbdb25d0e",
                "0xbdb25d0e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 394,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        },
        {
            "pc": 3206,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        },
        {
            "pc": 7727,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        }
    ],
    "guards_detected": [
        {
            "pc": 2931,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 3044,
            "type": "tx_origin_used"
        }
    ],
    "delegatecall_count": 8,
    "untrusted_delegatecall_count": 7
}
high auth detector Authorization based on tx.origin 70 no
view
validation_json
{
    "reason": "missing sink mapping",
    "status": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xeed2f252",
            "selector": "0xeed2f252",
            "calldata_variants": [
                "0xeed2f252",
                "0xeed2f2520000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf08a0323",
            "selector": "0xf08a0323",
            "calldata_variants": [
                "0xf08a0323",
                "0xf08a03230000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfa461e33",
            "selector": "0xfa461e33",
            "calldata_variants": [
                "0xfa461e33",
                "0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc311d049",
            "selector": "0xc311d049",
            "calldata_variants": [
                "0xc311d049",
                "0xc311d0490000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd0ebdbe7",
            "selector": "0xd0ebdbe7",
            "calldata_variants": [
                "0xd0ebdbe7",
                "0xd0ebdbe70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd34628cc",
            "selector": "0xd34628cc",
            "calldata_variants": [
                "0xd34628cc",
                "0xd34628cc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9e281a98",
            "selector": "0x9e281a98",
            "calldata_variants": [
                "0x9e281a98",
                "0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xbdb25d0e",
            "selector": "0xbdb25d0e",
            "calldata_variants": [
                "0xbdb25d0e",
                "0xbdb25d0e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [
        {
            "pc": 2931,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 3044,
            "type": "tx_origin_used"
        }
    ]
}
medium upgradeability cast DELEGATECALL present 80 no
view
evidence_json
{
    "notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
    "delegatecall_count": 8
}
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0x29935f3fb403ae13feffd9738b7650415c0009f20e7cd22fa9839c358ed78a1d
call_targets: 0xf00001968c1d6196d3d0553030c7af8d1905dcbb
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x29935f3fb403ae13feffd9738b7650415c0009f20e7cd22fa9839c358ed78a1d",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xf00001968c1d6196d3d0553030c7af8d1905dcbb"
    ],
    "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": "0xeed2f252",
            "selector": "0xeed2f252",
            "calldata_variants": [
                "0xeed2f252",
                "0xeed2f2520000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf08a0323",
            "selector": "0xf08a0323",
            "calldata_variants": [
                "0xf08a0323",
                "0xf08a03230000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfa461e33",
            "selector": "0xfa461e33",
            "calldata_variants": [
                "0xfa461e33",
                "0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc311d049",
            "selector": "0xc311d049",
            "calldata_variants": [
                "0xc311d049",
                "0xc311d0490000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd0ebdbe7",
            "selector": "0xd0ebdbe7",
            "calldata_variants": [
                "0xd0ebdbe7",
                "0xd0ebdbe70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd34628cc",
            "selector": "0xd34628cc",
            "calldata_variants": [
                "0xd34628cc",
                "0xd34628cc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9e281a98",
            "selector": "0x9e281a98",
            "calldata_variants": [
                "0x9e281a98",
                "0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xbdb25d0e",
            "selector": "0xbdb25d0e",
            "calldata_variants": [
                "0xbdb25d0e",
                "0xbdb25d0e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4093,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 6299,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 6573,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 9,
    "guards_detected": [
        {
            "pc": 2931,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 3044,
            "type": "tx_origin_used"
        }
    ],
    "untrusted_call_count": 8
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0x29935f3fb403ae13feffd9738b7650415c0009f20e7cd22fa9839c358ed78a1d
call_targets: 0xf00001968c1d6196d3d0553030c7af8d1905dcbb
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x29935f3fb403ae13feffd9738b7650415c0009f20e7cd22fa9839c358ed78a1d",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xf00001968c1d6196d3d0553030c7af8d1905dcbb"
    ],
    "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": "0xeed2f252",
            "selector": "0xeed2f252",
            "calldata_variants": [
                "0xeed2f252",
                "0xeed2f2520000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf08a0323",
            "selector": "0xf08a0323",
            "calldata_variants": [
                "0xf08a0323",
                "0xf08a03230000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfa461e33",
            "selector": "0xfa461e33",
            "calldata_variants": [
                "0xfa461e33",
                "0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xc311d049",
            "selector": "0xc311d049",
            "calldata_variants": [
                "0xc311d049",
                "0xc311d0490000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd0ebdbe7",
            "selector": "0xd0ebdbe7",
            "calldata_variants": [
                "0xd0ebdbe7",
                "0xd0ebdbe70000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd34628cc",
            "selector": "0xd34628cc",
            "calldata_variants": [
                "0xd34628cc",
                "0xd34628cc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9e281a98",
            "selector": "0x9e281a98",
            "calldata_variants": [
                "0x9e281a98",
                "0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xbdb25d0e",
            "selector": "0xbdb25d0e",
            "calldata_variants": [
                "0xbdb25d0e",
                "0xbdb25d0e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4093,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 6299,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 6573,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 7,
    "guards_detected": [
        {
            "pc": 2931,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 3044,
            "type": "tx_origin_used"
        }
    ]
}