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

Analysis Run

57893a6f-7c59-4454-928f-4e100bf02a14

complete
Chain ID
1
Address
Block Number
Created
Sun, Dec 28, 2025 1:33 AM
Review Summary

What survived the funnel

Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?

Confirmed
0
Validated
0
Source
Verified
Review Backing
Present
Best current signal
Untrusted CALL target/value reachable
crit 0 high 0 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
30259 report.consolidate complete 1 / 1 3 months ago
73738 artifact.fetch complete 1 / 3 1 week ago
73739 tool.cast_disasm complete 1 / 3 1 week ago
73740 analysis.bundle complete 1 / 3 1 week ago
73741 capability.graph complete 1 / 3 1 week ago
73742 detector.run complete 1 / 3 1 week ago
73743 validation.fork complete 1 / 3 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
3
No findings?
no
Summary
Found 3 issues: 1 medium accounting bug that can lock pending funds, and 2 low-severity issues around unchecked transfers and permit signature fragility.
View stderr
[codex:1084535] OpenAI Codex v0.77.0 (research preview)
[codex:1084535] --------
[codex:1084535] workdir: /tmp/codex-multi-jjdlf1zy
[codex:1084535] model: gpt-5.2-codex
[codex:1084535] provider: openai
[codex:1084535] approval: never
[codex:1084535] sandbox: read-only
[codex:1084535] reasoning effort: xhigh
[codex:1084535] reasoning summaries: auto
[codex:1084535] session id: 019b628a-8ca9-7103-ab0c-695bad1e7ca8
[codex:1084535] --------
[codex:1084535] user
[codex:1084535] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1084535] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1084535] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1084535] 
[codex:1084535] Scope rules:
[codex:1084535] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1084535] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1084535] 
[codex:1084535] Output MUST be valid JSON matching the provided schema.
[codex:1084535] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1084535] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1084535] 
[codex:1084535] Output constraints (IMPORTANT):
[codex:1084535] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1084535] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1084535] mcp startup: no servers
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Checking for skills and reading AUDIT_BUNDLE.txt**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc ls in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] AUDIT_BUNDLE.txt
[codex:1084535] codex-output-schema.json
[codex:1084535] contracts
[codex:1084535] exec
[codex:1084535] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1084535] 
[codex:1084535] ================================================================================
[codex:1084535] FILE: contracts/contracts/ConnectorPlug.sol
[codex:1084535] ================================================================================
[codex:1084535] // SPDX-License-Identifier: MIT
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "./utils/RescueBase.sol";
[codex:1084535] import {ISocket} from "./interfaces/ISocket.sol";
[codex:1084535] import {IPlug} from "./interfaces/IPlug.sol";
[codex:1084535] import {IConnector} from "./interfaces/IConnector.sol";
[codex:1084535] import {IBridge} from "./interfaces/IBridge.sol";
[codex:1084535] import "./common/Errors.sol";
[codex:1084535] 
[codex:1084535] contract ConnectorPlug is IConnector, IPlug, RescueBase {
[codex:1084535]     IBridge public immutable bridge__;
[codex:1084535]     ISocket public immutable socket__;
[codex:1084535]     uint32 public immutable siblingChainSlug;
[codex:1084535]     uint256 public messageIdPart;
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Planning full audit bundle analysis**
[codex:1084535] 
[codex:1084535] I need to read the entire AUDIT_BUNDLE.txt to analyze it properly, despite earlier truncated output. I'll use tools like sed and ripgrep to segment and search through the file, aiming to identify contracts and relevant lines to check for vulnerabilities such as reentrancy and access control issues.
[codex:1084535] exec
[codex:1084535] /bin/bash -lc 'rg -n "''^FILE:" AUDIT_BUNDLE.txt' in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] 4:FILE: contracts/contracts/ConnectorPlug.sol
[codex:1084535] 126:FILE: contracts/contracts/bridge/Base.sol
[codex:1084535] 467:FILE: contracts/contracts/bridge/Controller.sol
[codex:1084535] 585:FILE: contracts/contracts/bridge/FiatTokenV2_1/FiatTokenV2_1_Controller.sol
[codex:1084535] 606:FILE: contracts/contracts/bridge/FiatTokenV2_1/IFiatTokenV2_1_Mintable.sol
[codex:1084535] 621:FILE: contracts/contracts/bridge/Vault.sol
[codex:1084535] 752:FILE: contracts/contracts/common/Constants.sol
[codex:1084535] 776:FILE: contracts/contracts/common/Errors.sol
[codex:1084535] 807:FILE: contracts/contracts/common/Structs.sol
[codex:1084535] 876:FILE: contracts/contracts/hooks/Controller_YieldLimitExecHook.sol
[codex:1084535] 1177:FILE: contracts/contracts/hooks/HookBase.sol
[codex:1084535] 1215:FILE: contracts/contracts/hooks/LimitExecutionHook.sol
[codex:1084535] 1471:FILE: contracts/contracts/hooks/LimitHook.sol
[codex:1084535] 1674:FILE: contracts/contracts/hooks/Vault_YieldLimitExecHook.sol
[codex:1084535] 2045:FILE: contracts/contracts/hooks/plugins/ConnectorPoolPlugin.sol
[codex:1084535] 2106:FILE: contracts/contracts/hooks/plugins/ExecutionHelper.sol
[codex:1084535] 2168:FILE: contracts/contracts/hooks/plugins/LimitPlugin.sol
[codex:1084535] 2293:FILE: contracts/contracts/interfaces/IBridge.sol
[codex:1084535] 2316:FILE: contracts/contracts/interfaces/IConnector.sol
[codex:1084535] 2338:FILE: contracts/contracts/interfaces/IController.sol
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Preparing to audit first-party contracts**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/bridge/Controller.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "./Base.sol";
[codex:1084535] 
[codex:1084535] contract Controller is Base {
[codex:1084535]     uint256 public totalMinted;
[codex:1084535] 
[codex:1084535]     constructor(address token_) Base(token_) {
[codex:1084535]         bridgeType = NORMAL_CONTROLLER;
[codex:1084535]     }
[codex:1084535] 
[codex:1084535]     /**
[codex:1084535]      * @notice Bridges tokens between chains.
[codex:1084535]      * @dev This function allows bridging tokens between different chains.
[codex:1084535]      * @param receiver_ The address to receive the bridged tokens.
[codex:1084535]      * @param amount_ The amount of tokens to bridge.
[codex:1084535]      * @param msgGasLimit_ The gas limit for the execution of the bridging process.
[codex:1084535]      * @param connector_ The address of the connector contract responsible for the bridge.
[codex:1084535]      * @param execPayload_ The payload for executing the bridging process on the connector.
[codex:1084535]      * @param options_ Additional options for the bridging process.
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Inspecting additional base files**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/bridge/Base.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import {IMintableERC20} from "../interfaces/IMintableERC20.sol";
[codex:1084535] import {IConnector} from "../interfaces/IConnector.sol";
[codex:1084535] import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1084535] import "../interfaces/IHook.sol";
[codex:1084535] import "../common/Errors.sol";
[codex:1084535] import "lib/solmate/src/utils/ReentrancyGuard.sol";
[codex:1084535] import "../interfaces/IBridge.sol";
[codex:1084535] import "../utils/RescueBase.sol";
[codex:1084535] import "../common/Constants.sol";
[codex:1084535] 
[codex:1084535] abstract contract Base is ReentrancyGuard, IBridge, RescueBase {
[codex:1084535]     address public immutable token;
[codex:1084535]     bytes32 public bridgeType;
[codex:1084535]     IHook public hook__;
[codex:1084535]     // message identifier => cache
[codex:1084535]     mapping(bytes32 => bytes) public identifierCache;
[codex:1084535] 
[codex:1084535]     // connector => cache
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '240,520p' contracts/contracts/bridge/Base.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535]                 )
[codex:1084535]             );
[codex:1084535] 
[codex:1084535]             identifierCache[messageId_] = cacheData.identifierCache;
[codex:1084535]             connectorCache[msg.sender] = cacheData.connectorCache;
[codex:1084535]         }
[codex:1084535] 
[codex:1084535]         emit TokensBridged(
[codex:1084535]             msg.sender,
[codex:1084535]             transferInfo_.receiver,
[codex:1084535]             transferInfo_.amount,
[codex:1084535]             messageId_
[codex:1084535]         );
[codex:1084535]     }
[codex:1084535] 
[codex:1084535]     /**
[codex:1084535]      * @notice Executes pre-retry operations before retrying a failed transaction.
[codex:1084535]      * @dev This internal function is called before retrying a failed transaction.
[codex:1084535]      * It validates the connector, retrieves cache data for the given message ID,
[codex:1084535]      * and executes the pre-retry hook if defined.
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Exploring Vault file**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/bridge/Vault.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "./Base.sol";
[codex:1084535] import "../interfaces/IConnector.sol";
[codex:1084535] import "lib/solmate/src/tokens/ERC20.sol";
[codex:1084535] 
[codex:1084535] /**
[codex:1084535]  * @title SuperToken
[codex:1084535]  * @notice A contract which enables bridging a token to its sibling chains.
[codex:1084535]  * @dev This contract implements ISuperTokenOrVault to support message bridging through IMessageBridge compliant contracts.
[codex:1084535]  */
[codex:1084535] contract Vault is Base {
[codex:1084535]     using SafeTransferLib for ERC20;
[codex:1084535] 
[codex:1084535]     // /**
[codex:1084535]     //  * @notice constructor for creating a new SuperTokenVault.
[codex:1084535]     //  * @param token_ token contract address which is to be bridged.
[codex:1084535]     //  */
[codex:1084535] 
[codex:1084535]     constructor(address token_) Base(token_) {
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Reviewing related contract files**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,220p' contracts/contracts/utils/AccessControl.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "./Ownable.sol";
[codex:1084535] 
[codex:1084535] /**
[codex:1084535]  * @title AccessControl
[codex:1084535]  * @dev This abstract contract implements access control mechanism based on roles.
[codex:1084535]  * Each role can have one or more addresses associated with it, which are granted
[codex:1084535]  * permission to execute functions with the onlyRole modifier.
[codex:1084535]  */
[codex:1084535] abstract contract AccessControl is Ownable {
[codex:1084535]     /**
[codex:1084535]      * @dev A mapping of roles to a mapping of addresses to boolean values indicating whether or not they have the role.
[codex:1084535]      */
[codex:1084535]     mapping(bytes32 => mapping(address => bool)) private _permits;
[codex:1084535] 
[codex:1084535]     /**
[codex:1084535]      * @dev Emitted when a role is granted to an address.
[codex:1084535]      */
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Identifying key concept**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/utils/Ownable.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] /**
[codex:1084535]  * @title Ownable
[codex:1084535]  * @dev The Ownable contract provides a simple way to manage ownership of a contract
[codex:1084535]  * and allows for ownership to be transferred to a nominated address.
[codex:1084535]  */
[codex:1084535] abstract contract Ownable {
[codex:1084535]     address private _owner;
[codex:1084535]     address private _nominee;
[codex:1084535] 
[codex:1084535]     event OwnerNominated(address indexed nominee);
[codex:1084535]     event OwnerClaimed(address indexed claimer);
[codex:1084535] 
[codex:1084535]     error OnlyOwner();
[codex:1084535]     error OnlyNominee();
[codex:1084535] 
[codex:1084535]     /**
[codex:1084535]      * @dev Sets the contract's owner to the address that is passed to the constructor.
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Identifying project name**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/utils/RescueBase.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: MIT
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] import {RescueFundsLib} from "../libraries/RescueFundsLib.sol";
[codex:1084535] import {AccessControl} from "./AccessControl.sol";
[codex:1084535] 
[codex:1084535] /**
[codex:1084535]  * @title Base contract for super token and vault
[codex:1084535]  * @notice It contains relevant execution payload storages.
[codex:1084535]  * @dev This contract implements Socket's IPlug to enable message bridging and IMessageBridge
[codex:1084535]  * to support any type of message bridge.
[codex:1084535]  */
[codex:1084535] abstract contract RescueBase is AccessControl {
[codex:1084535]     bytes32 constant RESCUE_ROLE = keccak256("RESCUE_ROLE");
[codex:1084535] 
[codex:1084535]     /**
[codex:1084535]      * @notice Rescues funds from the contract if they are locked by mistake.
[codex:1084535]      * @param token_ The address of the token contract.
[codex:1084535]      * @param rescueTo_ The address where rescued tokens need to be sent.
[codex:1084535]      * @param amount_ The amount of tokens to be rescued.
[codex:1084535]      */
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Reviewing additional contracts and modules**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/common/Errors.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] error SiblingNotSupported();
[codex:1084535] error NotAuthorized();
[codex:1084535] error NotBridge();
[codex:1084535] error NotSocket();
[codex:1084535] error ConnectorUnavailable();
[codex:1084535] error InvalidPoolId();
[codex:1084535] error CannotTransferOrExecuteOnBridgeContracts();
[codex:1084535] error NoPendingData();
[codex:1084535] error MessageIdMisMatched();
[codex:1084535] error NotMessageBridge();
[codex:1084535] error InvalidSiblingChainSlug();
[codex:1084535] error InvalidTokenContract();
[codex:1084535] error InvalidExchangeRateContract();
[codex:1084535] error InvalidConnector();
[codex:1084535] error InvalidConnectorPoolId();
[codex:1084535] error ZeroAddressReceiver();
[codex:1084535] error ZeroAddress();
[codex:1084535] error ZeroAmount();
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Identifying common constants**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/common/Constants.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] address constant ETH_ADDRESS = address(
[codex:1084535]     0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
[codex:1084535] );
[codex:1084535] 
[codex:1084535] bytes32 constant NORMAL_CONTROLLER = keccak256("NORMAL_CONTROLLER");
[codex:1084535] bytes32 constant FIAT_TOKEN_CONTROLLER = keccak256("FIAT_TOKEN_CONTROLLER");
[codex:1084535] 
[codex:1084535] bytes32 constant LIMIT_HOOK = keccak256("LIMIT_HOOK");
[codex:1084535] bytes32 constant LIMIT_EXECUTION_HOOK = keccak256("LIMIT_EXECUTION_HOOK");
[codex:1084535] bytes32 constant LIMIT_EXECUTION_YIELD_HOOK = keccak256(
[codex:1084535]     "LIMIT_EXECUTION_YIELD_HOOK"
[codex:1084535] );
[codex:1084535] bytes32 constant LIMIT_EXECUTION_YIELD_TOKEN_HOOK = keccak256(
[codex:1084535]     "LIMIT_EXECUTION_YIELD_TOKEN_HOOK"
[codex:1084535] );
[codex:1084535] 
[codex:1084535] bytes32 constant ERC20_VAULT = keccak256("ERC20_VAULT");
[codex:1084535] bytes32 constant NATIVE_VAULT = keccak256("NATIVE_VAULT");
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Reviewing structs**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/common/Structs.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] struct UpdateLimitParams {
[codex:1084535]     bool isMint;
[codex:1084535]     address connector;
[codex:1084535]     uint256 maxLimit;
[codex:1084535]     uint256 ratePerSecond;
[codex:1084535] }
[codex:1084535] 
[codex:1084535] struct SrcPreHookCallParams {
[codex:1084535]     address connector;
[codex:1084535]     address msgSender;
[codex:1084535]     TransferInfo transferInfo;
[codex:1084535] }
[codex:1084535] 
[codex:1084535] struct SrcPostHookCallParams {
[codex:1084535]     address connector;
[codex:1084535]     bytes options;
[codex:1084535]     bytes postSrcHookData;
[codex:1084535]     TransferInfo transferInfo;
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Inspecting hook vulnerabilities**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,260p' contracts/contracts/hooks/Controller_YieldLimitExecHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // // // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "lib/openzeppelin-contracts/contracts/utils/math/Math.sol";
[codex:1084535] import {FixedPointMathLib} from "lib/solmate/src/utils/FixedPointMathLib.sol";
[codex:1084535] import {IStrategy} from "../interfaces/IStrategy.sol";
[codex:1084535] import {IMintableERC20} from "../interfaces/IMintableERC20.sol";
[codex:1084535] import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1084535] import {IConnector} from "../ConnectorPlug.sol";
[codex:1084535] import "./LimitExecutionHook.sol";
[codex:1084535] 
[codex:1084535] interface IYieldToken {
[codex:1084535]     function updateTotalUnderlyingAssets(uint256 amount_) external;
[codex:1084535] 
[codex:1084535]     function calculateMintAmount(uint256 amount_) external returns (uint256);
[codex:1084535] 
[codex:1084535]     function convertToShares(
[codex:1084535]         uint256 underlyingAssets
[codex:1084535]     ) external view returns (uint256);
[codex:1084535] 
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '260,620p' contracts/contracts/hooks/Controller_YieldLimitExecHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] 
[codex:1084535]         (uint256 consumedShares, uint256 pendingShares) = _limitDstHook(
[codex:1084535]             params_.connector,
[codex:1084535]             totalPendingShares
[codex:1084535]         );
[codex:1084535] 
[codex:1084535]         postRetryHookData = abi.encode(receiver, consumedShares, pendingShares);
[codex:1084535]         uint256 consumedUnderlying = yieldToken__.convertToAssets(
[codex:1084535]             consumedShares
[codex:1084535]         );
[codex:1084535]         yieldToken__.transfer(receiver, consumedUnderlying);
[codex:1084535] 
[codex:1084535]         transferInfo = TransferInfo(transferInfo.receiver, 0, bytes(""));
[codex:1084535]     }
[codex:1084535] 
[codex:1084535]     // /**
[codex:1084535]     //  * @notice Handles post-retry hook logic after execution.
[codex:1084535]     //  * @dev This function updates the identifier cache and sibling chain cache based on the post-hook data.
[codex:1084535]     //  * @param siblingChainSlug_ The unique identifier of the sibling chain.
[codex:1084535]     //  * @param identifierCache_ Identifier cache containing pending mint information.
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Investigating execution limit hooks**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,260p' contracts/contracts/hooks/LimitExecutionHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "./plugins/LimitPlugin.sol";
[codex:1084535] import "./plugins/ExecutionHelper.sol";
[codex:1084535] import "./plugins/ConnectorPoolPlugin.sol";
[codex:1084535] import "../interfaces/IController.sol";
[codex:1084535] 
[codex:1084535] contract LimitExecutionHook is LimitPlugin, ConnectorPoolPlugin {
[codex:1084535]     bool public useControllerPools;
[codex:1084535]     ExecutionHelper executionHelper__;
[codex:1084535] 
[codex:1084535]     event MessageExecuted(bytes32 indexed messageId, address indexed receiver);
[codex:1084535] 
[codex:1084535]     /**
[codex:1084535]      * @notice Constructor for creating a new SuperToken.
[codex:1084535]      * @param owner_ Owner of this contract.
[codex:1084535]      */
[codex:1084535]     constructor(
[codex:1084535]         address owner_,
[codex:1084535]         address controller_,
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Identifying Need for LimitHook**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/hooks/LimitHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "./plugins/LimitPlugin.sol";
[codex:1084535] import "../interfaces/IController.sol";
[codex:1084535] import "./plugins/ConnectorPoolPlugin.sol";
[codex:1084535] 
[codex:1084535] contract LimitHook is LimitPlugin, ConnectorPoolPlugin {
[codex:1084535]     bool public immutable useControllerPools;
[codex:1084535] 
[codex:1084535]     /**
[codex:1084535]      * @notice Constructor for creating a new SuperToken.
[codex:1084535]      * @param owner_ Owner of this contract.
[codex:1084535]      */
[codex:1084535]     constructor(
[codex:1084535]         address owner_,
[codex:1084535]         address controller_,
[codex:1084535]         bool useControllerPools_
[codex:1084535]     ) HookBase(owner_, controller_) {
[codex:1084535]         useControllerPools = useControllerPools_;
[codex:1084535]         hookType = LIMIT_HOOK;
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Inspecting HookBase and plugins**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/hooks/HookBase.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "lib/solmate/src/utils/ReentrancyGuard.sol";
[codex:1084535] import "../common/Errors.sol";
[codex:1084535] import "../common/Constants.sol";
[codex:1084535] import "../interfaces/IHook.sol";
[codex:1084535] import "../utils/RescueBase.sol";
[codex:1084535] 
[codex:1084535] /**
[codex:1084535]  * @title Base contract for super token and vault
[codex:1084535]  * @notice It contains relevant execution payload storages.
[codex:1084535]  * @dev This contract implements Socket's IPlug to enable message bridging and IMessageBridge
[codex:1084535]  * to support any type of message bridge.
[codex:1084535]  */
[codex:1084535] abstract contract HookBase is ReentrancyGuard, IHook, RescueBase {
[codex:1084535]     address public immutable vaultOrController;
[codex:1084535]     bytes32 public hookType;
[codex:1084535] 
[codex:1084535]     /**
[codex:1084535]      * @notice Constructor for creating a new SuperToken.
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Listing plugins**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/hooks/plugins/ConnectorPoolPlugin.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] import "../HookBase.sol";
[codex:1084535] 
[codex:1084535] abstract contract ConnectorPoolPlugin is HookBase {
[codex:1084535]     // connectorPoolId => totalLockedAmount
[codex:1084535]     mapping(uint256 => uint256) public poolLockedAmounts;
[codex:1084535] 
[codex:1084535]     // connector => connectorPoolId
[codex:1084535]     mapping(address => uint256) public connectorPoolIds;
[codex:1084535] 
[codex:1084535]     event ConnectorPoolIdUpdated(address connector, uint256 poolId);
[codex:1084535]     event PoolLockedAmountUpdated(uint256 poolId, uint256 amount);
[codex:1084535] 
[codex:1084535]     function updateConnectorPoolId(
[codex:1084535]         address[] calldata connectors,
[codex:1084535]         uint256[] calldata poolIds_
[codex:1084535]     ) external onlyOwner {
[codex:1084535]         uint256 length = connectors.length;
[codex:1084535]         for (uint256 i; i < length; i++) {
[codex:1084535]             if (poolIds_[i] == 0) revert InvalidPoolId();
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Identifying ExecutionHelper**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/hooks/plugins/ExecutionHelper.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: MIT
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "../../libraries/ExcessivelySafeCall.sol";
[codex:1084535] import "../../utils/RescueBase.sol";
[codex:1084535] import "../../common/Errors.sol";
[codex:1084535] 
[codex:1084535] /**
[codex:1084535]  * @title ExecutionHelper
[codex:1084535]  * @notice It is an untrusted contract used for payload execution by Super token and Vault.
[codex:1084535]  */
[codex:1084535] contract ExecutionHelper is RescueBase {
[codex:1084535]     using ExcessivelySafeCall for address;
[codex:1084535]     uint16 private constant MAX_COPY_BYTES = 0;
[codex:1084535]     address public hook;
[codex:1084535]     bytes32 public messageId;
[codex:1084535]     uint256 public bridgeAmount;
[codex:1084535] 
[codex:1084535]     constructor(address owner_) AccessControl(owner_) {
[codex:1084535]         _grantRole(RESCUE_ROLE, owner_);
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Identifying plugin name**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,320p' contracts/contracts/hooks/plugins/LimitPlugin.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "../HookBase.sol";
[codex:1084535] import {Gauge} from "../../utils/Gauge.sol";
[codex:1084535] 
[codex:1084535] abstract contract LimitPlugin is Gauge, HookBase {
[codex:1084535]     bytes32 constant LIMIT_UPDATER_ROLE = keccak256("LIMIT_UPDATER_ROLE");
[codex:1084535] 
[codex:1084535]     // connector => receivingLimitParams
[codex:1084535]     mapping(address => LimitParams) _receivingLimitParams;
[codex:1084535] 
[codex:1084535]     // connector => sendingLimitParams
[codex:1084535]     mapping(address => LimitParams) _sendingLimitParams;
[codex:1084535] 
[codex:1084535]     ////////////////////////////////////////////////////////
[codex:1084535]     ////////////////////// EVENTS //////////////////////////
[codex:1084535]     ////////////////////////////////////////////////////////
[codex:1084535] 
[codex:1084535]     // Emitted when limit parameters are updated
[codex:1084535]     event LimitParamsUpdated(UpdateLimitParams[] updates);
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Measuring progress**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/utils/Gauge.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: MIT
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] import "../common/Structs.sol";
[codex:1084535] 
[codex:1084535] abstract contract Gauge {
[codex:1084535]     error AmountOutsideLimit();
[codex:1084535] 
[codex:1084535]     function _getCurrentLimit(
[codex:1084535]         LimitParams storage _params
[codex:1084535]     ) internal view returns (uint256 _limit) {
[codex:1084535]         uint256 timeElapsed = block.timestamp - _params.lastUpdateTimestamp;
[codex:1084535]         uint256 limitIncrease = timeElapsed * _params.ratePerSecond;
[codex:1084535] 
[codex:1084535]         if (limitIncrease + _params.lastUpdateLimit > _params.maxLimit) {
[codex:1084535]             _limit = _params.maxLimit;
[codex:1084535]         } else {
[codex:1084535]             _limit = limitIncrease + _params.lastUpdateLimit;
[codex:1084535]         }
[codex:1084535]     }
[codex:1084535] 
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Reviewing Vault_YieldLimitExecHook**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,260p' contracts/contracts/hooks/Vault_YieldLimitExecHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // // // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "lib/openzeppelin-contracts/contracts/utils/math/Math.sol";
[codex:1084535] import {FixedPointMathLib} from "lib/solmate/src/utils/FixedPointMathLib.sol";
[codex:1084535] import {IStrategy} from "../interfaces/IStrategy.sol";
[codex:1084535] import "lib/solmate/src/tokens/ERC20.sol";
[codex:1084535] 
[codex:1084535] import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1084535] import {IConnector} from "../ConnectorPlug.sol";
[codex:1084535] 
[codex:1084535] import "./LimitExecutionHook.sol";
[codex:1084535] 
[codex:1084535] contract Vault_YieldLimitExecHook is LimitExecutionHook {
[codex:1084535]     using SafeTransferLib for ERC20;
[codex:1084535]     using FixedPointMathLib for uint256;
[codex:1084535] 
[codex:1084535]     uint256 private constant MAX_BPS = 10_000;
[codex:1084535] 
[codex:1084535]     IStrategy public strategy; // address of the strategy contract
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '260,620p' contracts/contracts/hooks/Vault_YieldLimitExecHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535]             totalIdle -= credit;
[codex:1084535]             totalDebt += credit;
[codex:1084535]             totalLockedInStrategy += credit;
[codex:1084535]             underlyingAsset__.safeTransferFrom(
[codex:1084535]                 vaultOrController,
[codex:1084535]                 address(strategy),
[codex:1084535]                 credit
[codex:1084535]             );
[codex:1084535]             strategy.invest();
[codex:1084535]         } else if (pendingDebt > 0) {
[codex:1084535]             // Credit deficit, take from Strategy
[codex:1084535]             _withdrawFromStrategy(pendingDebt);
[codex:1084535]         }
[codex:1084535] 
[codex:1084535]         emit Rebalanced(totalIdle, totalDebt, credit, pendingDebt);
[codex:1084535]     }
[codex:1084535] 
[codex:1084535]     /// @notice Returns the total quantity of all underlyingAssets under control of this
[codex:1084535]     ///    Vault, whether they're loaned out to a Strategy, or currently held in
[codex:1084535]     /// the Vault.
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Inspecting token contracts**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,260p' contracts/contracts/token/SuperToken.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "lib/solmate/src/tokens/ERC20.sol";
[codex:1084535] import "../utils/RescueBase.sol";
[codex:1084535] import "../interfaces/IHook.sol";
[codex:1084535] 
[codex:1084535] /**
[codex:1084535]  * @title SuperToken
[codex:1084535]  * @notice An ERC20 contract which enables bridging a token to its sibling chains.
[codex:1084535]  * @dev This contract implements ISuperTokenOrVault to support message bridging through IMessageBridge compliant contracts.
[codex:1084535]  */
[codex:1084535] contract SuperToken is ERC20, RescueBase {
[codex:1084535]     // for all controller access (mint, burn)
[codex:1084535]     bytes32 constant CONTROLLER_ROLE = keccak256("CONTROLLER_ROLE");
[codex:1084535] 
[codex:1084535]     /**
[codex:1084535]      * @notice constructor for creating a new SuperToken.
[codex:1084535]      * @param name_ token name
[codex:1084535]      * @param symbol_ token symbol
[codex:1084535]      * @param decimals_ token decimals (should be same on all chains)
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Yielding token contracts**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,260p' contracts/contracts/token/yield-token/YieldToken.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "./YieldTokenBase.sol";
[codex:1084535] import {IStrategy} from "../../interfaces/IStrategy.sol";
[codex:1084535] import {IConnector} from "../../interfaces/IConnector.sol";
[codex:1084535] import {IHook} from "../../interfaces/IHook.sol";
[codex:1084535] 
[codex:1084535] // add shutdown
[codex:1084535] contract YieldToken is YieldTokenBase {
[codex:1084535]     using FixedPointMathLib for uint256;
[codex:1084535] 
[codex:1084535]     bytes32 constant MINTER_ROLE = keccak256("MINTER_ROLE");
[codex:1084535]     bytes32 constant HOOK_ROLE = keccak256("HOOK_ROLE");
[codex:1084535] 
[codex:1084535]     constructor(
[codex:1084535]         string memory name_,
[codex:1084535]         string memory symbol_,
[codex:1084535]         uint8 decimals_
[codex:1084535]     ) YieldTokenBase(name_, symbol_, decimals_) AccessControl(msg.sender) {
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Identifying YieldTokenBase**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,360p' contracts/contracts/token/yield-token/YieldTokenBase.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: AGPL-3.0-only
[codex:1084535] pragma solidity >=0.8.0;
[codex:1084535] 
[codex:1084535] import "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol";
[codex:1084535] import {FixedPointMathLib} from "lib/solmate/src/utils/FixedPointMathLib.sol";
[codex:1084535] import "../../utils/RescueBase.sol";
[codex:1084535] import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
[codex:1084535] import {PermitDeadlineExpired, InvalidSigner} from "../../common/Errors.sol";
[codex:1084535] 
[codex:1084535] abstract contract YieldTokenBase is RescueBase, ReentrancyGuard, IERC20 {
[codex:1084535]     using FixedPointMathLib for uint256;
[codex:1084535] 
[codex:1084535]     /*//////////////////////////////////////////////////////////////
[codex:1084535]                             METADATA STORAGE
[codex:1084535]     //////////////////////////////////////////////////////////////*/
[codex:1084535] 
[codex:1084535]     string public name;
[codex:1084535] 
[codex:1084535]     string public symbol;
[codex:1084535] 
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Examining token share-amount interactions**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,260p' contracts/contracts/bridge/FiatTokenV2_1/FiatTokenV2_1_Controller.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import {IFiatTokenV2_1_Mintable} from "./IFiatTokenV2_1_Mintable.sol";
[codex:1084535] import "../Controller.sol";
[codex:1084535] 
[codex:1084535] contract FiatTokenV2_1_Controller is Controller {
[codex:1084535]     using SafeTransferLib for ERC20;
[codex:1084535] 
[codex:1084535]     constructor(address token_) Controller(token_) {
[codex:1084535]         bridgeType = FIAT_TOKEN_CONTROLLER;
[codex:1084535]     }
[codex:1084535] 
[codex:1084535]     function _burn(address user_, uint256 burnAmount_) internal override {
[codex:1084535]         ERC20(token).safeTransferFrom(user_, address(this), burnAmount_);
[codex:1084535]         IFiatTokenV2_1_Mintable(address(token)).burn(burnAmount_);
[codex:1084535]     }
[codex:1084535] }
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Noting IFiatTokenV2_1_Mintable reference**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,160p' contracts/contracts/bridge/FiatTokenV2_1/IFiatTokenV2_1_Mintable.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] // SPDX-License-Identifier: MIT
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "lib/solmate/src/tokens/ERC20.sol";
[codex:1084535] 
[codex:1084535] // USDC's standard token
[codex:1084535] abstract contract IFiatTokenV2_1_Mintable is ERC20 {
[codex:1084535]     function mint(address receiver_, uint256 amount_) external virtual;
[codex:1084535] 
[codex:1084535]     function burn(uint256 _amount) external virtual;
[codex:1084535] }
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Reviewing contract security aspects**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/libraries/RescueFundsLib.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1084535] import "lib/solmate/src/tokens/ERC20.sol";
[codex:1084535] 
[codex:1084535] error ZeroAddress();
[codex:1084535] 
[codex:1084535] /**
[codex:1084535]  * @title RescueFundsLib
[codex:1084535]  * @dev A library that provides a function to rescue funds from a contract.
[codex:1084535]  */
[codex:1084535] 
[codex:1084535] library RescueFundsLib {
[codex:1084535]     /**
[codex:1084535]      * @dev The address used to identify ETH.
[codex:1084535]      */
[codex:1084535]     address public constant ETH_ADDRESS =
[codex:1084535]         address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
[codex:1084535] 
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Checking contract interfaces and inheritance**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/interfaces/IBridge.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity ^0.8.3;
[codex:1084535] 
[codex:1084535] interface IBridge {
[codex:1084535]     function bridge(
[codex:1084535]         address receiver_,
[codex:1084535]         uint256 amount_,
[codex:1084535]         uint256 msgGasLimit_,
[codex:1084535]         address connector_,
[codex:1084535]         bytes calldata execPayload_,
[codex:1084535]         bytes calldata options_
[codex:1084535]     ) external payable;
[codex:1084535] 
[codex:1084535]     function receiveInbound(
[codex:1084535]         uint32 siblingChainSlug_,
[codex:1084535]         bytes memory payload_
[codex:1084535]     ) external payable;
[codex:1084535] 
[codex:1084535]     function retry(address connector_, bytes32 messageId_) external;
[codex:1084535] }
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Identifying IConnector**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/interfaces/IConnector.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity ^0.8.13;
[codex:1084535] 
[codex:1084535] interface IConnector {
[codex:1084535]     function outbound(
[codex:1084535]         uint256 msgGasLimit_,
[codex:1084535]         bytes memory payload_,
[codex:1084535]         bytes memory options_
[codex:1084535]     ) external payable returns (bytes32 messageId_);
[codex:1084535] 
[codex:1084535]     function siblingChainSlug() external view returns (uint32);
[codex:1084535] 
[codex:1084535]     function getMinFees(
[codex:1084535]         uint256 msgGasLimit_,
[codex:1084535]         uint256 payloadSize_
[codex:1084535]     ) external view returns (uint256 totalFees);
[codex:1084535] 
[codex:1084535]     function getMessageId() external view returns (bytes32);
[codex:1084535] }
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Investigating IController usage**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/interfaces/IController.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity ^0.8.13;
[codex:1084535] 
[codex:1084535] interface IController {
[codex:1084535]     function identifierCache(
[codex:1084535]         bytes32 messageId_
[codex:1084535]     ) external payable returns (bytes memory cache);
[codex:1084535] 
[codex:1084535]     function connectorCache(
[codex:1084535]         address connector_
[codex:1084535]     ) external payable returns (bytes memory cache);
[codex:1084535] }
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Noticing mention of IHook**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/interfaces/IHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] pragma solidity ^0.8.3;
[codex:1084535] import "../common/Structs.sol";
[codex:1084535] 
[codex:1084535] interface IHook {
[codex:1084535]     /**
[codex:1084535]      * @notice Executes pre-hook call for source underlyingAsset.
[codex:1084535]      * @dev This function is used to execute a pre-hook call for the source underlyingAsset before initiating a transfer.
[codex:1084535]      * @param params_ Parameters for the pre-hook call.
[codex:1084535]      * @return transferInfo Information about the transfer.
[codex:1084535]      * @return postSrcHookData returned from the pre-hook call.
[codex:1084535]      */
[codex:1084535]     function srcPreHookCall(
[codex:1084535]         SrcPreHookCallParams calldata params_
[codex:1084535]     )
[codex:1084535]         external
[codex:1084535]         returns (
[codex:1084535]             TransferInfo memory transferInfo,
[codex:1084535]             bytes memory postSrcHookData
[codex:1084535]         );
[codex:1084535] 
[codex:1084535] 
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Analyzing potential vulnerabilities and access controls**
[codex:1084535] 
[codex:1084535] This is quite a detailed security review! I’m carefully examining bridging logic, hooks, reentrancy guards, signature validation, and access checks to spot any exploitable flaws or overlooked edge cases, especially around retry functions, array length mismatches, and how asset conversions handle totals during bridging.
[codex:1084535] thinking
[codex:1084535] **Evaluating executionHelper and owner-settable components**
[codex:1084535] 
[codex:1084535] I'm digging into how executionHelper enables arbitrary calls via bridging, the risks from owner-settable addresses, and whether array length mismatches or unchecked returns pose issues—checking patterns carefully to separate intended features from potential flaws.
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/libraries/ExcessivelySafeCall.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 7ms:
[codex:1084535] // SPDX-License-Identifier: MIT OR Apache-2.0
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] library ExcessivelySafeCall {
[codex:1084535]     uint constant LOW_28_MASK =
[codex:1084535]         0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
[codex:1084535] 
[codex:1084535]     /// @notice Use when you _really_ really _really_ don't trust the called
[codex:1084535]     /// contract. This prevents the called contract from causing reversion of
[codex:1084535]     /// the caller in as many ways as we can.
[codex:1084535]     /// @dev The main difference between this and a solidity low-level call is
[codex:1084535]     /// that we limit the number of bytes that the callee can cause to be
[codex:1084535]     /// copied to caller memory. This prevents stupid things like malicious
[codex:1084535]     /// contracts returning 10,000,000 bytes causing a local OOG when copying
[codex:1084535]     /// to memory.
[codex:1084535]     /// @param _target The address to call
[codex:1084535]     /// @param _gas The amount of gas to forward to the remote contract
[codex:1084535]     /// @param _maxCopy The maximum number of bytes of returndata to copy
[codex:1084535]     /// to memory.
[codex:1084535]     /// @param _calldata The data to send to the remote contract
[codex:1084535] 
[codex:1084535] 
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Analyzing smart contract vulnerabilities**
[codex:1084535] 
[codex:1084535] I'm reviewing various contract functions and hooks, checking for potential issues like reentrancy, underflows, event inconsistencies, and arithmetic errors in yield token calculations. There’s a lot to unpack about token share conversions, permit signatures, and bridging logic that might cause unexpected behaviors or edge-case vulnerabilities. Let’s explore these intricate interactions carefully!
[codex:1084535] thinking
[codex:1084535] **Examining yield token bridging logic and reentrancy risks**
[codex:1084535] 
[codex:1084535] There’s a deep dive into how the controller and vault hooks handle total underlying assets during bridging, confirming that deposit amounts get included properly to avoid inflation issues. I’m also scrutinizing possible reentrancy concerns in vault hook withdrawals due to external token calls without consistent nonReentrant guards. On top of that, I’m exploring subtle signature handling nuances in permits and potential event or allowance inconsistencies related to share-to-asset conversions. There’s a lot to unpack in these cross-contract interactions!
[codex:1084535] thinking
[codex:1084535] **Inspecting edge cases in bridging and cache handling**
[codex:1084535] 
[codex:1084535] I’m reviewing potential hazards like zero-address receivers slipping through minting flows and subtle adjustments in transfer limits when vault idle funds run low. Additionally, I’m thinking about how mismatched array lengths or large user-supplied cache data might cause unintended errors or storage bloat. It’s interesting to see how access controls and data validations interplay here!
[codex:1084535] exec
[codex:1084535] /bin/bash -lc 'rg -n "delegatecall|callcode" -S contracts/contracts' in /tmp/codex-multi-jjdlf1zy exited 1 in 11ms:
[codex:1084535] 
[codex:1084535] 
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Analyzing bridging and reentrancy risks**
[codex:1084535] 
[codex:1084535] I'm reviewing call patterns, message ID handling, and reentrancy, focusing on potential replay attacks in bridging functions and state updates during rebalances. There are concerns about missing on-chain replay protection, underflow in totalMinted accounting with initial supplies, unchecked token transfer return values possibly causing misaccounting, and open access to a rebalance function that might allow reentrancy through strategy callbacks. I’m also checking role management consistency after ownership transfers and cache underflow risks in limit execution hooks. This analysis highlights nuanced trade-offs between trust assumptions and contract safeguards.
[codex:1084535] thinking
[codex:1084535] **Evaluating connector state and yield token accounting**
[codex:1084535] 
[codex:1084535] I'm examining how message ID handling interacts with connector connection state, noticing missing checks that might cause bridging calls to fail if connectors aren’t fully connected. There’s also a subtle bug in yield token share accounting within the yield limit hook: consumed and pending shares are miscalculated and swapped, which can cause stuck pending tokens by making retries fail due to insufficient shares in the hook contract. This issue could lead to locked funds and disrupt normal bridging operations, highlighting the importance of precise state tracking in complex token flows.
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "nl -ba contracts/contracts/hooks/Controller_YieldLimitExecHook.sol | sed -n '130,240p'" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535]    130	        );
[codex:1084535]    131	
[codex:1084535]    132	        postHookData = abi.encode(
[codex:1084535]    133	            consumedUnderlying,
[codex:1084535]    134	            pendingUnderlying,
[codex:1084535]    135	            params_.transferInfo.amount,
[codex:1084535]    136	            params_.transferInfo.receiver
[codex:1084535]    137	        );
[codex:1084535]    138	
[codex:1084535]    139	        transferInfo = params_.transferInfo;
[codex:1084535]    140	        if (pendingUnderlying != 0) transferInfo.receiver = address(this);
[codex:1084535]    141	        transferInfo.amount = sharesToMint;
[codex:1084535]    142	        transferInfo.data = payload;
[codex:1084535]    143	    }
[codex:1084535]    144	
[codex:1084535]    145	    /**
[codex:1084535]    146	     * @notice Handles post-hook logic after the execution of a destination hook.
[codex:1084535]    147	     * @dev This function processes post-hook data to update the identifier cache and sibling chain cache.
[codex:1084535]    148	     */
[codex:1084535]    149	    function dstPostHookCall(
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Analyzing potential bugs in share calculations and vault hooks**
[codex:1084535] 
[codex:1084535] I’m carefully examining a likely bug where consumed and pending shares are swapped, causing misaccounting and potential blocking of pending transfers. I’m also checking various vault hooks and controller functions for inconsistencies or logic errors, including possible issues with emergency shutdown, array length validation, token burn mechanics, yield token calculations leading to division by zero, ETH bridging mechanics, and hook approval checks. My main focus is confirming the severity and impact of these findings.
[codex:1084535] exec
[codex:1084535] /bin/bash -lc 'rg -n "pendingUnderlying" contracts/contracts/hooks -S' in /tmp/codex-multi-jjdlf1zy succeeded in 9ms:
[codex:1084535] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:124:        (uint256 consumedUnderlying, uint256 pendingUnderlying) = _limitDstHook(
[codex:1084535] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:134:            pendingUnderlying,
[codex:1084535] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:140:        if (pendingUnderlying != 0) transferInfo.receiver = address(this);
[codex:1084535] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:160:            uint256 pendingUnderlying,
[codex:1084535] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:174:        if (pendingUnderlying > 0) {
[codex:1084535] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:177:                pendingUnderlying) / depositUnderlying;
[codex:1084535] contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:145:                    uint256 pendingUnderlying,
[codex:1084535] contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:149:                pendingUnderlying += transferInfo.amount - totalIdle;
[codex:1084535] contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:152:                    pendingUnderlying,
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Analyzing potential token and hook vulnerabilities**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc 'rg -n "TODO|FIXME|re check|recheck|fix" contracts/contracts -S' in /tmp/codex-multi-jjdlf1zy succeeded in 9ms:
[codex:1084535] contracts/contracts/bridge/Controller.sol:39:        // re check this logic for mint and mint use cases and if other minter involved
[codex:1084535] contracts/contracts/token/yield-token/YieldToken.sol:25:    // fix to round up and check other cases
[codex:1084535] contracts/contracts/token/yield-token/YieldTokenBase.sol:93:    // recheck for multi yield
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Analyzing potential vulnerabilities and logic flows**
[codex:1084535] 
[codex:1084535] I'm carefully examining various contract functions, especially around retry hooks and execution helpers, to identify security or logic flaws. There are subtle checks on connector matching, and I'm verifying if any gaps exist in hook calls or token transfers that could be exploited or cause unintended behavior. I'm focusing on inconsistencies in state updates and permission constraints.
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,220p' contracts/lib/solmate/src/tokens/ERC20.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: AGPL-3.0-only
[codex:1084535] pragma solidity >=0.8.0;
[codex:1084535] 
[codex:1084535] /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
[codex:1084535] /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
[codex:1084535] /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
[codex:1084535] /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
[codex:1084535] abstract contract ERC20 {
[codex:1084535]     /*//////////////////////////////////////////////////////////////
[codex:1084535]                                  EVENTS
[codex:1084535]     //////////////////////////////////////////////////////////////*/
[codex:1084535] 
[codex:1084535]     event Transfer(address indexed from, address indexed to, uint256 amount);
[codex:1084535] 
[codex:1084535]     event Approval(address indexed owner, address indexed spender, uint256 amount);
[codex:1084535] 
[codex:1084535]     /*//////////////////////////////////////////////////////////////
[codex:1084535]                             METADATA STORAGE
[codex:1084535]     //////////////////////////////////////////////////////////////*/
[codex:1084535] 
[codex:1084535] 
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Analyzing unchecked ERC20 transfers and accounting risks**
[codex:1084535] 
[codex:1084535] I'm investigating how the code uses raw ERC20 transfers without checking their return values, especially in hooks like Vault_YieldLimitExecHook, which could cause silent failures with non-standard tokens. I'm also looking into potential underflow and reentrancy issues around strategy withdrawals and bridging, weighing their exploitability and severity while considering typical token behaviors and system assumptions.
[codex:1084535] thinking
[codex:1084535] **Reviewing strategy withdrawal and vault accounting**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/interfaces/IStrategy.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] 
[codex:1084535] /**
[codex:1084535]  * @title IStrategy
[codex:1084535]  * @notice Interface for strategy contract which interacts with other protocols
[codex:1084535]  */
[codex:1084535] interface IStrategy {
[codex:1084535]     function withdraw(uint256 amount_) external returns (uint256 loss_);
[codex:1084535] 
[codex:1084535]     function withdrawAll() external;
[codex:1084535] 
[codex:1084535]     function estimatedTotalAssets()
[codex:1084535]         external
[codex:1084535]         view
[codex:1084535]         returns (uint256 totalUnderlyingAssets_);
[codex:1084535] 
[codex:1084535]     function invest() external;
[codex:1084535] }
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Analyzing potential vulnerabilities and findings**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "nl -ba contracts/contracts/hooks/Vault_YieldLimitExecHook.sol | sed -n '200,360p'" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535]    200	    }
[codex:1084535]    201	
[codex:1084535]    202	    function postRetryHook(
[codex:1084535]    203	        PostRetryHookCallParams calldata params_
[codex:1084535]    204	    ) public override returns (CacheData memory cacheData) {
[codex:1084535]    205	        return super.postRetryHook(params_);
[codex:1084535]    206	    }
[codex:1084535]    207	
[codex:1084535]    208	    function withdrawFromStrategy(
[codex:1084535]    209	        uint256 underlyingAsset_
[codex:1084535]    210	    ) external onlyOwner returns (uint256) {
[codex:1084535]    211	        return _withdrawFromStrategy(underlyingAsset_);
[codex:1084535]    212	    }
[codex:1084535]    213	
[codex:1084535]    214	    function _withdrawFromStrategy(
[codex:1084535]    215	        uint256 underlyingAsset_
[codex:1084535]    216	    ) internal returns (uint256 withdrawn) {
[codex:1084535]    217	        uint256 preBalance = underlyingAsset__.balanceOf(address(this));
[codex:1084535]    218	        strategy.withdraw(underlyingAsset_);
[codex:1084535]    219	        withdrawn = underlyingAsset__.balanceOf(address(this)) - preBalance;
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Analyzing unchecked transfers and permit signature issues**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "nl -ba contracts/contracts/token/yield-token/YieldTokenBase.sol | sed -n '120,240p'" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535]    120	        unchecked {
[codex:1084535]    121	            _balanceOf[to_] += sharesToTransfer;
[codex:1084535]    122	        }
[codex:1084535]    123	
[codex:1084535]    124	        emit Transfer(msg.sender, to_, amount_);
[codex:1084535]    125	
[codex:1084535]    126	        return true;
[codex:1084535]    127	    }
[codex:1084535]    128	
[codex:1084535]    129	    // transfer changes shares balance but reduces the amount
[codex:1084535]    130	    function transferFrom(
[codex:1084535]    131	        address from_,
[codex:1084535]    132	        address to_,
[codex:1084535]    133	        uint256 amount_
[codex:1084535]    134	    ) public override returns (bool) {
[codex:1084535]    135	        uint256 sharesToTransfer = convertToShares(amount_);
[codex:1084535]    136	
[codex:1084535]    137	        uint256 allowed = allowance[from_][msg.sender]; // Saves gas for limited approvals.
[codex:1084535]    138	
[codex:1084535]    139	        if (allowed != type(uint256).max)
[codex:1084535] 
[codex:1084535] thinking
[codex:1084535] **Summarizing audit findings and exploit scenarios**
[codex:1084535] 
[codex:1084535] I'm organizing detailed findings on vulnerabilities including a medium-severity pending share accounting bug causing locked funds, a low-severity unchecked ERC20 transfer risk leading to accounting inconsistencies, and a low-severity permit signature fragility that allows front-run invalidation. I'll craft exploit scenarios, evidence with code line references, and recommendations for each in a clear summary and structured JSON output.
[codex:1084535] codex
[codex:1084535] {"no_findings":false,"summary":"Found 3 issues: 1 medium accounting bug that can lock pending funds, and 2 low-severity issues around unchecked transfers and permit signature fragility.","findings":[{"severity":"medium","category":"math","title":"Pending share accounting uses pendingUnderlying instead of consumedUnderlying, locking pending funds","exploit_scenario":"When a transfer exceeds the receive limit, `pendingUnderlying > 0` and the hook mints shares to itself then transfers the consumed portion to the receiver. However, `dstPostHookCall` computes `consumedShares` using `pendingUnderlying`, so `pendingShares` ends up representing the consumed portion. The cache then tracks more pending shares than the hook actually holds. A subsequent `retry()` attempts to transfer these inflated pending shares, underflows the hook’s share balance, and reverts, leaving the pending funds stuck unless an admin rescues them.","recommendation":"Compute shares based on `consumedUnderlying` (not `pendingUnderlying`) and derive `pendingShares` from the remaining shares. For example: `consumedShares = totalShares * consumedUnderlying / depositUnderlying; pendingShares = totalShares - consumedShares;` then cache/emit using those corrected values.","evidence":"In `dstPostHookCall`, the comment indicates consumedU, but the calculation uses `pendingUnderlying`, and the resulting `pendingShares` are cached and emitted as pending.","locations":["contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175"]},{"severity":"low","category":"other","title":"Unchecked ERC20 transfers when returning funds from strategy can desync accounting","exploit_scenario":"If the underlying token is non-standard and returns `false` instead of reverting, `_withdrawFromStrategy` and `_withdrawAllFromStrategy` will still update `totalIdle`/`totalDebt` and emit events even though the transfer to the vault failed. This can leave the vault underfunded and cause later withdrawals/bridges to revert or funds to become stuck in the hook contract.","recommendation":"Use `SafeTransferLib.safeTransfer` (or check the return value) for transfers back to the vault to ensure failures revert and accounting stays consistent.","evidence":"Both `_withdrawFromStrategy` and `_withdrawAllFromStrategy` use raw `transfer` without checking the return value.","locations":["contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"]},{"severity":"low","category":"auth","title":"Permit signatures depend on mutable conversion rate, enabling front‑run invalidation","exploit_scenario":"`permit()` hashes `convertToShares(value)` at execution time. Any change in `totalUnderlyingAssets` between signing and submission (e.g., another bridge or yield sync) changes the conversion rate and invalidates the signature. An attacker can front‑run a permit submission by causing a small rate change, forcing `InvalidSigner` and blocking gasless approvals.","recommendation":"Make the signed value deterministic: accept a `valueShares` parameter for permit, or include a stable conversion rate snapshot in the signed data, or store allowances in asset units instead of shares.","evidence":"The signature hash and allowance both use `convertToShares(value)` which depends on mutable `totalUnderlyingAssets`.","locations":["contracts/contracts/token/yield-token/YieldTokenBase.sol:159"]}]}
[codex:1084535] tokens used
[codex:1084535] 172,326
[codex:1084535] {"no_findings":false,"summary":"Found 3 issues: 1 medium accounting bug that can lock pending funds, and 2 low-severity issues around unchecked transfers and permit signature fragility.","findings":[{"severity":"medium","category":"math","title":"Pending share accounting uses pendingUnderlying instead of consumedUnderlying, locking pending funds","exploit_scenario":"When a transfer exceeds the receive limit, `pendingUnderlying > 0` and the hook mints shares to itself then transfers the consumed portion to the receiver. However, `dstPostHookCall` computes `consumedShares` using `pendingUnderlying`, so `pendingShares` ends up representing the consumed portion. The cache then tracks more pending shares than the hook actually holds. A subsequent `retry()` attempts to transfer these inflated pending shares, underflows the hook’s share balance, and reverts, leaving the pending funds stuck unless an admin rescues them.","recommendation":"Compute shares based on `consumedUnderlying` (not `pendingUnderlying`) and derive `pendingShares` from the remaining shares. For example: `consumedShares = totalShares * consumedUnderlying / depositUnderlying; pendingShares = totalShares - consumedShares;` then cache/emit using those corrected values.","evidence":"In `dstPostHookCall`, the comment indicates consumedU, but the calculation uses `pendingUnderlying`, and the resulting `pendingShares` are cached and emitted as pending.","locations":["contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175"]},{"severity":"low","category":"other","title":"Unchecked ERC20 transfers when returning funds from strategy can desync accounting","exploit_scenario":"If the underlying token is non-standard and returns `false` instead of reverting, `_withdrawFromStrategy` and `_withdrawAllFromStrategy` will still update `totalIdle`/`totalDebt` and emit events even though the transfer to the vault failed. This can leave the vault underfunded and cause later withdrawals/bridges to revert or funds to become stuck in the hook contract.","recommendation":"Use `SafeTransferLib.safeTransfer` (or check the return value) for transfers back to the vault to ensure failures revert and accounting stays consistent.","evidence":"Both `_withdrawFromStrategy` and `_withdrawAllFromStrategy` use raw `transfer` without checking the return value.","locations":["contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"]},{"severity":"low","category":"auth","title":"Permit signatures depend on mutable conversion rate, enabling front‑run invalidation","exploit_scenario":"`permit()` hashes `convertToShares(value)` at execution time. Any change in `totalUnderlyingAssets` between signing and submission (e.g., another bridge or yield sync) changes the conversion rate and invalidates the signature. An attacker can front‑run a permit submission by causing a small rate change, forcing `InvalidSigner` and blocking gasless approvals.","recommendation":"Make the signed value deterministic: accept a `valueShares` parameter for permit, or include a stable conversion rate snapshot in the signed data, or store allowances in asset units instead of shares.","evidence":"The signature hash and allowance both use `convertToShares(value)` which depends on mutable `totalUnderlyingAssets`.","locations":["contracts/contracts/token/yield-token/YieldTokenBase.sol:159"]}]}
Metadata
{
    "codex": {
        "ran_at": "2025-12-28T01:33:27.347992+00:00",
        "returncode": 0
    },
    "summary": "Found 3 issues: 1 medium accounting bug that can lock pending funds, and 2 low-severity issues around unchecked transfers and permit signature fragility.",
    "raw_final": {
        "summary": "Found 3 issues: 1 medium accounting bug that can lock pending funds, and 2 low-severity issues around unchecked transfers and permit signature fragility.",
        "findings": [
            {
                "title": "Pending share accounting uses pendingUnderlying instead of consumedUnderlying, locking pending funds",
                "category": "math",
                "evidence": "In `dstPostHookCall`, the comment indicates consumedU, but the calculation uses `pendingUnderlying`, and the resulting `pendingShares` are cached and emitted as pending.",
                "severity": "medium",
                "locations": [
                    "contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175"
                ],
                "recommendation": "Compute shares based on `consumedUnderlying` (not `pendingUnderlying`) and derive `pendingShares` from the remaining shares. For example: `consumedShares = totalShares * consumedUnderlying / depositUnderlying; pendingShares = totalShares - consumedShares;` then cache/emit using those corrected values.",
                "exploit_scenario": "When a transfer exceeds the receive limit, `pendingUnderlying > 0` and the hook mints shares to itself then transfers the consumed portion to the receiver. However, `dstPostHookCall` computes `consumedShares` using `pendingUnderlying`, so `pendingShares` ends up representing the consumed portion. The cache then tracks more pending shares than the hook actually holds. A subsequent `retry()` attempts to transfer these inflated pending shares, underflows the hook\u2019s share balance, and reverts, leaving the pending funds stuck unless an admin rescues them."
            },
            {
                "title": "Unchecked ERC20 transfers when returning funds from strategy can desync accounting",
                "category": "other",
                "evidence": "Both `_withdrawFromStrategy` and `_withdrawAllFromStrategy` use raw `transfer` without checking the return value.",
                "severity": "low",
                "locations": [
                    "contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223",
                    "contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"
                ],
                "recommendation": "Use `SafeTransferLib.safeTransfer` (or check the return value) for transfers back to the vault to ensure failures revert and accounting stays consistent.",
                "exploit_scenario": "If the underlying token is non-standard and returns `false` instead of reverting, `_withdrawFromStrategy` and `_withdrawAllFromStrategy` will still update `totalIdle`/`totalDebt` and emit events even though the transfer to the vault failed. This can leave the vault underfunded and cause later withdrawals/bridges to revert or funds to become stuck in the hook contract."
            },
            {
                "title": "Permit signatures depend on mutable conversion rate, enabling front\u2011run invalidation",
                "category": "auth",
                "evidence": "The signature hash and allowance both use `convertToShares(value)` which depends on mutable `totalUnderlyingAssets`.",
                "severity": "low",
                "locations": [
                    "contracts/contracts/token/yield-token/YieldTokenBase.sol:159"
                ],
                "recommendation": "Make the signed value deterministic: accept a `valueShares` parameter for permit, or include a stable conversion rate snapshot in the signed data, or store allowances in asset units instead of shares.",
                "exploit_scenario": "`permit()` hashes `convertToShares(value)` at execution time. Any change in `totalUnderlyingAssets` between signing and submission (e.g., another bridge or yield sync) changes the conversion rate and invalidates the signature. An attacker can front\u2011run a permit submission by causing a small rate change, forcing `InvalidSigner` and blocking gasless approvals."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
14
EXT*/BALANCE
1
Total opcodes
6615
Flags
call_family_heavy
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x015f
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x8da5cb5b
00000019: GT
0000001a: PUSH2 0x00c0
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xe272ad3f
00000024: GT
00000025: PUSH2 0x0074
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xf290aafa
0000002f: GT
00000030: PUSH2 0x0059
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xf290aafa
0000003a: EQ
0000003b: PUSH2 0x03db
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xfc0c546a
00000045: EQ
00000046: PUSH2 0x03fb
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xfc3a7b98
00000050: EQ
00000051: PUSH2 0x042f
00000054: JUMPI
00000055: PUSH1 0x00
00000057: DUP1
00000058: REVERT
00000059: JUMPDEST
0000005a: DUP1
0000005b: PUSH4 0xe272ad3f
00000060: EQ
00000061: PUSH2 0x038b
00000064: JUMPI
00000065: DUP1
00000066: PUSH4 0xe9ee1eaf
0000006b: EQ
0000006c: PUSH2 0x03ab
0000006f: JUMPI
00000070: PUSH1 0x00
00000072: DUP1
00000073: REVERT
00000074: JUMPDEST
00000075: DUP1
00000076: PUSH4 0x9dc7b023
0000007b: GT
0000007c: PUSH2 0x00a5
0000007f: JUMPI
00000080: DUP1
00000081: PUSH4 0x9dc7b023
00000086: EQ
00000087: PUSH2 0x032b
0000008a: JUMPI
0000008b: DUP1
0000008c: PUSH4 0xaad48d80
00000091: EQ
00000092: PUSH2 0x034b
00000095: JUMPI
00000096: DUP1
00000097: PUSH4 0xd547741f
0000009c: EQ
0000009d: PUSH2 0x036b
000000a0: JUMPI
000000a1: PUSH1 0x00
000000a3: DUP1
000000a4: REVERT
000000a5: JUMPDEST
000000a6: DUP1
000000a7: PUSH4 0x8da5cb5b
000000ac: EQ
000000ad: PUSH2 0x02d0
000000b0: JUMPI
000000b1: DUP1
000000b2: PUSH4 0x91d14854
000000b7: EQ
000000b8: PUSH2 0x02fb
000000bb: JUMPI
000000bc: PUSH1 0x00
000000be: DUP1
000000bf: REVERT
000000c0: JUMPDEST
000000c1: DUP1
000000c2: PUSH4 0x4b0a8854
000000c7: GT
000000c8: PUSH2 0x0117
000000cb: JUMPI
000000cc: DUP1
000000cd: PUSH4 0x6ccae054
000000d2: GT
000000d3: PUSH2 0x00fc
000000d6: JUMPI
000000d7: DUP1
000000d8: PUSH4 0x6ccae054
000000dd: EQ
000000de: PUSH2 0x0270
000000e1: JUMPI
000000e2: DUP1
000000e3: PUSH4 0x70bab2c0
000000e8: EQ
000000e9: PUSH2 0x0290
000000ec: JUMPI
000000ed: DUP1
000000ee: PUSH4 0x873ea755
000000f3: EQ
000000f4: PUSH2 0x02bd
000000f7: JUMPI
000000f8: PUSH1 0x00
000000fa: DUP1
000000fb: REVERT
000000fc: JUMPDEST
000000fd: DUP1
000000fe: PUSH4 0x4b0a8854
00000103: EQ
00000104: PUSH2 0x0223
00000107: JUMPI
00000108: DUP1
00000109: PUSH4 0x5b94db27
0000010e: EQ
0000010f: PUSH2 0x0250
00000112: JUMPI
00000113: PUSH1 0x00
00000115: DUP1
00000116: REVERT
00000117: JUMPDEST
00000118: DUP1
00000119: PUSH4 0x2f2ff15d
0000011e: GT
0000011f: PUSH2 0x0148
00000122: JUMPI
00000123: DUP1
00000124: PUSH4 0x2f2ff15d
00000129: EQ
0000012a: PUSH2 0x01d9
0000012d: JUMPI
0000012e: DUP1
0000012f: PUSH4 0x3bd1adec
00000134: EQ
00000135: PUSH2 0x01fb
00000138: JUMPI
00000139: DUP1
0000013a: PUSH4 0x405e720a
0000013f: EQ
00000140: PUSH2 0x0210
00000143: JUMPI
00000144: PUSH1 0x00
00000146: DUP1
00000147: REVERT
00000148: JUMPDEST
00000149: DUP1
0000014a: PUSH4 0x20f99c0a
0000014f: EQ
00000150: PUSH2 0x0164
00000153: JUMPI
00000154: DUP1
00000155: PUSH4 0x2421e155
0000015a: EQ
0000015b: PUSH2 0x01b5
0000015e: JUMPI
0000015f: JUMPDEST
00000160: PUSH1 0x00
00000162: DUP1
00000163: REVERT
00000164: JUMPDEST
00000165: CALLVALUE
00000166: DUP1
00000167: ISZERO
00000168: PUSH2 0x0170
0000016b: JUMPI
0000016c: PUSH1 0x00
0000016e: DUP1
0000016f: REVERT
00000170: JUMPDEST
00000171: POP
00000172: PUSH1 0x02
00000174: SLOAD
00000175: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000018a: AND
0000018b: JUMPDEST
0000018c: PUSH1 0x40
0000018e: MLOAD
0000018f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000001a4: SWAP1
000001a5: SWAP2
000001a6: AND
000001a7: DUP2
000001a8: MSTORE
000001a9: PUSH1 0x20
000001ab: ADD
000001ac: JUMPDEST
000001ad: PUSH1 0x40
000001af: MLOAD
000001b0: DUP1
000001b1: SWAP2
000001b2: SUB
000001b3: SWAP1
000001b4: RETURN
000001b5: JUMPDEST
000001b6: CALLVALUE
000001b7: DUP1
000001b8: ISZERO
000001b9: PUSH2 0x01c1
000001bc: JUMPI
000001bd: PUSH1 0x00
000001bf: DUP1
000001c0: REVERT
000001c1: JUMPDEST
000001c2: POP
000001c3: PUSH2 0x01cb
000001c6: PUSH1 0x04
000001c8: SLOAD
000001c9: DUP2
000001ca: JUMP
000001cb: JUMPDEST
000001cc: PUSH1 0x40
000001ce: MLOAD
000001cf: SWAP1
000001d0: DUP2
000001d1: MSTORE
000001d2: PUSH1 0x20
000001d4: ADD
000001d5: PUSH2 0x01ac
000001d8: JUMP
000001d9: JUMPDEST
000001da: CALLVALUE
000001db: DUP1
000001dc: ISZERO
000001dd: PUSH2 0x01e5
000001e0: JUMPI
000001e1: PUSH1 0x00
000001e3: DUP1
000001e4: REVERT
000001e5: JUMPDEST
000001e6: POP
000001e7: PUSH2 0x01f9
000001ea: PUSH2 0x01f4
000001ed: CALLDATASIZE
000001ee: PUSH1 0x04
000001f0: PUSH2 0x2732
000001f3: JUMP
000001f4: JUMPDEST
000001f5: PUSH2 0x044f
000001f8: JUMP
000001f9: JUMPDEST
000001fa: STOP
000001fb: JUMPDEST
000001fc: CALLVALUE
000001fd: DUP1
000001fe: ISZERO
000001ff: PUSH2 0x0207
00000202: JUMPI
00000203: PUSH1 0x00
00000205: DUP1
00000206: REVERT
00000207: JUMPDEST
00000208: POP
00000209: PUSH2 0x01f9
0000020c: PUSH2 0x04ae
0000020f: JUMP
00000210: JUMPDEST
00000211: PUSH2 0x01f9
00000214: PUSH2 0x021e
00000217: CALLDATASIZE
00000218: PUSH1 0x04
0000021a: PUSH2 0x27a4
0000021d: JUMP
0000021e: JUMPDEST
0000021f: PUSH2 0x050a
00000222: JUMP
00000223: JUMPDEST
00000224: CALLVALUE
00000225: DUP1
00000226: ISZERO
00000227: PUSH2 0x022f
0000022a: JUMPI
0000022b: PUSH1 0x00
0000022d: DUP1
0000022e: REVERT
0000022f: JUMPDEST
00000230: POP
00000231: PUSH2 0x0243
00000234: PUSH2 0x023e
00000237: CALLDATASIZE
00000238: PUSH1 0x04
0000023a: PUSH2 0x284c
0000023d: JUMP
0000023e: JUMPDEST
0000023f: PUSH2 0x065b
00000242: JUMP
00000243: JUMPDEST
00000244: PUSH1 0x40
00000246: MLOAD
00000247: PUSH2 0x01ac
0000024a: SWAP2
0000024b: SWAP1
0000024c: PUSH2 0x28df
0000024f: JUMP
00000250: JUMPDEST
00000251: CALLVALUE
00000252: DUP1
00000253: ISZERO
00000254: PUSH2 0x025c
00000257: JUMPI
00000258: PUSH1 0x00
0000025a: DUP1
0000025b: REVERT
0000025c: JUMPDEST
0000025d: POP
0000025e: PUSH2 0x01f9
00000261: PUSH2 0x026b
00000264: CALLDATASIZE
00000265: PUSH1 0x04
00000267: PUSH2 0x284c
0000026a: JUMP
0000026b: JUMPDEST
0000026c: PUSH2 0x06f5
0000026f: JUMP
00000270: JUMPDEST
00000271: CALLVALUE
00000272: DUP1
00000273: ISZERO
00000274: PUSH2 0x027c
00000277: JUMPI
00000278: PUSH1 0x00
0000027a: DUP1
0000027b: REVERT
0000027c: JUMPDEST
0000027d: POP
0000027e: PUSH2 0x01f9
00000281: PUSH2 0x028b
00000284: CALLDATASIZE
00000285: PUSH1 0x04
00000287: PUSH2 0x28f2
0000028a: JUMP
0000028b: JUMPDEST
0000028c: PUSH2 0x07b5
0000028f: JUMP
00000290: JUMPDEST
00000291: CALLVALUE
00000292: DUP1
00000293: ISZERO
00000294: PUSH2 0x029c
00000297: JUMPI
00000298: PUSH1 0x00
0000029a: DUP1
0000029b: REVERT
0000029c: JUMPDEST
0000029d: POP
0000029e: PUSH1 0x05
000002a0: SLOAD
000002a1: PUSH2 0x018b
000002a4: SWAP1
000002a5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000002ba: AND
000002bb: DUP2
000002bc: JUMP
000002bd: JUMPDEST
000002be: PUSH2 0x01f9
000002c1: PUSH2 0x02cb
000002c4: CALLDATASIZE
000002c5: PUSH1 0x04
000002c7: PUSH2 0x29f7
000002ca: JUMP
000002cb: JUMPDEST
000002cc: PUSH2 0x0853
000002cf: JUMP
000002d0: JUMPDEST
000002d1: CALLVALUE
000002d2: DUP1
000002d3: ISZERO
000002d4: PUSH2 0x02dc
000002d7: JUMPI
000002d8: PUSH1 0x00
000002da: DUP1
000002db: REVERT
000002dc: JUMPDEST
000002dd: POP
000002de: PUSH1 0x01
000002e0: SLOAD
000002e1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000002f6: AND
000002f7: PUSH2 0x018b
000002fa: JUMP
000002fb: JUMPDEST
000002fc: CALLVALUE
000002fd: DUP1
000002fe: ISZERO
000002ff: PUSH2 0x0307
00000302: JUMPI
00000303: PUSH1 0x00
00000305: DUP1
00000306: REVERT
00000307: JUMPDEST
00000308: POP
00000309: PUSH2 0x031b
0000030c: PUSH2 0x0316
0000030f: CALLDATASIZE
00000310: PUSH1 0x04
00000312: PUSH2 0x2732
00000315: JUMP
00000316: JUMPDEST
00000317: PUSH2 0x095c
0000031a: JUMP
0000031b: JUMPDEST
0000031c: PUSH1 0x40
0000031e: MLOAD
0000031f: SWAP1
00000320: ISZERO
00000321: ISZERO
00000322: DUP2
00000323: MSTORE
00000324: PUSH1 0x20
00000326: ADD
00000327: PUSH2 0x01ac
0000032a: JUMP
0000032b: JUMPDEST
0000032c: CALLVALUE
0000032d: DUP1
0000032e: ISZERO
0000032f: PUSH2 0x0337
00000332: JUMPI
00000333: PUSH1 0x00
00000335: DUP1
00000336: REVERT
00000337: JUMPDEST
00000338: POP
00000339: PUSH2 0x01f9
0000033c: PUSH2 0x0346
0000033f: CALLDATASIZE
00000340: PUSH1 0x04
00000342: PUSH2 0x2a93
00000345: JUMP
00000346: JUMPDEST
00000347: PUSH2 0x0997
0000034a: JUMP
0000034b: JUMPDEST
0000034c: CALLVALUE
0000034d: DUP1
0000034e: ISZERO
0000034f: PUSH2 0x0357
00000352: JUMPI
00000353: PUSH1 0x00
00000355: DUP1
00000356: REVERT
00000357: JUMPDEST
00000358: POP
00000359: PUSH2 0x01f9
0000035c: PUSH2 0x0366
0000035f: CALLDATASIZE
00000360: PUSH1 0x04
00000362: PUSH2 0x2ad4
00000365: JUMP
00000366: JUMPDEST
00000367: PUSH2 0x0a41
0000036a: JUMP
0000036b: JUMPDEST
0000036c: CALLVALUE
0000036d: DUP1
0000036e: ISZERO
0000036f: PUSH2 0x0377
00000372: JUMPI
00000373: PUSH1 0x00
00000375: DUP1
00000376: REVERT
00000377: JUMPDEST
00000378: POP
00000379: PUSH2 0x01f9
0000037c: PUSH2 0x0386
0000037f: CALLDATASIZE
00000380: PUSH1 0x04
00000382: PUSH2 0x2732
00000385: JUMP
00000386: JUMPDEST
00000387: PUSH2 0x0cb6
0000038a: JUMP
0000038b: JUMPDEST
0000038c: CALLVALUE
0000038d: DUP1
0000038e: ISZERO
0000038f: PUSH2 0x0397
00000392: JUMPI
00000393: PUSH1 0x00
00000395: DUP1
00000396: REVERT
00000397: JUMPDEST
00000398: POP
00000399: PUSH2 0x01f9
0000039c: PUSH2 0x03a6
0000039f: CALLDATASIZE
000003a0: PUSH1 0x04
000003a2: PUSH2 0x2b4e
000003a5: JUMP
000003a6: JUMPDEST
000003a7: PUSH2 0x0d11
000003aa: JUMP
000003ab: JUMPDEST
000003ac: CALLVALUE
000003ad: DUP1
000003ae: ISZERO
000003af: PUSH2 0x03b7
000003b2: JUMPI
000003b3: PUSH1 0x00
000003b5: DUP1
000003b6: REVERT
000003b7: JUMPDEST
000003b8: POP
000003b9: PUSH2 0x031b
000003bc: PUSH2 0x03c6
000003bf: CALLDATASIZE
000003c0: PUSH1 0x04
000003c2: PUSH2 0x284c
000003c5: JUMP
000003c6: JUMPDEST
000003c7: PUSH1 0x08
000003c9: PUSH1 0x20
000003cb: MSTORE
000003cc: PUSH1 0x00
000003ce: SWAP1
000003cf: DUP2
000003d0: MSTORE
000003d1: PUSH1 0x40
000003d3: SWAP1
000003d4: KECCAK256
000003d5: SLOAD
000003d6: PUSH1 0xff
000003d8: AND
000003d9: DUP2
000003da: JUMP
000003db: JUMPDEST
000003dc: CALLVALUE
000003dd: DUP1
000003de: ISZERO
000003df: PUSH2 0x03e7
000003e2: JUMPI
000003e3: PUSH1 0x00
000003e5: DUP1
000003e6: REVERT
000003e7: JUMPDEST
000003e8: POP
000003e9: PUSH2 0x0243
000003ec: PUSH2 0x03f6
000003ef: CALLDATASIZE
000003f0: PUSH1 0x04
000003f2: PUSH2 0x2bba
000003f5: JUMP
000003f6: JUMPDEST
000003f7: PUSH2 0x0ecb
000003fa: JUMP
000003fb: JUMPDEST
000003fc: CALLVALUE
000003fd: DUP1
000003fe: ISZERO
000003ff: PUSH2 0x0407
00000402: JUMPI
00000403: PUSH1 0x00
00000405: DUP1
00000406: REVERT
00000407: JUMPDEST
00000408: POP
00000409: PUSH2 0x018b
0000040c: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
0000042d: DUP2
0000042e: JUMP
0000042f: JUMPDEST
00000430: CALLVALUE
00000431: DUP1
00000432: ISZERO
00000433: PUSH2 0x043b
00000436: JUMPI
00000437: PUSH1 0x00
00000439: DUP1
0000043a: REVERT
0000043b: JUMPDEST
0000043c: POP
0000043d: PUSH2 0x01cb
00000440: PUSH2 0x044a
00000443: CALLDATASIZE
00000444: PUSH1 0x04
00000446: PUSH2 0x2bd3
00000449: JUMP
0000044a: JUMPDEST
0000044b: PUSH2 0x0ee4
0000044e: JUMP
0000044f: JUMPDEST
00000450: PUSH1 0x01
00000452: SLOAD
00000453: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000468: AND
00000469: CALLER
0000046a: EQ
0000046b: PUSH2 0x04a0
0000046e: JUMPI
0000046f: PUSH1 0x40
00000471: MLOAD
00000472: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000
00000493: DUP2
00000494: MSTORE
00000495: PUSH1 0x04
00000497: ADD
00000498: PUSH1 0x40
0000049a: MLOAD
0000049b: DUP1
0000049c: SWAP2
0000049d: SUB
0000049e: SWAP1
0000049f: REVERT
000004a0: JUMPDEST
000004a1: PUSH2 0x04aa
000004a4: DUP3
000004a5: DUP3
000004a6: PUSH2 0x0f85
000004a9: JUMP
000004aa: JUMPDEST
000004ab: POP
000004ac: POP
000004ad: JUMP
000004ae: JUMPDEST
000004af: PUSH1 0x02
000004b1: SLOAD
000004b2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000004c7: AND
000004c8: CALLER
000004c9: EQ
000004ca: PUSH2 0x04ff
000004cd: JUMPI
000004ce: PUSH1 0x40
000004d0: MLOAD
000004d1: PUSH32 0x7c91ccdd00000000000000000000000000000000000000000000000000000000
000004f2: DUP2
000004f3: MSTORE
000004f4: PUSH1 0x04
000004f6: ADD
000004f7: PUSH1 0x40
000004f9: MLOAD
000004fa: DUP1
000004fb: SWAP2
000004fc: SUB
000004fd: SWAP1
000004fe: REVERT
000004ff: JUMPDEST
00000500: PUSH2 0x0508
00000503: CALLER
00000504: PUSH2 0x100b
00000507: JUMP
00000508: JUMPDEST
00000509: JUMP
0000050a: JUMPDEST
0000050b: PUSH1 0x00
0000050d: SLOAD
0000050e: PUSH1 0x01
00000510: EQ
00000511: PUSH2 0x057b
00000514: JUMPI
00000515: PUSH1 0x40
00000517: MLOAD
00000518: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000539: DUP2
0000053a: MSTORE
0000053b: PUSH1 0x20
0000053d: PUSH1 0x04
0000053f: DUP3
00000540: ADD
00000541: MSTORE
00000542: PUSH1 0x0a
00000544: PUSH1 0x24
00000546: DUP3
00000547: ADD
00000548: MSTORE
00000549: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
0000056a: PUSH1 0x44
0000056c: DUP3
0000056d: ADD
0000056e: MSTORE
0000056f: PUSH1 0x64
00000571: ADD
00000572: JUMPDEST
00000573: PUSH1 0x40
00000575: MLOAD
00000576: DUP1
00000577: SWAP2
00000578: SUB
00000579: SWAP1
0000057a: REVERT
0000057b: JUMPDEST
0000057c: PUSH1 0x02
0000057e: PUSH1 0x00
00000580: DUP2
00000581: SWAP1
00000582: SSTORE
00000583: POP
00000584: PUSH1 0x00
00000586: DUP1
00000587: PUSH2 0x05f4
0000058a: DUP8
0000058b: PUSH1 0x40
0000058d: MLOAD
0000058e: DUP1
0000058f: PUSH1 0x60
00000591: ADD
00000592: PUSH1 0x40
00000594: MSTORE
00000595: DUP1
00000596: DUP14
00000597: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000005ac: AND
000005ad: DUP2
000005ae: MSTORE
000005af: PUSH1 0x20
000005b1: ADD
000005b2: DUP13
000005b3: DUP2
000005b4: MSTORE
000005b5: PUSH1 0x20
000005b7: ADD
000005b8: DUP10
000005b9: DUP10
000005ba: DUP1
000005bb: DUP1
000005bc: PUSH1 0x1f
000005be: ADD
000005bf: PUSH1 0x20
000005c1: DUP1
000005c2: SWAP2
000005c3: DIV
000005c4: MUL
000005c5: PUSH1 0x20
000005c7: ADD
000005c8: PUSH1 0x40
000005ca: MLOAD
000005cb: SWAP1
000005cc: DUP2
000005cd: ADD
000005ce: PUSH1 0x40
000005d0: MSTORE
000005d1: DUP1
000005d2: SWAP4
000005d3: SWAP3
000005d4: SWAP2
000005d5: SWAP1
000005d6: DUP2
000005d7: DUP2
000005d8: MSTORE
000005d9: PUSH1 0x20
000005db: ADD
000005dc: DUP4
000005dd: DUP4
000005de: DUP1
000005df: DUP3
000005e0: DUP5
000005e1: CALLDATACOPY
000005e2: PUSH1 0x00
000005e4: SWAP3
000005e5: ADD
000005e6: SWAP2
000005e7: SWAP1
000005e8: SWAP2
000005e9: MSTORE
000005ea: POP
000005eb: POP
000005ec: POP
000005ed: SWAP2
000005ee: MSTORE
000005ef: POP
000005f0: PUSH2 0x1084
000005f3: JUMP
000005f4: JUMPDEST
000005f5: SWAP2
000005f6: POP
000005f7: SWAP2
000005f8: POP
000005f9: PUSH2 0x0605
000005fc: DUP3
000005fd: PUSH1 0x20
000005ff: ADD
00000600: MLOAD
00000601: PUSH2 0x12e3
00000604: JUMP
00000605: JUMPDEST
00000606: PUSH2 0x064a
00000609: DUP9
0000060a: DUP9
0000060b: DUP7
0000060c: DUP7
0000060d: DUP1
0000060e: DUP1
0000060f: PUSH1 0x1f
00000611: ADD
00000612: PUSH1 0x20
00000614: DUP1
00000615: SWAP2
00000616: DIV
00000617: MUL
00000618: PUSH1 0x20
0000061a: ADD
0000061b: PUSH1 0x40
0000061d: MLOAD
0000061e: SWAP1
0000061f: DUP2
00000620: ADD
00000621: PUSH1 0x40
00000623: MSTORE
00000624: DUP1
00000625: SWAP4
00000626: SWAP3
00000627: SWAP2
00000628: SWAP1
00000629: DUP2
0000062a: DUP2
0000062b: MSTORE
0000062c: PUSH1 0x20
0000062e: ADD
0000062f: DUP4
00000630: DUP4
00000631: DUP1
00000632: DUP3
00000633: DUP5
00000634: CALLDATACOPY
00000635: PUSH1 0x00
00000637: SWAP3
00000638: ADD
00000639: SWAP2
0000063a: SWAP1
0000063b: SWAP2
0000063c: MSTORE
0000063d: POP
0000063e: DUP8
0000063f: SWAP3
00000640: POP
00000641: DUP9
00000642: SWAP2
00000643: POP
00000644: PUSH2 0x1386
00000647: SWAP1
00000648: POP
00000649: JUMP
0000064a: JUMPDEST
0000064b: POP
0000064c: POP
0000064d: PUSH1 0x01
0000064f: PUSH1 0x00
00000651: SSTORE
00000652: POP
00000653: POP
00000654: POP
00000655: POP
00000656: POP
00000657: POP
00000658: POP
00000659: POP
0000065a: JUMP
0000065b: JUMPDEST
0000065c: PUSH1 0x07
0000065e: PUSH1 0x20
00000660: MSTORE
00000661: PUSH1 0x00
00000663: SWAP1
00000664: DUP2
00000665: MSTORE
00000666: PUSH1 0x40
00000668: SWAP1
00000669: KECCAK256
0000066a: DUP1
0000066b: SLOAD
0000066c: PUSH2 0x0674
0000066f: SWAP1
00000670: PUSH2 0x2c08
00000673: JUMP
00000674: JUMPDEST
00000675: DUP1
00000676: PUSH1 0x1f
00000678: ADD
00000679: PUSH1 0x20
0000067b: DUP1
0000067c: SWAP2
0000067d: DIV
0000067e: MUL
0000067f: PUSH1 0x20
00000681: ADD
00000682: PUSH1 0x40
00000684: MLOAD
00000685: SWAP1
00000686: DUP2
00000687: ADD
00000688: PUSH1 0x40
0000068a: MSTORE
0000068b: DUP1
0000068c: SWAP3
0000068d: SWAP2
0000068e: SWAP1
0000068f: DUP2
00000690: DUP2
00000691: MSTORE
00000692: PUSH1 0x20
00000694: ADD
00000695: DUP3
00000696: DUP1
00000697: SLOAD
00000698: PUSH2 0x06a0
0000069b: SWAP1
0000069c: PUSH2 0x2c08
0000069f: JUMP
000006a0: JUMPDEST
000006a1: DUP1
000006a2: ISZERO
000006a3: PUSH2 0x06ed
000006a6: JUMPI
000006a7: DUP1
000006a8: PUSH1 0x1f
000006aa: LT
000006ab: PUSH2 0x06c2
000006ae: JUMPI
000006af: PUSH2 0x0100
000006b2: DUP1
000006b3: DUP4
000006b4: SLOAD
000006b5: DIV
000006b6: MUL
000006b7: DUP4
000006b8: MSTORE
000006b9: SWAP2
000006ba: PUSH1 0x20
000006bc: ADD
000006bd: SWAP2
000006be: PUSH2 0x06ed
000006c1: JUMP
000006c2: JUMPDEST
000006c3: DUP3
000006c4: ADD
000006c5: SWAP2
000006c6: SWAP1
000006c7: PUSH1 0x00
000006c9: MSTORE
000006ca: PUSH1 0x20
000006cc: PUSH1 0x00
000006ce: KECCAK256
000006cf: SWAP1
000006d0: JUMPDEST
000006d1: DUP2
000006d2: SLOAD
000006d3: DUP2
000006d4: MSTORE
000006d5: SWAP1
000006d6: PUSH1 0x01
000006d8: ADD
000006d9: SWAP1
000006da: PUSH1 0x20
000006dc: ADD
000006dd: DUP1
000006de: DUP4
000006df: GT
000006e0: PUSH2 0x06d0
000006e3: JUMPI
000006e4: DUP3
000006e5: SWAP1
000006e6: SUB
000006e7: PUSH1 0x1f
000006e9: AND
000006ea: DUP3
000006eb: ADD
000006ec: SWAP2
000006ed: JUMPDEST
000006ee: POP
000006ef: POP
000006f0: POP
000006f1: POP
000006f2: POP
000006f3: DUP2
000006f4: JUMP
000006f5: JUMPDEST
000006f6: PUSH1 0x01
000006f8: SLOAD
000006f9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000070e: AND
0000070f: CALLER
00000710: EQ
00000711: PUSH2 0x0746
00000714: JUMPI
00000715: PUSH1 0x40
00000717: MLOAD
00000718: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000
00000739: DUP2
0000073a: MSTORE
0000073b: PUSH1 0x04
0000073d: ADD
0000073e: PUSH1 0x40
00000740: MLOAD
00000741: DUP1
00000742: SWAP2
00000743: SUB
00000744: SWAP1
00000745: REVERT
00000746: JUMPDEST
00000747: PUSH1 0x02
00000749: DUP1
0000074a: SLOAD
0000074b: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
0000076c: AND
0000076d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000782: DUP4
00000783: AND
00000784: SWAP1
00000785: DUP2
00000786: OR
00000787: SWAP1
00000788: SWAP2
00000789: SSTORE
0000078a: PUSH1 0x40
0000078c: MLOAD
0000078d: PUSH32 0x906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22
000007ae: SWAP1
000007af: PUSH1 0x00
000007b1: SWAP1
000007b2: LOG2
000007b3: POP
000007b4: JUMP
000007b5: JUMPDEST
000007b6: CALLER
000007b7: PUSH1 0x00
000007b9: SWAP1
000007ba: DUP2
000007bb: MSTORE
000007bc: PUSH32 0x271b3e2292ab6fd3ff496cd98d6d375af02f11568a701741f48bba7789f13a70
000007dd: PUSH1 0x20
000007df: MSTORE
000007e0: PUSH1 0x40
000007e2: SWAP1
000007e3: KECCAK256
000007e4: SLOAD
000007e5: PUSH32 0xc4c453d647953c0fd35db5a34ee76e60fb4abc3a8fb891a25936b70b38f29253
00000806: SWAP1
00000807: PUSH1 0xff
00000809: AND
0000080a: PUSH2 0x0842
0000080d: JUMPI
0000080e: PUSH1 0x40
00000810: MLOAD
00000811: PUSH32 0x962f633300000000000000000000000000000000000000000000000000000000
00000832: DUP2
00000833: MSTORE
00000834: PUSH1 0x04
00000836: DUP2
00000837: ADD
00000838: DUP3
00000839: SWAP1
0000083a: MSTORE
0000083b: PUSH1 0x24
0000083d: ADD
0000083e: PUSH2 0x0572
00000841: JUMP
00000842: JUMPDEST
00000843: PUSH2 0x084d
00000846: DUP5
00000847: DUP5
00000848: DUP5
00000849: PUSH2 0x16cb
0000084c: JUMP
0000084d: JUMPDEST
0000084e: POP
0000084f: POP
00000850: POP
00000851: POP
00000852: JUMP
00000853: JUMPDEST
00000854: PUSH1 0x00
00000856: SLOAD
00000857: PUSH1 0x01
00000859: EQ
0000085a: PUSH2 0x08bf
0000085d: JUMPI
0000085e: PUSH1 0x40
00000860: MLOAD
00000861: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00000882: DUP2
00000883: MSTORE
00000884: PUSH1 0x20
00000886: PUSH1 0x04
00000888: DUP3
00000889: ADD
0000088a: MSTORE
0000088b: PUSH1 0x0a
0000088d: PUSH1 0x24
0000088f: DUP3
00000890: ADD
00000891: MSTORE
00000892: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
000008b3: PUSH1 0x44
000008b5: DUP3
000008b6: ADD
000008b7: MSTORE
000008b8: PUSH1 0x64
000008ba: ADD
000008bb: PUSH2 0x0572
000008be: JUMP
000008bf: JUMPDEST
000008c0: PUSH1 0x02
000008c2: PUSH1 0x00
000008c4: DUP2
000008c5: SWAP1
000008c6: SSTORE
000008c7: POP
000008c8: PUSH1 0x00
000008ca: DUP1
000008cb: PUSH1 0x00
000008cd: DUP1
000008ce: DUP5
000008cf: DUP1
000008d0: PUSH1 0x20
000008d2: ADD
000008d3: SWAP1
000008d4: MLOAD
000008d5: DUP2
000008d6: ADD
000008d7: SWAP1
000008d8: PUSH2 0x08e1
000008db: SWAP2
000008dc: SWAP1
000008dd: PUSH2 0x2ca0
000008e0: JUMP
000008e1: JUMPDEST
000008e2: SWAP4
000008e3: POP
000008e4: SWAP4
000008e5: POP
000008e6: SWAP4
000008e7: POP
000008e8: SWAP4
000008e9: POP
000008ea: PUSH1 0x00
000008ec: PUSH1 0x40
000008ee: MLOAD
000008ef: DUP1
000008f0: PUSH1 0x60
000008f2: ADD
000008f3: PUSH1 0x40
000008f5: MSTORE
000008f6: DUP1
000008f7: DUP7
000008f8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000090d: AND
0000090e: DUP2
0000090f: MSTORE
00000910: PUSH1 0x20
00000912: ADD
00000913: DUP6
00000914: DUP2
00000915: MSTORE
00000916: PUSH1 0x20
00000918: ADD
00000919: DUP4
0000091a: DUP2
0000091b: MSTORE
0000091c: POP
0000091d: SWAP1
0000091e: POP
0000091f: PUSH1 0x60
00000921: PUSH2 0x092a
00000924: DUP9
00000925: DUP4
00000926: PUSH2 0x17c0
00000929: JUMP
0000092a: JUMPDEST
0000092b: DUP1
0000092c: MLOAD
0000092d: PUSH1 0x20
0000092f: DUP3
00000930: ADD
00000931: MLOAD
00000932: SWAP2
00000933: SWAP5
00000934: POP
00000935: SWAP2
00000936: SWAP3
00000937: POP
00000938: PUSH2 0x0941
0000093b: SWAP2
0000093c: SWAP1
0000093d: PUSH2 0x1a43
00000940: JUMP
00000941: JUMPDEST
00000942: PUSH2 0x094d
00000945: DUP6
00000946: DUP6
00000947: DUP4
00000948: DUP6
00000949: PUSH2 0x1af7
0000094c: JUMP
0000094d: JUMPDEST
0000094e: POP
0000094f: POP
00000950: PUSH1 0x01
00000952: PUSH1 0x00
00000954: SSTORE
00000955: POP
00000956: POP
00000957: POP
00000958: POP
00000959: POP
0000095a: POP
0000095b: JUMP
0000095c: JUMPDEST
0000095d: PUSH1 0x00
0000095f: DUP3
00000960: DUP2
00000961: MSTORE
00000962: PUSH1 0x03
00000964: PUSH1 0x20
00000966: SWAP1
00000967: DUP2
00000968: MSTORE
00000969: PUSH1 0x40
0000096b: DUP1
0000096c: DUP4
0000096d: KECCAK256
0000096e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000983: DUP6
00000984: AND
00000985: DUP5
00000986: MSTORE
00000987: SWAP1
00000988: SWAP2
00000989: MSTORE
0000098a: DUP2
0000098b: KECCAK256
0000098c: SLOAD
0000098d: PUSH1 0xff
0000098f: AND
00000990: JUMPDEST
00000991: SWAP4
00000992: SWAP3
00000993: POP
00000994: POP
00000995: POP
00000996: JUMP
00000997: JUMPDEST
00000998: PUSH1 0x00
0000099a: SLOAD
0000099b: PUSH1 0x01
0000099d: EQ
0000099e: PUSH2 0x0a03
000009a1: JUMPI
000009a2: PUSH1 0x40
000009a4: MLOAD
000009a5: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000009c6: DUP2
000009c7: MSTORE
000009c8: PUSH1 0x20
000009ca: PUSH1 0x04
000009cc: DUP3
000009cd: ADD
000009ce: MSTORE
000009cf: PUSH1 0x0a
000009d1: PUSH1 0x24
000009d3: DUP3
000009d4: ADD
000009d5: MSTORE
000009d6: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000
000009f7: PUSH1 0x44
000009f9: DUP3
000009fa: ADD
000009fb: MSTORE
000009fc: PUSH1 0x64
000009fe: ADD
000009ff: PUSH2 0x0572
00000a02: JUMP
00000a03: JUMPDEST
00000a04: PUSH1 0x02
00000a06: PUSH1 0x00
00000a08: SWAP1
00000a09: DUP2
00000a0a: SSTORE
00000a0b: DUP1
00000a0c: PUSH2 0x0a15
00000a0f: DUP5
00000a10: DUP5
00000a11: PUSH2 0x1d33
00000a14: JUMP
00000a15: JUMPDEST
00000a16: SWAP2
00000a17: POP
00000a18: SWAP2
00000a19: POP
00000a1a: PUSH2 0x0a2b
00000a1d: DUP2
00000a1e: PUSH1 0x00
00000a20: ADD
00000a21: MLOAD
00000a22: DUP3
00000a23: PUSH1 0x20
00000a25: ADD
00000a26: MLOAD
00000a27: PUSH2 0x1a43
00000a2a: JUMP
00000a2b: JUMPDEST
00000a2c: PUSH2 0x0a36
00000a2f: DUP5
00000a30: DUP5
00000a31: DUP5
00000a32: PUSH2 0x203b
00000a35: JUMP
00000a36: JUMPDEST
00000a37: POP
00000a38: POP
00000a39: PUSH1 0x01
00000a3b: PUSH1 0x00
00000a3d: SSTORE
00000a3e: POP
00000a3f: POP
00000a40: JUMP
00000a41: JUMPDEST
00000a42: PUSH1 0x01
00000a44: SLOAD
00000a45: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a5a: AND
00000a5b: CALLER
00000a5c: EQ
00000a5d: PUSH2 0x0a92
00000a60: JUMPI
00000a61: PUSH1 0x40
00000a63: MLOAD
00000a64: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000
00000a85: DUP2
00000a86: MSTORE
00000a87: PUSH1 0x04
00000a89: ADD
00000a8a: PUSH1 0x40
00000a8c: MLOAD
00000a8d: DUP1
00000a8e: SWAP2
00000a8f: SUB
00000a90: SWAP1
00000a91: REVERT
00000a92: JUMPDEST
00000a93: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000ab4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ac9: AND
00000aca: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
00000adf: EQ
00000ae0: PUSH2 0x0c3c
00000ae3: JUMPI
00000ae4: PUSH1 0x05
00000ae6: SLOAD
00000ae7: PUSH1 0x40
00000ae9: MLOAD
00000aea: PUSH32 0xdd62ed3e00000000000000000000000000000000000000000000000000000000
00000b0b: DUP2
00000b0c: MSTORE
00000b0d: ADDRESS
00000b0e: PUSH1 0x04
00000b10: DUP3
00000b11: ADD
00000b12: MSTORE
00000b13: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000b28: SWAP2
00000b29: DUP3
00000b2a: AND
00000b2b: PUSH1 0x24
00000b2d: DUP3
00000b2e: ADD
00000b2f: MSTORE
00000b30: PUSH1 0x00
00000b32: SWAP2
00000b33: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000b54: AND
00000b55: SWAP1
00000b56: PUSH4 0xdd62ed3e
00000b5b: SWAP1
00000b5c: PUSH1 0x44
00000b5e: ADD
00000b5f: PUSH1 0x20
00000b61: PUSH1 0x40
00000b63: MLOAD
00000b64: DUP1
00000b65: DUP4
00000b66: SUB
00000b67: DUP2
00000b68: DUP7
00000b69: GAS
00000b6a: STATICCALL
00000b6b: ISZERO
00000b6c: DUP1
00000b6d: ISZERO
00000b6e: PUSH2 0x0b7b
00000b71: JUMPI
00000b72: RETURNDATASIZE
00000b73: PUSH1 0x00
00000b75: DUP1
00000b76: RETURNDATACOPY
00000b77: RETURNDATASIZE
00000b78: PUSH1 0x00
00000b7a: REVERT
00000b7b: JUMPDEST
00000b7c: POP
00000b7d: POP
00000b7e: POP
00000b7f: POP
00000b80: PUSH1 0x40
00000b82: MLOAD
00000b83: RETURNDATASIZE
00000b84: PUSH1 0x1f
00000b86: NOT
00000b87: PUSH1 0x1f
00000b89: DUP3
00000b8a: ADD
00000b8b: AND
00000b8c: DUP3
00000b8d: ADD
00000b8e: DUP1
00000b8f: PUSH1 0x40
00000b91: MSTORE
00000b92: POP
00000b93: DUP2
00000b94: ADD
00000b95: SWAP1
00000b96: PUSH2 0x0b9f
00000b99: SWAP2
00000b9a: SWAP1
00000b9b: PUSH2 0x2d05
00000b9e: JUMP
00000b9f: JUMPDEST
00000ba0: GT
00000ba1: ISZERO
00000ba2: PUSH2 0x0beb
00000ba5: JUMPI
00000ba6: PUSH1 0x05
00000ba8: SLOAD
00000ba9: PUSH2 0x0beb
00000bac: SWAP1
00000bad: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000bce: SWAP1
00000bcf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000be4: AND
00000be5: PUSH1 0x00
00000be7: PUSH2 0x22f6
00000bea: JUMP
00000beb: JUMPDEST
00000bec: DUP1
00000bed: ISZERO
00000bee: PUSH2 0x0c3c
00000bf1: JUMPI
00000bf2: PUSH2 0x0c3c
00000bf5: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00000c16: DUP4
00000c17: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00000c38: PUSH2 0x22f6
00000c3b: JUMP
00000c3c: JUMPDEST
00000c3d: PUSH1 0x05
00000c3f: DUP1
00000c40: SLOAD
00000c41: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00000c62: AND
00000c63: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c78: DUP5
00000c79: AND
00000c7a: SWAP1
00000c7b: DUP2
00000c7c: OR
00000c7d: SWAP1
00000c7e: SWAP2
00000c7f: SSTORE
00000c80: PUSH1 0x40
00000c82: MLOAD
00000c83: SWAP1
00000c84: DUP2
00000c85: MSTORE
00000c86: PUSH32 0xe816c20840d998c8612f9b624b91687a80510eeb293cb09f7637379f6d73342d
00000ca7: SWAP1
00000ca8: PUSH1 0x20
00000caa: ADD
00000cab: PUSH1 0x40
00000cad: MLOAD
00000cae: DUP1
00000caf: SWAP2
00000cb0: SUB
00000cb1: SWAP1
00000cb2: LOG1
00000cb3: POP
00000cb4: POP
00000cb5: JUMP
00000cb6: JUMPDEST
00000cb7: PUSH1 0x01
00000cb9: SLOAD
00000cba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ccf: AND
00000cd0: CALLER
00000cd1: EQ
00000cd2: PUSH2 0x0d07
00000cd5: JUMPI
00000cd6: PUSH1 0x40
00000cd8: MLOAD
00000cd9: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000
00000cfa: DUP2
00000cfb: MSTORE
00000cfc: PUSH1 0x04
00000cfe: ADD
00000cff: PUSH1 0x40
00000d01: MLOAD
00000d02: DUP1
00000d03: SWAP2
00000d04: SUB
00000d05: SWAP1
00000d06: REVERT
00000d07: JUMPDEST
00000d08: PUSH2 0x04aa
00000d0b: DUP3
00000d0c: DUP3
00000d0d: PUSH2 0x23c5
00000d10: JUMP
00000d11: JUMPDEST
00000d12: PUSH1 0x01
00000d14: SLOAD
00000d15: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d2a: AND
00000d2b: CALLER
00000d2c: EQ
00000d2d: PUSH2 0x0d62
00000d30: JUMPI
00000d31: PUSH1 0x40
00000d33: MLOAD
00000d34: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000
00000d55: DUP2
00000d56: MSTORE
00000d57: PUSH1 0x04
00000d59: ADD
00000d5a: PUSH1 0x40
00000d5c: MLOAD
00000d5d: DUP1
00000d5e: SWAP2
00000d5f: SUB
00000d60: SWAP1
00000d61: REVERT
00000d62: JUMPDEST
00000d63: DUP3
00000d64: PUSH1 0x00
00000d66: JUMPDEST
00000d67: DUP2
00000d68: DUP2
00000d69: LT
00000d6a: ISZERO
00000d6b: PUSH2 0x0ec3
00000d6e: JUMPI
00000d6f: DUP4
00000d70: DUP4
00000d71: DUP3
00000d72: DUP2
00000d73: DUP2
00000d74: LT
00000d75: PUSH2 0x0d80
00000d78: JUMPI
00000d79: PUSH2 0x0d80
00000d7c: PUSH2 0x2d1e
00000d7f: JUMP
00000d80: JUMPDEST
00000d81: SWAP1
00000d82: POP
00000d83: PUSH1 0x20
00000d85: MUL
00000d86: ADD
00000d87: PUSH1 0x20
00000d89: DUP2
00000d8a: ADD
00000d8b: SWAP1
00000d8c: PUSH2 0x0d95
00000d8f: SWAP2
00000d90: SWAP1
00000d91: PUSH2 0x2d4d
00000d94: JUMP
00000d95: JUMPDEST
00000d96: PUSH1 0x08
00000d98: PUSH1 0x00
00000d9a: DUP9
00000d9b: DUP9
00000d9c: DUP6
00000d9d: DUP2
00000d9e: DUP2
00000d9f: LT
00000da0: PUSH2 0x0dab
00000da3: JUMPI
00000da4: PUSH2 0x0dab
00000da7: PUSH2 0x2d1e
00000daa: JUMP
00000dab: JUMPDEST
00000dac: SWAP1
00000dad: POP
00000dae: PUSH1 0x20
00000db0: MUL
00000db1: ADD
00000db2: PUSH1 0x20
00000db4: DUP2
00000db5: ADD
00000db6: SWAP1
00000db7: PUSH2 0x0dc0
00000dba: SWAP2
00000dbb: SWAP1
00000dbc: PUSH2 0x284c
00000dbf: JUMP
00000dc0: JUMPDEST
00000dc1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000dd6: AND
00000dd7: DUP2
00000dd8: MSTORE
00000dd9: PUSH1 0x20
00000ddb: DUP2
00000ddc: ADD
00000ddd: SWAP2
00000dde: SWAP1
00000ddf: SWAP2
00000de0: MSTORE
00000de1: PUSH1 0x40
00000de3: ADD
00000de4: PUSH1 0x00
00000de6: KECCAK256
00000de7: DUP1
00000de8: SLOAD
00000de9: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
00000e0a: AND
00000e0b: SWAP2
00000e0c: ISZERO
00000e0d: ISZERO
00000e0e: SWAP2
00000e0f: SWAP1
00000e10: SWAP2
00000e11: OR
00000e12: SWAP1
00000e13: SSTORE
00000e14: PUSH32 0x857309f1a328784e9fc9749624be5d32fd8e7afab58e7fe9a218dd613a37f15c
00000e35: DUP7
00000e36: DUP7
00000e37: DUP4
00000e38: DUP2
00000e39: DUP2
00000e3a: LT
00000e3b: PUSH2 0x0e46
00000e3e: JUMPI
00000e3f: PUSH2 0x0e46
00000e42: PUSH2 0x2d1e
00000e45: JUMP
00000e46: JUMPDEST
00000e47: SWAP1
00000e48: POP
00000e49: PUSH1 0x20
00000e4b: MUL
00000e4c: ADD
00000e4d: PUSH1 0x20
00000e4f: DUP2
00000e50: ADD
00000e51: SWAP1
00000e52: PUSH2 0x0e5b
00000e55: SWAP2
00000e56: SWAP1
00000e57: PUSH2 0x284c
00000e5a: JUMP
00000e5b: JUMPDEST
00000e5c: DUP6
00000e5d: DUP6
00000e5e: DUP5
00000e5f: DUP2
00000e60: DUP2
00000e61: LT
00000e62: PUSH2 0x0e6d
00000e65: JUMPI
00000e66: PUSH2 0x0e6d
00000e69: PUSH2 0x2d1e
00000e6c: JUMP
00000e6d: JUMPDEST
00000e6e: SWAP1
00000e6f: POP
00000e70: PUSH1 0x20
00000e72: MUL
00000e73: ADD
00000e74: PUSH1 0x20
00000e76: DUP2
00000e77: ADD
00000e78: SWAP1
00000e79: PUSH2 0x0e82
00000e7c: SWAP2
00000e7d: SWAP1
00000e7e: PUSH2 0x2d4d
00000e81: JUMP
00000e82: JUMPDEST
00000e83: PUSH1 0x40
00000e85: DUP1
00000e86: MLOAD
00000e87: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e9c: SWAP1
00000e9d: SWAP4
00000e9e: AND
00000e9f: DUP4
00000ea0: MSTORE
00000ea1: SWAP1
00000ea2: ISZERO
00000ea3: ISZERO
00000ea4: PUSH1 0x20
00000ea6: DUP4
00000ea7: ADD
00000ea8: MSTORE
00000ea9: ADD
00000eaa: PUSH1 0x40
00000eac: MLOAD
00000ead: DUP1
00000eae: SWAP2
00000eaf: SUB
00000eb0: SWAP1
00000eb1: LOG1
00000eb2: DUP1
00000eb3: PUSH2 0x0ebb
00000eb6: DUP2
00000eb7: PUSH2 0x2d97
00000eba: JUMP
00000ebb: JUMPDEST
00000ebc: SWAP2
00000ebd: POP
00000ebe: POP
00000ebf: PUSH2 0x0d66
00000ec2: JUMP
00000ec3: JUMPDEST
00000ec4: POP
00000ec5: POP
00000ec6: POP
00000ec7: POP
00000ec8: POP
00000ec9: POP
00000eca: JUMP
00000ecb: JUMPDEST
00000ecc: PUSH1 0x06
00000ece: PUSH1 0x20
00000ed0: MSTORE
00000ed1: PUSH1 0x00
00000ed3: SWAP1
00000ed4: DUP2
00000ed5: MSTORE
00000ed6: PUSH1 0x40
00000ed8: SWAP1
00000ed9: KECCAK256
00000eda: DUP1
00000edb: SLOAD
00000edc: PUSH2 0x0674
00000edf: SWAP1
00000ee0: PUSH2 0x2c08
00000ee3: JUMP
00000ee4: JUMPDEST
00000ee5: PUSH1 0x40
00000ee7: MLOAD
00000ee8: PUSH32 0x666758ca00000000000000000000000000000000000000000000000000000000
00000f09: DUP2
00000f0a: MSTORE
00000f0b: PUSH1 0x04
00000f0d: DUP2
00000f0e: ADD
00000f0f: DUP4
00000f10: SWAP1
00000f11: MSTORE
00000f12: PUSH1 0x24
00000f14: DUP2
00000f15: ADD
00000f16: DUP3
00000f17: SWAP1
00000f18: MSTORE
00000f19: PUSH1 0x00
00000f1b: SWAP1
00000f1c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f31: DUP6
00000f32: AND
00000f33: SWAP1
00000f34: PUSH4 0x666758ca
00000f39: SWAP1
00000f3a: PUSH1 0x44
00000f3c: ADD
00000f3d: PUSH1 0x20
00000f3f: PUSH1 0x40
00000f41: MLOAD
00000f42: DUP1
00000f43: DUP4
00000f44: SUB
00000f45: DUP2
00000f46: DUP7
00000f47: GAS
00000f48: STATICCALL
00000f49: ISZERO
00000f4a: DUP1
00000f4b: ISZERO
00000f4c: PUSH2 0x0f59
00000f4f: JUMPI
00000f50: RETURNDATASIZE
00000f51: PUSH1 0x00
00000f53: DUP1
00000f54: RETURNDATACOPY
00000f55: RETURNDATASIZE
00000f56: PUSH1 0x00
00000f58: REVERT
00000f59: JUMPDEST
00000f5a: POP
00000f5b: POP
00000f5c: POP
00000f5d: POP
00000f5e: PUSH1 0x40
00000f60: MLOAD
00000f61: RETURNDATASIZE
00000f62: PUSH1 0x1f
00000f64: NOT
00000f65: PUSH1 0x1f
00000f67: DUP3
00000f68: ADD
00000f69: AND
00000f6a: DUP3
00000f6b: ADD
00000f6c: DUP1
00000f6d: PUSH1 0x40
00000f6f: MSTORE
00000f70: POP
00000f71: DUP2
00000f72: ADD
00000f73: SWAP1
00000f74: PUSH2 0x0f7d
00000f77: SWAP2
00000f78: SWAP1
00000f79: PUSH2 0x2d05
00000f7c: JUMP
00000f7d: JUMPDEST
00000f7e: SWAP5
00000f7f: SWAP4
00000f80: POP
00000f81: POP
00000f82: POP
00000f83: POP
00000f84: JUMP
00000f85: JUMPDEST
00000f86: PUSH1 0x00
00000f88: DUP3
00000f89: DUP2
00000f8a: MSTORE
00000f8b: PUSH1 0x03
00000f8d: PUSH1 0x20
00000f8f: SWAP1
00000f90: DUP2
00000f91: MSTORE
00000f92: PUSH1 0x40
00000f94: DUP1
00000f95: DUP4
00000f96: KECCAK256
00000f97: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000fac: DUP6
00000fad: AND
00000fae: DUP1
00000faf: DUP6
00000fb0: MSTORE
00000fb1: SWAP3
00000fb2: MSTORE
00000fb3: DUP1
00000fb4: DUP4
00000fb5: KECCAK256
00000fb6: DUP1
00000fb7: SLOAD
00000fb8: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
00000fd9: AND
00000fda: PUSH1 0x01
00000fdc: OR
00000fdd: SWAP1
00000fde: SSTORE
00000fdf: MLOAD
00000fe0: SWAP1
00000fe1: SWAP2
00000fe2: DUP5
00000fe3: SWAP2
00000fe4: PUSH32 0x2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f3
00001005: SWAP2
00001006: SWAP1
00001007: LOG3
00001008: POP
00001009: POP
0000100a: JUMP
0000100b: JUMPDEST
0000100c: PUSH1 0x01
0000100e: DUP1
0000100f: SLOAD
00001010: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001025: DUP4
00001026: AND
00001027: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000
00001048: SWAP2
00001049: DUP3
0000104a: AND
0000104b: DUP2
0000104c: OR
0000104d: SWAP1
0000104e: SWAP3
0000104f: SSTORE
00001050: PUSH1 0x02
00001052: DUP1
00001053: SLOAD
00001054: SWAP1
00001055: SWAP2
00001056: AND
00001057: SWAP1
00001058: SSTORE
00001059: PUSH1 0x40
0000105b: MLOAD
0000105c: PUSH32 0xfbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f87
0000107d: SWAP1
0000107e: PUSH1 0x00
00001080: SWAP1
00001081: LOG2
00001082: POP
00001083: JUMP
00001084: JUMPDEST
00001085: PUSH1 0x40
00001087: DUP1
00001088: MLOAD
00001089: PUSH1 0x60
0000108b: DUP1
0000108c: DUP3
0000108d: ADD
0000108e: DUP4
0000108f: MSTORE
00001090: PUSH1 0x00
00001092: DUP1
00001093: DUP4
00001094: MSTORE
00001095: PUSH1 0x20
00001097: DUP4
00001098: ADD
00001099: MSTORE
0000109a: SWAP2
0000109b: DUP2
0000109c: ADD
0000109d: SWAP2
0000109e: SWAP1
0000109f: SWAP2
000010a0: MSTORE
000010a1: DUP2
000010a2: MLOAD
000010a3: PUSH1 0x60
000010a5: SWAP1
000010a6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000010bb: AND
000010bc: PUSH2 0x10f1
000010bf: JUMPI
000010c0: PUSH1 0x40
000010c2: MLOAD
000010c3: PUSH32 0x96bbcf1e00000000000000000000000000000000000000000000000000000000
000010e4: DUP2
000010e5: MSTORE
000010e6: PUSH1 0x04
000010e8: ADD
000010e9: PUSH1 0x40
000010eb: MLOAD
000010ec: DUP1
000010ed: SWAP2
000010ee: SUB
000010ef: SWAP1
000010f0: REVERT
000010f1: JUMPDEST
000010f2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001107: DUP5
00001108: AND
00001109: PUSH1 0x00
0000110b: SWAP1
0000110c: DUP2
0000110d: MSTORE
0000110e: PUSH1 0x08
00001110: PUSH1 0x20
00001112: MSTORE
00001113: PUSH1 0x40
00001115: SWAP1
00001116: KECCAK256
00001117: SLOAD
00001118: PUSH1 0xff
0000111a: AND
0000111b: PUSH2 0x1150
0000111e: JUMPI
0000111f: PUSH1 0x40
00001121: MLOAD
00001122: PUSH32 0x5b0a758300000000000000000000000000000000000000000000000000000000
00001143: DUP2
00001144: MSTORE
00001145: PUSH1 0x04
00001147: ADD
00001148: PUSH1 0x40
0000114a: MLOAD
0000114b: DUP1
0000114c: SWAP2
0000114d: SUB
0000114e: SWAP1
0000114f: REVERT
00001150: JUMPDEST
00001151: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00001172: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001187: AND
00001188: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
0000119d: EQ
0000119e: DUP1
0000119f: ISZERO
000011a0: PUSH2 0x11ac
000011a3: JUMPI
000011a4: POP
000011a5: DUP3
000011a6: PUSH1 0x20
000011a8: ADD
000011a9: MLOAD
000011aa: CALLVALUE
000011ab: LT
000011ac: JUMPDEST
000011ad: ISZERO
000011ae: PUSH2 0x11e3
000011b1: JUMPI
000011b2: PUSH1 0x40
000011b4: MLOAD
000011b5: PUSH32 0x78f38f7600000000000000000000000000000000000000000000000000000000
000011d6: DUP2
000011d7: MSTORE
000011d8: PUSH1 0x04
000011da: ADD
000011db: PUSH1 0x40
000011dd: MLOAD
000011de: DUP1
000011df: SWAP2
000011e0: SUB
000011e1: SWAP1
000011e2: REVERT
000011e3: JUMPDEST
000011e4: PUSH1 0x05
000011e6: SLOAD
000011e7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000011fc: AND
000011fd: ISZERO
000011fe: PUSH2 0x12dc
00001201: JUMPI
00001202: PUSH1 0x05
00001204: SLOAD
00001205: PUSH1 0x40
00001207: DUP1
00001208: MLOAD
00001209: PUSH1 0x60
0000120b: DUP2
0000120c: ADD
0000120d: DUP3
0000120e: MSTORE
0000120f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001224: DUP8
00001225: DUP2
00001226: AND
00001227: DUP3
00001228: MSTORE
00001229: CALLER
0000122a: PUSH1 0x20
0000122c: DUP4
0000122d: ADD
0000122e: MSTORE
0000122f: DUP2
00001230: DUP4
00001231: ADD
00001232: DUP8
00001233: SWAP1
00001234: MSTORE
00001235: SWAP2
00001236: MLOAD
00001237: PUSH32 0xf59ad99000000000000000000000000000000000000000000000000000000000
00001258: DUP2
00001259: MSTORE
0000125a: SWAP2
0000125b: SWAP1
0000125c: SWAP3
0000125d: AND
0000125e: SWAP2
0000125f: PUSH4 0xf59ad990
00001264: SWAP2
00001265: PUSH2 0x1271
00001268: SWAP2
00001269: SWAP1
0000126a: PUSH1 0x04
0000126c: ADD
0000126d: PUSH2 0x2e0e
00001270: JUMP
00001271: JUMPDEST
00001272: PUSH1 0x00
00001274: PUSH1 0x40
00001276: MLOAD
00001277: DUP1
00001278: DUP4
00001279: SUB
0000127a: DUP2
0000127b: PUSH1 0x00
0000127d: DUP8
0000127e: GAS
0000127f: CALL
00001280: ISZERO
00001281: DUP1
00001282: ISZERO
00001283: PUSH2 0x1290
00001286: JUMPI
00001287: RETURNDATASIZE
00001288: PUSH1 0x00
0000128a: DUP1
0000128b: RETURNDATACOPY
0000128c: RETURNDATASIZE
0000128d: PUSH1 0x00
0000128f: REVERT
00001290: JUMPDEST
00001291: POP
00001292: POP
00001293: POP
00001294: POP
00001295: PUSH1 0x40
00001297: MLOAD
00001298: RETURNDATASIZE
00001299: PUSH1 0x00
0000129b: DUP3
0000129c: RETURNDATACOPY
0000129d: PUSH1 0x1f
0000129f: RETURNDATASIZE
000012a0: SWAP1
000012a1: DUP2
000012a2: ADD
000012a3: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000012c4: AND
000012c5: DUP3
000012c6: ADD
000012c7: PUSH1 0x40
000012c9: MSTORE
000012ca: PUSH2 0x12d6
000012cd: SWAP2
000012ce: SWAP1
000012cf: DUP2
000012d0: ADD
000012d1: SWAP1
000012d2: PUSH2 0x2edc
000012d5: JUMP
000012d6: JUMPDEST
000012d7: SWAP1
000012d8: SWAP3
000012d9: POP
000012da: SWAP1
000012db: POP
000012dc: JUMPDEST
000012dd: SWAP3
000012de: POP
000012df: SWAP3
000012e0: SWAP1
000012e1: POP
000012e2: JUMP
000012e3: JUMPDEST
000012e4: DUP1
000012e5: ISZERO
000012e6: DUP1
000012e7: PUSH2 0x1339
000012ea: JUMPI
000012eb: POP
000012ec: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
0000130d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001322: AND
00001323: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
00001338: EQ
00001339: JUMPDEST
0000133a: ISZERO
0000133b: PUSH2 0x1341
0000133e: JUMPI
0000133f: POP
00001340: JUMP
00001341: JUMPDEST
00001342: PUSH2 0x1383
00001345: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000135a: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
0000137b: AND
0000137c: CALLER
0000137d: ADDRESS
0000137e: DUP5
0000137f: PUSH2 0x2448
00001382: JUMP
00001383: JUMPDEST
00001384: POP
00001385: JUMP
00001386: JUMPDEST
00001387: PUSH1 0x05
00001389: SLOAD
0000138a: DUP2
0000138b: SWAP1
0000138c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000013a1: AND
000013a2: ISZERO
000013a3: PUSH2 0x1486
000013a6: JUMPI
000013a7: PUSH1 0x05
000013a9: SLOAD
000013aa: PUSH1 0x40
000013ac: DUP1
000013ad: MLOAD
000013ae: PUSH1 0x80
000013b0: DUP2
000013b1: ADD
000013b2: DUP3
000013b3: MSTORE
000013b4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000013c9: DUP9
000013ca: DUP2
000013cb: AND
000013cc: DUP3
000013cd: MSTORE
000013ce: PUSH1 0x20
000013d0: DUP3
000013d1: ADD
000013d2: DUP9
000013d3: SWAP1
000013d4: MSTORE
000013d5: DUP2
000013d6: DUP4
000013d7: ADD
000013d8: DUP8
000013d9: SWAP1
000013da: MSTORE
000013db: PUSH1 0x60
000013dd: DUP3
000013de: ADD
000013df: DUP7
000013e0: SWAP1
000013e1: MSTORE
000013e2: SWAP2
000013e3: MLOAD
000013e4: PUSH32 0x62811bf200000000000000000000000000000000000000000000000000000000
00001405: DUP2
00001406: MSTORE
00001407: SWAP2
00001408: SWAP1
00001409: SWAP3
0000140a: AND
0000140b: SWAP2
0000140c: PUSH4 0x62811bf2
00001411: SWAP2
00001412: PUSH2 0x141e
00001415: SWAP2
00001416: SWAP1
00001417: PUSH1 0x04
00001419: ADD
0000141a: PUSH2 0x2f40
0000141d: JUMP
0000141e: JUMPDEST
0000141f: PUSH1 0x00
00001421: PUSH1 0x40
00001423: MLOAD
00001424: DUP1
00001425: DUP4
00001426: SUB
00001427: DUP2
00001428: PUSH1 0x00
0000142a: DUP8
0000142b: GAS
0000142c: CALL
0000142d: ISZERO
0000142e: DUP1
0000142f: ISZERO
00001430: PUSH2 0x143d
00001433: JUMPI
00001434: RETURNDATASIZE
00001435: PUSH1 0x00
00001437: DUP1
00001438: RETURNDATACOPY
00001439: RETURNDATASIZE
0000143a: PUSH1 0x00
0000143c: REVERT
0000143d: JUMPDEST
0000143e: POP
0000143f: POP
00001440: POP
00001441: POP
00001442: PUSH1 0x40
00001444: MLOAD
00001445: RETURNDATASIZE
00001446: PUSH1 0x00
00001448: DUP3
00001449: RETURNDATACOPY
0000144a: PUSH1 0x1f
0000144c: RETURNDATASIZE
0000144d: SWAP1
0000144e: DUP2
0000144f: ADD
00001450: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00001471: AND
00001472: DUP3
00001473: ADD
00001474: PUSH1 0x40
00001476: MSTORE
00001477: PUSH2 0x1483
0000147a: SWAP2
0000147b: SWAP1
0000147c: DUP2
0000147d: ADD
0000147e: SWAP1
0000147f: PUSH2 0x2fdf
00001482: JUMP
00001483: JUMPDEST
00001484: SWAP1
00001485: POP
00001486: JUMPDEST
00001487: PUSH1 0x00
00001489: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
000014aa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014bf: AND
000014c0: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
000014d5: EQ
000014d6: PUSH2 0x14df
000014d9: JUMPI
000014da: CALLVALUE
000014db: PUSH2 0x14ee
000014de: JUMP
000014df: JUMPDEST
000014e0: PUSH1 0x20
000014e2: DUP3
000014e3: ADD
000014e4: MLOAD
000014e5: PUSH2 0x14ee
000014e8: SWAP1
000014e9: CALLVALUE
000014ea: PUSH2 0x3014
000014ed: JUMP
000014ee: JUMPDEST
000014ef: SWAP1
000014f0: POP
000014f1: PUSH1 0x00
000014f3: DUP7
000014f4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001509: AND
0000150a: PUSH4 0x74fa24a6
0000150f: PUSH1 0x40
00001511: MLOAD
00001512: DUP2
00001513: PUSH4 0xffffffff
00001518: AND
00001519: PUSH1 0xe0
0000151b: SHL
0000151c: DUP2
0000151d: MSTORE
0000151e: PUSH1 0x04
00001520: ADD
00001521: PUSH1 0x20
00001523: PUSH1 0x40
00001525: MLOAD
00001526: DUP1
00001527: DUP4
00001528: SUB
00001529: DUP2
0000152a: DUP7
0000152b: GAS
0000152c: STATICCALL
0000152d: ISZERO
0000152e: DUP1
0000152f: ISZERO
00001530: PUSH2 0x153d
00001533: JUMPI
00001534: RETURNDATASIZE
00001535: PUSH1 0x00
00001537: DUP1
00001538: RETURNDATACOPY
00001539: RETURNDATASIZE
0000153a: PUSH1 0x00
0000153c: REVERT
0000153d: JUMPDEST
0000153e: POP
0000153f: POP
00001540: POP
00001541: POP
00001542: PUSH1 0x40
00001544: MLOAD
00001545: RETURNDATASIZE
00001546: PUSH1 0x1f
00001548: NOT
00001549: PUSH1 0x1f
0000154b: DUP3
0000154c: ADD
0000154d: AND
0000154e: DUP3
0000154f: ADD
00001550: DUP1
00001551: PUSH1 0x40
00001553: MSTORE
00001554: POP
00001555: DUP2
00001556: ADD
00001557: SWAP1
00001558: PUSH2 0x1561
0000155b: SWAP2
0000155c: SWAP1
0000155d: PUSH2 0x2d05
00001560: JUMP
00001561: JUMPDEST
00001562: SWAP1
00001563: POP
00001564: PUSH1 0x00
00001566: DUP8
00001567: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000157c: AND
0000157d: PUSH4 0xac0710cb
00001582: DUP5
00001583: DUP12
00001584: DUP8
00001585: PUSH1 0x00
00001587: ADD
00001588: MLOAD
00001589: DUP9
0000158a: PUSH1 0x20
0000158c: ADD
0000158d: MLOAD
0000158e: DUP8
0000158f: DUP11
00001590: PUSH1 0x40
00001592: ADD
00001593: MLOAD
00001594: PUSH1 0x40
00001596: MLOAD
00001597: PUSH1 0x20
00001599: ADD
0000159a: PUSH2 0x15a6
0000159d: SWAP5
0000159e: SWAP4
0000159f: SWAP3
000015a0: SWAP2
000015a1: SWAP1
000015a2: PUSH2 0x302b
000015a5: JUMP
000015a6: JUMPDEST
000015a7: PUSH1 0x40
000015a9: MLOAD
000015aa: PUSH1 0x20
000015ac: DUP2
000015ad: DUP4
000015ae: SUB
000015af: SUB
000015b0: DUP2
000015b1: MSTORE
000015b2: SWAP1
000015b3: PUSH1 0x40
000015b5: MSTORE
000015b6: DUP12
000015b7: PUSH1 0x40
000015b9: MLOAD
000015ba: DUP6
000015bb: PUSH4 0xffffffff
000015c0: AND
000015c1: PUSH1 0xe0
000015c3: SHL
000015c4: DUP2
000015c5: MSTORE
000015c6: PUSH1 0x04
000015c8: ADD
000015c9: PUSH2 0x15d4
000015cc: SWAP4
000015cd: SWAP3
000015ce: SWAP2
000015cf: SWAP1
000015d0: PUSH2 0x3070
000015d3: JUMP
000015d4: JUMPDEST
000015d5: PUSH1 0x20
000015d7: PUSH1 0x40
000015d9: MLOAD
000015da: DUP1
000015db: DUP4
000015dc: SUB
000015dd: DUP2
000015de: DUP6
000015df: DUP9
000015e0: GAS
000015e1: CALL
000015e2: ISZERO
000015e3: DUP1
000015e4: ISZERO
000015e5: PUSH2 0x15f2
000015e8: JUMPI
000015e9: RETURNDATASIZE
000015ea: PUSH1 0x00
000015ec: DUP1
000015ed: RETURNDATACOPY
000015ee: RETURNDATASIZE
000015ef: PUSH1 0x00
000015f1: REVERT
000015f2: JUMPDEST
000015f3: POP
000015f4: POP
000015f5: POP
000015f6: POP
000015f7: POP
000015f8: PUSH1 0x40
000015fa: MLOAD
000015fb: RETURNDATASIZE
000015fc: PUSH1 0x1f
000015fe: NOT
000015ff: PUSH1 0x1f
00001601: DUP3
00001602: ADD
00001603: AND
00001604: DUP3
00001605: ADD
00001606: DUP1
00001607: PUSH1 0x40
00001609: MSTORE
0000160a: POP
0000160b: DUP2
0000160c: ADD
0000160d: SWAP1
0000160e: PUSH2 0x1617
00001611: SWAP2
00001612: SWAP1
00001613: PUSH2 0x2d05
00001616: JUMP
00001617: JUMPDEST
00001618: SWAP1
00001619: POP
0000161a: DUP2
0000161b: DUP2
0000161c: EQ
0000161d: PUSH2 0x1652
00001620: JUMPI
00001621: PUSH1 0x40
00001623: MLOAD
00001624: PUSH32 0x7b7bbbe000000000000000000000000000000000000000000000000000000000
00001645: DUP2
00001646: MSTORE
00001647: PUSH1 0x04
00001649: ADD
0000164a: PUSH1 0x40
0000164c: MLOAD
0000164d: DUP1
0000164e: SWAP2
0000164f: SUB
00001650: SWAP1
00001651: REVERT
00001652: JUMPDEST
00001653: DUP4
00001654: MLOAD
00001655: PUSH1 0x20
00001657: DUP1
00001658: DUP7
00001659: ADD
0000165a: MLOAD
0000165b: PUSH1 0x40
0000165d: DUP1
0000165e: MLOAD
0000165f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001674: DUP14
00001675: DUP2
00001676: AND
00001677: DUP3
00001678: MSTORE
00001679: CALLER
0000167a: SWAP5
0000167b: DUP3
0000167c: ADD
0000167d: SWAP5
0000167e: SWAP1
0000167f: SWAP5
00001680: MSTORE
00001681: SWAP3
00001682: SWAP1
00001683: SWAP4
00001684: AND
00001685: DUP3
00001686: DUP5
00001687: ADD
00001688: MSTORE
00001689: PUSH1 0x60
0000168b: DUP3
0000168c: ADD
0000168d: MSTORE
0000168e: PUSH1 0x80
00001690: DUP2
00001691: ADD
00001692: DUP5
00001693: SWAP1
00001694: MSTORE
00001695: SWAP1
00001696: MLOAD
00001697: PUSH32 0xc74a00177d2c63e6eead5ea7936974ad9d0121f86140723b8909f8ec9662cc61
000016b8: SWAP2
000016b9: DUP2
000016ba: SWAP1
000016bb: SUB
000016bc: PUSH1 0xa0
000016be: ADD
000016bf: SWAP1
000016c0: LOG1
000016c1: POP
000016c2: POP
000016c3: POP
000016c4: POP
000016c5: POP
000016c6: POP
000016c7: POP
000016c8: POP
000016c9: POP
000016ca: JUMP
000016cb: JUMPDEST
000016cc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000016e1: DUP3
000016e2: AND
000016e3: PUSH2 0x1718
000016e6: JUMPI
000016e7: PUSH1 0x40
000016e9: MLOAD
000016ea: PUSH32 0xd92e233d00000000000000000000000000000000000000000000000000000000
0000170b: DUP2
0000170c: MSTORE
0000170d: PUSH1 0x04
0000170f: ADD
00001710: PUSH1 0x40
00001712: MLOAD
00001713: DUP1
00001714: SWAP2
00001715: SUB
00001716: SWAP1
00001717: REVERT
00001718: JUMPDEST
00001719: PUSH32 0xffffffffffffffffffffffff1111111111111111111111111111111111111112
0000173a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000174f: DUP5
00001750: AND
00001751: ADD
00001752: PUSH2 0x1764
00001755: JUMPI
00001756: PUSH2 0x175f
00001759: DUP3
0000175a: DUP3
0000175b: PUSH2 0x2533
0000175e: JUMP
0000175f: JUMPDEST
00001760: POP
00001761: POP
00001762: POP
00001763: JUMP
00001764: JUMPDEST
00001765: DUP3
00001766: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000177b: AND
0000177c: EXTCODESIZE
0000177d: PUSH1 0x00
0000177f: SUB
00001780: PUSH2 0x17b5
00001783: JUMPI
00001784: PUSH1 0x40
00001786: MLOAD
00001787: PUSH32 0x1eb00b0600000000000000000000000000000000000000000000000000000000
000017a8: DUP2
000017a9: MSTORE
000017aa: PUSH1 0x04
000017ac: ADD
000017ad: PUSH1 0x40
000017af: MLOAD
000017b0: DUP1
000017b1: SWAP2
000017b2: SUB
000017b3: SWAP1
000017b4: REVERT
000017b5: JUMPDEST
000017b6: PUSH2 0x175f
000017b9: DUP4
000017ba: DUP4
000017bb: DUP4
000017bc: PUSH2 0x25a8
000017bf: JUMP
000017c0: JUMPDEST
000017c1: PUSH1 0x40
000017c3: DUP1
000017c4: MLOAD
000017c5: PUSH1 0x60
000017c7: DUP2
000017c8: DUP2
000017c9: ADD
000017ca: DUP4
000017cb: MSTORE
000017cc: PUSH1 0x00
000017ce: DUP1
000017cf: DUP4
000017d0: MSTORE
000017d1: PUSH1 0x20
000017d3: DUP4
000017d4: ADD
000017d5: MSTORE
000017d6: SWAP2
000017d7: DUP2
000017d8: ADD
000017d9: DUP3
000017da: SWAP1
000017db: MSTORE
000017dc: CALLER
000017dd: PUSH1 0x00
000017df: SWAP1
000017e0: DUP2
000017e1: MSTORE
000017e2: PUSH1 0x08
000017e4: PUSH1 0x20
000017e6: MSTORE
000017e7: PUSH1 0x40
000017e9: SWAP1
000017ea: KECCAK256
000017eb: SLOAD
000017ec: PUSH1 0xff
000017ee: AND
000017ef: PUSH2 0x1824
000017f2: JUMPI
000017f3: PUSH1 0x40
000017f5: MLOAD
000017f6: PUSH32 0x5b0a758300000000000000000000000000000000000000000000000000000000
00001817: DUP2
00001818: MSTORE
00001819: PUSH1 0x04
0000181b: ADD
0000181c: PUSH1 0x40
0000181e: MLOAD
0000181f: DUP1
00001820: SWAP2
00001821: SUB
00001822: SWAP1
00001823: REVERT
00001824: JUMPDEST
00001825: DUP3
00001826: MLOAD
00001827: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000183c: AND
0000183d: ADDRESS
0000183e: EQ
0000183f: DUP1
00001840: PUSH2 0x1898
00001843: JUMPI
00001844: POP
00001845: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00001866: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000187b: AND
0000187c: DUP4
0000187d: PUSH1 0x00
0000187f: ADD
00001880: MLOAD
00001881: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001896: AND
00001897: EQ
00001898: JUMPDEST
00001899: ISZERO
0000189a: PUSH2 0x18cf
0000189d: JUMPI
0000189e: PUSH1 0x40
000018a0: MLOAD
000018a1: PUSH32 0x285c601600000000000000000000000000000000000000000000000000000000
000018c2: DUP2
000018c3: MSTORE
000018c4: PUSH1 0x04
000018c6: ADD
000018c7: PUSH1 0x40
000018c9: MLOAD
000018ca: DUP1
000018cb: SWAP2
000018cc: SUB
000018cd: SWAP1
000018ce: REVERT
000018cf: JUMPDEST
000018d0: PUSH1 0x05
000018d2: SLOAD
000018d3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000018e8: AND
000018e9: ISZERO
000018ea: PUSH2 0x12dc
000018ed: JUMPI
000018ee: PUSH1 0x05
000018f0: SLOAD
000018f1: PUSH1 0x40
000018f3: DUP1
000018f4: MLOAD
000018f5: PUSH1 0x60
000018f7: DUP2
000018f8: ADD
000018f9: DUP3
000018fa: MSTORE
000018fb: CALLER
000018fc: DUP1
000018fd: DUP3
000018fe: MSTORE
000018ff: PUSH1 0x00
00001901: SWAP1
00001902: DUP2
00001903: MSTORE
00001904: PUSH1 0x07
00001906: PUSH1 0x20
00001908: SWAP1
00001909: DUP2
0000190a: MSTORE
0000190b: SWAP3
0000190c: SWAP1
0000190d: KECCAK256
0000190e: DUP1
0000190f: SLOAD
00001910: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001925: SWAP1
00001926: SWAP5
00001927: AND
00001928: SWAP4
00001929: PUSH4 0xcf36b917
0000192e: SWAP4
0000192f: DUP4
00001930: ADD
00001931: SWAP2
00001932: SWAP1
00001933: PUSH2 0x193b
00001936: SWAP1
00001937: PUSH2 0x2c08
0000193a: JUMP
0000193b: JUMPDEST
0000193c: DUP1
0000193d: PUSH1 0x1f
0000193f: ADD
00001940: PUSH1 0x20
00001942: DUP1
00001943: SWAP2
00001944: DIV
00001945: MUL
00001946: PUSH1 0x20
00001948: ADD
00001949: PUSH1 0x40
0000194b: MLOAD
0000194c: SWAP1
0000194d: DUP2
0000194e: ADD
0000194f: PUSH1 0x40
00001951: MSTORE
00001952: DUP1
00001953: SWAP3
00001954: SWAP2
00001955: SWAP1
00001956: DUP2
00001957: DUP2
00001958: MSTORE
00001959: PUSH1 0x20
0000195b: ADD
0000195c: DUP3
0000195d: DUP1
0000195e: SLOAD
0000195f: PUSH2 0x1967
00001962: SWAP1
00001963: PUSH2 0x2c08
00001966: JUMP
00001967: JUMPDEST
00001968: DUP1
00001969: ISZERO
0000196a: PUSH2 0x19b4
0000196d: JUMPI
0000196e: DUP1
0000196f: PUSH1 0x1f
00001971: LT
00001972: PUSH2 0x1989
00001975: JUMPI
00001976: PUSH2 0x0100
00001979: DUP1
0000197a: DUP4
0000197b: SLOAD
0000197c: DIV
0000197d: MUL
0000197e: DUP4
0000197f: MSTORE
00001980: SWAP2
00001981: PUSH1 0x20
00001983: ADD
00001984: SWAP2
00001985: PUSH2 0x19b4
00001988: JUMP
00001989: JUMPDEST
0000198a: DUP3
0000198b: ADD
0000198c: SWAP2
0000198d: SWAP1
0000198e: PUSH1 0x00
00001990: MSTORE
00001991: PUSH1 0x20
00001993: PUSH1 0x00
00001995: KECCAK256
00001996: SWAP1
00001997: JUMPDEST
00001998: DUP2
00001999: SLOAD
0000199a: DUP2
0000199b: MSTORE
0000199c: SWAP1
0000199d: PUSH1 0x01
0000199f: ADD
000019a0: SWAP1
000019a1: PUSH1 0x20
000019a3: ADD
000019a4: DUP1
000019a5: DUP4
000019a6: GT
000019a7: PUSH2 0x1997
000019aa: JUMPI
000019ab: DUP3
000019ac: SWAP1
000019ad: SUB
000019ae: PUSH1 0x1f
000019b0: AND
000019b1: DUP3
000019b2: ADD
000019b3: SWAP2
000019b4: JUMPDEST
000019b5: POP
000019b6: POP
000019b7: POP
000019b8: POP
000019b9: POP
000019ba: DUP2
000019bb: MSTORE
000019bc: PUSH1 0x20
000019be: ADD
000019bf: DUP7
000019c0: DUP2
000019c1: MSTORE
000019c2: POP
000019c3: PUSH1 0x40
000019c5: MLOAD
000019c6: DUP3
000019c7: PUSH4 0xffffffff
000019cc: AND
000019cd: PUSH1 0xe0
000019cf: SHL
000019d0: DUP2
000019d1: MSTORE
000019d2: PUSH1 0x04
000019d4: ADD
000019d5: PUSH2 0x19de
000019d8: SWAP2
000019d9: SWAP1
000019da: PUSH2 0x309b
000019dd: JUMP
000019de: JUMPDEST
000019df: PUSH1 0x00
000019e1: PUSH1 0x40
000019e3: MLOAD
000019e4: DUP1
000019e5: DUP4
000019e6: SUB
000019e7: DUP2
000019e8: PUSH1 0x00
000019ea: DUP8
000019eb: GAS
000019ec: CALL
000019ed: ISZERO
000019ee: DUP1
000019ef: ISZERO
000019f0: PUSH2 0x19fd
000019f3: JUMPI
000019f4: RETURNDATASIZE
000019f5: PUSH1 0x00
000019f7: DUP1
000019f8: RETURNDATACOPY
000019f9: RETURNDATASIZE
000019fa: PUSH1 0x00
000019fc: REVERT
000019fd: JUMPDEST
000019fe: POP
000019ff: POP
00001a00: POP
00001a01: POP
00001a02: PUSH1 0x40
00001a04: MLOAD
00001a05: RETURNDATASIZE
00001a06: PUSH1 0x00
00001a08: DUP3
00001a09: RETURNDATACOPY
00001a0a: PUSH1 0x1f
00001a0c: RETURNDATASIZE
00001a0d: SWAP1
00001a0e: DUP2
00001a0f: ADD
00001a10: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00001a31: AND
00001a32: DUP3
00001a33: ADD
00001a34: PUSH1 0x40
00001a36: MSTORE
00001a37: PUSH2 0x12d6
00001a3a: SWAP2
00001a3b: SWAP1
00001a3c: DUP2
00001a3d: ADD
00001a3e: SWAP1
00001a3f: PUSH2 0x3112
00001a42: JUMP
00001a43: JUMPDEST
00001a44: DUP1
00001a45: PUSH1 0x00
00001a47: SUB
00001a48: PUSH2 0x1a4f
00001a4b: JUMPI
00001a4c: POP
00001a4d: POP
00001a4e: JUMP
00001a4f: JUMPDEST
00001a50: PUSH32 0xffffffffffffffffffffffff1111111111111111111111111111111111111112
00001a71: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00001a92: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001aa7: AND
00001aa8: ADD
00001aa9: PUSH2 0x1ab6
00001aac: JUMPI
00001aad: PUSH2 0x04aa
00001ab0: DUP3
00001ab1: DUP3
00001ab2: PUSH2 0x2533
00001ab5: JUMP
00001ab6: JUMPDEST
00001ab7: PUSH2 0x04aa
00001aba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001acf: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
00001af0: AND
00001af1: DUP4
00001af2: DUP4
00001af3: PUSH2 0x25a8
00001af6: JUMP
00001af7: JUMPDEST
00001af8: PUSH1 0x05
00001afa: SLOAD
00001afb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001b10: AND
00001b11: ISZERO
00001b12: PUSH2 0x1cc9
00001b15: JUMPI
00001b16: PUSH1 0x05
00001b18: SLOAD
00001b19: PUSH1 0x40
00001b1b: DUP1
00001b1c: MLOAD
00001b1d: PUSH1 0xa0
00001b1f: DUP2
00001b20: ADD
00001b21: DUP3
00001b22: MSTORE
00001b23: CALLER
00001b24: DUP1
00001b25: DUP3
00001b26: MSTORE
00001b27: PUSH1 0x20
00001b29: DUP1
00001b2a: DUP4
00001b2b: ADD
00001b2c: DUP9
00001b2d: SWAP1
00001b2e: MSTORE
00001b2f: PUSH1 0x00
00001b31: SWAP2
00001b32: DUP3
00001b33: MSTORE
00001b34: PUSH1 0x07
00001b36: SWAP1
00001b37: MSTORE
00001b38: DUP3
00001b39: DUP2
00001b3a: KECCAK256
00001b3b: DUP1
00001b3c: SLOAD
00001b3d: SWAP2
00001b3e: SWAP5
00001b3f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001b54: AND
00001b55: SWAP4
00001b56: PUSH4 0xdd19fe38
00001b5b: SWAP4
00001b5c: SWAP3
00001b5d: SWAP1
00001b5e: DUP4
00001b5f: ADD
00001b60: SWAP2
00001b61: SWAP1
00001b62: PUSH2 0x1b6a
00001b65: SWAP1
00001b66: PUSH2 0x2c08
00001b69: JUMP
00001b6a: JUMPDEST
00001b6b: DUP1
00001b6c: PUSH1 0x1f
00001b6e: ADD
00001b6f: PUSH1 0x20
00001b71: DUP1
00001b72: SWAP2
00001b73: DIV
00001b74: MUL
00001b75: PUSH1 0x20
00001b77: ADD
00001b78: PUSH1 0x40
00001b7a: MLOAD
00001b7b: SWAP1
00001b7c: DUP2
00001b7d: ADD
00001b7e: PUSH1 0x40
00001b80: MSTORE
00001b81: DUP1
00001b82: SWAP3
00001b83: SWAP2
00001b84: SWAP1
00001b85: DUP2
00001b86: DUP2
00001b87: MSTORE
00001b88: PUSH1 0x20
00001b8a: ADD
00001b8b: DUP3
00001b8c: DUP1
00001b8d: SLOAD
00001b8e: PUSH2 0x1b96
00001b91: SWAP1
00001b92: PUSH2 0x2c08
00001b95: JUMP
00001b96: JUMPDEST
00001b97: DUP1
00001b98: ISZERO
00001b99: PUSH2 0x1be3
00001b9c: JUMPI
00001b9d: DUP1
00001b9e: PUSH1 0x1f
00001ba0: LT
00001ba1: PUSH2 0x1bb8
00001ba4: JUMPI
00001ba5: PUSH2 0x0100
00001ba8: DUP1
00001ba9: DUP4
00001baa: SLOAD
00001bab: DIV
00001bac: MUL
00001bad: DUP4
00001bae: MSTORE
00001baf: SWAP2
00001bb0: PUSH1 0x20
00001bb2: ADD
00001bb3: SWAP2
00001bb4: PUSH2 0x1be3
00001bb7: JUMP
00001bb8: JUMPDEST
00001bb9: DUP3
00001bba: ADD
00001bbb: SWAP2
00001bbc: SWAP1
00001bbd: PUSH1 0x00
00001bbf: MSTORE
00001bc0: PUSH1 0x20
00001bc2: PUSH1 0x00
00001bc4: KECCAK256
00001bc5: SWAP1
00001bc6: JUMPDEST
00001bc7: DUP2
00001bc8: SLOAD
00001bc9: DUP2
00001bca: MSTORE
00001bcb: SWAP1
00001bcc: PUSH1 0x01
00001bce: ADD
00001bcf: SWAP1
00001bd0: PUSH1 0x20
00001bd2: ADD
00001bd3: DUP1
00001bd4: DUP4
00001bd5: GT
00001bd6: PUSH2 0x1bc6
00001bd9: JUMPI
00001bda: DUP3
00001bdb: SWAP1
00001bdc: SUB
00001bdd: PUSH1 0x1f
00001bdf: AND
00001be0: DUP3
00001be1: ADD
00001be2: SWAP2
00001be3: JUMPDEST
00001be4: POP
00001be5: POP
00001be6: POP
00001be7: POP
00001be8: POP
00001be9: DUP2
00001bea: MSTORE
00001beb: PUSH1 0x20
00001bed: ADD
00001bee: DUP7
00001bef: DUP2
00001bf0: MSTORE
00001bf1: PUSH1 0x20
00001bf3: ADD
00001bf4: DUP6
00001bf5: DUP2
00001bf6: MSTORE
00001bf7: POP
00001bf8: PUSH1 0x40
00001bfa: MLOAD
00001bfb: DUP3
00001bfc: PUSH4 0xffffffff
00001c01: AND
00001c02: PUSH1 0xe0
00001c04: SHL
00001c05: DUP2
00001c06: MSTORE
00001c07: PUSH1 0x04
00001c09: ADD
00001c0a: PUSH2 0x1c13
00001c0d: SWAP2
00001c0e: SWAP1
00001c0f: PUSH2 0x316c
00001c12: JUMP
00001c13: JUMPDEST
00001c14: PUSH1 0x00
00001c16: PUSH1 0x40
00001c18: MLOAD
00001c19: DUP1
00001c1a: DUP4
00001c1b: SUB
00001c1c: DUP2
00001c1d: PUSH1 0x00
00001c1f: DUP8
00001c20: GAS
00001c21: CALL
00001c22: ISZERO
00001c23: DUP1
00001c24: ISZERO
00001c25: PUSH2 0x1c32
00001c28: JUMPI
00001c29: RETURNDATASIZE
00001c2a: PUSH1 0x00
00001c2c: DUP1
00001c2d: RETURNDATACOPY
00001c2e: RETURNDATASIZE
00001c2f: PUSH1 0x00
00001c31: REVERT
00001c32: JUMPDEST
00001c33: POP
00001c34: POP
00001c35: POP
00001c36: POP
00001c37: PUSH1 0x40
00001c39: MLOAD
00001c3a: RETURNDATASIZE
00001c3b: PUSH1 0x00
00001c3d: DUP3
00001c3e: RETURNDATACOPY
00001c3f: PUSH1 0x1f
00001c41: RETURNDATASIZE
00001c42: SWAP1
00001c43: DUP2
00001c44: ADD
00001c45: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00001c66: AND
00001c67: DUP3
00001c68: ADD
00001c69: PUSH1 0x40
00001c6b: MSTORE
00001c6c: PUSH2 0x1c78
00001c6f: SWAP2
00001c70: SWAP1
00001c71: DUP2
00001c72: ADD
00001c73: SWAP1
00001c74: PUSH2 0x320c
00001c77: JUMP
00001c78: JUMPDEST
00001c79: DUP1
00001c7a: MLOAD
00001c7b: PUSH1 0x00
00001c7d: DUP7
00001c7e: DUP2
00001c7f: MSTORE
00001c80: PUSH1 0x06
00001c82: PUSH1 0x20
00001c84: SWAP1
00001c85: DUP2
00001c86: MSTORE
00001c87: PUSH1 0x40
00001c89: SWAP1
00001c8a: SWAP2
00001c8b: KECCAK256
00001c8c: DUP3
00001c8d: MLOAD
00001c8e: SWAP4
00001c8f: SWAP5
00001c90: POP
00001c91: PUSH2 0x1ca0
00001c94: SWAP4
00001c95: SWAP1
00001c96: SWAP3
00001c97: SWAP2
00001c98: SWAP1
00001c99: SWAP2
00001c9a: ADD
00001c9b: SWAP1
00001c9c: PUSH2 0x2677
00001c9f: JUMP
00001ca0: JUMPDEST
00001ca1: POP
00001ca2: PUSH1 0x20
00001ca4: DUP1
00001ca5: DUP3
00001ca6: ADD
00001ca7: MLOAD
00001ca8: CALLER
00001ca9: PUSH1 0x00
00001cab: SWAP1
00001cac: DUP2
00001cad: MSTORE
00001cae: PUSH1 0x07
00001cb0: DUP4
00001cb1: MSTORE
00001cb2: PUSH1 0x40
00001cb4: SWAP1
00001cb5: KECCAK256
00001cb6: DUP2
00001cb7: MLOAD
00001cb8: PUSH2 0x1cc6
00001cbb: SWAP4
00001cbc: SWAP2
00001cbd: SWAP3
00001cbe: SWAP1
00001cbf: SWAP2
00001cc0: ADD
00001cc1: SWAP1
00001cc2: PUSH2 0x2677
00001cc5: JUMP
00001cc6: JUMPDEST
00001cc7: POP
00001cc8: POP
00001cc9: JUMPDEST
00001cca: DUP1
00001ccb: MLOAD
00001ccc: PUSH1 0x20
00001cce: DUP1
00001ccf: DUP4
00001cd0: ADD
00001cd1: MLOAD
00001cd2: PUSH1 0x40
00001cd4: DUP1
00001cd5: MLOAD
00001cd6: CALLER
00001cd7: DUP2
00001cd8: MSTORE
00001cd9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001cee: SWAP1
00001cef: SWAP5
00001cf0: AND
00001cf1: SWAP3
00001cf2: DUP5
00001cf3: ADD
00001cf4: SWAP3
00001cf5: SWAP1
00001cf6: SWAP3
00001cf7: MSTORE
00001cf8: DUP3
00001cf9: DUP3
00001cfa: ADD
00001cfb: MSTORE
00001cfc: PUSH1 0x60
00001cfe: DUP3
00001cff: ADD
00001d00: DUP6
00001d01: SWAP1
00001d02: MSTORE
00001d03: MLOAD
00001d04: PUSH32 0x9afd47907e25028cdaca89d193518c302bbb128617d5a992c5abd45815526593
00001d25: SWAP2
00001d26: DUP2
00001d27: SWAP1
00001d28: SUB
00001d29: PUSH1 0x80
00001d2b: ADD
00001d2c: SWAP1
00001d2d: LOG1
00001d2e: POP
00001d2f: POP
00001d30: POP
00001d31: POP
00001d32: JUMP
00001d33: JUMPDEST
00001d34: PUSH1 0x40
00001d36: DUP1
00001d37: MLOAD
00001d38: PUSH1 0x60
00001d3a: DUP2
00001d3b: DUP2
00001d3c: ADD
00001d3d: DUP4
00001d3e: MSTORE
00001d3f: PUSH1 0x00
00001d41: DUP1
00001d42: DUP4
00001d43: MSTORE
00001d44: PUSH1 0x20
00001d46: DUP4
00001d47: ADD
00001d48: MSTORE
00001d49: SWAP2
00001d4a: DUP2
00001d4b: ADD
00001d4c: DUP3
00001d4d: SWAP1
00001d4e: MSTORE
00001d4f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001d64: DUP5
00001d65: AND
00001d66: PUSH1 0x00
00001d68: SWAP1
00001d69: DUP2
00001d6a: MSTORE
00001d6b: PUSH1 0x08
00001d6d: PUSH1 0x20
00001d6f: MSTORE
00001d70: PUSH1 0x40
00001d72: SWAP1
00001d73: KECCAK256
00001d74: SLOAD
00001d75: PUSH1 0xff
00001d77: AND
00001d78: PUSH2 0x1dad
00001d7b: JUMPI
00001d7c: PUSH1 0x40
00001d7e: MLOAD
00001d7f: PUSH32 0x5b0a758300000000000000000000000000000000000000000000000000000000
00001da0: DUP2
00001da1: MSTORE
00001da2: PUSH1 0x04
00001da4: ADD
00001da5: PUSH1 0x40
00001da7: MLOAD
00001da8: DUP1
00001da9: SWAP2
00001daa: SUB
00001dab: SWAP1
00001dac: REVERT
00001dad: JUMPDEST
00001dae: PUSH1 0x40
00001db0: DUP1
00001db1: MLOAD
00001db2: DUP1
00001db3: DUP3
00001db4: ADD
00001db5: DUP3
00001db6: MSTORE
00001db7: PUSH1 0x00
00001db9: DUP6
00001dba: DUP2
00001dbb: MSTORE
00001dbc: PUSH1 0x06
00001dbe: PUSH1 0x20
00001dc0: MSTORE
00001dc1: SWAP2
00001dc2: DUP3
00001dc3: KECCAK256
00001dc4: DUP1
00001dc5: SLOAD
00001dc6: DUP3
00001dc7: SWAP2
00001dc8: SWAP1
00001dc9: PUSH2 0x1dd1
00001dcc: SWAP1
00001dcd: PUSH2 0x2c08
00001dd0: JUMP
00001dd1: JUMPDEST
00001dd2: DUP1
00001dd3: PUSH1 0x1f
00001dd5: ADD
00001dd6: PUSH1 0x20
00001dd8: DUP1
00001dd9: SWAP2
00001dda: DIV
00001ddb: MUL
00001ddc: PUSH1 0x20
00001dde: ADD
00001ddf: PUSH1 0x40
00001de1: MLOAD
00001de2: SWAP1
00001de3: DUP2
00001de4: ADD
00001de5: PUSH1 0x40
00001de7: MSTORE
00001de8: DUP1
00001de9: SWAP3
00001dea: SWAP2
00001deb: SWAP1
00001dec: DUP2
00001ded: DUP2
00001dee: MSTORE
00001def: PUSH1 0x20
00001df1: ADD
00001df2: DUP3
00001df3: DUP1
00001df4: SLOAD
00001df5: PUSH2 0x1dfd
00001df8: SWAP1
00001df9: PUSH2 0x2c08
00001dfc: JUMP
00001dfd: JUMPDEST
00001dfe: DUP1
00001dff: ISZERO
00001e00: PUSH2 0x1e4a
00001e03: JUMPI
00001e04: DUP1
00001e05: PUSH1 0x1f
00001e07: LT
00001e08: PUSH2 0x1e1f
00001e0b: JUMPI
00001e0c: PUSH2 0x0100
00001e0f: DUP1
00001e10: DUP4
00001e11: SLOAD
00001e12: DIV
00001e13: MUL
00001e14: DUP4
00001e15: MSTORE
00001e16: SWAP2
00001e17: PUSH1 0x20
00001e19: ADD
00001e1a: SWAP2
00001e1b: PUSH2 0x1e4a
00001e1e: JUMP
00001e1f: JUMPDEST
00001e20: DUP3
00001e21: ADD
00001e22: SWAP2
00001e23: SWAP1
00001e24: PUSH1 0x00
00001e26: MSTORE
00001e27: PUSH1 0x20
00001e29: PUSH1 0x00
00001e2b: KECCAK256
00001e2c: SWAP1
00001e2d: JUMPDEST
00001e2e: DUP2
00001e2f: SLOAD
00001e30: DUP2
00001e31: MSTORE
00001e32: SWAP1
00001e33: PUSH1 0x01
00001e35: ADD
00001e36: SWAP1
00001e37: PUSH1 0x20
00001e39: ADD
00001e3a: DUP1
00001e3b: DUP4
00001e3c: GT
00001e3d: PUSH2 0x1e2d
00001e40: JUMPI
00001e41: DUP3
00001e42: SWAP1
00001e43: SUB
00001e44: PUSH1 0x1f
00001e46: AND
00001e47: DUP3
00001e48: ADD
00001e49: SWAP2
00001e4a: JUMPDEST
00001e4b: POP
00001e4c: POP
00001e4d: POP
00001e4e: POP
00001e4f: POP
00001e50: DUP2
00001e51: MSTORE
00001e52: PUSH1 0x20
00001e54: ADD
00001e55: PUSH1 0x07
00001e57: PUSH1 0x00
00001e59: DUP9
00001e5a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001e6f: AND
00001e70: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001e85: AND
00001e86: DUP2
00001e87: MSTORE
00001e88: PUSH1 0x20
00001e8a: ADD
00001e8b: SWAP1
00001e8c: DUP2
00001e8d: MSTORE
00001e8e: PUSH1 0x20
00001e90: ADD
00001e91: PUSH1 0x00
00001e93: KECCAK256
00001e94: DUP1
00001e95: SLOAD
00001e96: PUSH2 0x1e9e
00001e99: SWAP1
00001e9a: PUSH2 0x2c08
00001e9d: JUMP
00001e9e: JUMPDEST
00001e9f: DUP1
00001ea0: PUSH1 0x1f
00001ea2: ADD
00001ea3: PUSH1 0x20
00001ea5: DUP1
00001ea6: SWAP2
00001ea7: DIV
00001ea8: MUL
00001ea9: PUSH1 0x20
00001eab: ADD
00001eac: PUSH1 0x40
00001eae: MLOAD
00001eaf: SWAP1
00001eb0: DUP2
00001eb1: ADD
00001eb2: PUSH1 0x40
00001eb4: MSTORE
00001eb5: DUP1
00001eb6: SWAP3
00001eb7: SWAP2
00001eb8: SWAP1
00001eb9: DUP2
00001eba: DUP2
00001ebb: MSTORE
00001ebc: PUSH1 0x20
00001ebe: ADD
00001ebf: DUP3
00001ec0: DUP1
00001ec1: SLOAD
00001ec2: PUSH2 0x1eca
00001ec5: SWAP1
00001ec6: PUSH2 0x2c08
00001ec9: JUMP
00001eca: JUMPDEST
00001ecb: DUP1
00001ecc: ISZERO
00001ecd: PUSH2 0x1f17
00001ed0: JUMPI
00001ed1: DUP1
00001ed2: PUSH1 0x1f
00001ed4: LT
00001ed5: PUSH2 0x1eec
00001ed8: JUMPI
00001ed9: PUSH2 0x0100
00001edc: DUP1
00001edd: DUP4
00001ede: SLOAD
00001edf: DIV
00001ee0: MUL
00001ee1: DUP4
00001ee2: MSTORE
00001ee3: SWAP2
00001ee4: PUSH1 0x20
00001ee6: ADD
00001ee7: SWAP2
00001ee8: PUSH2 0x1f17
00001eeb: JUMP
00001eec: JUMPDEST
00001eed: DUP3
00001eee: ADD
00001eef: SWAP2
00001ef0: SWAP1
00001ef1: PUSH1 0x00
00001ef3: MSTORE
00001ef4: PUSH1 0x20
00001ef6: PUSH1 0x00
00001ef8: KECCAK256
00001ef9: SWAP1
00001efa: JUMPDEST
00001efb: DUP2
00001efc: SLOAD
00001efd: DUP2
00001efe: MSTORE
00001eff: SWAP1
00001f00: PUSH1 0x01
00001f02: ADD
00001f03: SWAP1
00001f04: PUSH1 0x20
00001f06: ADD
00001f07: DUP1
00001f08: DUP4
00001f09: GT
00001f0a: PUSH2 0x1efa
00001f0d: JUMPI
00001f0e: DUP3
00001f0f: SWAP1
00001f10: SUB
00001f11: PUSH1 0x1f
00001f13: AND
00001f14: DUP3
00001f15: ADD
00001f16: SWAP2
00001f17: JUMPDEST
00001f18: POP
00001f19: POP
00001f1a: POP
00001f1b: POP
00001f1c: POP
00001f1d: DUP2
00001f1e: MSTORE
00001f1f: POP
00001f20: SWAP1
00001f21: POP
00001f22: DUP1
00001f23: PUSH1 0x00
00001f25: ADD
00001f26: MLOAD
00001f27: MLOAD
00001f28: PUSH1 0x00
00001f2a: SUB
00001f2b: PUSH2 0x1f60
00001f2e: JUMPI
00001f2f: PUSH1 0x40
00001f31: MLOAD
00001f32: PUSH32 0xd3d38f6800000000000000000000000000000000000000000000000000000000
00001f53: DUP2
00001f54: MSTORE
00001f55: PUSH1 0x04
00001f57: ADD
00001f58: PUSH1 0x40
00001f5a: MLOAD
00001f5b: DUP1
00001f5c: SWAP2
00001f5d: SUB
00001f5e: SWAP1
00001f5f: REVERT
00001f60: JUMPDEST
00001f61: PUSH1 0x05
00001f63: SLOAD
00001f64: PUSH1 0x40
00001f66: DUP1
00001f67: MLOAD
00001f68: DUP1
00001f69: DUP3
00001f6a: ADD
00001f6b: DUP3
00001f6c: MSTORE
00001f6d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001f82: DUP9
00001f83: DUP2
00001f84: AND
00001f85: DUP3
00001f86: MSTORE
00001f87: PUSH1 0x20
00001f89: DUP3
00001f8a: ADD
00001f8b: DUP6
00001f8c: SWAP1
00001f8d: MSTORE
00001f8e: SWAP2
00001f8f: MLOAD
00001f90: PUSH32 0x7afb995300000000000000000000000000000000000000000000000000000000
00001fb1: DUP2
00001fb2: MSTORE
00001fb3: SWAP2
00001fb4: SWAP1
00001fb5: SWAP3
00001fb6: AND
00001fb7: SWAP2
00001fb8: PUSH4 0x7afb9953
00001fbd: SWAP2
00001fbe: PUSH2 0x1fca
00001fc1: SWAP2
00001fc2: SWAP1
00001fc3: PUSH1 0x04
00001fc5: ADD
00001fc6: PUSH2 0x32e1
00001fc9: JUMP
00001fca: JUMPDEST
00001fcb: PUSH1 0x00
00001fcd: PUSH1 0x40
00001fcf: MLOAD
00001fd0: DUP1
00001fd1: DUP4
00001fd2: SUB
00001fd3: DUP2
00001fd4: PUSH1 0x00
00001fd6: DUP8
00001fd7: GAS
00001fd8: CALL
00001fd9: ISZERO
00001fda: DUP1
00001fdb: ISZERO
00001fdc: PUSH2 0x1fe9
00001fdf: JUMPI
00001fe0: RETURNDATASIZE
00001fe1: PUSH1 0x00
00001fe3: DUP1
00001fe4: RETURNDATACOPY
00001fe5: RETURNDATASIZE
00001fe6: PUSH1 0x00
00001fe8: REVERT
00001fe9: JUMPDEST
00001fea: POP
00001feb: POP
00001fec: POP
00001fed: POP
00001fee: PUSH1 0x40
00001ff0: MLOAD
00001ff1: RETURNDATASIZE
00001ff2: PUSH1 0x00
00001ff4: DUP3
00001ff5: RETURNDATACOPY
00001ff6: PUSH1 0x1f
00001ff8: RETURNDATASIZE
00001ff9: SWAP1
00001ffa: DUP2
00001ffb: ADD
00001ffc: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
0000201d: AND
0000201e: DUP3
0000201f: ADD
00002020: PUSH1 0x40
00002022: MSTORE
00002023: PUSH2 0x202f
00002026: SWAP2
00002027: SWAP1
00002028: DUP2
00002029: ADD
0000202a: SWAP1
0000202b: PUSH2 0x3112
0000202e: JUMP
0000202f: JUMPDEST
00002030: SWAP1
00002031: SWAP7
00002032: SWAP1
00002033: SWAP6
00002034: POP
00002035: SWAP4
00002036: POP
00002037: POP
00002038: POP
00002039: POP
0000203a: JUMP
0000203b: JUMPDEST
0000203c: PUSH1 0x40
0000203e: DUP1
0000203f: MLOAD
00002040: DUP1
00002041: DUP3
00002042: ADD
00002043: DUP3
00002044: MSTORE
00002045: PUSH1 0x00
00002047: DUP5
00002048: DUP2
00002049: MSTORE
0000204a: PUSH1 0x06
0000204c: PUSH1 0x20
0000204e: MSTORE
0000204f: SWAP2
00002050: DUP3
00002051: KECCAK256
00002052: DUP1
00002053: SLOAD
00002054: DUP3
00002055: SWAP2
00002056: SWAP1
00002057: PUSH2 0x205f
0000205a: SWAP1
0000205b: PUSH2 0x2c08
0000205e: JUMP
0000205f: JUMPDEST
00002060: DUP1
00002061: PUSH1 0x1f
00002063: ADD
00002064: PUSH1 0x20
00002066: DUP1
00002067: SWAP2
00002068: DIV
00002069: MUL
0000206a: PUSH1 0x20
0000206c: ADD
0000206d: PUSH1 0x40
0000206f: MLOAD
00002070: SWAP1
00002071: DUP2
00002072: ADD
00002073: PUSH1 0x40
00002075: MSTORE
00002076: DUP1
00002077: SWAP3
00002078: SWAP2
00002079: SWAP1
0000207a: DUP2
0000207b: DUP2
0000207c: MSTORE
0000207d: PUSH1 0x20
0000207f: ADD
00002080: DUP3
00002081: DUP1
00002082: SLOAD
00002083: PUSH2 0x208b
00002086: SWAP1
00002087: PUSH2 0x2c08
0000208a: JUMP
0000208b: JUMPDEST
0000208c: DUP1
0000208d: ISZERO
0000208e: PUSH2 0x20d8
00002091: JUMPI
00002092: DUP1
00002093: PUSH1 0x1f
00002095: LT
00002096: PUSH2 0x20ad
00002099: JUMPI
0000209a: PUSH2 0x0100
0000209d: DUP1
0000209e: DUP4
0000209f: SLOAD
000020a0: DIV
000020a1: MUL
000020a2: DUP4
000020a3: MSTORE
000020a4: SWAP2
000020a5: PUSH1 0x20
000020a7: ADD
000020a8: SWAP2
000020a9: PUSH2 0x20d8
000020ac: JUMP
000020ad: JUMPDEST
000020ae: DUP3
000020af: ADD
000020b0: SWAP2
000020b1: SWAP1
000020b2: PUSH1 0x00
000020b4: MSTORE
000020b5: PUSH1 0x20
000020b7: PUSH1 0x00
000020b9: KECCAK256
000020ba: SWAP1
000020bb: JUMPDEST
000020bc: DUP2
000020bd: SLOAD
000020be: DUP2
000020bf: MSTORE
000020c0: SWAP1
000020c1: PUSH1 0x01
000020c3: ADD
000020c4: SWAP1
000020c5: PUSH1 0x20
000020c7: ADD
000020c8: DUP1
000020c9: DUP4
000020ca: GT
000020cb: PUSH2 0x20bb
000020ce: JUMPI
000020cf: DUP3
000020d0: SWAP1
000020d1: SUB
000020d2: PUSH1 0x1f
000020d4: AND
000020d5: DUP3
000020d6: ADD
000020d7: SWAP2
000020d8: JUMPDEST
000020d9: POP
000020da: POP
000020db: POP
000020dc: POP
000020dd: POP
000020de: DUP2
000020df: MSTORE
000020e0: PUSH1 0x20
000020e2: ADD
000020e3: PUSH1 0x07
000020e5: PUSH1 0x00
000020e7: DUP8
000020e8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000020fd: AND
000020fe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002113: AND
00002114: DUP2
00002115: MSTORE
00002116: PUSH1 0x20
00002118: ADD
00002119: SWAP1
0000211a: DUP2
0000211b: MSTORE
0000211c: PUSH1 0x20
0000211e: ADD
0000211f: PUSH1 0x00
00002121: KECCAK256
00002122: DUP1
00002123: SLOAD
00002124: PUSH2 0x212c
00002127: SWAP1
00002128: PUSH2 0x2c08
0000212b: JUMP
0000212c: JUMPDEST
0000212d: DUP1
0000212e: PUSH1 0x1f
00002130: ADD
00002131: PUSH1 0x20
00002133: DUP1
00002134: SWAP2
00002135: DIV
00002136: MUL
00002137: PUSH1 0x20
00002139: ADD
0000213a: PUSH1 0x40
0000213c: MLOAD
0000213d: SWAP1
0000213e: DUP2
0000213f: ADD
00002140: PUSH1 0x40
00002142: MSTORE
00002143: DUP1
00002144: SWAP3
00002145: SWAP2
00002146: SWAP1
00002147: DUP2
00002148: DUP2
00002149: MSTORE
0000214a: PUSH1 0x20
0000214c: ADD
0000214d: DUP3
0000214e: DUP1
0000214f: SLOAD
00002150: PUSH2 0x2158
00002153: SWAP1
00002154: PUSH2 0x2c08
00002157: JUMP
00002158: JUMPDEST
00002159: DUP1
0000215a: ISZERO
0000215b: PUSH2 0x21a5
0000215e: JUMPI
0000215f: DUP1
00002160: PUSH1 0x1f
00002162: LT
00002163: PUSH2 0x217a
00002166: JUMPI
00002167: PUSH2 0x0100
0000216a: DUP1
0000216b: DUP4
0000216c: SLOAD
0000216d: DIV
0000216e: MUL
0000216f: DUP4
00002170: MSTORE
00002171: SWAP2
00002172: PUSH1 0x20
00002174: ADD
00002175: SWAP2
00002176: PUSH2 0x21a5
00002179: JUMP
0000217a: JUMPDEST
0000217b: DUP3
0000217c: ADD
0000217d: SWAP2
0000217e: SWAP1
0000217f: PUSH1 0x00
00002181: MSTORE
00002182: PUSH1 0x20
00002184: PUSH1 0x00
00002186: KECCAK256
00002187: SWAP1
00002188: JUMPDEST
00002189: DUP2
0000218a: SLOAD
0000218b: DUP2
0000218c: MSTORE
0000218d: SWAP1
0000218e: PUSH1 0x01
00002190: ADD
00002191: SWAP1
00002192: PUSH1 0x20
00002194: ADD
00002195: DUP1
00002196: DUP4
00002197: GT
00002198: PUSH2 0x2188
0000219b: JUMPI
0000219c: DUP3
0000219d: SWAP1
0000219e: SUB
0000219f: PUSH1 0x1f
000021a1: AND
000021a2: DUP3
000021a3: ADD
000021a4: SWAP2
000021a5: JUMPDEST
000021a6: POP
000021a7: POP
000021a8: POP
000021a9: SWAP2
000021aa: SWAP1
000021ab: SWAP3
000021ac: MSTORE
000021ad: POP
000021ae: POP
000021af: PUSH1 0x05
000021b1: SLOAD
000021b2: PUSH1 0x40
000021b4: DUP1
000021b5: MLOAD
000021b6: PUSH1 0x80
000021b8: DUP2
000021b9: ADD
000021ba: DUP3
000021bb: MSTORE
000021bc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000021d1: DUP9
000021d2: DUP2
000021d3: AND
000021d4: DUP3
000021d5: MSTORE
000021d6: PUSH1 0x20
000021d8: DUP3
000021d9: ADD
000021da: DUP9
000021db: SWAP1
000021dc: MSTORE
000021dd: DUP2
000021de: DUP4
000021df: ADD
000021e0: DUP8
000021e1: SWAP1
000021e2: MSTORE
000021e3: PUSH1 0x60
000021e5: DUP3
000021e6: ADD
000021e7: DUP6
000021e8: SWAP1
000021e9: MSTORE
000021ea: SWAP2
000021eb: MLOAD
000021ec: PUSH32 0x1306ac3b00000000000000000000000000000000000000000000000000000000
0000220d: DUP2
0000220e: MSTORE
0000220f: SWAP4
00002210: SWAP5
00002211: POP
00002212: SWAP2
00002213: AND
00002214: SWAP2
00002215: PUSH4 0x1306ac3b
0000221a: SWAP2
0000221b: PUSH2 0x2226
0000221e: SWAP2
0000221f: PUSH1 0x04
00002221: ADD
00002222: PUSH2 0x331c
00002225: JUMP
00002226: JUMPDEST
00002227: PUSH1 0x00
00002229: PUSH1 0x40
0000222b: MLOAD
0000222c: DUP1
0000222d: DUP4
0000222e: SUB
0000222f: DUP2
00002230: PUSH1 0x00
00002232: DUP8
00002233: GAS
00002234: CALL
00002235: ISZERO
00002236: DUP1
00002237: ISZERO
00002238: PUSH2 0x2245
0000223b: JUMPI
0000223c: RETURNDATASIZE
0000223d: PUSH1 0x00
0000223f: DUP1
00002240: RETURNDATACOPY
00002241: RETURNDATASIZE
00002242: PUSH1 0x00
00002244: REVERT
00002245: JUMPDEST
00002246: POP
00002247: POP
00002248: POP
00002249: POP
0000224a: PUSH1 0x40
0000224c: MLOAD
0000224d: RETURNDATASIZE
0000224e: PUSH1 0x00
00002250: DUP3
00002251: RETURNDATACOPY
00002252: PUSH1 0x1f
00002254: RETURNDATASIZE
00002255: SWAP1
00002256: DUP2
00002257: ADD
00002258: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00002279: AND
0000227a: DUP3
0000227b: ADD
0000227c: PUSH1 0x40
0000227e: MSTORE
0000227f: PUSH2 0x228b
00002282: SWAP2
00002283: SWAP1
00002284: DUP2
00002285: ADD
00002286: SWAP1
00002287: PUSH2 0x320c
0000228a: JUMP
0000228b: JUMPDEST
0000228c: DUP1
0000228d: MLOAD
0000228e: PUSH1 0x00
00002290: DUP6
00002291: DUP2
00002292: MSTORE
00002293: PUSH1 0x06
00002295: PUSH1 0x20
00002297: SWAP1
00002298: DUP2
00002299: MSTORE
0000229a: PUSH1 0x40
0000229c: SWAP1
0000229d: SWAP2
0000229e: KECCAK256
0000229f: DUP3
000022a0: MLOAD
000022a1: SWAP4
000022a2: SWAP5
000022a3: POP
000022a4: PUSH2 0x22b3
000022a7: SWAP4
000022a8: SWAP1
000022a9: SWAP3
000022aa: SWAP2
000022ab: SWAP1
000022ac: SWAP2
000022ad: ADD
000022ae: SWAP1
000022af: PUSH2 0x2677
000022b2: JUMP
000022b3: JUMPDEST
000022b4: POP
000022b5: PUSH1 0x20
000022b7: DUP1
000022b8: DUP3
000022b9: ADD
000022ba: MLOAD
000022bb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000022d0: DUP7
000022d1: AND
000022d2: PUSH1 0x00
000022d4: SWAP1
000022d5: DUP2
000022d6: MSTORE
000022d7: PUSH1 0x07
000022d9: DUP4
000022da: MSTORE
000022db: PUSH1 0x40
000022dd: SWAP1
000022de: KECCAK256
000022df: DUP2
000022e0: MLOAD
000022e1: PUSH2 0x22ef
000022e4: SWAP4
000022e5: SWAP2
000022e6: SWAP3
000022e7: SWAP1
000022e8: SWAP2
000022e9: ADD
000022ea: SWAP1
000022eb: PUSH2 0x2677
000022ee: JUMP
000022ef: JUMPDEST
000022f0: POP
000022f1: POP
000022f2: POP
000022f3: POP
000022f4: POP
000022f5: JUMP
000022f6: JUMPDEST
000022f7: PUSH1 0x00
000022f9: PUSH1 0x40
000022fb: MLOAD
000022fc: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000
0000231d: DUP2
0000231e: MSTORE
0000231f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002334: DUP5
00002335: AND
00002336: PUSH1 0x04
00002338: DUP3
00002339: ADD
0000233a: MSTORE
0000233b: DUP3
0000233c: PUSH1 0x24
0000233e: DUP3
0000233f: ADD
00002340: MSTORE
00002341: PUSH1 0x20
00002343: PUSH1 0x00
00002345: PUSH1 0x44
00002347: DUP4
00002348: PUSH1 0x00
0000234a: DUP10
0000234b: GAS
0000234c: CALL
0000234d: RETURNDATASIZE
0000234e: ISZERO
0000234f: PUSH1 0x1f
00002351: RETURNDATASIZE
00002352: GT
00002353: PUSH1 0x01
00002355: PUSH1 0x00
00002357: MLOAD
00002358: EQ
00002359: AND
0000235a: OR
0000235b: AND
0000235c: SWAP2
0000235d: POP
0000235e: POP
0000235f: DUP1
00002360: PUSH2 0x084d
00002363: JUMPI
00002364: PUSH1 0x40
00002366: MLOAD
00002367: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
00002388: DUP2
00002389: MSTORE
0000238a: PUSH1 0x20
0000238c: PUSH1 0x04
0000238e: DUP3
0000238f: ADD
00002390: MSTORE
00002391: PUSH1 0x0e
00002393: PUSH1 0x24
00002395: DUP3
00002396: ADD
00002397: MSTORE
00002398: PUSH32 0x415050524f56455f4641494c4544000000000000000000000000000000000000
000023b9: PUSH1 0x44
000023bb: DUP3
000023bc: ADD
000023bd: MSTORE
000023be: PUSH1 0x64
000023c0: ADD
000023c1: PUSH2 0x0572
000023c4: JUMP
000023c5: JUMPDEST
000023c6: PUSH1 0x00
000023c8: DUP3
000023c9: DUP2
000023ca: MSTORE
000023cb: PUSH1 0x03
000023cd: PUSH1 0x20
000023cf: SWAP1
000023d0: DUP2
000023d1: MSTORE
000023d2: PUSH1 0x40
000023d4: DUP1
000023d5: DUP4
000023d6: KECCAK256
000023d7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000023ec: DUP6
000023ed: AND
000023ee: DUP1
000023ef: DUP6
000023f0: MSTORE
000023f1: SWAP3
000023f2: MSTORE
000023f3: DUP1
000023f4: DUP4
000023f5: KECCAK256
000023f6: DUP1
000023f7: SLOAD
000023f8: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
00002419: AND
0000241a: SWAP1
0000241b: SSTORE
0000241c: MLOAD
0000241d: SWAP1
0000241e: SWAP2
0000241f: DUP5
00002420: SWAP2
00002421: PUSH32 0x155aaafb6329a2098580462df33ec4b7441b19729b9601c5fc17ae1cf99a8a52
00002442: SWAP2
00002443: SWAP1
00002444: LOG3
00002445: POP
00002446: POP
00002447: JUMP
00002448: JUMPDEST
00002449: PUSH1 0x00
0000244b: PUSH1 0x40
0000244d: MLOAD
0000244e: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000
0000246f: DUP2
00002470: MSTORE
00002471: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002486: DUP6
00002487: AND
00002488: PUSH1 0x04
0000248a: DUP3
0000248b: ADD
0000248c: MSTORE
0000248d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000024a2: DUP5
000024a3: AND
000024a4: PUSH1 0x24
000024a6: DUP3
000024a7: ADD
000024a8: MSTORE
000024a9: DUP3
000024aa: PUSH1 0x44
000024ac: DUP3
000024ad: ADD
000024ae: MSTORE
000024af: PUSH1 0x20
000024b1: PUSH1 0x00
000024b3: PUSH1 0x64
000024b5: DUP4
000024b6: PUSH1 0x00
000024b8: DUP11
000024b9: GAS
000024ba: CALL
000024bb: RETURNDATASIZE
000024bc: ISZERO
000024bd: PUSH1 0x1f
000024bf: RETURNDATASIZE
000024c0: GT
000024c1: PUSH1 0x01
000024c3: PUSH1 0x00
000024c5: MLOAD
000024c6: EQ
000024c7: AND
000024c8: OR
000024c9: AND
000024ca: SWAP2
000024cb: POP
000024cc: POP
000024cd: DUP1
000024ce: PUSH2 0x22ef
000024d1: JUMPI
000024d2: PUSH1 0x40
000024d4: MLOAD
000024d5: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
000024f6: DUP2
000024f7: MSTORE
000024f8: PUSH1 0x20
000024fa: PUSH1 0x04
000024fc: DUP3
000024fd: ADD
000024fe: MSTORE
000024ff: PUSH1 0x14
00002501: PUSH1 0x24
00002503: DUP3
00002504: ADD
00002505: MSTORE
00002506: PUSH32 0x5452414e534645525f46524f4d5f4641494c4544000000000000000000000000
00002527: PUSH1 0x44
00002529: DUP3
0000252a: ADD
0000252b: MSTORE
0000252c: PUSH1 0x64
0000252e: ADD
0000252f: PUSH2 0x0572
00002532: JUMP
00002533: JUMPDEST
00002534: PUSH1 0x00
00002536: DUP1
00002537: PUSH1 0x00
00002539: DUP1
0000253a: PUSH1 0x00
0000253c: DUP6
0000253d: DUP8
0000253e: GAS
0000253f: CALL
00002540: SWAP1
00002541: POP
00002542: DUP1
00002543: PUSH2 0x175f
00002546: JUMPI
00002547: PUSH1 0x40
00002549: MLOAD
0000254a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000256b: DUP2
0000256c: MSTORE
0000256d: PUSH1 0x20
0000256f: PUSH1 0x04
00002571: DUP3
00002572: ADD
00002573: MSTORE
00002574: PUSH1 0x13
00002576: PUSH1 0x24
00002578: DUP3
00002579: ADD
0000257a: MSTORE
0000257b: PUSH32 0x4554485f5452414e534645525f4641494c454400000000000000000000000000
0000259c: PUSH1 0x44
0000259e: DUP3
0000259f: ADD
000025a0: MSTORE
000025a1: PUSH1 0x64
000025a3: ADD
000025a4: PUSH2 0x0572
000025a7: JUMP
000025a8: JUMPDEST
000025a9: PUSH1 0x00
000025ab: PUSH1 0x40
000025ad: MLOAD
000025ae: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000
000025cf: DUP2
000025d0: MSTORE
000025d1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000025e6: DUP5
000025e7: AND
000025e8: PUSH1 0x04
000025ea: DUP3
000025eb: ADD
000025ec: MSTORE
000025ed: DUP3
000025ee: PUSH1 0x24
000025f0: DUP3
000025f1: ADD
000025f2: MSTORE
000025f3: PUSH1 0x20
000025f5: PUSH1 0x00
000025f7: PUSH1 0x44
000025f9: DUP4
000025fa: PUSH1 0x00
000025fc: DUP10
000025fd: GAS
000025fe: CALL
000025ff: RETURNDATASIZE
00002600: ISZERO
00002601: PUSH1 0x1f
00002603: RETURNDATASIZE
00002604: GT
00002605: PUSH1 0x01
00002607: PUSH1 0x00
00002609: MLOAD
0000260a: EQ
0000260b: AND
0000260c: OR
0000260d: AND
0000260e: SWAP2
0000260f: POP
00002610: POP
00002611: DUP1
00002612: PUSH2 0x084d
00002615: JUMPI
00002616: PUSH1 0x40
00002618: MLOAD
00002619: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
0000263a: DUP2
0000263b: MSTORE
0000263c: PUSH1 0x20
0000263e: PUSH1 0x04
00002640: DUP3
00002641: ADD
00002642: MSTORE
00002643: PUSH1 0x0f
00002645: PUSH1 0x24
00002647: DUP3
00002648: ADD
00002649: MSTORE
0000264a: PUSH32 0x5452414e534645525f4641494c45440000000000000000000000000000000000
0000266b: PUSH1 0x44
0000266d: DUP3
0000266e: ADD
0000266f: MSTORE
00002670: PUSH1 0x64
00002672: ADD
00002673: PUSH2 0x0572
00002676: JUMP
00002677: JUMPDEST
00002678: DUP3
00002679: DUP1
0000267a: SLOAD
0000267b: PUSH2 0x2683
0000267e: SWAP1
0000267f: PUSH2 0x2c08
00002682: JUMP
00002683: JUMPDEST
00002684: SWAP1
00002685: PUSH1 0x00
00002687: MSTORE
00002688: PUSH1 0x20
0000268a: PUSH1 0x00
0000268c: KECCAK256
0000268d: SWAP1
0000268e: PUSH1 0x1f
00002690: ADD
00002691: PUSH1 0x20
00002693: SWAP1
00002694: DIV
00002695: DUP2
00002696: ADD
00002697: SWAP3
00002698: DUP3
00002699: PUSH2 0x26a5
0000269c: JUMPI
0000269d: PUSH1 0x00
0000269f: DUP6
000026a0: SSTORE
000026a1: PUSH2 0x26eb
000026a4: JUMP
000026a5: JUMPDEST
000026a6: DUP3
000026a7: PUSH1 0x1f
000026a9: LT
000026aa: PUSH2 0x26be
000026ad: JUMPI
000026ae: DUP1
000026af: MLOAD
000026b0: PUSH1 0xff
000026b2: NOT
000026b3: AND
000026b4: DUP4
000026b5: DUP1
000026b6: ADD
000026b7: OR
000026b8: DUP6
000026b9: SSTORE
000026ba: PUSH2 0x26eb
000026bd: JUMP
000026be: JUMPDEST
000026bf: DUP3
000026c0: DUP1
000026c1: ADD
000026c2: PUSH1 0x01
000026c4: ADD
000026c5: DUP6
000026c6: SSTORE
000026c7: DUP3
000026c8: ISZERO
000026c9: PUSH2 0x26eb
000026cc: JUMPI
000026cd: SWAP2
000026ce: DUP3
000026cf: ADD
000026d0: JUMPDEST
000026d1: DUP3
000026d2: DUP2
000026d3: GT
000026d4: ISZERO
000026d5: PUSH2 0x26eb
000026d8: JUMPI
000026d9: DUP3
000026da: MLOAD
000026db: DUP3
000026dc: SSTORE
000026dd: SWAP2
000026de: PUSH1 0x20
000026e0: ADD
000026e1: SWAP2
000026e2: SWAP1
000026e3: PUSH1 0x01
000026e5: ADD
000026e6: SWAP1
000026e7: PUSH2 0x26d0
000026ea: JUMP
000026eb: JUMPDEST
000026ec: POP
000026ed: PUSH2 0x26f7
000026f0: SWAP3
000026f1: SWAP2
000026f2: POP
000026f3: PUSH2 0x26fb
000026f6: JUMP
000026f7: JUMPDEST
000026f8: POP
000026f9: SWAP1
000026fa: JUMP
000026fb: JUMPDEST
000026fc: JUMPDEST
000026fd: DUP1
000026fe: DUP3
000026ff: GT
00002700: ISZERO
00002701: PUSH2 0x26f7
00002704: JUMPI
00002705: PUSH1 0x00
00002707: DUP2
00002708: SSTORE
00002709: PUSH1 0x01
0000270b: ADD
0000270c: PUSH2 0x26fc
0000270f: JUMP
00002710: JUMPDEST
00002711: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002726: DUP2
00002727: AND
00002728: DUP2
00002729: EQ
0000272a: PUSH2 0x1383
0000272d: JUMPI
0000272e: PUSH1 0x00
00002730: DUP1
00002731: REVERT
00002732: JUMPDEST
00002733: PUSH1 0x00
00002735: DUP1
00002736: PUSH1 0x40
00002738: DUP4
00002739: DUP6
0000273a: SUB
0000273b: SLT
0000273c: ISZERO
0000273d: PUSH2 0x2745
00002740: JUMPI
00002741: PUSH1 0x00
00002743: DUP1
00002744: REVERT
00002745: JUMPDEST
00002746: DUP3
00002747: CALLDATALOAD
00002748: SWAP2
00002749: POP
0000274a: PUSH1 0x20
0000274c: DUP4
0000274d: ADD
0000274e: CALLDATALOAD
0000274f: PUSH2 0x2757
00002752: DUP2
00002753: PUSH2 0x2710
00002756: JUMP
00002757: JUMPDEST
00002758: DUP1
00002759: SWAP2
0000275a: POP
0000275b: POP
0000275c: SWAP3
0000275d: POP
0000275e: SWAP3
0000275f: SWAP1
00002760: POP
00002761: JUMP
00002762: JUMPDEST
00002763: PUSH1 0x00
00002765: DUP1
00002766: DUP4
00002767: PUSH1 0x1f
00002769: DUP5
0000276a: ADD
0000276b: SLT
0000276c: PUSH2 0x2774
0000276f: JUMPI
00002770: PUSH1 0x00
00002772: DUP1
00002773: REVERT
00002774: JUMPDEST
00002775: POP
00002776: DUP2
00002777: CALLDATALOAD
00002778: PUSH8 0xffffffffffffffff
00002781: DUP2
00002782: GT
00002783: ISZERO
00002784: PUSH2 0x278c
00002787: JUMPI
00002788: PUSH1 0x00
0000278a: DUP1
0000278b: REVERT
0000278c: JUMPDEST
0000278d: PUSH1 0x20
0000278f: DUP4
00002790: ADD
00002791: SWAP2
00002792: POP
00002793: DUP4
00002794: PUSH1 0x20
00002796: DUP3
00002797: DUP6
00002798: ADD
00002799: ADD
0000279a: GT
0000279b: ISZERO
0000279c: PUSH2 0x12dc
0000279f: JUMPI
000027a0: PUSH1 0x00
000027a2: DUP1
000027a3: REVERT
000027a4: JUMPDEST
000027a5: PUSH1 0x00
000027a7: DUP1
000027a8: PUSH1 0x00
000027aa: DUP1
000027ab: PUSH1 0x00
000027ad: DUP1
000027ae: PUSH1 0x00
000027b0: DUP1
000027b1: PUSH1 0xc0
000027b3: DUP10
000027b4: DUP12
000027b5: SUB
000027b6: SLT
000027b7: ISZERO
000027b8: PUSH2 0x27c0
000027bb: JUMPI
000027bc: PUSH1 0x00
000027be: DUP1
000027bf: REVERT
000027c0: JUMPDEST
000027c1: DUP9
000027c2: CALLDATALOAD
000027c3: PUSH2 0x27cb
000027c6: DUP2
000027c7: PUSH2 0x2710
000027ca: JUMP
000027cb: JUMPDEST
000027cc: SWAP8
000027cd: POP
000027ce: PUSH1 0x20
000027d0: DUP10
000027d1: ADD
000027d2: CALLDATALOAD
000027d3: SWAP7
000027d4: POP
000027d5: PUSH1 0x40
000027d7: DUP10
000027d8: ADD
000027d9: CALLDATALOAD
000027da: SWAP6
000027db: POP
000027dc: PUSH1 0x60
000027de: DUP10
000027df: ADD
000027e0: CALLDATALOAD
000027e1: PUSH2 0x27e9
000027e4: DUP2
000027e5: PUSH2 0x2710
000027e8: JUMP
000027e9: JUMPDEST
000027ea: SWAP5
000027eb: POP
000027ec: PUSH1 0x80
000027ee: DUP10
000027ef: ADD
000027f0: CALLDATALOAD
000027f1: PUSH8 0xffffffffffffffff
000027fa: DUP1
000027fb: DUP3
000027fc: GT
000027fd: ISZERO
000027fe: PUSH2 0x2806
00002801: JUMPI
00002802: PUSH1 0x00
00002804: DUP1
00002805: REVERT
00002806: JUMPDEST
00002807: PUSH2 0x2812
0000280a: DUP13
0000280b: DUP4
0000280c: DUP14
0000280d: ADD
0000280e: PUSH2 0x2762
00002811: JUMP
00002812: JUMPDEST
00002813: SWAP1
00002814: SWAP7
00002815: POP
00002816: SWAP5
00002817: POP
00002818: PUSH1 0xa0
0000281a: DUP12
0000281b: ADD
0000281c: CALLDATALOAD
0000281d: SWAP2
0000281e: POP
0000281f: DUP1
00002820: DUP3
00002821: GT
00002822: ISZERO
00002823: PUSH2 0x282b
00002826: JUMPI
00002827: PUSH1 0x00
00002829: DUP1
0000282a: REVERT
0000282b: JUMPDEST
0000282c: POP
0000282d: PUSH2 0x2838
00002830: DUP12
00002831: DUP3
00002832: DUP13
00002833: ADD
00002834: PUSH2 0x2762
00002837: JUMP
00002838: JUMPDEST
00002839: SWAP10
0000283a: SWAP13
0000283b: SWAP9
0000283c: SWAP12
0000283d: POP
0000283e: SWAP7
0000283f: SWAP10
00002840: POP
00002841: SWAP5
00002842: SWAP8
00002843: SWAP4
00002844: SWAP7
00002845: SWAP3
00002846: SWAP6
00002847: SWAP5
00002848: POP
00002849: POP
0000284a: POP
0000284b: JUMP
0000284c: JUMPDEST
0000284d: PUSH1 0x00
0000284f: PUSH1 0x20
00002851: DUP3
00002852: DUP5
00002853: SUB
00002854: SLT
00002855: ISZERO
00002856: PUSH2 0x285e
00002859: JUMPI
0000285a: PUSH1 0x00
0000285c: DUP1
0000285d: REVERT
0000285e: JUMPDEST
0000285f: DUP2
00002860: CALLDATALOAD
00002861: PUSH2 0x0990
00002864: DUP2
00002865: PUSH2 0x2710
00002868: JUMP
00002869: JUMPDEST
0000286a: PUSH1 0x00
0000286c: JUMPDEST
0000286d: DUP4
0000286e: DUP2
0000286f: LT
00002870: ISZERO
00002871: PUSH2 0x2884
00002874: JUMPI
00002875: DUP2
00002876: DUP2
00002877: ADD
00002878: MLOAD
00002879: DUP4
0000287a: DUP3
0000287b: ADD
0000287c: MSTORE
0000287d: PUSH1 0x20
0000287f: ADD
00002880: PUSH2 0x286c
00002883: JUMP
00002884: JUMPDEST
00002885: DUP4
00002886: DUP2
00002887: GT
00002888: ISZERO
00002889: PUSH2 0x084d
0000288c: JUMPI
0000288d: POP
0000288e: POP
0000288f: PUSH1 0x00
00002891: SWAP2
00002892: ADD
00002893: MSTORE
00002894: JUMP
00002895: JUMPDEST
00002896: PUSH1 0x00
00002898: DUP2
00002899: MLOAD
0000289a: DUP1
0000289b: DUP5
0000289c: MSTORE
0000289d: PUSH2 0x28ad
000028a0: DUP2
000028a1: PUSH1 0x20
000028a3: DUP7
000028a4: ADD
000028a5: PUSH1 0x20
000028a7: DUP7
000028a8: ADD
000028a9: PUSH2 0x2869
000028ac: JUMP
000028ad: JUMPDEST
000028ae: PUSH1 0x1f
000028b0: ADD
000028b1: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000028d2: AND
000028d3: SWAP3
000028d4: SWAP1
000028d5: SWAP3
000028d6: ADD
000028d7: PUSH1 0x20
000028d9: ADD
000028da: SWAP3
000028db: SWAP2
000028dc: POP
000028dd: POP
000028de: JUMP
000028df: JUMPDEST
000028e0: PUSH1 0x20
000028e2: DUP2
000028e3: MSTORE
000028e4: PUSH1 0x00
000028e6: PUSH2 0x0990
000028e9: PUSH1 0x20
000028eb: DUP4
000028ec: ADD
000028ed: DUP5
000028ee: PUSH2 0x2895
000028f1: JUMP
000028f2: JUMPDEST
000028f3: PUSH1 0x00
000028f5: DUP1
000028f6: PUSH1 0x00
000028f8: PUSH1 0x60
000028fa: DUP5
000028fb: DUP7
000028fc: SUB
000028fd: SLT
000028fe: ISZERO
000028ff: PUSH2 0x2907
00002902: JUMPI
00002903: PUSH1 0x00
00002905: DUP1
00002906: REVERT
00002907: JUMPDEST
00002908: DUP4
00002909: CALLDATALOAD
0000290a: PUSH2 0x2912
0000290d: DUP2
0000290e: PUSH2 0x2710
00002911: JUMP
00002912: JUMPDEST
00002913: SWAP3
00002914: POP
00002915: PUSH1 0x20
00002917: DUP5
00002918: ADD
00002919: CALLDATALOAD
0000291a: PUSH2 0x2922
0000291d: DUP2
0000291e: PUSH2 0x2710
00002921: JUMP
00002922: JUMPDEST
00002923: SWAP3
00002924: SWAP6
00002925: SWAP3
00002926: SWAP5
00002927: POP
00002928: POP
00002929: POP
0000292a: PUSH1 0x40
0000292c: SWAP2
0000292d: SWAP1
0000292e: SWAP2
0000292f: ADD
00002930: CALLDATALOAD
00002931: SWAP1
00002932: JUMP
00002933: JUMPDEST
00002934: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002955: PUSH1 0x00
00002957: MSTORE
00002958: PUSH1 0x41
0000295a: PUSH1 0x04
0000295c: MSTORE
0000295d: PUSH1 0x24
0000295f: PUSH1 0x00
00002961: REVERT
00002962: JUMPDEST
00002963: PUSH1 0x40
00002965: MLOAD
00002966: PUSH1 0x1f
00002968: DUP3
00002969: ADD
0000296a: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
0000298b: AND
0000298c: DUP2
0000298d: ADD
0000298e: PUSH8 0xffffffffffffffff
00002997: DUP2
00002998: GT
00002999: DUP3
0000299a: DUP3
0000299b: LT
0000299c: OR
0000299d: ISZERO
0000299e: PUSH2 0x29a9
000029a1: JUMPI
000029a2: PUSH2 0x29a9
000029a5: PUSH2 0x2933
000029a8: JUMP
000029a9: JUMPDEST
000029aa: PUSH1 0x40
000029ac: MSTORE
000029ad: SWAP2
000029ae: SWAP1
000029af: POP
000029b0: JUMP
000029b1: JUMPDEST
000029b2: PUSH1 0x00
000029b4: PUSH8 0xffffffffffffffff
000029bd: DUP3
000029be: GT
000029bf: ISZERO
000029c0: PUSH2 0x29cb
000029c3: JUMPI
000029c4: PUSH2 0x29cb
000029c7: PUSH2 0x2933
000029ca: JUMP
000029cb: JUMPDEST
000029cc: POP
000029cd: PUSH1 0x1f
000029cf: ADD
000029d0: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000029f1: AND
000029f2: PUSH1 0x20
000029f4: ADD
000029f5: SWAP1
000029f6: JUMP
000029f7: JUMPDEST
000029f8: PUSH1 0x00
000029fa: DUP1
000029fb: PUSH1 0x40
000029fd: DUP4
000029fe: DUP6
000029ff: SUB
00002a00: SLT
00002a01: ISZERO
00002a02: PUSH2 0x2a0a
00002a05: JUMPI
00002a06: PUSH1 0x00
00002a08: DUP1
00002a09: REVERT
00002a0a: JUMPDEST
00002a0b: DUP3
00002a0c: CALLDATALOAD
00002a0d: PUSH4 0xffffffff
00002a12: DUP2
00002a13: AND
00002a14: DUP2
00002a15: EQ
00002a16: PUSH2 0x2a1e
00002a19: JUMPI
00002a1a: PUSH1 0x00
00002a1c: DUP1
00002a1d: REVERT
00002a1e: JUMPDEST
00002a1f: SWAP2
00002a20: POP
00002a21: PUSH1 0x20
00002a23: DUP4
00002a24: ADD
00002a25: CALLDATALOAD
00002a26: PUSH8 0xffffffffffffffff
00002a2f: DUP2
00002a30: GT
00002a31: ISZERO
00002a32: PUSH2 0x2a3a
00002a35: JUMPI
00002a36: PUSH1 0x00
00002a38: DUP1
00002a39: REVERT
00002a3a: JUMPDEST
00002a3b: DUP4
00002a3c: ADD
00002a3d: PUSH1 0x1f
00002a3f: DUP2
00002a40: ADD
00002a41: DUP6
00002a42: SGT
00002a43: PUSH2 0x2a4b
00002a46: JUMPI
00002a47: PUSH1 0x00
00002a49: DUP1
00002a4a: REVERT
00002a4b: JUMPDEST
00002a4c: DUP1
00002a4d: CALLDATALOAD
00002a4e: PUSH2 0x2a5e
00002a51: PUSH2 0x2a59
00002a54: DUP3
00002a55: PUSH2 0x29b1
00002a58: JUMP
00002a59: JUMPDEST
00002a5a: PUSH2 0x2962
00002a5d: JUMP
00002a5e: JUMPDEST
00002a5f: DUP2
00002a60: DUP2
00002a61: MSTORE
00002a62: DUP7
00002a63: PUSH1 0x20
00002a65: DUP4
00002a66: DUP6
00002a67: ADD
00002a68: ADD
00002a69: GT
00002a6a: ISZERO
00002a6b: PUSH2 0x2a73
00002a6e: JUMPI
00002a6f: PUSH1 0x00
00002a71: DUP1
00002a72: REVERT
00002a73: JUMPDEST
00002a74: DUP2
00002a75: PUSH1 0x20
00002a77: DUP5
00002a78: ADD
00002a79: PUSH1 0x20
00002a7b: DUP4
00002a7c: ADD
00002a7d: CALLDATACOPY
00002a7e: PUSH1 0x00
00002a80: PUSH1 0x20
00002a82: DUP4
00002a83: DUP4
00002a84: ADD
00002a85: ADD
00002a86: MSTORE
00002a87: DUP1
00002a88: SWAP4
00002a89: POP
00002a8a: POP
00002a8b: POP
00002a8c: POP
00002a8d: SWAP3
00002a8e: POP
00002a8f: SWAP3
00002a90: SWAP1
00002a91: POP
00002a92: JUMP
00002a93: JUMPDEST
00002a94: PUSH1 0x00
00002a96: DUP1
00002a97: PUSH1 0x40
00002a99: DUP4
00002a9a: DUP6
00002a9b: SUB
00002a9c: SLT
00002a9d: ISZERO
00002a9e: PUSH2 0x2aa6
00002aa1: JUMPI
00002aa2: PUSH1 0x00
00002aa4: DUP1
00002aa5: REVERT
00002aa6: JUMPDEST
00002aa7: DUP3
00002aa8: CALLDATALOAD
00002aa9: PUSH2 0x2ab1
00002aac: DUP2
00002aad: PUSH2 0x2710
00002ab0: JUMP
00002ab1: JUMPDEST
00002ab2: SWAP5
00002ab3: PUSH1 0x20
00002ab5: SWAP4
00002ab6: SWAP1
00002ab7: SWAP4
00002ab8: ADD
00002ab9: CALLDATALOAD
00002aba: SWAP4
00002abb: POP
00002abc: POP
00002abd: POP
00002abe: JUMP
00002abf: JUMPDEST
00002ac0: DUP1
00002ac1: CALLDATALOAD
00002ac2: DUP1
00002ac3: ISZERO
00002ac4: ISZERO
00002ac5: DUP2
00002ac6: EQ
00002ac7: PUSH2 0x2acf
00002aca: JUMPI
00002acb: PUSH1 0x00
00002acd: DUP1
00002ace: REVERT
00002acf: JUMPDEST
00002ad0: SWAP2
00002ad1: SWAP1
00002ad2: POP
00002ad3: JUMP
00002ad4: JUMPDEST
00002ad5: PUSH1 0x00
00002ad7: DUP1
00002ad8: PUSH1 0x40
00002ada: DUP4
00002adb: DUP6
00002adc: SUB
00002add: SLT
00002ade: ISZERO
00002adf: PUSH2 0x2ae7
00002ae2: JUMPI
00002ae3: PUSH1 0x00
00002ae5: DUP1
00002ae6: REVERT
00002ae7: JUMPDEST
00002ae8: DUP3
00002ae9: CALLDATALOAD
00002aea: PUSH2 0x2af2
00002aed: DUP2
00002aee: PUSH2 0x2710
00002af1: JUMP
00002af2: JUMPDEST
00002af3: SWAP2
00002af4: POP
00002af5: PUSH2 0x2b00
00002af8: PUSH1 0x20
00002afa: DUP5
00002afb: ADD
00002afc: PUSH2 0x2abf
00002aff: JUMP
00002b00: JUMPDEST
00002b01: SWAP1
00002b02: POP
00002b03: SWAP3
00002b04: POP
00002b05: SWAP3
00002b06: SWAP1
00002b07: POP
00002b08: JUMP
00002b09: JUMPDEST
00002b0a: PUSH1 0x00
00002b0c: DUP1
00002b0d: DUP4
00002b0e: PUSH1 0x1f
00002b10: DUP5
00002b11: ADD
00002b12: SLT
00002b13: PUSH2 0x2b1b
00002b16: JUMPI
00002b17: PUSH1 0x00
00002b19: DUP1
00002b1a: REVERT
00002b1b: JUMPDEST
00002b1c: POP
00002b1d: DUP2
00002b1e: CALLDATALOAD
00002b1f: PUSH8 0xffffffffffffffff
00002b28: DUP2
00002b29: GT
00002b2a: ISZERO
00002b2b: PUSH2 0x2b33
00002b2e: JUMPI
00002b2f: PUSH1 0x00
00002b31: DUP1
00002b32: REVERT
00002b33: JUMPDEST
00002b34: PUSH1 0x20
00002b36: DUP4
00002b37: ADD
00002b38: SWAP2
00002b39: POP
00002b3a: DUP4
00002b3b: PUSH1 0x20
00002b3d: DUP3
00002b3e: PUSH1 0x05
00002b40: SHL
00002b41: DUP6
00002b42: ADD
00002b43: ADD
00002b44: GT
00002b45: ISZERO
00002b46: PUSH2 0x12dc
00002b49: JUMPI
00002b4a: PUSH1 0x00
00002b4c: DUP1
00002b4d: REVERT
00002b4e: JUMPDEST
00002b4f: PUSH1 0x00
00002b51: DUP1
00002b52: PUSH1 0x00
00002b54: DUP1
00002b55: PUSH1 0x40
00002b57: DUP6
00002b58: DUP8
00002b59: SUB
00002b5a: SLT
00002b5b: ISZERO
00002b5c: PUSH2 0x2b64
00002b5f: JUMPI
00002b60: PUSH1 0x00
00002b62: DUP1
00002b63: REVERT
00002b64: JUMPDEST
00002b65: DUP5
00002b66: CALLDATALOAD
00002b67: PUSH8 0xffffffffffffffff
00002b70: DUP1
00002b71: DUP3
00002b72: GT
00002b73: ISZERO
00002b74: PUSH2 0x2b7c
00002b77: JUMPI
00002b78: PUSH1 0x00
00002b7a: DUP1
00002b7b: REVERT
00002b7c: JUMPDEST
00002b7d: PUSH2 0x2b88
00002b80: DUP9
00002b81: DUP4
00002b82: DUP10
00002b83: ADD
00002b84: PUSH2 0x2b09
00002b87: JUMP
00002b88: JUMPDEST
00002b89: SWAP1
00002b8a: SWAP7
00002b8b: POP
00002b8c: SWAP5
00002b8d: POP
00002b8e: PUSH1 0x20
00002b90: DUP8
00002b91: ADD
00002b92: CALLDATALOAD
00002b93: SWAP2
00002b94: POP
00002b95: DUP1
00002b96: DUP3
00002b97: GT
00002b98: ISZERO
00002b99: PUSH2 0x2ba1
00002b9c: JUMPI
00002b9d: PUSH1 0x00
00002b9f: DUP1
00002ba0: REVERT
00002ba1: JUMPDEST
00002ba2: POP
00002ba3: PUSH2 0x2bae
00002ba6: DUP8
00002ba7: DUP3
00002ba8: DUP9
00002ba9: ADD
00002baa: PUSH2 0x2b09
00002bad: JUMP
00002bae: JUMPDEST
00002baf: SWAP6
00002bb0: SWAP9
00002bb1: SWAP5
00002bb2: SWAP8
00002bb3: POP
00002bb4: SWAP6
00002bb5: POP
00002bb6: POP
00002bb7: POP
00002bb8: POP
00002bb9: JUMP
00002bba: JUMPDEST
00002bbb: PUSH1 0x00
00002bbd: PUSH1 0x20
00002bbf: DUP3
00002bc0: DUP5
00002bc1: SUB
00002bc2: SLT
00002bc3: ISZERO
00002bc4: PUSH2 0x2bcc
00002bc7: JUMPI
00002bc8: PUSH1 0x00
00002bca: DUP1
00002bcb: REVERT
00002bcc: JUMPDEST
00002bcd: POP
00002bce: CALLDATALOAD
00002bcf: SWAP2
00002bd0: SWAP1
00002bd1: POP
00002bd2: JUMP
00002bd3: JUMPDEST
00002bd4: PUSH1 0x00
00002bd6: DUP1
00002bd7: PUSH1 0x00
00002bd9: PUSH1 0x60
00002bdb: DUP5
00002bdc: DUP7
00002bdd: SUB
00002bde: SLT
00002bdf: ISZERO
00002be0: PUSH2 0x2be8
00002be3: JUMPI
00002be4: PUSH1 0x00
00002be6: DUP1
00002be7: REVERT
00002be8: JUMPDEST
00002be9: DUP4
00002bea: CALLDATALOAD
00002beb: PUSH2 0x2bf3
00002bee: DUP2
00002bef: PUSH2 0x2710
00002bf2: JUMP
00002bf3: JUMPDEST
00002bf4: SWAP6
00002bf5: PUSH1 0x20
00002bf7: DUP6
00002bf8: ADD
00002bf9: CALLDATALOAD
00002bfa: SWAP6
00002bfb: POP
00002bfc: PUSH1 0x40
00002bfe: SWAP1
00002bff: SWAP5
00002c00: ADD
00002c01: CALLDATALOAD
00002c02: SWAP4
00002c03: SWAP3
00002c04: POP
00002c05: POP
00002c06: POP
00002c07: JUMP
00002c08: JUMPDEST
00002c09: PUSH1 0x01
00002c0b: DUP2
00002c0c: DUP2
00002c0d: SHR
00002c0e: SWAP1
00002c0f: DUP3
00002c10: AND
00002c11: DUP1
00002c12: PUSH2 0x2c1c
00002c15: JUMPI
00002c16: PUSH1 0x7f
00002c18: DUP3
00002c19: AND
00002c1a: SWAP2
00002c1b: POP
00002c1c: JUMPDEST
00002c1d: PUSH1 0x20
00002c1f: DUP3
00002c20: LT
00002c21: DUP2
00002c22: SUB
00002c23: PUSH2 0x2c55
00002c26: JUMPI
00002c27: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002c48: PUSH1 0x00
00002c4a: MSTORE
00002c4b: PUSH1 0x22
00002c4d: PUSH1 0x04
00002c4f: MSTORE
00002c50: PUSH1 0x24
00002c52: PUSH1 0x00
00002c54: REVERT
00002c55: JUMPDEST
00002c56: POP
00002c57: SWAP2
00002c58: SWAP1
00002c59: POP
00002c5a: JUMP
00002c5b: JUMPDEST
00002c5c: PUSH1 0x00
00002c5e: DUP3
00002c5f: PUSH1 0x1f
00002c61: DUP4
00002c62: ADD
00002c63: SLT
00002c64: PUSH2 0x2c6c
00002c67: JUMPI
00002c68: PUSH1 0x00
00002c6a: DUP1
00002c6b: REVERT
00002c6c: JUMPDEST
00002c6d: DUP2
00002c6e: MLOAD
00002c6f: PUSH2 0x2c7a
00002c72: PUSH2 0x2a59
00002c75: DUP3
00002c76: PUSH2 0x29b1
00002c79: JUMP
00002c7a: JUMPDEST
00002c7b: DUP2
00002c7c: DUP2
00002c7d: MSTORE
00002c7e: DUP5
00002c7f: PUSH1 0x20
00002c81: DUP4
00002c82: DUP7
00002c83: ADD
00002c84: ADD
00002c85: GT
00002c86: ISZERO
00002c87: PUSH2 0x2c8f
00002c8a: JUMPI
00002c8b: PUSH1 0x00
00002c8d: DUP1
00002c8e: REVERT
00002c8f: JUMPDEST
00002c90: PUSH2 0x0f7d
00002c93: DUP3
00002c94: PUSH1 0x20
00002c96: DUP4
00002c97: ADD
00002c98: PUSH1 0x20
00002c9a: DUP8
00002c9b: ADD
00002c9c: PUSH2 0x2869
00002c9f: JUMP
00002ca0: JUMPDEST
00002ca1: PUSH1 0x00
00002ca3: DUP1
00002ca4: PUSH1 0x00
00002ca6: DUP1
00002ca7: PUSH1 0x80
00002ca9: DUP6
00002caa: DUP8
00002cab: SUB
00002cac: SLT
00002cad: ISZERO
00002cae: PUSH2 0x2cb6
00002cb1: JUMPI
00002cb2: PUSH1 0x00
00002cb4: DUP1
00002cb5: REVERT
00002cb6: JUMPDEST
00002cb7: DUP5
00002cb8: MLOAD
00002cb9: PUSH2 0x2cc1
00002cbc: DUP2
00002cbd: PUSH2 0x2710
00002cc0: JUMP
00002cc1: JUMPDEST
00002cc2: DUP1
00002cc3: SWAP5
00002cc4: POP
00002cc5: POP
00002cc6: PUSH1 0x20
00002cc8: DUP6
00002cc9: ADD
00002cca: MLOAD
00002ccb: SWAP3
00002ccc: POP
00002ccd: PUSH1 0x40
00002ccf: DUP6
00002cd0: ADD
00002cd1: MLOAD
00002cd2: SWAP2
00002cd3: POP
00002cd4: PUSH1 0x60
00002cd6: DUP6
00002cd7: ADD
00002cd8: MLOAD
00002cd9: PUSH8 0xffffffffffffffff
00002ce2: DUP2
00002ce3: GT
00002ce4: ISZERO
00002ce5: PUSH2 0x2ced
00002ce8: JUMPI
00002ce9: PUSH1 0x00
00002ceb: DUP1
00002cec: REVERT
00002ced: JUMPDEST
00002cee: PUSH2 0x2cf9
00002cf1: DUP8
00002cf2: DUP3
00002cf3: DUP9
00002cf4: ADD
00002cf5: PUSH2 0x2c5b
00002cf8: JUMP
00002cf9: JUMPDEST
00002cfa: SWAP2
00002cfb: POP
00002cfc: POP
00002cfd: SWAP3
00002cfe: SWAP6
00002cff: SWAP2
00002d00: SWAP5
00002d01: POP
00002d02: SWAP3
00002d03: POP
00002d04: JUMP
00002d05: JUMPDEST
00002d06: PUSH1 0x00
00002d08: PUSH1 0x20
00002d0a: DUP3
00002d0b: DUP5
00002d0c: SUB
00002d0d: SLT
00002d0e: ISZERO
00002d0f: PUSH2 0x2d17
00002d12: JUMPI
00002d13: PUSH1 0x00
00002d15: DUP1
00002d16: REVERT
00002d17: JUMPDEST
00002d18: POP
00002d19: MLOAD
00002d1a: SWAP2
00002d1b: SWAP1
00002d1c: POP
00002d1d: JUMP
00002d1e: JUMPDEST
00002d1f: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002d40: PUSH1 0x00
00002d42: MSTORE
00002d43: PUSH1 0x32
00002d45: PUSH1 0x04
00002d47: MSTORE
00002d48: PUSH1 0x24
00002d4a: PUSH1 0x00
00002d4c: REVERT
00002d4d: JUMPDEST
00002d4e: PUSH1 0x00
00002d50: PUSH1 0x20
00002d52: DUP3
00002d53: DUP5
00002d54: SUB
00002d55: SLT
00002d56: ISZERO
00002d57: PUSH2 0x2d5f
00002d5a: JUMPI
00002d5b: PUSH1 0x00
00002d5d: DUP1
00002d5e: REVERT
00002d5f: JUMPDEST
00002d60: PUSH2 0x0990
00002d63: DUP3
00002d64: PUSH2 0x2abf
00002d67: JUMP
00002d68: JUMPDEST
00002d69: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000
00002d8a: PUSH1 0x00
00002d8c: MSTORE
00002d8d: PUSH1 0x11
00002d8f: PUSH1 0x04
00002d91: MSTORE
00002d92: PUSH1 0x24
00002d94: PUSH1 0x00
00002d96: REVERT
00002d97: JUMPDEST
00002d98: PUSH1 0x00
00002d9a: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
00002dbb: DUP3
00002dbc: SUB
00002dbd: PUSH2 0x2dc8
00002dc0: JUMPI
00002dc1: PUSH2 0x2dc8
00002dc4: PUSH2 0x2d68
00002dc7: JUMP
00002dc8: JUMPDEST
00002dc9: POP
00002dca: PUSH1 0x01
00002dcc: ADD
00002dcd: SWAP1
00002dce: JUMP
00002dcf: JUMPDEST
00002dd0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002de5: DUP2
00002de6: MLOAD
00002de7: AND
00002de8: DUP3
00002de9: MSTORE
00002dea: PUSH1 0x20
00002dec: DUP2
00002ded: ADD
00002dee: MLOAD
00002def: PUSH1 0x20
00002df1: DUP4
00002df2: ADD
00002df3: MSTORE
00002df4: PUSH1 0x00
00002df6: PUSH1 0x40
00002df8: DUP3
00002df9: ADD
00002dfa: MLOAD
00002dfb: PUSH1 0x60
00002dfd: PUSH1 0x40
00002dff: DUP6
00002e00: ADD
00002e01: MSTORE
00002e02: PUSH2 0x0f7d
00002e05: PUSH1 0x60
00002e07: DUP6
00002e08: ADD
00002e09: DUP3
00002e0a: PUSH2 0x2895
00002e0d: JUMP
00002e0e: JUMPDEST
00002e0f: PUSH1 0x20
00002e11: DUP2
00002e12: MSTORE
00002e13: PUSH1 0x00
00002e15: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002e2a: DUP1
00002e2b: DUP5
00002e2c: MLOAD
00002e2d: AND
00002e2e: PUSH1 0x20
00002e30: DUP5
00002e31: ADD
00002e32: MSTORE
00002e33: DUP1
00002e34: PUSH1 0x20
00002e36: DUP6
00002e37: ADD
00002e38: MLOAD
00002e39: AND
00002e3a: PUSH1 0x40
00002e3c: DUP5
00002e3d: ADD
00002e3e: MSTORE
00002e3f: POP
00002e40: PUSH1 0x40
00002e42: DUP4
00002e43: ADD
00002e44: MLOAD
00002e45: PUSH1 0x60
00002e47: DUP1
00002e48: DUP5
00002e49: ADD
00002e4a: MSTORE
00002e4b: PUSH2 0x0f7d
00002e4e: PUSH1 0x80
00002e50: DUP5
00002e51: ADD
00002e52: DUP3
00002e53: PUSH2 0x2dcf
00002e56: JUMP
00002e57: JUMPDEST
00002e58: PUSH1 0x00
00002e5a: PUSH1 0x60
00002e5c: DUP3
00002e5d: DUP5
00002e5e: SUB
00002e5f: SLT
00002e60: ISZERO
00002e61: PUSH2 0x2e69
00002e64: JUMPI
00002e65: PUSH1 0x00
00002e67: DUP1
00002e68: REVERT
00002e69: JUMPDEST
00002e6a: PUSH1 0x40
00002e6c: MLOAD
00002e6d: PUSH1 0x60
00002e6f: DUP2
00002e70: ADD
00002e71: PUSH8 0xffffffffffffffff
00002e7a: DUP3
00002e7b: DUP3
00002e7c: LT
00002e7d: DUP2
00002e7e: DUP4
00002e7f: GT
00002e80: OR
00002e81: ISZERO
00002e82: PUSH2 0x2e8d
00002e85: JUMPI
00002e86: PUSH2 0x2e8d
00002e89: PUSH2 0x2933
00002e8c: JUMP
00002e8d: JUMPDEST
00002e8e: DUP2
00002e8f: PUSH1 0x40
00002e91: MSTORE
00002e92: DUP3
00002e93: SWAP4
00002e94: POP
00002e95: DUP5
00002e96: MLOAD
00002e97: SWAP2
00002e98: POP
00002e99: PUSH2 0x2ea1
00002e9c: DUP3
00002e9d: PUSH2 0x2710
00002ea0: JUMP
00002ea1: JUMPDEST
00002ea2: DUP2
00002ea3: DUP4
00002ea4: MSTORE
00002ea5: PUSH1 0x20
00002ea7: DUP6
00002ea8: ADD
00002ea9: MLOAD
00002eaa: PUSH1 0x20
00002eac: DUP5
00002ead: ADD
00002eae: MSTORE
00002eaf: PUSH1 0x40
00002eb1: DUP6
00002eb2: ADD
00002eb3: MLOAD
00002eb4: SWAP2
00002eb5: POP
00002eb6: DUP1
00002eb7: DUP3
00002eb8: GT
00002eb9: ISZERO
00002eba: PUSH2 0x2ec2
00002ebd: JUMPI
00002ebe: PUSH1 0x00
00002ec0: DUP1
00002ec1: REVERT
00002ec2: JUMPDEST
00002ec3: POP
00002ec4: PUSH2 0x2ecf
00002ec7: DUP6
00002ec8: DUP3
00002ec9: DUP7
00002eca: ADD
00002ecb: PUSH2 0x2c5b
00002ece: JUMP
00002ecf: JUMPDEST
00002ed0: PUSH1 0x40
00002ed2: DUP4
00002ed3: ADD
00002ed4: MSTORE
00002ed5: POP
00002ed6: POP
00002ed7: SWAP3
00002ed8: SWAP2
00002ed9: POP
00002eda: POP
00002edb: JUMP
00002edc: JUMPDEST
00002edd: PUSH1 0x00
00002edf: DUP1
00002ee0: PUSH1 0x40
00002ee2: DUP4
00002ee3: DUP6
00002ee4: SUB
00002ee5: SLT
00002ee6: ISZERO
00002ee7: PUSH2 0x2eef
00002eea: JUMPI
00002eeb: PUSH1 0x00
00002eed: DUP1
00002eee: REVERT
00002eef: JUMPDEST
00002ef0: DUP3
00002ef1: MLOAD
00002ef2: PUSH8 0xffffffffffffffff
00002efb: DUP1
00002efc: DUP3
00002efd: GT
00002efe: ISZERO
00002eff: PUSH2 0x2f07
00002f02: JUMPI
00002f03: PUSH1 0x00
00002f05: DUP1
00002f06: REVERT
00002f07: JUMPDEST
00002f08: PUSH2 0x2f13
00002f0b: DUP7
00002f0c: DUP4
00002f0d: DUP8
00002f0e: ADD
00002f0f: PUSH2 0x2e57
00002f12: JUMP
00002f13: JUMPDEST
00002f14: SWAP4
00002f15: POP
00002f16: PUSH1 0x20
00002f18: DUP6
00002f19: ADD
00002f1a: MLOAD
00002f1b: SWAP2
00002f1c: POP
00002f1d: DUP1
00002f1e: DUP3
00002f1f: GT
00002f20: ISZERO
00002f21: PUSH2 0x2f29
00002f24: JUMPI
00002f25: PUSH1 0x00
00002f27: DUP1
00002f28: REVERT
00002f29: JUMPDEST
00002f2a: POP
00002f2b: PUSH2 0x2f36
00002f2e: DUP6
00002f2f: DUP3
00002f30: DUP7
00002f31: ADD
00002f32: PUSH2 0x2c5b
00002f35: JUMP
00002f36: JUMPDEST
00002f37: SWAP2
00002f38: POP
00002f39: POP
00002f3a: SWAP3
00002f3b: POP
00002f3c: SWAP3
00002f3d: SWAP1
00002f3e: POP
00002f3f: JUMP
00002f40: JUMPDEST
00002f41: PUSH1 0x20
00002f43: DUP2
00002f44: MSTORE
00002f45: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002f5a: DUP3
00002f5b: MLOAD
00002f5c: AND
00002f5d: PUSH1 0x20
00002f5f: DUP3
00002f60: ADD
00002f61: MSTORE
00002f62: PUSH1 0x00
00002f64: PUSH1 0x20
00002f66: DUP4
00002f67: ADD
00002f68: MLOAD
00002f69: PUSH1 0x80
00002f6b: PUSH1 0x40
00002f6d: DUP5
00002f6e: ADD
00002f6f: MSTORE
00002f70: PUSH2 0x2f7c
00002f73: PUSH1 0xa0
00002f75: DUP5
00002f76: ADD
00002f77: DUP3
00002f78: PUSH2 0x2895
00002f7b: JUMP
00002f7c: JUMPDEST
00002f7d: SWAP1
00002f7e: POP
00002f7f: PUSH1 0x40
00002f81: DUP5
00002f82: ADD
00002f83: MLOAD
00002f84: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00002fa5: DUP1
00002fa6: DUP6
00002fa7: DUP5
00002fa8: SUB
00002fa9: ADD
00002faa: PUSH1 0x60
00002fac: DUP7
00002fad: ADD
00002fae: MSTORE
00002faf: PUSH2 0x2fb8
00002fb2: DUP4
00002fb3: DUP4
00002fb4: PUSH2 0x2895
00002fb7: JUMP
00002fb8: JUMPDEST
00002fb9: SWAP3
00002fba: POP
00002fbb: PUSH1 0x60
00002fbd: DUP7
00002fbe: ADD
00002fbf: MLOAD
00002fc0: SWAP2
00002fc1: POP
00002fc2: DUP1
00002fc3: DUP6
00002fc4: DUP5
00002fc5: SUB
00002fc6: ADD
00002fc7: PUSH1 0x80
00002fc9: DUP7
00002fca: ADD
00002fcb: MSTORE
00002fcc: POP
00002fcd: PUSH2 0x2fd6
00002fd0: DUP3
00002fd1: DUP3
00002fd2: PUSH2 0x2dcf
00002fd5: JUMP
00002fd6: JUMPDEST
00002fd7: SWAP6
00002fd8: SWAP5
00002fd9: POP
00002fda: POP
00002fdb: POP
00002fdc: POP
00002fdd: POP
00002fde: JUMP
00002fdf: JUMPDEST
00002fe0: PUSH1 0x00
00002fe2: PUSH1 0x20
00002fe4: DUP3
00002fe5: DUP5
00002fe6: SUB
00002fe7: SLT
00002fe8: ISZERO
00002fe9: PUSH2 0x2ff1
00002fec: JUMPI
00002fed: PUSH1 0x00
00002fef: DUP1
00002ff0: REVERT
00002ff1: JUMPDEST
00002ff2: DUP2
00002ff3: MLOAD
00002ff4: PUSH8 0xffffffffffffffff
00002ffd: DUP2
00002ffe: GT
00002fff: ISZERO
00003000: PUSH2 0x3008
00003003: JUMPI
00003004: PUSH1 0x00
00003006: DUP1
00003007: REVERT
00003008: JUMPDEST
00003009: PUSH2 0x0f7d
0000300c: DUP5
0000300d: DUP3
0000300e: DUP6
0000300f: ADD
00003010: PUSH2 0x2e57
00003013: JUMP
00003014: JUMPDEST
00003015: PUSH1 0x00
00003017: DUP3
00003018: DUP3
00003019: LT
0000301a: ISZERO
0000301b: PUSH2 0x3026
0000301e: JUMPI
0000301f: PUSH2 0x3026
00003022: PUSH2 0x2d68
00003025: JUMP
00003026: JUMPDEST
00003027: POP
00003028: SUB
00003029: SWAP1
0000302a: JUMP
0000302b: JUMPDEST
0000302c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003041: DUP6
00003042: AND
00003043: DUP2
00003044: MSTORE
00003045: DUP4
00003046: PUSH1 0x20
00003048: DUP3
00003049: ADD
0000304a: MSTORE
0000304b: DUP3
0000304c: PUSH1 0x40
0000304e: DUP3
0000304f: ADD
00003050: MSTORE
00003051: PUSH1 0x80
00003053: PUSH1 0x60
00003055: DUP3
00003056: ADD
00003057: MSTORE
00003058: PUSH1 0x00
0000305a: PUSH2 0x3066
0000305d: PUSH1 0x80
0000305f: DUP4
00003060: ADD
00003061: DUP5
00003062: PUSH2 0x2895
00003065: JUMP
00003066: JUMPDEST
00003067: SWAP7
00003068: SWAP6
00003069: POP
0000306a: POP
0000306b: POP
0000306c: POP
0000306d: POP
0000306e: POP
0000306f: JUMP
00003070: JUMPDEST
00003071: DUP4
00003072: DUP2
00003073: MSTORE
00003074: PUSH1 0x60
00003076: PUSH1 0x20
00003078: DUP3
00003079: ADD
0000307a: MSTORE
0000307b: PUSH1 0x00
0000307d: PUSH2 0x3089
00003080: PUSH1 0x60
00003082: DUP4
00003083: ADD
00003084: DUP6
00003085: PUSH2 0x2895
00003088: JUMP
00003089: JUMPDEST
0000308a: DUP3
0000308b: DUP2
0000308c: SUB
0000308d: PUSH1 0x40
0000308f: DUP5
00003090: ADD
00003091: MSTORE
00003092: PUSH2 0x3066
00003095: DUP2
00003096: DUP6
00003097: PUSH2 0x2895
0000309a: JUMP
0000309b: JUMPDEST
0000309c: PUSH1 0x20
0000309e: DUP2
0000309f: MSTORE
000030a0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000030b5: DUP3
000030b6: MLOAD
000030b7: AND
000030b8: PUSH1 0x20
000030ba: DUP3
000030bb: ADD
000030bc: MSTORE
000030bd: PUSH1 0x00
000030bf: PUSH1 0x20
000030c1: DUP4
000030c2: ADD
000030c3: MLOAD
000030c4: PUSH1 0x60
000030c6: PUSH1 0x40
000030c8: DUP5
000030c9: ADD
000030ca: MSTORE
000030cb: PUSH2 0x30d7
000030ce: PUSH1 0x80
000030d0: DUP5
000030d1: ADD
000030d2: DUP3
000030d3: PUSH2 0x2895
000030d6: JUMP
000030d7: JUMPDEST
000030d8: SWAP1
000030d9: POP
000030da: PUSH1 0x40
000030dc: DUP5
000030dd: ADD
000030de: MLOAD
000030df: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
00003100: DUP5
00003101: DUP4
00003102: SUB
00003103: ADD
00003104: PUSH1 0x60
00003106: DUP6
00003107: ADD
00003108: MSTORE
00003109: PUSH2 0x2fd6
0000310c: DUP3
0000310d: DUP3
0000310e: PUSH2 0x2dcf
00003111: JUMP
00003112: JUMPDEST
00003113: PUSH1 0x00
00003115: DUP1
00003116: PUSH1 0x40
00003118: DUP4
00003119: DUP6
0000311a: SUB
0000311b: SLT
0000311c: ISZERO
0000311d: PUSH2 0x3125
00003120: JUMPI
00003121: PUSH1 0x00
00003123: DUP1
00003124: REVERT
00003125: JUMPDEST
00003126: DUP3
00003127: MLOAD
00003128: PUSH8 0xffffffffffffffff
00003131: DUP1
00003132: DUP3
00003133: GT
00003134: ISZERO
00003135: PUSH2 0x313d
00003138: JUMPI
00003139: PUSH1 0x00
0000313b: DUP1
0000313c: REVERT
0000313d: JUMPDEST
0000313e: PUSH2 0x3149
00003141: DUP7
00003142: DUP4
00003143: DUP8
00003144: ADD
00003145: PUSH2 0x2c5b
00003148: JUMP
00003149: JUMPDEST
0000314a: SWAP4
0000314b: POP
0000314c: PUSH1 0x20
0000314e: DUP6
0000314f: ADD
00003150: MLOAD
00003151: SWAP2
00003152: POP
00003153: DUP1
00003154: DUP3
00003155: GT
00003156: ISZERO
00003157: PUSH2 0x315f
0000315a: JUMPI
0000315b: PUSH1 0x00
0000315d: DUP1
0000315e: REVERT
0000315f: JUMPDEST
00003160: POP
00003161: PUSH2 0x2f36
00003164: DUP6
00003165: DUP3
00003166: DUP7
00003167: ADD
00003168: PUSH2 0x2e57
0000316b: JUMP
0000316c: JUMPDEST
0000316d: PUSH1 0x20
0000316f: DUP2
00003170: MSTORE
00003171: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003186: DUP3
00003187: MLOAD
00003188: AND
00003189: PUSH1 0x20
0000318b: DUP3
0000318c: ADD
0000318d: MSTORE
0000318e: PUSH1 0x20
00003190: DUP3
00003191: ADD
00003192: MLOAD
00003193: PUSH1 0x40
00003195: DUP3
00003196: ADD
00003197: MSTORE
00003198: PUSH1 0x00
0000319a: PUSH1 0x40
0000319c: DUP4
0000319d: ADD
0000319e: MLOAD
0000319f: PUSH1 0xa0
000031a1: PUSH1 0x60
000031a3: DUP5
000031a4: ADD
000031a5: MSTORE
000031a6: PUSH2 0x31b2
000031a9: PUSH1 0xc0
000031ab: DUP5
000031ac: ADD
000031ad: DUP3
000031ae: PUSH2 0x2895
000031b1: JUMP
000031b2: JUMPDEST
000031b3: SWAP1
000031b4: POP
000031b5: PUSH1 0x60
000031b7: DUP5
000031b8: ADD
000031b9: MLOAD
000031ba: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
000031db: DUP1
000031dc: DUP6
000031dd: DUP5
000031de: SUB
000031df: ADD
000031e0: PUSH1 0x80
000031e2: DUP7
000031e3: ADD
000031e4: MSTORE
000031e5: PUSH2 0x31ee
000031e8: DUP4
000031e9: DUP4
000031ea: PUSH2 0x2895
000031ed: JUMP
000031ee: JUMPDEST
000031ef: SWAP3
000031f0: POP
000031f1: PUSH1 0x80
000031f3: DUP7
000031f4: ADD
000031f5: MLOAD
000031f6: SWAP2
000031f7: POP
000031f8: DUP1
000031f9: DUP6
000031fa: DUP5
000031fb: SUB
000031fc: ADD
000031fd: PUSH1 0xa0
000031ff: DUP7
00003200: ADD
00003201: MSTORE
00003202: POP
00003203: PUSH2 0x2fd6
00003206: DUP3
00003207: DUP3
00003208: PUSH2 0x2dcf
0000320b: JUMP
0000320c: JUMPDEST
0000320d: PUSH1 0x00
0000320f: PUSH1 0x20
00003211: DUP3
00003212: DUP5
00003213: SUB
00003214: SLT
00003215: ISZERO
00003216: PUSH2 0x321e
00003219: JUMPI
0000321a: PUSH1 0x00
0000321c: DUP1
0000321d: REVERT
0000321e: JUMPDEST
0000321f: DUP2
00003220: MLOAD
00003221: PUSH8 0xffffffffffffffff
0000322a: DUP1
0000322b: DUP3
0000322c: GT
0000322d: ISZERO
0000322e: PUSH2 0x3236
00003231: JUMPI
00003232: PUSH1 0x00
00003234: DUP1
00003235: REVERT
00003236: JUMPDEST
00003237: SWAP1
00003238: DUP4
00003239: ADD
0000323a: SWAP1
0000323b: PUSH1 0x40
0000323d: DUP3
0000323e: DUP7
0000323f: SUB
00003240: SLT
00003241: ISZERO
00003242: PUSH2 0x324a
00003245: JUMPI
00003246: PUSH1 0x00
00003248: DUP1
00003249: REVERT
0000324a: JUMPDEST
0000324b: PUSH1 0x40
0000324d: MLOAD
0000324e: PUSH1 0x40
00003250: DUP2
00003251: ADD
00003252: DUP2
00003253: DUP2
00003254: LT
00003255: DUP4
00003256: DUP3
00003257: GT
00003258: OR
00003259: ISZERO
0000325a: PUSH2 0x3265
0000325d: JUMPI
0000325e: PUSH2 0x3265
00003261: PUSH2 0x2933
00003264: JUMP
00003265: JUMPDEST
00003266: PUSH1 0x40
00003268: MSTORE
00003269: DUP3
0000326a: MLOAD
0000326b: DUP3
0000326c: DUP2
0000326d: GT
0000326e: ISZERO
0000326f: PUSH2 0x3277
00003272: JUMPI
00003273: PUSH1 0x00
00003275: DUP1
00003276: REVERT
00003277: JUMPDEST
00003278: PUSH2 0x3283
0000327b: DUP8
0000327c: DUP3
0000327d: DUP7
0000327e: ADD
0000327f: PUSH2 0x2c5b
00003282: JUMP
00003283: JUMPDEST
00003284: DUP3
00003285: MSTORE
00003286: POP
00003287: PUSH1 0x20
00003289: DUP4
0000328a: ADD
0000328b: MLOAD
0000328c: DUP3
0000328d: DUP2
0000328e: GT
0000328f: ISZERO
00003290: PUSH2 0x3298
00003293: JUMPI
00003294: PUSH1 0x00
00003296: DUP1
00003297: REVERT
00003298: JUMPDEST
00003299: PUSH2 0x32a4
0000329c: DUP8
0000329d: DUP3
0000329e: DUP7
0000329f: ADD
000032a0: PUSH2 0x2c5b
000032a3: JUMP
000032a4: JUMPDEST
000032a5: PUSH1 0x20
000032a7: DUP4
000032a8: ADD
000032a9: MSTORE
000032aa: POP
000032ab: SWAP6
000032ac: SWAP5
000032ad: POP
000032ae: POP
000032af: POP
000032b0: POP
000032b1: POP
000032b2: JUMP
000032b3: JUMPDEST
000032b4: PUSH1 0x00
000032b6: DUP2
000032b7: MLOAD
000032b8: PUSH1 0x40
000032ba: DUP5
000032bb: MSTORE
000032bc: PUSH2 0x32c8
000032bf: PUSH1 0x40
000032c1: DUP6
000032c2: ADD
000032c3: DUP3
000032c4: PUSH2 0x2895
000032c7: JUMP
000032c8: JUMPDEST
000032c9: SWAP1
000032ca: POP
000032cb: PUSH1 0x20
000032cd: DUP4
000032ce: ADD
000032cf: MLOAD
000032d0: DUP5
000032d1: DUP3
000032d2: SUB
000032d3: PUSH1 0x20
000032d5: DUP7
000032d6: ADD
000032d7: MSTORE
000032d8: PUSH2 0x2fd6
000032db: DUP3
000032dc: DUP3
000032dd: PUSH2 0x2895
000032e0: JUMP
000032e1: JUMPDEST
000032e2: PUSH1 0x20
000032e4: DUP2
000032e5: MSTORE
000032e6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000032fb: DUP3
000032fc: MLOAD
000032fd: AND
000032fe: PUSH1 0x20
00003300: DUP3
00003301: ADD
00003302: MSTORE
00003303: PUSH1 0x00
00003305: PUSH1 0x20
00003307: DUP4
00003308: ADD
00003309: MLOAD
0000330a: PUSH1 0x40
0000330c: DUP1
0000330d: DUP5
0000330e: ADD
0000330f: MSTORE
00003310: PUSH2 0x0f7d
00003313: PUSH1 0x60
00003315: DUP5
00003316: ADD
00003317: DUP3
00003318: PUSH2 0x32b3
0000331b: JUMP
0000331c: JUMPDEST
0000331d: PUSH1 0x20
0000331f: DUP2
00003320: MSTORE
00003321: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003336: DUP3
00003337: MLOAD
00003338: AND
00003339: PUSH1 0x20
0000333b: DUP3
0000333c: ADD
0000333d: MSTORE
0000333e: PUSH1 0x20
00003340: DUP3
00003341: ADD
00003342: MLOAD
00003343: PUSH1 0x40
00003345: DUP3
00003346: ADD
00003347: MSTORE
00003348: PUSH1 0x00
0000334a: PUSH1 0x40
0000334c: DUP4
0000334d: ADD
0000334e: MLOAD
0000334f: PUSH1 0x80
00003351: PUSH1 0x60
00003353: DUP5
00003354: ADD
00003355: MSTORE
00003356: PUSH2 0x3362
00003359: PUSH1 0xa0
0000335b: DUP5
0000335c: ADD
0000335d: DUP3
0000335e: PUSH2 0x2895
00003361: JUMP
00003362: JUMPDEST
00003363: SWAP1
00003364: POP
00003365: PUSH1 0x60
00003367: DUP5
00003368: ADD
00003369: MLOAD
0000336a: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0
0000338b: DUP5
0000338c: DUP4
0000338d: SUB
0000338e: ADD
0000338f: PUSH1 0x80
00003391: DUP6
00003392: ADD
00003393: MSTORE
00003394: PUSH2 0x2fd6
00003397: DUP3
00003398: DUP3
00003399: PUSH2 0x32b3
0000339c: JUMP
0000339d: INVALID
0000339e: LOG2
0000339f: PUSH5 0x6970667358
000033a5: UNKNOWN(0x22)
000033a6: SLT
000033a7: KECCAK256
000033a8: UNKNOWN(0xD4)
000033a9: PUSH23 0x5e8fbe9ff641c199371baccda9b9e7544706c993378e5d
000033c1: PUSH0
000033c2: UNKNOWN(0xBB)
000033c3: PUSH21

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x8b35d1d4dfdafa573680ead3fa837894d6f230e2818c938da4695778857c08ff
call_targets: 0xdff78a949e47c1e90f3dd6dd7fe2fa72b42a75f7
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x8b35d1d4dfdafa573680ead3fa837894d6f230e2818c938da4695778857c08ff",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xdff78a949e47c1e90f3dd6dd7fe2fa72b42a75f7"
    ],
    "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": "0xf290aafa",
            "selector": "0xf290aafa",
            "calldata_variants": [
                "0xf290aafa",
                "0xf290aafa0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc0c546a",
            "selector": "0xfc0c546a",
            "calldata_variants": [
                "0xfc0c546a",
                "0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc3a7b98",
            "selector": "0xfc3a7b98",
            "calldata_variants": [
                "0xfc3a7b98",
                "0xfc3a7b980000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe272ad3f",
            "selector": "0xe272ad3f",
            "calldata_variants": [
                "0xe272ad3f",
                "0xe272ad3f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe9ee1eaf",
            "selector": "0xe9ee1eaf",
            "calldata_variants": [
                "0xe9ee1eaf",
                "0xe9ee1eaf0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9dc7b023",
            "selector": "0x9dc7b023",
            "calldata_variants": [
                "0x9dc7b023",
                "0x9dc7b0230000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xaad48d80",
            "selector": "0xaad48d80",
            "calldata_variants": [
                "0xaad48d80",
                "0xaad48d800000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd547741f",
            "selector": "0xd547741f",
            "calldata_variants": [
                "0xd547741f",
                "0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4735,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5164,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5601,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 11,
    "guards_detected": [],
    "untrusted_call_count": 11
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x8b35d1d4dfdafa573680ead3fa837894d6f230e2818c938da4695778857c08ff
call_targets: 0xdff78a949e47c1e90f3dd6dd7fe2fa72b42a75f7
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x8b35d1d4dfdafa573680ead3fa837894d6f230e2818c938da4695778857c08ff",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xdff78a949e47c1e90f3dd6dd7fe2fa72b42a75f7"
    ],
    "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": "0xf290aafa",
            "selector": "0xf290aafa",
            "calldata_variants": [
                "0xf290aafa",
                "0xf290aafa0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc0c546a",
            "selector": "0xfc0c546a",
            "calldata_variants": [
                "0xfc0c546a",
                "0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc3a7b98",
            "selector": "0xfc3a7b98",
            "calldata_variants": [
                "0xfc3a7b98",
                "0xfc3a7b980000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe272ad3f",
            "selector": "0xe272ad3f",
            "calldata_variants": [
                "0xe272ad3f",
                "0xe272ad3f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe9ee1eaf",
            "selector": "0xe9ee1eaf",
            "calldata_variants": [
                "0xe9ee1eaf",
                "0xe9ee1eaf0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x9dc7b023",
            "selector": "0x9dc7b023",
            "calldata_variants": [
                "0x9dc7b023",
                "0x9dc7b0230000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xaad48d80",
            "selector": "0xaad48d80",
            "calldata_variants": [
                "0xaad48d80",
                "0xaad48d800000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd547741f",
            "selector": "0xd547741f",
            "calldata_variants": [
                "0xd547741f",
                "0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4735,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5164,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 5601,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 11,
    "guards_detected": []
}
medium math codex Pending share accounting uses pendingUnderlying instead of consumedUnderlying, locking pending funds 75 no
view
evidence_json
{
    "evidence": "In `dstPostHookCall`, the comment indicates consumedU, but the calculation uses `pendingUnderlying`, and the resulting `pendingShares` are cached and emitted as pending.",
    "locations": [
        "contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175"
    ],
    "recommendation": "Compute shares based on `consumedUnderlying` (not `pendingUnderlying`) and derive `pendingShares` from the remaining shares. For example: `consumedShares = totalShares * consumedUnderlying / depositUnderlying; pendingShares = totalShares - consumedShares;` then cache/emit using those corrected values.",
    "exploit_scenario": "When a transfer exceeds the receive limit, `pendingUnderlying > 0` and the hook mints shares to itself then transfers the consumed portion to the receiver. However, `dstPostHookCall` computes `consumedShares` using `pendingUnderlying`, so `pendingShares` ends up representing the consumed portion. The cache then tracks more pending shares than the hook actually holds. A subsequent `retry()` attempts to transfer these inflated pending shares, underflows the hook\u2019s share balance, and reverts, leaving the pending funds stuck unless an admin rescues them."
}
low other codex Unchecked ERC20 transfers when returning funds from strategy can desync accounting 65 no
view
evidence_json
{
    "evidence": "Both `_withdrawFromStrategy` and `_withdrawAllFromStrategy` use raw `transfer` without checking the return value.",
    "locations": [
        "contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223",
        "contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"
    ],
    "recommendation": "Use `SafeTransferLib.safeTransfer` (or check the return value) for transfers back to the vault to ensure failures revert and accounting stays consistent.",
    "exploit_scenario": "If the underlying token is non-standard and returns `false` instead of reverting, `_withdrawFromStrategy` and `_withdrawAllFromStrategy` will still update `totalIdle`/`totalDebt` and emit events even though the transfer to the vault failed. This can leave the vault underfunded and cause later withdrawals/bridges to revert or funds to become stuck in the hook contract."
}
low auth codex Permit signatures depend on mutable conversion rate, enabling front‑run invalidation 65 no
view
evidence_json
{
    "evidence": "The signature hash and allowance both use `convertToShares(value)` which depends on mutable `totalUnderlyingAssets`.",
    "locations": [
        "contracts/contracts/token/yield-token/YieldTokenBase.sol:159"
    ],
    "recommendation": "Make the signed value deterministic: accept a `valueShares` parameter for permit, or include a stable conversion rate snapshot in the signed data, or store allowances in asset units instead of shares.",
    "exploit_scenario": "`permit()` hashes `convertToShares(value)` at execution time. Any change in `totalUnderlyingAssets` between signing and submission (e.g., another bridge or yield sync) changes the conversion rate and invalidates the signature. An attacker can front\u2011run a permit submission by causing a small rate change, forcing `InvalidSigner` and blocking gasless approvals."
}
info other cast Heavy CALL-family usage 55 no
view
evidence_json
{
    "notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
    "call_family_count": 14
}