c62b530f-1288-4973-af08-bb71f59f0465
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 30890 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 94351 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 94352 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 94353 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 94354 | capability.graph | complete | 1 / 3 | 1 week ago |
| 94355 | detector.run | complete | 1 / 3 | 1 week ago |
| 94356 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:933862] OpenAI Codex v0.77.0 (research preview)
[codex:933862] --------
[codex:933862] workdir: /tmp/codex-multi-g8wac9zh
[codex:933862] model: gpt-5.2-codex
[codex:933862] provider: openai
[codex:933862] approval: never
[codex:933862] sandbox: read-only
[codex:933862] reasoning effort: xhigh
[codex:933862] reasoning summaries: auto
[codex:933862] session id: 019b75bb-e495-7611-b02d-134e9c5972a3
[codex:933862] --------
[codex:933862] user
[codex:933862] 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:933862]
[codex:933862] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:933862]
[codex:933862] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:933862] - Gas inefficiency, code quality, or best practices
[codex:933862] - Theoretical vulnerabilities without a clear extraction path
[codex:933862] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:933862] - Issues requiring social engineering or off-chain coordination
[codex:933862]
[codex:933862] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:933862] - CALL/DELEGATECALL with controllable destination or calldata
[codex:933862] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:933862] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:933862] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:933862] - External calls before state updates (reentrancy)
[codex:933862] - SELFDESTRUCT with controllable beneficiary
[codex:933862] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:933862]
[codex:933862] For each finding, you MUST explain:
[codex:933862] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:933862] 2. The concrete sequence of transactions to extract value
[codex:933862] 3. Why you believe this is exploitable (not just suspicious)
[codex:933862]
[codex:933862] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:933862] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:933862]
[codex:933862] Output MUST be valid JSON matching the provided schema.
[codex:933862] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:933862] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:933862] mcp startup: no servers
[codex:933862]
[codex:933862] thinking
[codex:933862] **Deciding how to read BYTECODE_BUNDLE.txt**
[codex:933862] exec
[codex:933862] /bin/bash -lc ls in /tmp/codex-multi-g8wac9zh succeeded in 5ms:
[codex:933862] BYTECODE_BUNDLE.txt
[codex:933862] codex-output-schema.json
[codex:933862] exec
[codex:933862] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-g8wac9zh succeeded in 5ms:
[codex:933862] Runtime bytecode bundle for best-effort auditing.
[codex:933862] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:933862]
[codex:933862] FILE: runtime_bytecode.hex
[codex:933862] 0x60806040526004361061014f5760003560e01c8063715018a6116100b6578063a217fddf1161006f578063a217fddf146103c2578063ca15c873146103d7578063d547741f146103f7578063e6930a2214610417578063eb14f53e14610437578063f2fde38b1461044a57600080fd5b8063715018a61461030457806377f050b0146103195780638129fc1c1461033b5780638da5cb5b146103505780639010d07c1461038257806391d14854146103a257600080fd5b806336568abe1161010857806336568abe1461025c5780633659cfe61461027c5780633bd8db241461029c5780634f1ef286146102bc57806352d1902d146102cf57806357a987a3146102e457600080fd5b806301ffc9a71461015b57806302cba7411461019057806305b1137b146101b2578063150b7a02146101c5578063248a9ca3146101fe5780632f2ff15d1461023c57600080fd5b3661015657005b600080fd5b34801561016757600080fd5b5061017b610176366004611e5b565b61046a565b60405190151581526020015b60405180910390f35b34801561019c57600080fd5b506101b06101ab366004611e9a565b610495565b005b6101b06101c0366004611edb565b6104be565b3480156101d157600080fd5b506101e56101e0366004611faa565b6104e5565b6040516001600160e01b03199091168152602001610187565b34801561020a57600080fd5b5061022e610219366004612016565b600090815260fb602052604090206001015490565b604051908152602001610187565b34801561024857600080fd5b506101b061025736600461202f565b6104f6565b34801561026857600080fd5b506101b061027736600461202f565b61051b565b34801561028857600080fd5b506101b061029736600461205f565b61059e565b3480156102a857600080fd5b506101b06102b7366004611e9a565b61067e565b6101b06102ca36600461207c565b6106a1565b3480156102db57600080fd5b5061022e61076e565b3480156102f057600080fd5b506101b06102ff366004612118565b610821565b34801561031057600080fd5b506101b0610a4c565b34801561032557600080fd5b5061022e60008051602061255883398151915281565b34801561034757600080fd5b506101b0610a60565b34801561035c57600080fd5b506097546001600160a01b03165b6040516001600160a01b039091168152602001610187565b34801561038e57600080fd5b5061036a61039d3660046121b2565b610b83565b3480156103ae57600080fd5b5061017b6103bd36600461202f565b610ba3565b3480156103ce57600080fd5b5061022e600081565b3480156103e357600080fd5b5061022e6103f2366004612016565b610bce565b34801561040357600080fd5b506101b061041236600461202f565b610be6565b34801561042357600080fd5b506101b0610432366004612118565b610c0b565b6101b06104453660046121d4565b610e1a565b34801561045657600080fd5b506101b061046536600461205f565b610f93565b60006001600160e01b03198216635a05180f60e01b148061048f575061048f82611018565b92915050565b6000805160206125588339815191526104ad8161104d565b6104b8848484611057565b50505050565b6000805160206125588339815191526104d68161104d565b6104e0838361106b565b505050565b630a85bd0160e11b5b949350505050565b600082815260fb60205260409020600101546105118161104d565b6104e08383611075565b6001600160a01b03811633146105905760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61059a8282611098565b5050565b306001600160a01b037f00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd1631614156105e75760405162461bcd60e51b815260040161058790612240565b7f00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd1636001600160a01b0316610630600080516020612511833981519152546001600160a01b031690565b6001600160a01b0316146106565760405162461bcd60e51b81526004016105879061228c565b61065f816110bb565b6040805160008082526020820190925261067b918391906110c3565b50565b6000805160206125588339815191526106968161104d565b6104b884848461123d565b306001600160a01b037f00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd1631614156106ea5760405162461bcd60e51b815260040161058790612240565b7f00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd1636001600160a01b0316610733600080516020612511833981519152546001600160a01b031690565b6001600160a01b0316146107595760405162461bcd60e51b81526004016105879061228c565b610762826110bb565b61059a828260016110c3565b6000306001600160a01b037f00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd163161461080e5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610587565b5060008051602061251183398151915290565b6000805160206125588339815191526108398161104d565b8584146108b85760405162461bcd60e51b815260206004820152604160248201527f4d756c74695472616e736665723a3a62617463685472616e736665724572633760448201527f32313a20746f6b656e732f706179656573206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610587565b8382146109395760405162461bcd60e51b815260206004820152604360248201527f4d756c74695472616e736665723a3a62617463685472616e736665724572633760448201527f32313a207061796565732f746f6b656e496473206c656e677468206d69736d616064820152620e8c6d60eb1b608482015260a401610587565b836109b65760405162461bcd60e51b815260206004820152604160248201527f4d756c74695472616e736665723a3a62617463685472616e736665724572633760448201527f32313a20706179656573206c656e677468206d757374206265206774207a65726064820152606f60f81b608482015260a401610587565b60005b84811015610a4257610a308888838181106109d6576109d66122d8565b90506020020160208101906109eb919061205f565b8787848181106109fd576109fd6122d8565b9050602002016020810190610a12919061205f565b868685818110610a2457610a246122d8565b9050602002013561123d565b80610a3a81612304565b9150506109b9565b5050505050505050565b610a546112aa565b610a5e6000611304565b565b600054610100900460ff1615808015610a805750600054600160ff909116105b80610a9a5750303b158015610a9a575060005460ff166001145b610afd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610587565b6000805460ff191660011790558015610b20576000805461ff0019166101001790555b610b28611356565b610b30611385565b610b3b6000336113ac565b801561067b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b600082815261012d60205260408120610b9c90836113b6565b9392505050565b600091825260fb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815261012d6020526040812061048f906113c2565b600082815260fb6020526040902060010154610c018161104d565b6104e08383611098565b600080516020612558833981519152610c238161104d565b858414610c9a576040805162461bcd60e51b81526020600482015260248101919091527f4d756c74695472616e736665723a3a62617463685472616e736665724572633260448201527f303a20746f6b656e732f706179656573206c656e677468206d69736d617463686064820152608401610587565b838214610d195760405162461bcd60e51b815260206004820152604160248201527f4d756c74695472616e736665723a3a62617463685472616e736665724572633260448201527f303a207061796565732f616d6f756e7473206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610587565b83610d8e576040805162461bcd60e51b81526020600482015260248101919091527f4d756c74695472616e736665723a3a62617463685472616e736665724572633260448201527f303a20706179656573206c656e677468206d757374206265206774207a65726f6064820152608401610587565b60005b84811015610a4257610e08888883818110610dae57610dae6122d8565b9050602002016020810190610dc3919061205f565b878784818110610dd557610dd56122d8565b9050602002016020810190610dea919061205f565b868685818110610dfc57610dfc6122d8565b90506020020135611057565b80610e1281612304565b915050610d91565b600080516020612558833981519152610e328161104d565b838214610eb15760405162461bcd60e51b815260206004820152604160248201527f4d756c74695472616e736665723a3a62617463685472616e736665724574686560448201527f723a207061796565732f616d6f756e7473206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610587565b83610f26576040805162461bcd60e51b81526020600482015260248101919091527f4d756c74695472616e736665723a3a62617463685472616e736665724574686560448201527f723a20706179656573206c656e677468206d757374206265206774207a65726f6064820152608401610587565b60005b84811015610f8b57610f79868683818110610f4657610f466122d8565b9050602002016020810190610f5b919061205f565b858584818110610f6d57610f6d6122d8565b9050602002013561106b565b80610f8381612304565b915050610f29565b505050505050565b610f9b6112aa565b6001600160a01b0381166110005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610587565b61067b81611304565b6001600160a01b03163b151590565b60006001600160e01b03198216637965db0b60e01b148061048f57506301ffc9a760e01b6001600160e01b031983161461048f565b61067b81336113cc565b6104e06001600160a01b0384168383611425565b61059a8282611477565b61107f8282611590565b600082815261012d602052604090206104e09082611616565b6110a2828261162b565b600082815261012d602052604090206104e09082611692565b61067b6112aa565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156110f6576104e0836116a7565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112f57600080fd5b505afa92505050801561115f575060408051601f3d908101601f1916820190925261115c9181019061231f565b60015b6111c25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610587565b60008051602061251183398151915281146112315760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610587565b506104e0838383611743565b604051632142170760e11b81523060048201526001600160a01b038381166024830152604482018390528416906342842e0e90606401600060405180830381600087803b15801561128d57600080fd5b505af11580156112a1573d6000803e3d6000fd5b50505050505050565b6097546001600160a01b03163314610a5e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610587565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661137d5760405162461bcd60e51b815260040161058790612338565b610a5e611768565b600054610100900460ff16610a5e5760405162461bcd60e51b815260040161058790612338565b61059a8282611075565b6000610b9c8383611798565b600061048f825490565b6113d68282610ba3565b61059a576113e3816117c2565b6113ee8360206117d4565b6040516020016113ff9291906123af565b60408051601f198184030181529082905262461bcd60e51b825261058791600401612424565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526104e0908490611970565b804710156114c75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610587565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611514576040519150601f19603f3d011682016040523d82523d6000602084013e611519565b606091505b50509050806104e05760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610587565b61159a8282610ba3565b61059a57600082815260fb602090815260408083206001600160a01b03851684529091529020805460ff191660011790556115d23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610b9c836001600160a01b038416611a42565b6116358282610ba3565b1561059a57600082815260fb602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610b9c836001600160a01b038416611a91565b6001600160a01b0381163b6117145760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610587565b60008051602061251183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61174c83611b84565b6000825111806117595750805b156104e0576104b88383611bc4565b600054610100900460ff1661178f5760405162461bcd60e51b815260040161058790612338565b610a5e33611304565b60008260000182815481106117af576117af6122d8565b9060005260206000200154905092915050565b606061048f6001600160a01b03831660145b606060006117e3836002612457565b6117ee906002612476565b67ffffffffffffffff81111561180657611806611f07565b6040519080825280601f01601f191660200182016040528015611830576020820181803683370190505b509050600360fc1b8160008151811061184b5761184b6122d8565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061187a5761187a6122d8565b60200101906001600160f81b031916908160001a905350600061189e846002612457565b6118a9906001612476565b90505b6001811115611921576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106118dd576118dd6122d8565b1a60f81b8282815181106118f3576118f36122d8565b60200101906001600160f81b031916908160001a90535060049490941c9361191a8161248e565b90506118ac565b508315610b9c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610587565b60006119c5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611cb89092919063ffffffff16565b8051909150156104e057808060200190518101906119e391906124a5565b6104e05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610587565b6000818152600183016020526040812054611a895750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561048f565b50600061048f565b60008181526001830160205260408120548015611b7a576000611ab56001836124c7565b8554909150600090611ac9906001906124c7565b9050818114611b2e576000866000018281548110611ae957611ae96122d8565b9060005260206000200154905080876000018481548110611b0c57611b0c6122d8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611b3f57611b3f6124de565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061048f565b600091505061048f565b611b8d816116a7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611c2c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610587565b600080846001600160a01b031684604051611c4791906124f4565b600060405180830381855af49150503d8060008114611c82576040519150601f19603f3d011682016040523d82523d6000602084013e611c87565b606091505b5091509150611caf828260405180606001604052806027815260200161253160279139611cc7565b95945050505050565b60606104ee8484600085611ce0565b60608315611cd6575081610b9c565b610b9c8383611dbb565b606082471015611d415760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610587565b600080866001600160a01b03168587604051611d5d91906124f4565b60006040518083038185875af1925050503d8060008114611d9a576040519150601f19603f3d011682016040523d82523d6000602084013e611d9f565b606091505b5091509150611db087838387611de5565b979650505050505050565b815115611dcb5781518083602001fd5b8060405162461bcd60e51b81526004016105879190612424565b60608315611e51578251611e4a576001600160a01b0385163b611e4a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610587565b50816104ee565b6104ee8383611dbb565b600060208284031215611e6d57600080fd5b81356001600160e01b031981168114610b9c57600080fd5b6001600160a01b038116811461067b57600080fd5b600080600060608486031215611eaf57600080fd5b8335611eba81611e85565b92506020840135611eca81611e85565b929592945050506040919091013590565b60008060408385031215611eee57600080fd5b8235611ef981611e85565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611f2e57600080fd5b813567ffffffffffffffff80821115611f4957611f49611f07565b604051601f8301601f19908116603f01168101908282118183101715611f7157611f71611f07565b81604052838152866020858801011115611f8a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215611fc057600080fd5b8435611fcb81611e85565b93506020850135611fdb81611e85565b925060408501359150606085013567ffffffffffffffff811115611ffe57600080fd5b61200a87828801611f1d565b91505092959194509250565b60006020828403121561202857600080fd5b5035919050565b6000806040838503121561204257600080fd5b82359150602083013561205481611e85565b809150509250929050565b60006020828403121561207157600080fd5b8135610b9c81611e85565b6000806040838503121561208f57600080fd5b823561209a81611e85565b9150602083013567ffffffffffffffff8111156120b657600080fd5b6120c285828601611f1d565b9150509250929050565b60008083601f8401126120de57600080fd5b50813567ffffffffffffffff8111156120f657600080fd5b6020830191508360208260051b850101111561211157600080fd5b9250929050565b6000806000806000806060878903121561213157600080fd5b863567ffffffffffffffff8082111561214957600080fd5b6121558a838b016120cc565b9098509650602089013591508082111561216e57600080fd5b61217a8a838b016120cc565b9096509450604089013591508082111561219357600080fd5b506121a089828a016120cc565b979a9699509497509295939492505050565b600080604083850312156121c557600080fd5b50508035926020909101359150565b600080600080604085870312156121ea57600080fd5b843567ffffffffffffffff8082111561220257600080fd5b61220e888389016120cc565b9096509450602087013591508082111561222757600080fd5b50612234878288016120cc565b95989497509550505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612318576123186122ee565b5060010190565b60006020828403121561233157600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b8381101561239e578181015183820152602001612386565b838111156104b85750506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123e7816017850160208801612383565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612418816028840160208801612383565b01602801949350505050565b6020815260008251806020840152612443816040850160208701612383565b601f01601f19169190910160400192915050565b6000816000190483118215151615612471576124716122ee565b500290565b60008219821115612489576124896122ee565b500190565b60008161249d5761249d6122ee565b506000190190565b6000602082840312156124b757600080fd5b81518015158114610b9c57600080fd5b6000828210156124d9576124d96122ee565b500390565b634e487b7160e01b600052603160045260246000fd5b60008251612506818460208701612383565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65648ec07e268e32cae7f300b49ad34f20106d088445cb9d9b2d62cbd864638308b2a2646970667358221220a409bd9e9574da254aba6b9a5d70db75eb61aad8eecdc8c6bd43cd7caf29999764736f6c63430008090033
[codex:933862]
[codex:933862]
[codex:933862] thinking
[codex:933862] **Examining contract bytecode and selectors for vulnerabilities**
[codex:933862] thinking
[codex:933862] **Mapping multi-transfer functions and access checks**
[codex:933862]
[codex:933862] I'm sorting out which functions correspond to each multi-transfer selector and probing bytecode for access control, especially checking if batch transfers restrict calls by role or owner. I'm also identifying if ERC20 transfers use `transfer` or `transferFrom` to see if anyone can drain contract-held tokens.
[codex:933862] exec
[codex:933862] /bin/bash -lc 'rg -n "23b872dd|a9059cbb" BYTECODE_BUNDLE.txt' in /tmp/codex-multi-g8wac9zh succeeded in 7ms:
[codex:933862] 5:0x60806040526004361061014f5760003560e01c8063715018a6116100b6578063a217fddf1161006f578063a217fddf146103c2578063ca15c873146103d7578063d547741f146103f7578063e6930a2214610417578063eb14f53e14610437578063f2fde38b1461044a57600080fd5b8063715018a61461030457806377f050b0146103195780638129fc1c1461033b5780638da5cb5b146103505780639010d07c1461038257806391d14854146103a257600080fd5b806336568abe1161010857806336568abe1461025c5780633659cfe61461027c5780633bd8db241461029c5780634f1ef286146102bc57806352d1902d146102cf57806357a987a3146102e457600080fd5b806301ffc9a71461015b57806302cba7411461019057806305b1137b146101b2578063150b7a02146101c5578063248a9ca3146101fe5780632f2ff15d1461023c57600080fd5b3661015657005b600080fd5b34801561016757600080fd5b5061017b610176366004611e5b565b61046a565b60405190151581526020015b60405180910390f35b34801561019c57600080fd5b506101b06101ab366004611e9a565b610495565b005b6101b06101c0366004611edb565b6104be565b3480156101d157600080fd5b506101e56101e0366004611faa565b6104e5565b6040516001600160e01b03199091168152602001610187565b34801561020a57600080fd5b5061022e610219366004612016565b600090815260fb602052604090206001015490565b604051908152602001610187565b34801561024857600080fd5b506101b061025736600461202f565b6104f6565b34801561026857600080fd5b506101b061027736600461202f565b61051b565b34801561028857600080fd5b506101b061029736600461205f565b61059e565b3480156102a857600080fd5b506101b06102b7366004611e9a565b61067e565b6101b06102ca36600461207c565b6106a1565b3480156102db57600080fd5b5061022e61076e565b3480156102f057600080fd5b506101b06102ff366004612118565b610821565b34801561031057600080fd5b506101b0610a4c565b34801561032557600080fd5b5061022e60008051602061255883398151915281565b34801561034757600080fd5b506101b0610a60565b34801561035c57600080fd5b506097546001600160a01b03165b6040516001600160a01b039091168152602001610187565b34801561038e57600080fd5b5061036a61039d3660046121b2565b610b83565b3480156103ae57600080fd5b5061017b6103bd36600461202f565b610ba3565b3480156103ce57600080fd5b5061022e600081565b3480156103e357600080fd5b5061022e6103f2366004612016565b610bce565b34801561040357600080fd5b506101b061041236600461202f565b610be6565b34801561042357600080fd5b506101b0610432366004612118565b610c0b565b6101b06104453660046121d4565b610e1a565b34801561045657600080fd5b506101b061046536600461205f565b610f93565b60006001600160e01b03198216635a05180f60e01b148061048f575061048f82611018565b92915050565b6000805160206125588339815191526104ad8161104d565b6104b8848484611057565b50505050565b6000805160206125588339815191526104d68161104d565b6104e0838361106b565b505050565b630a85bd0160e11b5b949350505050565b600082815260fb60205260409020600101546105118161104d565b6104e08383611075565b6001600160a01b03811633146105905760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61059a8282611098565b5050565b306001600160a01b037f00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd1631614156105e75760405162461bcd60e51b815260040161058790612240565b7f00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd1636001600160a01b0316610630600080516020612511833981519152546001600160a01b031690565b6001600160a01b0316146106565760405162461bcd60e51b81526004016105879061228c565b61065f816110bb565b6040805160008082526020820190925261067b918391906110c3565b50565b6000805160206125588339815191526106968161104d565b6104b884848461123d565b306001600160a01b037f00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd1631614156106ea5760405162461bcd60e51b815260040161058790612240565b7f00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd1636001600160a01b0316610733600080516020612511833981519152546001600160a01b031690565b6001600160a01b0316146107595760405162461bcd60e51b81526004016105879061228c565b610762826110bb565b61059a828260016110c3565b6000306001600160a01b037f00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd163161461080e5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610587565b5060008051602061251183398151915290565b6000805160206125588339815191526108398161104d565b8584146108b85760405162461bcd60e51b815260206004820152604160248201527f4d756c74695472616e736665723a3a62617463685472616e736665724572633760448201527f32313a20746f6b656e732f706179656573206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610587565b8382146109395760405162461bcd60e51b815260206004820152604360248201527f4d756c74695472616e736665723a3a62617463685472616e736665724572633760448201527f32313a207061796565732f746f6b656e496473206c656e677468206d69736d616064820152620e8c6d60eb1b608482015260a401610587565b836109b65760405162461bcd60e51b815260206004820152604160248201527f4d756c74695472616e736665723a3a62617463685472616e736665724572633760448201527f32313a20706179656573206c656e677468206d757374206265206774207a65726064820152606f60f81b608482015260a401610587565b60005b84811015610a4257610a308888838181106109d6576109d66122d8565b90506020020160208101906109eb919061205f565b8787848181106109fd576109fd6122d8565b9050602002016020810190610a12919061205f565b868685818110610a2457610a246122d8565b9050602002013561123d565b80610a3a81612304565b9150506109b9565b5050505050505050565b610a546112aa565b610a5e6000611304565b565b600054610100900460ff1615808015610a805750600054600160ff909116105b80610a9a5750303b158015610a9a575060005460ff166001145b610afd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610587565b6000805460ff191660011790558015610b20576000805461ff0019166101001790555b610b28611356565b610b30611385565b610b3b6000336113ac565b801561067b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b600082815261012d60205260408120610b9c90836113b6565b9392505050565b600091825260fb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815261012d6020526040812061048f906113c2565b600082815260fb6020526040902060010154610c018161104d565b6104e08383611098565b600080516020612558833981519152610c238161104d565b858414610c9a576040805162461bcd60e51b81526020600482015260248101919091527f4d756c74695472616e736665723a3a62617463685472616e736665724572633260448201527f303a20746f6b656e732f706179656573206c656e677468206d69736d617463686064820152608401610587565b838214610d195760405162461bcd60e51b815260206004820152604160248201527f4d756c74695472616e736665723a3a62617463685472616e736665724572633260448201527f303a207061796565732f616d6f756e7473206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610587565b83610d8e576040805162461bcd60e51b81526020600482015260248101919091527f4d756c74695472616e736665723a3a62617463685472616e736665724572633260448201527f303a20706179656573206c656e677468206d757374206265206774207a65726f6064820152608401610587565b60005b84811015610a4257610e08888883818110610dae57610dae6122d8565b9050602002016020810190610dc3919061205f565b878784818110610dd557610dd56122d8565b9050602002016020810190610dea919061205f565b868685818110610dfc57610dfc6122d8565b90506020020135611057565b80610e1281612304565b915050610d91565b600080516020612558833981519152610e328161104d565b838214610eb15760405162461bcd60e51b815260206004820152604160248201527f4d756c74695472616e736665723a3a62617463685472616e736665724574686560448201527f723a207061796565732f616d6f756e7473206c656e677468206d69736d6174636064820152600d60fb1b608482015260a401610587565b83610f26576040805162461bcd60e51b81526020600482015260248101919091527f4d756c74695472616e736665723a3a62617463685472616e736665724574686560448201527f723a20706179656573206c656e677468206d757374206265206774207a65726f6064820152608401610587565b60005b84811015610f8b57610f79868683818110610f4657610f466122d8565b9050602002016020810190610f5b919061205f565b858584818110610f6d57610f6d6122d8565b9050602002013561106b565b80610f8381612304565b915050610f29565b505050505050565b610f9b6112aa565b6001600160a01b0381166110005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610587565b61067b81611304565b6001600160a01b03163b151590565b60006001600160e01b03198216637965db0b60e01b148061048f57506301ffc9a760e01b6001600160e01b031983161461048f565b61067b81336113cc565b6104e06001600160a01b0384168383611425565b61059a8282611477565b61107f8282611590565b600082815261012d602052604090206104e09082611616565b6110a2828261162b565b600082815261012d602052604090206104e09082611692565b61067b6112aa565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156110f6576104e0836116a7565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112f57600080fd5b505afa92505050801561115f575060408051601f3d908101601f1916820190925261115c9181019061231f565b60015b6111c25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610587565b60008051602061251183398151915281146112315760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610587565b506104e0838383611743565b604051632142170760e11b81523060048201526001600160a01b038381166024830152604482018390528416906342842e0e90606401600060405180830381600087803b15801561128d57600080fd5b505af11580156112a1573d6000803e3d6000fd5b50505050505050565b6097546001600160a01b03163314610a5e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610587565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661137d5760405162461bcd60e51b815260040161058790612338565b610a5e611768565b600054610100900460ff16610a5e5760405162461bcd60e51b815260040161058790612338565b61059a8282611075565b6000610b9c8383611798565b600061048f825490565b6113d68282610ba3565b61059a576113e3816117c2565b6113ee8360206117d4565b6040516020016113ff9291906123af565b60408051601f198184030181529082905262461bcd60e51b825261058791600401612424565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526104e0908490611970565b804710156114c75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610587565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611514576040519150601f19603f3d011682016040523d82523d6000602084013e611519565b606091505b50509050806104e05760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610587565b61159a8282610ba3565b61059a57600082815260fb602090815260408083206001600160a01b03851684529091529020805460ff191660011790556115d23390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610b9c836001600160a01b038416611a42565b6116358282610ba3565b1561059a57600082815260fb602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610b9c836001600160a01b038416611a91565b6001600160a01b0381163b6117145760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610587565b60008051602061251183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61174c83611b84565b6000825111806117595750805b156104e0576104b88383611bc4565b600054610100900460ff1661178f5760405162461bcd60e51b815260040161058790612338565b610a5e33611304565b60008260000182815481106117af576117af6122d8565b9060005260206000200154905092915050565b606061048f6001600160a01b03831660145b606060006117e3836002612457565b6117ee906002612476565b67ffffffffffffffff81111561180657611806611f07565b6040519080825280601f01601f191660200182016040528015611830576020820181803683370190505b509050600360fc1b8160008151811061184b5761184b6122d8565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061187a5761187a6122d8565b60200101906001600160f81b031916908160001a905350600061189e846002612457565b6118a9906001612476565b90505b6001811115611921576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106118dd576118dd6122d8565b1a60f81b8282815181106118f3576118f36122d8565b60200101906001600160f81b031916908160001a90535060049490941c9361191a8161248e565b90506118ac565b508315610b9c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610587565b60006119c5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611cb89092919063ffffffff16565b8051909150156104e057808060200190518101906119e391906124a5565b6104e05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610587565b6000818152600183016020526040812054611a895750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561048f565b50600061048f565b60008181526001830160205260408120548015611b7a576000611ab56001836124c7565b8554909150600090611ac9906001906124c7565b9050818114611b2e576000866000018281548110611ae957611ae96122d8565b9060005260206000200154905080876000018481548110611b0c57611b0c6122d8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611b3f57611b3f6124de565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061048f565b600091505061048f565b611b8d816116a7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611c2c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610587565b600080846001600160a01b031684604051611c4791906124f4565b600060405180830381855af49150503d8060008114611c82576040519150601f19603f3d011682016040523d82523d6000602084013e611c87565b606091505b5091509150611caf828260405180606001604052806027815260200161253160279139611cc7565b95945050505050565b60606104ee8484600085611ce0565b60608315611cd6575081610b9c565b610b9c8383611dbb565b606082471015611d415760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610587565b600080866001600160a01b03168587604051611d5d91906124f4565b60006040518083038185875af1925050503d8060008114611d9a576040519150601f19603f3d011682016040523d82523d6000602084013e611d9f565b606091505b5091509150611db087838387611de5565b979650505050505050565b815115611dcb5781518083602001fd5b8060405162461bcd60e51b81526004016105879190612424565b60608315611e51578251611e4a576001600160a01b0385163b611e4a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610587565b50816104ee565b6104ee8383611dbb565b600060208284031215611e6d57600080fd5b81356001600160e01b031981168114610b9c57600080fd5b6001600160a01b038116811461067b57600080fd5b600080600060608486031215611eaf57600080fd5b8335611eba81611e85565b92506020840135611eca81611e85565b929592945050506040919091013590565b60008060408385031215611eee57600080fd5b8235611ef981611e85565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611f2e57600080fd5b813567ffffffffffffffff80821115611f4957611f49611f07565b604051601f8301601f19908116603f01168101908282118183101715611f7157611f71611f07565b81604052838152866020858801011115611f8a57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215611fc057600080fd5b8435611fcb81611e85565b93506020850135611fdb81611e85565b925060408501359150606085013567ffffffffffffffff811115611ffe57600080fd5b61200a87828801611f1d565b91505092959194509250565b60006020828403121561202857600080fd5b5035919050565b6000806040838503121561204257600080fd5b82359150602083013561205481611e85565b809150509250929050565b60006020828403121561207157600080fd5b8135610b9c81611e85565b6000806040838503121561208f57600080fd5b823561209a81611e85565b9150602083013567ffffffffffffffff8111156120b657600080fd5b6120c285828601611f1d565b9150509250929050565b60008083601f8401126120de57600080fd5b50813567ffffffffffffffff8111156120f657600080fd5b6020830191508360208260051b850101111561211157600080fd5b9250929050565b6000806000806000806060878903121561213157600080fd5b863567ffffffffffffffff8082111561214957600080fd5b6121558a838b016120cc565b9098509650602089013591508082111561216e57600080fd5b61217a8a838b016120cc565b9096509450604089013591508082111561219357600080fd5b506121a089828a016120cc565b979a9699509497509295939492505050565b600080604083850312156121c557600080fd5b50508035926020909101359150565b600080600080604085870312156121ea57600080fd5b843567ffffffffffffffff8082111561220257600080fd5b61220e888389016120cc565b9096509450602087013591508082111561222757600080fd5b50612234878288016120cc565b95989497509550505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612318576123186122ee565b5060010190565b60006020828403121561233157600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60005b8381101561239e578181015183820152602001612386565b838111156104b85750506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123e7816017850160208801612383565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612418816028840160208801612383565b01602801949350505050565b6020815260008251806020840152612443816040850160208701612383565b601f01601f19169190910160400192915050565b6000816000190483118215151615612471576124716122ee565b500290565b60008219821115612489576124896122ee565b500190565b60008161249d5761249d6122ee565b506000190190565b6000602082840312156124b757600080fd5b81518015158114610b9c57600080fd5b6000828210156124d9576124d96122ee565b500390565b634e487b7160e01b600052603160045260246000fd5b60008251612506818460208701612383565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65648ec07e268e32cae7f300b49ad34f20106d088445cb9d9b2d62cbd864638308b2a2646970667358221220a409bd9e9574da254aba6b9a5d70db75eb61aad8eecdc8c6bd43cd7caf29999764736f6c63430008090033
[codex:933862]
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing token transfer functions and access controls**
[codex:933862] thinking
[codex:933862] **Investigating function selectors and access checks**
[codex:933862]
[codex:933862] I’m mapping batchTransfer functions for ERC20, ERC721, and Ether by their selectors and error messages to clarify which is which. Now I’m carefully examining whether these batch functions call access-control methods like onlyOwner or onlyRole by scanning for calls to those internal checks early in their code. Since the bytecode uses internal calls (like 6112aa or 6113d6) to enforce access, I’m tracking those to verify protection. I’m also guessing some functions like 61104d could be _msgSender or getRoleAdmin but want to disassemble the bytecode around these addresses for better insight. To get precise understanding, I plan to script a basic disassembler to parse the raw hex and decode opcodes around these critical offsets. This should help me confirm access control logic or possible missing protections.
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] import re
[codex:933862] from pathlib import Path
[codex:933862] hexdata = Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata = hexdata[2:]
[codex:933862] code = bytes.fromhex(hexdata)
[codex:933862] # simple disassembler
[codex:933862] opcodes = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] # fill rest
[codex:933862] mn = {
[codex:933862] 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:933862] 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:933862] 0x20:'SHA3',
[codex:933862] 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:933862] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:933862] 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:933862] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:933862] }
[codex:933862] for i in range(0x80,0x90):
[codex:933862] mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0):
[codex:933862] mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5):
[codex:933862] mn[i]=f'LOG{i-0xa0}'
[codex:933862]
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] # function to disassemble around offsets
[codex:933862]
[codex:933862] def disasm(start, count=200):
[codex:933862] i=start
[codex:933862] out=[]
[codex:933862] c=0
[codex:933862] while i < len(code) and c < count:
[codex:933862] op = code[i]
[codex:933862] name = mn.get(op, f'OP{op:02x}')
[codex:933862] if 0x60 <= op <= 0x7f:
[codex:933862] n = op-0x5f
[codex:933862] data = code[i+1:i+1+n]
[codex:933862] out.append((i, name, data.hex()))
[codex:933862] i += 1+n
[codex:933862] else:
[codex:933862] out.append((i, name, ''))
[codex:933862] i += 1
[codex:933862] c += 1
[codex:933862] return out
[codex:933862]
[codex:933862] # print entry around 0x821 etc
[codex:933862] for off in [0x821,0x0c0b,0x0e1a,0x104d,0x123d,0x13d6,0x12aa]:
[codex:933862] print('\\n==',hex(off))
[codex:933862] for o,name,data in disasm(off,80):
[codex:933862] if data:
[codex:933862] print(f'{o:04x}: {name} {data}')
[codex:933862] else:
[codex:933862] print(f'{o:04x}: {name}')
[codex:933862]
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 48ms:
[codex:933862]
[codex:933862] == 0x821
[codex:933862] 0821: JUMPDEST
[codex:933862] 0822: PUSH1 00
[codex:933862] 0824: DUP1
[codex:933862] 0825: MLOAD
[codex:933862] 0826: PUSH1 20
[codex:933862] 0828: PUSH2 2558
[codex:933862] 082b: DUP4
[codex:933862] 082c: CODECOPY
[codex:933862] 082d: DUP2
[codex:933862] 082e: MLOAD
[codex:933862] 082f: SWAP2
[codex:933862] 0830: MSTORE
[codex:933862] 0831: PUSH2 0839
[codex:933862] 0834: DUP2
[codex:933862] 0835: PUSH2 104d
[codex:933862] 0838: JUMP
[codex:933862] 0839: JUMPDEST
[codex:933862] 083a: DUP6
[codex:933862]
[codex:933862] thinking
[codex:933862] **Examining disassembly control flow**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] import re
[codex:933862] from pathlib import Path
[codex:933862] hexdata = Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata = hexdata[2:]
[codex:933862] code = bytes.fromhex(hexdata)
[codex:933862] # disassembler
[codex:933862] opcodes = {i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn = {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:933862] 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',
[codex:933862] 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:933862] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:933862] 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:933862] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=120):
[codex:933862] i=start; out=[]
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op, f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; out.append((i,name,data.hex())); i+=1+n
[codex:933862] else:
[codex:933862] out.append((i,name,'')); i+=1
[codex:933862] return out
[codex:933862]
[codex:933862] for off in [0x13b0,0x13cc,0x13f0,0x1425,0x1477,0x1590,0x1616,0x162b,0x1692,0x1743,0x1798,0x17c2,0x17d4]:
[codex:933862] print('\\n==',hex(off))
[codex:933862] for o,name,data in disasm(off,60):
[codex:933862] print(f'{o:04x}: {name} {data}' if data else f'{o:04x}: {name}')
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 28ms:
[codex:933862]
[codex:933862] == 0x13b0
[codex:933862] 13b0: DUP3
[codex:933862] 13b1: DUP3
[codex:933862] 13b2: PUSH2 1075
[codex:933862] 13b5: JUMP
[codex:933862] 13b6: JUMPDEST
[codex:933862] 13b7: PUSH1 00
[codex:933862] 13b9: PUSH2 0b9c
[codex:933862] 13bc: DUP4
[codex:933862] 13bd: DUP4
[codex:933862] 13be: PUSH2 1798
[codex:933862] 13c1: JUMP
[codex:933862] 13c2: JUMPDEST
[codex:933862] 13c3: PUSH1 00
[codex:933862] 13c5: PUSH2 048f
[codex:933862] 13c8: DUP3
[codex:933862] 13c9: SLOAD
[codex:933862] 13ca: SWAP1
[codex:933862] 13cb: JUMP
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing role check logic in disassembly**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata = Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata = hexdata[2:]
[codex:933862] code = bytes.fromhex(hexdata)
[codex:933862] # disasm function
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=80):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op, f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] print('==0x067b')
[codex:933862] disasm(0x067b,60)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 27ms:
[codex:933862] ==0x067b
[codex:933862] 067b: JUMPDEST
[codex:933862] 067c: POP
[codex:933862] 067d: JUMP
[codex:933862] 067e: JUMPDEST
[codex:933862] 067f: PUSH1 00
[codex:933862] 0681: DUP1
[codex:933862] 0682: MLOAD
[codex:933862] 0683: PUSH1 20
[codex:933862] 0685: PUSH2 2558
[codex:933862] 0688: DUP4
[codex:933862] 0689: CODECOPY
[codex:933862] 068a: DUP2
[codex:933862] 068b: MLOAD
[codex:933862] 068c: SWAP2
[codex:933862] 068d: MSTORE
[codex:933862] 068e: PUSH2 0696
[codex:933862] 0691: DUP2
[codex:933862] 0692: PUSH2 104d
[codex:933862] 0695: JUMP
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing jump destinations and role checks**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata = Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata = hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disasm
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=50):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] print('==0x0580')
[codex:933862] disasm(0x0580,60)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 28ms:
[codex:933862] ==0x0580
[codex:933862] 0580: PUSH5 8201526084
[codex:933862] 0586: ADD
[codex:933862] 0587: JUMPDEST
[codex:933862] 0588: PUSH1 40
[codex:933862] 058a: MLOAD
[codex:933862] 058b: DUP1
[codex:933862] 058c: SWAP2
[codex:933862] 058d: SUB
[codex:933862] 058e: SWAP1
[codex:933862] 058f: REVERT
[codex:933862] 0590: JUMPDEST
[codex:933862] 0591: PUSH2 059a
[codex:933862] 0594: DUP3
[codex:933862] 0595: DUP3
[codex:933862] 0596: PUSH2 1098
[codex:933862] 0599: JUMP
[codex:933862] 059a: JUMPDEST
[codex:933862] 059b: POP
[codex:933862] 059c: POP
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing role-based access pattern in bytecode**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata = Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata = hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disasm
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=120):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] print('==0x0a60')
[codex:933862] disasm(0x0a60,140)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 27ms:
[codex:933862] ==0x0a60
[codex:933862] 0a60: JUMPDEST
[codex:933862] 0a61: PUSH1 00
[codex:933862] 0a63: SLOAD
[codex:933862] 0a64: PUSH2 0100
[codex:933862] 0a67: SWAP1
[codex:933862] 0a68: DIV
[codex:933862] 0a69: PUSH1 ff
[codex:933862] 0a6b: AND
[codex:933862] 0a6c: ISZERO
[codex:933862] 0a6d: DUP1
[codex:933862] 0a6e: DUP1
[codex:933862] 0a6f: ISZERO
[codex:933862] 0a70: PUSH2 0a80
[codex:933862] 0a73: JUMPI
[codex:933862] 0a74: POP
[codex:933862] 0a75: PUSH1 00
[codex:933862] 0a77: SLOAD
[codex:933862] 0a78: PUSH1 01
[codex:933862] 0a7a: PUSH1 ff
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing initializer role assignments**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disasm
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=80):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] for off in [0x1356,0x1385,0x13ac]:
[codex:933862] print('\\n==',hex(off))
[codex:933862] disasm(off,80)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 27ms:
[codex:933862]
[codex:933862] == 0x1356
[codex:933862] 1356: JUMPDEST
[codex:933862] 1357: PUSH1 00
[codex:933862] 1359: SLOAD
[codex:933862] 135a: PUSH2 0100
[codex:933862] 135d: SWAP1
[codex:933862] 135e: DIV
[codex:933862] 135f: PUSH1 ff
[codex:933862] 1361: AND
[codex:933862] 1362: PUSH2 137d
[codex:933862] 1365: JUMPI
[codex:933862] 1366: PUSH1 40
[codex:933862] 1368: MLOAD
[codex:933862] 1369: PUSH3 461bcd
[codex:933862] 136d: PUSH1 e5
[codex:933862] 136f: SHL
[codex:933862] 1370: DUP2
[codex:933862] 1371: MSTORE
[codex:933862] 1372: PUSH1 04
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing initializer and role granting functions**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disasm
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=80):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] print('==0x1075')
[codex:933862] disasm(0x1075,80)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 27ms:
[codex:933862] ==0x1075
[codex:933862] 1075: JUMPDEST
[codex:933862] 1076: PUSH2 107f
[codex:933862] 1079: DUP3
[codex:933862] 107a: DUP3
[codex:933862] 107b: PUSH2 1590
[codex:933862] 107e: JUMP
[codex:933862] 107f: JUMPDEST
[codex:933862] 1080: PUSH1 00
[codex:933862] 1082: DUP3
[codex:933862] 1083: DUP2
[codex:933862] 1084: MSTORE
[codex:933862] 1085: PUSH2 012d
[codex:933862] 1088: PUSH1 20
[codex:933862] 108a: MSTORE
[codex:933862] 108b: PUSH1 40
[codex:933862] 108d: SWAP1
[codex:933862] 108e: SHA3
[codex:933862] 108f: PUSH2 04e0
[codex:933862] 1092: SWAP1
[codex:933862]
[codex:933862] thinking
[codex:933862] **Investigating role constants in bytecode**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # read 32 bytes at offset 0x2558
[codex:933862] start=0x2558
[codex:933862] const=code[start:start+32]
[codex:933862] print(const.hex())
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 32ms:
[codex:933862] 8ec07e268e32cae7f300b49ad34f20106d088445cb9d9b2d62cbd864638308b2
[codex:933862]
[codex:933862] thinking
[codex:933862] **Investigating role constant usage**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # find PUSH2 0x2558 occurrences
[codex:933862] matches=[]
[codex:933862] for i in range(len(code)-2):
[codex:933862] if code[i]==0x61 and code[i+1]==0x25 and code[i+2]==0x58:
[codex:933862] matches.append(i)
[codex:933862] print(matches)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 27ms:
[codex:933862] [816, 1180, 1221, 1669, 2088, 3090, 3617]
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing function selector offsets**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disassembler
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] positions=[]
[codex:933862] for i in range(len(code)-2):
[codex:933862] if code[i]==0x61 and code[i+1]==0x25 and code[i+2]==0x58:
[codex:933862] positions.append(i)
[codex:933862]
[codex:933862] # helper to disasm few instructions before each
[codex:933862]
[codex:933862] def disasm(start, count=8):
[codex:933862] i=start
[codex:933862] out=[]
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; out.append(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] out.append(f'{i:04x}: {name}'); i+=1
[codex:933862] return out
[codex:933862]
[codex:933862] for pos in positions:
[codex:933862] print('pos',hex(pos))
[codex:933862] for line in disasm(pos-6,12):
[codex:933862] print(' ',line)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 32ms:
[codex:933862] pos 0x330
[codex:933862] 032a: PUSH1 00
[codex:933862] 032c: DUP1
[codex:933862] 032d: MLOAD
[codex:933862] 032e: PUSH1 20
[codex:933862] 0330: PUSH2 2558
[codex:933862] 0333: DUP4
[codex:933862] 0334: CODECOPY
[codex:933862] 0335: DUP2
[codex:933862] 0336: MLOAD
[codex:933862] 0337: SWAP2
[codex:933862] 0338: MSTORE
[codex:933862] 0339: DUP2
[codex:933862] pos 0x49c
[codex:933862] 0496: PUSH1 00
[codex:933862] 0498: DUP1
[codex:933862] 0499: MLOAD
[codex:933862] 049a: PUSH1 20
[codex:933862] 049c: PUSH2 2558
[codex:933862] 049f: DUP4
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing role constants and access controls**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disasm helper
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=80):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] print('==0x0270')
[codex:933862] disasm(0x0270,100)
[codex:933862] print('\\n==0x02bc')
[codex:933862] disasm(0x02bc,100)
[codex:933862] print('\\n==0x02cf')
[codex:933862] disasm(0x02cf,80)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 30ms:
[codex:933862] ==0x0270
[codex:933862] 0270: CALLDATASIZE
[codex:933862] 0271: PUSH1 04
[codex:933862] 0273: PUSH2 202f
[codex:933862] 0276: JUMP
[codex:933862] 0277: JUMPDEST
[codex:933862] 0278: PUSH2 051b
[codex:933862] 027b: JUMP
[codex:933862] 027c: JUMPDEST
[codex:933862] 027d: CALLVALUE
[codex:933862] 027e: DUP1
[codex:933862] 027f: ISZERO
[codex:933862] 0280: PUSH2 0288
[codex:933862] 0283: JUMPI
[codex:933862] 0284: PUSH1 00
[codex:933862] 0286: DUP1
[codex:933862] 0287: REVERT
[codex:933862] 0288: JUMPDEST
[codex:933862] 0289: POP
[codex:933862] 028a: PUSH2 01b0
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing role and ownership logic**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disasm helper
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=80):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] print('==0x1768')
[codex:933862] disasm(0x1768,80)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 28ms:
[codex:933862] ==0x1768
[codex:933862] 1768: JUMPDEST
[codex:933862] 1769: PUSH1 00
[codex:933862] 176b: SLOAD
[codex:933862] 176c: PUSH2 0100
[codex:933862] 176f: SWAP1
[codex:933862] 1770: DIV
[codex:933862] 1771: PUSH1 ff
[codex:933862] 1773: AND
[codex:933862] 1774: PUSH2 178f
[codex:933862] 1777: JUMPI
[codex:933862] 1778: PUSH1 40
[codex:933862] 177a: MLOAD
[codex:933862] 177b: PUSH3 461bcd
[codex:933862] 177f: PUSH1 e5
[codex:933862] 1781: SHL
[codex:933862] 1782: DUP2
[codex:933862] 1783: MSTORE
[codex:933862] 1784: PUSH1 04
[codex:933862] 1786: ADD
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing access controls and upgrade functions**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disasm helper
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=120):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] print('==0x051b')
[codex:933862] disasm(0x051b,120)
[codex:933862] print('\\n==0x059e')
[codex:933862] disasm(0x059e,80)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 28ms:
[codex:933862] ==0x051b
[codex:933862] 051b: JUMPDEST
[codex:933862] 051c: PUSH1 01
[codex:933862] 051e: PUSH1 01
[codex:933862] 0520: PUSH1 a0
[codex:933862] 0522: SHL
[codex:933862] 0523: SUB
[codex:933862] 0524: DUP2
[codex:933862] 0525: AND
[codex:933862] 0526: CALLER
[codex:933862] 0527: EQ
[codex:933862] 0528: PUSH2 0590
[codex:933862] 052b: JUMPI
[codex:933862] 052c: PUSH1 40
[codex:933862] 052e: MLOAD
[codex:933862] 052f: PUSH3 461bcd
[codex:933862] 0533: PUSH1 e5
[codex:933862] 0535: SHL
[codex:933862] 0536: DUP2
[codex:933862] 0537: MSTORE
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing function selectors and roles**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disasm helper
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=80):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] print('==0x04f6')
[codex:933862] disasm(0x04f6,80)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 27ms:
[codex:933862] ==0x04f6
[codex:933862] 04f6: JUMPDEST
[codex:933862] 04f7: PUSH1 00
[codex:933862] 04f9: DUP3
[codex:933862] 04fa: DUP2
[codex:933862] 04fb: MSTORE
[codex:933862] 04fc: PUSH1 fb
[codex:933862] 04fe: PUSH1 20
[codex:933862] 0500: MSTORE
[codex:933862] 0501: PUSH1 40
[codex:933862] 0503: SWAP1
[codex:933862] 0504: SHA3
[codex:933862] 0505: PUSH1 01
[codex:933862] 0507: ADD
[codex:933862] 0508: SLOAD
[codex:933862] 0509: PUSH2 0511
[codex:933862] 050c: DUP2
[codex:933862] 050d: PUSH2 104d
[codex:933862] 0510: JUMP
[codex:933862] 0511: JUMPDEST
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing role management functions and selectors**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disasm helper
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=120):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] print('==0x06a1')
[codex:933862] disasm(0x06a1,120)
[codex:933862] print('\\n==0x076e')
[codex:933862] disasm(0x076e,100)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 26ms:
[codex:933862] ==0x06a1
[codex:933862] 06a1: JUMPDEST
[codex:933862] 06a2: ADDRESS
[codex:933862] 06a3: PUSH1 01
[codex:933862] 06a5: PUSH1 01
[codex:933862] 06a7: PUSH1 a0
[codex:933862] 06a9: SHL
[codex:933862] 06aa: SUB
[codex:933862] 06ab: PUSH32 00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd163
[codex:933862] 06cc: AND
[codex:933862] 06cd: EQ
[codex:933862] 06ce: ISZERO
[codex:933862] 06cf: PUSH2 06ea
[codex:933862] 06d2: JUMPI
[codex:933862] 06d3: PUSH1 40
[codex:933862] 06d5: MLOAD
[codex:933862] 06d6: PUSH3 461bcd
[codex:933862] 06da: PUSH1 e5
[codex:933862] 06dc: SHL
[codex:933862] 06dd: DUP2
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing upgrade and transfer functions**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] import hashlib
[codex:933862] sig='safeTransferFrom(address,address,uint256)'
[codex:933862] selector=hashlib.sha3_256(sig.encode()).hexdigest()[:8]
[codex:933862] print(selector)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 23ms:
[codex:933862] 3453ba4a
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing contract role and upgrade security**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] positions=[i for i,b in enumerate(code) if b==0xf4]
[codex:933862] print('DELEGATECALL positions', [hex(p) for p in positions])
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 29ms:
[codex:933862] DELEGATECALL positions ['0x1c45', '0x1c53', '0x1d5b']
[codex:933862]
[codex:933862] thinking
[codex:933862] **Investigating delegatecall usage**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disasm helper
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=80):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] print('==0x1c30')
[codex:933862] disasm(0x1c30,100)
[codex:933862] print('\\n==0x1d50')
[codex:933862] disasm(0x1d50,80)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 27ms:
[codex:933862] ==0x1c30
[codex:933862] 1c30: DUP5
[codex:933862] 1c31: PUSH1 01
[codex:933862] 1c33: PUSH1 01
[codex:933862] 1c35: PUSH1 a0
[codex:933862] 1c37: SHL
[codex:933862] 1c38: SUB
[codex:933862] 1c39: AND
[codex:933862] 1c3a: DUP5
[codex:933862] 1c3b: PUSH1 40
[codex:933862] 1c3d: MLOAD
[codex:933862] 1c3e: PUSH2 1c47
[codex:933862] 1c41: SWAP2
[codex:933862] 1c42: SWAP1
[codex:933862] 1c43: PUSH2 24f4
[codex:933862] 1c46: JUMP
[codex:933862] 1c47: JUMPDEST
[codex:933862] 1c48: PUSH1 00
[codex:933862] 1c4a: PUSH1 40
[codex:933862] 1c4c: MLOAD
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing delegatecall and approval risks**
[codex:933862] exec
[codex:933862] /bin/bash -lc 'rg -n "095ea7b3|a22cb465" BYTECODE_BUNDLE.txt' in /tmp/codex-multi-g8wac9zh exited 1 in 7ms:
[codex:933862]
[codex:933862]
[codex:933862] thinking
[codex:933862] **Examining token transfer protections**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # find PUSH2 1425 sequences (0x61 0x14 0x25)
[codex:933862] positions=[i for i in range(len(code)-2) if code[i]==0x61 and code[i+1]==0x14 and code[i+2]==0x25]
[codex:933862] print([hex(p) for p in positions])
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 27ms:
[codex:933862] ['0x1067']
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing internal function calls**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disasm helper
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=60):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] print('==0x104d')
[codex:933862] disasm(0x104d,40)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 28ms:
[codex:933862] ==0x104d
[codex:933862] 104d: JUMPDEST
[codex:933862] 104e: PUSH2 067b
[codex:933862] 1051: DUP2
[codex:933862] 1052: CALLER
[codex:933862] 1053: PUSH2 13cc
[codex:933862] 1056: JUMP
[codex:933862] 1057: JUMPDEST
[codex:933862] 1058: PUSH2 04e0
[codex:933862] 105b: PUSH1 01
[codex:933862] 105d: PUSH1 01
[codex:933862] 105f: PUSH1 a0
[codex:933862] 1061: SHL
[codex:933862] 1062: SUB
[codex:933862] 1063: DUP5
[codex:933862] 1064: AND
[codex:933862] 1065: DUP4
[codex:933862] 1066: DUP4
[codex:933862] 1067: PUSH2 1425
[codex:933862] 106a: JUMP
[codex:933862]
[codex:933862] thinking
[codex:933862] **Analyzing modifier and internal function control flow**
[codex:933862] exec
[codex:933862] /bin/bash -lc "python3 - <<'PY'
[codex:933862] from pathlib import Path
[codex:933862] hexdata=Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().splitlines()[0].strip()
[codex:933862] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:933862] code=bytes.fromhex(hexdata)
[codex:933862] # disasm helper
[codex:933862] opcodes={i: f'PUSH{i-0x5f}' for i in range(0x60,0x80)}
[codex:933862] mn={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',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:933862] for i in range(0x80,0x90): mn[i]=f'DUP{i-0x7f}'
[codex:933862] for i in range(0x90,0xa0): mn[i]=f'SWAP{i-0x8f}'
[codex:933862] for i in range(0xa0,0xa5): mn[i]=f'LOG{i-0xa0}'
[codex:933862] mn.update(opcodes)
[codex:933862]
[codex:933862] def disasm(start, count=80):
[codex:933862] i=start
[codex:933862] for _ in range(count):
[codex:933862] if i>=len(code): break
[codex:933862] op=code[i]; name=mn.get(op,f'OP{op:02x}')
[codex:933862] if 0x60<=op<=0x7f:
[codex:933862] n=op-0x5f; data=code[i+1:i+1+n]; print(f'{i:04x}: {name} {data.hex()}'); i+=1+n
[codex:933862] else:
[codex:933862] print(f'{i:04x}: {name}'); i+=1
[codex:933862]
[codex:933862] print('==0x04be')
[codex:933862] disasm(0x04be,80)
[codex:933862] PY" in /tmp/codex-multi-g8wac9zh succeeded in 30ms:
[codex:933862] ==0x04be
[codex:933862] 04be: JUMPDEST
[codex:933862] 04bf: PUSH1 00
[codex:933862] 04c1: DUP1
[codex:933862] 04c2: MLOAD
[codex:933862] 04c3: PUSH1 20
[codex:933862] 04c5: PUSH2 2558
[codex:933862] 04c8: DUP4
[codex:933862] 04c9: CODECOPY
[codex:933862] 04ca: DUP2
[codex:933862] 04cb: MLOAD
[codex:933862] 04cc: SWAP2
[codex:933862] 04cd: MSTORE
[codex:933862] 04ce: PUSH2 04d6
[codex:933862] 04d1: DUP2
[codex:933862] 04d2: PUSH2 104d
[codex:933862] 04d5: JUMP
[codex:933862] 04d6: JUMPDEST
[codex:933862] 04d7: PUSH2 04e0
[codex:933862] 04da: DUP4
[codex:933862]
[codex:933862] thinking
[codex:933862] **Finalizing security analysis summary**
[codex:933862] codex
[codex:933862] {"no_findings":true,"summary":"No concrete exploitable value-extraction path identified in the runtime bytecode; observable value-transfer and upgrade flows appear gated by role/owner checks, and no unprotected CALL/DELEGATECALL/SELFDESTRUCT patterns were found.","findings":[]}
[codex:933862] tokens used
[codex:933862] 122,087
[codex:933862] {"no_findings":true,"summary":"No concrete exploitable value-extraction path identified in the runtime bytecode; observable value-transfer and upgrade flows appear gated by role/owner checks, and no unprotected CALL/DELEGATECALL/SELFDESTRUCT patterns were found.","findings":[]}
{
"codex": {
"ran_at": "2025-12-31T19:00:35.930886+00:00",
"returncode": 0
},
"summary": "No concrete exploitable value-extraction path identified in the runtime bytecode; observable value-transfer and upgrade flows appear gated by role/owner checks, and no unprotected CALL/DELEGATECALL/SELFDESTRUCT patterns were found.",
"raw_final": {
"summary": "No concrete exploitable value-extraction path identified in the runtime bytecode; observable value-transfer and upgrade flows appear gated by role/owner checks, and no unprotected CALL/DELEGATECALL/SELFDESTRUCT patterns were found.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x014f 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x715018a6 00000019: GT 0000001a: PUSH2 0x00b6 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xa217fddf 00000024: GT 00000025: PUSH2 0x006f 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xa217fddf 0000002f: EQ 00000030: PUSH2 0x03c2 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xca15c873 0000003a: EQ 0000003b: PUSH2 0x03d7 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xd547741f 00000045: EQ 00000046: PUSH2 0x03f7 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xe6930a22 00000050: EQ 00000051: PUSH2 0x0417 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xeb14f53e 0000005b: EQ 0000005c: PUSH2 0x0437 0000005f: JUMPI 00000060: DUP1 00000061: PUSH4 0xf2fde38b 00000066: EQ 00000067: PUSH2 0x044a 0000006a: JUMPI 0000006b: PUSH1 0x00 0000006d: DUP1 0000006e: REVERT 0000006f: JUMPDEST 00000070: DUP1 00000071: PUSH4 0x715018a6 00000076: EQ 00000077: PUSH2 0x0304 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0x77f050b0 00000081: EQ 00000082: PUSH2 0x0319 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0x8129fc1c 0000008c: EQ 0000008d: PUSH2 0x033b 00000090: JUMPI 00000091: DUP1 00000092: PUSH4 0x8da5cb5b 00000097: EQ 00000098: PUSH2 0x0350 0000009b: JUMPI 0000009c: DUP1 0000009d: PUSH4 0x9010d07c 000000a2: EQ 000000a3: PUSH2 0x0382 000000a6: JUMPI 000000a7: DUP1 000000a8: PUSH4 0x91d14854 000000ad: EQ 000000ae: PUSH2 0x03a2 000000b1: JUMPI 000000b2: PUSH1 0x00 000000b4: DUP1 000000b5: REVERT 000000b6: JUMPDEST 000000b7: DUP1 000000b8: PUSH4 0x36568abe 000000bd: GT 000000be: PUSH2 0x0108 000000c1: JUMPI 000000c2: DUP1 000000c3: PUSH4 0x36568abe 000000c8: EQ 000000c9: PUSH2 0x025c 000000cc: JUMPI 000000cd: DUP1 000000ce: PUSH4 0x3659cfe6 000000d3: EQ 000000d4: PUSH2 0x027c 000000d7: JUMPI 000000d8: DUP1 000000d9: PUSH4 0x3bd8db24 000000de: EQ 000000df: PUSH2 0x029c 000000e2: JUMPI 000000e3: DUP1 000000e4: PUSH4 0x4f1ef286 000000e9: EQ 000000ea: PUSH2 0x02bc 000000ed: JUMPI 000000ee: DUP1 000000ef: PUSH4 0x52d1902d 000000f4: EQ 000000f5: PUSH2 0x02cf 000000f8: JUMPI 000000f9: DUP1 000000fa: PUSH4 0x57a987a3 000000ff: EQ 00000100: PUSH2 0x02e4 00000103: JUMPI 00000104: PUSH1 0x00 00000106: DUP1 00000107: REVERT 00000108: JUMPDEST 00000109: DUP1 0000010a: PUSH4 0x01ffc9a7 0000010f: EQ 00000110: PUSH2 0x015b 00000113: JUMPI 00000114: DUP1 00000115: PUSH4 0x02cba741 0000011a: EQ 0000011b: PUSH2 0x0190 0000011e: JUMPI 0000011f: DUP1 00000120: PUSH4 0x05b1137b 00000125: EQ 00000126: PUSH2 0x01b2 00000129: JUMPI 0000012a: DUP1 0000012b: PUSH4 0x150b7a02 00000130: EQ 00000131: PUSH2 0x01c5 00000134: JUMPI 00000135: DUP1 00000136: PUSH4 0x248a9ca3 0000013b: EQ 0000013c: PUSH2 0x01fe 0000013f: JUMPI 00000140: DUP1 00000141: PUSH4 0x2f2ff15d 00000146: EQ 00000147: PUSH2 0x023c 0000014a: JUMPI 0000014b: PUSH1 0x00 0000014d: DUP1 0000014e: REVERT 0000014f: JUMPDEST 00000150: CALLDATASIZE 00000151: PUSH2 0x0156 00000154: JUMPI 00000155: STOP 00000156: JUMPDEST 00000157: PUSH1 0x00 00000159: DUP1 0000015a: REVERT 0000015b: JUMPDEST 0000015c: CALLVALUE 0000015d: DUP1 0000015e: ISZERO 0000015f: PUSH2 0x0167 00000162: JUMPI 00000163: PUSH1 0x00 00000165: DUP1 00000166: REVERT 00000167: JUMPDEST 00000168: POP 00000169: PUSH2 0x017b 0000016c: PUSH2 0x0176 0000016f: CALLDATASIZE 00000170: PUSH1 0x04 00000172: PUSH2 0x1e5b 00000175: JUMP 00000176: JUMPDEST 00000177: PUSH2 0x046a 0000017a: JUMP 0000017b: JUMPDEST 0000017c: PUSH1 0x40 0000017e: MLOAD 0000017f: SWAP1 00000180: ISZERO 00000181: ISZERO 00000182: DUP2 00000183: MSTORE 00000184: PUSH1 0x20 00000186: ADD 00000187: JUMPDEST 00000188: PUSH1 0x40 0000018a: MLOAD 0000018b: DUP1 0000018c: SWAP2 0000018d: SUB 0000018e: SWAP1 0000018f: RETURN 00000190: JUMPDEST 00000191: CALLVALUE 00000192: DUP1 00000193: ISZERO 00000194: PUSH2 0x019c 00000197: JUMPI 00000198: PUSH1 0x00 0000019a: DUP1 0000019b: REVERT 0000019c: JUMPDEST 0000019d: POP 0000019e: PUSH2 0x01b0 000001a1: PUSH2 0x01ab 000001a4: CALLDATASIZE 000001a5: PUSH1 0x04 000001a7: PUSH2 0x1e9a 000001aa: JUMP 000001ab: JUMPDEST 000001ac: PUSH2 0x0495 000001af: JUMP 000001b0: JUMPDEST 000001b1: STOP 000001b2: JUMPDEST 000001b3: PUSH2 0x01b0 000001b6: PUSH2 0x01c0 000001b9: CALLDATASIZE 000001ba: PUSH1 0x04 000001bc: PUSH2 0x1edb 000001bf: JUMP 000001c0: JUMPDEST 000001c1: PUSH2 0x04be 000001c4: JUMP 000001c5: JUMPDEST 000001c6: CALLVALUE 000001c7: DUP1 000001c8: ISZERO 000001c9: PUSH2 0x01d1 000001cc: JUMPI 000001cd: PUSH1 0x00 000001cf: DUP1 000001d0: REVERT 000001d1: JUMPDEST 000001d2: POP 000001d3: PUSH2 0x01e5 000001d6: PUSH2 0x01e0 000001d9: CALLDATASIZE 000001da: PUSH1 0x04 000001dc: PUSH2 0x1faa 000001df: JUMP 000001e0: JUMPDEST 000001e1: PUSH2 0x04e5 000001e4: JUMP 000001e5: JUMPDEST 000001e6: PUSH1 0x40 000001e8: MLOAD 000001e9: PUSH1 0x01 000001eb: PUSH1 0x01 000001ed: PUSH1 0xe0 000001ef: SHL 000001f0: SUB 000001f1: NOT 000001f2: SWAP1 000001f3: SWAP2 000001f4: AND 000001f5: DUP2 000001f6: MSTORE 000001f7: PUSH1 0x20 000001f9: ADD 000001fa: PUSH2 0x0187 000001fd: JUMP 000001fe: JUMPDEST 000001ff: CALLVALUE 00000200: DUP1 00000201: ISZERO 00000202: PUSH2 0x020a 00000205: JUMPI 00000206: PUSH1 0x00 00000208: DUP1 00000209: REVERT 0000020a: JUMPDEST 0000020b: POP 0000020c: PUSH2 0x022e 0000020f: PUSH2 0x0219 00000212: CALLDATASIZE 00000213: PUSH1 0x04 00000215: PUSH2 0x2016 00000218: JUMP 00000219: JUMPDEST 0000021a: PUSH1 0x00 0000021c: SWAP1 0000021d: DUP2 0000021e: MSTORE 0000021f: PUSH1 0xfb 00000221: PUSH1 0x20 00000223: MSTORE 00000224: PUSH1 0x40 00000226: SWAP1 00000227: KECCAK256 00000228: PUSH1 0x01 0000022a: ADD 0000022b: SLOAD 0000022c: SWAP1 0000022d: JUMP 0000022e: JUMPDEST 0000022f: PUSH1 0x40 00000231: MLOAD 00000232: SWAP1 00000233: DUP2 00000234: MSTORE 00000235: PUSH1 0x20 00000237: ADD 00000238: PUSH2 0x0187 0000023b: JUMP 0000023c: JUMPDEST 0000023d: CALLVALUE 0000023e: DUP1 0000023f: ISZERO 00000240: PUSH2 0x0248 00000243: JUMPI 00000244: PUSH1 0x00 00000246: DUP1 00000247: REVERT 00000248: JUMPDEST 00000249: POP 0000024a: PUSH2 0x01b0 0000024d: PUSH2 0x0257 00000250: CALLDATASIZE 00000251: PUSH1 0x04 00000253: PUSH2 0x202f 00000256: JUMP 00000257: JUMPDEST 00000258: PUSH2 0x04f6 0000025b: JUMP 0000025c: JUMPDEST 0000025d: CALLVALUE 0000025e: DUP1 0000025f: ISZERO 00000260: PUSH2 0x0268 00000263: JUMPI 00000264: PUSH1 0x00 00000266: DUP1 00000267: REVERT 00000268: JUMPDEST 00000269: POP 0000026a: PUSH2 0x01b0 0000026d: PUSH2 0x0277 00000270: CALLDATASIZE 00000271: PUSH1 0x04 00000273: PUSH2 0x202f 00000276: JUMP 00000277: JUMPDEST 00000278: PUSH2 0x051b 0000027b: JUMP 0000027c: JUMPDEST 0000027d: CALLVALUE 0000027e: DUP1 0000027f: ISZERO 00000280: PUSH2 0x0288 00000283: JUMPI 00000284: PUSH1 0x00 00000286: DUP1 00000287: REVERT 00000288: JUMPDEST 00000289: POP 0000028a: PUSH2 0x01b0 0000028d: PUSH2 0x0297 00000290: CALLDATASIZE 00000291: PUSH1 0x04 00000293: PUSH2 0x205f 00000296: JUMP 00000297: JUMPDEST 00000298: PUSH2 0x059e 0000029b: JUMP 0000029c: JUMPDEST 0000029d: CALLVALUE 0000029e: DUP1 0000029f: ISZERO 000002a0: PUSH2 0x02a8 000002a3: JUMPI 000002a4: PUSH1 0x00 000002a6: DUP1 000002a7: REVERT 000002a8: JUMPDEST 000002a9: POP 000002aa: PUSH2 0x01b0 000002ad: PUSH2 0x02b7 000002b0: CALLDATASIZE 000002b1: PUSH1 0x04 000002b3: PUSH2 0x1e9a 000002b6: JUMP 000002b7: JUMPDEST 000002b8: PUSH2 0x067e 000002bb: JUMP 000002bc: JUMPDEST 000002bd: PUSH2 0x01b0 000002c0: PUSH2 0x02ca 000002c3: CALLDATASIZE 000002c4: PUSH1 0x04 000002c6: PUSH2 0x207c 000002c9: JUMP 000002ca: JUMPDEST 000002cb: PUSH2 0x06a1 000002ce: JUMP 000002cf: JUMPDEST 000002d0: CALLVALUE 000002d1: DUP1 000002d2: ISZERO 000002d3: PUSH2 0x02db 000002d6: JUMPI 000002d7: PUSH1 0x00 000002d9: DUP1 000002da: REVERT 000002db: JUMPDEST 000002dc: POP 000002dd: PUSH2 0x022e 000002e0: PUSH2 0x076e 000002e3: JUMP 000002e4: JUMPDEST 000002e5: CALLVALUE 000002e6: DUP1 000002e7: ISZERO 000002e8: PUSH2 0x02f0 000002eb: JUMPI 000002ec: PUSH1 0x00 000002ee: DUP1 000002ef: REVERT 000002f0: JUMPDEST 000002f1: POP 000002f2: PUSH2 0x01b0 000002f5: PUSH2 0x02ff 000002f8: CALLDATASIZE 000002f9: PUSH1 0x04 000002fb: PUSH2 0x2118 000002fe: JUMP 000002ff: JUMPDEST 00000300: PUSH2 0x0821 00000303: JUMP 00000304: JUMPDEST 00000305: CALLVALUE 00000306: DUP1 00000307: ISZERO 00000308: PUSH2 0x0310 0000030b: JUMPI 0000030c: PUSH1 0x00 0000030e: DUP1 0000030f: REVERT 00000310: JUMPDEST 00000311: POP 00000312: PUSH2 0x01b0 00000315: PUSH2 0x0a4c 00000318: JUMP 00000319: JUMPDEST 0000031a: CALLVALUE 0000031b: DUP1 0000031c: ISZERO 0000031d: PUSH2 0x0325 00000320: JUMPI 00000321: PUSH1 0x00 00000323: DUP1 00000324: REVERT 00000325: JUMPDEST 00000326: POP 00000327: PUSH2 0x022e 0000032a: PUSH1 0x00 0000032c: DUP1 0000032d: MLOAD 0000032e: PUSH1 0x20 00000330: PUSH2 0x2558 00000333: DUP4 00000334: CODECOPY 00000335: DUP2 00000336: MLOAD 00000337: SWAP2 00000338: MSTORE 00000339: DUP2 0000033a: JUMP 0000033b: JUMPDEST 0000033c: CALLVALUE 0000033d: DUP1 0000033e: ISZERO 0000033f: PUSH2 0x0347 00000342: JUMPI 00000343: PUSH1 0x00 00000345: DUP1 00000346: REVERT 00000347: JUMPDEST 00000348: POP 00000349: PUSH2 0x01b0 0000034c: PUSH2 0x0a60 0000034f: JUMP 00000350: JUMPDEST 00000351: CALLVALUE 00000352: DUP1 00000353: ISZERO 00000354: PUSH2 0x035c 00000357: JUMPI 00000358: PUSH1 0x00 0000035a: DUP1 0000035b: REVERT 0000035c: JUMPDEST 0000035d: POP 0000035e: PUSH1 0x97 00000360: SLOAD 00000361: PUSH1 0x01 00000363: PUSH1 0x01 00000365: PUSH1 0xa0 00000367: SHL 00000368: SUB 00000369: AND 0000036a: JUMPDEST 0000036b: PUSH1 0x40 0000036d: MLOAD 0000036e: PUSH1 0x01 00000370: PUSH1 0x01 00000372: PUSH1 0xa0 00000374: SHL 00000375: SUB 00000376: SWAP1 00000377: SWAP2 00000378: AND 00000379: DUP2 0000037a: MSTORE 0000037b: PUSH1 0x20 0000037d: ADD 0000037e: PUSH2 0x0187 00000381: JUMP 00000382: JUMPDEST 00000383: CALLVALUE 00000384: DUP1 00000385: ISZERO 00000386: PUSH2 0x038e 00000389: JUMPI 0000038a: PUSH1 0x00 0000038c: DUP1 0000038d: REVERT 0000038e: JUMPDEST 0000038f: POP 00000390: PUSH2 0x036a 00000393: PUSH2 0x039d 00000396: CALLDATASIZE 00000397: PUSH1 0x04 00000399: PUSH2 0x21b2 0000039c: JUMP 0000039d: JUMPDEST 0000039e: PUSH2 0x0b83 000003a1: JUMP 000003a2: JUMPDEST 000003a3: CALLVALUE 000003a4: DUP1 000003a5: ISZERO 000003a6: PUSH2 0x03ae 000003a9: JUMPI 000003aa: PUSH1 0x00 000003ac: DUP1 000003ad: REVERT 000003ae: JUMPDEST 000003af: POP 000003b0: PUSH2 0x017b 000003b3: PUSH2 0x03bd 000003b6: CALLDATASIZE 000003b7: PUSH1 0x04 000003b9: PUSH2 0x202f 000003bc: JUMP 000003bd: JUMPDEST 000003be: PUSH2 0x0ba3 000003c1: JUMP 000003c2: JUMPDEST 000003c3: CALLVALUE 000003c4: DUP1 000003c5: ISZERO 000003c6: PUSH2 0x03ce 000003c9: JUMPI 000003ca: PUSH1 0x00 000003cc: DUP1 000003cd: REVERT 000003ce: JUMPDEST 000003cf: POP 000003d0: PUSH2 0x022e 000003d3: PUSH1 0x00 000003d5: DUP2 000003d6: JUMP 000003d7: JUMPDEST 000003d8: CALLVALUE 000003d9: DUP1 000003da: ISZERO 000003db: PUSH2 0x03e3 000003de: JUMPI 000003df: PUSH1 0x00 000003e1: DUP1 000003e2: REVERT 000003e3: JUMPDEST 000003e4: POP 000003e5: PUSH2 0x022e 000003e8: PUSH2 0x03f2 000003eb: CALLDATASIZE 000003ec: PUSH1 0x04 000003ee: PUSH2 0x2016 000003f1: JUMP 000003f2: JUMPDEST 000003f3: PUSH2 0x0bce 000003f6: JUMP 000003f7: JUMPDEST 000003f8: CALLVALUE 000003f9: DUP1 000003fa: ISZERO 000003fb: PUSH2 0x0403 000003fe: JUMPI 000003ff: PUSH1 0x00 00000401: DUP1 00000402: REVERT 00000403: JUMPDEST 00000404: POP 00000405: PUSH2 0x01b0 00000408: PUSH2 0x0412 0000040b: CALLDATASIZE 0000040c: PUSH1 0x04 0000040e: PUSH2 0x202f 00000411: JUMP 00000412: JUMPDEST 00000413: PUSH2 0x0be6 00000416: JUMP 00000417: JUMPDEST 00000418: CALLVALUE 00000419: DUP1 0000041a: ISZERO 0000041b: PUSH2 0x0423 0000041e: JUMPI 0000041f: PUSH1 0x00 00000421: DUP1 00000422: REVERT 00000423: JUMPDEST 00000424: POP 00000425: PUSH2 0x01b0 00000428: PUSH2 0x0432 0000042b: CALLDATASIZE 0000042c: PUSH1 0x04 0000042e: PUSH2 0x2118 00000431: JUMP 00000432: JUMPDEST 00000433: PUSH2 0x0c0b 00000436: JUMP 00000437: JUMPDEST 00000438: PUSH2 0x01b0 0000043b: PUSH2 0x0445 0000043e: CALLDATASIZE 0000043f: PUSH1 0x04 00000441: PUSH2 0x21d4 00000444: JUMP 00000445: JUMPDEST 00000446: PUSH2 0x0e1a 00000449: JUMP 0000044a: JUMPDEST 0000044b: CALLVALUE 0000044c: DUP1 0000044d: ISZERO 0000044e: PUSH2 0x0456 00000451: JUMPI 00000452: PUSH1 0x00 00000454: DUP1 00000455: REVERT 00000456: JUMPDEST 00000457: POP 00000458: PUSH2 0x01b0 0000045b: PUSH2 0x0465 0000045e: CALLDATASIZE 0000045f: PUSH1 0x04 00000461: PUSH2 0x205f 00000464: JUMP 00000465: JUMPDEST 00000466: PUSH2 0x0f93 00000469: JUMP 0000046a: JUMPDEST 0000046b: PUSH1 0x00 0000046d: PUSH1 0x01 0000046f: PUSH1 0x01 00000471: PUSH1 0xe0 00000473: SHL 00000474: SUB 00000475: NOT 00000476: DUP3 00000477: AND 00000478: PUSH4 0x5a05180f 0000047d: PUSH1 0xe0 0000047f: SHL 00000480: EQ 00000481: DUP1 00000482: PUSH2 0x048f 00000485: JUMPI 00000486: POP 00000487: PUSH2 0x048f 0000048a: DUP3 0000048b: PUSH2 0x1018 0000048e: JUMP 0000048f: JUMPDEST 00000490: SWAP3 00000491: SWAP2 00000492: POP 00000493: POP 00000494: JUMP 00000495: JUMPDEST 00000496: PUSH1 0x00 00000498: DUP1 00000499: MLOAD 0000049a: PUSH1 0x20 0000049c: PUSH2 0x2558 0000049f: DUP4 000004a0: CODECOPY 000004a1: DUP2 000004a2: MLOAD 000004a3: SWAP2 000004a4: MSTORE 000004a5: PUSH2 0x04ad 000004a8: DUP2 000004a9: PUSH2 0x104d 000004ac: JUMP 000004ad: JUMPDEST 000004ae: PUSH2 0x04b8 000004b1: DUP5 000004b2: DUP5 000004b3: DUP5 000004b4: PUSH2 0x1057 000004b7: JUMP 000004b8: JUMPDEST 000004b9: POP 000004ba: POP 000004bb: POP 000004bc: POP 000004bd: JUMP 000004be: JUMPDEST 000004bf: PUSH1 0x00 000004c1: DUP1 000004c2: MLOAD 000004c3: PUSH1 0x20 000004c5: PUSH2 0x2558 000004c8: DUP4 000004c9: CODECOPY 000004ca: DUP2 000004cb: MLOAD 000004cc: SWAP2 000004cd: MSTORE 000004ce: PUSH2 0x04d6 000004d1: DUP2 000004d2: PUSH2 0x104d 000004d5: JUMP 000004d6: JUMPDEST 000004d7: PUSH2 0x04e0 000004da: DUP4 000004db: DUP4 000004dc: PUSH2 0x106b 000004df: JUMP 000004e0: JUMPDEST 000004e1: POP 000004e2: POP 000004e3: POP 000004e4: JUMP 000004e5: JUMPDEST 000004e6: PUSH4 0x0a85bd01 000004eb: PUSH1 0xe1 000004ed: SHL 000004ee: JUMPDEST 000004ef: SWAP5 000004f0: SWAP4 000004f1: POP 000004f2: POP 000004f3: POP 000004f4: POP 000004f5: JUMP 000004f6: JUMPDEST 000004f7: PUSH1 0x00 000004f9: DUP3 000004fa: DUP2 000004fb: MSTORE 000004fc: PUSH1 0xfb 000004fe: PUSH1 0x20 00000500: MSTORE 00000501: PUSH1 0x40 00000503: SWAP1 00000504: KECCAK256 00000505: PUSH1 0x01 00000507: ADD 00000508: SLOAD 00000509: PUSH2 0x0511 0000050c: DUP2 0000050d: PUSH2 0x104d 00000510: JUMP 00000511: JUMPDEST 00000512: PUSH2 0x04e0 00000515: DUP4 00000516: DUP4 00000517: PUSH2 0x1075 0000051a: JUMP 0000051b: JUMPDEST 0000051c: PUSH1 0x01 0000051e: PUSH1 0x01 00000520: PUSH1 0xa0 00000522: SHL 00000523: SUB 00000524: DUP2 00000525: AND 00000526: CALLER 00000527: EQ 00000528: PUSH2 0x0590 0000052b: JUMPI 0000052c: PUSH1 0x40 0000052e: MLOAD 0000052f: PUSH3 0x461bcd 00000533: PUSH1 0xe5 00000535: SHL 00000536: DUP2 00000537: MSTORE 00000538: PUSH1 0x20 0000053a: PUSH1 0x04 0000053c: DUP3 0000053d: ADD 0000053e: MSTORE 0000053f: PUSH1 0x2f 00000541: PUSH1 0x24 00000543: DUP3 00000544: ADD 00000545: MSTORE 00000546: PUSH32 0x416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e6365 00000567: PUSH1 0x44 00000569: DUP3 0000056a: ADD 0000056b: MSTORE 0000056c: PUSH15 0x103937b632b9903337b91039b2b633 0000057c: PUSH1 0x89 0000057e: SHL 0000057f: PUSH1 0x64 00000581: DUP3 00000582: ADD 00000583: MSTORE 00000584: PUSH1 0x84 00000586: ADD 00000587: JUMPDEST 00000588: PUSH1 0x40 0000058a: MLOAD 0000058b: DUP1 0000058c: SWAP2 0000058d: SUB 0000058e: SWAP1 0000058f: REVERT 00000590: JUMPDEST 00000591: PUSH2 0x059a 00000594: DUP3 00000595: DUP3 00000596: PUSH2 0x1098 00000599: JUMP 0000059a: JUMPDEST 0000059b: POP 0000059c: POP 0000059d: JUMP 0000059e: JUMPDEST 0000059f: ADDRESS 000005a0: PUSH1 0x01 000005a2: PUSH1 0x01 000005a4: PUSH1 0xa0 000005a6: SHL 000005a7: SUB 000005a8: PUSH32 0x00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd163 000005c9: AND 000005ca: EQ 000005cb: ISZERO 000005cc: PUSH2 0x05e7 000005cf: JUMPI 000005d0: PUSH1 0x40 000005d2: MLOAD 000005d3: PUSH3 0x461bcd 000005d7: PUSH1 0xe5 000005d9: SHL 000005da: DUP2 000005db: MSTORE 000005dc: PUSH1 0x04 000005de: ADD 000005df: PUSH2 0x0587 000005e2: SWAP1 000005e3: PUSH2 0x2240 000005e6: JUMP 000005e7: JUMPDEST 000005e8: PUSH32 0x00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd163 00000609: PUSH1 0x01 0000060b: PUSH1 0x01 0000060d: PUSH1 0xa0 0000060f: SHL 00000610: SUB 00000611: AND 00000612: PUSH2 0x0630 00000615: PUSH1 0x00 00000617: DUP1 00000618: MLOAD 00000619: PUSH1 0x20 0000061b: PUSH2 0x2511 0000061e: DUP4 0000061f: CODECOPY 00000620: DUP2 00000621: MLOAD 00000622: SWAP2 00000623: MSTORE 00000624: SLOAD 00000625: PUSH1 0x01 00000627: PUSH1 0x01 00000629: PUSH1 0xa0 0000062b: SHL 0000062c: SUB 0000062d: AND 0000062e: SWAP1 0000062f: JUMP 00000630: JUMPDEST 00000631: PUSH1 0x01 00000633: PUSH1 0x01 00000635: PUSH1 0xa0 00000637: SHL 00000638: SUB 00000639: AND 0000063a: EQ 0000063b: PUSH2 0x0656 0000063e: JUMPI 0000063f: PUSH1 0x40 00000641: MLOAD 00000642: PUSH3 0x461bcd 00000646: PUSH1 0xe5 00000648: SHL 00000649: DUP2 0000064a: MSTORE 0000064b: PUSH1 0x04 0000064d: ADD 0000064e: PUSH2 0x0587 00000651: SWAP1 00000652: PUSH2 0x228c 00000655: JUMP 00000656: JUMPDEST 00000657: PUSH2 0x065f 0000065a: DUP2 0000065b: PUSH2 0x10bb 0000065e: JUMP 0000065f: JUMPDEST 00000660: PUSH1 0x40 00000662: DUP1 00000663: MLOAD 00000664: PUSH1 0x00 00000666: DUP1 00000667: DUP3 00000668: MSTORE 00000669: PUSH1 0x20 0000066b: DUP3 0000066c: ADD 0000066d: SWAP1 0000066e: SWAP3 0000066f: MSTORE 00000670: PUSH2 0x067b 00000673: SWAP2 00000674: DUP4 00000675: SWAP2 00000676: SWAP1 00000677: PUSH2 0x10c3 0000067a: JUMP 0000067b: JUMPDEST 0000067c: POP 0000067d: JUMP 0000067e: JUMPDEST 0000067f: PUSH1 0x00 00000681: DUP1 00000682: MLOAD 00000683: PUSH1 0x20 00000685: PUSH2 0x2558 00000688: DUP4 00000689: CODECOPY 0000068a: DUP2 0000068b: MLOAD 0000068c: SWAP2 0000068d: MSTORE 0000068e: PUSH2 0x0696 00000691: DUP2 00000692: PUSH2 0x104d 00000695: JUMP 00000696: JUMPDEST 00000697: PUSH2 0x04b8 0000069a: DUP5 0000069b: DUP5 0000069c: DUP5 0000069d: PUSH2 0x123d 000006a0: JUMP 000006a1: JUMPDEST 000006a2: ADDRESS 000006a3: PUSH1 0x01 000006a5: PUSH1 0x01 000006a7: PUSH1 0xa0 000006a9: SHL 000006aa: SUB 000006ab: PUSH32 0x00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd163 000006cc: AND 000006cd: EQ 000006ce: ISZERO 000006cf: PUSH2 0x06ea 000006d2: JUMPI 000006d3: PUSH1 0x40 000006d5: MLOAD 000006d6: PUSH3 0x461bcd 000006da: PUSH1 0xe5 000006dc: SHL 000006dd: DUP2 000006de: MSTORE 000006df: PUSH1 0x04 000006e1: ADD 000006e2: PUSH2 0x0587 000006e5: SWAP1 000006e6: PUSH2 0x2240 000006e9: JUMP 000006ea: JUMPDEST 000006eb: PUSH32 0x00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd163 0000070c: PUSH1 0x01 0000070e: PUSH1 0x01 00000710: PUSH1 0xa0 00000712: SHL 00000713: SUB 00000714: AND 00000715: PUSH2 0x0733 00000718: PUSH1 0x00 0000071a: DUP1 0000071b: MLOAD 0000071c: PUSH1 0x20 0000071e: PUSH2 0x2511 00000721: DUP4 00000722: CODECOPY 00000723: DUP2 00000724: MLOAD 00000725: SWAP2 00000726: MSTORE 00000727: SLOAD 00000728: PUSH1 0x01 0000072a: PUSH1 0x01 0000072c: PUSH1 0xa0 0000072e: SHL 0000072f: SUB 00000730: AND 00000731: SWAP1 00000732: JUMP 00000733: JUMPDEST 00000734: PUSH1 0x01 00000736: PUSH1 0x01 00000738: PUSH1 0xa0 0000073a: SHL 0000073b: SUB 0000073c: AND 0000073d: EQ 0000073e: PUSH2 0x0759 00000741: JUMPI 00000742: PUSH1 0x40 00000744: MLOAD 00000745: PUSH3 0x461bcd 00000749: PUSH1 0xe5 0000074b: SHL 0000074c: DUP2 0000074d: MSTORE 0000074e: PUSH1 0x04 00000750: ADD 00000751: PUSH2 0x0587 00000754: SWAP1 00000755: PUSH2 0x228c 00000758: JUMP 00000759: JUMPDEST 0000075a: PUSH2 0x0762 0000075d: DUP3 0000075e: PUSH2 0x10bb 00000761: JUMP 00000762: JUMPDEST 00000763: PUSH2 0x059a 00000766: DUP3 00000767: DUP3 00000768: PUSH1 0x01 0000076a: PUSH2 0x10c3 0000076d: JUMP 0000076e: JUMPDEST 0000076f: PUSH1 0x00 00000771: ADDRESS 00000772: PUSH1 0x01 00000774: PUSH1 0x01 00000776: PUSH1 0xa0 00000778: SHL 00000779: SUB 0000077a: PUSH32 0x00000000000000000000000074ae836d6f949118b4e4d0af79924edd0d6fd163 0000079b: AND 0000079c: EQ 0000079d: PUSH2 0x080e 000007a0: JUMPI 000007a1: PUSH1 0x40 000007a3: MLOAD 000007a4: PUSH3 0x461bcd 000007a8: PUSH1 0xe5 000007aa: SHL 000007ab: DUP2 000007ac: MSTORE 000007ad: PUSH1 0x20 000007af: PUSH1 0x04 000007b1: DUP3 000007b2: ADD 000007b3: MSTORE 000007b4: PUSH1 0x38 000007b6: PUSH1 0x24 000007b8: DUP3 000007b9: ADD 000007ba: MSTORE 000007bb: PUSH32 0x555550535570677261646561626c653a206d757374206e6f742062652063616c 000007dc: PUSH1 0x44 000007de: DUP3 000007df: ADD 000007e0: MSTORE 000007e1: PUSH32 0x6c6564207468726f7567682064656c656761746563616c6c0000000000000000 00000802: PUSH1 0x64 00000804: DUP3 00000805: ADD 00000806: MSTORE 00000807: PUSH1 0x84 00000809: ADD 0000080a: PUSH2 0x0587 0000080d: JUMP 0000080e: JUMPDEST 0000080f: POP 00000810: PUSH1 0x00 00000812: DUP1 00000813: MLOAD 00000814: PUSH1 0x20 00000816: PUSH2 0x2511 00000819: DUP4 0000081a: CODECOPY 0000081b: DUP2 0000081c: MLOAD 0000081d: SWAP2 0000081e: MSTORE 0000081f: SWAP1 00000820: JUMP 00000821: JUMPDEST 00000822: PUSH1 0x00 00000824: DUP1 00000825: MLOAD 00000826: PUSH1 0x20 00000828: PUSH2 0x2558 0000082b: DUP4 0000082c: CODECOPY 0000082d: DUP2 0000082e: MLOAD 0000082f: SWAP2 00000830: MSTORE 00000831: PUSH2 0x0839 00000834: DUP2 00000835: PUSH2 0x104d 00000838: JUMP 00000839: JUMPDEST 0000083a: DUP6 0000083b: DUP5 0000083c: EQ 0000083d: PUSH2 0x08b8 00000840: JUMPI 00000841: PUSH1 0x40 00000843: MLOAD 00000844: PUSH3 0x461bcd 00000848: PUSH1 0xe5 0000084a: SHL 0000084b: DUP2 0000084c: MSTORE 0000084d: PUSH1 0x20 0000084f: PUSH1 0x04 00000851: DUP3 00000852: ADD 00000853: MSTORE 00000854: PUSH1 0x41 00000856: PUSH1 0x24 00000858: DUP3 00000859: ADD 0000085a: MSTORE 0000085b: PUSH32 0x4d756c74695472616e736665723a3a62617463685472616e7366657245726337 0000087c: PUSH1 0x44 0000087e: DUP3 0000087f: ADD 00000880: MSTORE 00000881: PUSH32 0x32313a20746f6b656e732f706179656573206c656e677468206d69736d617463 000008a2: PUSH1 0x64 000008a4: DUP3 000008a5: ADD 000008a6: MSTORE 000008a7: PUSH1 0x0d 000008a9: PUSH1 0xfb 000008ab: SHL 000008ac: PUSH1 0x84 000008ae: DUP3 000008af: ADD 000008b0: MSTORE 000008b1: PUSH1 0xa4 000008b3: ADD 000008b4: PUSH2 0x0587 000008b7: JUMP 000008b8: JUMPDEST 000008b9: DUP4 000008ba: DUP3 000008bb: EQ 000008bc: PUSH2 0x0939 000008bf: JUMPI 000008c0: PUSH1 0x40 000008c2: MLOAD 000008c3: PUSH3 0x461bcd 000008c7: PUSH1 0xe5 000008c9: SHL 000008ca: DUP2 000008cb: MSTORE 000008cc: PUSH1 0x20 000008ce: PUSH1 0x04 000008d0: DUP3 000008d1: ADD 000008d2: MSTORE 000008d3: PUSH1 0x43 000008d5: PUSH1 0x24 000008d7: DUP3 000008d8: ADD 000008d9: MSTORE 000008da: PUSH32 0x4d756c74695472616e736665723a3a62617463685472616e7366657245726337 000008fb: PUSH1 0x44 000008fd: DUP3 000008fe: ADD 000008ff: MSTORE 00000900: PUSH32 0x32313a207061796565732f746f6b656e496473206c656e677468206d69736d61 00000921: PUSH1 0x64 00000923: DUP3 00000924: ADD 00000925: MSTORE 00000926: PUSH3 0x0e8c6d 0000092a: PUSH1 0xeb 0000092c: SHL 0000092d: PUSH1 0x84 0000092f: DUP3 00000930: ADD 00000931: MSTORE 00000932: PUSH1 0xa4 00000934: ADD 00000935: PUSH2 0x0587 00000938: JUMP 00000939: JUMPDEST 0000093a: DUP4 0000093b: PUSH2 0x09b6 0000093e: JUMPI 0000093f: PUSH1 0x40 00000941: MLOAD 00000942: PUSH3 0x461bcd 00000946: PUSH1 0xe5 00000948: SHL 00000949: DUP2 0000094a: MSTORE 0000094b: PUSH1 0x20 0000094d: PUSH1 0x04 0000094f: DUP3 00000950: ADD 00000951: MSTORE 00000952: PUSH1 0x41 00000954: PUSH1 0x24 00000956: DUP3 00000957: ADD 00000958: MSTORE 00000959: PUSH32 0x4d756c74695472616e736665723a3a62617463685472616e7366657245726337 0000097a: PUSH1 0x44 0000097c: DUP3 0000097d: ADD 0000097e: MSTORE 0000097f: PUSH32 0x32313a20706179656573206c656e677468206d757374206265206774207a6572 000009a0: PUSH1 0x64 000009a2: DUP3 000009a3: ADD 000009a4: MSTORE 000009a5: PUSH1 0x6f 000009a7: PUSH1 0xf8 000009a9: SHL 000009aa: PUSH1 0x84 000009ac: DUP3 000009ad: ADD 000009ae: MSTORE 000009af: PUSH1 0xa4 000009b1: ADD 000009b2: PUSH2 0x0587 000009b5: JUMP 000009b6: JUMPDEST 000009b7: PUSH1 0x00 000009b9: JUMPDEST 000009ba: DUP5 000009bb: DUP2 000009bc: LT 000009bd: ISZERO 000009be: PUSH2 0x0a42 000009c1: JUMPI 000009c2: PUSH2 0x0a30 000009c5: DUP9 000009c6: DUP9 000009c7: DUP4 000009c8: DUP2 000009c9: DUP2 000009ca: LT 000009cb: PUSH2 0x09d6 000009ce: JUMPI 000009cf: PUSH2 0x09d6 000009d2: PUSH2 0x22d8 000009d5: JUMP 000009d6: JUMPDEST 000009d7: SWAP1 000009d8: POP 000009d9: PUSH1 0x20 000009db: MUL 000009dc: ADD 000009dd: PUSH1 0x20 000009df: DUP2 000009e0: ADD 000009e1: SWAP1 000009e2: PUSH2 0x09eb 000009e5: SWAP2 000009e6: SWAP1 000009e7: PUSH2 0x205f 000009ea: JUMP 000009eb: JUMPDEST 000009ec: DUP8 000009ed: DUP8 000009ee: DUP5 000009ef: DUP2 000009f0: DUP2 000009f1: LT 000009f2: PUSH2 0x09fd 000009f5: JUMPI 000009f6: PUSH2 0x09fd 000009f9: PUSH2 0x22d8 000009fc: JUMP 000009fd: JUMPDEST 000009fe: SWAP1 000009ff: POP 00000a00: PUSH1 0x20 00000a02: MUL 00000a03: ADD 00000a04: PUSH1 0x20 00000a06: DUP2 00000a07: ADD 00000a08: SWAP1 00000a09: PUSH2 0x0a12 00000a0c: SWAP2 00000a0d: SWAP1 00000a0e: PUSH2 0x205f 00000a11: JUMP 00000a12: JUMPDEST 00000a13: DUP7 00000a14: DUP7 00000a15: DUP6 00000a16: DUP2 00000a17: DUP2 00000a18: LT 00000a19: PUSH2 0x0a24 00000a1c: JUMPI 00000a1d: PUSH2 0x0a24 00000a20: PUSH2 0x22d8 00000a23: JUMP 00000a24: JUMPDEST 00000a25: SWAP1 00000a26: POP 00000a27: PUSH1 0x20 00000a29: MUL 00000a2a: ADD 00000a2b: CALLDATALOAD 00000a2c: PUSH2 0x123d 00000a2f: JUMP 00000a30: JUMPDEST 00000a31: DUP1 00000a32: PUSH2 0x0a3a 00000a35: DUP2 00000a36: PUSH2 0x2304 00000a39: JUMP 00000a3a: JUMPDEST 00000a3b: SWAP2 00000a3c: POP 00000a3d: POP 00000a3e: PUSH2 0x09b9 00000a41: JUMP 00000a42: JUMPDEST 00000a43: POP 00000a44: POP 00000a45: POP 00000a46: POP 00000a47: POP 00000a48: POP 00000a49: POP 00000a4a: POP 00000a4b: JUMP 00000a4c: JUMPDEST 00000a4d: PUSH2 0x0a54 00000a50: PUSH2 0x12aa 00000a53: JUMP 00000a54: JUMPDEST 00000a55: PUSH2 0x0a5e 00000a58: PUSH1 0x00 00000a5a: PUSH2 0x1304 00000a5d: JUMP 00000a5e: JUMPDEST 00000a5f: JUMP 00000a60: JUMPDEST 00000a61: PUSH1 0x00 00000a63: SLOAD 00000a64: PUSH2 0x0100 00000a67: SWAP1 00000a68: DIV 00000a69: PUSH1 0xff 00000a6b: AND 00000a6c: ISZERO 00000a6d: DUP1 00000a6e: DUP1 00000a6f: ISZERO 00000a70: PUSH2 0x0a80 00000a73: JUMPI 00000a74: POP 00000a75: PUSH1 0x00 00000a77: SLOAD 00000a78: PUSH1 0x01 00000a7a: PUSH1 0xff 00000a7c: SWAP1 00000a7d: SWAP2 00000a7e: AND 00000a7f: LT 00000a80: JUMPDEST 00000a81: DUP1 00000a82: PUSH2 0x0a9a 00000a85: JUMPI 00000a86: POP 00000a87: ADDRESS 00000a88: EXTCODESIZE 00000a89: ISZERO 00000a8a: DUP1 00000a8b: ISZERO 00000a8c: PUSH2 0x0a9a 00000a8f: JUMPI 00000a90: POP 00000a91: PUSH1 0x00 00000a93: SLOAD 00000a94: PUSH1 0xff 00000a96: AND 00000a97: PUSH1 0x01 00000a99: EQ 00000a9a: JUMPDEST 00000a9b: PUSH2 0x0afd 00000a9e: JUMPI 00000a9f: PUSH1 0x40 00000aa1: MLOAD 00000aa2: PUSH3 0x461bcd 00000aa6: PUSH1 0xe5 00000aa8: SHL 00000aa9: DUP2 00000aaa: MSTORE 00000aab: PUSH1 0x20 00000aad: PUSH1 0x04 00000aaf: DUP3 00000ab0: ADD 00000ab1: MSTORE 00000ab2: PUSH1 0x2e 00000ab4: PUSH1 0x24 00000ab6: DUP3 00000ab7: ADD 00000ab8: MSTORE 00000ab9: PUSH32 0x496e697469616c697a61626c653a20636f6e747261637420697320616c726561 00000ada: PUSH1 0x44 00000adc: DUP3 00000add: ADD 00000ade: MSTORE 00000adf: PUSH14 0x191e481a5b9a5d1a585b1a5e9959 00000aee: PUSH1 0x92 00000af0: SHL 00000af1: PUSH1 0x64 00000af3: DUP3 00000af4: ADD 00000af5: MSTORE 00000af6: PUSH1 0x84 00000af8: ADD 00000af9: PUSH2 0x0587 00000afc: JUMP 00000afd: JUMPDEST 00000afe: PUSH1 0x00 00000b00: DUP1 00000b01: SLOAD 00000b02: PUSH1 0xff 00000b04: NOT 00000b05: AND 00000b06: PUSH1 0x01 00000b08: OR 00000b09: SWAP1 00000b0a: SSTORE 00000b0b: DUP1 00000b0c: ISZERO 00000b0d: PUSH2 0x0b20 00000b10: JUMPI 00000b11: PUSH1 0x00 00000b13: DUP1 00000b14: SLOAD 00000b15: PUSH2 0xff00 00000b18: NOT 00000b19: AND 00000b1a: PUSH2 0x0100 00000b1d: OR 00000b1e: SWAP1 00000b1f: SSTORE 00000b20: JUMPDEST 00000b21: PUSH2 0x0b28 00000b24: PUSH2 0x1356 00000b27: JUMP 00000b28: JUMPDEST 00000b29: PUSH2 0x0b30 00000b2c: PUSH2 0x1385 00000b2f: JUMP 00000b30: JUMPDEST 00000b31: PUSH2 0x0b3b 00000b34: PUSH1 0x00 00000b36: CALLER 00000b37: PUSH2 0x13ac 00000b3a: JUMP 00000b3b: JUMPDEST 00000b3c: DUP1 00000b3d: ISZERO 00000b3e: PUSH2 0x067b 00000b41: JUMPI 00000b42: PUSH1 0x00 00000b44: DUP1 00000b45: SLOAD 00000b46: PUSH2 0xff00 00000b49: NOT 00000b4a: AND 00000b4b: SWAP1 00000b4c: SSTORE 00000b4d: PUSH1 0x40 00000b4f: MLOAD 00000b50: PUSH1 0x01 00000b52: DUP2 00000b53: MSTORE 00000b54: PUSH32 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498 00000b75: SWAP1 00000b76: PUSH1 0x20 00000b78: ADD 00000b79: PUSH1 0x40 00000b7b: MLOAD 00000b7c: DUP1 00000b7d: SWAP2 00000b7e: SUB 00000b7f: SWAP1 00000b80: LOG1 00000b81: POP 00000b82: JUMP 00000b83: JUMPDEST 00000b84: PUSH1 0x00 00000b86: DUP3 00000b87: DUP2 00000b88: MSTORE 00000b89: PUSH2 0x012d 00000b8c: PUSH1 0x20 00000b8e: MSTORE 00000b8f: PUSH1 0x40 00000b91: DUP2 00000b92: KECCAK256 00000b93: PUSH2 0x0b9c 00000b96: SWAP1 00000b97: DUP4 00000b98: PUSH2 0x13b6 00000b9b: JUMP 00000b9c: JUMPDEST 00000b9d: SWAP4 00000b9e: SWAP3 00000b9f: POP 00000ba0: POP 00000ba1: POP 00000ba2: JUMP 00000ba3: JUMPDEST 00000ba4: PUSH1 0x00 00000ba6: SWAP2 00000ba7: DUP3 00000ba8: MSTORE 00000ba9: PUSH1 0xfb 00000bab: PUSH1 0x20 00000bad: SWAP1 00000bae: DUP2 00000baf: MSTORE 00000bb0: PUSH1 0x40 00000bb2: DUP1 00000bb3: DUP5 00000bb4: KECCAK256 00000bb5: PUSH1 0x01 00000bb7: PUSH1 0x01 00000bb9: PUSH1 0xa0 00000bbb: SHL 00000bbc: SUB 00000bbd: SWAP4 00000bbe: SWAP1 00000bbf: SWAP4 00000bc0: AND 00000bc1: DUP5 00000bc2: MSTORE 00000bc3: SWAP2 00000bc4: SWAP1 00000bc5: MSTORE 00000bc6: SWAP1 00000bc7: KECCAK256 00000bc8: SLOAD 00000bc9: PUSH1 0xff 00000bcb: AND 00000bcc: SWAP1 00000bcd: JUMP 00000bce: JUMPDEST 00000bcf: PUSH1 0x00 00000bd1: DUP2 00000bd2: DUP2 00000bd3: MSTORE 00000bd4: PUSH2 0x012d 00000bd7: PUSH1 0x20 00000bd9: MSTORE 00000bda: PUSH1 0x40 00000bdc: DUP2 00000bdd: KECCAK256 00000bde: PUSH2 0x048f 00000be1: SWAP1 00000be2: PUSH2 0x13c2 00000be5: JUMP 00000be6: JUMPDEST 00000be7: PUSH1 0x00 00000be9: DUP3 00000bea: DUP2 00000beb: MSTORE 00000bec: PUSH1 0xfb 00000bee: PUSH1 0x20 00000bf0: MSTORE 00000bf1: PUSH1 0x40 00000bf3: SWAP1 00000bf4: KECCAK256 00000bf5: PUSH1 0x01 00000bf7: ADD 00000bf8: SLOAD 00000bf9: PUSH2 0x0c01 00000bfc: DUP2 00000bfd: PUSH2 0x104d 00000c00: JUMP 00000c01: JUMPDEST 00000c02: PUSH2 0x04e0 00000c05: DUP4 00000c06: DUP4 00000c07: PUSH2 0x1098 00000c0a: JUMP 00000c0b: JUMPDEST 00000c0c: PUSH1 0x00 00000c0e: DUP1 00000c0f: MLOAD 00000c10: PUSH1 0x20 00000c12: PUSH2 0x2558 00000c15: DUP4 00000c16: CODECOPY 00000c17: DUP2 00000c18: MLOAD 00000c19: SWAP2 00000c1a: MSTORE 00000c1b: PUSH2 0x0c23 00000c1e: DUP2 00000c1f: PUSH2 0x104d 00000c22: JUMP 00000c23: JUMPDEST 00000c24: DUP6 00000c25: DUP5 00000c26: EQ 00000c27: PUSH2 0x0c9a 00000c2a: JUMPI 00000c2b: PUSH1 0x40 00000c2d: DUP1 00000c2e: MLOAD 00000c2f: PUSH3 0x461bcd 00000c33: PUSH1 0xe5 00000c35: SHL 00000c36: DUP2 00000c37: MSTORE 00000c38: PUSH1 0x20 00000c3a: PUSH1 0x04 00000c3c: DUP3 00000c3d: ADD 00000c3e: MSTORE 00000c3f: PUSH1 0x24 00000c41: DUP2 00000c42: ADD 00000c43: SWAP2 00000c44: SWAP1 00000c45: SWAP2 00000c46: MSTORE 00000c47: PUSH32 0x4d756c74695472616e736665723a3a62617463685472616e7366657245726332 00000c68: PUSH1 0x44 00000c6a: DUP3 00000c6b: ADD 00000c6c: MSTORE 00000c6d: PUSH32 0x303a20746f6b656e732f706179656573206c656e677468206d69736d61746368 00000c8e: PUSH1 0x64 00000c90: DUP3 00000c91: ADD 00000c92: MSTORE 00000c93: PUSH1 0x84 00000c95: ADD 00000c96: PUSH2 0x0587 00000c99: JUMP 00000c9a: JUMPDEST 00000c9b: DUP4 00000c9c: DUP3 00000c9d: EQ 00000c9e: PUSH2 0x0d19 00000ca1: JUMPI 00000ca2: PUSH1 0x40 00000ca4: MLOAD 00000ca5: PUSH3 0x461bcd 00000ca9: PUSH1 0xe5 00000cab: SHL 00000cac: DUP2 00000cad: MSTORE 00000cae: PUSH1 0x20 00000cb0: PUSH1 0x04 00000cb2: DUP3 00000cb3: ADD 00000cb4: MSTORE 00000cb5: PUSH1 0x41 00000cb7: PUSH1 0x24 00000cb9: DUP3 00000cba: ADD 00000cbb: MSTORE 00000cbc: PUSH32 0x4d756c74695472616e736665723a3a62617463685472616e7366657245726332 00000cdd: PUSH1 0x44 00000cdf: DUP3 00000ce0: ADD 00000ce1: MSTORE 00000ce2: PUSH32 0x303a207061796565732f616d6f756e7473206c656e677468206d69736d617463 00000d03: PUSH1 0x64 00000d05: DUP3 00000d06: ADD 00000d07: MSTORE 00000d08: PUSH1 0x0d 00000d0a: PUSH1 0xfb 00000d0c: SHL 00000d0d: PUSH1 0x84 00000d0f: DUP3 00000d10: ADD 00000d11: MSTORE 00000d12: PUSH1 0xa4 00000d14: ADD 00000d15: PUSH2 0x0587 00000d18: JUMP 00000d19: JUMPDEST 00000d1a: DUP4 00000d1b: PUSH2 0x0d8e 00000d1e: JUMPI 00000d1f: PUSH1 0x40 00000d21: DUP1 00000d22: MLOAD 00000d23: PUSH3 0x461bcd 00000d27: PUSH1 0xe5 00000d29: SHL 00000d2a: DUP2 00000d2b: MSTORE 00000d2c: PUSH1 0x20 00000d2e: PUSH1 0x04 00000d30: DUP3 00000d31: ADD 00000d32: MSTORE 00000d33: PUSH1 0x24 00000d35: DUP2 00000d36: ADD 00000d37: SWAP2 00000d38: SWAP1 00000d39: SWAP2 00000d3a: MSTORE 00000d3b: PUSH32 0x4d756c74695472616e736665723a3a62617463685472616e7366657245726332 00000d5c: PUSH1 0x44 00000d5e: DUP3 00000d5f: ADD 00000d60: MSTORE 00000d61: PUSH32 0x303a20706179656573206c656e677468206d757374206265206774207a65726f 00000d82: PUSH1 0x64 00000d84: DUP3 00000d85: ADD 00000d86: MSTORE 00000d87: PUSH1 0x84 00000d89: ADD 00000d8a: PUSH2 0x0587 00000d8d: JUMP 00000d8e: JUMPDEST 00000d8f: PUSH1 0x00 00000d91: JUMPDEST 00000d92: DUP5 00000d93: DUP2 00000d94: LT 00000d95: ISZERO 00000d96: PUSH2 0x0a42 00000d99: JUMPI 00000d9a: PUSH2 0x0e08 00000d9d: DUP9 00000d9e: DUP9 00000d9f: DUP4 00000da0: DUP2 00000da1: DUP2 00000da2: LT 00000da3: PUSH2 0x0dae 00000da6: JUMPI 00000da7: PUSH2 0x0dae 00000daa: PUSH2 0x22d8 00000dad: JUMP 00000dae: JUMPDEST 00000daf: SWAP1 00000db0: POP 00000db1: PUSH1 0x20 00000db3: MUL 00000db4: ADD 00000db5: PUSH1 0x20 00000db7: DUP2 00000db8: ADD 00000db9: SWAP1 00000dba: PUSH2 0x0dc3 00000dbd: SWAP2 00000dbe: SWAP1 00000dbf: PUSH2 0x205f 00000dc2: JUMP 00000dc3: JUMPDEST 00000dc4: DUP8 00000dc5: DUP8 00000dc6: DUP5 00000dc7: DUP2 00000dc8: DUP2 00000dc9: LT 00000dca: PUSH2 0x0dd5 00000dcd: JUMPI 00000dce: PUSH2 0x0dd5 00000dd1: PUSH2 0x22d8 00000dd4: JUMP 00000dd5: JUMPDEST 00000dd6: SWAP1 00000dd7: POP 00000dd8: PUSH1 0x20 00000dda: MUL 00000ddb: ADD 00000ddc: PUSH1 0x20 00000dde: DUP2 00000ddf: ADD 00000de0: SWAP1 00000de1: PUSH2 0x0dea 00000de4: SWAP2 00000de5: SWAP1 00000de6: PUSH2 0x205f 00000de9: JUMP 00000dea: JUMPDEST 00000deb: DUP7 00000dec: DUP7 00000ded: DUP6 00000dee: DUP2 00000def: DUP2 00000df0: LT 00000df1: PUSH2 0x0dfc 00000df4: JUMPI 00000df5: PUSH2 0x0dfc 00000df8: PUSH2 0x22d8 00000dfb: JUMP 00000dfc: JUMPDEST 00000dfd: SWAP1 00000dfe: POP 00000dff: PUSH1 0x20 00000e01: MUL 00000e02: ADD 00000e03: CALLDATALOAD 00000e04: PUSH2 0x1057 00000e07: JUMP 00000e08: JUMPDEST 00000e09: DUP1 00000e0a: PUSH2 0x0e12 00000e0d: DUP2 00000e0e: PUSH2 0x2304 00000e11: JUMP 00000e12: JUMPDEST 00000e13: SWAP2 00000e14: POP 00000e15: POP 00000e16: PUSH2 0x0d91 00000e19: JUMP 00000e1a: JUMPDEST 00000e1b: PUSH1 0x00 00000e1d: DUP1 00000e1e: MLOAD 00000e1f: PUSH1 0x20 00000e21: PUSH2 0x2558 00000e24: DUP4 00000e25: CODECOPY 00000e26: DUP2 00000e27: MLOAD 00000e28: SWAP2 00000e29: MSTORE 00000e2a: PUSH2 0x0e32 00000e2d: DUP2 00000e2e: PUSH2 0x104d 00000e31: JUMP 00000e32: JUMPDEST 00000e33: DUP4 00000e34: DUP3 00000e35: EQ 00000e36: PUSH2 0x0eb1 00000e39: JUMPI 00000e3a: PUSH1 0x40 00000e3c: MLOAD 00000e3d: PUSH3 0x461bcd 00000e41: PUSH1 0xe5 00000e43: SHL 00000e44: DUP2 00000e45: MSTORE 00000e46: PUSH1 0x20 00000e48: PUSH1 0x04 00000e4a: DUP3 00000e4b: ADD 00000e4c: MSTORE 00000e4d: PUSH1 0x41 00000e4f: PUSH1 0x24 00000e51: DUP3 00000e52: ADD 00000e53: MSTORE 00000e54: PUSH32 0x4d756c74695472616e736665723a3a62617463685472616e7366657245746865 00000e75: PUSH1 0x44 00000e77: DUP3 00000e78: ADD 00000e79: MSTORE 00000e7a: PUSH32 0x723a207061796565732f616d6f756e7473206c656e677468206d69736d617463 00000e9b: PUSH1 0x64 00000e9d: DUP3 00000e9e: ADD 00000e9f: MSTORE 00000ea0: PUSH1 0x0d 00000ea2: PUSH1 0xfb 00000ea4: SHL 00000ea5: PUSH1 0x84 00000ea7: DUP3 00000ea8: ADD 00000ea9: MSTORE 00000eaa: PUSH1 0xa4 00000eac: ADD 00000ead: PUSH2 0x0587 00000eb0: JUMP 00000eb1: JUMPDEST 00000eb2: DUP4 00000eb3: PUSH2 0x0f26 00000eb6: JUMPI 00000eb7: PUSH1 0x40 00000eb9: DUP1 00000eba: MLOAD 00000ebb: PUSH3 0x461bcd 00000ebf: PUSH1 0xe5 00000ec1: SHL 00000ec2: DUP2 00000ec3: MSTORE 00000ec4: PUSH1 0x20 00000ec6: PUSH1 0x04 00000ec8: DUP3 00000ec9: ADD 00000eca: MSTORE 00000ecb: PUSH1 0x24 00000ecd: DUP2 00000ece: ADD 00000ecf: SWAP2 00000ed0: SWAP1 00000ed1: SWAP2 00000ed2: MSTORE 00000ed3: PUSH32 0x4d756c74695472616e736665723a3a62617463685472616e7366657245746865 00000ef4: PUSH1 0x44 00000ef6: DUP3 00000ef7: ADD 00000ef8: MSTORE 00000ef9: PUSH32 0x723a20706179656573206c656e677468206d757374206265206774207a65726f 00000f1a: PUSH1 0x64 00000f1c: DUP3 00000f1d: ADD 00000f1e: MSTORE 00000f1f: PUSH1 0x84 00000f21: ADD 00000f22: PUSH2 0x0587 00000f25: JUMP 00000f26: JUMPDEST 00000f27: PUSH1 0x00 00000f29: JUMPDEST 00000f2a: DUP5 00000f2b: DUP2 00000f2c: LT 00000f2d: ISZERO 00000f2e: PUSH2 0x0f8b 00000f31: JUMPI 00000f32: PUSH2 0x0f79 00000f35: DUP7 00000f36: DUP7 00000f37: DUP4 00000f38: DUP2 00000f39: DUP2 00000f3a: LT 00000f3b: PUSH2 0x0f46 00000f3e: JUMPI 00000f3f: PUSH2 0x0f46 00000f42: PUSH2 0x22d8 00000f45: JUMP 00000f46: JUMPDEST 00000f47: SWAP1 00000f48: POP 00000f49: PUSH1 0x20 00000f4b: MUL 00000f4c: ADD 00000f4d: PUSH1 0x20 00000f4f: DUP2 00000f50: ADD 00000f51: SWAP1 00000f52: PUSH2 0x0f5b 00000f55: SWAP2 00000f56: SWAP1 00000f57: PUSH2 0x205f 00000f5a: JUMP 00000f5b: JUMPDEST 00000f5c: DUP6 00000f5d: DUP6 00000f5e: DUP5 00000f5f: DUP2 00000f60: DUP2 00000f61: LT 00000f62: PUSH2 0x0f6d 00000f65: JUMPI 00000f66: PUSH2 0x0f6d 00000f69: PUSH2 0x22d8 00000f6c: JUMP 00000f6d: JUMPDEST 00000f6e: SWAP1 00000f6f: POP 00000f70: PUSH1 0x20 00000f72: MUL 00000f73: ADD 00000f74: CALLDATALOAD 00000f75: PUSH2 0x106b 00000f78: JUMP 00000f79: JUMPDEST 00000f7a: DUP1 00000f7b: PUSH2 0x0f83 00000f7e: DUP2 00000f7f: PUSH2 0x2304 00000f82: JUMP 00000f83: JUMPDEST 00000f84: SWAP2 00000f85: POP 00000f86: POP 00000f87: PUSH2 0x0f29 00000f8a: JUMP 00000f8b: JUMPDEST 00000f8c: POP 00000f8d: POP 00000f8e: POP 00000f8f: POP 00000f90: POP 00000f91: POP 00000f92: JUMP 00000f93: JUMPDEST 00000f94: PUSH2 0x0f9b 00000f97: PUSH2 0x12aa 00000f9a: JUMP 00000f9b: JUMPDEST 00000f9c: PUSH1 0x01 00000f9e: PUSH1 0x01 00000fa0: PUSH1 0xa0 00000fa2: SHL 00000fa3: SUB 00000fa4: DUP2 00000fa5: AND 00000fa6: PUSH2 0x1000 00000fa9: JUMPI 00000faa: PUSH1 0x40 00000fac: MLOAD 00000fad: PUSH3 0x461bcd 00000fb1: PUSH1 0xe5 00000fb3: SHL 00000fb4: DUP2 00000fb5: MSTORE 00000fb6: PUSH1 0x20 00000fb8: PUSH1 0x04 00000fba: DUP3 00000fbb: ADD 00000fbc: MSTORE 00000fbd: PUSH1 0x26 00000fbf: PUSH1 0x24 00000fc1: DUP3 00000fc2: ADD 00000fc3: MSTORE 00000fc4: PUSH32 0x4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061 00000fe5: PUSH1 0x44 00000fe7: DUP3 00000fe8: ADD 00000fe9: MSTORE 00000fea: PUSH6 0x646472657373 00000ff1: PUSH1 0xd0 00000ff3: SHL 00000ff4: PUSH1 0x64 00000ff6: DUP3 00000ff7: ADD 00000ff8: MSTORE 00000ff9: PUSH1 0x84 00000ffb: ADD 00000ffc: PUSH2 0x0587 00000fff: JUMP 00001000: JUMPDEST 00001001: PUSH2 0x067b 00001004: DUP2 00001005: PUSH2 0x1304 00001008: JUMP 00001009: JUMPDEST 0000100a: PUSH1 0x01 0000100c: PUSH1 0x01 0000100e: PUSH1 0xa0 00001010: SHL 00001011: SUB 00001012: AND 00001013: EXTCODESIZE 00001014: ISZERO 00001015: ISZERO 00001016: SWAP1 00001017: JUMP 00001018: JUMPDEST 00001019: PUSH1 0x00 0000101b: PUSH1 0x01 0000101d: PUSH1 0x01 0000101f: PUSH1 0xe0 00001021: SHL 00001022: SUB 00001023: NOT 00001024: DUP3 00001025: AND 00001026: PUSH4 0x7965db0b 0000102b: PUSH1 0xe0 0000102d: SHL 0000102e: EQ 0000102f: DUP1 00001030: PUSH2 0x048f 00001033: JUMPI 00001034: POP 00001035: PUSH4 0x01ffc9a7 0000103a: PUSH1 0xe0 0000103c: SHL 0000103d: PUSH1 0x01 0000103f: PUSH1 0x01 00001041: PUSH1 0xe0 00001043: SHL 00001044: SUB 00001045: NOT 00001046: DUP4 00001047: AND 00001048: EQ 00001049: PUSH2 0x048f 0000104c: JUMP 0000104d: JUMPDEST 0000104e: PUSH2 0x067b 00001051: DUP2 00001052: CALLER 00001053: PUSH2 0x13cc 00001056: JUMP 00001057: JUMPDEST 00001058: PUSH2 0x04e0 0000105b: PUSH1 0x01 0000105d: PUSH1 0x01 0000105f: PUSH1 0xa0 00001061: SHL 00001062: SUB 00001063: DUP5 00001064: AND 00001065: DUP4 00001066: DUP4 00001067: PUSH2 0x1425 0000106a: JUMP 0000106b: JUMPDEST 0000106c: PUSH2 0x059a 0000106f: DUP3 00001070: DUP3 00001071: PUSH2 0x1477 00001074: JUMP 00001075: JUMPDEST 00001076: PUSH2 0x107f 00001079: DUP3 0000107a: DUP3 0000107b: PUSH2 0x1590 0000107e: JUMP 0000107f: JUMPDEST 00001080: PUSH1 0x00 00001082: DUP3 00001083: DUP2 00001084: MSTORE 00001085: PUSH2 0x012d 00001088: PUSH1 0x20 0000108a: MSTORE 0000108b: PUSH1 0x40 0000108d: SWAP1 0000108e: KECCAK256 0000108f: PUSH2 0x04e0 00001092: SWAP1 00001093: DUP3 00001094: PUSH2 0x1616 00001097: JUMP 00001098: JUMPDEST 00001099: PUSH2 0x10a2 0000109c: DUP3 0000109d: DUP3 0000109e: PUSH2 0x162b 000010a1: JUMP 000010a2: JUMPDEST 000010a3: PUSH1 0x00 000010a5: DUP3 000010a6: DUP2 000010a7: MSTORE 000010a8: PUSH2 0x012d 000010ab: PUSH1 0x20 000010ad: MSTORE 000010ae: PUSH1 0x40 000010b0: SWAP1 000010b1: KECCAK256 000010b2: PUSH2 0x04e0 000010b5: SWAP1 000010b6: DUP3 000010b7: PUSH2 0x1692 000010ba: JUMP 000010bb: JUMPDEST 000010bc: PUSH2 0x067b 000010bf: PUSH2 0x12aa 000010c2: JUMP 000010c3: JUMPDEST 000010c4: PUSH32 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143 000010e5: SLOAD 000010e6: PUSH1 0xff 000010e8: AND 000010e9: ISZERO 000010ea: PUSH2 0x10f6 000010ed: JUMPI 000010ee: PUSH2 0x04e0 000010f1: DUP4 000010f2: PUSH2 0x16a7 000010f5: JUMP 000010f6: JUMPDEST 000010f7: DUP3 000010f8: PUSH1 0x01 000010fa: PUSH1 0x01 000010fc: PUSH1 0xa0 000010fe: SHL 000010ff: SUB 00001100: AND 00001101: PUSH4 0x52d1902d 00001106: PUSH1 0x40 00001108: MLOAD 00001109: DUP2 0000110a: PUSH4 0xffffffff 0000110f: AND 00001110: PUSH1 0xe0 00001112: SHL 00001113: DUP2 00001114: MSTORE 00001115: PUSH1 0x04 00001117: ADD 00001118: PUSH1 0x20 0000111a: PUSH1 0x40 0000111c: MLOAD 0000111d: DUP1 0000111e: DUP4 0000111f: SUB 00001120: DUP2 00001121: DUP7 00001122: DUP1 00001123: EXTCODESIZE 00001124: ISZERO 00001125: DUP1 00001126: ISZERO 00001127: PUSH2 0x112f 0000112a: JUMPI 0000112b: PUSH1 0x00 0000112d: DUP1 0000112e: REVERT 0000112f: JUMPDEST 00001130: POP 00001131: GAS 00001132: STATICCALL 00001133: SWAP3 00001134: POP 00001135: POP 00001136: POP 00001137: DUP1 00001138: ISZERO 00001139: PUSH2 0x115f 0000113c: JUMPI 0000113d: POP 0000113e: PUSH1 0x40 00001140: DUP1 00001141: MLOAD 00001142: PUSH1 0x1f 00001144: RETURNDATASIZE 00001145: SWAP1 00001146: DUP2 00001147: ADD 00001148: PUSH1 0x1f 0000114a: NOT 0000114b: AND 0000114c: DUP3 0000114d: ADD 0000114e: SWAP1 0000114f: SWAP3 00001150: MSTORE 00001151: PUSH2 0x115c 00001154: SWAP2 00001155: DUP2 00001156: ADD 00001157: SWAP1 00001158: PUSH2 0x231f 0000115b: JUMP 0000115c: JUMPDEST 0000115d: PUSH1 0x01 0000115f: JUMPDEST 00001160: PUSH2 0x11c2 00001163: JUMPI 00001164: PUSH1 0x40 00001166: MLOAD 00001167: PUSH3 0x461bcd 0000116b: PUSH1 0xe5 0000116d: SHL 0000116e: DUP2 0000116f: MSTORE 00001170: PUSH1 0x20 00001172: PUSH1 0x04 00001174: DUP3 00001175: ADD 00001176: MSTORE 00001177: PUSH1 0x2e 00001179: PUSH1 0x24 0000117b: DUP3 0000117c: ADD 0000117d: MSTORE 0000117e: PUSH32 0x45524331393637557067726164653a206e657720696d706c656d656e74617469 0000119f: PUSH1 0x44 000011a1: DUP3 000011a2: ADD 000011a3: MSTORE 000011a4: PUSH14 0x6f6e206973206e6f742055555053 000011b3: PUSH1 0x90 000011b5: SHL 000011b6: PUSH1 0x64 000011b8: DUP3 000011b9: ADD 000011ba: MSTORE 000011bb: PUSH1 0x84 000011bd: ADD 000011be: PUSH2 0x0587 000011c1: JUMP 000011c2: JUMPDEST 000011c3: PUSH1 0x00 000011c5: DUP1 000011c6: MLOAD 000011c7: PUSH1 0x20 000011c9: PUSH2 0x2511 000011cc: DUP4 000011cd: CODECOPY 000011ce: DUP2 000011cf: MLOAD 000011d0: SWAP2 000011d1: MSTORE 000011d2: DUP2 000011d3: EQ 000011d4: PUSH2 0x1231 000011d7: JUMPI 000011d8: PUSH1 0x40 000011da: MLOAD 000011db: PUSH3 0x461bcd 000011df: PUSH1 0xe5 000011e1: SHL 000011e2: DUP2 000011e3: MSTORE 000011e4: PUSH1 0x20 000011e6: PUSH1 0x04 000011e8: DUP3 000011e9: ADD 000011ea: MSTORE 000011eb: PUSH1 0x29 000011ed: PUSH1 0x24 000011ef: DUP3 000011f0: ADD 000011f1: MSTORE 000011f2: PUSH32 0x45524331393637557067726164653a20756e737570706f727465642070726f78 00001213: PUSH1 0x44 00001215: DUP3 00001216: ADD 00001217: MSTORE 00001218: PUSH9 0x1a58589b1955555251 00001222: PUSH1 0xba 00001224: SHL 00001225: PUSH1 0x64 00001227: DUP3 00001228: ADD 00001229: MSTORE 0000122a: PUSH1 0x84 0000122c: ADD 0000122d: PUSH2 0x0587 00001230: JUMP 00001231: JUMPDEST 00001232: POP 00001233: PUSH2 0x04e0 00001236: DUP4 00001237: DUP4 00001238: DUP4 00001239: PUSH2 0x1743 0000123c: JUMP 0000123d: JUMPDEST 0000123e: PUSH1 0x40 00001240: MLOAD 00001241: PUSH4 0x21421707 00001246: PUSH1 0xe1 00001248: SHL 00001249: DUP2 0000124a: MSTORE 0000124b: ADDRESS 0000124c: PUSH1 0x04 0000124e: DUP3 0000124f: ADD 00001250: MSTORE 00001251: PUSH1 0x01 00001253: PUSH1 0x01 00001255: PUSH1 0xa0 00001257: SHL 00001258: SUB 00001259: DUP4 0000125a: DUP2 0000125b: AND 0000125c: PUSH1 0x24 0000125e: DUP4 0000125f: ADD 00001260: MSTORE 00001261: PUSH1 0x44 00001263: DUP3 00001264: ADD 00001265: DUP4 00001266: SWAP1 00001267: MSTORE 00001268: DUP5 00001269: AND 0000126a: SWAP1 0000126b: PUSH4 0x42842e0e 00001270: SWAP1 00001271: PUSH1 0x64 00001273: ADD 00001274: PUSH1 0x00 00001276: PUSH1 0x40 00001278: MLOAD 00001279: DUP1 0000127a: DUP4 0000127b: SUB 0000127c: DUP2 0000127d: PUSH1 0x00 0000127f: DUP8 00001280: DUP1 00001281: EXTCODESIZE 00001282: ISZERO 00001283: DUP1 00001284: ISZERO 00001285: PUSH2 0x128d 00001288: JUMPI 00001289: PUSH1 0x00 0000128b: DUP1 0000128c: REVERT 0000128d: JUMPDEST 0000128e: POP 0000128f: GAS 00001290: CALL 00001291: ISZERO 00001292: DUP1 00001293: ISZERO 00001294: PUSH2 0x12a1 00001297: JUMPI 00001298: RETURNDATASIZE 00001299: PUSH1 0x00 0000129b: DUP1 0000129c: RETURNDATACOPY 0000129d: RETURNDATASIZE 0000129e: PUSH1 0x00 000012a0: REVERT 000012a1: JUMPDEST 000012a2: POP 000012a3: POP 000012a4: POP 000012a5: POP 000012a6: POP 000012a7: POP 000012a8: POP 000012a9: JUMP 000012aa: JUMPDEST 000012ab: PUSH1 0x97 000012ad: SLOAD 000012ae: PUSH1 0x01 000012b0: PUSH1 0x01 000012b2: PUSH1 0xa0 000012b4: SHL 000012b5: SUB 000012b6: AND 000012b7: CALLER 000012b8: EQ 000012b9: PUSH2 0x0a5e 000012bc: JUMPI 000012bd: PUSH1 0x40 000012bf: MLOAD 000012c0: PUSH3 0x461bcd 000012c4: PUSH1 0xe5 000012c6: SHL 000012c7: DUP2 000012c8: MSTORE 000012c9: PUSH1 0x20 000012cb: PUSH1 0x04 000012cd: DUP3 000012ce: ADD 000012cf: DUP2 000012d0: SWAP1 000012d1: MSTORE 000012d2: PUSH1 0x24 000012d4: DUP3 000012d5: ADD 000012d6: MSTORE 000012d7: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 000012f8: PUSH1 0x44 000012fa: DUP3 000012fb: ADD 000012fc: MSTORE 000012fd: PUSH1 0x64 000012ff: ADD 00001300: PUSH2 0x0587 00001303: JUMP 00001304: JUMPDEST 00001305: PUSH1 0x97 00001307: DUP1 00001308: SLOAD 00001309: PUSH1 0x01 0000130b: PUSH1 0x01 0000130d: PUSH1 0xa0 0000130f: SHL 00001310: SUB 00001311: DUP4 00001312: DUP2 00001313: AND 00001314: PUSH1 0x01 00001316: PUSH1 0x01 00001318: PUSH1 0xa0 0000131a: SHL 0000131b: SUB 0000131c: NOT 0000131d: DUP4 0000131e: AND 0000131f: DUP2 00001320: OR 00001321: SWAP1 00001322: SWAP4 00001323: SSTORE 00001324: PUSH1 0x40 00001326: MLOAD 00001327: SWAP2 00001328: AND 00001329: SWAP2 0000132a: SWAP1 0000132b: DUP3 0000132c: SWAP1 0000132d: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 0000134e: SWAP1 0000134f: PUSH1 0x00 00001351: SWAP1 00001352: LOG3 00001353: POP 00001354: POP 00001355: JUMP 00001356: JUMPDEST 00001357: PUSH1 0x00 00001359: SLOAD 0000135a: PUSH2 0x0100 0000135d: SWAP1 0000135e: DIV 0000135f: PUSH1 0xff 00001361: AND 00001362: PUSH2 0x137d 00001365: JUMPI 00001366: PUSH1 0x40 00001368: MLOAD 00001369: PUSH3 0x461bcd 0000136d: PUSH1 0xe5 0000136f: SHL 00001370: DUP2 00001371: MSTORE 00001372: PUSH1 0x04 00001374: ADD 00001375: PUSH2 0x0587 00001378: SWAP1 00001379: PUSH2 0x2338 0000137c: JUMP 0000137d: JUMPDEST 0000137e: PUSH2 0x0a5e 00001381: PUSH2 0x1768 00001384: JUMP 00001385: JUMPDEST 00001386: PUSH1 0x00 00001388: SLOAD 00001389: PUSH2 0x0100 0000138c: SWAP1 0000138d: DIV 0000138e: PUSH1 0xff 00001390: AND 00001391: PUSH2 0x0a5e 00001394: JUMPI 00001395: PUSH1 0x40 00001397: MLOAD 00001398: PUSH3 0x461bcd 0000139c: PUSH1 0xe5 0000139e: SHL 0000139f: DUP2 000013a0: MSTORE 000013a1: PUSH1 0x04 000013a3: ADD 000013a4: PUSH2 0x0587 000013a7: SWAP1 000013a8: PUSH2 0x2338 000013ab: JUMP 000013ac: JUMPDEST 000013ad: PUSH2 0x059a 000013b0: DUP3 000013b1: DUP3 000013b2: PUSH2 0x1075 000013b5: JUMP 000013b6: JUMPDEST 000013b7: PUSH1 0x00 000013b9: PUSH2 0x0b9c 000013bc: DUP4 000013bd: DUP4 000013be: PUSH2 0x1798 000013c1: JUMP 000013c2: JUMPDEST 000013c3: PUSH1 0x00 000013c5: PUSH2 0x048f 000013c8: DUP3 000013c9: SLOAD 000013ca: SWAP1 000013cb: JUMP 000013cc: JUMPDEST 000013cd: PUSH2 0x13d6 000013d0: DUP3 000013d1: DUP3 000013d2: PUSH2 0x0ba3 000013d5: JUMP 000013d6: JUMPDEST 000013d7: PUSH2 0x059a 000013da: JUMPI 000013db: PUSH2 0x13e3 000013de: DUP2 000013df: PUSH2 0x17c2 000013e2: JUMP 000013e3: JUMPDEST 000013e4: PUSH2 0x13ee 000013e7: DUP4 000013e8: PUSH1 0x20 000013ea: PUSH2 0x17d4 000013ed: JUMP 000013ee: JUMPDEST 000013ef: PUSH1 0x40 000013f1: MLOAD 000013f2: PUSH1 0x20 000013f4: ADD 000013f5: PUSH2 0x13ff 000013f8: SWAP3 000013f9: SWAP2 000013fa: SWAP1 000013fb: PUSH2 0x23af 000013fe: JUMP 000013ff: JUMPDEST 00001400: PUSH1 0x40 00001402: DUP1 00001403: MLOAD 00001404: PUSH1 0x1f 00001406: NOT 00001407: DUP2 00001408: DUP5 00001409: SUB 0000140a: ADD 0000140b: DUP2 0000140c: MSTORE 0000140d: SWAP1 0000140e: DUP3 0000140f: SWAP1 00001410: MSTORE 00001411: PUSH3 0x461bcd 00001415: PUSH1 0xe5 00001417: SHL 00001418: DUP3 00001419: MSTORE 0000141a: PUSH2 0x0587 0000141d: SWAP2 0000141e: PUSH1 0x04 00001420: ADD 00001421: PUSH2 0x2424 00001424: JUMP 00001425: JUMPDEST 00001426: PUSH1 0x40 00001428: DUP1 00001429: MLOAD 0000142a: PUSH1 0x01 0000142c: PUSH1 0x01 0000142e: PUSH1 0xa0 00001430: SHL 00001431: SUB 00001432: DUP5 00001433: AND 00001434: PUSH1 0x24 00001436: DUP3 00001437: ADD 00001438: MSTORE 00001439: PUSH1 0x44 0000143b: DUP1 0000143c: DUP3 0000143d: ADD 0000143e: DUP5 0000143f: SWAP1 00001440: MSTORE 00001441: DUP3 00001442: MLOAD 00001443: DUP1 00001444: DUP4 00001445: SUB 00001446: SWAP1 00001447: SWAP2 00001448: ADD 00001449: DUP2 0000144a: MSTORE 0000144b: PUSH1 0x64 0000144d: SWAP1 0000144e: SWAP2 0000144f: ADD 00001450: SWAP1 00001451: SWAP2 00001452: MSTORE 00001453: PUSH1 0x20 00001455: DUP2 00001456: ADD 00001457: DUP1 00001458: MLOAD 00001459: PUSH1 0x01 0000145b: PUSH1 0x01 0000145d: PUSH1 0xe0 0000145f: SHL 00001460: SUB 00001461: AND 00001462: PUSH4 0xa9059cbb 00001467: PUSH1 0xe0 00001469: SHL 0000146a: OR 0000146b: SWAP1 0000146c: MSTORE 0000146d: PUSH2 0x04e0 00001470: SWAP1 00001471: DUP5 00001472: SWAP1 00001473: PUSH2 0x1970 00001476: JUMP 00001477: JUMPDEST 00001478: DUP1 00001479: SELFBALANCE 0000147a: LT 0000147b: ISZERO 0000147c: PUSH2 0x14c7 0000147f: JUMPI 00001480: PUSH1 0x40 00001482: MLOAD 00001483: PUSH3 0x461bcd 00001487: PUSH1 0xe5 00001489: SHL 0000148a: DUP2 0000148b: MSTORE 0000148c: PUSH1 0x20 0000148e: PUSH1 0x04 00001490: DUP3 00001491: ADD 00001492: MSTORE 00001493: PUSH1 0x1d 00001495: PUSH1 0x24 00001497: DUP3 00001498: ADD 00001499: MSTORE 0000149a: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e6365000000 000014bb: PUSH1 0x44 000014bd: DUP3 000014be: ADD 000014bf: MSTORE 000014c0: PUSH1 0x64 000014c2: ADD 000014c3: PUSH2 0x0587 000014c6: JUMP 000014c7: JUMPDEST 000014c8: PUSH1 0x00 000014ca: DUP3 000014cb: PUSH1 0x01 000014cd: PUSH1 0x01 000014cf: PUSH1 0xa0 000014d1: SHL 000014d2: SUB 000014d3: AND 000014d4: DUP3 000014d5: PUSH1 0x40 000014d7: MLOAD 000014d8: PUSH1 0x00 000014da: PUSH1 0x40 000014dc: MLOAD 000014dd: DUP1 000014de: DUP4 000014df: SUB 000014e0: DUP2 000014e1: DUP6 000014e2: DUP8 000014e3: GAS 000014e4: CALL 000014e5: SWAP3 000014e6: POP 000014e7: POP 000014e8: POP 000014e9: RETURNDATASIZE 000014ea: DUP1 000014eb: PUSH1 0x00 000014ed: DUP2 000014ee: EQ 000014ef: PUSH2 0x1514 000014f2: JUMPI 000014f3: PUSH1 0x40 000014f5: MLOAD 000014f6: SWAP2 000014f7: POP 000014f8: PUSH1 0x1f 000014fa: NOT 000014fb: PUSH1 0x3f 000014fd: RETURNDATASIZE 000014fe: ADD 000014ff: AND 00001500: DUP3 00001501: ADD 00001502: PUSH1 0x40 00001504: MSTORE 00001505: RETURNDATASIZE 00001506: DUP3 00001507: MSTORE 00001508: RETURNDATASIZE 00001509: PUSH1 0x00 0000150b: PUSH1 0x20 0000150d: DUP5 0000150e: ADD 0000150f: RETURNDATACOPY 00001510: PUSH2 0x1519 00001513: JUMP 00001514: JUMPDEST 00001515: PUSH1 0x60 00001517: SWAP2 00001518: POP 00001519: JUMPDEST 0000151a: POP 0000151b: POP 0000151c: SWAP1 0000151d: POP 0000151e: DUP1 0000151f: PUSH2 0x04e0 00001522: JUMPI 00001523: PUSH1 0x40 00001525: MLOAD 00001526: PUSH3 0x461bcd 0000152a: PUSH1 0xe5 0000152c: SHL 0000152d: DUP2 0000152e: MSTORE 0000152f: PUSH1 0x20 00001531: PUSH1 0x04 00001533: DUP3 00001534: ADD 00001535: MSTORE 00001536: PUSH1 0x3a 00001538: PUSH1 0x24 0000153a: DUP3 0000153b: ADD 0000153c: MSTORE 0000153d: PUSH32 0x416464726573733a20756e61626c6520746f2073656e642076616c75652c2072 0000155e: PUSH1 0x44 00001560: DUP3 00001561: ADD 00001562: MSTORE 00001563: PUSH32 0x6563697069656e74206d61792068617665207265766572746564000000000000 00001584: PUSH1 0x64 00001586: DUP3 00001587: ADD 00001588: MSTORE 00001589: PUSH1 0x84 0000158b: ADD 0000158c: PUSH2 0x0587 0000158f: JUMP 00001590: JUMPDEST 00001591: PUSH2 0x159a 00001594: DUP3 00001595: DUP3 00001596: PUSH2 0x0ba3 00001599: JUMP 0000159a: JUMPDEST 0000159b: PUSH2 0x059a 0000159e: JUMPI 0000159f: PUSH1 0x00 000015a1: DUP3 000015a2: DUP2 000015a3: MSTORE 000015a4: PUSH1 0xfb 000015a6: PUSH1 0x20 000015a8: SWAP1 000015a9: DUP2 000015aa: MSTORE 000015ab: PUSH1 0x40 000015ad: DUP1 000015ae: DUP4 000015af: KECCAK256 000015b0: PUSH1 0x01 000015b2: PUSH1 0x01 000015b4: PUSH1 0xa0 000015b6: SHL 000015b7: SUB 000015b8: DUP6 000015b9: AND 000015ba: DUP5 000015bb: MSTORE 000015bc: SWAP1 000015bd: SWAP2 000015be: MSTORE 000015bf: SWAP1 000015c0: KECCAK256 000015c1: DUP1 000015c2: SLOAD 000015c3: PUSH1 0xff 000015c5: NOT 000015c6: AND 000015c7: PUSH1 0x01 000015c9: OR 000015ca: SWAP1 000015cb: SSTORE 000015cc: PUSH2 0x15d2 000015cf: CALLER 000015d0: SWAP1 000015d1: JUMP 000015d2: JUMPDEST 000015d3: PUSH1 0x01 000015d5: PUSH1 0x01 000015d7: PUSH1 0xa0 000015d9: SHL 000015da: SUB 000015db: AND 000015dc: DUP2 000015dd: PUSH1 0x01 000015df: PUSH1 0x01 000015e1: PUSH1 0xa0 000015e3: SHL 000015e4: SUB 000015e5: AND 000015e6: DUP4 000015e7: PUSH32 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d 00001608: PUSH1 0x40 0000160a: MLOAD 0000160b: PUSH1 0x40 0000160d: MLOAD 0000160e: DUP1 0000160f: SWAP2 00001610: SUB 00001611: SWAP1 00001612: LOG4 00001613: POP 00001614: POP 00001615: JUMP 00001616: JUMPDEST 00001617: PUSH1 0x00 00001619: PUSH2 0x0b9c 0000161c: DUP4 0000161d: PUSH1 0x01 0000161f: PUSH1 0x01 00001621: PUSH1 0xa0 00001623: SHL 00001624: SUB 00001625: DUP5 00001626: AND 00001627: PUSH2 0x1a42 0000162a: JUMP 0000162b: JUMPDEST 0000162c: PUSH2 0x1635 0000162f: DUP3 00001630: DUP3 00001631: PUSH2 0x0ba3 00001634: JUMP 00001635: JUMPDEST 00001636: ISZERO 00001637: PUSH2 0x059a 0000163a: JUMPI 0000163b: PUSH1 0x00 0000163d: DUP3 0000163e: DUP2 0000163f: MSTORE 00001640: PUSH1 0xfb 00001642: PUSH1 0x20 00001644: SWAP1 00001645: DUP2 00001646: MSTORE 00001647: PUSH1 0x40 00001649: DUP1 0000164a: DUP4 0000164b: KECCAK256 0000164c: PUSH1 0x01 0000164e: PUSH1 0x01 00001650: PUSH1 0xa0 00001652: SHL 00001653: SUB 00001654: DUP6 00001655: AND 00001656: DUP1 00001657: DUP6 00001658: MSTORE 00001659: SWAP3 0000165a: MSTORE 0000165b: DUP1 0000165c: DUP4 0000165d: KECCAK256 0000165e: DUP1 0000165f: SLOAD 00001660: PUSH1 0xff 00001662: NOT 00001663: AND 00001664: SWAP1 00001665: SSTORE 00001666: MLOAD 00001667: CALLER 00001668: SWAP3 00001669: DUP6 0000166a: SWAP2 0000166b: PUSH32 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b 0000168c: SWAP2 0000168d: SWAP1 0000168e: LOG4 0000168f: POP 00001690: POP 00001691: JUMP 00001692: JUMPDEST 00001693: PUSH1 0x00 00001695: PUSH2 0x0b9c 00001698: DUP4 00001699: PUSH1 0x01 0000169b: PUSH1 0x01 0000169d: PUSH1 0xa0 0000169f: SHL 000016a0: SUB 000016a1: DUP5 000016a2: AND 000016a3: PUSH2 0x1a91 000016a6: JUMP 000016a7: JUMPDEST 000016a8: PUSH1 0x01 000016aa: PUSH1 0x01 000016ac: PUSH1 0xa0 000016ae: SHL 000016af: SUB 000016b0: DUP2 000016b1: AND 000016b2: EXTCODESIZE 000016b3: PUSH2 0x1714 000016b6: JUMPI 000016b7: PUSH1 0x40 000016b9: MLOAD 000016ba: PUSH3 0x461bcd 000016be: PUSH1 0xe5 000016c0: SHL 000016c1: DUP2 000016c2: MSTORE 000016c3: PUSH1 0x20 000016c5: PUSH1 0x04 000016c7: DUP3 000016c8: ADD 000016c9: MSTORE 000016ca: PUSH1 0x2d 000016cc: PUSH1 0x24 000016ce: DUP3 000016cf: ADD 000016d0: MSTORE 000016d1: PUSH32 0x455243313936373a206e657720696d706c656d656e746174696f6e206973206e 000016f2: PUSH1 0x44 000016f4: DUP3 000016f5: ADD 000016f6: MSTORE 000016f7: PUSH13 0x1bdd08184818dbdb9d1c9858dd 00001705: PUSH1 0x9a 00001707: SHL 00001708: PUSH1 0x64 0000170a: DUP3 0000170b: ADD 0000170c: MSTORE 0000170d: PUSH1 0x84 0000170f: ADD 00001710: PUSH2 0x0587 00001713: JUMP 00001714: JUMPDEST 00001715: PUSH1 0x00 00001717: DUP1 00001718: MLOAD 00001719: PUSH1 0x20 0000171b: PUSH2 0x2511 0000171e: DUP4 0000171f: CODECOPY 00001720: DUP2 00001721: MLOAD 00001722: SWAP2 00001723: MSTORE 00001724: DUP1 00001725: SLOAD 00001726: PUSH1 0x01 00001728: PUSH1 0x01 0000172a: PUSH1 0xa0 0000172c: SHL 0000172d: SUB 0000172e: NOT 0000172f: AND 00001730: PUSH1 0x01 00001732: PUSH1 0x01 00001734: PUSH1 0xa0 00001736: SHL 00001737: SUB 00001738: SWAP3 00001739: SWAP1 0000173a: SWAP3 0000173b: AND 0000173c: SWAP2 0000173d: SWAP1 0000173e: SWAP2 0000173f: OR 00001740: SWAP1 00001741: SSTORE 00001742: JUMP 00001743: JUMPDEST 00001744: PUSH2 0x174c 00001747: DUP4 00001748: PUSH2 0x1b84 0000174b: JUMP 0000174c: JUMPDEST 0000174d: PUSH1 0x00 0000174f: DUP3 00001750: MLOAD 00001751: GT 00001752: DUP1 00001753: PUSH2 0x1759 00001756: JUMPI 00001757: POP 00001758: DUP1 00001759: JUMPDEST 0000175a: ISZERO 0000175b: PUSH2 0x04e0 0000175e: JUMPI 0000175f: PUSH2 0x04b8 00001762: DUP4 00001763: DUP4 00001764: PUSH2 0x1bc4 00001767: JUMP 00001768: JUMPDEST 00001769: PUSH1 0x00 0000176b: SLOAD 0000176c: PUSH2 0x0100 0000176f: SWAP1 00001770: DIV 00001771: PUSH1 0xff 00001773: AND 00001774: PUSH2 0x178f 00001777: JUMPI 00001778: PUSH1 0x40 0000177a: MLOAD 0000177b: PUSH3 0x461bcd 0000177f: PUSH1 0xe5 00001781: SHL 00001782: DUP2 00001783: MSTORE 00001784: PUSH1 0x04 00001786: ADD 00001787: PUSH2 0x0587 0000178a: SWAP1 0000178b: PUSH2 0x2338 0000178e: JUMP 0000178f: JUMPDEST 00001790: PUSH2 0x0a5e 00001793: CALLER 00001794: PUSH2 0x1304 00001797: JUMP 00001798: JUMPDEST 00001799: PUSH1 0x00 0000179b: DUP3 0000179c: PUSH1 0x00 0000179e: ADD 0000179f: DUP3 000017a0: DUP2 000017a1: SLOAD 000017a2: DUP2 000017a3: LT 000017a4: PUSH2 0x17af 000017a7: JUMPI 000017a8: PUSH2 0x17af 000017ab: PUSH2 0x22d8 000017ae: JUMP 000017af: JUMPDEST 000017b0: SWAP1 000017b1: PUSH1 0x00 000017b3: MSTORE 000017b4: PUSH1 0x20 000017b6: PUSH1 0x00 000017b8: KECCAK256 000017b9: ADD 000017ba: SLOAD 000017bb: SWAP1 000017bc: POP 000017bd: SWAP3 000017be: SWAP2 000017bf: POP 000017c0: POP 000017c1: JUMP 000017c2: JUMPDEST 000017c3: PUSH1 0x60 000017c5: PUSH2 0x048f 000017c8: PUSH1 0x01 000017ca: PUSH1 0x01 000017cc: PUSH1 0xa0 000017ce: SHL 000017cf: SUB 000017d0: DUP4 000017d1: AND 000017d2: PUSH1 0x14 000017d4: JUMPDEST 000017d5: PUSH1 0x60 000017d7: PUSH1 0x00 000017d9: PUSH2 0x17e3 000017dc: DUP4 000017dd: PUSH1 0x02 000017df: PUSH2 0x2457 000017e2: JUMP 000017e3: JUMPDEST 000017e4: PUSH2 0x17ee 000017e7: SWAP1 000017e8: PUSH1 0x02 000017ea: PUSH2 0x2476 000017ed: JUMP 000017ee: JUMPDEST 000017ef: PUSH8 0xffffffffffffffff 000017f8: DUP2 000017f9: GT 000017fa: ISZERO 000017fb: PUSH2 0x1806 000017fe: JUMPI 000017ff: PUSH2 0x1806 00001802: PUSH2 0x1f07 00001805: JUMP 00001806: JUMPDEST 00001807: PUSH1 0x40 00001809: MLOAD 0000180a: SWAP1 0000180b: DUP1 0000180c: DUP3 0000180d: MSTORE 0000180e: DUP1 0000180f: PUSH1 0x1f 00001811: ADD 00001812: PUSH1 0x1f 00001814: NOT 00001815: AND 00001816: PUSH1 0x20 00001818: ADD 00001819: DUP3 0000181a: ADD 0000181b: PUSH1 0x40 0000181d: MSTORE 0000181e: DUP1 0000181f: ISZERO 00001820: PUSH2 0x1830 00001823: JUMPI 00001824: PUSH1 0x20 00001826: DUP3 00001827: ADD 00001828: DUP2 00001829: DUP1 0000182a: CALLDATASIZE 0000182b: DUP4 0000182c: CALLDATACOPY 0000182d: ADD 0000182e: SWAP1 0000182f: POP 00001830: JUMPDEST 00001831: POP 00001832: SWAP1 00001833: POP 00001834: PUSH1 0x03 00001836: PUSH1 0xfc 00001838: SHL 00001839: DUP2 0000183a: PUSH1 0x00 0000183c: DUP2 0000183d: MLOAD 0000183e: DUP2 0000183f: LT 00001840: PUSH2 0x184b 00001843: JUMPI 00001844: PUSH2 0x184b 00001847: PUSH2 0x22d8 0000184a: JUMP 0000184b: JUMPDEST 0000184c: PUSH1 0x20 0000184e: ADD 0000184f: ADD 00001850: SWAP1 00001851: PUSH1 0x01 00001853: PUSH1 0x01 00001855: PUSH1 0xf8 00001857: SHL 00001858: SUB 00001859: NOT 0000185a: AND 0000185b: SWAP1 0000185c: DUP2 0000185d: PUSH1 0x00 0000185f: BYTE 00001860: SWAP1 00001861: MSTORE8 00001862: POP 00001863: PUSH1 0x0f 00001865: PUSH1 0xfb 00001867: SHL 00001868: DUP2 00001869: PUSH1 0x01 0000186b: DUP2 0000186c: MLOAD 0000186d: DUP2 0000186e: LT 0000186f: PUSH2 0x187a 00001872: JUMPI 00001873: PUSH2 0x187a 00001876: PUSH2 0x22d8 00001879: JUMP 0000187a: JUMPDEST 0000187b: PUSH1 0x20 0000187d: ADD 0000187e: ADD 0000187f: SWAP1 00001880: PUSH1 0x01 00001882: PUSH1 0x01 00001884: PUSH1 0xf8 00001886: SHL 00001887: SUB 00001888: NOT 00001889: AND 0000188a: SWAP1 0000188b: DUP2 0000188c: PUSH1 0x00 0000188e: BYTE 0000188f: SWAP1 00001890: MSTORE8 00001891: POP 00001892: PUSH1 0x00 00001894: PUSH2 0x189e 00001897: DUP5 00001898: PUSH1 0x02 0000189a: PUSH2 0x2457 0000189d: JUMP 0000189e: JUMPDEST 0000189f: PUSH2 0x18a9 000018a2: SWAP1 000018a3: PUSH1 0x01 000018a5: PUSH2 0x2476 000018a8: JUMP 000018a9: JUMPDEST 000018aa: SWAP1 000018ab: POP 000018ac: JUMPDEST 000018ad: PUSH1 0x01 000018af: DUP2 000018b0: GT 000018b1: ISZERO 000018b2: PUSH2 0x1921 000018b5: JUMPI 000018b6: PUSH16 0x181899199a1a9b1b9c1cb0b131b232b3 000018c7: PUSH1 0x81 000018c9: SHL 000018ca: DUP6 000018cb: PUSH1 0x0f 000018cd: AND 000018ce: PUSH1 0x10 000018d0: DUP2 000018d1: LT 000018d2: PUSH2 0x18dd 000018d5: JUMPI 000018d6: PUSH2 0x18dd 000018d9: PUSH2 0x22d8 000018dc: JUMP 000018dd: JUMPDEST 000018de: BYTE 000018df: PUSH1 0xf8 000018e1: SHL 000018e2: DUP3 000018e3: DUP3 000018e4: DUP2 000018e5: MLOAD 000018e6: DUP2 000018e7: LT 000018e8: PUSH2 0x18f3 000018eb: JUMPI 000018ec: PUSH2 0x18f3 000018ef: PUSH2 0x22d8 000018f2: JUMP 000018f3: JUMPDEST 000018f4: PUSH1 0x20 000018f6: ADD 000018f7: ADD 000018f8: SWAP1 000018f9: PUSH1 0x01 000018fb: PUSH1 0x01 000018fd: PUSH1 0xf8 000018ff: SHL 00001900: SUB 00001901: NOT 00001902: AND 00001903: SWAP1 00001904: DUP2 00001905: PUSH1 0x00 00001907: BYTE 00001908: SWAP1 00001909: MSTORE8 0000190a: POP 0000190b: PUSH1 0x04 0000190d: SWAP5 0000190e: SWAP1 0000190f: SWAP5 00001910: SHR 00001911: SWAP4 00001912: PUSH2 0x191a 00001915: DUP2 00001916: PUSH2 0x248e 00001919: JUMP 0000191a: JUMPDEST 0000191b: SWAP1 0000191c: POP 0000191d: PUSH2 0x18ac 00001920: JUMP 00001921: JUMPDEST 00001922: POP 00001923: DUP4 00001924: ISZERO 00001925: PUSH2 0x0b9c 00001928: JUMPI 00001929: PUSH1 0x40 0000192b: MLOAD 0000192c: PUSH3 0x461bcd 00001930: PUSH1 0xe5 00001932: SHL 00001933: DUP2 00001934: MSTORE 00001935: PUSH1 0x20 00001937: PUSH1 0x04 00001939: DUP3 0000193a: ADD 0000193b: DUP2 0000193c: SWAP1 0000193d: MSTORE 0000193e: PUSH1 0x24 00001940: DUP3 00001941: ADD 00001942: MSTORE 00001943: PUSH32 0x537472696e67733a20686578206c656e67746820696e73756666696369656e74 00001964: PUSH1 0x44 00001966: DUP3 00001967: ADD 00001968: MSTORE 00001969: PUSH1 0x64 0000196b: ADD 0000196c: PUSH2 0x0587 0000196f: JUMP 00001970: JUMPDEST 00001971: PUSH1 0x00 00001973: PUSH2 0x19c5 00001976: DUP3 00001977: PUSH1 0x40 00001979: MLOAD 0000197a: DUP1 0000197b: PUSH1 0x40 0000197d: ADD 0000197e: PUSH1 0x40 00001980: MSTORE 00001981: DUP1 00001982: PUSH1 0x20 00001984: DUP2 00001985: MSTORE 00001986: PUSH1 0x20 00001988: ADD 00001989: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564 000019aa: DUP2 000019ab: MSTORE 000019ac: POP 000019ad: DUP6 000019ae: PUSH1 0x01 000019b0: PUSH1 0x01 000019b2: PUSH1 0xa0 000019b4: SHL 000019b5: SUB 000019b6: AND 000019b7: PUSH2 0x1cb8 000019ba: SWAP1 000019bb: SWAP3 000019bc: SWAP2 000019bd: SWAP1 000019be: PUSH4 0xffffffff 000019c3: AND 000019c4: JUMP 000019c5: JUMPDEST 000019c6: DUP1 000019c7: MLOAD 000019c8: SWAP1 000019c9: SWAP2 000019ca: POP 000019cb: ISZERO 000019cc: PUSH2 0x04e0 000019cf: JUMPI 000019d0: DUP1 000019d1: DUP1 000019d2: PUSH1 0x20 000019d4: ADD 000019d5: SWAP1 000019d6: MLOAD 000019d7: DUP2 000019d8: ADD 000019d9: SWAP1 000019da: PUSH2 0x19e3 000019dd: SWAP2 000019de: SWAP1 000019df: PUSH2 0x24a5 000019e2: JUMP 000019e3: JUMPDEST 000019e4: PUSH2 0x04e0 000019e7: JUMPI 000019e8: PUSH1 0x40 000019ea: MLOAD 000019eb: PUSH3 0x461bcd 000019ef: PUSH1 0xe5 000019f1: SHL 000019f2: DUP2 000019f3: MSTORE 000019f4: PUSH1 0x20 000019f6: PUSH1 0x04 000019f8: DUP3 000019f9: ADD 000019fa: MSTORE 000019fb: PUSH1 0x2a 000019fd: PUSH1 0x24 000019ff: DUP3 00001a00: ADD 00001a01: MSTORE 00001a02: PUSH32 0x5361666545524332303a204552433230206f7065726174696f6e20646964206e 00001a23: PUSH1 0x44 00001a25: DUP3 00001a26: ADD 00001a27: MSTORE 00001a28: PUSH10 0x1bdd081cdd58d8d95959 00001a33: PUSH1 0xb2 00001a35: SHL 00001a36: PUSH1 0x64 00001a38: DUP3 00001a39: ADD 00001a3a: MSTORE 00001a3b: PUSH1 0x84 00001a3d: ADD 00001a3e: PUSH2 0x0587 00001a41: JUMP 00001a42: JUMPDEST 00001a43: PUSH1 0x00 00001a45: DUP2 00001a46: DUP2 00001a47: MSTORE 00001a48: PUSH1 0x01 00001a4a: DUP4 00001a4b: ADD 00001a4c: PUSH1 0x20 00001a4e: MSTORE 00001a4f: PUSH1 0x40 00001a51: DUP2 00001a52: KECCAK256 00001a53: SLOAD 00001a54: PUSH2 0x1a89 00001a57: JUMPI 00001a58: POP 00001a59: DUP2 00001a5a: SLOAD 00001a5b: PUSH1 0x01 00001a5d: DUP2 00001a5e: DUP2 00001a5f: ADD 00001a60: DUP5 00001a61: SSTORE 00001a62: PUSH1 0x00 00001a64: DUP5 00001a65: DUP2 00001a66: MSTORE 00001a67: PUSH1 0x20 00001a69: DUP1 00001a6a: DUP3 00001a6b: KECCAK256 00001a6c: SWAP1 00001a6d: SWAP4 00001a6e: ADD 00001a6f: DUP5 00001a70: SWAP1 00001a71: SSTORE 00001a72: DUP5 00001a73: SLOAD 00001a74: DUP5 00001a75: DUP3 00001a76: MSTORE 00001a77: DUP3 00001a78: DUP7 00001a79: ADD 00001a7a: SWAP1 00001a7b: SWAP4 00001a7c: MSTORE 00001a7d: PUSH1 0x40 00001a7f: SWAP1 00001a80: KECCAK256 00001a81: SWAP2 00001a82: SWAP1 00001a83: SWAP2 00001a84: SSTORE 00001a85: PUSH2 0x048f 00001a88: JUMP 00001a89: JUMPDEST 00001a8a: POP 00001a8b: PUSH1 0x00 00001a8d: PUSH2 0x048f 00001a90: JUMP 00001a91: JUMPDEST 00001a92: PUSH1 0x00 00001a94: DUP2 00001a95: DUP2 00001a96: MSTORE 00001a97: PUSH1 0x01 00001a99: DUP4 00001a9a: ADD 00001a9b: PUSH1 0x20 00001a9d: MSTORE 00001a9e: PUSH1 0x40 00001aa0: DUP2 00001aa1: KECCAK256 00001aa2: SLOAD 00001aa3: DUP1 00001aa4: ISZERO 00001aa5: PUSH2 0x1b7a 00001aa8: JUMPI 00001aa9: PUSH1 0x00 00001aab: PUSH2 0x1ab5 00001aae: PUSH1 0x01 00001ab0: DUP4 00001ab1: PUSH2 0x24c7 00001ab4: JUMP 00001ab5: JUMPDEST 00001ab6: DUP6 00001ab7: SLOAD 00001ab8: SWAP1 00001ab9: SWAP2 00001aba: POP 00001abb: PUSH1 0x00 00001abd: SWAP1 00001abe: PUSH2 0x1ac9 00001ac1: SWAP1 00001ac2: PUSH1 0x01 00001ac4: SWAP1 00001ac5: PUSH2 0x24c7 00001ac8: JUMP 00001ac9: JUMPDEST 00001aca: SWAP1 00001acb: POP 00001acc: DUP2 00001acd: DUP2 00001ace: EQ 00001acf: PUSH2 0x1b2e 00001ad2: JUMPI 00001ad3: PUSH1 0x00 00001ad5: DUP7 00001ad6: PUSH1 0x00 00001ad8: ADD 00001ad9: DUP3 00001ada: DUP2 00001adb: SLOAD 00001adc: DUP2 00001add: LT 00001ade: PUSH2 0x1ae9 00001ae1: JUMPI 00001ae2: PUSH2 0x1ae9 00001ae5: PUSH2 0x22d8 00001ae8: JUMP 00001ae9: JUMPDEST 00001aea: SWAP1 00001aeb: PUSH1 0x00 00001aed: MSTORE 00001aee: PUSH1 0x20 00001af0: PUSH1 0x00 00001af2: KECCAK256 00001af3: ADD 00001af4: SLOAD 00001af5: SWAP1 00001af6: POP 00001af7: DUP1 00001af8: DUP8 00001af9: PUSH1 0x00 00001afb: ADD 00001afc: DUP5 00001afd: DUP2 00001afe: SLOAD 00001aff: DUP2 00001b00: LT 00001b01: PUSH2 0x1b0c 00001b04: JUMPI 00001b05: PUSH2 0x1b0c 00001b08: PUSH2 0x22d8 00001b0b: JUMP 00001b0c: JUMPDEST 00001b0d: PUSH1 0x00 00001b0f: SWAP2 00001b10: DUP3 00001b11: MSTORE 00001b12: PUSH1 0x20 00001b14: DUP1 00001b15: DUP4 00001b16: KECCAK256 00001b17: SWAP1 00001b18: SWAP2 00001b19: ADD 00001b1a: SWAP3 00001b1b: SWAP1 00001b1c: SWAP3 00001b1d: SSTORE 00001b1e: SWAP2 00001b1f: DUP3 00001b20: MSTORE 00001b21: PUSH1 0x01 00001b23: DUP9 00001b24: ADD 00001b25: SWAP1 00001b26: MSTORE 00001b27: PUSH1 0x40 00001b29: SWAP1 00001b2a: KECCAK256 00001b2b: DUP4 00001b2c: SWAP1 00001b2d: SSTORE 00001b2e: JUMPDEST 00001b2f: DUP6 00001b30: SLOAD 00001b31: DUP7 00001b32: SWAP1 00001b33: DUP1 00001b34: PUSH2 0x1b3f 00001b37: JUMPI 00001b38: PUSH2 0x1b3f 00001b3b: PUSH2 0x24de 00001b3e: JUMP 00001b3f: JUMPDEST 00001b40: PUSH1 0x01 00001b42: SWAP1 00001b43: SUB 00001b44: DUP2 00001b45: DUP2 00001b46: SWAP1 00001b47: PUSH1 0x00 00001b49: MSTORE 00001b4a: PUSH1 0x20 00001b4c: PUSH1 0x00 00001b4e: KECCAK256 00001b4f: ADD 00001b50: PUSH1 0x00 00001b52: SWAP1 00001b53: SSTORE 00001b54: SWAP1 00001b55: SSTORE 00001b56: DUP6 00001b57: PUSH1 0x01 00001b59: ADD 00001b5a: PUSH1 0x00 00001b5c: DUP7 00001b5d: DUP2 00001b5e: MSTORE 00001b5f: PUSH1 0x20 00001b61: ADD 00001b62: SWAP1 00001b63: DUP2 00001b64: MSTORE 00001b65: PUSH1 0x20 00001b67: ADD 00001b68: PUSH1 0x00 00001b6a: KECCAK256 00001b6b: PUSH1 0x00 00001b6d: SWAP1 00001b6e: SSTORE 00001b6f: PUSH1 0x01 00001b71: SWAP4 00001b72: POP 00001b73: POP 00001b74: POP 00001b75: POP 00001b76: PUSH2 0x048f 00001b79: JUMP 00001b7a: JUMPDEST 00001b7b: PUSH1 0x00 00001b7d: SWAP2 00001b7e: POP 00001b7f: POP 00001b80: PUSH2 0x048f 00001b83: JUMP 00001b84: JUMPDEST 00001b85: PUSH2 0x1b8d 00001b88: DUP2 00001b89: PUSH2 0x16a7 00001b8c: JUMP 00001b8d: JUMPDEST 00001b8e: PUSH1 0x40 00001b90: MLOAD 00001b91: PUSH1 0x01 00001b93: PUSH1 0x01 00001b95: PUSH1 0xa0 00001b97: SHL 00001b98: SUB 00001b99: DUP3 00001b9a: AND 00001b9b: SWAP1 00001b9c: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b 00001bbd: SWAP1 00001bbe: PUSH1 0x00 00001bc0: SWAP1 00001bc1: LOG2 00001bc2: POP 00001bc3: JUMP 00001bc4: JUMPDEST 00001bc5: PUSH1 0x60 00001bc7: PUSH1 0x01 00001bc9: PUSH1 0x01 00001bcb: PUSH1 0xa0 00001bcd: SHL 00001bce: SUB 00001bcf: DUP4 00001bd0: AND 00001bd1: EXTCODESIZE 00001bd2: PUSH2 0x1c2c 00001bd5: JUMPI 00001bd6: PUSH1 0x40 00001bd8: MLOAD 00001bd9: PUSH3 0x461bcd 00001bdd: PUSH1 0xe5 00001bdf: SHL 00001be0: DUP2 00001be1: MSTORE 00001be2: PUSH1 0x20 00001be4: PUSH1 0x04 00001be6: DUP3 00001be7: ADD 00001be8: MSTORE 00001be9: PUSH1 0x26 00001beb: PUSH1 0x24 00001bed: DUP3 00001bee: ADD 00001bef: MSTORE 00001bf0: PUSH32 0x416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f 00001c11: PUSH1 0x44 00001c13: DUP3 00001c14: ADD 00001c15: MSTORE 00001c16: PUSH6 0x1b9d1c9858dd 00001c1d: PUSH1 0xd2 00001c1f: SHL 00001c20: PUSH1 0x64 00001c22: DUP3 00001c23: ADD 00001c24: MSTORE 00001c25: PUSH1 0x84 00001c27: ADD 00001c28: PUSH2 0x0587 00001c2b: JUMP 00001c2c: JUMPDEST 00001c2d: PUSH1 0x00 00001c2f: DUP1 00001c30: DUP5 00001c31: PUSH1 0x01 00001c33: PUSH1 0x01 00001c35: PUSH1 0xa0 00001c37: SHL 00001c38: SUB 00001c39: AND 00001c3a: DUP5 00001c3b: PUSH1 0x40 00001c3d: MLOAD 00001c3e: PUSH2 0x1c47 00001c41: SWAP2 00001c42: SWAP1 00001c43: PUSH2 0x24f4 00001c46: JUMP 00001c47: JUMPDEST 00001c48: PUSH1 0x00 00001c4a: PUSH1 0x40 00001c4c: MLOAD 00001c4d: DUP1 00001c4e: DUP4 00001c4f: SUB 00001c50: DUP2 00001c51: DUP6 00001c52: GAS 00001c53: DELEGATECALL 00001c54: SWAP2 00001c55: POP 00001c56: POP 00001c57: RETURNDATASIZE 00001c58: DUP1 00001c59: PUSH1 0x00 00001c5b: DUP2 00001c5c: EQ 00001c5d: PUSH2 0x1c82 00001c60: JUMPI 00001c61: PUSH1 0x40 00001c63: MLOAD 00001c64: SWAP2 00001c65: POP 00001c66: PUSH1 0x1f 00001c68: NOT 00001c69: PUSH1 0x3f 00001c6b: RETURNDATASIZE 00001c6c: ADD 00001c6d: AND 00001c6e: DUP3 00001c6f: ADD 00001c70: PUSH1 0x40 00001c72: MSTORE 00001c73: RETURNDATASIZE 00001c74: DUP3 00001c75: MSTORE 00001c76: RETURNDATASIZE 00001c77: PUSH1 0x00 00001c79: PUSH1 0x20 00001c7b: DUP5 00001c7c: ADD 00001c7d: RETURNDATACOPY 00001c7e: PUSH2 0x1c87 00001c81: JUMP 00001c82: JUMPDEST 00001c83: PUSH1 0x60 00001c85: SWAP2 00001c86: POP 00001c87: JUMPDEST 00001c88: POP 00001c89: SWAP2 00001c8a: POP 00001c8b: SWAP2 00001c8c: POP 00001c8d: PUSH2 0x1caf 00001c90: DUP3 00001c91: DUP3 00001c92: PUSH1 0x40 00001c94: MLOAD 00001c95: DUP1 00001c96: PUSH1 0x60 00001c98: ADD 00001c99: PUSH1 0x40 00001c9b: MSTORE 00001c9c: DUP1 00001c9d: PUSH1 0x27 00001c9f: DUP2 00001ca0: MSTORE 00001ca1: PUSH1 0x20 00001ca3: ADD 00001ca4: PUSH2 0x2531 00001ca7: PUSH1 0x27 00001ca9: SWAP2 00001caa: CODECOPY 00001cab: PUSH2 0x1cc7 00001cae: JUMP 00001caf: JUMPDEST 00001cb0: SWAP6 00001cb1: SWAP5 00001cb2: POP 00001cb3: POP 00001cb4: POP 00001cb5: POP 00001cb6: POP 00001cb7: JUMP 00001cb8: JUMPDEST 00001cb9: PUSH1 0x60 00001cbb: PUSH2 0x04ee 00001cbe: DUP5 00001cbf: DUP5 00001cc0: PUSH1 0x00 00001cc2: DUP6 00001cc3: PUSH2 0x1ce0 00001cc6: JUMP 00001cc7: JUMPDEST 00001cc8: PUSH1 0x60 00001cca: DUP4 00001ccb: ISZERO 00001ccc: PUSH2 0x1cd6 00001ccf: JUMPI 00001cd0: POP 00001cd1: DUP2 00001cd2: PUSH2 0x0b9c 00001cd5: JUMP 00001cd6: JUMPDEST 00001cd7: PUSH2 0x0b9c 00001cda: DUP4 00001cdb: DUP4 00001cdc: PUSH2 0x1dbb 00001cdf: JUMP 00001ce0: JUMPDEST 00001ce1: PUSH1 0x60 00001ce3: DUP3 00001ce4: SELFBALANCE 00001ce5: LT 00001ce6: ISZERO 00001ce7: PUSH2 0x1d41 00001cea: JUMPI 00001ceb: PUSH1 0x40 00001ced: MLOAD 00001cee: PUSH3 0x461bcd 00001cf2: PUSH1 0xe5 00001cf4: SHL 00001cf5: DUP2 00001cf6: MSTORE 00001cf7: PUSH1 0x20 00001cf9: PUSH1 0x04 00001cfb: DUP3 00001cfc: ADD 00001cfd: MSTORE 00001cfe: PUSH1 0x26 00001d00: PUSH1 0x24 00001d02: DUP3 00001d03: ADD 00001d04: MSTORE 00001d05: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e636520666f 00001d26: PUSH1 0x44 00001d28: DUP3 00001d29: ADD 00001d2a: MSTORE 00001d2b: PUSH6 0x1c8818d85b1b 00001d32: PUSH1 0xd2 00001d34: SHL 00001d35: PUSH1 0x64 00001d37: DUP3 00001d38: ADD 00001d39: MSTORE 00001d3a: PUSH1 0x84 00001d3c: ADD 00001d3d: PUSH2 0x0587 00001d40: JUMP 00001d41: JUMPDEST 00001d42: PUSH1 0x00 00001d44: DUP1 00001d45: DUP7 00001d46: PUSH1 0x01 00001d48: PUSH1 0x01 00001d4a: PUSH1 0xa0 00001d4c: SHL 00001d4d: SUB 00001d4e: AND 00001d4f: DUP6 00001d50: DUP8 00001d51: PUSH1 0x40 00001d53: MLOAD 00001d54: PUSH2 0x1d5d 00001d57: SWAP2 00001d58: SWAP1 00001d59: PUSH2 0x24f4 00001d5c: JUMP 00001d5d: JUMPDEST 00001d5e: PUSH1 0x00 00001d60: PUSH1 0x40 00001d62: MLOAD 00001d63: DUP1 00001d64: DUP4 00001d65: SUB 00001d66: DUP2 00001d67: DUP6 00001d68: DUP8 00001d69: GAS 00001d6a: CALL 00001d6b: SWAP3 00001d6c: POP 00001d6d: POP 00001d6e: POP 00001d6f: RETURNDATASIZE 00001d70: DUP1 00001d71: PUSH1 0x00 00001d73: DUP2 00001d74: EQ 00001d75: PUSH2 0x1d9a 00001d78: JUMPI 00001d79: PUSH1 0x40 00001d7b: MLOAD 00001d7c: SWAP2 00001d7d: POP 00001d7e: PUSH1 0x1f 00001d80: NOT 00001d81: PUSH1 0x3f 00001d83: RETURNDATASIZE 00001d84: ADD 00001d85: AND 00001d86: DUP3 00001d87: ADD 00001d88: PUSH1 0x40 00001d8a: MSTORE 00001d8b: RETURNDATASIZE 00001d8c: DUP3 00001d8d: MSTORE 00001d8e: RETURNDATASIZE 00001d8f: PUSH1 0x00 00001d91: PUSH1 0x20 00001d93: DUP5 00001d94: ADD 00001d95: RETURNDATACOPY 00001d96: PUSH2 0x1d9f 00001d99: JUMP 00001d9a: JUMPDEST 00001d9b: PUSH1 0x60 00001d9d: SWAP2 00001d9e: POP 00001d9f: JUMPDEST 00001da0: POP 00001da1: SWAP2 00001da2: POP 00001da3: SWAP2 00001da4: POP 00001da5: PUSH2 0x1db0 00001da8: DUP8 00001da9: DUP4 00001daa: DUP4 00001dab: DUP8 00001dac: PUSH2 0x1de5 00001daf: JUMP 00001db0: JUMPDEST 00001db1: SWAP8 00001db2: SWAP7 00001db3: POP 00001db4: POP 00001db5: POP 00001db6: POP 00001db7: POP 00001db8: POP 00001db9: POP 00001dba: JUMP 00001dbb: JUMPDEST 00001dbc: DUP2 00001dbd: MLOAD 00001dbe: ISZERO 00001dbf: PUSH2 0x1dcb 00001dc2: JUMPI 00001dc3: DUP2 00001dc4: MLOAD 00001dc5: DUP1 00001dc6: DUP4 00001dc7: PUSH1 0x20 00001dc9: ADD 00001dca: REVERT 00001dcb: JUMPDEST 00001dcc: DUP1 00001dcd: PUSH1 0x40 00001dcf: MLOAD 00001dd0: PUSH3 0x461bcd 00001dd4: PUSH1 0xe5 00001dd6: SHL 00001dd7: DUP2 00001dd8: MSTORE 00001dd9: PUSH1 0x04 00001ddb: ADD 00001ddc: PUSH2 0x0587 00001ddf: SWAP2 00001de0: SWAP1 00001de1: PUSH2 0x2424 00001de4: JUMP 00001de5: JUMPDEST 00001de6: PUSH1 0x60 00001de8: DUP4 00001de9: ISZERO 00001dea: PUSH2 0x1e51 00001ded: JUMPI 00001dee: DUP3 00001def: MLOAD 00001df0: PUSH2 0x1e4a 00001df3: JUMPI 00001df4: PUSH1 0x01 00001df6: PUSH1 0x01 00001df8: PUSH1 0xa0 00001dfa: SHL 00001dfb: SUB 00001dfc: DUP6 00001dfd: AND 00001dfe: EXTCODESIZE 00001dff: PUSH2 0x1e4a 00001e02: JUMPI 00001e03: PUSH1 0x40 00001e05: MLOAD 00001e06: PUSH3 0x461bcd 00001e0a: PUSH1 0xe5 00001e0c: SHL 00001e0d: DUP2 00001e0e: MSTORE 00001e0f: PUSH1 0x20 00001e11: PUSH1 0x04 00001e13: DUP3 00001e14: ADD 00001e15: MSTORE 00001e16: PUSH1 0x1d 00001e18: PUSH1 0x24 00001e1a: DUP3 00001e1b: ADD 00001e1c: MSTORE 00001e1d: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000 00001e3e: PUSH1 0x44 00001e40: DUP3 00001e41: ADD 00001e42: MSTORE 00001e43: PUSH1 0x64 00001e45: ADD 00001e46: PUSH2 0x0587 00001e49: JUMP 00001e4a: JUMPDEST 00001e4b: POP 00001e4c: DUP2 00001e4d: PUSH2 0x04ee 00001e50: JUMP 00001e51: JUMPDEST 00001e52: PUSH2 0x04ee 00001e55: DUP4 00001e56: DUP4 00001e57: PUSH2 0x1dbb 00001e5a: JUMP 00001e5b: JUMPDEST 00001e5c: PUSH1 0x00 00001e5e: PUSH1 0x20 00001e60: DUP3 00001e61: DUP5 00001e62: SUB 00001e63: SLT 00001e64: ISZERO 00001e65: PUSH2 0x1e6d 00001e68: JUMPI 00001e69: PUSH1 0x00 00001e6b: DUP1 00001e6c: REVERT 00001e6d: JUMPDEST 00001e6e: DUP2 00001e6f: CALLDATALOAD 00001e70: PUSH1 0x01 00001e72: PUSH1 0x01 00001e74: PUSH1 0xe0 00001e76: SHL 00001e77: SUB 00001e78: NOT 00001e79: DUP2 00001e7a: AND 00001e7b: DUP2 00001e7c: EQ 00001e7d: PUSH2 0x0b9c 00001e80: JUMPI 00001e81: PUSH1 0x00 00001e83: DUP1 00001e84: REVERT 00001e85: JUMPDEST 00001e86: PUSH1 0x01 00001e88: PUSH1 0x01 00001e8a: PUSH1 0xa0 00001e8c: SHL 00001e8d: SUB 00001e8e: DUP2 00001e8f: AND 00001e90: DUP2 00001e91: EQ 00001e92: PUSH2 0x067b 00001e95: JUMPI 00001e96: PUSH1 0x00 00001e98: DUP1 00001e99: REVERT 00001e9a: JUMPDEST 00001e9b: PUSH1 0x00 00001e9d: DUP1 00001e9e: PUSH1 0x00 00001ea0: PUSH1 0x60 00001ea2: DUP5 00001ea3: DUP7 00001ea4: SUB 00001ea5: SLT 00001ea6: ISZERO 00001ea7: PUSH2 0x1eaf 00001eaa: JUMPI 00001eab: PUSH1 0x00 00001ead: DUP1 00001eae: REVERT 00001eaf: JUMPDEST 00001eb0: DUP4 00001eb1: CALLDATALOAD 00001eb2: PUSH2 0x1eba 00001eb5: DUP2 00001eb6: PUSH2 0x1e85 00001eb9: JUMP 00001eba: JUMPDEST 00001ebb: SWAP3 00001ebc: POP 00001ebd: PUSH1 0x20 00001ebf: DUP5 00001ec0: ADD 00001ec1: CALLDATALOAD 00001ec2: PUSH2 0x1eca 00001ec5: DUP2 00001ec6: PUSH2 0x1e85 00001ec9: JUMP 00001eca: JUMPDEST 00001ecb: SWAP3 00001ecc: SWAP6 00001ecd: SWAP3 00001ece: SWAP5 00001ecf: POP 00001ed0: POP 00001ed1: POP 00001ed2: PUSH1 0x40 00001ed4: SWAP2 00001ed5: SWAP1 00001ed6: SWAP2 00001ed7: ADD 00001ed8: CALLDATALOAD 00001ed9: SWAP1 00001eda: JUMP 00001edb: JUMPDEST 00001edc: PUSH1 0x00 00001ede: DUP1 00001edf: PUSH1 0x40 00001ee1: DUP4 00001ee2: DUP6 00001ee3: SUB 00001ee4: SLT 00001ee5: ISZERO 00001ee6: PUSH2 0x1eee 00001ee9: JUMPI 00001eea: PUSH1 0x00 00001eec: DUP1 00001eed: REVERT 00001eee: JUMPDEST 00001eef: DUP3 00001ef0: CALLDATALOAD 00001ef1: PUSH2 0x1ef9 00001ef4: DUP2 00001ef5: PUSH2 0x1e85 00001ef8: JUMP 00001ef9: JUMPDEST 00001efa: SWAP5 00001efb: PUSH1 0x20 00001efd: SWAP4 00001efe: SWAP1 00001eff: SWAP4 00001f00: ADD 00001f01: CALLDATALOAD 00001f02: SWAP4 00001f03: POP 00001f04: POP 00001f05: POP 00001f06: JUMP 00001f07: JUMPDEST 00001f08: PUSH4 0x4e487b71 00001f0d: PUSH1 0xe0 00001f0f: SHL 00001f10: PUSH1 0x00 00001f12: MSTORE 00001f13: PUSH1 0x41 00001f15: PUSH1 0x04 00001f17: MSTORE 00001f18: PUSH1 0x24 00001f1a: PUSH1 0x00 00001f1c: REVERT 00001f1d: JUMPDEST 00001f1e: PUSH1 0x00 00001f20: DUP3 00001f21: PUSH1 0x1f 00001f23: DUP4 00001f24: ADD 00001f25: SLT 00001f26: PUSH2 0x1f2e 00001f29: JUMPI 00001f2a: PUSH1 0x00 00001f2c: DUP1 00001f2d: REVERT 00001f2e: JUMPDEST 00001f2f: DUP2 00001f30: CALLDATALOAD 00001f31: PUSH8 0xffffffffffffffff 00001f3a: DUP1 00001f3b: DUP3 00001f3c: GT 00001f3d: ISZERO 00001f3e: PUSH2 0x1f49 00001f41: JUMPI 00001f42: PUSH2 0x1f49 00001f45: PUSH2 0x1f07 00001f48: JUMP 00001f49: JUMPDEST 00001f4a: PUSH1 0x40 00001f4c: MLOAD 00001f4d: PUSH1 0x1f 00001f4f: DUP4 00001f50: ADD 00001f51: PUSH1 0x1f 00001f53: NOT 00001f54: SWAP1 00001f55: DUP2 00001f56: AND 00001f57: PUSH1 0x3f 00001f59: ADD 00001f5a: AND 00001f5b: DUP2 00001f5c: ADD 00001f5d: SWAP1 00001f5e: DUP3 00001f5f: DUP3 00001f60: GT 00001f61: DUP2 00001f62: DUP4 00001f63: LT 00001f64: OR 00001f65: ISZERO 00001f66: PUSH2 0x1f71 00001f69: JUMPI 00001f6a: PUSH2 0x1f71 00001f6d: PUSH2 0x1f07 00001f70: JUMP 00001f71: JUMPDEST 00001f72: DUP2 00001f73: PUSH1 0x40 00001f75: MSTORE 00001f76: DUP4 00001f77: DUP2 00001f78: MSTORE 00001f79: DUP7 00001f7a: PUSH1 0x20 00001f7c: DUP6 00001f7d: DUP9 00001f7e: ADD 00001f7f: ADD 00001f80: GT 00001f81: ISZERO 00001f82: PUSH2 0x1f8a 00001f85: JUMPI 00001f86: PUSH1 0x00 00001f88: DUP1 00001f89: REVERT 00001f8a: JUMPDEST 00001f8b: DUP4 00001f8c: PUSH1 0x20 00001f8e: DUP8 00001f8f: ADD 00001f90: PUSH1 0x20 00001f92: DUP4 00001f93: ADD 00001f94: CALLDATACOPY 00001f95: PUSH1 0x00 00001f97: PUSH1 0x20 00001f99: DUP6 00001f9a: DUP4 00001f9b: ADD 00001f9c: ADD 00001f9d: MSTORE 00001f9e: DUP1 00001f9f: SWAP5 00001fa0: POP 00001fa1: POP 00001fa2: POP 00001fa3: POP 00001fa4: POP 00001fa5: SWAP3 00001fa6: SWAP2 00001fa7: POP 00001fa8: POP 00001fa9: JUMP 00001faa: JUMPDEST 00001fab: PUSH1 0x00 00001fad: DUP1 00001fae: PUSH1 0x00 00001fb0: DUP1 00001fb1: PUSH1 0x80 00001fb3: DUP6 00001fb4: DUP8 00001fb5: SUB 00001fb6: SLT 00001fb7: ISZERO 00001fb8: PUSH2 0x1fc0 00001fbb: JUMPI 00001fbc: PUSH1 0x00 00001fbe: DUP1 00001fbf: REVERT 00001fc0: JUMPDEST 00001fc1: DUP5 00001fc2: CALLDATALOAD 00001fc3: PUSH2 0x1fcb 00001fc6: DUP2 00001fc7: PUSH2 0x1e85 00001fca: JUMP 00001fcb: JUMPDEST 00001fcc: SWAP4 00001fcd: POP 00001fce: PUSH1 0x20 00001fd0: DUP6 00001fd1: ADD 00001fd2: CALLDATALOAD 00001fd3: PUSH2 0x1fdb 00001fd6: DUP2 00001fd7: PUSH2 0x1e85 00001fda: JUMP 00001fdb: JUMPDEST 00001fdc: SWAP3 00001fdd: POP 00001fde: PUSH1 0x40 00001fe0: DUP6 00001fe1: ADD 00001fe2: CALLDATALOAD 00001fe3: SWAP2 00001fe4: POP 00001fe5: PUSH1 0x60 00001fe7: DUP6 00001fe8: ADD 00001fe9: CALLDATALOAD 00001fea: PUSH8 0xffffffffffffffff 00001ff3: DUP2 00001ff4: GT 00001ff5: ISZERO 00001ff6: PUSH2 0x1ffe 00001ff9: JUMPI 00001ffa: PUSH1 0x00 00001ffc: DUP1 00001ffd: REVERT 00001ffe: JUMPDEST 00001fff: PUSH2 0x200a 00002002: DUP8 00002003: DUP3 00002004: DUP9 00002005: ADD 00002006: PUSH2 0x1f1d 00002009: JUMP 0000200a: JUMPDEST 0000200b: SWAP2 0000200c: POP 0000200d: POP 0000200e: SWAP3 0000200f: SWAP6 00002010: SWAP2 00002011: SWAP5 00002012: POP 00002013: SWAP3 00002014: POP 00002015: JUMP 00002016: JUMPDEST 00002017: PUSH1 0x00 00002019: PUSH1 0x20 0000201b: DUP3 0000201c: DUP5 0000201d: SUB 0000201e: SLT 0000201f: ISZERO 00002020: PUSH2 0x2028 00002023: JUMPI 00002024: PUSH1 0x00 00002026: DUP1 00002027: REVERT 00002028: JUMPDEST 00002029: POP 0000202a: CALLDATALOAD 0000202b: SWAP2 0000202c: SWAP1 0000202d: POP 0000202e: JUMP 0000202f: JUMPDEST 00002030: PUSH1 0x00 00002032: DUP1 00002033: PUSH1 0x40 00002035: DUP4 00002036: DUP6 00002037: SUB 00002038: SLT 00002039: ISZERO 0000203a: PUSH2 0x2042 0000203d: JUMPI 0000203e: PUSH1 0x00 00002040: DUP1 00002041: REVERT 00002042: JUMPDEST 00002043: DUP3 00002044: CALLDATALOAD 00002045: SWAP2 00002046: POP 00002047: PUSH1 0x20 00002049: DUP4 0000204a: ADD 0000204b: CALLDATALOAD 0000204c: PUSH2 0x2054 0000204f: DUP2 00002050: PUSH2 0x1e85 00002053: JUMP 00002054: JUMPDEST 00002055: DUP1 00002056: SWAP2 00002057: POP 00002058: POP 00002059: SWAP3 0000205a: POP 0000205b: SWAP3 0000205c: SWAP1 0000205d: POP 0000205e: JUMP 0000205f: JUMPDEST 00002060: PUSH1 0x00 00002062: PUSH1 0x20 00002064: DUP3 00002065: DUP5 00002066: SUB 00002067: SLT 00002068: ISZERO 00002069: PUSH2 0x2071 0000206c: JUMPI 0000206d: PUSH1 0x00 0000206f: DUP1 00002070: REVERT 00002071: JUMPDEST 00002072: DUP2 00002073: CALLDATALOAD 00002074: PUSH2 0x0b9c 00002077: DUP2 00002078: PUSH2 0x1e85 0000207b: JUMP 0000207c: JUMPDEST 0000207d: PUSH1 0x00 0000207f: DUP1 00002080: PUSH1 0x40 00002082: DUP4 00002083: DUP6 00002084: SUB 00002085: SLT 00002086: ISZERO 00002087: PUSH2 0x208f 0000208a: JUMPI 0000208b: PUSH1 0x00 0000208d: DUP1 0000208e: REVERT 0000208f: JUMPDEST 00002090: DUP3 00002091: CALLDATALOAD 00002092: PUSH2 0x209a 00002095: DUP2 00002096: PUSH2 0x1e85 00002099: JUMP 0000209a: JUMPDEST 0000209b: SWAP2 0000209c: POP 0000209d: PUSH1 0x20 0000209f: DUP4 000020a0: ADD 000020a1: CALLDATALOAD 000020a2: PUSH8 0xffffffffffffffff 000020ab: DUP2 000020ac: GT 000020ad: ISZERO 000020ae: PUSH2 0x20b6 000020b1: JUMPI 000020b2: PUSH1 0x00 000020b4: DUP1 000020b5: REVERT 000020b6: JUMPDEST 000020b7: PUSH2 0x20c2 000020ba: DUP6 000020bb: DUP3 000020bc: DUP7 000020bd: ADD 000020be: PUSH2 0x1f1d 000020c1: JUMP 000020c2: JUMPDEST 000020c3: SWAP2 000020c4: POP 000020c5: POP 000020c6: SWAP3 000020c7: POP 000020c8: SWAP3 000020c9: SWAP1 000020ca: POP 000020cb: JUMP 000020cc: JUMPDEST 000020cd: PUSH1 0x00 000020cf: DUP1 000020d0: DUP4 000020d1: PUSH1 0x1f 000020d3: DUP5 000020d4: ADD 000020d5: SLT 000020d6: PUSH2 0x20de 000020d9: JUMPI 000020da: PUSH1 0x00 000020dc: DUP1 000020dd: REVERT 000020de: JUMPDEST 000020df: POP 000020e0: DUP2 000020e1: CALLDATALOAD 000020e2: PUSH8 0xffffffffffffffff 000020eb: DUP2 000020ec: GT 000020ed: ISZERO 000020ee: PUSH2 0x20f6 000020f1: JUMPI 000020f2: PUSH1 0x00 000020f4: DUP1 000020f5: REVERT 000020f6: JUMPDEST 000020f7: PUSH1 0x20 000020f9: DUP4 000020fa: ADD 000020fb: SWAP2 000020fc: POP 000020fd: DUP4 000020fe: PUSH1 0x20 00002100: DUP3 00002101: PUSH1 0x05 00002103: SHL 00002104: DUP6 00002105: ADD 00002106: ADD 00002107: GT 00002108: ISZERO 00002109: PUSH2 0x2111 0000210c: JUMPI 0000210d: PUSH1 0x00 0000210f: DUP1 00002110: REVERT 00002111: JUMPDEST 00002112: SWAP3 00002113: POP 00002114: SWAP3 00002115: SWAP1 00002116: POP 00002117: JUMP 00002118: JUMPDEST 00002119: PUSH1 0x00 0000211b: DUP1 0000211c: PUSH1 0x00 0000211e: DUP1 0000211f: PUSH1 0x00 00002121: DUP1 00002122: PUSH1 0x60 00002124: DUP8 00002125: DUP10 00002126: SUB 00002127: SLT 00002128: ISZERO 00002129: PUSH2 0x2131 0000212c: JUMPI 0000212d: PUSH1 0x00 0000212f: DUP1 00002130: REVERT 00002131: JUMPDEST 00002132: DUP7 00002133: CALLDATALOAD 00002134: PUSH8 0xffffffffffffffff 0000213d: DUP1 0000213e: DUP3 0000213f: GT 00002140: ISZERO 00002141: PUSH2 0x2149 00002144: JUMPI 00002145: PUSH1 0x00 00002147: DUP1 00002148: REVERT 00002149: JUMPDEST 0000214a: PUSH2 0x2155 0000214d: DUP11 0000214e: DUP4 0000214f: DUP12 00002150: ADD 00002151: PUSH2 0x20cc 00002154: JUMP 00002155: JUMPDEST 00002156: SWAP1 00002157: SWAP9 00002158: POP 00002159: SWAP7 0000215a: POP 0000215b: PUSH1 0x20 0000215d: DUP10 0000215e: ADD 0000215f: CALLDATALOAD 00002160: SWAP2 00002161: POP 00002162: DUP1 00002163: DUP3 00002164: GT 00002165: ISZERO 00002166: PUSH2 0x216e 00002169: JUMPI 0000216a: PUSH1 0x00 0000216c: DUP1 0000216d: REVERT 0000216e: JUMPDEST 0000216f: PUSH2 0x217a 00002172: DUP11 00002173: DUP4 00002174: DUP12 00002175: ADD 00002176: PUSH2 0x20cc 00002179: JUMP 0000217a: JUMPDEST 0000217b: SWAP1 0000217c: SWAP7 0000217d: POP 0000217e: SWAP5 0000217f: POP 00002180: PUSH1 0x40 00002182: DUP10 00002183: ADD 00002184: CALLDATALOAD 00002185: SWAP2 00002186: POP 00002187: DUP1 00002188: DUP3 00002189: GT 0000218a: ISZERO 0000218b: PUSH2 0x2193 0000218e: JUMPI 0000218f: PUSH1 0x00 00002191: DUP1 00002192: REVERT 00002193: JUMPDEST 00002194: POP 00002195: PUSH2 0x21a0 00002198: DUP10 00002199: DUP3 0000219a: DUP11 0000219b: ADD 0000219c: PUSH2 0x20cc 0000219f: JUMP 000021a0: JUMPDEST 000021a1: SWAP8 000021a2: SWAP11 000021a3: SWAP7 000021a4: SWAP10 000021a5: POP 000021a6: SWAP5 000021a7: SWAP8 000021a8: POP 000021a9: SWAP3 000021aa: SWAP6 000021ab: SWAP4 000021ac: SWAP5 000021ad: SWAP3 000021ae: POP 000021af: POP 000021b0: POP 000021b1: JUMP 000021b2: JUMPDEST 000021b3: PUSH1 0x00 000021b5: DUP1 000021b6: PUSH1 0x40 000021b8: DUP4 000021b9: DUP6 000021ba: SUB 000021bb: SLT 000021bc: ISZERO 000021bd: PUSH2 0x21c5 000021c0: JUMPI 000021c1: PUSH1 0x00 000021c3: DUP1 000021c4: REVERT 000021c5: JUMPDEST 000021c6: POP 000021c7: POP 000021c8: DUP1 000021c9: CALLDATALOAD 000021ca: SWAP3 000021cb: PUSH1 0x20 000021cd: SWAP1 000021ce: SWAP2 000021cf: ADD 000021d0: CALLDATALOAD 000021d1: SWAP2 000021d2: POP 000021d3: JUMP 000021d4: JUMPDEST 000021d5: PUSH1 0x00 000021d7: DUP1 000021d8: PUSH1 0x00 000021da: DUP1 000021db: PUSH1 0x40 000021dd: DUP6 000021de: DUP8 000021df: SUB 000021e0: SLT 000021e1: ISZERO 000021e2: PUSH2 0x21ea 000021e5: JUMPI 000021e6: PUSH1 0x00 000021e8: DUP1 000021e9: REVERT 000021ea: JUMPDEST 000021eb: DUP5 000021ec: CALLDATALOAD 000021ed: PUSH8 0xffffffffffffffff 000021f6: DUP1 000021f7: DUP3 000021f8: GT 000021f9: ISZERO 000021fa: PUSH2 0x2202 000021fd: JUMPI 000021fe: PUSH1 0x00 00002200: DUP1 00002201: REVERT 00002202: JUMPDEST 00002203: PUSH2 0x220e 00002206: DUP9 00002207: DUP4 00002208: DUP10 00002209: ADD 0000220a: PUSH2 0x20cc 0000220d: JUMP 0000220e: JUMPDEST 0000220f: SWAP1 00002210: SWAP7 00002211: POP 00002212: SWAP5 00002213: POP 00002214: PUSH1 0x20 00002216: DUP8 00002217: ADD 00002218: CALLDATALOAD 00002219: SWAP2 0000221a: POP 0000221b: DUP1 0000221c: DUP3 0000221d: GT 0000221e: ISZERO 0000221f: PUSH2 0x2227 00002222: JUMPI 00002223: PUSH1 0x00 00002225: DUP1 00002226: REVERT 00002227: JUMPDEST 00002228: POP 00002229: PUSH2 0x2234 0000222c: DUP8 0000222d: DUP3 0000222e: DUP9 0000222f: ADD 00002230: PUSH2 0x20cc 00002233: JUMP 00002234: JUMPDEST 00002235: SWAP6 00002236: SWAP9 00002237: SWAP5 00002238: SWAP8 00002239: POP 0000223a: SWAP6 0000223b: POP 0000223c: POP 0000223d: POP 0000223e: POP 0000223f: JUMP 00002240: JUMPDEST 00002241: PUSH1 0x20 00002243: DUP1 00002244: DUP3 00002245: MSTORE 00002246: PUSH1 0x2c 00002248: SWAP1 00002249: DUP3 0000224a: ADD 0000224b: MSTORE 0000224c: PUSH32 0x46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820 0000226d: PUSH1 0x40 0000226f: DUP3 00002270: ADD 00002271: MSTORE 00002272: PUSH12 0x19195b1959d85d1958d85b1b 0000227f: PUSH1 0xa2 00002281: SHL 00002282: PUSH1 0x60 00002284: DUP3 00002285: ADD 00002286: MSTORE 00002287: PUSH1 0x80 00002289: ADD 0000228a: SWAP1 0000228b: JUMP 0000228c: JUMPDEST 0000228d: PUSH1 0x20 0000228f: DUP1 00002290: DUP3 00002291: MSTORE 00002292: PUSH1 0x2c 00002294: SWAP1 00002295: DUP3 00002296: ADD 00002297: MSTORE 00002298: PUSH32 0x46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820 000022b9: PUSH1 0x40 000022bb: DUP3 000022bc: ADD 000022bd: MSTORE 000022be: PUSH12 0x6163746976652070726f7879 000022cb: PUSH1 0xa0 000022cd: SHL 000022ce: PUSH1 0x60 000022d0: DUP3 000022d1: ADD 000022d2: MSTORE 000022d3: PUSH1 0x80 000022d5: ADD 000022d6: SWAP1 000022d7: JUMP 000022d8: JUMPDEST 000022d9: PUSH4 0x4e487b71 000022de: PUSH1 0xe0 000022e0: SHL 000022e1: PUSH1 0x00 000022e3: MSTORE 000022e4: PUSH1 0x32 000022e6: PUSH1 0x04 000022e8: MSTORE 000022e9: PUSH1 0x24 000022eb: PUSH1 0x00 000022ed: REVERT 000022ee: JUMPDEST 000022ef: PUSH4 0x4e487b71 000022f4: PUSH1 0xe0 000022f6: SHL 000022f7: PUSH1 0x00 000022f9: MSTORE 000022fa: PUSH1 0x11 000022fc: PUSH1 0x04 000022fe: MSTORE 000022ff: PUSH1 0x24 00002301: PUSH1 0x00 00002303: REVERT 00002304: JUMPDEST 00002305: PUSH1 0x00 00002307: PUSH1 0x00 00002309: NOT 0000230a: DUP3 0000230b: EQ 0000230c: ISZERO 0000230d: PUSH2 0x2318 00002310: JUMPI 00002311: PUSH2 0x2318 00002314: PUSH2 0x22ee 00002317: JUMP 00002318: JUMPDEST 00002319: POP 0000231a: PUSH1 0x01 0000231c: ADD 0000231d: SWAP1 0000231e: JUMP 0000231f: JUMPDEST 00002320: PUSH1 0x00 00002322: PUSH1 0x20 00002324: DUP3 00002325: DUP5 00002326: SUB 00002327: SLT 00002328: ISZERO 00002329: PUSH2 0x2331 0000232c: JUMPI 0000232d: PUSH1 0x00 0000232f: DUP1 00002330: REVERT 00002331: JUMPDEST 00002332: POP 00002333: MLOAD 00002334: SWAP2 00002335: SWAP1 00002336: POP 00002337: JUMP 00002338: JUMPDEST 00002339: PUSH1 0x20 0000233b: DUP1 0000233c: DUP3 0000233d: MSTORE 0000233e: PUSH1 0x2b 00002340: SWAP1 00002341: DUP3 00002342: ADD 00002343: MSTORE 00002344: PUSH32 0x496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069 00002365: PUSH1 0x40 00002367: DUP3 00002368: ADD 00002369: MSTORE 0000236a: PUSH11 0x6e697469616c697a696e67 00002376: PUSH1 0xa8 00002378: SHL 00002379: PUSH1 0x60 0000237b: DUP3 0000237c: ADD 0000237d: MSTORE 0000237e: PUSH1 0x80 00002380: ADD 00002381: SWAP1 00002382: JUMP 00002383: JUMPDEST 00002384: PUSH1 0x00 00002386: JUMPDEST 00002387: DUP4 00002388: DUP2 00002389: LT 0000238a: ISZERO 0000238b: PUSH2 0x239e 0000238e: JUMPI 0000238f: DUP2 00002390: DUP2 00002391: ADD 00002392: MLOAD 00002393: DUP4 00002394: DUP3 00002395: ADD 00002396: MSTORE 00002397: PUSH1 0x20 00002399: ADD 0000239a: PUSH2 0x2386 0000239d: JUMP 0000239e: JUMPDEST 0000239f: DUP4 000023a0: DUP2 000023a1: GT 000023a2: ISZERO 000023a3: PUSH2 0x04b8 000023a6: JUMPI 000023a7: POP 000023a8: POP 000023a9: PUSH1 0x00 000023ab: SWAP2 000023ac: ADD 000023ad: MSTORE 000023ae: JUMP 000023af: JUMPDEST 000023b0: PUSH32 0x416363657373436f6e74726f6c3a206163636f756e7420000000000000000000 000023d1: DUP2 000023d2: MSTORE 000023d3: PUSH1 0x00 000023d5: DUP4 000023d6: MLOAD 000023d7: PUSH2 0x23e7 000023da: DUP2 000023db: PUSH1 0x17 000023dd: DUP6 000023de: ADD 000023df: PUSH1 0x20 000023e1: DUP9 000023e2: ADD 000023e3: PUSH2 0x2383 000023e6: JUMP 000023e7: JUMPDEST 000023e8: PUSH17 0x01034b99036b4b9b9b4b733903937b6329 000023fa: PUSH1 0x7d 000023fc: SHL 000023fd: PUSH1 0x17 000023ff: SWAP2 00002400: DUP5 00002401: ADD 00002402: SWAP2 00002403: DUP3 00002404: ADD 00002405: MSTORE 00002406: DUP4 00002407: MLOAD 00002408: PUSH2 0x2418 0000240b: DUP2 0000240c: PUSH1 0x28 0000240e: DUP5 0000240f: ADD 00002410: PUSH1 0x20 00002412: DUP9 00002413: ADD 00002414: PUSH2 0x2383 00002417: JUMP 00002418: JUMPDEST 00002419: ADD 0000241a: PUSH1 0x28 0000241c: ADD 0000241d: SWAP5 0000241e: SWAP4 0000241f: POP 00002420: POP 00002421: POP 00002422: POP 00002423: JUMP 00002424: JUMPDEST 00002425: PUSH1 0x20 00002427: DUP2 00002428: MSTORE 00002429: PUSH1 0x00 0000242b: DUP3 0000242c: MLOAD 0000242d: DUP1 0000242e: PUSH1 0x20 00002430: DUP5 00002431: ADD 00002432: MSTORE 00002433: PUSH2 0x2443 00002436: DUP2 00002437: PUSH1 0x40 00002439: DUP6 0000243a: ADD 0000243b: PUSH1 0x20 0000243d: DUP8 0000243e: ADD 0000243f: PUSH2 0x2383 00002442: JUMP 00002443: JUMPDEST 00002444: PUSH1 0x1f 00002446: ADD 00002447: PUSH1 0x1f 00002449: NOT 0000244a: AND 0000244b: SWAP2 0000244c: SWAP1 0000244d: SWAP2 0000244e: ADD 0000244f: PUSH1 0x40 00002451: ADD 00002452: SWAP3 00002453: SWAP2 00002454: POP 00002455: POP 00002456: JUMP 00002457: JUMPDEST 00002458: PUSH1 0x00 0000245a: DUP2 0000245b: PUSH1 0x00 0000245d: NOT 0000245e: DIV 0000245f: DUP4 00002460: GT 00002461: DUP3 00002462: ISZERO 00002463: ISZERO 00002464: AND 00002465: ISZERO 00002466: PUSH2 0x2471 00002469: JUMPI 0000246a: PUSH2 0x2471 0000246d: PUSH2 0x22ee 00002470: JUMP 00002471: JUMPDEST 00002472: POP 00002473: MUL 00002474: SWAP1 00002475: JUMP 00002476: JUMPDEST 00002477: PUSH1 0x00 00002479: DUP3 0000247a: NOT 0000247b: DUP3 0000247c: GT 0000247d: ISZERO 0000247e: PUSH2 0x2489 00002481: JUMPI 00002482: PUSH2 0x2489 00002485: PUSH2 0x22ee 00002488: JUMP 00002489: JUMPDEST 0000248a: POP 0000248b: ADD 0000248c: SWAP1 0000248d: JUMP 0000248e: JUMPDEST 0000248f: PUSH1 0x00 00002491: DUP2 00002492: PUSH2 0x249d 00002495: JUMPI 00002496: PUSH2 0x249d 00002499: PUSH2 0x22ee 0000249c: JUMP 0000249d: JUMPDEST 0000249e: POP 0000249f: PUSH1 0x00 000024a1: NOT 000024a2: ADD 000024a3: SWAP1 000024a4: JUMP 000024a5: JUMPDEST 000024a6: PUSH1 0x00 000024a8: PUSH1 0x20 000024aa: DUP3 000024ab: DUP5 000024ac: SUB 000024ad: SLT 000024ae: ISZERO 000024af: PUSH2 0x24b7 000024b2: JUMPI 000024b3: PUSH1 0x00 000024b5: DUP1 000024b6: REVERT 000024b7: JUMPDEST 000024b8: DUP2 000024b9: MLOAD 000024ba: DUP1 000024bb: ISZERO 000024bc: ISZERO 000024bd: DUP2 000024be: EQ 000024bf: PUSH2 0x0b9c 000024c2: JUMPI 000024c3: PUSH1 0x00 000024c5: DUP1 000024c6: REVERT 000024c7: JUMPDEST 000024c8: PUSH1 0x00 000024ca: DUP3 000024cb: DUP3 000024cc: LT 000024cd: ISZERO 000024ce: PUSH2 0x24d9 000024d1: JUMPI 000024d2: PUSH2 0x24d9 000024d5: PUSH2 0x22ee 000024d8: JUMP 000024d9: JUMPDEST 000024da: POP 000024db: SUB 000024dc: SWAP1 000024dd: JUMP 000024de: JUMPDEST 000024df: PUSH4 0x4e487b71 000024e4: PUSH1 0xe0 000024e6: SHL 000024e7: PUSH1 0x00 000024e9: MSTORE 000024ea: PUSH1 0x31 000024ec: PUSH1 0x04 000024ee: MSTORE 000024ef: PUSH1 0x24 000024f1: PUSH1 0x00 000024f3: REVERT 000024f4: JUMPDEST 000024f5: PUSH1 0x00 000024f7: DUP3 000024f8: MLOAD 000024f9: PUSH2 0x2506 000024fc: DUP2 000024fd: DUP5 000024fe: PUSH1 0x20 00002500: DUP8 00002501: ADD 00002502: PUSH2 0x2383 00002505: JUMP 00002506: JUMPDEST 00002507: SWAP2 00002508: SWAP1 00002509: SWAP2 0000250a: ADD 0000250b: SWAP3 0000250c: SWAP2 0000250d: POP 0000250e: POP 0000250f: JUMP 00002510: INVALID 00002511: CALLDATASIZE 00002512: ADDMOD 00002513: SWAP5 00002514: LOG1 00002515: EXTCODESIZE 00002516: LOG1 00002517: LOG3 00002518: UNKNOWN(0x21) 00002519: MOD 0000251a: PUSH8 0xc828492db98dca3e 00002523: KECCAK256 00002524: PUSH23 0xcc3735a920a3ca505d382bbc416464726573733a206c6f 0000253c: PUSH24 0x2d6c6576656c2064656c65676174652063616c6c20666169 00002555: PUSH13 0x65648ec07e268e32cae7f300b4 00002563: SWAP11 00002564: UNKNOWN(0xD3) 00002565: UNKNOWN(0x4F) 00002566: KECCAK256 00002567: LT 00002568: PUSH14 0x088445cb9d9b2d62cbd864638308 00002577: UNKNOWN(0xB2) 00002578: LOG2 00002579: PUSH5 0x6970667358 0000257f: UNKNOWN(0x22) 00002580: SLT 00002581: KECCAK256 00002582: LOG4 00002583: MULMOD 00002584: UNKNOWN(0xBD) 00002585: SWAP15 00002586: SWAP6 00002587: PUSH21 0xda254aba6b9a5d70db75eb61aad8eecdc8c6bd43cd 0000259d: PUSH29
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| critical | upgradeability | detector | Untrusted DELEGATECALL target reachable | 70 | no | no |
viewtrace_id: 0x83ee8d8fabaa643ad2d67d55dc294048d4107ffb800cdf15a7261878e3b67d2d
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0x83ee8d8fabaa643ad2d67d55dc294048d4107ffb800cdf15a7261878e3b67d2d",
"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": "0xa217fddf",
"selector": "0xa217fddf",
"calldata_variants": [
"0xa217fddf",
"0xa217fddf0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xca15c873",
"selector": "0xca15c873",
"calldata_variants": [
"0xca15c873",
"0xca15c8730000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe6930a22",
"selector": "0xe6930a22",
"calldata_variants": [
"0xe6930a22",
"0xe6930a220000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xeb14f53e",
"selector": "0xeb14f53e",
"calldata_variants": [
"0xeb14f53e",
"0xeb14f53e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x715018a6",
"selector": "0x715018a6",
"calldata_variants": [
"0x715018a6",
"0x715018a60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x77f050b0",
"selector": "0x77f050b0",
"calldata_variants": [
"0x77f050b0",
"0x77f050b00000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 7251,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [],
"delegatecall_count": 1,
"untrusted_delegatecall_count": 1
}
|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0xbef2e5d40b9d0a8c4eb6074213418d8daf6efc981d2e9f5326a3a7d69230545b
call_targets:
0x74ae836d6f949118b4e4d0af79924edd0d6fd163
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xbef2e5d40b9d0a8c4eb6074213418d8daf6efc981d2e9f5326a3a7d69230545b",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x74ae836d6f949118b4e4d0af79924edd0d6fd163"
],
"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": "0xa217fddf",
"selector": "0xa217fddf",
"calldata_variants": [
"0xa217fddf",
"0xa217fddf0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xca15c873",
"selector": "0xca15c873",
"calldata_variants": [
"0xca15c873",
"0xca15c8730000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe6930a22",
"selector": "0xe6930a22",
"calldata_variants": [
"0xe6930a22",
"0xe6930a220000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xeb14f53e",
"selector": "0xeb14f53e",
"calldata_variants": [
"0xeb14f53e",
"0xeb14f53e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x715018a6",
"selector": "0x715018a6",
"calldata_variants": [
"0x715018a6",
"0x715018a60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x77f050b0",
"selector": "0x77f050b0",
"calldata_variants": [
"0x77f050b0",
"0x77f050b00000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4752,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5348,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 7530,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 3,
"guards_detected": [],
"untrusted_call_count": 3
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0xbef2e5d40b9d0a8c4eb6074213418d8daf6efc981d2e9f5326a3a7d69230545b
call_targets:
0x74ae836d6f949118b4e4d0af79924edd0d6fd163
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xbef2e5d40b9d0a8c4eb6074213418d8daf6efc981d2e9f5326a3a7d69230545b",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x74ae836d6f949118b4e4d0af79924edd0d6fd163"
],
"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": "0xa217fddf",
"selector": "0xa217fddf",
"calldata_variants": [
"0xa217fddf",
"0xa217fddf0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xca15c873",
"selector": "0xca15c873",
"calldata_variants": [
"0xca15c873",
"0xca15c8730000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe6930a22",
"selector": "0xe6930a22",
"calldata_variants": [
"0xe6930a22",
"0xe6930a220000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xeb14f53e",
"selector": "0xeb14f53e",
"calldata_variants": [
"0xeb14f53e",
"0xeb14f53e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x715018a6",
"selector": "0x715018a6",
"calldata_variants": [
"0x715018a6",
"0x715018a60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x77f050b0",
"selector": "0x77f050b0",
"calldata_variants": [
"0x77f050b0",
"0x77f050b00000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4752,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5348,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 7530,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 3,
"guards_detected": []
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 1
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 8
}
|