f575c00d-7d47-4453-9d78-7ca636dc5e53
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 |
|---|---|---|---|---|
| 30297 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 73966 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 73967 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 73968 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 73969 | capability.graph | complete | 1 / 3 | 1 week ago |
| 73970 | detector.run | complete | 1 / 3 | 1 week ago |
| 73971 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1017446] OpenAI Codex v0.77.0 (research preview)
[codex:1017446] --------
[codex:1017446] workdir: /tmp/codex-multi-prldcs5y
[codex:1017446] model: gpt-5.2-codex
[codex:1017446] provider: openai
[codex:1017446] approval: never
[codex:1017446] sandbox: read-only
[codex:1017446] reasoning effort: xhigh
[codex:1017446] reasoning summaries: auto
[codex:1017446] session id: 019b6525-b16a-7930-b8f8-86a0e5c97ff6
[codex:1017446] --------
[codex:1017446] user
[codex:1017446] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1017446] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1017446] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1017446]
[codex:1017446] Scope rules:
[codex:1017446] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1017446] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1017446]
[codex:1017446] Output MUST be valid JSON matching the provided schema.
[codex:1017446] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1017446] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1017446]
[codex:1017446] Output constraints (IMPORTANT):
[codex:1017446] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1017446] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1017446] mcp startup: no servers
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Planning to review instructions files**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc ls in /tmp/codex-multi-prldcs5y succeeded in 5ms:
[codex:1017446] AUDIT_BUNDLE.txt
[codex:1017446] codex-output-schema.json
[codex:1017446] contracts
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Checking for AGENTS file and reading AUDIT_BUNDLE.txt**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-prldcs5y succeeded in 5ms:
[codex:1017446] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1017446]
[codex:1017446] ================================================================================
[codex:1017446] FILE: contracts/contracts/interfaces/IPlug.sol
[codex:1017446] ================================================================================
[codex:1017446] // SPDX-License-Identifier: GPL-3.0-only
[codex:1017446] pragma solidity 0.8.13;
[codex:1017446]
[codex:1017446] /**
[codex:1017446] * @title IPlug
[codex:1017446] * @notice Interface for a plug contract that executes the message received from a source chain.
[codex:1017446] */
[codex:1017446] interface IPlug {
[codex:1017446] /**
[codex:1017446] * @dev this should be only executable by socket
[codex:1017446] * @notice executes the message received from source chain
[codex:1017446] * @notice It is expected to have original sender checks in the destination plugs using payload
[codex:1017446] * @param srcChainSlug_ chain slug of source
[codex:1017446] * @param payload_ the data which is needed by plug at inbound call on remote
[codex:1017446] */
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Verifying complete AUDIT_BUNDLE content**
[codex:1017446]
[codex:1017446] I’m making sure the entire AUDIT_BUNDLE is fully read despite display truncation, planning to use line-range commands and rg to confirm no parts are missing before analyzing. I'll cross-check by listing files inside the bundle to proceed confidently with the audit.
[codex:1017446] exec
[codex:1017446] /bin/bash -lc 'rg -n "''^FILE:" AUDIT_BUNDLE.txt' in /tmp/codex-multi-prldcs5y succeeded in 6ms:
[codex:1017446] 4:FILE: contracts/contracts/interfaces/IPlug.sol
[codex:1017446] 28:FILE: contracts/contracts/interfaces/ISocket.sol
[codex:1017446] 219:FILE: contracts/contracts/superbridge/ConnectorPlug.sol
[codex:1017446] 345:FILE: contracts/contracts/superbridge/Controller.sol
[codex:1017446] 603:FILE: contracts/contracts/superbridge/ExchangeRate.sol
[codex:1017446] 656:FILE: contracts/contracts/superbridge/Gauge.sol
[codex:1017446] 715:FILE: contracts/contracts/superbridge/MintableToken.sol
[codex:1017446] 745:FILE: contracts/contracts/superbridge/NonMintableToken.sol
[codex:1017446] 764:FILE: contracts/contracts/superbridge/RescueFundsLib.sol
[codex:1017446] 813:FILE: contracts/contracts/superbridge/Vault.sol
[codex:1017446] 1025:FILE: contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol
[codex:1017446] 1112:FILE: contracts/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol
[codex:1017446] 1173:FILE: contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol
[codex:1017446] 1201:FILE: contracts/lib/solmate/src/tokens/ERC20.sol
[codex:1017446] 1411:FILE: contracts/lib/solmate/src/utils/SafeTransferLib.sol
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Extracting contract code sections**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "sed -n '603,740p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-prldcs5y succeeded in 5ms:
[codex:1017446] FILE: contracts/contracts/superbridge/ExchangeRate.sol
[codex:1017446] ================================================================================
[codex:1017446] pragma solidity 0.8.13;
[codex:1017446]
[codex:1017446] import "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol";
[codex:1017446] import {RescueFundsLib} from "./RescueFundsLib.sol";
[codex:1017446]
[codex:1017446] interface IExchangeRate {
[codex:1017446] // not marked pure, may involve state interactions in future
[codex:1017446] function getMintAmount(
[codex:1017446] uint256 lockAmount,
[codex:1017446] uint256 totalLockedAmount
[codex:1017446] ) external returns (uint256 mintAmount);
[codex:1017446]
[codex:1017446] // not marked pure, may involve state interactions in future
[codex:1017446] function getUnlockAmount(
[codex:1017446] uint256 burnAmount,
[codex:1017446] uint256 totalLockedAmount
[codex:1017446] ) external returns (uint256 unlockAmount);
[codex:1017446] }
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Continuing exploration**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "sed -n '740,840p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-prldcs5y succeeded in 5ms:
[codex:1017446] _burn(burner_, amount_);
[codex:1017446] }
[codex:1017446] }
[codex:1017446]
[codex:1017446] ================================================================================
[codex:1017446] FILE: contracts/contracts/superbridge/NonMintableToken.sol
[codex:1017446] ================================================================================
[codex:1017446] pragma solidity 0.8.13;
[codex:1017446]
[codex:1017446] import "lib/solmate/src/tokens/ERC20.sol";
[codex:1017446]
[codex:1017446] contract NonMintableToken is ERC20 {
[codex:1017446] // this is a mock token used in tests, other projects' token to be used here
[codex:1017446] constructor(
[codex:1017446] string memory name_,
[codex:1017446] string memory symbol_,
[codex:1017446] uint8 decimals_,
[codex:1017446] uint256 totalSupply_
[codex:1017446] ) ERC20(name_, symbol_, decimals_) {
[codex:1017446] _mint(msg.sender, totalSupply_);
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Requesting remaining Vault content**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "sed -n '840,980p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-prldcs5y succeeded in 6ms:
[codex:1017446]
[codex:1017446] // connector => lockLimitParams
[codex:1017446] mapping(address => LimitParams) _lockLimitParams;
[codex:1017446]
[codex:1017446] // connector => unlockLimitParams
[codex:1017446] mapping(address => LimitParams) _unlockLimitParams;
[codex:1017446]
[codex:1017446] error ConnectorUnavailable();
[codex:1017446] error ZeroAmount();
[codex:1017446]
[codex:1017446] event LimitParamsUpdated(UpdateLimitParams[] updates);
[codex:1017446] event TokensDeposited(
[codex:1017446] address connector,
[codex:1017446] address depositor,
[codex:1017446] address receiver,
[codex:1017446] uint256 depositAmount
[codex:1017446] );
[codex:1017446] event PendingTokensTransferred(
[codex:1017446] address connector,
[codex:1017446] address receiver,
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Continuing exploration**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "sed -n '980,1045p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-prldcs5y succeeded in 5ms:
[codex:1017446] uint256 msgGasLimit_
[codex:1017446] ) external view returns (uint256 totalFees) {
[codex:1017446] return IConnector(connector_).getMinFees(msgGasLimit_);
[codex:1017446] }
[codex:1017446]
[codex:1017446] function getCurrentLockLimit(
[codex:1017446] address connector_
[codex:1017446] ) external view returns (uint256) {
[codex:1017446] return _getCurrentLimit(_lockLimitParams[connector_]);
[codex:1017446] }
[codex:1017446]
[codex:1017446] function getCurrentUnlockLimit(
[codex:1017446] address connector_
[codex:1017446] ) external view returns (uint256) {
[codex:1017446] return _getCurrentLimit(_unlockLimitParams[connector_]);
[codex:1017446] }
[codex:1017446]
[codex:1017446] function getLockLimitParams(
[codex:1017446] address connector_
[codex:1017446] ) external view returns (LimitParams memory) {
[codex:1017446]
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Analyzing contract interaction vulnerabilities**
[codex:1017446] thinking
[codex:1017446] **Examining array length consistency and accounting logic**
[codex:1017446]
[codex:1017446] I'm reviewing array length checks to confirm no out-of-bounds access and scrutinizing the accounting between locked amounts, minted totals, and exchange rate calculations to spot any inconsistencies or potential double-mint scenarios. I'm also considering how external calls and owner-controlled parameters might affect behavior but see owner control limits some risks.
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "sed -n '345,603p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-prldcs5y succeeded in 6ms:
[codex:1017446] FILE: contracts/contracts/superbridge/Controller.sol
[codex:1017446] ================================================================================
[codex:1017446] pragma solidity 0.8.13;
[codex:1017446]
[codex:1017446] import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1017446] import "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol";
[codex:1017446] import {IExchangeRate} from "./ExchangeRate.sol";
[codex:1017446] import {Gauge} from "./Gauge.sol";
[codex:1017446] import {IConnector, IHub} from "./ConnectorPlug.sol";
[codex:1017446] import {IMintableERC20} from "./MintableToken.sol";
[codex:1017446] import {RescueFundsLib} from "./RescueFundsLib.sol";
[codex:1017446]
[codex:1017446] contract Controller is IHub, Gauge, Ownable2Step {
[codex:1017446] using SafeTransferLib for IMintableERC20;
[codex:1017446] IMintableERC20 public immutable token__;
[codex:1017446] IExchangeRate public exchangeRate__;
[codex:1017446]
[codex:1017446] struct UpdateLimitParams {
[codex:1017446] bool isMint;
[codex:1017446] address connector;
[codex:1017446]
[codex:1017446]
[codex:1017446] Reconnecting... 1/5
[codex:1017446]
[codex:1017446] Reconnecting... 2/5
[codex:1017446]
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Analyzing potential vulnerabilities and architectural risks**
[codex:1017446]
[codex:1017446] I’m carefully examining the contract set for possible security issues, focusing on access control gaps, reentrancy risks, unchecked returns, and validation problems. I’m noting that the MintableToken’s open mint/burn is risky if used beyond testing, potential replay attacks in cross-chain message handling due to missing deduplication, and subtle reentrancy concerns around token burns in Controller.withdrawFromAppChain. I’m also considering oracle manipulation, improper validation of connectors, and bridging token transfer quirks that might cause under-collateralization in certain token types. Overall, I’m identifying several medium- to high-severity flags mainly tied to design assumptions and reliance on correct external contract behavior.
[codex:1017446] thinking
[codex:1017446] **Highlighting bridging accounting and access control concerns**
[codex:1017446]
[codex:1017446] I’m focusing on two main issues: first, the deposit mechanism trusts the nominal token amount without verifying actual transferred tokens, risking over-minting with fee-on-transfer tokens; second, the MintableToken contract’s unrestricted minting presents a critical risk if deployed beyond tests, potentially allowing drain of locked funds. I’m also considering minor concerns like message source validation in ConnectorPlug and subtle rate-limit nuances, aiming to provide clear, evidence-backed findings focused on accounting integrity and access control.
[codex:1017446] exec
[codex:1017446] /bin/bash -lc 'nl -ba contracts/contracts/superbridge/MintableToken.sol' in /tmp/codex-multi-prldcs5y succeeded in 7ms:
[codex:1017446] 1 pragma solidity 0.8.13;
[codex:1017446] 2
[codex:1017446] 3 import "lib/solmate/src/tokens/ERC20.sol";
[codex:1017446] 4
[codex:1017446] 5 abstract contract IMintableERC20 is ERC20 {
[codex:1017446] 6 function mint(address receiver_, uint256 amount_) external virtual;
[codex:1017446] 7
[codex:1017446] 8 function burn(address burner_, uint256 amount_) external virtual;
[codex:1017446] 9 }
[codex:1017446] 10
[codex:1017446] 11 // this is a mock token used in tests, other projects' token to be used here
[codex:1017446] 12 contract MintableToken is IMintableERC20 {
[codex:1017446] 13 constructor(
[codex:1017446] 14 string memory name_,
[codex:1017446] 15 string memory symbol_,
[codex:1017446] 16 uint8 decimals_
[codex:1017446] 17 ) ERC20(name_, symbol_, decimals_) {}
[codex:1017446] 18
[codex:1017446] 19 function mint(address receiver_, uint256 amount_) external override {
[codex:1017446] 20 _mint(receiver_, amount_);
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Preparing to reference lines in Vault.depositToAppChain**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "nl -ba contracts/contracts/superbridge/Vault.sol | sed -n '40,160p'" in /tmp/codex-multi-prldcs5y succeeded in 6ms:
[codex:1017446] 40 address receiver,
[codex:1017446] 41 uint256 depositAmount
[codex:1017446] 42 );
[codex:1017446] 43 event PendingTokensTransferred(
[codex:1017446] 44 address connector,
[codex:1017446] 45 address receiver,
[codex:1017446] 46 uint256 unlockedAmount,
[codex:1017446] 47 uint256 pendingAmount
[codex:1017446] 48 );
[codex:1017446] 49 event TokensPending(
[codex:1017446] 50 address connector,
[codex:1017446] 51 address receiver,
[codex:1017446] 52 uint256 pendingAmount,
[codex:1017446] 53 uint256 totalPendingAmount
[codex:1017446] 54 );
[codex:1017446] 55 event TokensUnlocked(
[codex:1017446] 56 address connector,
[codex:1017446] 57 address receiver,
[codex:1017446] 58 uint256 unlockedAmount
[codex:1017446] 59 );
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Analyzing smart contract security issues**
[codex:1017446]
[codex:1017446] I'll examine key functions around deposit, withdrawal, and minting to identify vulnerabilities, focusing on how token amounts are handled versus actual transfers, access controls—or lack thereof—in MintableToken, and potential authorization gaps in message handling, aiming to build clear findings with severity, evidence, and exploit scenarios.
[codex:1017446] exec
[codex:1017446] /bin/bash -lc "nl -ba contracts/contracts/superbridge/Controller.sol | sed -n '100,200p'" in /tmp/codex-multi-prldcs5y succeeded in 6ms:
[codex:1017446] 100 .ratePerSecond = updates_[i].ratePerSecond;
[codex:1017446] 101 } else {
[codex:1017446] 102 _consumePartLimit(0, _burnLimitParams[updates_[i].connector]); // to keep current limit in sync
[codex:1017446] 103 _burnLimitParams[updates_[i].connector].maxLimit = updates_[i]
[codex:1017446] 104 .maxLimit;
[codex:1017446] 105 _burnLimitParams[updates_[i].connector]
[codex:1017446] 106 .ratePerSecond = updates_[i].ratePerSecond;
[codex:1017446] 107 }
[codex:1017446] 108 }
[codex:1017446] 109
[codex:1017446] 110 emit LimitParamsUpdated(updates_);
[codex:1017446] 111 }
[codex:1017446] 112
[codex:1017446] 113 // do we throttle burn amount or unlock amount? burn for now
[codex:1017446] 114 function withdrawFromAppChain(
[codex:1017446] 115 address receiver_,
[codex:1017446] 116 uint256 burnAmount_,
[codex:1017446] 117 uint256 msgGasLimit_,
[codex:1017446] 118 address connector_
[codex:1017446] 119 ) external payable {
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Reviewing potential vulnerabilities and line references**
[codex:1017446] exec
[codex:1017446] /bin/bash -lc 'nl -ba contracts/contracts/superbridge/ConnectorPlug.sol' in /tmp/codex-multi-prldcs5y succeeded in 6ms:
[codex:1017446] 1 pragma solidity 0.8.13;
[codex:1017446] 2
[codex:1017446] 3 import "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol";
[codex:1017446] 4 import {ISocket} from "../interfaces/ISocket.sol";
[codex:1017446] 5 import {IPlug} from "../interfaces/IPlug.sol";
[codex:1017446] 6 import {RescueFundsLib} from "./RescueFundsLib.sol";
[codex:1017446] 7
[codex:1017446] 8 interface IHub {
[codex:1017446] 9 function receiveInbound(bytes memory payload_) external;
[codex:1017446] 10 }
[codex:1017446] 11
[codex:1017446] 12 interface IConnector {
[codex:1017446] 13 function outbound(
[codex:1017446] 14 uint256 msgGasLimit_,
[codex:1017446] 15 bytes memory payload_
[codex:1017446] 16 ) external payable;
[codex:1017446] 17
[codex:1017446] 18 function siblingChainSlug() external view returns (uint32);
[codex:1017446] 19
[codex:1017446] 20 function getMinFees(
[codex:1017446]
[codex:1017446] thinking
[codex:1017446] **Analyzing potential vulnerabilities and summarizing findings**
[codex:1017446]
[codex:1017446] I’m reviewing various contracts for vulnerabilities related to signature validation, access control, reentrancy, and exchange rate manipulations. I identified two main issues: unrestricted mint/burn functions in MintableToken allowing collateral drain if misused, and accounting mismatches with fee-on-transfer tokens that can break collateral integrity during deposits. I’m compiling detailed findings with severity, impact, recommendations, evidence, and file locations, making sure the final JSON output is valid and comprehensive.
[codex:1017446] codex
[codex:1017446] {"no_findings":false,"summary":"Found 2 issues: unrestricted mint/burn in MintableToken and collateral accounting mismatch for fee-on-transfer tokens in the deposit/mint flow.","findings":[{"severity":"high","category":"access_control","title":"MintableToken allows unrestricted mint/burn, enabling collateral drain if used as the app-chain token","exploit_scenario":"If the system is deployed using MintableToken as the bridge-minted asset, any attacker can call mint() to create arbitrary tokens, then call Controller.withdrawFromAppChain() to burn those tokens and unlock real assets from the Vault on the other chain, draining collateral without providing any locked backing.","recommendation":"Restrict mint/burn to the Controller (or a dedicated minter role) and ensure MintableToken is never deployed in production. Prefer a mintable token with explicit access control and an allowlisted minter.","evidence":"MintableToken.mint() and MintableToken.burn() are external and lack any access control modifiers.","locations":["contracts/contracts/superbridge/MintableToken.sol:19","contracts/contracts/superbridge/MintableToken.sol:23"]},{"severity":"medium","category":"math","title":"Deposit path assumes full transfer amount; fee-on-transfer tokens cause under-collateralized minting","exploit_scenario":"With a fee-on-transfer or deflationary token, Vault.depositToAppChain() forwards the user-supplied amount_ in the payload even if the Vault receives fewer tokens. The Controller mints based on this reported lockAmount, allowing an attacker to mint more on the app chain than was actually locked and later redeem the full amount, extracting value from the Vault.","recommendation":"Compute the actual received amount via balance-before/balance-after and send that amount in the payload. Alternatively, explicitly reject fee-on-transfer tokens and enforce that the Vault’s balance increases by amount_.","evidence":"Vault.depositToAppChain() transfers amount_ and forwards amount_ in the outbound payload without checking the actual received amount; Controller.receiveInbound() trusts lockAmount from the payload for accounting and minting.","locations":["contracts/contracts/superbridge/Vault.sol:87","contracts/contracts/superbridge/Vault.sol:100","contracts/contracts/superbridge/Vault.sol:102","contracts/contracts/superbridge/Controller.sol:175","contracts/contracts/superbridge/Controller.sol:181"]}]}
[codex:1017446] tokens used
[codex:1017446] 39,694
[codex:1017446] {"no_findings":false,"summary":"Found 2 issues: unrestricted mint/burn in MintableToken and collateral accounting mismatch for fee-on-transfer tokens in the deposit/mint flow.","findings":[{"severity":"high","category":"access_control","title":"MintableToken allows unrestricted mint/burn, enabling collateral drain if used as the app-chain token","exploit_scenario":"If the system is deployed using MintableToken as the bridge-minted asset, any attacker can call mint() to create arbitrary tokens, then call Controller.withdrawFromAppChain() to burn those tokens and unlock real assets from the Vault on the other chain, draining collateral without providing any locked backing.","recommendation":"Restrict mint/burn to the Controller (or a dedicated minter role) and ensure MintableToken is never deployed in production. Prefer a mintable token with explicit access control and an allowlisted minter.","evidence":"MintableToken.mint() and MintableToken.burn() are external and lack any access control modifiers.","locations":["contracts/contracts/superbridge/MintableToken.sol:19","contracts/contracts/superbridge/MintableToken.sol:23"]},{"severity":"medium","category":"math","title":"Deposit path assumes full transfer amount; fee-on-transfer tokens cause under-collateralized minting","exploit_scenario":"With a fee-on-transfer or deflationary token, Vault.depositToAppChain() forwards the user-supplied amount_ in the payload even if the Vault receives fewer tokens. The Controller mints based on this reported lockAmount, allowing an attacker to mint more on the app chain than was actually locked and later redeem the full amount, extracting value from the Vault.","recommendation":"Compute the actual received amount via balance-before/balance-after and send that amount in the payload. Alternatively, explicitly reject fee-on-transfer tokens and enforce that the Vault’s balance increases by amount_.","evidence":"Vault.depositToAppChain() transfers amount_ and forwards amount_ in the outbound payload without checking the actual received amount; Controller.receiveInbound() trusts lockAmount from the payload for accounting and minting.","locations":["contracts/contracts/superbridge/Vault.sol:87","contracts/contracts/superbridge/Vault.sol:100","contracts/contracts/superbridge/Vault.sol:102","contracts/contracts/superbridge/Controller.sol:175","contracts/contracts/superbridge/Controller.sol:181"]}]}
{
"codex": {
"ran_at": "2025-12-28T13:38:38.540098+00:00",
"returncode": 0
},
"summary": "Found 2 issues: unrestricted mint/burn in MintableToken and collateral accounting mismatch for fee-on-transfer tokens in the deposit/mint flow.",
"raw_final": {
"summary": "Found 2 issues: unrestricted mint/burn in MintableToken and collateral accounting mismatch for fee-on-transfer tokens in the deposit/mint flow.",
"findings": [
{
"title": "MintableToken allows unrestricted mint/burn, enabling collateral drain if used as the app-chain token",
"category": "access_control",
"evidence": "MintableToken.mint() and MintableToken.burn() are external and lack any access control modifiers.",
"severity": "high",
"locations": [
"contracts/contracts/superbridge/MintableToken.sol:19",
"contracts/contracts/superbridge/MintableToken.sol:23"
],
"recommendation": "Restrict mint/burn to the Controller (or a dedicated minter role) and ensure MintableToken is never deployed in production. Prefer a mintable token with explicit access control and an allowlisted minter.",
"exploit_scenario": "If the system is deployed using MintableToken as the bridge-minted asset, any attacker can call mint() to create arbitrary tokens, then call Controller.withdrawFromAppChain() to burn those tokens and unlock real assets from the Vault on the other chain, draining collateral without providing any locked backing."
},
{
"title": "Deposit path assumes full transfer amount; fee-on-transfer tokens cause under-collateralized minting",
"category": "math",
"evidence": "Vault.depositToAppChain() transfers amount_ and forwards amount_ in the outbound payload without checking the actual received amount; Controller.receiveInbound() trusts lockAmount from the payload for accounting and minting.",
"severity": "medium",
"locations": [
"contracts/contracts/superbridge/Vault.sol:87",
"contracts/contracts/superbridge/Vault.sol:100",
"contracts/contracts/superbridge/Vault.sol:102",
"contracts/contracts/superbridge/Controller.sol:175",
"contracts/contracts/superbridge/Controller.sol:181"
],
"recommendation": "Compute the actual received amount via balance-before/balance-after and send that amount in the payload. Alternatively, explicitly reject fee-on-transfer tokens and enforce that the Vault\u2019s balance increases by amount_.",
"exploit_scenario": "With a fee-on-transfer or deflationary token, Vault.depositToAppChain() forwards the user-supplied amount_ in the payload even if the Vault receives fewer tokens. The Controller mints based on this reported lockAmount, allowing an attacker to mint more on the app chain than was actually locked and later redeem the full amount, extracting value from the Vault."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x0129 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x79ba5097 00000019: GT 0000001a: PUSH2 0x00a5 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0x8da5cb5b 00000024: GT 00000025: PUSH2 0x0074 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xe30c3978 0000002f: GT 00000030: PUSH2 0x0059 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xe30c3978 0000003a: EQ 0000003b: PUSH2 0x039c 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xf2b7c5cd 00000045: EQ 00000046: PUSH2 0x03c7 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf2fde38b 00000050: EQ 00000051: PUSH2 0x03e7 00000054: JUMPI 00000055: PUSH1 0x00 00000057: DUP1 00000058: REVERT 00000059: JUMPDEST 0000005a: DUP1 0000005b: PUSH4 0x8da5cb5b 00000060: EQ 00000061: PUSH2 0x0351 00000064: JUMPI 00000065: DUP1 00000066: PUSH4 0x9b4cd940 0000006b: EQ 0000006c: PUSH2 0x037c 0000006f: JUMPI 00000070: PUSH1 0x00 00000072: DUP1 00000073: REVERT 00000074: JUMPDEST 00000075: DUP1 00000076: PUSH4 0x79ba5097 0000007b: EQ 0000007c: PUSH2 0x02e9 0000007f: JUMPI 00000080: DUP1 00000081: PUSH4 0x8367080f 00000086: EQ 00000087: PUSH2 0x02fe 0000008a: JUMPI 0000008b: DUP1 0000008c: PUSH4 0x84f289cc 00000091: EQ 00000092: PUSH2 0x031e 00000095: JUMPI 00000096: DUP1 00000097: PUSH4 0x864f6a7a 0000009c: EQ 0000009d: PUSH2 0x033e 000000a0: JUMPI 000000a1: PUSH1 0x00 000000a3: DUP1 000000a4: REVERT 000000a5: JUMPDEST 000000a6: DUP1 000000a7: PUSH4 0x4603f9f4 000000ac: GT 000000ad: PUSH2 0x00fc 000000b0: JUMPI 000000b1: DUP1 000000b2: PUSH4 0x6ccae054 000000b7: GT 000000b8: PUSH2 0x00e1 000000bb: JUMPI 000000bc: DUP1 000000bd: PUSH4 0x6ccae054 000000c2: EQ 000000c3: PUSH2 0x0261 000000c6: JUMPI 000000c7: DUP1 000000c8: PUSH4 0x715018a6 000000cd: EQ 000000ce: PUSH2 0x0281 000000d1: JUMPI 000000d2: DUP1 000000d3: PUSH4 0x755e1e24 000000d8: EQ 000000d9: PUSH2 0x0296 000000dc: JUMPI 000000dd: PUSH1 0x00 000000df: DUP1 000000e0: REVERT 000000e1: JUMPDEST 000000e2: DUP1 000000e3: PUSH4 0x4603f9f4 000000e8: EQ 000000e9: PUSH2 0x01e8 000000ec: JUMPI 000000ed: DUP1 000000ee: PUSH4 0x49eec51e 000000f3: EQ 000000f4: PUSH2 0x0208 000000f7: JUMPI 000000f8: PUSH1 0x00 000000fa: DUP1 000000fb: REVERT 000000fc: JUMPDEST 000000fd: DUP1 000000fe: PUSH4 0x10c56ed9 00000103: EQ 00000104: PUSH2 0x012e 00000107: JUMPI 00000108: DUP1 00000109: PUSH4 0x186669e8 0000010e: EQ 0000010f: PUSH2 0x0150 00000112: JUMPI 00000113: DUP1 00000114: PUSH4 0x2bc9c08a 00000119: EQ 0000011a: PUSH2 0x019b 0000011d: JUMPI 0000011e: DUP1 0000011f: PUSH4 0x2fef4a8b 00000124: EQ 00000125: PUSH2 0x01bb 00000128: JUMPI 00000129: JUMPDEST 0000012a: PUSH1 0x00 0000012c: DUP1 0000012d: REVERT 0000012e: JUMPDEST 0000012f: CALLVALUE 00000130: DUP1 00000131: ISZERO 00000132: PUSH2 0x013a 00000135: JUMPI 00000136: PUSH1 0x00 00000138: DUP1 00000139: REVERT 0000013a: JUMPDEST 0000013b: POP 0000013c: PUSH2 0x014e 0000013f: PUSH2 0x0149 00000142: CALLDATASIZE 00000143: PUSH1 0x04 00000145: PUSH2 0x1619 00000148: JUMP 00000149: JUMPDEST 0000014a: PUSH2 0x0407 0000014d: JUMP 0000014e: JUMPDEST 0000014f: STOP 00000150: JUMPDEST 00000151: CALLVALUE 00000152: DUP1 00000153: ISZERO 00000154: PUSH2 0x015c 00000157: JUMPI 00000158: PUSH1 0x00 0000015a: DUP1 0000015b: REVERT 0000015c: JUMPDEST 0000015d: POP 0000015e: PUSH2 0x0188 00000161: PUSH2 0x016b 00000164: CALLDATASIZE 00000165: PUSH1 0x04 00000167: PUSH2 0x170a 0000016a: JUMP 0000016b: JUMPDEST 0000016c: PUSH1 0x02 0000016e: PUSH1 0x20 00000170: SWAP1 00000171: DUP2 00000172: MSTORE 00000173: PUSH1 0x00 00000175: SWAP3 00000176: DUP4 00000177: MSTORE 00000178: PUSH1 0x40 0000017a: DUP1 0000017b: DUP5 0000017c: KECCAK256 0000017d: SWAP1 0000017e: SWAP2 0000017f: MSTORE 00000180: SWAP1 00000181: DUP3 00000182: MSTORE 00000183: SWAP1 00000184: KECCAK256 00000185: SLOAD 00000186: DUP2 00000187: JUMP 00000188: JUMPDEST 00000189: PUSH1 0x40 0000018b: MLOAD 0000018c: SWAP1 0000018d: DUP2 0000018e: MSTORE 0000018f: PUSH1 0x20 00000191: ADD 00000192: JUMPDEST 00000193: PUSH1 0x40 00000195: MLOAD 00000196: DUP1 00000197: SWAP2 00000198: SUB 00000199: SWAP1 0000019a: RETURN 0000019b: JUMPDEST 0000019c: CALLVALUE 0000019d: DUP1 0000019e: ISZERO 0000019f: PUSH2 0x01a7 000001a2: JUMPI 000001a3: PUSH1 0x00 000001a5: DUP1 000001a6: REVERT 000001a7: JUMPDEST 000001a8: POP 000001a9: PUSH2 0x014e 000001ac: PUSH2 0x01b6 000001af: CALLDATASIZE 000001b0: PUSH1 0x04 000001b2: PUSH2 0x1743 000001b5: JUMP 000001b6: JUMPDEST 000001b7: PUSH2 0x0616 000001ba: JUMP 000001bb: JUMPDEST 000001bc: CALLVALUE 000001bd: DUP1 000001be: ISZERO 000001bf: PUSH2 0x01c7 000001c2: JUMPI 000001c3: PUSH1 0x00 000001c5: DUP1 000001c6: REVERT 000001c7: JUMPDEST 000001c8: POP 000001c9: PUSH2 0x0188 000001cc: PUSH2 0x01d6 000001cf: CALLDATASIZE 000001d0: PUSH1 0x04 000001d2: PUSH2 0x17b8 000001d5: JUMP 000001d6: JUMPDEST 000001d7: PUSH1 0x03 000001d9: PUSH1 0x20 000001db: MSTORE 000001dc: PUSH1 0x00 000001de: SWAP1 000001df: DUP2 000001e0: MSTORE 000001e1: PUSH1 0x40 000001e3: SWAP1 000001e4: KECCAK256 000001e5: SLOAD 000001e6: DUP2 000001e7: JUMP 000001e8: JUMPDEST 000001e9: CALLVALUE 000001ea: DUP1 000001eb: ISZERO 000001ec: PUSH2 0x01f4 000001ef: JUMPI 000001f0: PUSH1 0x00 000001f2: DUP1 000001f3: REVERT 000001f4: JUMPDEST 000001f5: POP 000001f6: PUSH2 0x0188 000001f9: PUSH2 0x0203 000001fc: CALLDATASIZE 000001fd: PUSH1 0x04 000001ff: PUSH2 0x17b8 00000202: JUMP 00000203: JUMPDEST 00000204: PUSH2 0x090d 00000207: JUMP 00000208: JUMPDEST 00000209: CALLVALUE 0000020a: DUP1 0000020b: ISZERO 0000020c: PUSH2 0x0214 0000020f: JUMPI 00000210: PUSH1 0x00 00000212: DUP1 00000213: REVERT 00000214: JUMPDEST 00000215: POP 00000216: PUSH2 0x023c 00000219: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 0000023a: DUP2 0000023b: JUMP 0000023c: JUMPDEST 0000023d: PUSH1 0x40 0000023f: MLOAD 00000240: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000255: SWAP1 00000256: SWAP2 00000257: AND 00000258: DUP2 00000259: MSTORE 0000025a: PUSH1 0x20 0000025c: ADD 0000025d: PUSH2 0x0192 00000260: JUMP 00000261: JUMPDEST 00000262: CALLVALUE 00000263: DUP1 00000264: ISZERO 00000265: PUSH2 0x026d 00000268: JUMPI 00000269: PUSH1 0x00 0000026b: DUP1 0000026c: REVERT 0000026d: JUMPDEST 0000026e: POP 0000026f: PUSH2 0x014e 00000272: PUSH2 0x027c 00000275: CALLDATASIZE 00000276: PUSH1 0x04 00000278: PUSH2 0x17d5 0000027b: JUMP 0000027c: JUMPDEST 0000027d: PUSH2 0x0941 00000280: JUMP 00000281: JUMPDEST 00000282: CALLVALUE 00000283: DUP1 00000284: ISZERO 00000285: PUSH2 0x028d 00000288: JUMPI 00000289: PUSH1 0x00 0000028b: DUP1 0000028c: REVERT 0000028d: JUMPDEST 0000028e: POP 0000028f: PUSH2 0x014e 00000292: PUSH2 0x0959 00000295: JUMP 00000296: JUMPDEST 00000297: CALLVALUE 00000298: DUP1 00000299: ISZERO 0000029a: PUSH2 0x02a2 0000029d: JUMPI 0000029e: PUSH1 0x00 000002a0: DUP1 000002a1: REVERT 000002a2: JUMPDEST 000002a3: POP 000002a4: PUSH2 0x02b6 000002a7: PUSH2 0x02b1 000002aa: CALLDATASIZE 000002ab: PUSH1 0x04 000002ad: PUSH2 0x17b8 000002b0: JUMP 000002b1: JUMPDEST 000002b2: PUSH2 0x096d 000002b5: JUMP 000002b6: JUMPDEST 000002b7: PUSH1 0x40 000002b9: MLOAD 000002ba: PUSH2 0x0192 000002bd: SWAP2 000002be: SWAP1 000002bf: DUP2 000002c0: MLOAD 000002c1: DUP2 000002c2: MSTORE 000002c3: PUSH1 0x20 000002c5: DUP1 000002c6: DUP4 000002c7: ADD 000002c8: MLOAD 000002c9: SWAP1 000002ca: DUP3 000002cb: ADD 000002cc: MSTORE 000002cd: PUSH1 0x40 000002cf: DUP1 000002d0: DUP4 000002d1: ADD 000002d2: MLOAD 000002d3: SWAP1 000002d4: DUP3 000002d5: ADD 000002d6: MSTORE 000002d7: PUSH1 0x60 000002d9: SWAP2 000002da: DUP3 000002db: ADD 000002dc: MLOAD 000002dd: SWAP2 000002de: DUP2 000002df: ADD 000002e0: SWAP2 000002e1: SWAP1 000002e2: SWAP2 000002e3: MSTORE 000002e4: PUSH1 0x80 000002e6: ADD 000002e7: SWAP1 000002e8: JUMP 000002e9: JUMPDEST 000002ea: CALLVALUE 000002eb: DUP1 000002ec: ISZERO 000002ed: PUSH2 0x02f5 000002f0: JUMPI 000002f1: PUSH1 0x00 000002f3: DUP1 000002f4: REVERT 000002f5: JUMPDEST 000002f6: POP 000002f7: PUSH2 0x014e 000002fa: PUSH2 0x09f3 000002fd: JUMP 000002fe: JUMPDEST 000002ff: CALLVALUE 00000300: DUP1 00000301: ISZERO 00000302: PUSH2 0x030a 00000305: JUMPI 00000306: PUSH1 0x00 00000308: DUP1 00000309: REVERT 0000030a: JUMPDEST 0000030b: POP 0000030c: PUSH2 0x0188 0000030f: PUSH2 0x0319 00000312: CALLDATASIZE 00000313: PUSH1 0x04 00000315: PUSH2 0x1816 00000318: JUMP 00000319: JUMPDEST 0000031a: PUSH2 0x0aad 0000031d: JUMP 0000031e: JUMPDEST 0000031f: CALLVALUE 00000320: DUP1 00000321: ISZERO 00000322: PUSH2 0x032a 00000325: JUMPI 00000326: PUSH1 0x00 00000328: DUP1 00000329: REVERT 0000032a: JUMPDEST 0000032b: POP 0000032c: PUSH2 0x0188 0000032f: PUSH2 0x0339 00000332: CALLDATASIZE 00000333: PUSH1 0x04 00000335: PUSH2 0x17b8 00000338: JUMP 00000339: JUMPDEST 0000033a: PUSH2 0x0b46 0000033d: JUMP 0000033e: JUMPDEST 0000033f: PUSH2 0x014e 00000342: PUSH2 0x034c 00000345: CALLDATASIZE 00000346: PUSH1 0x04 00000348: PUSH2 0x1842 0000034b: JUMP 0000034c: JUMPDEST 0000034d: PUSH2 0x0b74 00000350: JUMP 00000351: JUMPDEST 00000352: CALLVALUE 00000353: DUP1 00000354: ISZERO 00000355: PUSH2 0x035d 00000358: JUMPI 00000359: PUSH1 0x00 0000035b: DUP1 0000035c: REVERT 0000035d: JUMPDEST 0000035e: POP 0000035f: PUSH1 0x00 00000361: SLOAD 00000362: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000377: AND 00000378: PUSH2 0x023c 0000037b: JUMP 0000037c: JUMPDEST 0000037d: CALLVALUE 0000037e: DUP1 0000037f: ISZERO 00000380: PUSH2 0x0388 00000383: JUMPI 00000384: PUSH1 0x00 00000386: DUP1 00000387: REVERT 00000388: JUMPDEST 00000389: POP 0000038a: PUSH2 0x02b6 0000038d: PUSH2 0x0397 00000390: CALLDATASIZE 00000391: PUSH1 0x04 00000393: PUSH2 0x17b8 00000396: JUMP 00000397: JUMPDEST 00000398: PUSH2 0x0d9f 0000039b: JUMP 0000039c: JUMPDEST 0000039d: CALLVALUE 0000039e: DUP1 0000039f: ISZERO 000003a0: PUSH2 0x03a8 000003a3: JUMPI 000003a4: PUSH1 0x00 000003a6: DUP1 000003a7: REVERT 000003a8: JUMPDEST 000003a9: POP 000003aa: PUSH1 0x01 000003ac: SLOAD 000003ad: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003c2: AND 000003c3: PUSH2 0x023c 000003c6: JUMP 000003c7: JUMPDEST 000003c8: CALLVALUE 000003c9: DUP1 000003ca: ISZERO 000003cb: PUSH2 0x03d3 000003ce: JUMPI 000003cf: PUSH1 0x00 000003d1: DUP1 000003d2: REVERT 000003d3: JUMPDEST 000003d4: POP 000003d5: PUSH2 0x014e 000003d8: PUSH2 0x03e2 000003db: CALLDATASIZE 000003dc: PUSH1 0x04 000003de: PUSH2 0x170a 000003e1: JUMP 000003e2: JUMPDEST 000003e3: PUSH2 0x0e25 000003e6: JUMP 000003e7: JUMPDEST 000003e8: CALLVALUE 000003e9: DUP1 000003ea: ISZERO 000003eb: PUSH2 0x03f3 000003ee: JUMPI 000003ef: PUSH1 0x00 000003f1: DUP1 000003f2: REVERT 000003f3: JUMPDEST 000003f4: POP 000003f5: PUSH2 0x014e 000003f8: PUSH2 0x0402 000003fb: CALLDATASIZE 000003fc: PUSH1 0x04 000003fe: PUSH2 0x17b8 00000401: JUMP 00000402: JUMPDEST 00000403: PUSH2 0x0fcf 00000406: JUMP 00000407: JUMPDEST 00000408: CALLER 00000409: PUSH1 0x00 0000040b: SWAP1 0000040c: DUP2 0000040d: MSTORE 0000040e: PUSH1 0x05 00000410: PUSH1 0x20 00000412: MSTORE 00000413: PUSH1 0x40 00000415: DUP2 00000416: KECCAK256 00000417: PUSH1 0x02 00000419: ADD 0000041a: SLOAD 0000041b: SWAP1 0000041c: SUB 0000041d: PUSH2 0x0452 00000420: JUMPI 00000421: PUSH1 0x40 00000423: MLOAD 00000424: PUSH32 0xb1efb84a00000000000000000000000000000000000000000000000000000000 00000445: DUP2 00000446: MSTORE 00000447: PUSH1 0x04 00000449: ADD 0000044a: PUSH1 0x40 0000044c: MLOAD 0000044d: DUP1 0000044e: SWAP2 0000044f: SUB 00000450: SWAP1 00000451: REVERT 00000452: JUMPDEST 00000453: PUSH1 0x00 00000455: DUP1 00000456: DUP3 00000457: DUP1 00000458: PUSH1 0x20 0000045a: ADD 0000045b: SWAP1 0000045c: MLOAD 0000045d: DUP2 0000045e: ADD 0000045f: SWAP1 00000460: PUSH2 0x0469 00000463: SWAP2 00000464: SWAP1 00000465: PUSH2 0x188c 00000468: JUMP 00000469: JUMPDEST 0000046a: CALLER 0000046b: PUSH1 0x00 0000046d: SWAP1 0000046e: DUP2 0000046f: MSTORE 00000470: PUSH1 0x05 00000472: PUSH1 0x20 00000474: MSTORE 00000475: PUSH1 0x40 00000477: DUP2 00000478: KECCAK256 00000479: SWAP3 0000047a: SWAP5 0000047b: POP 0000047c: SWAP1 0000047d: SWAP3 0000047e: POP 0000047f: SWAP1 00000480: DUP2 00000481: SWAP1 00000482: PUSH2 0x048c 00000485: SWAP1 00000486: DUP5 00000487: SWAP1 00000488: PUSH2 0x10f4 0000048b: JUMP 0000048c: JUMPDEST 0000048d: SWAP1 0000048e: SWAP3 0000048f: POP 00000490: SWAP1 00000491: POP 00000492: DUP1 00000493: ISZERO 00000494: PUSH2 0x0577 00000497: JUMPI 00000498: CALLER 00000499: PUSH1 0x00 0000049b: SWAP1 0000049c: DUP2 0000049d: MSTORE 0000049e: PUSH1 0x02 000004a0: PUSH1 0x20 000004a2: SWAP1 000004a3: DUP2 000004a4: MSTORE 000004a5: PUSH1 0x40 000004a7: DUP1 000004a8: DUP4 000004a9: KECCAK256 000004aa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000004bf: DUP9 000004c0: AND 000004c1: DUP5 000004c2: MSTORE 000004c3: SWAP1 000004c4: SWAP2 000004c5: MSTORE 000004c6: DUP2 000004c7: KECCAK256 000004c8: DUP1 000004c9: SLOAD 000004ca: DUP4 000004cb: SWAP3 000004cc: SWAP1 000004cd: PUSH2 0x04d7 000004d0: SWAP1 000004d1: DUP5 000004d2: SWAP1 000004d3: PUSH2 0x18e9 000004d6: JUMP 000004d7: JUMPDEST 000004d8: SWAP1 000004d9: SWAP2 000004da: SSTORE 000004db: POP 000004dc: POP 000004dd: CALLER 000004de: PUSH1 0x00 000004e0: SWAP1 000004e1: DUP2 000004e2: MSTORE 000004e3: PUSH1 0x03 000004e5: PUSH1 0x20 000004e7: MSTORE 000004e8: PUSH1 0x40 000004ea: DUP2 000004eb: KECCAK256 000004ec: DUP1 000004ed: SLOAD 000004ee: DUP4 000004ef: SWAP3 000004f0: SWAP1 000004f1: PUSH2 0x04fb 000004f4: SWAP1 000004f5: DUP5 000004f6: SWAP1 000004f7: PUSH2 0x18e9 000004fa: JUMP 000004fb: JUMPDEST 000004fc: SWAP1 000004fd: SWAP2 000004fe: SSTORE 000004ff: POP 00000500: POP 00000501: CALLER 00000502: PUSH1 0x00 00000504: DUP2 00000505: DUP2 00000506: MSTORE 00000507: PUSH1 0x02 00000509: PUSH1 0x20 0000050b: SWAP1 0000050c: DUP2 0000050d: MSTORE 0000050e: PUSH1 0x40 00000510: DUP1 00000511: DUP4 00000512: KECCAK256 00000513: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000528: DUP10 00000529: AND 0000052a: DUP1 0000052b: DUP6 0000052c: MSTORE 0000052d: SWAP1 0000052e: DUP4 0000052f: MSTORE 00000530: SWAP3 00000531: DUP2 00000532: SWAP1 00000533: KECCAK256 00000534: SLOAD 00000535: DUP2 00000536: MLOAD 00000537: SWAP5 00000538: DUP6 00000539: MSTORE 0000053a: SWAP2 0000053b: DUP5 0000053c: ADD 0000053d: SWAP3 0000053e: SWAP1 0000053f: SWAP3 00000540: MSTORE 00000541: DUP3 00000542: DUP3 00000543: ADD 00000544: DUP5 00000545: SWAP1 00000546: MSTORE 00000547: PUSH1 0x60 00000549: DUP4 0000054a: ADD 0000054b: MSTORE 0000054c: MLOAD 0000054d: PUSH32 0xfef75efa635291b302f2c3dfcc6ec92874e699d186cee8bd68c36c86ad35232c 0000056e: SWAP2 0000056f: DUP2 00000570: SWAP1 00000571: SUB 00000572: PUSH1 0x80 00000574: ADD 00000575: SWAP1 00000576: LOG1 00000577: JUMPDEST 00000578: PUSH2 0x05b8 0000057b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000590: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 000005b1: AND 000005b2: DUP6 000005b3: DUP5 000005b4: PUSH2 0x1148 000005b7: JUMP 000005b8: JUMPDEST 000005b9: PUSH1 0x40 000005bb: DUP1 000005bc: MLOAD 000005bd: CALLER 000005be: DUP2 000005bf: MSTORE 000005c0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000005d5: DUP7 000005d6: AND 000005d7: PUSH1 0x20 000005d9: DUP3 000005da: ADD 000005db: MSTORE 000005dc: SWAP1 000005dd: DUP2 000005de: ADD 000005df: DUP4 000005e0: SWAP1 000005e1: MSTORE 000005e2: PUSH32 0xece684e11f49f06d351439e63189ad1703238b8040d90cf994901ca2b3da8d44 00000603: SWAP1 00000604: PUSH1 0x60 00000606: ADD 00000607: JUMPDEST 00000608: PUSH1 0x40 0000060a: MLOAD 0000060b: DUP1 0000060c: SWAP2 0000060d: SUB 0000060e: SWAP1 0000060f: LOG1 00000610: POP 00000611: POP 00000612: POP 00000613: POP 00000614: POP 00000615: JUMP 00000616: JUMPDEST 00000617: PUSH2 0x061e 0000061a: PUSH2 0x121d 0000061d: JUMP 0000061e: JUMPDEST 0000061f: PUSH1 0x00 00000621: JUMPDEST 00000622: DUP2 00000623: DUP2 00000624: LT 00000625: ISZERO 00000626: PUSH2 0x08cf 00000629: JUMPI 0000062a: DUP3 0000062b: DUP3 0000062c: DUP3 0000062d: DUP2 0000062e: DUP2 0000062f: LT 00000630: PUSH2 0x063b 00000633: JUMPI 00000634: PUSH2 0x063b 00000637: PUSH2 0x1901 0000063a: JUMP 0000063b: JUMPDEST 0000063c: PUSH2 0x0651 0000063f: SWAP3 00000640: PUSH1 0x20 00000642: PUSH1 0x80 00000644: SWAP1 00000645: SWAP3 00000646: MUL 00000647: ADD 00000648: SWAP1 00000649: DUP2 0000064a: ADD 0000064b: SWAP2 0000064c: POP 0000064d: PUSH2 0x1945 00000650: JUMP 00000651: JUMPDEST 00000652: ISZERO 00000653: PUSH2 0x07b7 00000656: JUMPI 00000657: PUSH2 0x06c8 0000065a: PUSH1 0x00 0000065c: PUSH1 0x04 0000065e: PUSH1 0x00 00000660: DUP7 00000661: DUP7 00000662: DUP7 00000663: DUP2 00000664: DUP2 00000665: LT 00000666: PUSH2 0x0671 00000669: JUMPI 0000066a: PUSH2 0x0671 0000066d: PUSH2 0x1901 00000670: JUMP 00000671: JUMPDEST 00000672: SWAP1 00000673: POP 00000674: PUSH1 0x80 00000676: MUL 00000677: ADD 00000678: PUSH1 0x20 0000067a: ADD 0000067b: PUSH1 0x20 0000067d: DUP2 0000067e: ADD 0000067f: SWAP1 00000680: PUSH2 0x0689 00000683: SWAP2 00000684: SWAP1 00000685: PUSH2 0x17b8 00000688: JUMP 00000689: JUMPDEST 0000068a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000069f: AND 000006a0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006b5: AND 000006b6: DUP2 000006b7: MSTORE 000006b8: PUSH1 0x20 000006ba: ADD 000006bb: SWAP1 000006bc: DUP2 000006bd: MSTORE 000006be: PUSH1 0x20 000006c0: ADD 000006c1: PUSH1 0x00 000006c3: KECCAK256 000006c4: PUSH2 0x10f4 000006c7: JUMP 000006c8: JUMPDEST 000006c9: POP 000006ca: POP 000006cb: DUP3 000006cc: DUP3 000006cd: DUP3 000006ce: DUP2 000006cf: DUP2 000006d0: LT 000006d1: PUSH2 0x06dc 000006d4: JUMPI 000006d5: PUSH2 0x06dc 000006d8: PUSH2 0x1901 000006db: JUMP 000006dc: JUMPDEST 000006dd: SWAP1 000006de: POP 000006df: PUSH1 0x80 000006e1: MUL 000006e2: ADD 000006e3: PUSH1 0x40 000006e5: ADD 000006e6: CALLDATALOAD 000006e7: PUSH1 0x04 000006e9: PUSH1 0x00 000006eb: DUP6 000006ec: DUP6 000006ed: DUP6 000006ee: DUP2 000006ef: DUP2 000006f0: LT 000006f1: PUSH2 0x06fc 000006f4: JUMPI 000006f5: PUSH2 0x06fc 000006f8: PUSH2 0x1901 000006fb: JUMP 000006fc: JUMPDEST 000006fd: SWAP1 000006fe: POP 000006ff: PUSH1 0x80 00000701: MUL 00000702: ADD 00000703: PUSH1 0x20 00000705: ADD 00000706: PUSH1 0x20 00000708: DUP2 00000709: ADD 0000070a: SWAP1 0000070b: PUSH2 0x0714 0000070e: SWAP2 0000070f: SWAP1 00000710: PUSH2 0x17b8 00000713: JUMP 00000714: JUMPDEST 00000715: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000072a: AND 0000072b: DUP2 0000072c: MSTORE 0000072d: PUSH1 0x20 0000072f: DUP2 00000730: ADD 00000731: SWAP2 00000732: SWAP1 00000733: SWAP2 00000734: MSTORE 00000735: PUSH1 0x40 00000737: ADD 00000738: PUSH1 0x00 0000073a: KECCAK256 0000073b: PUSH1 0x02 0000073d: ADD 0000073e: SSTORE 0000073f: DUP3 00000740: DUP3 00000741: DUP3 00000742: DUP2 00000743: DUP2 00000744: LT 00000745: PUSH2 0x0750 00000748: JUMPI 00000749: PUSH2 0x0750 0000074c: PUSH2 0x1901 0000074f: JUMP 00000750: JUMPDEST 00000751: SWAP1 00000752: POP 00000753: PUSH1 0x80 00000755: MUL 00000756: ADD 00000757: PUSH1 0x60 00000759: ADD 0000075a: CALLDATALOAD 0000075b: PUSH1 0x04 0000075d: PUSH1 0x00 0000075f: DUP6 00000760: DUP6 00000761: DUP6 00000762: DUP2 00000763: DUP2 00000764: LT 00000765: PUSH2 0x0770 00000768: JUMPI 00000769: PUSH2 0x0770 0000076c: PUSH2 0x1901 0000076f: JUMP 00000770: JUMPDEST 00000771: SWAP1 00000772: POP 00000773: PUSH1 0x80 00000775: MUL 00000776: ADD 00000777: PUSH1 0x20 00000779: ADD 0000077a: PUSH1 0x20 0000077c: DUP2 0000077d: ADD 0000077e: SWAP1 0000077f: PUSH2 0x0788 00000782: SWAP2 00000783: SWAP1 00000784: PUSH2 0x17b8 00000787: JUMP 00000788: JUMPDEST 00000789: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000079e: AND 0000079f: DUP2 000007a0: MSTORE 000007a1: PUSH1 0x20 000007a3: DUP2 000007a4: ADD 000007a5: SWAP2 000007a6: SWAP1 000007a7: SWAP2 000007a8: MSTORE 000007a9: PUSH1 0x40 000007ab: ADD 000007ac: PUSH1 0x00 000007ae: KECCAK256 000007af: PUSH1 0x01 000007b1: ADD 000007b2: SSTORE 000007b3: PUSH2 0x08bd 000007b6: JUMP 000007b7: JUMPDEST 000007b8: PUSH2 0x07d2 000007bb: PUSH1 0x00 000007bd: PUSH1 0x05 000007bf: PUSH1 0x00 000007c1: DUP7 000007c2: DUP7 000007c3: DUP7 000007c4: DUP2 000007c5: DUP2 000007c6: LT 000007c7: PUSH2 0x0671 000007ca: JUMPI 000007cb: PUSH2 0x0671 000007ce: PUSH2 0x1901 000007d1: JUMP 000007d2: JUMPDEST 000007d3: POP 000007d4: POP 000007d5: DUP3 000007d6: DUP3 000007d7: DUP3 000007d8: DUP2 000007d9: DUP2 000007da: LT 000007db: PUSH2 0x07e6 000007de: JUMPI 000007df: PUSH2 0x07e6 000007e2: PUSH2 0x1901 000007e5: JUMP 000007e6: JUMPDEST 000007e7: SWAP1 000007e8: POP 000007e9: PUSH1 0x80 000007eb: MUL 000007ec: ADD 000007ed: PUSH1 0x40 000007ef: ADD 000007f0: CALLDATALOAD 000007f1: PUSH1 0x05 000007f3: PUSH1 0x00 000007f5: DUP6 000007f6: DUP6 000007f7: DUP6 000007f8: DUP2 000007f9: DUP2 000007fa: LT 000007fb: PUSH2 0x0806 000007fe: JUMPI 000007ff: PUSH2 0x0806 00000802: PUSH2 0x1901 00000805: JUMP 00000806: JUMPDEST 00000807: SWAP1 00000808: POP 00000809: PUSH1 0x80 0000080b: MUL 0000080c: ADD 0000080d: PUSH1 0x20 0000080f: ADD 00000810: PUSH1 0x20 00000812: DUP2 00000813: ADD 00000814: SWAP1 00000815: PUSH2 0x081e 00000818: SWAP2 00000819: SWAP1 0000081a: PUSH2 0x17b8 0000081d: JUMP 0000081e: JUMPDEST 0000081f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000834: AND 00000835: DUP2 00000836: MSTORE 00000837: PUSH1 0x20 00000839: DUP2 0000083a: ADD 0000083b: SWAP2 0000083c: SWAP1 0000083d: SWAP2 0000083e: MSTORE 0000083f: PUSH1 0x40 00000841: ADD 00000842: PUSH1 0x00 00000844: KECCAK256 00000845: PUSH1 0x02 00000847: ADD 00000848: SSTORE 00000849: DUP3 0000084a: DUP3 0000084b: DUP3 0000084c: DUP2 0000084d: DUP2 0000084e: LT 0000084f: PUSH2 0x085a 00000852: JUMPI 00000853: PUSH2 0x085a 00000856: PUSH2 0x1901 00000859: JUMP 0000085a: JUMPDEST 0000085b: SWAP1 0000085c: POP 0000085d: PUSH1 0x80 0000085f: MUL 00000860: ADD 00000861: PUSH1 0x60 00000863: ADD 00000864: CALLDATALOAD 00000865: PUSH1 0x05 00000867: PUSH1 0x00 00000869: DUP6 0000086a: DUP6 0000086b: DUP6 0000086c: DUP2 0000086d: DUP2 0000086e: LT 0000086f: PUSH2 0x087a 00000872: JUMPI 00000873: PUSH2 0x087a 00000876: PUSH2 0x1901 00000879: JUMP 0000087a: JUMPDEST 0000087b: SWAP1 0000087c: POP 0000087d: PUSH1 0x80 0000087f: MUL 00000880: ADD 00000881: PUSH1 0x20 00000883: ADD 00000884: PUSH1 0x20 00000886: DUP2 00000887: ADD 00000888: SWAP1 00000889: PUSH2 0x0892 0000088c: SWAP2 0000088d: SWAP1 0000088e: PUSH2 0x17b8 00000891: JUMP 00000892: JUMPDEST 00000893: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008a8: AND 000008a9: DUP2 000008aa: MSTORE 000008ab: PUSH1 0x20 000008ad: DUP2 000008ae: ADD 000008af: SWAP2 000008b0: SWAP1 000008b1: SWAP2 000008b2: MSTORE 000008b3: PUSH1 0x40 000008b5: ADD 000008b6: PUSH1 0x00 000008b8: KECCAK256 000008b9: PUSH1 0x01 000008bb: ADD 000008bc: SSTORE 000008bd: JUMPDEST 000008be: DUP1 000008bf: PUSH2 0x08c7 000008c2: DUP2 000008c3: PUSH2 0x1960 000008c6: JUMP 000008c7: JUMPDEST 000008c8: SWAP2 000008c9: POP 000008ca: POP 000008cb: PUSH2 0x0621 000008ce: JUMP 000008cf: JUMPDEST 000008d0: POP 000008d1: PUSH32 0x19863caed14ed012a54f927e56250018b7ac3c04fd197e0edf23369f75a6ccd4 000008f2: DUP3 000008f3: DUP3 000008f4: PUSH1 0x40 000008f6: MLOAD 000008f7: PUSH2 0x0901 000008fa: SWAP3 000008fb: SWAP2 000008fc: SWAP1 000008fd: PUSH2 0x1998 00000900: JUMP 00000901: JUMPDEST 00000902: PUSH1 0x40 00000904: MLOAD 00000905: DUP1 00000906: SWAP2 00000907: SUB 00000908: SWAP1 00000909: LOG1 0000090a: POP 0000090b: POP 0000090c: JUMP 0000090d: JUMPDEST 0000090e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000923: DUP2 00000924: AND 00000925: PUSH1 0x00 00000927: SWAP1 00000928: DUP2 00000929: MSTORE 0000092a: PUSH1 0x04 0000092c: PUSH1 0x20 0000092e: MSTORE 0000092f: PUSH1 0x40 00000931: DUP2 00000932: KECCAK256 00000933: PUSH2 0x093b 00000936: SWAP1 00000937: PUSH2 0x129e 0000093a: JUMP 0000093b: JUMPDEST 0000093c: SWAP3 0000093d: SWAP2 0000093e: POP 0000093f: POP 00000940: JUMP 00000941: JUMPDEST 00000942: PUSH2 0x0949 00000945: PUSH2 0x121d 00000948: JUMP 00000949: JUMPDEST 0000094a: PUSH2 0x0954 0000094d: DUP4 0000094e: DUP4 0000094f: DUP4 00000950: PUSH2 0x1305 00000953: JUMP 00000954: JUMPDEST 00000955: POP 00000956: POP 00000957: POP 00000958: JUMP 00000959: JUMPDEST 0000095a: PUSH2 0x0961 0000095d: PUSH2 0x121d 00000960: JUMP 00000961: JUMPDEST 00000962: PUSH2 0x096b 00000965: PUSH1 0x00 00000967: PUSH2 0x13f5 0000096a: JUMP 0000096b: JUMPDEST 0000096c: JUMP 0000096d: JUMPDEST 0000096e: PUSH2 0x0998 00000971: PUSH1 0x40 00000973: MLOAD 00000974: DUP1 00000975: PUSH1 0x80 00000977: ADD 00000978: PUSH1 0x40 0000097a: MSTORE 0000097b: DUP1 0000097c: PUSH1 0x00 0000097e: DUP2 0000097f: MSTORE 00000980: PUSH1 0x20 00000982: ADD 00000983: PUSH1 0x00 00000985: DUP2 00000986: MSTORE 00000987: PUSH1 0x20 00000989: ADD 0000098a: PUSH1 0x00 0000098c: DUP2 0000098d: MSTORE 0000098e: PUSH1 0x20 00000990: ADD 00000991: PUSH1 0x00 00000993: DUP2 00000994: MSTORE 00000995: POP 00000996: SWAP1 00000997: JUMP 00000998: JUMPDEST 00000999: POP 0000099a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009af: AND 000009b0: PUSH1 0x00 000009b2: SWAP1 000009b3: DUP2 000009b4: MSTORE 000009b5: PUSH1 0x04 000009b7: PUSH1 0x20 000009b9: SWAP1 000009ba: DUP2 000009bb: MSTORE 000009bc: PUSH1 0x40 000009be: SWAP2 000009bf: DUP3 000009c0: SWAP1 000009c1: KECCAK256 000009c2: DUP3 000009c3: MLOAD 000009c4: PUSH1 0x80 000009c6: DUP2 000009c7: ADD 000009c8: DUP5 000009c9: MSTORE 000009ca: DUP2 000009cb: SLOAD 000009cc: DUP2 000009cd: MSTORE 000009ce: PUSH1 0x01 000009d0: DUP3 000009d1: ADD 000009d2: SLOAD 000009d3: SWAP3 000009d4: DUP2 000009d5: ADD 000009d6: SWAP3 000009d7: SWAP1 000009d8: SWAP3 000009d9: MSTORE 000009da: PUSH1 0x02 000009dc: DUP2 000009dd: ADD 000009de: SLOAD 000009df: SWAP3 000009e0: DUP3 000009e1: ADD 000009e2: SWAP3 000009e3: SWAP1 000009e4: SWAP3 000009e5: MSTORE 000009e6: PUSH1 0x03 000009e8: SWAP1 000009e9: SWAP2 000009ea: ADD 000009eb: SLOAD 000009ec: PUSH1 0x60 000009ee: DUP3 000009ef: ADD 000009f0: MSTORE 000009f1: SWAP1 000009f2: JUMP 000009f3: JUMPDEST 000009f4: PUSH1 0x01 000009f6: SLOAD 000009f7: CALLER 000009f8: SWAP1 000009f9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a0e: AND 00000a0f: DUP2 00000a10: EQ 00000a11: PUSH2 0x0aa1 00000a14: JUMPI 00000a15: PUSH1 0x40 00000a17: MLOAD 00000a18: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000a39: DUP2 00000a3a: MSTORE 00000a3b: PUSH1 0x20 00000a3d: PUSH1 0x04 00000a3f: DUP3 00000a40: ADD 00000a41: MSTORE 00000a42: PUSH1 0x29 00000a44: PUSH1 0x24 00000a46: DUP3 00000a47: ADD 00000a48: MSTORE 00000a49: PUSH32 0x4f776e61626c6532537465703a2063616c6c6572206973206e6f742074686520 00000a6a: PUSH1 0x44 00000a6c: DUP3 00000a6d: ADD 00000a6e: MSTORE 00000a6f: PUSH32 0x6e6577206f776e65720000000000000000000000000000000000000000000000 00000a90: PUSH1 0x64 00000a92: DUP3 00000a93: ADD 00000a94: MSTORE 00000a95: PUSH1 0x84 00000a97: ADD 00000a98: JUMPDEST 00000a99: PUSH1 0x40 00000a9b: MLOAD 00000a9c: DUP1 00000a9d: SWAP2 00000a9e: SUB 00000a9f: SWAP1 00000aa0: REVERT 00000aa1: JUMPDEST 00000aa2: PUSH2 0x0aaa 00000aa5: DUP2 00000aa6: PUSH2 0x13f5 00000aa9: JUMP 00000aaa: JUMPDEST 00000aab: POP 00000aac: JUMP 00000aad: JUMPDEST 00000aae: PUSH1 0x40 00000ab0: MLOAD 00000ab1: PUSH32 0x89c1cf9a00000000000000000000000000000000000000000000000000000000 00000ad2: DUP2 00000ad3: MSTORE 00000ad4: PUSH1 0x04 00000ad6: DUP2 00000ad7: ADD 00000ad8: DUP3 00000ad9: SWAP1 00000ada: MSTORE 00000adb: PUSH1 0x00 00000add: SWAP1 00000ade: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000af3: DUP5 00000af4: AND 00000af5: SWAP1 00000af6: PUSH4 0x89c1cf9a 00000afb: SWAP1 00000afc: PUSH1 0x24 00000afe: ADD 00000aff: PUSH1 0x20 00000b01: PUSH1 0x40 00000b03: MLOAD 00000b04: DUP1 00000b05: DUP4 00000b06: SUB 00000b07: DUP2 00000b08: DUP7 00000b09: GAS 00000b0a: STATICCALL 00000b0b: ISZERO 00000b0c: DUP1 00000b0d: ISZERO 00000b0e: PUSH2 0x0b1b 00000b11: JUMPI 00000b12: RETURNDATASIZE 00000b13: PUSH1 0x00 00000b15: DUP1 00000b16: RETURNDATACOPY 00000b17: RETURNDATASIZE 00000b18: PUSH1 0x00 00000b1a: REVERT 00000b1b: JUMPDEST 00000b1c: POP 00000b1d: POP 00000b1e: POP 00000b1f: POP 00000b20: PUSH1 0x40 00000b22: MLOAD 00000b23: RETURNDATASIZE 00000b24: PUSH1 0x1f 00000b26: NOT 00000b27: PUSH1 0x1f 00000b29: DUP3 00000b2a: ADD 00000b2b: AND 00000b2c: DUP3 00000b2d: ADD 00000b2e: DUP1 00000b2f: PUSH1 0x40 00000b31: MSTORE 00000b32: POP 00000b33: DUP2 00000b34: ADD 00000b35: SWAP1 00000b36: PUSH2 0x0b3f 00000b39: SWAP2 00000b3a: SWAP1 00000b3b: PUSH2 0x1a1b 00000b3e: JUMP 00000b3f: JUMPDEST 00000b40: SWAP4 00000b41: SWAP3 00000b42: POP 00000b43: POP 00000b44: POP 00000b45: JUMP 00000b46: JUMPDEST 00000b47: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b5c: DUP2 00000b5d: AND 00000b5e: PUSH1 0x00 00000b60: SWAP1 00000b61: DUP2 00000b62: MSTORE 00000b63: PUSH1 0x05 00000b65: PUSH1 0x20 00000b67: MSTORE 00000b68: PUSH1 0x40 00000b6a: DUP2 00000b6b: KECCAK256 00000b6c: PUSH2 0x093b 00000b6f: SWAP1 00000b70: PUSH2 0x129e 00000b73: JUMP 00000b74: JUMPDEST 00000b75: DUP3 00000b76: PUSH1 0x00 00000b78: SUB 00000b79: PUSH2 0x0bae 00000b7c: JUMPI 00000b7d: PUSH1 0x40 00000b7f: MLOAD 00000b80: PUSH32 0x1f2a200500000000000000000000000000000000000000000000000000000000 00000ba1: DUP2 00000ba2: MSTORE 00000ba3: PUSH1 0x04 00000ba5: ADD 00000ba6: PUSH1 0x40 00000ba8: MLOAD 00000ba9: DUP1 00000baa: SWAP2 00000bab: SUB 00000bac: SWAP1 00000bad: REVERT 00000bae: JUMPDEST 00000baf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bc4: DUP2 00000bc5: AND 00000bc6: PUSH1 0x00 00000bc8: SWAP1 00000bc9: DUP2 00000bca: MSTORE 00000bcb: PUSH1 0x04 00000bcd: PUSH1 0x20 00000bcf: MSTORE 00000bd0: PUSH1 0x40 00000bd2: DUP2 00000bd3: KECCAK256 00000bd4: PUSH1 0x02 00000bd6: ADD 00000bd7: SLOAD 00000bd8: SWAP1 00000bd9: SUB 00000bda: PUSH2 0x0c0f 00000bdd: JUMPI 00000bde: PUSH1 0x40 00000be0: MLOAD 00000be1: PUSH32 0xb1efb84a00000000000000000000000000000000000000000000000000000000 00000c02: DUP2 00000c03: MSTORE 00000c04: PUSH1 0x04 00000c06: ADD 00000c07: PUSH1 0x40 00000c09: MLOAD 00000c0a: DUP1 00000c0b: SWAP2 00000c0c: SUB 00000c0d: SWAP1 00000c0e: REVERT 00000c0f: JUMPDEST 00000c10: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c25: DUP2 00000c26: AND 00000c27: PUSH1 0x00 00000c29: SWAP1 00000c2a: DUP2 00000c2b: MSTORE 00000c2c: PUSH1 0x04 00000c2e: PUSH1 0x20 00000c30: MSTORE 00000c31: PUSH1 0x40 00000c33: SWAP1 00000c34: KECCAK256 00000c35: PUSH2 0x0c3f 00000c38: SWAP1 00000c39: DUP5 00000c3a: SWAP1 00000c3b: PUSH2 0x1426 00000c3e: JUMP 00000c3f: JUMPDEST 00000c40: PUSH2 0x0c81 00000c43: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c58: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00000c79: AND 00000c7a: CALLER 00000c7b: ADDRESS 00000c7c: DUP7 00000c7d: PUSH2 0x1483 00000c80: JUMP 00000c81: JUMPDEST 00000c82: DUP1 00000c83: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c98: AND 00000c99: PUSH4 0x1cbdf12b 00000c9e: CALLVALUE 00000c9f: DUP5 00000ca0: DUP8 00000ca1: DUP8 00000ca2: PUSH1 0x40 00000ca4: MLOAD 00000ca5: PUSH1 0x20 00000ca7: ADD 00000ca8: PUSH2 0x0cd3 00000cab: SWAP3 00000cac: SWAP2 00000cad: SWAP1 00000cae: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000cc3: SWAP3 00000cc4: SWAP1 00000cc5: SWAP3 00000cc6: AND 00000cc7: DUP3 00000cc8: MSTORE 00000cc9: PUSH1 0x20 00000ccb: DUP3 00000ccc: ADD 00000ccd: MSTORE 00000cce: PUSH1 0x40 00000cd0: ADD 00000cd1: SWAP1 00000cd2: JUMP 00000cd3: JUMPDEST 00000cd4: PUSH1 0x40 00000cd6: MLOAD 00000cd7: PUSH1 0x20 00000cd9: DUP2 00000cda: DUP4 00000cdb: SUB 00000cdc: SUB 00000cdd: DUP2 00000cde: MSTORE 00000cdf: SWAP1 00000ce0: PUSH1 0x40 00000ce2: MSTORE 00000ce3: PUSH1 0x40 00000ce5: MLOAD 00000ce6: DUP5 00000ce7: PUSH4 0xffffffff 00000cec: AND 00000ced: PUSH1 0xe0 00000cef: SHL 00000cf0: DUP2 00000cf1: MSTORE 00000cf2: PUSH1 0x04 00000cf4: ADD 00000cf5: PUSH2 0x0cff 00000cf8: SWAP3 00000cf9: SWAP2 00000cfa: SWAP1 00000cfb: PUSH2 0x1a34 00000cfe: JUMP 00000cff: JUMPDEST 00000d00: PUSH1 0x00 00000d02: PUSH1 0x40 00000d04: MLOAD 00000d05: DUP1 00000d06: DUP4 00000d07: SUB 00000d08: DUP2 00000d09: DUP6 00000d0a: DUP9 00000d0b: DUP1 00000d0c: EXTCODESIZE 00000d0d: ISZERO 00000d0e: DUP1 00000d0f: ISZERO 00000d10: PUSH2 0x0d18 00000d13: JUMPI 00000d14: PUSH1 0x00 00000d16: DUP1 00000d17: REVERT 00000d18: JUMPDEST 00000d19: POP 00000d1a: GAS 00000d1b: CALL 00000d1c: ISZERO 00000d1d: DUP1 00000d1e: ISZERO 00000d1f: PUSH2 0x0d2c 00000d22: JUMPI 00000d23: RETURNDATASIZE 00000d24: PUSH1 0x00 00000d26: DUP1 00000d27: RETURNDATACOPY 00000d28: RETURNDATASIZE 00000d29: PUSH1 0x00 00000d2b: REVERT 00000d2c: JUMPDEST 00000d2d: POP 00000d2e: POP 00000d2f: PUSH1 0x40 00000d31: DUP1 00000d32: MLOAD 00000d33: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d48: DUP1 00000d49: DUP8 00000d4a: AND 00000d4b: DUP3 00000d4c: MSTORE 00000d4d: CALLER 00000d4e: PUSH1 0x20 00000d50: DUP4 00000d51: ADD 00000d52: MSTORE 00000d53: DUP10 00000d54: AND 00000d55: SWAP2 00000d56: DUP2 00000d57: ADD 00000d58: SWAP2 00000d59: SWAP1 00000d5a: SWAP2 00000d5b: MSTORE 00000d5c: PUSH1 0x60 00000d5e: DUP2 00000d5f: ADD 00000d60: DUP8 00000d61: SWAP1 00000d62: MSTORE 00000d63: PUSH32 0x9474e087d8a0e83962ac44e292b4aba027426203ea66adfb1dd9f65795ff599a 00000d84: SWAP4 00000d85: POP 00000d86: PUSH1 0x80 00000d88: ADD 00000d89: SWAP2 00000d8a: POP 00000d8b: PUSH2 0x0d91 00000d8e: SWAP1 00000d8f: POP 00000d90: JUMP 00000d91: JUMPDEST 00000d92: PUSH1 0x40 00000d94: MLOAD 00000d95: DUP1 00000d96: SWAP2 00000d97: SUB 00000d98: SWAP1 00000d99: LOG1 00000d9a: POP 00000d9b: POP 00000d9c: POP 00000d9d: POP 00000d9e: JUMP 00000d9f: JUMPDEST 00000da0: PUSH2 0x0dca 00000da3: PUSH1 0x40 00000da5: MLOAD 00000da6: DUP1 00000da7: PUSH1 0x80 00000da9: ADD 00000daa: PUSH1 0x40 00000dac: MSTORE 00000dad: DUP1 00000dae: PUSH1 0x00 00000db0: DUP2 00000db1: MSTORE 00000db2: PUSH1 0x20 00000db4: ADD 00000db5: PUSH1 0x00 00000db7: DUP2 00000db8: MSTORE 00000db9: PUSH1 0x20 00000dbb: ADD 00000dbc: PUSH1 0x00 00000dbe: DUP2 00000dbf: MSTORE 00000dc0: PUSH1 0x20 00000dc2: ADD 00000dc3: PUSH1 0x00 00000dc5: DUP2 00000dc6: MSTORE 00000dc7: POP 00000dc8: SWAP1 00000dc9: JUMP 00000dca: JUMPDEST 00000dcb: POP 00000dcc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000de1: AND 00000de2: PUSH1 0x00 00000de4: SWAP1 00000de5: DUP2 00000de6: MSTORE 00000de7: PUSH1 0x05 00000de9: PUSH1 0x20 00000deb: SWAP1 00000dec: DUP2 00000ded: MSTORE 00000dee: PUSH1 0x40 00000df0: SWAP2 00000df1: DUP3 00000df2: SWAP1 00000df3: KECCAK256 00000df4: DUP3 00000df5: MLOAD 00000df6: PUSH1 0x80 00000df8: DUP2 00000df9: ADD 00000dfa: DUP5 00000dfb: MSTORE 00000dfc: DUP2 00000dfd: SLOAD 00000dfe: DUP2 00000dff: MSTORE 00000e00: PUSH1 0x01 00000e02: DUP3 00000e03: ADD 00000e04: SLOAD 00000e05: SWAP3 00000e06: DUP2 00000e07: ADD 00000e08: SWAP3 00000e09: SWAP1 00000e0a: SWAP3 00000e0b: MSTORE 00000e0c: PUSH1 0x02 00000e0e: DUP2 00000e0f: ADD 00000e10: SLOAD 00000e11: SWAP3 00000e12: DUP3 00000e13: ADD 00000e14: SWAP3 00000e15: SWAP1 00000e16: SWAP3 00000e17: MSTORE 00000e18: PUSH1 0x03 00000e1a: SWAP1 00000e1b: SWAP2 00000e1c: ADD 00000e1d: SLOAD 00000e1e: PUSH1 0x60 00000e20: DUP3 00000e21: ADD 00000e22: MSTORE 00000e23: SWAP1 00000e24: JUMP 00000e25: JUMPDEST 00000e26: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e3b: DUP2 00000e3c: AND 00000e3d: PUSH1 0x00 00000e3f: SWAP1 00000e40: DUP2 00000e41: MSTORE 00000e42: PUSH1 0x05 00000e44: PUSH1 0x20 00000e46: MSTORE 00000e47: PUSH1 0x40 00000e49: DUP2 00000e4a: KECCAK256 00000e4b: PUSH1 0x02 00000e4d: ADD 00000e4e: SLOAD 00000e4f: SWAP1 00000e50: SUB 00000e51: PUSH2 0x0e86 00000e54: JUMPI 00000e55: PUSH1 0x40 00000e57: MLOAD 00000e58: PUSH32 0xb1efb84a00000000000000000000000000000000000000000000000000000000 00000e79: DUP2 00000e7a: MSTORE 00000e7b: PUSH1 0x04 00000e7d: ADD 00000e7e: PUSH1 0x40 00000e80: MLOAD 00000e81: DUP1 00000e82: SWAP2 00000e83: SUB 00000e84: SWAP1 00000e85: REVERT 00000e86: JUMPDEST 00000e87: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e9c: DUP1 00000e9d: DUP3 00000e9e: AND 00000e9f: PUSH1 0x00 00000ea1: DUP2 00000ea2: DUP2 00000ea3: MSTORE 00000ea4: PUSH1 0x02 00000ea6: PUSH1 0x20 00000ea8: SWAP1 00000ea9: DUP2 00000eaa: MSTORE 00000eab: PUSH1 0x40 00000ead: DUP1 00000eae: DUP4 00000eaf: KECCAK256 00000eb0: SWAP5 00000eb1: DUP8 00000eb2: AND 00000eb3: DUP4 00000eb4: MSTORE 00000eb5: SWAP4 00000eb6: DUP2 00000eb7: MSTORE 00000eb8: DUP4 00000eb9: DUP3 00000eba: KECCAK256 00000ebb: SLOAD 00000ebc: SWAP3 00000ebd: DUP3 00000ebe: MSTORE 00000ebf: PUSH1 0x05 00000ec1: SWAP1 00000ec2: MSTORE 00000ec3: SWAP2 00000ec4: DUP3 00000ec5: KECCAK256 00000ec6: SWAP1 00000ec7: SWAP2 00000ec8: SWAP1 00000ec9: DUP2 00000eca: SWAP1 00000ecb: PUSH2 0x0ed5 00000ece: SWAP1 00000ecf: DUP5 00000ed0: SWAP1 00000ed1: PUSH2 0x10f4 00000ed4: JUMP 00000ed5: JUMPDEST 00000ed6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000eeb: DUP1 00000eec: DUP8 00000eed: AND 00000eee: PUSH1 0x00 00000ef0: DUP2 00000ef1: DUP2 00000ef2: MSTORE 00000ef3: PUSH1 0x02 00000ef5: PUSH1 0x20 00000ef7: SWAP1 00000ef8: DUP2 00000ef9: MSTORE 00000efa: PUSH1 0x40 00000efc: DUP1 00000efd: DUP4 00000efe: KECCAK256 00000eff: SWAP5 00000f00: DUP13 00000f01: AND 00000f02: DUP4 00000f03: MSTORE 00000f04: SWAP4 00000f05: DUP2 00000f06: MSTORE 00000f07: DUP4 00000f08: DUP3 00000f09: KECCAK256 00000f0a: DUP6 00000f0b: SWAP1 00000f0c: SSTORE 00000f0d: SWAP2 00000f0e: DUP2 00000f0f: MSTORE 00000f10: PUSH1 0x03 00000f12: SWAP1 00000f13: SWAP2 00000f14: MSTORE 00000f15: SWAP1 00000f16: DUP2 00000f17: KECCAK256 00000f18: DUP1 00000f19: SLOAD 00000f1a: SWAP4 00000f1b: SWAP6 00000f1c: POP 00000f1d: SWAP2 00000f1e: SWAP4 00000f1f: POP 00000f20: DUP5 00000f21: SWAP3 00000f22: PUSH2 0x0f2c 00000f25: SWAP1 00000f26: DUP5 00000f27: SWAP1 00000f28: PUSH2 0x1aaf 00000f2b: JUMP 00000f2c: JUMPDEST 00000f2d: SWAP1 00000f2e: SWAP2 00000f2f: SSTORE 00000f30: POP 00000f31: PUSH2 0x0f73 00000f34: SWAP1 00000f35: POP 00000f36: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f4b: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00000f6c: AND 00000f6d: DUP7 00000f6e: DUP5 00000f6f: PUSH2 0x1148 00000f72: JUMP 00000f73: JUMPDEST 00000f74: PUSH1 0x40 00000f76: DUP1 00000f77: MLOAD 00000f78: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f8d: DUP1 00000f8e: DUP8 00000f8f: AND 00000f90: DUP3 00000f91: MSTORE 00000f92: DUP8 00000f93: AND 00000f94: PUSH1 0x20 00000f96: DUP3 00000f97: ADD 00000f98: MSTORE 00000f99: SWAP1 00000f9a: DUP2 00000f9b: ADD 00000f9c: DUP4 00000f9d: SWAP1 00000f9e: MSTORE 00000f9f: PUSH1 0x60 00000fa1: DUP2 00000fa2: ADD 00000fa3: DUP3 00000fa4: SWAP1 00000fa5: MSTORE 00000fa6: PUSH32 0xc77b48bb4899bc689b5733d1b7b8bfc0f70e7660295ad5f94841902db16ddae2 00000fc7: SWAP1 00000fc8: PUSH1 0x80 00000fca: ADD 00000fcb: PUSH2 0x0607 00000fce: JUMP 00000fcf: JUMPDEST 00000fd0: PUSH2 0x0fd7 00000fd3: PUSH2 0x121d 00000fd6: JUMP 00000fd7: JUMPDEST 00000fd8: PUSH1 0x01 00000fda: DUP1 00000fdb: SLOAD 00000fdc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ff1: DUP4 00000ff2: AND 00000ff3: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00001014: SWAP1 00001015: SWAP2 00001016: AND 00001017: DUP2 00001018: OR 00001019: SWAP1 0000101a: SWAP2 0000101b: SSTORE 0000101c: PUSH2 0x103a 0000101f: PUSH1 0x00 00001021: SLOAD 00001022: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001037: AND 00001038: SWAP1 00001039: JUMP 0000103a: JUMPDEST 0000103b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001050: AND 00001051: PUSH32 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700 00001072: PUSH1 0x40 00001074: MLOAD 00001075: PUSH1 0x40 00001077: MLOAD 00001078: DUP1 00001079: SWAP2 0000107a: SUB 0000107b: SWAP1 0000107c: LOG3 0000107d: POP 0000107e: JUMP 0000107f: JUMPDEST 00001080: PUSH1 0x00 00001082: DUP1 00001083: SLOAD 00001084: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001099: DUP4 0000109a: DUP2 0000109b: AND 0000109c: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 000010bd: DUP4 000010be: AND 000010bf: DUP2 000010c0: OR 000010c1: DUP5 000010c2: SSTORE 000010c3: PUSH1 0x40 000010c5: MLOAD 000010c6: SWAP2 000010c7: SWAP1 000010c8: SWAP3 000010c9: AND 000010ca: SWAP3 000010cb: DUP4 000010cc: SWAP2 000010cd: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 000010ee: SWAP2 000010ef: SWAP1 000010f0: LOG3 000010f1: POP 000010f2: POP 000010f3: JUMP 000010f4: JUMPDEST 000010f5: PUSH1 0x00 000010f7: DUP1 000010f8: PUSH1 0x00 000010fa: PUSH2 0x1102 000010fd: DUP5 000010fe: PUSH2 0x129e 00001101: JUMP 00001102: JUMPDEST 00001103: TIMESTAMP 00001104: DUP6 00001105: SSTORE 00001106: SWAP1 00001107: POP 00001108: DUP5 00001109: DUP2 0000110a: LT 0000110b: PUSH2 0x1129 0000110e: JUMPI 0000110f: PUSH2 0x1118 00001112: DUP6 00001113: DUP3 00001114: PUSH2 0x1aaf 00001117: JUMP 00001118: JUMPDEST 00001119: PUSH1 0x03 0000111b: DUP6 0000111c: ADD 0000111d: SSTORE 0000111e: DUP5 0000111f: SWAP3 00001120: POP 00001121: PUSH1 0x00 00001123: SWAP2 00001124: POP 00001125: PUSH2 0x1140 00001128: JUMP 00001129: JUMPDEST 0000112a: PUSH1 0x00 0000112c: PUSH1 0x03 0000112e: DUP6 0000112f: ADD 00001130: SSTORE 00001131: SWAP2 00001132: POP 00001133: DUP2 00001134: PUSH2 0x113d 00001137: DUP2 00001138: DUP7 00001139: PUSH2 0x1aaf 0000113c: JUMP 0000113d: JUMPDEST 0000113e: SWAP2 0000113f: POP 00001140: JUMPDEST 00001141: POP 00001142: SWAP3 00001143: POP 00001144: SWAP3 00001145: SWAP1 00001146: POP 00001147: JUMP 00001148: JUMPDEST 00001149: PUSH1 0x00 0000114b: PUSH1 0x40 0000114d: MLOAD 0000114e: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 0000116f: DUP2 00001170: MSTORE 00001171: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001186: DUP5 00001187: AND 00001188: PUSH1 0x04 0000118a: DUP3 0000118b: ADD 0000118c: MSTORE 0000118d: DUP3 0000118e: PUSH1 0x24 00001190: DUP3 00001191: ADD 00001192: MSTORE 00001193: PUSH1 0x20 00001195: PUSH1 0x00 00001197: PUSH1 0x44 00001199: DUP4 0000119a: PUSH1 0x00 0000119c: DUP10 0000119d: GAS 0000119e: CALL 0000119f: RETURNDATASIZE 000011a0: ISZERO 000011a1: PUSH1 0x1f 000011a3: RETURNDATASIZE 000011a4: GT 000011a5: PUSH1 0x01 000011a7: PUSH1 0x00 000011a9: MLOAD 000011aa: EQ 000011ab: AND 000011ac: OR 000011ad: AND 000011ae: SWAP2 000011af: POP 000011b0: POP 000011b1: DUP1 000011b2: PUSH2 0x1217 000011b5: JUMPI 000011b6: PUSH1 0x40 000011b8: MLOAD 000011b9: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000011da: DUP2 000011db: MSTORE 000011dc: PUSH1 0x20 000011de: PUSH1 0x04 000011e0: DUP3 000011e1: ADD 000011e2: MSTORE 000011e3: PUSH1 0x0f 000011e5: PUSH1 0x24 000011e7: DUP3 000011e8: ADD 000011e9: MSTORE 000011ea: PUSH32 0x5452414e534645525f4641494c45440000000000000000000000000000000000 0000120b: PUSH1 0x44 0000120d: DUP3 0000120e: ADD 0000120f: MSTORE 00001210: PUSH1 0x64 00001212: ADD 00001213: PUSH2 0x0a98 00001216: JUMP 00001217: JUMPDEST 00001218: POP 00001219: POP 0000121a: POP 0000121b: POP 0000121c: JUMP 0000121d: JUMPDEST 0000121e: PUSH1 0x00 00001220: SLOAD 00001221: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001236: AND 00001237: CALLER 00001238: EQ 00001239: PUSH2 0x096b 0000123c: JUMPI 0000123d: PUSH1 0x40 0000123f: MLOAD 00001240: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001261: DUP2 00001262: MSTORE 00001263: PUSH1 0x20 00001265: PUSH1 0x04 00001267: DUP3 00001268: ADD 00001269: DUP2 0000126a: SWAP1 0000126b: MSTORE 0000126c: PUSH1 0x24 0000126e: DUP3 0000126f: ADD 00001270: MSTORE 00001271: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572 00001292: PUSH1 0x44 00001294: DUP3 00001295: ADD 00001296: MSTORE 00001297: PUSH1 0x64 00001299: ADD 0000129a: PUSH2 0x0a98 0000129d: JUMP 0000129e: JUMPDEST 0000129f: DUP1 000012a0: SLOAD 000012a1: PUSH1 0x00 000012a3: SWAP1 000012a4: DUP2 000012a5: SWAP1 000012a6: PUSH2 0x12af 000012a9: SWAP1 000012aa: TIMESTAMP 000012ab: PUSH2 0x1aaf 000012ae: JUMP 000012af: JUMPDEST 000012b0: SWAP1 000012b1: POP 000012b2: PUSH1 0x00 000012b4: DUP4 000012b5: PUSH1 0x01 000012b7: ADD 000012b8: SLOAD 000012b9: DUP3 000012ba: PUSH2 0x12c3 000012bd: SWAP2 000012be: SWAP1 000012bf: PUSH2 0x1ac6 000012c2: JUMP 000012c3: JUMPDEST 000012c4: SWAP1 000012c5: POP 000012c6: DUP4 000012c7: PUSH1 0x02 000012c9: ADD 000012ca: SLOAD 000012cb: DUP5 000012cc: PUSH1 0x03 000012ce: ADD 000012cf: SLOAD 000012d0: DUP3 000012d1: PUSH2 0x12da 000012d4: SWAP2 000012d5: SWAP1 000012d6: PUSH2 0x18e9 000012d9: JUMP 000012da: JUMPDEST 000012db: GT 000012dc: ISZERO 000012dd: PUSH2 0x12ec 000012e0: JUMPI 000012e1: DUP4 000012e2: PUSH1 0x02 000012e4: ADD 000012e5: SLOAD 000012e6: SWAP3 000012e7: POP 000012e8: PUSH2 0x12fe 000012eb: JUMP 000012ec: JUMPDEST 000012ed: PUSH1 0x03 000012ef: DUP5 000012f0: ADD 000012f1: SLOAD 000012f2: PUSH2 0x12fb 000012f5: SWAP1 000012f6: DUP3 000012f7: PUSH2 0x18e9 000012fa: JUMP 000012fb: JUMPDEST 000012fc: SWAP3 000012fd: POP 000012fe: JUMPDEST 000012ff: POP 00001300: POP 00001301: SWAP2 00001302: SWAP1 00001303: POP 00001304: JUMP 00001305: JUMPDEST 00001306: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000131b: DUP3 0000131c: AND 0000131d: PUSH2 0x1352 00001320: JUMPI 00001321: PUSH1 0x40 00001323: MLOAD 00001324: PUSH32 0xd92e233d00000000000000000000000000000000000000000000000000000000 00001345: DUP2 00001346: MSTORE 00001347: PUSH1 0x04 00001349: ADD 0000134a: PUSH1 0x40 0000134c: MLOAD 0000134d: DUP1 0000134e: SWAP2 0000134f: SUB 00001350: SWAP1 00001351: REVERT 00001352: JUMPDEST 00001353: PUSH32 0xffffffffffffffffffffffff1111111111111111111111111111111111111112 00001374: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001389: DUP5 0000138a: AND 0000138b: ADD 0000138c: PUSH2 0x1399 0000138f: JUMPI 00001390: PUSH2 0x0954 00001393: DUP3 00001394: DUP3 00001395: PUSH2 0x1575 00001398: JUMP 00001399: JUMPDEST 0000139a: DUP3 0000139b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013b0: AND 000013b1: EXTCODESIZE 000013b2: PUSH1 0x00 000013b4: SUB 000013b5: PUSH2 0x13ea 000013b8: JUMPI 000013b9: PUSH1 0x40 000013bb: MLOAD 000013bc: PUSH32 0x1eb00b0600000000000000000000000000000000000000000000000000000000 000013dd: DUP2 000013de: MSTORE 000013df: PUSH1 0x04 000013e1: ADD 000013e2: PUSH1 0x40 000013e4: MLOAD 000013e5: DUP1 000013e6: SWAP2 000013e7: SUB 000013e8: SWAP1 000013e9: REVERT 000013ea: JUMPDEST 000013eb: PUSH2 0x0954 000013ee: DUP4 000013ef: DUP4 000013f0: DUP4 000013f1: PUSH2 0x1148 000013f4: JUMP 000013f5: JUMPDEST 000013f6: PUSH1 0x01 000013f8: DUP1 000013f9: SLOAD 000013fa: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 0000141b: AND 0000141c: SWAP1 0000141d: SSTORE 0000141e: PUSH2 0x0aaa 00001421: DUP2 00001422: PUSH2 0x107f 00001425: JUMP 00001426: JUMPDEST 00001427: PUSH1 0x00 00001429: PUSH2 0x1431 0000142c: DUP3 0000142d: PUSH2 0x129e 00001430: JUMP 00001431: JUMPDEST 00001432: SWAP1 00001433: POP 00001434: DUP3 00001435: DUP2 00001436: LT 00001437: PUSH2 0x1451 0000143a: JUMPI 0000143b: TIMESTAMP 0000143c: DUP3 0000143d: SSTORE 0000143e: PUSH2 0x1447 00001441: DUP4 00001442: DUP3 00001443: PUSH2 0x1aaf 00001446: JUMP 00001447: JUMPDEST 00001448: PUSH1 0x03 0000144a: DUP4 0000144b: ADD 0000144c: SSTORE 0000144d: POP 0000144e: POP 0000144f: POP 00001450: JUMP 00001451: JUMPDEST 00001452: PUSH1 0x40 00001454: MLOAD 00001455: PUSH32 0x47ebad2000000000000000000000000000000000000000000000000000000000 00001476: DUP2 00001477: MSTORE 00001478: PUSH1 0x04 0000147a: ADD 0000147b: PUSH1 0x40 0000147d: MLOAD 0000147e: DUP1 0000147f: SWAP2 00001480: SUB 00001481: SWAP1 00001482: REVERT 00001483: JUMPDEST 00001484: PUSH1 0x00 00001486: PUSH1 0x40 00001488: MLOAD 00001489: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000 000014aa: DUP2 000014ab: MSTORE 000014ac: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014c1: DUP6 000014c2: AND 000014c3: PUSH1 0x04 000014c5: DUP3 000014c6: ADD 000014c7: MSTORE 000014c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014dd: DUP5 000014de: AND 000014df: PUSH1 0x24 000014e1: DUP3 000014e2: ADD 000014e3: MSTORE 000014e4: DUP3 000014e5: PUSH1 0x44 000014e7: DUP3 000014e8: ADD 000014e9: MSTORE 000014ea: PUSH1 0x20 000014ec: PUSH1 0x00 000014ee: PUSH1 0x64 000014f0: DUP4 000014f1: PUSH1 0x00 000014f3: DUP11 000014f4: GAS 000014f5: CALL 000014f6: RETURNDATASIZE 000014f7: ISZERO 000014f8: PUSH1 0x1f 000014fa: RETURNDATASIZE 000014fb: GT 000014fc: PUSH1 0x01 000014fe: PUSH1 0x00 00001500: MLOAD 00001501: EQ 00001502: AND 00001503: OR 00001504: AND 00001505: SWAP2 00001506: POP 00001507: POP 00001508: DUP1 00001509: PUSH2 0x156e 0000150c: JUMPI 0000150d: PUSH1 0x40 0000150f: MLOAD 00001510: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001531: DUP2 00001532: MSTORE 00001533: PUSH1 0x20 00001535: PUSH1 0x04 00001537: DUP3 00001538: ADD 00001539: MSTORE 0000153a: PUSH1 0x14 0000153c: PUSH1 0x24 0000153e: DUP3 0000153f: ADD 00001540: MSTORE 00001541: PUSH32 0x5452414e534645525f46524f4d5f4641494c4544000000000000000000000000 00001562: PUSH1 0x44 00001564: DUP3 00001565: ADD 00001566: MSTORE 00001567: PUSH1 0x64 00001569: ADD 0000156a: PUSH2 0x0a98 0000156d: JUMP 0000156e: JUMPDEST 0000156f: POP 00001570: POP 00001571: POP 00001572: POP 00001573: POP 00001574: JUMP 00001575: JUMPDEST 00001576: PUSH1 0x00 00001578: DUP1 00001579: PUSH1 0x00 0000157b: DUP1 0000157c: PUSH1 0x00 0000157e: DUP6 0000157f: DUP8 00001580: GAS 00001581: CALL 00001582: SWAP1 00001583: POP 00001584: DUP1 00001585: PUSH2 0x0954 00001588: JUMPI 00001589: PUSH1 0x40 0000158b: MLOAD 0000158c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000015ad: DUP2 000015ae: MSTORE 000015af: PUSH1 0x20 000015b1: PUSH1 0x04 000015b3: DUP3 000015b4: ADD 000015b5: MSTORE 000015b6: PUSH1 0x13 000015b8: PUSH1 0x24 000015ba: DUP3 000015bb: ADD 000015bc: MSTORE 000015bd: PUSH32 0x4554485f5452414e534645525f4641494c454400000000000000000000000000 000015de: PUSH1 0x44 000015e0: DUP3 000015e1: ADD 000015e2: MSTORE 000015e3: PUSH1 0x64 000015e5: ADD 000015e6: PUSH2 0x0a98 000015e9: JUMP 000015ea: JUMPDEST 000015eb: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 0000160c: PUSH1 0x00 0000160e: MSTORE 0000160f: PUSH1 0x41 00001611: PUSH1 0x04 00001613: MSTORE 00001614: PUSH1 0x24 00001616: PUSH1 0x00 00001618: REVERT 00001619: JUMPDEST 0000161a: PUSH1 0x00 0000161c: PUSH1 0x20 0000161e: DUP3 0000161f: DUP5 00001620: SUB 00001621: SLT 00001622: ISZERO 00001623: PUSH2 0x162b 00001626: JUMPI 00001627: PUSH1 0x00 00001629: DUP1 0000162a: REVERT 0000162b: JUMPDEST 0000162c: DUP2 0000162d: CALLDATALOAD 0000162e: PUSH8 0xffffffffffffffff 00001637: DUP1 00001638: DUP3 00001639: GT 0000163a: ISZERO 0000163b: PUSH2 0x1643 0000163e: JUMPI 0000163f: PUSH1 0x00 00001641: DUP1 00001642: REVERT 00001643: JUMPDEST 00001644: DUP2 00001645: DUP5 00001646: ADD 00001647: SWAP2 00001648: POP 00001649: DUP5 0000164a: PUSH1 0x1f 0000164c: DUP4 0000164d: ADD 0000164e: SLT 0000164f: PUSH2 0x1657 00001652: JUMPI 00001653: PUSH1 0x00 00001655: DUP1 00001656: REVERT 00001657: JUMPDEST 00001658: DUP2 00001659: CALLDATALOAD 0000165a: DUP2 0000165b: DUP2 0000165c: GT 0000165d: ISZERO 0000165e: PUSH2 0x1669 00001661: JUMPI 00001662: PUSH2 0x1669 00001665: PUSH2 0x15ea 00001668: JUMP 00001669: JUMPDEST 0000166a: PUSH1 0x40 0000166c: MLOAD 0000166d: PUSH1 0x1f 0000166f: DUP3 00001670: ADD 00001671: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001692: SWAP1 00001693: DUP2 00001694: AND 00001695: PUSH1 0x3f 00001697: ADD 00001698: AND 00001699: DUP2 0000169a: ADD 0000169b: SWAP1 0000169c: DUP4 0000169d: DUP3 0000169e: GT 0000169f: DUP2 000016a0: DUP4 000016a1: LT 000016a2: OR 000016a3: ISZERO 000016a4: PUSH2 0x16af 000016a7: JUMPI 000016a8: PUSH2 0x16af 000016ab: PUSH2 0x15ea 000016ae: JUMP 000016af: JUMPDEST 000016b0: DUP2 000016b1: PUSH1 0x40 000016b3: MSTORE 000016b4: DUP3 000016b5: DUP2 000016b6: MSTORE 000016b7: DUP8 000016b8: PUSH1 0x20 000016ba: DUP5 000016bb: DUP8 000016bc: ADD 000016bd: ADD 000016be: GT 000016bf: ISZERO 000016c0: PUSH2 0x16c8 000016c3: JUMPI 000016c4: PUSH1 0x00 000016c6: DUP1 000016c7: REVERT 000016c8: JUMPDEST 000016c9: DUP3 000016ca: PUSH1 0x20 000016cc: DUP7 000016cd: ADD 000016ce: PUSH1 0x20 000016d0: DUP4 000016d1: ADD 000016d2: CALLDATACOPY 000016d3: PUSH1 0x00 000016d5: SWAP3 000016d6: DUP2 000016d7: ADD 000016d8: PUSH1 0x20 000016da: ADD 000016db: SWAP3 000016dc: SWAP1 000016dd: SWAP3 000016de: MSTORE 000016df: POP 000016e0: SWAP6 000016e1: SWAP5 000016e2: POP 000016e3: POP 000016e4: POP 000016e5: POP 000016e6: POP 000016e7: JUMP 000016e8: JUMPDEST 000016e9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016fe: DUP2 000016ff: AND 00001700: DUP2 00001701: EQ 00001702: PUSH2 0x0aaa 00001705: JUMPI 00001706: PUSH1 0x00 00001708: DUP1 00001709: REVERT 0000170a: JUMPDEST 0000170b: PUSH1 0x00 0000170d: DUP1 0000170e: PUSH1 0x40 00001710: DUP4 00001711: DUP6 00001712: SUB 00001713: SLT 00001714: ISZERO 00001715: PUSH2 0x171d 00001718: JUMPI 00001719: PUSH1 0x00 0000171b: DUP1 0000171c: REVERT 0000171d: JUMPDEST 0000171e: DUP3 0000171f: CALLDATALOAD 00001720: PUSH2 0x1728 00001723: DUP2 00001724: PUSH2 0x16e8 00001727: JUMP 00001728: JUMPDEST 00001729: SWAP2 0000172a: POP 0000172b: PUSH1 0x20 0000172d: DUP4 0000172e: ADD 0000172f: CALLDATALOAD 00001730: PUSH2 0x1738 00001733: DUP2 00001734: PUSH2 0x16e8 00001737: JUMP 00001738: JUMPDEST 00001739: DUP1 0000173a: SWAP2 0000173b: POP 0000173c: POP 0000173d: SWAP3 0000173e: POP 0000173f: SWAP3 00001740: SWAP1 00001741: POP 00001742: JUMP 00001743: JUMPDEST 00001744: PUSH1 0x00 00001746: DUP1 00001747: PUSH1 0x20 00001749: DUP4 0000174a: DUP6 0000174b: SUB 0000174c: SLT 0000174d: ISZERO 0000174e: PUSH2 0x1756 00001751: JUMPI 00001752: PUSH1 0x00 00001754: DUP1 00001755: REVERT 00001756: JUMPDEST 00001757: DUP3 00001758: CALLDATALOAD 00001759: PUSH8 0xffffffffffffffff 00001762: DUP1 00001763: DUP3 00001764: GT 00001765: ISZERO 00001766: PUSH2 0x176e 00001769: JUMPI 0000176a: PUSH1 0x00 0000176c: DUP1 0000176d: REVERT 0000176e: JUMPDEST 0000176f: DUP2 00001770: DUP6 00001771: ADD 00001772: SWAP2 00001773: POP 00001774: DUP6 00001775: PUSH1 0x1f 00001777: DUP4 00001778: ADD 00001779: SLT 0000177a: PUSH2 0x1782 0000177d: JUMPI 0000177e: PUSH1 0x00 00001780: DUP1 00001781: REVERT 00001782: JUMPDEST 00001783: DUP2 00001784: CALLDATALOAD 00001785: DUP2 00001786: DUP2 00001787: GT 00001788: ISZERO 00001789: PUSH2 0x1791 0000178c: JUMPI 0000178d: PUSH1 0x00 0000178f: DUP1 00001790: REVERT 00001791: JUMPDEST 00001792: DUP7 00001793: PUSH1 0x20 00001795: DUP3 00001796: PUSH1 0x07 00001798: SHL 00001799: DUP6 0000179a: ADD 0000179b: ADD 0000179c: GT 0000179d: ISZERO 0000179e: PUSH2 0x17a6 000017a1: JUMPI 000017a2: PUSH1 0x00 000017a4: DUP1 000017a5: REVERT 000017a6: JUMPDEST 000017a7: PUSH1 0x20 000017a9: SWAP3 000017aa: SWAP1 000017ab: SWAP3 000017ac: ADD 000017ad: SWAP7 000017ae: SWAP2 000017af: SWAP6 000017b0: POP 000017b1: SWAP1 000017b2: SWAP4 000017b3: POP 000017b4: POP 000017b5: POP 000017b6: POP 000017b7: JUMP 000017b8: JUMPDEST 000017b9: PUSH1 0x00 000017bb: PUSH1 0x20 000017bd: DUP3 000017be: DUP5 000017bf: SUB 000017c0: SLT 000017c1: ISZERO 000017c2: PUSH2 0x17ca 000017c5: JUMPI 000017c6: PUSH1 0x00 000017c8: DUP1 000017c9: REVERT 000017ca: JUMPDEST 000017cb: DUP2 000017cc: CALLDATALOAD 000017cd: PUSH2 0x0b3f 000017d0: DUP2 000017d1: PUSH2 0x16e8 000017d4: JUMP 000017d5: JUMPDEST 000017d6: PUSH1 0x00 000017d8: DUP1 000017d9: PUSH1 0x00 000017db: PUSH1 0x60 000017dd: DUP5 000017de: DUP7 000017df: SUB 000017e0: SLT 000017e1: ISZERO 000017e2: PUSH2 0x17ea 000017e5: JUMPI 000017e6: PUSH1 0x00 000017e8: DUP1 000017e9: REVERT 000017ea: JUMPDEST 000017eb: DUP4 000017ec: CALLDATALOAD 000017ed: PUSH2 0x17f5 000017f0: DUP2 000017f1: PUSH2 0x16e8 000017f4: JUMP 000017f5: JUMPDEST 000017f6: SWAP3 000017f7: POP 000017f8: PUSH1 0x20 000017fa: DUP5 000017fb: ADD 000017fc: CALLDATALOAD 000017fd: PUSH2 0x1805 00001800: DUP2 00001801: PUSH2 0x16e8 00001804: JUMP 00001805: JUMPDEST 00001806: SWAP3 00001807: SWAP6 00001808: SWAP3 00001809: SWAP5 0000180a: POP 0000180b: POP 0000180c: POP 0000180d: PUSH1 0x40 0000180f: SWAP2 00001810: SWAP1 00001811: SWAP2 00001812: ADD 00001813: CALLDATALOAD 00001814: SWAP1 00001815: JUMP 00001816: JUMPDEST 00001817: PUSH1 0x00 00001819: DUP1 0000181a: PUSH1 0x40 0000181c: DUP4 0000181d: DUP6 0000181e: SUB 0000181f: SLT 00001820: ISZERO 00001821: PUSH2 0x1829 00001824: JUMPI 00001825: PUSH1 0x00 00001827: DUP1 00001828: REVERT 00001829: JUMPDEST 0000182a: DUP3 0000182b: CALLDATALOAD 0000182c: PUSH2 0x1834 0000182f: DUP2 00001830: PUSH2 0x16e8 00001833: JUMP 00001834: JUMPDEST 00001835: SWAP5 00001836: PUSH1 0x20 00001838: SWAP4 00001839: SWAP1 0000183a: SWAP4 0000183b: ADD 0000183c: CALLDATALOAD 0000183d: SWAP4 0000183e: POP 0000183f: POP 00001840: POP 00001841: JUMP 00001842: JUMPDEST 00001843: PUSH1 0x00 00001845: DUP1 00001846: PUSH1 0x00 00001848: DUP1 00001849: PUSH1 0x80 0000184b: DUP6 0000184c: DUP8 0000184d: SUB 0000184e: SLT 0000184f: ISZERO 00001850: PUSH2 0x1858 00001853: JUMPI 00001854: PUSH1 0x00 00001856: DUP1 00001857: REVERT 00001858: JUMPDEST 00001859: DUP5 0000185a: CALLDATALOAD 0000185b: PUSH2 0x1863 0000185e: DUP2 0000185f: PUSH2 0x16e8 00001862: JUMP 00001863: JUMPDEST 00001864: SWAP4 00001865: POP 00001866: PUSH1 0x20 00001868: DUP6 00001869: ADD 0000186a: CALLDATALOAD 0000186b: SWAP3 0000186c: POP 0000186d: PUSH1 0x40 0000186f: DUP6 00001870: ADD 00001871: CALLDATALOAD 00001872: SWAP2 00001873: POP 00001874: PUSH1 0x60 00001876: DUP6 00001877: ADD 00001878: CALLDATALOAD 00001879: PUSH2 0x1881 0000187c: DUP2 0000187d: PUSH2 0x16e8 00001880: JUMP 00001881: JUMPDEST 00001882: SWAP4 00001883: SWAP7 00001884: SWAP3 00001885: SWAP6 00001886: POP 00001887: SWAP1 00001888: SWAP4 00001889: POP 0000188a: POP 0000188b: JUMP 0000188c: JUMPDEST 0000188d: PUSH1 0x00 0000188f: DUP1 00001890: PUSH1 0x40 00001892: DUP4 00001893: DUP6 00001894: SUB 00001895: SLT 00001896: ISZERO 00001897: PUSH2 0x189f 0000189a: JUMPI 0000189b: PUSH1 0x00 0000189d: DUP1 0000189e: REVERT 0000189f: JUMPDEST 000018a0: DUP3 000018a1: MLOAD 000018a2: PUSH2 0x18aa 000018a5: DUP2 000018a6: PUSH2 0x16e8 000018a9: JUMP 000018aa: JUMPDEST 000018ab: PUSH1 0x20 000018ad: SWAP4 000018ae: SWAP1 000018af: SWAP4 000018b0: ADD 000018b1: MLOAD 000018b2: SWAP3 000018b3: SWAP5 000018b4: SWAP3 000018b5: SWAP4 000018b6: POP 000018b7: POP 000018b8: POP 000018b9: JUMP 000018ba: JUMPDEST 000018bb: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 000018dc: PUSH1 0x00 000018de: MSTORE 000018df: PUSH1 0x11 000018e1: PUSH1 0x04 000018e3: MSTORE 000018e4: PUSH1 0x24 000018e6: PUSH1 0x00 000018e8: REVERT 000018e9: JUMPDEST 000018ea: PUSH1 0x00 000018ec: DUP3 000018ed: NOT 000018ee: DUP3 000018ef: GT 000018f0: ISZERO 000018f1: PUSH2 0x18fc 000018f4: JUMPI 000018f5: PUSH2 0x18fc 000018f8: PUSH2 0x18ba 000018fb: JUMP 000018fc: JUMPDEST 000018fd: POP 000018fe: ADD 000018ff: SWAP1 00001900: JUMP 00001901: JUMPDEST 00001902: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00001923: PUSH1 0x00 00001925: MSTORE 00001926: PUSH1 0x32 00001928: PUSH1 0x04 0000192a: MSTORE 0000192b: PUSH1 0x24 0000192d: PUSH1 0x00 0000192f: REVERT 00001930: JUMPDEST 00001931: DUP1 00001932: CALLDATALOAD 00001933: DUP1 00001934: ISZERO 00001935: ISZERO 00001936: DUP2 00001937: EQ 00001938: PUSH2 0x1940 0000193b: JUMPI 0000193c: PUSH1 0x00 0000193e: DUP1 0000193f: REVERT 00001940: JUMPDEST 00001941: SWAP2 00001942: SWAP1 00001943: POP 00001944: JUMP 00001945: JUMPDEST 00001946: PUSH1 0x00 00001948: PUSH1 0x20 0000194a: DUP3 0000194b: DUP5 0000194c: SUB 0000194d: SLT 0000194e: ISZERO 0000194f: PUSH2 0x1957 00001952: JUMPI 00001953: PUSH1 0x00 00001955: DUP1 00001956: REVERT 00001957: JUMPDEST 00001958: PUSH2 0x0b3f 0000195b: DUP3 0000195c: PUSH2 0x1930 0000195f: JUMP 00001960: JUMPDEST 00001961: PUSH1 0x00 00001963: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001984: DUP3 00001985: SUB 00001986: PUSH2 0x1991 00001989: JUMPI 0000198a: PUSH2 0x1991 0000198d: PUSH2 0x18ba 00001990: JUMP 00001991: JUMPDEST 00001992: POP 00001993: PUSH1 0x01 00001995: ADD 00001996: SWAP1 00001997: JUMP 00001998: JUMPDEST 00001999: PUSH1 0x20 0000199b: DUP1 0000199c: DUP3 0000199d: MSTORE 0000199e: DUP2 0000199f: DUP2 000019a0: ADD 000019a1: DUP4 000019a2: SWAP1 000019a3: MSTORE 000019a4: PUSH1 0x00 000019a6: SWAP1 000019a7: PUSH1 0x40 000019a9: DUP1 000019aa: DUP5 000019ab: ADD 000019ac: DUP7 000019ad: DUP5 000019ae: JUMPDEST 000019af: DUP8 000019b0: DUP2 000019b1: LT 000019b2: ISZERO 000019b3: PUSH2 0x1a0e 000019b6: JUMPI 000019b7: PUSH2 0x19bf 000019ba: DUP3 000019bb: PUSH2 0x1930 000019be: JUMP 000019bf: JUMPDEST 000019c0: ISZERO 000019c1: ISZERO 000019c2: DUP4 000019c3: MSTORE 000019c4: DUP5 000019c5: DUP3 000019c6: ADD 000019c7: CALLDATALOAD 000019c8: PUSH2 0x19d0 000019cb: DUP2 000019cc: PUSH2 0x16e8 000019cf: JUMP 000019d0: JUMPDEST 000019d1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019e6: AND 000019e7: DUP4 000019e8: DUP7 000019e9: ADD 000019ea: MSTORE 000019eb: DUP2 000019ec: DUP5 000019ed: ADD 000019ee: CALLDATALOAD 000019ef: DUP5 000019f0: DUP5 000019f1: ADD 000019f2: MSTORE 000019f3: PUSH1 0x60 000019f5: DUP1 000019f6: DUP4 000019f7: ADD 000019f8: CALLDATALOAD 000019f9: SWAP1 000019fa: DUP5 000019fb: ADD 000019fc: MSTORE 000019fd: PUSH1 0x80 000019ff: SWAP3 00001a00: DUP4 00001a01: ADD 00001a02: SWAP3 00001a03: SWAP1 00001a04: SWAP2 00001a05: ADD 00001a06: SWAP1 00001a07: PUSH1 0x01 00001a09: ADD 00001a0a: PUSH2 0x19ae 00001a0d: JUMP 00001a0e: JUMPDEST 00001a0f: POP 00001a10: SWAP1 00001a11: SWAP8 00001a12: SWAP7 00001a13: POP 00001a14: POP 00001a15: POP 00001a16: POP 00001a17: POP 00001a18: POP 00001a19: POP 00001a1a: JUMP 00001a1b: JUMPDEST 00001a1c: PUSH1 0x00 00001a1e: PUSH1 0x20 00001a20: DUP3 00001a21: DUP5 00001a22: SUB 00001a23: SLT 00001a24: ISZERO 00001a25: PUSH2 0x1a2d 00001a28: JUMPI 00001a29: PUSH1 0x00 00001a2b: DUP1 00001a2c: REVERT 00001a2d: JUMPDEST 00001a2e: POP 00001a2f: MLOAD 00001a30: SWAP2 00001a31: SWAP1 00001a32: POP 00001a33: JUMP 00001a34: JUMPDEST 00001a35: DUP3 00001a36: DUP2 00001a37: MSTORE 00001a38: PUSH1 0x00 00001a3a: PUSH1 0x20 00001a3c: PUSH1 0x40 00001a3e: DUP2 00001a3f: DUP5 00001a40: ADD 00001a41: MSTORE 00001a42: DUP4 00001a43: MLOAD 00001a44: DUP1 00001a45: PUSH1 0x40 00001a47: DUP6 00001a48: ADD 00001a49: MSTORE 00001a4a: PUSH1 0x00 00001a4c: JUMPDEST 00001a4d: DUP2 00001a4e: DUP2 00001a4f: LT 00001a50: ISZERO 00001a51: PUSH2 0x1a68 00001a54: JUMPI 00001a55: DUP6 00001a56: DUP2 00001a57: ADD 00001a58: DUP4 00001a59: ADD 00001a5a: MLOAD 00001a5b: DUP6 00001a5c: DUP3 00001a5d: ADD 00001a5e: PUSH1 0x60 00001a60: ADD 00001a61: MSTORE 00001a62: DUP3 00001a63: ADD 00001a64: PUSH2 0x1a4c 00001a67: JUMP 00001a68: JUMPDEST 00001a69: DUP2 00001a6a: DUP2 00001a6b: GT 00001a6c: ISZERO 00001a6d: PUSH2 0x1a7a 00001a70: JUMPI 00001a71: PUSH1 0x00 00001a73: PUSH1 0x60 00001a75: DUP4 00001a76: DUP8 00001a77: ADD 00001a78: ADD 00001a79: MSTORE 00001a7a: JUMPDEST 00001a7b: POP 00001a7c: PUSH1 0x1f 00001a7e: ADD 00001a7f: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001aa0: AND 00001aa1: SWAP3 00001aa2: SWAP1 00001aa3: SWAP3 00001aa4: ADD 00001aa5: PUSH1 0x60 00001aa7: ADD 00001aa8: SWAP5 00001aa9: SWAP4 00001aaa: POP 00001aab: POP 00001aac: POP 00001aad: POP 00001aae: JUMP 00001aaf: JUMPDEST 00001ab0: PUSH1 0x00 00001ab2: DUP3 00001ab3: DUP3 00001ab4: LT 00001ab5: ISZERO 00001ab6: PUSH2 0x1ac1 00001ab9: JUMPI 00001aba: PUSH2 0x1ac1 00001abd: PUSH2 0x18ba 00001ac0: JUMP 00001ac1: JUMPDEST 00001ac2: POP 00001ac3: SUB 00001ac4: SWAP1 00001ac5: JUMP 00001ac6: JUMPDEST 00001ac7: PUSH1 0x00 00001ac9: DUP2 00001aca: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001aeb: DIV 00001aec: DUP4 00001aed: GT 00001aee: DUP3 00001aef: ISZERO 00001af0: ISZERO 00001af1: AND 00001af2: ISZERO 00001af3: PUSH2 0x1afe 00001af6: JUMPI 00001af7: PUSH2 0x1afe 00001afa: PUSH2 0x18ba 00001afd: JUMP 00001afe: JUMPDEST 00001aff: POP 00001b00: MUL 00001b01: SWAP1 00001b02: JUMP 00001b03: INVALID 00001b04: LOG2 00001b05: PUSH5 0x6970667358 00001b0b: UNKNOWN(0x22) 00001b0c: SLT 00001b0d: KECCAK256 00001b0e: UNKNOWN(0xB7) 00001b0f: KECCAK256 00001b10: CODECOPY 00001b11: UNKNOWN(0xDC) 00001b12: UNKNOWN(0xD3) 00001b13: UNKNOWN(0xAE) 00001b14: UNKNOWN(0xCA) 00001b15: UNKNOWN(0xD4) 00001b16: UNKNOWN(0x22) 00001b17: UNKNOWN(0xBF) 00001b18: UNKNOWN(0x4F) 00001b19: PUSH0 00001b1a: DUP14 00001b1b: PUSH3 0x6e8d46 00001b1f: LOG4 00001b20: UNKNOWN(0xD5) 00001b21: UNKNOWN(0xDC) 00001b22: PUSH24
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | access_control | codex | MintableToken allows unrestricted mint/burn, enabling collateral drain if used as the app-chain token | 85 | no | — |
viewevidence_json{
"evidence": "MintableToken.mint() and MintableToken.burn() are external and lack any access control modifiers.",
"locations": [
"contracts/contracts/superbridge/MintableToken.sol:19",
"contracts/contracts/superbridge/MintableToken.sol:23"
],
"recommendation": "Restrict mint/burn to the Controller (or a dedicated minter role) and ensure MintableToken is never deployed in production. Prefer a mintable token with explicit access control and an allowlisted minter.",
"exploit_scenario": "If the system is deployed using MintableToken as the bridge-minted asset, any attacker can call mint() to create arbitrary tokens, then call Controller.withdrawFromAppChain() to burn those tokens and unlock real assets from the Vault on the other chain, draining collateral without providing any locked backing."
}
|
| medium | math | codex | Deposit path assumes full transfer amount; fee-on-transfer tokens cause under-collateralized minting | 75 | no | — |
viewevidence_json{
"evidence": "Vault.depositToAppChain() transfers amount_ and forwards amount_ in the outbound payload without checking the actual received amount; Controller.receiveInbound() trusts lockAmount from the payload for accounting and minting.",
"locations": [
"contracts/contracts/superbridge/Vault.sol:87",
"contracts/contracts/superbridge/Vault.sol:100",
"contracts/contracts/superbridge/Vault.sol:102",
"contracts/contracts/superbridge/Controller.sol:175",
"contracts/contracts/superbridge/Controller.sol:181"
],
"recommendation": "Compute the actual received amount via balance-before/balance-after and send that amount in the payload. Alternatively, explicitly reject fee-on-transfer tokens and enforce that the Vault\u2019s balance increases by amount_.",
"exploit_scenario": "With a fee-on-transfer or deflationary token, Vault.depositToAppChain() forwards the user-supplied amount_ in the payload even if the Vault receives fewer tokens. The Controller mints based on this reported lockAmount, allowing an attacker to mint more on the app chain than was actually locked and later redeem the full amount, extracting value from the Vault."
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xbb2bf6361089f7d74f73d9620d5c8dcf52408ab436b54766f926b49ca0950ab4
call_targets:
0x6d303cee7959f814042d31e0624fb88ec6fbcc1d
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xbb2bf6361089f7d74f73d9620d5c8dcf52408ab436b54766f926b49ca0950ab4",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x6d303cee7959f814042d31e0624fb88ec6fbcc1d"
],
"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": "0xe30c3978",
"selector": "0xe30c3978",
"calldata_variants": [
"0xe30c3978",
"0xe30c39780000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2b7c5cd",
"selector": "0xf2b7c5cd",
"calldata_variants": [
"0xf2b7c5cd",
"0xf2b7c5cd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9b4cd940",
"selector": "0x9b4cd940",
"calldata_variants": [
"0x9b4cd940",
"0x9b4cd9400000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x79ba5097",
"selector": "0x79ba5097",
"calldata_variants": [
"0x79ba5097",
"0x79ba50970000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8367080f",
"selector": "0x8367080f",
"calldata_variants": [
"0x8367080f",
"0x8367080f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x84f289cc",
"selector": "0x84f289cc",
"calldata_variants": [
"0x84f289cc",
"0x84f289cc0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3355,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4510,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5365,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 4,
"guards_detected": [
{
"pc": 2551,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"untrusted_call_count": 4
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xbb2bf6361089f7d74f73d9620d5c8dcf52408ab436b54766f926b49ca0950ab4
call_targets:
0x6d303cee7959f814042d31e0624fb88ec6fbcc1d
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xbb2bf6361089f7d74f73d9620d5c8dcf52408ab436b54766f926b49ca0950ab4",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x6d303cee7959f814042d31e0624fb88ec6fbcc1d"
],
"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": "0xe30c3978",
"selector": "0xe30c3978",
"calldata_variants": [
"0xe30c3978",
"0xe30c39780000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2b7c5cd",
"selector": "0xf2b7c5cd",
"calldata_variants": [
"0xf2b7c5cd",
"0xf2b7c5cd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9b4cd940",
"selector": "0x9b4cd940",
"calldata_variants": [
"0x9b4cd940",
"0x9b4cd9400000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x79ba5097",
"selector": "0x79ba5097",
"calldata_variants": [
"0x79ba5097",
"0x79ba50970000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x8367080f",
"selector": "0x8367080f",
"calldata_variants": [
"0x8367080f",
"0x8367080f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x84f289cc",
"selector": "0x84f289cc",
"calldata_variants": [
"0x84f289cc",
"0x84f289cc0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3355,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4510,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5365,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 4,
"guards_detected": [
{
"pc": 2551,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
]
}
|