12d861ef-8f42-4779-a04a-8d1399b51333
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 30319 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 74098 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 74099 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 74100 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 74101 | capability.graph | complete | 1 / 3 | 1 week ago |
| 74102 | detector.run | complete | 1 / 3 | 1 week ago |
| 74103 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1046197] OpenAI Codex v0.77.0 (research preview)
[codex:1046197] --------
[codex:1046197] workdir: /tmp/codex-multi-t2vdkoqo
[codex:1046197] model: gpt-5.2-codex
[codex:1046197] provider: openai
[codex:1046197] approval: never
[codex:1046197] sandbox: read-only
[codex:1046197] reasoning effort: xhigh
[codex:1046197] reasoning summaries: auto
[codex:1046197] session id: 019b658d-6f23-7912-aebb-332448d8b2ee
[codex:1046197] --------
[codex:1046197] user
[codex:1046197] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1046197] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1046197] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1046197]
[codex:1046197] Scope rules:
[codex:1046197] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1046197] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1046197]
[codex:1046197] Output MUST be valid JSON matching the provided schema.
[codex:1046197] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1046197] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1046197]
[codex:1046197] Output constraints (IMPORTANT):
[codex:1046197] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1046197] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1046197] mcp startup: no servers
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Reading AUDIT_BUNDLE.txt**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc ls in /tmp/codex-multi-t2vdkoqo succeeded in 5ms:
[codex:1046197] AUDIT_BUNDLE.txt
[codex:1046197] codex-output-schema.json
[codex:1046197] contracts
[codex:1046197] exec
[codex:1046197] /bin/bash -lc "sed -n '1,200p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-t2vdkoqo succeeded in 6ms:
[codex:1046197] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1046197]
[codex:1046197] ================================================================================
[codex:1046197] FILE: contracts/@openzeppelin/contracts/access/Ownable.sol
[codex:1046197] ================================================================================
[codex:1046197] // SPDX-License-Identifier: MIT
[codex:1046197] // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
[codex:1046197]
[codex:1046197] pragma solidity ^0.8.20;
[codex:1046197]
[codex:1046197] import {Context} from "../utils/Context.sol";
[codex:1046197]
[codex:1046197] /**
[codex:1046197] * @dev Contract module which provides a basic access control mechanism, where
[codex:1046197] * there is an account (an owner) that can be granted exclusive access to
[codex:1046197] * specific functions.
[codex:1046197] *
[codex:1046197] * The initial owner is set to the address provided by the deployer. This can
[codex:1046197] * later be changed with {transferOwnership}.
[codex:1046197] *
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Preparing to analyze AUDIT_BUNDLE.txt**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc "sed -n '200,400p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-t2vdkoqo succeeded in 6ms:
[codex:1046197] error ERC20InvalidReceiver(address receiver);
[codex:1046197]
[codex:1046197] /**
[codex:1046197] * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
[codex:1046197] * @param spender Address that may be allowed to operate on tokens without being their owner.
[codex:1046197] * @param allowance Amount of tokens a `spender` is allowed to operate with.
[codex:1046197] * @param needed Minimum amount required to perform a transfer.
[codex:1046197] */
[codex:1046197] error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
[codex:1046197]
[codex:1046197] /**
[codex:1046197] * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
[codex:1046197] * @param approver Address initiating an approval operation.
[codex:1046197] */
[codex:1046197] error ERC20InvalidApprover(address approver);
[codex:1046197]
[codex:1046197] /**
[codex:1046197] * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
[codex:1046197] * @param spender Address that may be allowed to operate on tokens without being their owner.
[codex:1046197] */
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Searching for first-party contracts**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc 'rg "FILE: contracts/" -n AUDIT_BUNDLE.txt' in /tmp/codex-multi-t2vdkoqo succeeded in 7ms:
[codex:1046197] 4:FILE: contracts/@openzeppelin/contracts/access/Ownable.sol
[codex:1046197] 108:FILE: contracts/@openzeppelin/contracts/access/Ownable2Step.sol
[codex:1046197] 171:FILE: contracts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol
[codex:1046197] 336:FILE: contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol
[codex:1046197] 656:FILE: contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol
[codex:1046197] 739:FILE: contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
[codex:1046197] 769:FILE: contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol
[codex:1046197] 863:FILE: contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
[codex:1046197] 985:FILE: contracts/@openzeppelin/contracts/utils/Address.sol
[codex:1046197] 1148:FILE: contracts/@openzeppelin/contracts/utils/Context.sol
[codex:1046197] 1180:FILE: contracts/@openzeppelin/contracts/utils/Create2.sol
[codex:1046197] 1280:FILE: contracts/@openzeppelin/contracts/utils/ReentrancyGuard.sol
[codex:1046197] 1368:FILE: contracts/@openzeppelin/contracts/utils/math/Math.sol
[codex:1046197] 1787:FILE: contracts/@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol
[codex:1046197] 1815:FILE: contracts/@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3SwapCallback.sol
[codex:1046197] 1840:FILE: contracts/@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol
[codex:1046197] 1947:FILE: contracts/@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol
[codex:1046197] 1991:FILE: contracts/@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol
[codex:1046197] 2116:FILE: contracts/@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol
[codex:1046197] 2155:FILE: contracts/@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Clarifying scope and reading strategy**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc "sed -n '2594,3431p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-t2vdkoqo succeeded in 6ms:
[codex:1046197] FILE: contracts/contracts/DragonBuyAndBurn.sol
[codex:1046197] ================================================================================
[codex:1046197] // SPDX-License-Identifier: UNLICENSED
[codex:1046197] pragma solidity 0.8.20;
[codex:1046197]
[codex:1046197] // UniSwap
[codex:1046197] import "@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol";
[codex:1046197] import "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol";
[codex:1046197]
[codex:1046197] // OpenZeppelins
[codex:1046197] import "@openzeppelin/contracts/access/Ownable2Step.sol";
[codex:1046197] import "@openzeppelin/contracts/utils/math/Math.sol";
[codex:1046197] import "@openzeppelin/contracts/utils/Context.sol";
[codex:1046197] import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
[codex:1046197]
[codex:1046197] // Library
[codex:1046197] import "./lib/Constants.sol";
[codex:1046197] import "./lib/interfaces/IWETH.sol";
[codex:1046197] import "./lib/interfaces/INonfungiblePositionManager.sol";
[codex:1046197] import "./lib/uniswap/PoolAddress.sol";
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Continuing to read from line 3432**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc "sed -n '3432,4363p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-t2vdkoqo succeeded in 6ms:
[codex:1046197] FILE: contracts/contracts/DragonX.sol
[codex:1046197] ================================================================================
[codex:1046197] // SPDX-License-Identifier: UNLICENSED
[codex:1046197] pragma solidity 0.8.20;
[codex:1046197]
[codex:1046197] // OpenZeppelin
[codex:1046197] import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
[codex:1046197] import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:1046197] import "@openzeppelin/contracts/utils/Address.sol";
[codex:1046197] import "@openzeppelin/contracts/utils/Create2.sol";
[codex:1046197] import "@openzeppelin/contracts/access/Ownable2Step.sol";
[codex:1046197] import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
[codex:1046197]
[codex:1046197] // Library
[codex:1046197] import "./lib/DragonStake.sol";
[codex:1046197] import "./lib/Constants.sol";
[codex:1046197] import "./lib/Types.sol";
[codex:1046197] import "./lib/interfaces/ITitanX.sol";
[codex:1046197]
[codex:1046197] /**
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Continuing from specific line**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc "sed -n '4364,4831p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-t2vdkoqo succeeded in 6ms:
[codex:1046197] FILE: contracts/contracts/TitanBuy.sol
[codex:1046197] ================================================================================
[codex:1046197] // SPDX-License-Identifier: UNLICENSED
[codex:1046197] pragma solidity 0.8.20;
[codex:1046197]
[codex:1046197] // UniSwap
[codex:1046197] import "@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol";
[codex:1046197] import "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol";
[codex:1046197]
[codex:1046197] // OpenZeppelins
[codex:1046197] import "@openzeppelin/contracts/access/Ownable2Step.sol";
[codex:1046197] import "@openzeppelin/contracts/utils/math/Math.sol";
[codex:1046197] import "@openzeppelin/contracts/utils/Context.sol";
[codex:1046197] import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
[codex:1046197]
[codex:1046197] // Library
[codex:1046197] import "./lib/Constants.sol";
[codex:1046197] import "./lib/interfaces/IWETH.sol";
[codex:1046197] import "./lib/uniswap/PoolAddress.sol";
[codex:1046197] import "./lib/uniswap/Oracle.sol";
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Continuing audit bundle review**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc "sed -n '4832,5115p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-t2vdkoqo succeeded in 5ms:
[codex:1046197] FILE: contracts/contracts/lib/Constants.sol
[codex:1046197] ================================================================================
[codex:1046197] // SPDX-License-Identifier: UNLICENSED
[codex:1046197] pragma solidity 0.8.20;
[codex:1046197]
[codex:1046197] /* Common */
[codex:1046197] uint256 constant BASIS = 10_000;
[codex:1046197] uint256 constant SECONDS_IN_DAY = 86400;
[codex:1046197] uint256 constant SCALING_FACTOR_1e3 = 1e3;
[codex:1046197] uint256 constant SCALING_FACTOR_1e6 = 1e6;
[codex:1046197] uint256 constant SCALING_FACTOR_1e7 = 1e7;
[codex:1046197] uint256 constant SCALING_FACTOR_1e11 = 1e11;
[codex:1046197] uint256 constant SCALING_FACTOR_1e18 = 1e18;
[codex:1046197]
[codex:1046197] /* TitanX staking */
[codex:1046197] uint256 constant TITANX_MAX_STAKE_PER_WALLET = 1000;
[codex:1046197] uint256 constant TITANX_MIN_STAKE_LENGTH = 28;
[codex:1046197] uint256 constant TITANX_MAX_STAKE_LENGTH = 3500;
[codex:1046197]
[codex:1046197] /* TitanX Stake Longer Pays Better bonus */
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Continuing from line 5116**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc "sed -n '5116,5904p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-t2vdkoqo succeeded in 6ms:
[codex:1046197] FILE: contracts/contracts/lib/Types.sol
[codex:1046197] ================================================================================
[codex:1046197] // SPDX-License-Identifier: UNLICENSED
[codex:1046197] pragma solidity 0.8.20;
[codex:1046197]
[codex:1046197] /**
[codex:1046197] * A simple enum to indicate of the initial liquidity for DragonX / TitanX pool has been minted
[codex:1046197] */
[codex:1046197] enum InitialLiquidityMinted {
[codex:1046197] No,
[codex:1046197] Yes
[codex:1046197] }
[codex:1046197]
[codex:1046197] ================================================================================
[codex:1046197] FILE: contracts/contracts/lib/interfaces/INonfungiblePositionManager.sol
[codex:1046197] ================================================================================
[codex:1046197] // SPDX-License-Identifier: UNLICENSED
[codex:1046197] pragma solidity 0.8.20;
[codex:1046197]
[codex:1046197] /**
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Needing more code context**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc "sed -n '5905,6600p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-t2vdkoqo succeeded in 6ms:
[codex:1046197] FILE: contracts/contracts/mocks/BuildOnDragonX.sol
[codex:1046197] ================================================================================
[codex:1046197] // SPDX-License-Identifier: UNLICENSED
[codex:1046197] pragma solidity 0.8.20;
[codex:1046197]
[codex:1046197] // Library
[codex:1046197] import "../DragonX.sol";
[codex:1046197] import "../lib/interfaces/ITitanX.sol";
[codex:1046197] import "../lib/Constants.sol";
[codex:1046197]
[codex:1046197] // Simulating a protocol which contributes to the TitanX vault
[codex:1046197] contract BuildOnDragonX {
[codex:1046197] function sendToDragonVault(address dragonAddress) external {
[codex:1046197] DragonX dragonX = DragonX(payable(dragonAddress));
[codex:1046197] ITitanX titanX = ITitanX(TITANX_ADDRESS);
[codex:1046197]
[codex:1046197] // Transfer TitanX hold by this contract to DragonX
[codex:1046197] titanX.transfer(dragonAddress, titanX.balanceOf(address(this)));
[codex:1046197]
[codex:1046197] // Update the DragonX vault
[codex:1046197]
[codex:1046197]
[codex:1046197]
[codex:1046197]
[codex:1046197]
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Summarizing security audit findings**
[codex:1046197]
[codex:1046197] I've finished reviewing the entire contract bundle, focusing on common vulnerability types like reentrancy, access control, upgradeability, oracle manipulation, and accounting issues. I analyzed key contracts such as DragonX, DragonBuyAndBurn, TitanBuy, and DragonStake, weighing potential exploit scenarios and permission checks in detail, including subtle interactions with external calls and token transfers. Several possible risks emerged, like fallback reentrancy, oracle slippage fallback to spot price, and unrestricted calls on some functions, but overall many protections and design choices mitigate severe exploits. I'm carefully balancing what might be intended behaviors versus potential attack vectors.
[codex:1046197] thinking
[codex:1046197] **Evaluating reentrancy and economic risks**
[codex:1046197]
[codex:1046197] I’m exploring how reentrancy could affect functions beyond claim, like stake or mint, especially via fallback calls from external addresses controlled by the owner. While claim uses nonReentrant, other functions don’t, raising possible state consistency risks during reentrant calls. I’m also examining oracle manipulation risks from TWAP fallback to spot prices in newly created pools, which could enable sandwich attacks on public buy functions. Additionally, I’m considering potential DoS via unrestricted creation of new stake instances and economic implications of permissionless staking and external calls lacking reentrancy guards. Overall, I’m weighing if these represent exploitable vulnerabilities or intended contract behavior.
[codex:1046197] thinking
[codex:1046197] **Reviewing external calls and access controls**
[codex:1046197]
[codex:1046197] I’m analyzing potential reentrancy in external calls like TitanX.endStake and incentive fee sends, confirming use of safe token transfers and nonReentrant guards. I’m also checking access controls on key functions and ownership assignments from Create2 deploy, along with risks from owner-upgradable addresses and tx.origin usage. Most patterns seem safe or intentionally designed, with low-risk issues like reliance on tx.origin and possible oracle manipulation still noted but not exploited. Overall, I’m concluding no critical vulnerabilities but staying thorough on state updates and call order in complex flows.
[codex:1046197] thinking
[codex:1046197] **Evaluating token allowance and staking controls**
[codex:1046197]
[codex:1046197] I’m reviewing token allowance patterns, owner-only functions, and staking flow permissions, focusing on minting, burning, and stake instance deployment. I see potential economic risks from open staking calls and some DoS risks if stake instances accumulate too much, but no direct exploit. I’m also checking oracle slippage logic and external ETH sends to ensure state consistency and prevent reentrancy issues, concluding design choices mostly limit attack surface despite minor anti-patterns.
[codex:1046197] thinking
[codex:1046197] **Highlighting oracle manipulation risks and import oversight**
[codex:1046197]
[codex:1046197] I’m outlining how reliance on TWAP from the same pools used for trading creates a manipulation risk—especially early on when observation history is short—since fallback to spot price allows MEV-style attacks. I also noticed missing SafeERC20 imports in some contracts even though they use its functions, which might cause compile issues but isn’t a direct security flaw. Overall, I’m flagging a medium-risk oracle vulnerability alongside these observations.
[codex:1046197] thinking
[codex:1046197] **Summarizing MEV exploitation risk and planning annotation**
[codex:1046197]
[codex:1046197] I’m confirming the medium-severity oracle manipulation risk where MEV actors can exploit short TWAP windows in permissionless buy functions to drain WETH from the contract. I’m considering combining findings for both buy contracts in one report and looking into line numbers for precise file annotations to provide helpful evidence.
[codex:1046197] exec
[codex:1046197] /bin/bash -lc 'rg -n "buyTitanX|calculateMinimumTitanAmount|getTitanQuoteForEth" contracts/contracts/TitanBuy.sol' in /tmp/codex-multi-t2vdkoqo succeeded in 8ms:
[codex:1046197] 196: function buyTitanX() external nonReentrant returns (uint256 amountOut) {
[codex:1046197] 237: uint256 amountOutMinimum = calculateMinimumTitanAmount(amountIn);
[codex:1046197] 285: * @dev Calculates the incentive fee for executing the buyTitanX function.
[codex:1046197] 289: * @notice Used to determine the incentive fee for running the buyTitanX function.
[codex:1046197] 371: function getTitanQuoteForEth(
[codex:1046197] 424: function calculateMinimumTitanAmount(
[codex:1046197] 428: uint256 expectedTitanAmount = getTitanQuoteForEth(amountIn);
[codex:1046197] 438: * @dev Determines the WETH amount available for the next call to buyTitanX.
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Identifying DragonBuyAndBurn methods**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc 'rg -n "buyAndBurnDragonX|calculateMinimumDragonAmount|getTitanQuoteForEth|getDragonQuoteForTitan" contracts/contracts/DragonBuyAndBurn.sol' in /tmp/codex-multi-t2vdkoqo succeeded in 6ms:
[codex:1046197] 246: function buyAndBurnDragonX()
[codex:1046197] 299: uint256 amountOutMinimum = calculateMinimumDragonAmount(amountIn);
[codex:1046197] 449: * @dev Calculates the incentive fee for executing the buyAndBurnDragonX function.
[codex:1046197] 453: * @notice Used to determine the incentive fee for running the buyAndBurnDragonX function.
[codex:1046197] 544: function getTitanQuoteForEth(
[codex:1046197] 601: function getDragonQuoteForTitan(
[codex:1046197] 648: * @dev Determines the WETH amount available for the next call to buyAndBurnDragonX.
[codex:1046197] 681: function calculateMinimumDragonAmount(
[codex:1046197] 688: uint256 expectedTitanAmount = getTitanQuoteForEth(amountIn);
[codex:1046197] 695: uint256 expectedDragonAmount = getDragonQuoteForTitan(
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Documenting oracle fallback logic**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc "nl -ba contracts/contracts/DragonBuyAndBurn.sol | sed -n '520,720p'" in /tmp/codex-multi-t2vdkoqo succeeded in 5ms:
[codex:1046197] 520 */
[codex:1046197] 521 function setDragonPriceTwa(uint32 mins) external onlyOwner {
[codex:1046197] 522 require(mins >= 5 && mins <= 60, "5m-1h only");
[codex:1046197] 523 _dragonPriceTwa = mins;
[codex:1046197] 524 }
[codex:1046197] 525
[codex:1046197] 526 // -----------------------------------------
[codex:1046197] 527 // Public functions
[codex:1046197] 528 // -----------------------------------------
[codex:1046197] 529 /**
[codex:1046197] 530 * Get a quote for TitanX for a given amount of ETH
[codex:1046197] 531 * @notice Uses Time-Weighted Average Price (TWAP) and falls back to the pool price if TWAP is not available.
[codex:1046197] 532 * @param baseAmount The amount of ETH for which the TitanX quote is needed.
[codex:1046197] 533 * @return quote The amount of TitanX.
[codex:1046197] 534 * @dev This function computes the TWAP of TitanX in ETH using the Uniswap V3 pool for TitanX/WETH and the Oracle Library.
[codex:1046197] 535 * Steps to compute the TWAP:
[codex:1046197] 536 * 1. Compute the pool address with the PoolAddress library using the Uniswap factory address,
[codex:1046197] 537 * the addresses of WETH9 and TitanX, and the fee tier.
[codex:1046197] 538 * 2. Determine the period for the TWAP calculation, limited by the oldest available observation from the Oracle.
[codex:1046197] 539 * 3. If `secondsAgo` is zero, use the current price from the pool; otherwise, consult the Oracle Library
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Adding TitanBuy snippet**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc "nl -ba contracts/contracts/TitanBuy.sol | sed -n '340,460p'" in /tmp/codex-multi-t2vdkoqo succeeded in 6ms:
[codex:1046197] 340 require(secs >= 60 && secs <= 43200, "1m-12h only");
[codex:1046197] 341 interval = secs;
[codex:1046197] 342 }
[codex:1046197] 343
[codex:1046197] 344 /**
[codex:1046197] 345 * @notice set the TWA value used when calculting the TitanX price. Only callable by owner address.
[codex:1046197] 346 * @param mins TWA in minutes
[codex:1046197] 347 */
[codex:1046197] 348 function setTitanPriceTwa(uint32 mins) external onlyOwner {
[codex:1046197] 349 require(mins >= 5 && mins <= 60, "5m-1h only");
[codex:1046197] 350 _titanPriceTwa = mins;
[codex:1046197] 351 }
[codex:1046197] 352
[codex:1046197] 353 // -----------------------------------------
[codex:1046197] 354 // Public functions
[codex:1046197] 355 // -----------------------------------------
[codex:1046197] 356 /**
[codex:1046197] 357 * Get a quote for TitanX for a given amount of ETH
[codex:1046197] 358 * @notice Uses Time-Weighted Average Price (TWAP) and falls back to the pool price if TWAP is not available.
[codex:1046197] 359 * @param baseAmount The amount of ETH for which the TitanX quote is needed.
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Locating calculateMinimum usage in buyTitanX**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc "nl -ba contracts/contracts/TitanBuy.sol | sed -n '170,260p'" in /tmp/codex-multi-t2vdkoqo succeeded in 6ms:
[codex:1046197] 170
[codex:1046197] 171 // -----------------------------------------
[codex:1046197] 172 // External functions
[codex:1046197] 173 // -----------------------------------------
[codex:1046197] 174 /**
[codex:1046197] 175 * @notice Executes a swap of WETH for TitanX tokens, applies incentive fees, and updates relevant contracts and state.
[codex:1046197] 176 * @dev This function:
[codex:1046197] 177 * 1. Checks for valid DragonX address.
[codex:1046197] 178 * 2. Ensures the caller is not a contract to prevent bot interactions.
[codex:1046197] 179 * 3. Enforces a cooldown period between successive calls.
[codex:1046197] 180 * 4. Calculates the WETH amount to be used for the swap based on the contract's WETH balance and cap per swap.
[codex:1046197] 181 * 5. Deducts an incentive fee from the WETH amount.
[codex:1046197] 182 * 6. Approves the swap router to spend WETH.
[codex:1046197] 183 * 7. Calculates the minimum amount of TitanX to be received in the swap, accounting for slippage.
[codex:1046197] 184 * 8. Performs the swap via the swap router.
[codex:1046197] 185 * 9. Transfers the bought TitanX tokens to the DragonX contract.
[codex:1046197] 186 * 10. Updates the DragonX vault.
[codex:1046197] 187 * 11. Updates state variables tracking WETH used and TitanX bought.
[codex:1046197] 188 * 12. Sends the incentive fee to the message sender.
[codex:1046197] 189 * 13. Emits a `TitanBought` event.
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Updating buyAndBurnDragonX lines**
[codex:1046197] exec
[codex:1046197] /bin/bash -lc "nl -ba contracts/contracts/DragonBuyAndBurn.sol | sed -n '230,340p'" in /tmp/codex-multi-t2vdkoqo succeeded in 5ms:
[codex:1046197] 230 // External functions
[codex:1046197] 231 // -----------------------------------------
[codex:1046197] 232 /**
[codex:1046197] 233 * Buy and Burn DragonX Tokens
[codex:1046197] 234 * @notice Buys DragonX tokens using WETH and then burns them to manage the token's supply and value.
[codex:1046197] 235 * @dev This function swaps WETH for DragonX tokens using a swap router, then burns the DragonX tokens.
[codex:1046197] 236 * It includes security checks to prevent abuse (e.g., reentrancy, bot interactions, cooldown periods).
[codex:1046197] 237 * The function also handles an incentive fee for the caller.
[codex:1046197] 238 * @return amountOut The amount of DragonX tokens bought and burned.
[codex:1046197] 239 * @custom:revert InvalidDragonAddress if the DragonX address is not set.
[codex:1046197] 240 * @custom:revert InvalidCaller if the function is called by a smart contract (to prevent bot interactions).
[codex:1046197] 241 * @custom:revert CooldownPeriodActive if the function is called again before the cooldown period has elapsed.
[codex:1046197] 242 * @custom:revert NoWethToBuyAndBurnDragon if there is no WETH available for the transaction after deducting the incentive fee.
[codex:1046197] 243 *
[codex:1046197] 244 * Emits a BoughtAndBurned event after successfully buying and burning DragonX tokens.
[codex:1046197] 245 */
[codex:1046197] 246 function buyAndBurnDragonX()
[codex:1046197] 247 external
[codex:1046197] 248 nonReentrant
[codex:1046197] 249 returns (uint256 amountOut)
[codex:1046197]
[codex:1046197] thinking
[codex:1046197] **Summarizing vulnerability findings**
[codex:1046197] codex
[codex:1046197] {"no_findings":false,"summary":"Found 1 issue: swap minimums can fall back to spot/short TWAP, enabling oracle manipulation against the public buy functions.","findings":[{"severity":"medium","category":"oracle","title":"TWAP can collapse to spot price, enabling price manipulation around buy/burn swaps","exploit_scenario":"An attacker can manipulate the WETH/TitanX and/or DragonX/TitanX Uniswap V3 pools (especially when observation history is short) so `secondsAgo` becomes 0 or very small, causing the contracts to use spot/short-TWAP prices for `amountOutMinimum`. The attacker then calls `buyTitanX()` or `buyAndBurnDragonX()` in the same block, allowing the swap to execute at an unfavorable price and extracting value via a back-run, draining WETH from the contracts over time.","recommendation":"Require a minimum TWAP window and revert if `oldestObservation` is below the configured window instead of falling back to spot price. Consider enforcing a longer minimum TWAP, delaying public buy calls until sufficient observations exist, or using an independent oracle (e.g., Chainlink) for min-out calculations.","evidence":"Both buy functions derive `amountOutMinimum` from `getTitanQuoteForEth`/`getDragonQuoteForTitan`, which cap the TWAP window by `oldestObservation` and fall back to `pool.slot0()` (spot price) when `secondsAgo == 0`, making the min-out manipulable when the pool has limited observations.","locations":["contracts/contracts/TitanBuy.sol:196","contracts/contracts/TitanBuy.sol:371","contracts/contracts/TitanBuy.sol:389","contracts/contracts/DragonBuyAndBurn.sol:246","contracts/contracts/DragonBuyAndBurn.sol:544","contracts/contracts/DragonBuyAndBurn.sol:623"]}]}
[codex:1046197] tokens used
[codex:1046197] 81,617
[codex:1046197] {"no_findings":false,"summary":"Found 1 issue: swap minimums can fall back to spot/short TWAP, enabling oracle manipulation against the public buy functions.","findings":[{"severity":"medium","category":"oracle","title":"TWAP can collapse to spot price, enabling price manipulation around buy/burn swaps","exploit_scenario":"An attacker can manipulate the WETH/TitanX and/or DragonX/TitanX Uniswap V3 pools (especially when observation history is short) so `secondsAgo` becomes 0 or very small, causing the contracts to use spot/short-TWAP prices for `amountOutMinimum`. The attacker then calls `buyTitanX()` or `buyAndBurnDragonX()` in the same block, allowing the swap to execute at an unfavorable price and extracting value via a back-run, draining WETH from the contracts over time.","recommendation":"Require a minimum TWAP window and revert if `oldestObservation` is below the configured window instead of falling back to spot price. Consider enforcing a longer minimum TWAP, delaying public buy calls until sufficient observations exist, or using an independent oracle (e.g., Chainlink) for min-out calculations.","evidence":"Both buy functions derive `amountOutMinimum` from `getTitanQuoteForEth`/`getDragonQuoteForTitan`, which cap the TWAP window by `oldestObservation` and fall back to `pool.slot0()` (spot price) when `secondsAgo == 0`, making the min-out manipulable when the pool has limited observations.","locations":["contracts/contracts/TitanBuy.sol:196","contracts/contracts/TitanBuy.sol:371","contracts/contracts/TitanBuy.sol:389","contracts/contracts/DragonBuyAndBurn.sol:246","contracts/contracts/DragonBuyAndBurn.sol:544","contracts/contracts/DragonBuyAndBurn.sol:623"]}]}
{
"codex": {
"ran_at": "2025-12-28T15:29:44.645497+00:00",
"returncode": 0
},
"summary": "Found 1 issue: swap minimums can fall back to spot/short TWAP, enabling oracle manipulation against the public buy functions.",
"raw_final": {
"summary": "Found 1 issue: swap minimums can fall back to spot/short TWAP, enabling oracle manipulation against the public buy functions.",
"findings": [
{
"title": "TWAP can collapse to spot price, enabling price manipulation around buy/burn swaps",
"category": "oracle",
"evidence": "Both buy functions derive `amountOutMinimum` from `getTitanQuoteForEth`/`getDragonQuoteForTitan`, which cap the TWAP window by `oldestObservation` and fall back to `pool.slot0()` (spot price) when `secondsAgo == 0`, making the min-out manipulable when the pool has limited observations.",
"severity": "medium",
"locations": [
"contracts/contracts/TitanBuy.sol:196",
"contracts/contracts/TitanBuy.sol:371",
"contracts/contracts/TitanBuy.sol:389",
"contracts/contracts/DragonBuyAndBurn.sol:246",
"contracts/contracts/DragonBuyAndBurn.sol:544",
"contracts/contracts/DragonBuyAndBurn.sol:623"
],
"recommendation": "Require a minimum TWAP window and revert if `oldestObservation` is below the configured window instead of falling back to spot price. Consider enforcing a longer minimum TWAP, delaying public buy calls until sufficient observations exist, or using an independent oracle (e.g., Chainlink) for min-out calculations.",
"exploit_scenario": "An attacker can manipulate the WETH/TitanX and/or DragonX/TitanX Uniswap V3 pools (especially when observation history is short) so `secondsAgo` becomes 0 or very small, causing the contracts to use spot/short-TWAP prices for `amountOutMinimum`. The attacker then calls `buyTitanX()` or `buyAndBurnDragonX()` in the same block, allowing the swap to execute at an unfavorable price and extracting value via a back-run, draining WETH from the contracts over time."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x0184 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x8c14a5d6 00000019: GT 0000001a: PUSH2 0x00d6 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xbc7576d3 00000024: GT 00000025: PUSH2 0x007f 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xe30c3978 0000002f: GT 00000030: PUSH2 0x0059 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xe30c3978 0000003a: EQ 0000003b: PUSH2 0x04aa 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xf0fa55a9 00000045: EQ 00000046: PUSH2 0x04c8 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf2fde38b 00000050: EQ 00000051: PUSH2 0x04e8 00000054: JUMPI 00000055: PUSH2 0x020f 00000058: JUMP 00000059: JUMPDEST 0000005a: DUP1 0000005b: PUSH4 0xbc7576d3 00000060: EQ 00000061: PUSH2 0x045f 00000064: JUMPI 00000065: DUP1 00000066: PUSH4 0xc9ae5e0a 0000006b: EQ 0000006c: PUSH2 0x047f 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0xcce0d6fb 00000076: EQ 00000077: PUSH2 0x0494 0000007a: JUMPI 0000007b: PUSH2 0x020f 0000007e: JUMP 0000007f: JUMPDEST 00000080: DUP1 00000081: PUSH4 0xa2b6eef0 00000086: GT 00000087: PUSH2 0x00b0 0000008a: JUMPI 0000008b: DUP1 0000008c: PUSH4 0xa2b6eef0 00000091: EQ 00000092: PUSH2 0x040a 00000095: JUMPI 00000096: DUP1 00000097: PUSH4 0xaf97d3bd 0000009c: EQ 0000009d: PUSH2 0x041f 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0xb35ec4fa 000000a7: EQ 000000a8: PUSH2 0x043f 000000ab: JUMPI 000000ac: PUSH2 0x020f 000000af: JUMP 000000b0: JUMPDEST 000000b1: DUP1 000000b2: PUSH4 0x8c14a5d6 000000b7: EQ 000000b8: PUSH2 0x03a2 000000bb: JUMPI 000000bc: DUP1 000000bd: PUSH4 0x8da5cb5b 000000c2: EQ 000000c3: PUSH2 0x03c2 000000c6: JUMPI 000000c7: DUP1 000000c8: PUSH4 0x947a36fb 000000cd: EQ 000000ce: PUSH2 0x03f4 000000d1: JUMPI 000000d2: PUSH2 0x020f 000000d5: JUMP 000000d6: JUMPDEST 000000d7: DUP1 000000d8: PUSH4 0x49f7e6c6 000000dd: GT 000000de: PUSH2 0x0138 000000e1: JUMPI 000000e2: DUP1 000000e3: PUSH4 0x715018a6 000000e8: GT 000000e9: PUSH2 0x0112 000000ec: JUMPI 000000ed: DUP1 000000ee: PUSH4 0x715018a6 000000f3: EQ 000000f4: PUSH2 0x0362 000000f7: JUMPI 000000f8: DUP1 000000f9: PUSH4 0x79ba5097 000000fe: EQ 000000ff: PUSH2 0x0377 00000102: JUMPI 00000103: DUP1 00000104: PUSH4 0x81210531 00000109: EQ 0000010a: PUSH2 0x038c 0000010d: JUMPI 0000010e: PUSH2 0x020f 00000111: JUMP 00000112: JUMPDEST 00000113: DUP1 00000114: PUSH4 0x49f7e6c6 00000119: EQ 0000011a: PUSH2 0x0317 0000011d: JUMPI 0000011e: DUP1 0000011f: PUSH4 0x612b91cc 00000124: EQ 00000125: PUSH2 0x032d 00000128: JUMPI 00000129: DUP1 0000012a: PUSH4 0x658a3b3c 0000012f: EQ 00000130: PUSH2 0x0342 00000133: JUMPI 00000134: PUSH2 0x020f 00000137: JUMP 00000138: JUMPDEST 00000139: DUP1 0000013a: PUSH4 0x217d9332 0000013f: GT 00000140: PUSH2 0x0169 00000143: JUMPI 00000144: DUP1 00000145: PUSH4 0x217d9332 0000014a: EQ 0000014b: PUSH2 0x02cb 0000014e: JUMPI 0000014f: DUP1 00000150: PUSH4 0x2e3d4400 00000155: EQ 00000156: PUSH2 0x02e1 00000159: JUMPI 0000015a: DUP1 0000015b: PUSH4 0x3e032a3b 00000160: EQ 00000161: PUSH2 0x0301 00000164: JUMPI 00000165: PUSH2 0x020f 00000168: JUMP 00000169: JUMPDEST 0000016a: DUP1 0000016b: PUSH4 0x098dada5 00000170: EQ 00000171: PUSH2 0x0283 00000174: JUMPI 00000175: DUP1 00000176: PUSH4 0x187cc30e 0000017b: EQ 0000017c: PUSH2 0x02a3 0000017f: JUMPI 00000180: PUSH2 0x020f 00000183: JUMP 00000184: JUMPDEST 00000185: CALLDATASIZE 00000186: PUSH2 0x020f 00000189: JUMPI 0000018a: CALLER 0000018b: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000001a0: EQ 000001a1: PUSH2 0x020d 000001a4: JUMPI 000001a5: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000001ba: PUSH1 0x01 000001bc: PUSH1 0x01 000001be: PUSH1 0xa0 000001c0: SHL 000001c1: SUB 000001c2: AND 000001c3: PUSH4 0xd0e30db0 000001c8: CALLVALUE 000001c9: PUSH1 0x40 000001cb: MLOAD 000001cc: DUP3 000001cd: PUSH4 0xffffffff 000001d2: AND 000001d3: PUSH1 0xe0 000001d5: SHL 000001d6: DUP2 000001d7: MSTORE 000001d8: PUSH1 0x04 000001da: ADD 000001db: PUSH1 0x00 000001dd: PUSH1 0x40 000001df: MLOAD 000001e0: DUP1 000001e1: DUP4 000001e2: SUB 000001e3: DUP2 000001e4: DUP6 000001e5: DUP9 000001e6: DUP1 000001e7: EXTCODESIZE 000001e8: ISZERO 000001e9: DUP1 000001ea: ISZERO 000001eb: PUSH2 0x01f3 000001ee: JUMPI 000001ef: PUSH1 0x00 000001f1: DUP1 000001f2: REVERT 000001f3: JUMPDEST 000001f4: POP 000001f5: GAS 000001f6: CALL 000001f7: ISZERO 000001f8: DUP1 000001f9: ISZERO 000001fa: PUSH2 0x0207 000001fd: JUMPI 000001fe: RETURNDATASIZE 000001ff: PUSH1 0x00 00000201: DUP1 00000202: RETURNDATACOPY 00000203: RETURNDATASIZE 00000204: PUSH1 0x00 00000206: REVERT 00000207: JUMPDEST 00000208: POP 00000209: POP 0000020a: POP 0000020b: POP 0000020c: POP 0000020d: JUMPDEST 0000020e: STOP 0000020f: JUMPDEST 00000210: CALLVALUE 00000211: DUP1 00000212: ISZERO 00000213: PUSH2 0x021b 00000216: JUMPI 00000217: PUSH1 0x00 00000219: DUP1 0000021a: REVERT 0000021b: JUMPDEST 0000021c: POP 0000021d: PUSH1 0x40 0000021f: MLOAD 00000220: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000241: DUP2 00000242: MSTORE 00000243: PUSH1 0x20 00000245: PUSH1 0x04 00000247: DUP3 00000248: ADD 00000249: MSTORE 0000024a: PUSH1 0x12 0000024c: PUSH1 0x24 0000024e: DUP3 0000024f: ADD 00000250: MSTORE 00000251: PUSH32 0x46616c6c6261636b207472696767657265640000000000000000000000000000 00000272: PUSH1 0x44 00000274: DUP3 00000275: ADD 00000276: MSTORE 00000277: PUSH1 0x64 00000279: ADD 0000027a: JUMPDEST 0000027b: PUSH1 0x40 0000027d: MLOAD 0000027e: DUP1 0000027f: SWAP2 00000280: SUB 00000281: SWAP1 00000282: REVERT 00000283: JUMPDEST 00000284: CALLVALUE 00000285: DUP1 00000286: ISZERO 00000287: PUSH2 0x028f 0000028a: JUMPI 0000028b: PUSH1 0x00 0000028d: DUP1 0000028e: REVERT 0000028f: JUMPDEST 00000290: POP 00000291: PUSH2 0x020d 00000294: PUSH2 0x029e 00000297: CALLDATASIZE 00000298: PUSH1 0x04 0000029a: PUSH2 0x2373 0000029d: JUMP 0000029e: JUMPDEST 0000029f: PUSH2 0x0508 000002a2: JUMP 000002a3: JUMPDEST 000002a4: CALLVALUE 000002a5: DUP1 000002a6: ISZERO 000002a7: PUSH2 0x02af 000002aa: JUMPI 000002ab: PUSH1 0x00 000002ad: DUP1 000002ae: REVERT 000002af: JUMPDEST 000002b0: POP 000002b1: PUSH2 0x02b8 000002b4: PUSH2 0x0515 000002b7: JUMP 000002b8: JUMPDEST 000002b9: PUSH1 0x40 000002bb: MLOAD 000002bc: SWAP1 000002bd: DUP2 000002be: MSTORE 000002bf: PUSH1 0x20 000002c1: ADD 000002c2: JUMPDEST 000002c3: PUSH1 0x40 000002c5: MLOAD 000002c6: DUP1 000002c7: SWAP2 000002c8: SUB 000002c9: SWAP1 000002ca: RETURN 000002cb: JUMPDEST 000002cc: CALLVALUE 000002cd: DUP1 000002ce: ISZERO 000002cf: PUSH2 0x02d7 000002d2: JUMPI 000002d3: PUSH1 0x00 000002d5: DUP1 000002d6: REVERT 000002d7: JUMPDEST 000002d8: POP 000002d9: PUSH2 0x02b8 000002dc: PUSH1 0x06 000002de: SLOAD 000002df: DUP2 000002e0: JUMP 000002e1: JUMPDEST 000002e2: CALLVALUE 000002e3: DUP1 000002e4: ISZERO 000002e5: PUSH2 0x02ed 000002e8: JUMPI 000002e9: PUSH1 0x00 000002eb: DUP1 000002ec: REVERT 000002ed: JUMPDEST 000002ee: POP 000002ef: PUSH2 0x02b8 000002f2: PUSH2 0x02fc 000002f5: CALLDATASIZE 000002f6: PUSH1 0x04 000002f8: PUSH2 0x2373 000002fb: JUMP 000002fc: JUMPDEST 000002fd: PUSH2 0x09de 00000300: JUMP 00000301: JUMPDEST 00000302: CALLVALUE 00000303: DUP1 00000304: ISZERO 00000305: PUSH2 0x030d 00000308: JUMPI 00000309: PUSH1 0x00 0000030b: DUP1 0000030c: REVERT 0000030d: JUMPDEST 0000030e: POP 0000030f: PUSH2 0x02b8 00000312: PUSH1 0x04 00000314: SLOAD 00000315: DUP2 00000316: JUMP 00000317: JUMPDEST 00000318: CALLVALUE 00000319: DUP1 0000031a: ISZERO 0000031b: PUSH2 0x0323 0000031e: JUMPI 0000031f: PUSH1 0x00 00000321: DUP1 00000322: REVERT 00000323: JUMPDEST 00000324: POP 00000325: PUSH2 0x02b8 00000328: PUSH1 0x08 0000032a: SLOAD 0000032b: DUP2 0000032c: JUMP 0000032d: JUMPDEST 0000032e: CALLVALUE 0000032f: DUP1 00000330: ISZERO 00000331: PUSH2 0x0339 00000334: JUMPI 00000335: PUSH1 0x00 00000337: DUP1 00000338: REVERT 00000339: JUMPDEST 0000033a: POP 0000033b: PUSH2 0x02b8 0000033e: PUSH2 0x0b55 00000341: JUMP 00000342: JUMPDEST 00000343: CALLVALUE 00000344: DUP1 00000345: ISZERO 00000346: PUSH2 0x034e 00000349: JUMPI 0000034a: PUSH1 0x00 0000034c: DUP1 0000034d: REVERT 0000034e: JUMPDEST 0000034f: POP 00000350: PUSH2 0x020d 00000353: PUSH2 0x035d 00000356: CALLDATASIZE 00000357: PUSH1 0x04 00000359: PUSH2 0x23a1 0000035c: JUMP 0000035d: JUMPDEST 0000035e: PUSH2 0x0be9 00000361: JUMP 00000362: JUMPDEST 00000363: CALLVALUE 00000364: DUP1 00000365: ISZERO 00000366: PUSH2 0x036e 00000369: JUMPI 0000036a: PUSH1 0x00 0000036c: DUP1 0000036d: REVERT 0000036e: JUMPDEST 0000036f: POP 00000370: PUSH2 0x020d 00000373: PUSH2 0x0c6b 00000376: JUMP 00000377: JUMPDEST 00000378: CALLVALUE 00000379: DUP1 0000037a: ISZERO 0000037b: PUSH2 0x0383 0000037e: JUMPI 0000037f: PUSH1 0x00 00000381: DUP1 00000382: REVERT 00000383: JUMPDEST 00000384: POP 00000385: PUSH2 0x020d 00000388: PUSH2 0x0c7f 0000038b: JUMP 0000038c: JUMPDEST 0000038d: CALLVALUE 0000038e: DUP1 0000038f: ISZERO 00000390: PUSH2 0x0398 00000393: JUMPI 00000394: PUSH1 0x00 00000396: DUP1 00000397: REVERT 00000398: JUMPDEST 00000399: POP 0000039a: PUSH2 0x02b8 0000039d: PUSH1 0x07 0000039f: SLOAD 000003a0: DUP2 000003a1: JUMP 000003a2: JUMPDEST 000003a3: CALLVALUE 000003a4: DUP1 000003a5: ISZERO 000003a6: PUSH2 0x03ae 000003a9: JUMPI 000003aa: PUSH1 0x00 000003ac: DUP1 000003ad: REVERT 000003ae: JUMPDEST 000003af: POP 000003b0: PUSH2 0x020d 000003b3: PUSH2 0x03bd 000003b6: CALLDATASIZE 000003b7: PUSH1 0x04 000003b9: PUSH2 0x23d0 000003bc: JUMP 000003bd: JUMPDEST 000003be: PUSH2 0x0cdc 000003c1: JUMP 000003c2: JUMPDEST 000003c3: CALLVALUE 000003c4: DUP1 000003c5: ISZERO 000003c6: PUSH2 0x03ce 000003c9: JUMPI 000003ca: PUSH1 0x00 000003cc: DUP1 000003cd: REVERT 000003ce: JUMPDEST 000003cf: POP 000003d0: PUSH1 0x00 000003d2: SLOAD 000003d3: PUSH1 0x01 000003d5: PUSH1 0x01 000003d7: PUSH1 0xa0 000003d9: SHL 000003da: SUB 000003db: AND 000003dc: JUMPDEST 000003dd: PUSH1 0x40 000003df: MLOAD 000003e0: PUSH1 0x01 000003e2: PUSH1 0x01 000003e4: PUSH1 0xa0 000003e6: SHL 000003e7: SUB 000003e8: SWAP1 000003e9: SWAP2 000003ea: AND 000003eb: DUP2 000003ec: MSTORE 000003ed: PUSH1 0x20 000003ef: ADD 000003f0: PUSH2 0x02c2 000003f3: JUMP 000003f4: JUMPDEST 000003f5: CALLVALUE 000003f6: DUP1 000003f7: ISZERO 000003f8: PUSH2 0x0400 000003fb: JUMPI 000003fc: PUSH1 0x00 000003fe: DUP1 000003ff: REVERT 00000400: JUMPDEST 00000401: POP 00000402: PUSH2 0x02b8 00000405: PUSH1 0x09 00000407: SLOAD 00000408: DUP2 00000409: JUMP 0000040a: JUMPDEST 0000040b: CALLVALUE 0000040c: DUP1 0000040d: ISZERO 0000040e: PUSH2 0x0416 00000411: JUMPI 00000412: PUSH1 0x00 00000414: DUP1 00000415: REVERT 00000416: JUMPDEST 00000417: POP 00000418: PUSH2 0x02b8 0000041b: PUSH2 0x0d9f 0000041e: JUMP 0000041f: JUMPDEST 00000420: CALLVALUE 00000421: DUP1 00000422: ISZERO 00000423: PUSH2 0x042b 00000426: JUMPI 00000427: PUSH1 0x00 00000429: DUP1 0000042a: REVERT 0000042b: JUMPDEST 0000042c: POP 0000042d: PUSH2 0x02b8 00000430: PUSH2 0x043a 00000433: CALLDATASIZE 00000434: PUSH1 0x04 00000436: PUSH2 0x2373 00000439: JUMP 0000043a: JUMPDEST 0000043b: PUSH2 0x0e47 0000043e: JUMP 0000043f: JUMPDEST 00000440: CALLVALUE 00000441: DUP1 00000442: ISZERO 00000443: PUSH2 0x044b 00000446: JUMPI 00000447: PUSH1 0x00 00000449: DUP1 0000044a: REVERT 0000044b: JUMPDEST 0000044c: POP 0000044d: PUSH1 0x03 0000044f: SLOAD 00000450: PUSH2 0x03dc 00000453: SWAP1 00000454: PUSH1 0x01 00000456: PUSH1 0x01 00000458: PUSH1 0xa0 0000045a: SHL 0000045b: SUB 0000045c: AND 0000045d: DUP2 0000045e: JUMP 0000045f: JUMPDEST 00000460: CALLVALUE 00000461: DUP1 00000462: ISZERO 00000463: PUSH2 0x046b 00000466: JUMPI 00000467: PUSH1 0x00 00000469: DUP1 0000046a: REVERT 0000046b: JUMPDEST 0000046c: POP 0000046d: PUSH2 0x020d 00000470: PUSH2 0x047a 00000473: CALLDATASIZE 00000474: PUSH1 0x04 00000476: PUSH2 0x2373 00000479: JUMP 0000047a: JUMPDEST 0000047b: PUSH2 0x0e84 0000047e: JUMP 0000047f: JUMPDEST 00000480: CALLVALUE 00000481: DUP1 00000482: ISZERO 00000483: PUSH2 0x048b 00000486: JUMPI 00000487: PUSH1 0x00 00000489: DUP1 0000048a: REVERT 0000048b: JUMPDEST 0000048c: POP 0000048d: PUSH2 0x02b8 00000490: PUSH2 0x0f0a 00000493: JUMP 00000494: JUMPDEST 00000495: CALLVALUE 00000496: DUP1 00000497: ISZERO 00000498: PUSH2 0x04a0 0000049b: JUMPI 0000049c: PUSH1 0x00 0000049e: DUP1 0000049f: REVERT 000004a0: JUMPDEST 000004a1: POP 000004a2: PUSH2 0x02b8 000004a5: PUSH1 0x05 000004a7: SLOAD 000004a8: DUP2 000004a9: JUMP 000004aa: JUMPDEST 000004ab: CALLVALUE 000004ac: DUP1 000004ad: ISZERO 000004ae: PUSH2 0x04b6 000004b1: JUMPI 000004b2: PUSH1 0x00 000004b4: DUP1 000004b5: REVERT 000004b6: JUMPDEST 000004b7: POP 000004b8: PUSH1 0x01 000004ba: SLOAD 000004bb: PUSH1 0x01 000004bd: PUSH1 0x01 000004bf: PUSH1 0xa0 000004c1: SHL 000004c2: SUB 000004c3: AND 000004c4: PUSH2 0x03dc 000004c7: JUMP 000004c8: JUMPDEST 000004c9: CALLVALUE 000004ca: DUP1 000004cb: ISZERO 000004cc: PUSH2 0x04d4 000004cf: JUMPI 000004d0: PUSH1 0x00 000004d2: DUP1 000004d3: REVERT 000004d4: JUMPDEST 000004d5: POP 000004d6: PUSH2 0x020d 000004d9: PUSH2 0x04e3 000004dc: CALLDATASIZE 000004dd: PUSH1 0x04 000004df: PUSH2 0x2373 000004e2: JUMP 000004e3: JUMPDEST 000004e4: PUSH2 0x0f36 000004e7: JUMP 000004e8: JUMPDEST 000004e9: CALLVALUE 000004ea: DUP1 000004eb: ISZERO 000004ec: PUSH2 0x04f4 000004ef: JUMPI 000004f0: PUSH1 0x00 000004f2: DUP1 000004f3: REVERT 000004f4: JUMPDEST 000004f5: POP 000004f6: PUSH2 0x020d 000004f9: PUSH2 0x0503 000004fc: CALLDATASIZE 000004fd: PUSH1 0x04 000004ff: PUSH2 0x23a1 00000502: JUMP 00000503: JUMPDEST 00000504: PUSH2 0x0fbb 00000507: JUMP 00000508: JUMPDEST 00000509: PUSH2 0x0510 0000050c: PUSH2 0x1044 0000050f: JUMP 00000510: JUMPDEST 00000511: PUSH1 0x07 00000513: SSTORE 00000514: JUMP 00000515: JUMPDEST 00000516: PUSH1 0x00 00000518: PUSH2 0x051f 0000051b: PUSH2 0x108a 0000051e: JUMP 0000051f: JUMPDEST 00000520: PUSH1 0x03 00000522: SLOAD 00000523: PUSH1 0x01 00000525: PUSH1 0x01 00000527: PUSH1 0xa0 00000529: SHL 0000052a: SUB 0000052b: AND 0000052c: DUP1 0000052d: PUSH2 0x0562 00000530: JUMPI 00000531: PUSH1 0x40 00000533: MLOAD 00000534: PUSH32 0x90a3742300000000000000000000000000000000000000000000000000000000 00000555: DUP2 00000556: MSTORE 00000557: PUSH1 0x04 00000559: ADD 0000055a: PUSH1 0x40 0000055c: MLOAD 0000055d: DUP1 0000055e: SWAP2 0000055f: SUB 00000560: SWAP1 00000561: REVERT 00000562: JUMPDEST 00000563: CALLER 00000564: ORIGIN 00000565: EQ 00000566: PUSH2 0x059b 00000569: JUMPI 0000056a: PUSH1 0x40 0000056c: MLOAD 0000056d: PUSH32 0x48f5c3ed00000000000000000000000000000000000000000000000000000000 0000058e: DUP2 0000058f: MSTORE 00000590: PUSH1 0x04 00000592: ADD 00000593: PUSH1 0x40 00000595: MLOAD 00000596: DUP1 00000597: SWAP2 00000598: SUB 00000599: SWAP1 0000059a: REVERT 0000059b: JUMPDEST 0000059c: PUSH1 0x09 0000059e: SLOAD 0000059f: PUSH1 0x08 000005a1: SLOAD 000005a2: PUSH2 0x05ab 000005a5: SWAP1 000005a6: TIMESTAMP 000005a7: PUSH2 0x241c 000005aa: JUMP 000005ab: JUMPDEST 000005ac: GT 000005ad: PUSH2 0x05e2 000005b0: JUMPI 000005b1: PUSH1 0x40 000005b3: MLOAD 000005b4: PUSH32 0x998d019b00000000000000000000000000000000000000000000000000000000 000005d5: DUP2 000005d6: MSTORE 000005d7: PUSH1 0x04 000005d9: ADD 000005da: PUSH1 0x40 000005dc: MLOAD 000005dd: DUP1 000005de: SWAP2 000005df: SUB 000005e0: SWAP1 000005e1: REVERT 000005e2: JUMPDEST 000005e3: TIMESTAMP 000005e4: PUSH1 0x08 000005e6: SSTORE 000005e7: PUSH1 0x40 000005e9: MLOAD 000005ea: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 0000060b: DUP2 0000060c: MSTORE 0000060d: ADDRESS 0000060e: PUSH1 0x04 00000610: DUP3 00000611: ADD 00000612: MSTORE 00000613: PUSH20 0xe592427a0aece92de3edee1f18e0157c05861564 00000628: SWAP1 00000629: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 0000063e: SWAP1 0000063f: PUSH1 0x00 00000641: SWAP1 00000642: DUP3 00000643: SWAP1 00000644: PUSH4 0x70a08231 00000649: SWAP1 0000064a: PUSH1 0x24 0000064c: ADD 0000064d: PUSH1 0x20 0000064f: PUSH1 0x40 00000651: MLOAD 00000652: DUP1 00000653: DUP4 00000654: SUB 00000655: DUP2 00000656: DUP7 00000657: GAS 00000658: STATICCALL 00000659: ISZERO 0000065a: DUP1 0000065b: ISZERO 0000065c: PUSH2 0x0669 0000065f: JUMPI 00000660: RETURNDATASIZE 00000661: PUSH1 0x00 00000663: DUP1 00000664: RETURNDATACOPY 00000665: RETURNDATASIZE 00000666: PUSH1 0x00 00000668: REVERT 00000669: JUMPDEST 0000066a: POP 0000066b: POP 0000066c: POP 0000066d: POP 0000066e: PUSH1 0x40 00000670: MLOAD 00000671: RETURNDATASIZE 00000672: PUSH1 0x1f 00000674: NOT 00000675: PUSH1 0x1f 00000677: DUP3 00000678: ADD 00000679: AND 0000067a: DUP3 0000067b: ADD 0000067c: DUP1 0000067d: PUSH1 0x40 0000067f: MSTORE 00000680: POP 00000681: DUP2 00000682: ADD 00000683: SWAP1 00000684: PUSH2 0x068d 00000687: SWAP2 00000688: SWAP1 00000689: PUSH2 0x242f 0000068c: JUMP 0000068d: JUMPDEST 0000068e: PUSH1 0x07 00000690: SLOAD 00000691: SWAP1 00000692: SWAP2 00000693: POP 00000694: DUP1 00000695: DUP3 00000696: GT 00000697: ISZERO 00000698: PUSH2 0x069f 0000069b: JUMPI 0000069c: DUP1 0000069d: SWAP2 0000069e: POP 0000069f: JUMPDEST 000006a0: PUSH1 0x00 000006a2: PUSH2 0x2710 000006a5: PUSH2 0x06b0 000006a8: PUSH2 0x012c 000006ab: DUP6 000006ac: PUSH2 0x2448 000006af: JUMP 000006b0: JUMPDEST 000006b1: PUSH2 0x06ba 000006b4: SWAP2 000006b5: SWAP1 000006b6: PUSH2 0x248e 000006b9: JUMP 000006ba: JUMPDEST 000006bb: PUSH1 0x40 000006bd: MLOAD 000006be: PUSH32 0x2e1a7d4d00000000000000000000000000000000000000000000000000000000 000006df: DUP2 000006e0: MSTORE 000006e1: PUSH1 0x04 000006e3: DUP2 000006e4: ADD 000006e5: DUP3 000006e6: SWAP1 000006e7: MSTORE 000006e8: SWAP1 000006e9: SWAP2 000006ea: POP 000006eb: PUSH1 0x01 000006ed: PUSH1 0x01 000006ef: PUSH1 0xa0 000006f1: SHL 000006f2: SUB 000006f3: DUP6 000006f4: AND 000006f5: SWAP1 000006f6: PUSH4 0x2e1a7d4d 000006fb: SWAP1 000006fc: PUSH1 0x24 000006fe: ADD 000006ff: PUSH1 0x00 00000701: PUSH1 0x40 00000703: MLOAD 00000704: DUP1 00000705: DUP4 00000706: SUB 00000707: DUP2 00000708: PUSH1 0x00 0000070a: DUP8 0000070b: DUP1 0000070c: EXTCODESIZE 0000070d: ISZERO 0000070e: DUP1 0000070f: ISZERO 00000710: PUSH2 0x0718 00000713: JUMPI 00000714: PUSH1 0x00 00000716: DUP1 00000717: REVERT 00000718: JUMPDEST 00000719: POP 0000071a: GAS 0000071b: CALL 0000071c: ISZERO 0000071d: DUP1 0000071e: ISZERO 0000071f: PUSH2 0x072c 00000722: JUMPI 00000723: RETURNDATASIZE 00000724: PUSH1 0x00 00000726: DUP1 00000727: RETURNDATACOPY 00000728: RETURNDATASIZE 00000729: PUSH1 0x00 0000072b: REVERT 0000072c: JUMPDEST 0000072d: POP 0000072e: POP 0000072f: POP 00000730: POP 00000731: DUP1 00000732: DUP4 00000733: PUSH2 0x073c 00000736: SWAP2 00000737: SWAP1 00000738: PUSH2 0x241c 0000073b: JUMP 0000073c: JUMPDEST 0000073d: SWAP3 0000073e: POP 0000073f: DUP3 00000740: PUSH1 0x00 00000742: SUB 00000743: PUSH2 0x0778 00000746: JUMPI 00000747: PUSH1 0x40 00000749: MLOAD 0000074a: PUSH32 0x05ab636500000000000000000000000000000000000000000000000000000000 0000076b: DUP2 0000076c: MSTORE 0000076d: PUSH1 0x04 0000076f: ADD 00000770: PUSH1 0x40 00000772: MLOAD 00000773: DUP1 00000774: SWAP2 00000775: SUB 00000776: SWAP1 00000777: REVERT 00000778: JUMPDEST 00000779: PUSH2 0x078c 0000077c: PUSH1 0x01 0000077e: PUSH1 0x01 00000780: PUSH1 0xa0 00000782: SHL 00000783: SUB 00000784: DUP6 00000785: AND 00000786: DUP7 00000787: DUP6 00000788: PUSH2 0x10cb 0000078b: JUMP 0000078c: JUMPDEST 0000078d: PUSH1 0x00 0000078f: PUSH2 0x0797 00000792: DUP5 00000793: PUSH2 0x0e47 00000796: JUMP 00000797: JUMPDEST 00000798: PUSH1 0x40 0000079a: DUP1 0000079b: MLOAD 0000079c: PUSH2 0x0100 0000079f: DUP2 000007a0: ADD 000007a1: DUP3 000007a2: MSTORE 000007a3: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000007b8: DUP2 000007b9: MSTORE 000007ba: PUSH20 0xf19308f923582a6f7c465e5ce7a9dc1bec6665b1 000007cf: PUSH1 0x20 000007d1: DUP3 000007d2: ADD 000007d3: MSTORE 000007d4: PUSH2 0x2710 000007d7: SWAP2 000007d8: DUP2 000007d9: ADD 000007da: SWAP2 000007db: SWAP1 000007dc: SWAP2 000007dd: MSTORE 000007de: ADDRESS 000007df: PUSH1 0x60 000007e1: DUP3 000007e2: ADD 000007e3: MSTORE 000007e4: SWAP1 000007e5: SWAP2 000007e6: POP 000007e7: PUSH1 0x00 000007e9: SWAP1 000007ea: PUSH1 0x80 000007ec: DUP2 000007ed: ADD 000007ee: PUSH2 0x07f8 000007f1: TIMESTAMP 000007f2: PUSH1 0x01 000007f4: PUSH2 0x24a2 000007f7: JUMP 000007f8: JUMPDEST 000007f9: DUP2 000007fa: MSTORE 000007fb: PUSH1 0x20 000007fd: DUP1 000007fe: DUP3 000007ff: ADD 00000800: DUP9 00000801: SWAP1 00000802: MSTORE 00000803: PUSH1 0x40 00000805: DUP1 00000806: DUP4 00000807: ADD 00000808: DUP7 00000809: SWAP1 0000080a: MSTORE 0000080b: PUSH1 0x00 0000080d: PUSH1 0x60 0000080f: SWAP4 00000810: DUP5 00000811: ADD 00000812: MSTORE 00000813: DUP1 00000814: MLOAD 00000815: PUSH32 0x414bf38900000000000000000000000000000000000000000000000000000000 00000836: DUP2 00000837: MSTORE 00000838: DUP5 00000839: MLOAD 0000083a: PUSH1 0x01 0000083c: PUSH1 0x01 0000083e: PUSH1 0xa0 00000840: SHL 00000841: SUB 00000842: SWAP1 00000843: DUP2 00000844: AND 00000845: PUSH1 0x04 00000847: DUP4 00000848: ADD 00000849: MSTORE 0000084a: SWAP3 0000084b: DUP6 0000084c: ADD 0000084d: MLOAD 0000084e: DUP4 0000084f: AND 00000850: PUSH1 0x24 00000852: DUP3 00000853: ADD 00000854: MSTORE 00000855: SWAP1 00000856: DUP5 00000857: ADD 00000858: MLOAD 00000859: PUSH3 0xffffff 0000085d: AND 0000085e: PUSH1 0x44 00000860: DUP3 00000861: ADD 00000862: MSTORE 00000863: SWAP2 00000864: DUP4 00000865: ADD 00000866: MLOAD 00000867: DUP2 00000868: AND 00000869: PUSH1 0x64 0000086b: DUP4 0000086c: ADD 0000086d: MSTORE 0000086e: PUSH1 0x80 00000870: DUP4 00000871: ADD 00000872: MLOAD 00000873: PUSH1 0x84 00000875: DUP4 00000876: ADD 00000877: MSTORE 00000878: PUSH1 0xa0 0000087a: DUP4 0000087b: ADD 0000087c: MLOAD 0000087d: PUSH1 0xa4 0000087f: DUP4 00000880: ADD 00000881: MSTORE 00000882: PUSH1 0xc0 00000884: DUP4 00000885: ADD 00000886: MLOAD 00000887: PUSH1 0xc4 00000889: DUP4 0000088a: ADD 0000088b: MSTORE 0000088c: PUSH1 0xe0 0000088e: DUP4 0000088f: ADD 00000890: MLOAD 00000891: DUP2 00000892: AND 00000893: PUSH1 0xe4 00000895: DUP4 00000896: ADD 00000897: MSTORE 00000898: SWAP2 00000899: SWAP3 0000089a: POP 0000089b: SWAP1 0000089c: DUP9 0000089d: AND 0000089e: SWAP1 0000089f: PUSH4 0x414bf389 000008a4: SWAP1 000008a5: PUSH2 0x0104 000008a8: ADD 000008a9: PUSH1 0x20 000008ab: PUSH1 0x40 000008ad: MLOAD 000008ae: DUP1 000008af: DUP4 000008b0: SUB 000008b1: DUP2 000008b2: PUSH1 0x00 000008b4: DUP8 000008b5: GAS 000008b6: CALL 000008b7: ISZERO 000008b8: DUP1 000008b9: ISZERO 000008ba: PUSH2 0x08c7 000008bd: JUMPI 000008be: RETURNDATASIZE 000008bf: PUSH1 0x00 000008c1: DUP1 000008c2: RETURNDATACOPY 000008c3: RETURNDATASIZE 000008c4: PUSH1 0x00 000008c6: REVERT 000008c7: JUMPDEST 000008c8: POP 000008c9: POP 000008ca: POP 000008cb: POP 000008cc: PUSH1 0x40 000008ce: MLOAD 000008cf: RETURNDATASIZE 000008d0: PUSH1 0x1f 000008d2: NOT 000008d3: PUSH1 0x1f 000008d5: DUP3 000008d6: ADD 000008d7: AND 000008d8: DUP3 000008d9: ADD 000008da: DUP1 000008db: PUSH1 0x40 000008dd: MSTORE 000008de: POP 000008df: DUP2 000008e0: ADD 000008e1: SWAP1 000008e2: PUSH2 0x08eb 000008e5: SWAP2 000008e6: SWAP1 000008e7: PUSH2 0x242f 000008ea: JUMP 000008eb: JUMPDEST 000008ec: SWAP9 000008ed: POP 000008ee: PUSH2 0x090c 000008f1: PUSH20 0xf19308f923582a6f7c465e5ce7a9dc1bec6665b1 00000906: DUP10 00000907: DUP12 00000908: PUSH2 0x1174 0000090b: JUMP 0000090c: JUMPDEST 0000090d: DUP8 0000090e: PUSH1 0x01 00000910: PUSH1 0x01 00000912: PUSH1 0xa0 00000914: SHL 00000915: SUB 00000916: AND 00000917: PUSH4 0x7196e841 0000091c: PUSH1 0x40 0000091e: MLOAD 0000091f: DUP2 00000920: PUSH4 0xffffffff 00000925: AND 00000926: PUSH1 0xe0 00000928: SHL 00000929: DUP2 0000092a: MSTORE 0000092b: PUSH1 0x04 0000092d: ADD 0000092e: PUSH1 0x00 00000930: PUSH1 0x40 00000932: MLOAD 00000933: DUP1 00000934: DUP4 00000935: SUB 00000936: DUP2 00000937: PUSH1 0x00 00000939: DUP8 0000093a: DUP1 0000093b: EXTCODESIZE 0000093c: ISZERO 0000093d: DUP1 0000093e: ISZERO 0000093f: PUSH2 0x0947 00000942: JUMPI 00000943: PUSH1 0x00 00000945: DUP1 00000946: REVERT 00000947: JUMPDEST 00000948: POP 00000949: GAS 0000094a: CALL 0000094b: ISZERO 0000094c: DUP1 0000094d: ISZERO 0000094e: PUSH2 0x095b 00000951: JUMPI 00000952: RETURNDATASIZE 00000953: PUSH1 0x00 00000955: DUP1 00000956: RETURNDATACOPY 00000957: RETURNDATASIZE 00000958: PUSH1 0x00 0000095a: REVERT 0000095b: JUMPDEST 0000095c: POP 0000095d: POP 0000095e: POP 0000095f: POP 00000960: DUP5 00000961: PUSH1 0x05 00000963: PUSH1 0x00 00000965: DUP3 00000966: DUP3 00000967: SLOAD 00000968: PUSH2 0x0971 0000096b: SWAP2 0000096c: SWAP1 0000096d: PUSH2 0x24a2 00000970: JUMP 00000971: JUMPDEST 00000972: SWAP3 00000973: POP 00000974: POP 00000975: DUP2 00000976: SWAP1 00000977: SSTORE 00000978: POP 00000979: DUP9 0000097a: PUSH1 0x06 0000097c: PUSH1 0x00 0000097e: DUP3 0000097f: DUP3 00000980: SLOAD 00000981: PUSH2 0x098a 00000984: SWAP2 00000985: SWAP1 00000986: PUSH2 0x24a2 00000989: JUMP 0000098a: JUMPDEST 0000098b: SWAP1 0000098c: SWAP2 0000098d: SSTORE 0000098e: POP 0000098f: PUSH2 0x099a 00000992: SWAP1 00000993: POP 00000994: CALLER 00000995: DUP5 00000996: PUSH2 0x11ed 00000999: JUMP 0000099a: JUMPDEST 0000099b: PUSH1 0x40 0000099d: MLOAD 0000099e: CALLER 0000099f: SWAP1 000009a0: DUP11 000009a1: SWAP1 000009a2: DUP8 000009a3: SWAP1 000009a4: PUSH32 0x2f93a68dc35b09b9752c6b31e27bb7a7bafc4c49611843b94b8189cb328399af 000009c5: SWAP1 000009c6: PUSH1 0x00 000009c8: SWAP1 000009c9: LOG4 000009ca: POP 000009cb: POP 000009cc: POP 000009cd: POP 000009ce: POP 000009cf: POP 000009d0: POP 000009d1: POP 000009d2: PUSH2 0x09db 000009d5: PUSH1 0x01 000009d7: PUSH1 0x02 000009d9: SSTORE 000009da: JUMP 000009db: JUMPDEST 000009dc: SWAP1 000009dd: JUMP 000009de: JUMPDEST 000009df: PUSH1 0x00 000009e1: DUP1 000009e2: PUSH2 0x0a33 000009e5: PUSH20 0x1f98431c8ad98523631ae4a59f267346ea31f984 000009fa: PUSH2 0x0a2e 000009fd: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000a12: PUSH20 0xf19308f923582a6f7c465e5ce7a9dc1bec6665b1 00000a27: PUSH2 0x2710 00000a2a: PUSH2 0x12b6 00000a2d: JUMP 00000a2e: JUMPDEST 00000a2f: PUSH2 0x132d 00000a32: JUMP 00000a33: JUMPDEST 00000a34: PUSH1 0x0a 00000a36: SLOAD 00000a37: SWAP1 00000a38: SWAP2 00000a39: POP 00000a3a: PUSH1 0x00 00000a3c: SWAP1 00000a3d: PUSH2 0x0a4d 00000a40: SWAP1 00000a41: PUSH4 0xffffffff 00000a46: AND 00000a47: PUSH1 0x3c 00000a49: PUSH2 0x24b5 00000a4c: JUMP 00000a4d: JUMPDEST 00000a4e: SWAP1 00000a4f: POP 00000a50: PUSH1 0x00 00000a52: PUSH2 0x0a5a 00000a55: DUP4 00000a56: PUSH2 0x145f 00000a59: JUMP 00000a5a: JUMPDEST 00000a5b: SWAP1 00000a5c: POP 00000a5d: DUP2 00000a5e: PUSH4 0xffffffff 00000a63: AND 00000a64: DUP2 00000a65: PUSH4 0xffffffff 00000a6a: AND 00000a6b: LT 00000a6c: ISZERO 00000a6d: PUSH2 0x0a74 00000a70: JUMPI 00000a71: DUP1 00000a72: SWAP2 00000a73: POP 00000a74: JUMPDEST 00000a75: PUSH1 0x00 00000a77: DUP3 00000a78: PUSH4 0xffffffff 00000a7d: AND 00000a7e: PUSH1 0x00 00000a80: SUB 00000a81: PUSH2 0x0afb 00000a84: JUMPI 00000a85: PUSH1 0x00 00000a87: DUP5 00000a88: SWAP1 00000a89: POP 00000a8a: DUP1 00000a8b: PUSH1 0x01 00000a8d: PUSH1 0x01 00000a8f: PUSH1 0xa0 00000a91: SHL 00000a92: SUB 00000a93: AND 00000a94: PUSH4 0x3850c7bd 00000a99: PUSH1 0x40 00000a9b: MLOAD 00000a9c: DUP2 00000a9d: PUSH4 0xffffffff 00000aa2: AND 00000aa3: PUSH1 0xe0 00000aa5: SHL 00000aa6: DUP2 00000aa7: MSTORE 00000aa8: PUSH1 0x04 00000aaa: ADD 00000aab: PUSH1 0xe0 00000aad: PUSH1 0x40 00000aaf: MLOAD 00000ab0: DUP1 00000ab1: DUP4 00000ab2: SUB 00000ab3: DUP2 00000ab4: DUP7 00000ab5: GAS 00000ab6: STATICCALL 00000ab7: ISZERO 00000ab8: DUP1 00000ab9: ISZERO 00000aba: PUSH2 0x0ac7 00000abd: JUMPI 00000abe: RETURNDATASIZE 00000abf: PUSH1 0x00 00000ac1: DUP1 00000ac2: RETURNDATACOPY 00000ac3: RETURNDATASIZE 00000ac4: PUSH1 0x00 00000ac6: REVERT 00000ac7: JUMPDEST 00000ac8: POP 00000ac9: POP 00000aca: POP 00000acb: POP 00000acc: PUSH1 0x40 00000ace: MLOAD 00000acf: RETURNDATASIZE 00000ad0: PUSH1 0x1f 00000ad2: NOT 00000ad3: PUSH1 0x1f 00000ad5: DUP3 00000ad6: ADD 00000ad7: AND 00000ad8: DUP3 00000ad9: ADD 00000ada: DUP1 00000adb: PUSH1 0x40 00000add: MSTORE 00000ade: POP 00000adf: DUP2 00000ae0: ADD 00000ae1: SWAP1 00000ae2: PUSH2 0x0aeb 00000ae5: SWAP2 00000ae6: SWAP1 00000ae7: PUSH2 0x2504 00000aea: JUMP 00000aeb: JUMPDEST 00000aec: POP 00000aed: SWAP5 00000aee: SWAP7 00000aef: POP 00000af0: PUSH2 0x0b17 00000af3: SWAP6 00000af4: POP 00000af5: POP 00000af6: POP 00000af7: POP 00000af8: POP 00000af9: POP 00000afa: JUMP 00000afb: JUMPDEST 00000afc: PUSH1 0x00 00000afe: PUSH2 0x0b07 00000b01: DUP6 00000b02: DUP6 00000b03: PUSH2 0x167e 00000b06: JUMP 00000b07: JUMPDEST 00000b08: POP 00000b09: SWAP1 00000b0a: POP 00000b0b: PUSH2 0x0b13 00000b0e: DUP2 00000b0f: PUSH2 0x1922 00000b12: JUMP 00000b13: JUMPDEST 00000b14: SWAP2 00000b15: POP 00000b16: POP 00000b17: JUMPDEST 00000b18: PUSH2 0x0b4b 00000b1b: DUP2 00000b1c: DUP8 00000b1d: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000b32: PUSH20 0xf19308f923582a6f7c465e5ce7a9dc1bec6665b1 00000b47: PUSH2 0x1db7 00000b4a: JUMP 00000b4b: JUMPDEST 00000b4c: SWAP7 00000b4d: SWAP6 00000b4e: POP 00000b4f: POP 00000b50: POP 00000b51: POP 00000b52: POP 00000b53: POP 00000b54: JUMP 00000b55: JUMPDEST 00000b56: PUSH1 0x40 00000b58: MLOAD 00000b59: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 00000b7a: DUP2 00000b7b: MSTORE 00000b7c: ADDRESS 00000b7d: PUSH1 0x04 00000b7f: DUP3 00000b80: ADD 00000b81: MSTORE 00000b82: PUSH1 0x00 00000b84: SWAP1 00000b85: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000b9a: SWAP1 00000b9b: PUSH4 0x70a08231 00000ba0: SWAP1 00000ba1: PUSH1 0x24 00000ba3: ADD 00000ba4: PUSH1 0x20 00000ba6: PUSH1 0x40 00000ba8: MLOAD 00000ba9: DUP1 00000baa: DUP4 00000bab: SUB 00000bac: DUP2 00000bad: DUP7 00000bae: GAS 00000baf: STATICCALL 00000bb0: ISZERO 00000bb1: DUP1 00000bb2: ISZERO 00000bb3: PUSH2 0x0bc0 00000bb6: JUMPI 00000bb7: RETURNDATASIZE 00000bb8: PUSH1 0x00 00000bba: DUP1 00000bbb: RETURNDATACOPY 00000bbc: RETURNDATASIZE 00000bbd: PUSH1 0x00 00000bbf: REVERT 00000bc0: JUMPDEST 00000bc1: POP 00000bc2: POP 00000bc3: POP 00000bc4: POP 00000bc5: PUSH1 0x40 00000bc7: MLOAD 00000bc8: RETURNDATASIZE 00000bc9: PUSH1 0x1f 00000bcb: NOT 00000bcc: PUSH1 0x1f 00000bce: DUP3 00000bcf: ADD 00000bd0: AND 00000bd1: DUP3 00000bd2: ADD 00000bd3: DUP1 00000bd4: PUSH1 0x40 00000bd6: MSTORE 00000bd7: POP 00000bd8: DUP2 00000bd9: ADD 00000bda: SWAP1 00000bdb: PUSH2 0x0be4 00000bde: SWAP2 00000bdf: SWAP1 00000be0: PUSH2 0x242f 00000be3: JUMP 00000be4: JUMPDEST 00000be5: SWAP1 00000be6: POP 00000be7: SWAP1 00000be8: JUMP 00000be9: JUMPDEST 00000bea: PUSH2 0x0bf1 00000bed: PUSH2 0x1044 00000bf0: JUMP 00000bf1: JUMPDEST 00000bf2: PUSH1 0x01 00000bf4: PUSH1 0x01 00000bf6: PUSH1 0xa0 00000bf8: SHL 00000bf9: SUB 00000bfa: DUP2 00000bfb: AND 00000bfc: PUSH2 0x0c31 00000bff: JUMPI 00000c00: PUSH1 0x40 00000c02: MLOAD 00000c03: PUSH32 0x90a3742300000000000000000000000000000000000000000000000000000000 00000c24: DUP2 00000c25: MSTORE 00000c26: PUSH1 0x04 00000c28: ADD 00000c29: PUSH1 0x40 00000c2b: MLOAD 00000c2c: DUP1 00000c2d: SWAP2 00000c2e: SUB 00000c2f: SWAP1 00000c30: REVERT 00000c31: JUMPDEST 00000c32: PUSH1 0x03 00000c34: DUP1 00000c35: SLOAD 00000c36: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000c57: AND 00000c58: PUSH1 0x01 00000c5a: PUSH1 0x01 00000c5c: PUSH1 0xa0 00000c5e: SHL 00000c5f: SUB 00000c60: SWAP3 00000c61: SWAP1 00000c62: SWAP3 00000c63: AND 00000c64: SWAP2 00000c65: SWAP1 00000c66: SWAP2 00000c67: OR 00000c68: SWAP1 00000c69: SSTORE 00000c6a: JUMP 00000c6b: JUMPDEST 00000c6c: PUSH2 0x0c73 00000c6f: PUSH2 0x1044 00000c72: JUMP 00000c73: JUMPDEST 00000c74: PUSH2 0x0c7d 00000c77: PUSH1 0x00 00000c79: PUSH2 0x1ed5 00000c7c: JUMP 00000c7d: JUMPDEST 00000c7e: JUMP 00000c7f: JUMPDEST 00000c80: PUSH1 0x01 00000c82: SLOAD 00000c83: CALLER 00000c84: SWAP1 00000c85: PUSH1 0x01 00000c87: PUSH1 0x01 00000c89: PUSH1 0xa0 00000c8b: SHL 00000c8c: SUB 00000c8d: AND 00000c8e: DUP2 00000c8f: EQ 00000c90: PUSH2 0x0cd0 00000c93: JUMPI 00000c94: PUSH1 0x40 00000c96: MLOAD 00000c97: PUSH32 0x118cdaa700000000000000000000000000000000000000000000000000000000 00000cb8: DUP2 00000cb9: MSTORE 00000cba: PUSH1 0x01 00000cbc: PUSH1 0x01 00000cbe: PUSH1 0xa0 00000cc0: SHL 00000cc1: SUB 00000cc2: DUP3 00000cc3: AND 00000cc4: PUSH1 0x04 00000cc6: DUP3 00000cc7: ADD 00000cc8: MSTORE 00000cc9: PUSH1 0x24 00000ccb: ADD 00000ccc: PUSH2 0x027a 00000ccf: JUMP 00000cd0: JUMPDEST 00000cd1: PUSH2 0x0cd9 00000cd4: DUP2 00000cd5: PUSH2 0x1ed5 00000cd8: JUMP 00000cd9: JUMPDEST 00000cda: POP 00000cdb: JUMP 00000cdc: JUMPDEST 00000cdd: PUSH2 0x0ce4 00000ce0: PUSH2 0x1044 00000ce3: JUMP 00000ce4: JUMPDEST 00000ce5: PUSH1 0x05 00000ce7: DUP2 00000ce8: PUSH4 0xffffffff 00000ced: AND 00000cee: LT 00000cef: ISZERO 00000cf0: DUP1 00000cf1: ISZERO 00000cf2: PUSH2 0x0d02 00000cf5: JUMPI 00000cf6: POP 00000cf7: PUSH1 0x3c 00000cf9: DUP2 00000cfa: PUSH4 0xffffffff 00000cff: AND 00000d00: GT 00000d01: ISZERO 00000d02: JUMPDEST 00000d03: PUSH2 0x0d68 00000d06: JUMPI 00000d07: PUSH1 0x40 00000d09: MLOAD 00000d0a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000d2b: DUP2 00000d2c: MSTORE 00000d2d: PUSH1 0x20 00000d2f: PUSH1 0x04 00000d31: DUP3 00000d32: ADD 00000d33: MSTORE 00000d34: PUSH1 0x0a 00000d36: PUSH1 0x24 00000d38: DUP3 00000d39: ADD 00000d3a: MSTORE 00000d3b: PUSH32 0x356d2d3168206f6e6c7900000000000000000000000000000000000000000000 00000d5c: PUSH1 0x44 00000d5e: DUP3 00000d5f: ADD 00000d60: MSTORE 00000d61: PUSH1 0x64 00000d63: ADD 00000d64: PUSH2 0x027a 00000d67: JUMP 00000d68: JUMPDEST 00000d69: PUSH1 0x0a 00000d6b: DUP1 00000d6c: SLOAD 00000d6d: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 00000d8e: AND 00000d8f: PUSH4 0xffffffff 00000d94: SWAP3 00000d95: SWAP1 00000d96: SWAP3 00000d97: AND 00000d98: SWAP2 00000d99: SWAP1 00000d9a: SWAP2 00000d9b: OR 00000d9c: SWAP1 00000d9d: SSTORE 00000d9e: JUMP 00000d9f: JUMPDEST 00000da0: PUSH1 0x07 00000da2: SLOAD 00000da3: PUSH1 0x40 00000da5: MLOAD 00000da6: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 00000dc7: DUP2 00000dc8: MSTORE 00000dc9: ADDRESS 00000dca: PUSH1 0x04 00000dcc: DUP3 00000dcd: ADD 00000dce: MSTORE 00000dcf: PUSH1 0x00 00000dd1: SWAP2 00000dd2: SWAP1 00000dd3: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000de8: SWAP1 00000de9: DUP2 00000dea: SWAP1 00000deb: PUSH4 0x70a08231 00000df0: SWAP1 00000df1: PUSH1 0x24 00000df3: ADD 00000df4: PUSH1 0x20 00000df6: PUSH1 0x40 00000df8: MLOAD 00000df9: DUP1 00000dfa: DUP4 00000dfb: SUB 00000dfc: DUP2 00000dfd: DUP7 00000dfe: GAS 00000dff: STATICCALL 00000e00: ISZERO 00000e01: DUP1 00000e02: ISZERO 00000e03: PUSH2 0x0e10 00000e06: JUMPI 00000e07: RETURNDATASIZE 00000e08: PUSH1 0x00 00000e0a: DUP1 00000e0b: RETURNDATACOPY 00000e0c: RETURNDATASIZE 00000e0d: PUSH1 0x00 00000e0f: REVERT 00000e10: JUMPDEST 00000e11: POP 00000e12: POP 00000e13: POP 00000e14: POP 00000e15: PUSH1 0x40 00000e17: MLOAD 00000e18: RETURNDATASIZE 00000e19: PUSH1 0x1f 00000e1b: NOT 00000e1c: PUSH1 0x1f 00000e1e: DUP3 00000e1f: ADD 00000e20: AND 00000e21: DUP3 00000e22: ADD 00000e23: DUP1 00000e24: PUSH1 0x40 00000e26: MSTORE 00000e27: POP 00000e28: DUP2 00000e29: ADD 00000e2a: SWAP1 00000e2b: PUSH2 0x0e34 00000e2e: SWAP2 00000e2f: SWAP1 00000e30: PUSH2 0x242f 00000e33: JUMP 00000e34: JUMPDEST 00000e35: SWAP3 00000e36: POP 00000e37: DUP2 00000e38: DUP4 00000e39: GT 00000e3a: ISZERO 00000e3b: PUSH2 0x0e42 00000e3e: JUMPI 00000e3f: DUP2 00000e40: SWAP3 00000e41: POP 00000e42: JUMPDEST 00000e43: POP 00000e44: POP 00000e45: SWAP1 00000e46: JUMP 00000e47: JUMPDEST 00000e48: PUSH1 0x00 00000e4a: DUP1 00000e4b: PUSH2 0x0e53 00000e4e: DUP4 00000e4f: PUSH2 0x09de 00000e52: JUMP 00000e53: JUMPDEST 00000e54: SWAP1 00000e55: POP 00000e56: PUSH1 0x00 00000e58: PUSH1 0x64 00000e5a: PUSH1 0x04 00000e5c: SLOAD 00000e5d: PUSH1 0x64 00000e5f: PUSH2 0x0e68 00000e62: SWAP2 00000e63: SWAP1 00000e64: PUSH2 0x241c 00000e67: JUMP 00000e68: JUMPDEST 00000e69: PUSH2 0x0e72 00000e6c: SWAP1 00000e6d: DUP5 00000e6e: PUSH2 0x2448 00000e71: JUMP 00000e72: JUMPDEST 00000e73: PUSH2 0x0e7c 00000e76: SWAP2 00000e77: SWAP1 00000e78: PUSH2 0x248e 00000e7b: JUMP 00000e7c: JUMPDEST 00000e7d: SWAP5 00000e7e: SWAP4 00000e7f: POP 00000e80: POP 00000e81: POP 00000e82: POP 00000e83: JUMP 00000e84: JUMPDEST 00000e85: PUSH2 0x0e8c 00000e88: PUSH2 0x1044 00000e8b: JUMP 00000e8c: JUMPDEST 00000e8d: PUSH1 0x3c 00000e8f: DUP2 00000e90: LT 00000e91: ISZERO 00000e92: DUP1 00000e93: ISZERO 00000e94: PUSH2 0x0e9f 00000e97: JUMPI 00000e98: POP 00000e99: PUSH2 0xa8c0 00000e9c: DUP2 00000e9d: GT 00000e9e: ISZERO 00000e9f: JUMPDEST 00000ea0: PUSH2 0x0f05 00000ea3: JUMPI 00000ea4: PUSH1 0x40 00000ea6: MLOAD 00000ea7: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000ec8: DUP2 00000ec9: MSTORE 00000eca: PUSH1 0x20 00000ecc: PUSH1 0x04 00000ece: DUP3 00000ecf: ADD 00000ed0: MSTORE 00000ed1: PUSH1 0x0b 00000ed3: PUSH1 0x24 00000ed5: DUP3 00000ed6: ADD 00000ed7: MSTORE 00000ed8: PUSH32 0x316d2d313268206f6e6c79000000000000000000000000000000000000000000 00000ef9: PUSH1 0x44 00000efb: DUP3 00000efc: ADD 00000efd: MSTORE 00000efe: PUSH1 0x64 00000f00: ADD 00000f01: PUSH2 0x027a 00000f04: JUMP 00000f05: JUMPDEST 00000f06: PUSH1 0x09 00000f08: SSTORE 00000f09: JUMP 00000f0a: JUMPDEST 00000f0b: PUSH1 0x00 00000f0d: DUP1 00000f0e: PUSH2 0x0f15 00000f11: PUSH2 0x0d9f 00000f14: JUMP 00000f15: JUMPDEST 00000f16: SWAP1 00000f17: POP 00000f18: PUSH2 0x2710 00000f1b: PUSH2 0x0f26 00000f1e: PUSH2 0x012c 00000f21: DUP4 00000f22: PUSH2 0x2448 00000f25: JUMP 00000f26: JUMPDEST 00000f27: PUSH2 0x0f30 00000f2a: SWAP2 00000f2b: SWAP1 00000f2c: PUSH2 0x248e 00000f2f: JUMP 00000f30: JUMPDEST 00000f31: SWAP2 00000f32: POP 00000f33: POP 00000f34: SWAP1 00000f35: JUMP 00000f36: JUMPDEST 00000f37: PUSH2 0x0f3e 00000f3a: PUSH2 0x1044 00000f3d: JUMP 00000f3e: JUMPDEST 00000f3f: PUSH1 0x05 00000f41: DUP2 00000f42: LT 00000f43: ISZERO 00000f44: DUP1 00000f45: ISZERO 00000f46: PUSH2 0x0f50 00000f49: JUMPI 00000f4a: POP 00000f4b: PUSH1 0x0f 00000f4d: DUP2 00000f4e: GT 00000f4f: ISZERO 00000f50: JUMPDEST 00000f51: PUSH2 0x0fb6 00000f54: JUMPI 00000f55: PUSH1 0x40 00000f57: MLOAD 00000f58: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000f79: DUP2 00000f7a: MSTORE 00000f7b: PUSH1 0x20 00000f7d: PUSH1 0x04 00000f7f: DUP3 00000f80: ADD 00000f81: MSTORE 00000f82: PUSH1 0x0a 00000f84: PUSH1 0x24 00000f86: DUP3 00000f87: ADD 00000f88: MSTORE 00000f89: PUSH32 0x352d313525206f6e6c7900000000000000000000000000000000000000000000 00000faa: PUSH1 0x44 00000fac: DUP3 00000fad: ADD 00000fae: MSTORE 00000faf: PUSH1 0x64 00000fb1: ADD 00000fb2: PUSH2 0x027a 00000fb5: JUMP 00000fb6: JUMPDEST 00000fb7: PUSH1 0x04 00000fb9: SSTORE 00000fba: JUMP 00000fbb: JUMPDEST 00000fbc: PUSH2 0x0fc3 00000fbf: PUSH2 0x1044 00000fc2: JUMP 00000fc3: JUMPDEST 00000fc4: PUSH1 0x01 00000fc6: DUP1 00000fc7: SLOAD 00000fc8: PUSH1 0x01 00000fca: PUSH1 0x01 00000fcc: PUSH1 0xa0 00000fce: SHL 00000fcf: SUB 00000fd0: DUP4 00000fd1: AND 00000fd2: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000ff3: SWAP1 00000ff4: SWAP2 00000ff5: AND 00000ff6: DUP2 00000ff7: OR 00000ff8: SWAP1 00000ff9: SWAP2 00000ffa: SSTORE 00000ffb: PUSH2 0x100c 00000ffe: PUSH1 0x00 00001000: SLOAD 00001001: PUSH1 0x01 00001003: PUSH1 0x01 00001005: PUSH1 0xa0 00001007: SHL 00001008: SUB 00001009: AND 0000100a: SWAP1 0000100b: JUMP 0000100c: JUMPDEST 0000100d: PUSH1 0x01 0000100f: PUSH1 0x01 00001011: PUSH1 0xa0 00001013: SHL 00001014: SUB 00001015: AND 00001016: PUSH32 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700 00001037: PUSH1 0x40 00001039: MLOAD 0000103a: PUSH1 0x40 0000103c: MLOAD 0000103d: DUP1 0000103e: SWAP2 0000103f: SUB 00001040: SWAP1 00001041: LOG3 00001042: POP 00001043: JUMP 00001044: JUMPDEST 00001045: PUSH1 0x00 00001047: SLOAD 00001048: PUSH1 0x01 0000104a: PUSH1 0x01 0000104c: PUSH1 0xa0 0000104e: SHL 0000104f: SUB 00001050: AND 00001051: CALLER 00001052: EQ 00001053: PUSH2 0x0c7d 00001056: JUMPI 00001057: PUSH1 0x40 00001059: MLOAD 0000105a: PUSH32 0x118cdaa700000000000000000000000000000000000000000000000000000000 0000107b: DUP2 0000107c: MSTORE 0000107d: CALLER 0000107e: PUSH1 0x04 00001080: DUP3 00001081: ADD 00001082: MSTORE 00001083: PUSH1 0x24 00001085: ADD 00001086: PUSH2 0x027a 00001089: JUMP 0000108a: JUMPDEST 0000108b: PUSH1 0x02 0000108d: DUP1 0000108e: SLOAD 0000108f: SUB 00001090: PUSH2 0x10c5 00001093: JUMPI 00001094: PUSH1 0x40 00001096: MLOAD 00001097: PUSH32 0x3ee5aeb500000000000000000000000000000000000000000000000000000000 000010b8: DUP2 000010b9: MSTORE 000010ba: PUSH1 0x04 000010bc: ADD 000010bd: PUSH1 0x40 000010bf: MLOAD 000010c0: DUP1 000010c1: SWAP2 000010c2: SUB 000010c3: SWAP1 000010c4: REVERT 000010c5: JUMPDEST 000010c6: PUSH1 0x02 000010c8: DUP1 000010c9: SSTORE 000010ca: JUMP 000010cb: JUMPDEST 000010cc: PUSH1 0x40 000010ce: MLOAD 000010cf: PUSH32 0xdd62ed3e00000000000000000000000000000000000000000000000000000000 000010f0: DUP2 000010f1: MSTORE 000010f2: ADDRESS 000010f3: PUSH1 0x04 000010f5: DUP3 000010f6: ADD 000010f7: MSTORE 000010f8: PUSH1 0x01 000010fa: PUSH1 0x01 000010fc: PUSH1 0xa0 000010fe: SHL 000010ff: SUB 00001100: DUP4 00001101: DUP2 00001102: AND 00001103: PUSH1 0x24 00001105: DUP4 00001106: ADD 00001107: MSTORE 00001108: PUSH1 0x00 0000110a: SWAP2 0000110b: SWAP1 0000110c: DUP6 0000110d: AND 0000110e: SWAP1 0000110f: PUSH4 0xdd62ed3e 00001114: SWAP1 00001115: PUSH1 0x44 00001117: ADD 00001118: PUSH1 0x20 0000111a: PUSH1 0x40 0000111c: MLOAD 0000111d: DUP1 0000111e: DUP4 0000111f: SUB 00001120: DUP2 00001121: DUP7 00001122: GAS 00001123: STATICCALL 00001124: ISZERO 00001125: DUP1 00001126: ISZERO 00001127: PUSH2 0x1134 0000112a: JUMPI 0000112b: RETURNDATASIZE 0000112c: PUSH1 0x00 0000112e: DUP1 0000112f: RETURNDATACOPY 00001130: RETURNDATASIZE 00001131: PUSH1 0x00 00001133: REVERT 00001134: JUMPDEST 00001135: POP 00001136: POP 00001137: POP 00001138: POP 00001139: PUSH1 0x40 0000113b: MLOAD 0000113c: RETURNDATASIZE 0000113d: PUSH1 0x1f 0000113f: NOT 00001140: PUSH1 0x1f 00001142: DUP3 00001143: ADD 00001144: AND 00001145: DUP3 00001146: ADD 00001147: DUP1 00001148: PUSH1 0x40 0000114a: MSTORE 0000114b: POP 0000114c: DUP2 0000114d: ADD 0000114e: SWAP1 0000114f: PUSH2 0x1158 00001152: SWAP2 00001153: SWAP1 00001154: PUSH2 0x242f 00001157: JUMP 00001158: JUMPDEST 00001159: SWAP1 0000115a: POP 0000115b: PUSH2 0x116e 0000115e: DUP5 0000115f: DUP5 00001160: PUSH2 0x1169 00001163: DUP6 00001164: DUP6 00001165: PUSH2 0x24a2 00001168: JUMP 00001169: JUMPDEST 0000116a: PUSH2 0x1f06 0000116d: JUMP 0000116e: JUMPDEST 0000116f: POP 00001170: POP 00001171: POP 00001172: POP 00001173: JUMP 00001174: JUMPDEST 00001175: PUSH1 0x40 00001177: MLOAD 00001178: PUSH1 0x01 0000117a: PUSH1 0x01 0000117c: PUSH1 0xa0 0000117e: SHL 0000117f: SUB 00001180: DUP4 00001181: DUP2 00001182: AND 00001183: PUSH1 0x24 00001185: DUP4 00001186: ADD 00001187: MSTORE 00001188: PUSH1 0x44 0000118a: DUP3 0000118b: ADD 0000118c: DUP4 0000118d: SWAP1 0000118e: MSTORE 0000118f: PUSH2 0x11e8 00001192: SWAP2 00001193: DUP6 00001194: SWAP2 00001195: DUP3 00001196: AND 00001197: SWAP1 00001198: PUSH4 0xa9059cbb 0000119d: SWAP1 0000119e: PUSH1 0x64 000011a0: ADD 000011a1: JUMPDEST 000011a2: PUSH1 0x40 000011a4: MLOAD 000011a5: PUSH1 0x20 000011a7: DUP2 000011a8: DUP4 000011a9: SUB 000011aa: SUB 000011ab: DUP2 000011ac: MSTORE 000011ad: SWAP1 000011ae: PUSH1 0x40 000011b0: MSTORE 000011b1: SWAP2 000011b2: POP 000011b3: PUSH1 0xe0 000011b5: SHL 000011b6: PUSH1 0x20 000011b8: DUP3 000011b9: ADD 000011ba: DUP1 000011bb: MLOAD 000011bc: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 000011d9: DUP4 000011da: DUP2 000011db: DUP4 000011dc: AND 000011dd: OR 000011de: DUP4 000011df: MSTORE 000011e0: POP 000011e1: POP 000011e2: POP 000011e3: POP 000011e4: PUSH2 0x1fc0 000011e7: JUMP 000011e8: JUMPDEST 000011e9: POP 000011ea: POP 000011eb: POP 000011ec: JUMP 000011ed: JUMPDEST 000011ee: DUP1 000011ef: SELFBALANCE 000011f0: LT 000011f1: ISZERO 000011f2: PUSH2 0x1229 000011f5: JUMPI 000011f6: PUSH1 0x40 000011f8: MLOAD 000011f9: PUSH32 0xcd78605900000000000000000000000000000000000000000000000000000000 0000121a: DUP2 0000121b: MSTORE 0000121c: ADDRESS 0000121d: PUSH1 0x04 0000121f: DUP3 00001220: ADD 00001221: MSTORE 00001222: PUSH1 0x24 00001224: ADD 00001225: PUSH2 0x027a 00001228: JUMP 00001229: JUMPDEST 0000122a: PUSH1 0x00 0000122c: DUP3 0000122d: PUSH1 0x01 0000122f: PUSH1 0x01 00001231: PUSH1 0xa0 00001233: SHL 00001234: SUB 00001235: AND 00001236: DUP3 00001237: PUSH1 0x40 00001239: MLOAD 0000123a: PUSH1 0x00 0000123c: PUSH1 0x40 0000123e: MLOAD 0000123f: DUP1 00001240: DUP4 00001241: SUB 00001242: DUP2 00001243: DUP6 00001244: DUP8 00001245: GAS 00001246: CALL 00001247: SWAP3 00001248: POP 00001249: POP 0000124a: POP 0000124b: RETURNDATASIZE 0000124c: DUP1 0000124d: PUSH1 0x00 0000124f: DUP2 00001250: EQ 00001251: PUSH2 0x1276 00001254: JUMPI 00001255: PUSH1 0x40 00001257: MLOAD 00001258: SWAP2 00001259: POP 0000125a: PUSH1 0x1f 0000125c: NOT 0000125d: PUSH1 0x3f 0000125f: RETURNDATASIZE 00001260: ADD 00001261: AND 00001262: DUP3 00001263: ADD 00001264: PUSH1 0x40 00001266: MSTORE 00001267: RETURNDATASIZE 00001268: DUP3 00001269: MSTORE 0000126a: RETURNDATASIZE 0000126b: PUSH1 0x00 0000126d: PUSH1 0x20 0000126f: DUP5 00001270: ADD 00001271: RETURNDATACOPY 00001272: PUSH2 0x127b 00001275: JUMP 00001276: JUMPDEST 00001277: PUSH1 0x60 00001279: SWAP2 0000127a: POP 0000127b: JUMPDEST 0000127c: POP 0000127d: POP 0000127e: SWAP1 0000127f: POP 00001280: DUP1 00001281: PUSH2 0x11e8 00001284: JUMPI 00001285: PUSH1 0x40 00001287: MLOAD 00001288: PUSH32 0x1425ea4200000000000000000000000000000000000000000000000000000000 000012a9: DUP2 000012aa: MSTORE 000012ab: PUSH1 0x04 000012ad: ADD 000012ae: PUSH1 0x40 000012b0: MLOAD 000012b1: DUP1 000012b2: SWAP2 000012b3: SUB 000012b4: SWAP1 000012b5: REVERT 000012b6: JUMPDEST 000012b7: PUSH1 0x40 000012b9: DUP1 000012ba: MLOAD 000012bb: PUSH1 0x60 000012bd: DUP2 000012be: ADD 000012bf: DUP3 000012c0: MSTORE 000012c1: PUSH1 0x00 000012c3: DUP1 000012c4: DUP3 000012c5: MSTORE 000012c6: PUSH1 0x20 000012c8: DUP3 000012c9: ADD 000012ca: DUP2 000012cb: SWAP1 000012cc: MSTORE 000012cd: SWAP2 000012ce: DUP2 000012cf: ADD 000012d0: SWAP2 000012d1: SWAP1 000012d2: SWAP2 000012d3: MSTORE 000012d4: DUP3 000012d5: PUSH1 0x01 000012d7: PUSH1 0x01 000012d9: PUSH1 0xa0 000012db: SHL 000012dc: SUB 000012dd: AND 000012de: DUP5 000012df: PUSH1 0x01 000012e1: PUSH1 0x01 000012e3: PUSH1 0xa0 000012e5: SHL 000012e6: SUB 000012e7: AND 000012e8: GT 000012e9: ISZERO 000012ea: PUSH2 0x12f1 000012ed: JUMPI 000012ee: SWAP2 000012ef: SWAP3 000012f0: SWAP2 000012f1: JUMPDEST 000012f2: PUSH1 0x40 000012f4: MLOAD 000012f5: DUP1 000012f6: PUSH1 0x60 000012f8: ADD 000012f9: PUSH1 0x40 000012fb: MSTORE 000012fc: DUP1 000012fd: DUP6 000012fe: PUSH1 0x01 00001300: PUSH1 0x01 00001302: PUSH1 0xa0 00001304: SHL 00001305: SUB 00001306: AND 00001307: DUP2 00001308: MSTORE 00001309: PUSH1 0x20 0000130b: ADD 0000130c: DUP5 0000130d: PUSH1 0x01 0000130f: PUSH1 0x01 00001311: PUSH1 0xa0 00001313: SHL 00001314: SUB 00001315: AND 00001316: DUP2 00001317: MSTORE 00001318: PUSH1 0x20 0000131a: ADD 0000131b: DUP4 0000131c: PUSH3 0xffffff 00001320: AND 00001321: DUP2 00001322: MSTORE 00001323: POP 00001324: SWAP1 00001325: POP 00001326: JUMPDEST 00001327: SWAP4 00001328: SWAP3 00001329: POP 0000132a: POP 0000132b: POP 0000132c: JUMP 0000132d: JUMPDEST 0000132e: PUSH1 0x00 00001330: DUP2 00001331: PUSH1 0x20 00001333: ADD 00001334: MLOAD 00001335: PUSH1 0x01 00001337: PUSH1 0x01 00001339: PUSH1 0xa0 0000133b: SHL 0000133c: SUB 0000133d: AND 0000133e: DUP3 0000133f: PUSH1 0x00 00001341: ADD 00001342: MLOAD 00001343: PUSH1 0x01 00001345: PUSH1 0x01 00001347: PUSH1 0xa0 00001349: SHL 0000134a: SUB 0000134b: AND 0000134c: LT 0000134d: PUSH2 0x1355 00001350: JUMPI 00001351: PUSH1 0x00 00001353: DUP1 00001354: REVERT 00001355: JUMPDEST 00001356: DUP2 00001357: MLOAD 00001358: PUSH1 0x20 0000135a: DUP1 0000135b: DUP5 0000135c: ADD 0000135d: MLOAD 0000135e: PUSH1 0x40 00001360: DUP1 00001361: DUP7 00001362: ADD 00001363: MLOAD 00001364: DUP2 00001365: MLOAD 00001366: PUSH1 0x01 00001368: PUSH1 0x01 0000136a: PUSH1 0xa0 0000136c: SHL 0000136d: SUB 0000136e: SWAP6 0000136f: DUP7 00001370: AND 00001371: DUP2 00001372: DUP7 00001373: ADD 00001374: MSTORE 00001375: SWAP5 00001376: SWAP1 00001377: SWAP3 00001378: AND 00001379: DUP5 0000137a: DUP3 0000137b: ADD 0000137c: MSTORE 0000137d: PUSH3 0xffffff 00001381: SWAP1 00001382: SWAP2 00001383: AND 00001384: PUSH1 0x60 00001386: DUP1 00001387: DUP6 00001388: ADD 00001389: SWAP2 0000138a: SWAP1 0000138b: SWAP2 0000138c: MSTORE 0000138d: DUP2 0000138e: MLOAD 0000138f: DUP1 00001390: DUP6 00001391: SUB 00001392: DUP3 00001393: ADD 00001394: DUP2 00001395: MSTORE 00001396: PUSH1 0x80 00001398: DUP6 00001399: ADD 0000139a: SWAP1 0000139b: SWAP3 0000139c: MSTORE 0000139d: DUP2 0000139e: MLOAD 0000139f: SWAP2 000013a0: SWAP1 000013a1: SWAP3 000013a2: ADD 000013a3: KECCAK256 000013a4: PUSH32 0xff00000000000000000000000000000000000000000000000000000000000000 000013c5: PUSH1 0xa0 000013c7: DUP5 000013c8: ADD 000013c9: MSTORE 000013ca: SWAP1 000013cb: DUP6 000013cc: SWAP1 000013cd: SHL 000013ce: PUSH32 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000 000013ef: AND 000013f0: PUSH1 0xa1 000013f2: DUP4 000013f3: ADD 000013f4: MSTORE 000013f5: PUSH1 0xb5 000013f7: DUP3 000013f8: ADD 000013f9: MSTORE 000013fa: PUSH32 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54 0000141b: PUSH1 0xd5 0000141d: DUP3 0000141e: ADD 0000141f: MSTORE 00001420: PUSH1 0xf5 00001422: ADD 00001423: PUSH1 0x40 00001425: DUP1 00001426: MLOAD 00001427: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001448: DUP2 00001449: DUP5 0000144a: SUB 0000144b: ADD 0000144c: DUP2 0000144d: MSTORE 0000144e: SWAP2 0000144f: SWAP1 00001450: MSTORE 00001451: DUP1 00001452: MLOAD 00001453: PUSH1 0x20 00001455: SWAP1 00001456: SWAP2 00001457: ADD 00001458: KECCAK256 00001459: SWAP4 0000145a: SWAP3 0000145b: POP 0000145c: POP 0000145d: POP 0000145e: JUMP 0000145f: JUMPDEST 00001460: PUSH1 0x00 00001462: DUP1 00001463: PUSH1 0x00 00001465: DUP4 00001466: PUSH1 0x01 00001468: PUSH1 0x01 0000146a: PUSH1 0xa0 0000146c: SHL 0000146d: SUB 0000146e: AND 0000146f: PUSH4 0x3850c7bd 00001474: PUSH1 0x40 00001476: MLOAD 00001477: DUP2 00001478: PUSH4 0xffffffff 0000147d: AND 0000147e: PUSH1 0xe0 00001480: SHL 00001481: DUP2 00001482: MSTORE 00001483: PUSH1 0x04 00001485: ADD 00001486: PUSH1 0xe0 00001488: PUSH1 0x40 0000148a: MLOAD 0000148b: DUP1 0000148c: DUP4 0000148d: SUB 0000148e: DUP2 0000148f: DUP7 00001490: GAS 00001491: STATICCALL 00001492: ISZERO 00001493: DUP1 00001494: ISZERO 00001495: PUSH2 0x14a2 00001498: JUMPI 00001499: RETURNDATASIZE 0000149a: PUSH1 0x00 0000149c: DUP1 0000149d: RETURNDATACOPY 0000149e: RETURNDATASIZE 0000149f: PUSH1 0x00 000014a1: REVERT 000014a2: JUMPDEST 000014a3: POP 000014a4: POP 000014a5: POP 000014a6: POP 000014a7: PUSH1 0x40 000014a9: MLOAD 000014aa: RETURNDATASIZE 000014ab: PUSH1 0x1f 000014ad: NOT 000014ae: PUSH1 0x1f 000014b0: DUP3 000014b1: ADD 000014b2: AND 000014b3: DUP3 000014b4: ADD 000014b5: DUP1 000014b6: PUSH1 0x40 000014b8: MSTORE 000014b9: POP 000014ba: DUP2 000014bb: ADD 000014bc: SWAP1 000014bd: PUSH2 0x14c6 000014c0: SWAP2 000014c1: SWAP1 000014c2: PUSH2 0x2504 000014c5: JUMP 000014c6: JUMPDEST 000014c7: POP 000014c8: POP 000014c9: POP 000014ca: SWAP4 000014cb: POP 000014cc: SWAP4 000014cd: POP 000014ce: POP 000014cf: POP 000014d0: PUSH1 0x00 000014d2: DUP2 000014d3: PUSH2 0xffff 000014d6: AND 000014d7: GT 000014d8: PUSH2 0x153d 000014db: JUMPI 000014dc: PUSH1 0x40 000014de: MLOAD 000014df: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001500: DUP2 00001501: MSTORE 00001502: PUSH1 0x20 00001504: PUSH1 0x04 00001506: DUP3 00001507: ADD 00001508: MSTORE 00001509: PUSH1 0x02 0000150b: PUSH1 0x24 0000150d: DUP3 0000150e: ADD 0000150f: MSTORE 00001510: PUSH32 0x4e49000000000000000000000000000000000000000000000000000000000000 00001531: PUSH1 0x44 00001533: DUP3 00001534: ADD 00001535: MSTORE 00001536: PUSH1 0x64 00001538: ADD 00001539: PUSH2 0x027a 0000153c: JUMP 0000153d: JUMPDEST 0000153e: PUSH1 0x00 00001540: DUP1 00001541: PUSH1 0x01 00001543: PUSH1 0x01 00001545: PUSH1 0xa0 00001547: SHL 00001548: SUB 00001549: DUP7 0000154a: AND 0000154b: PUSH4 0x252c09d7 00001550: DUP5 00001551: PUSH2 0x155b 00001554: DUP8 00001555: PUSH1 0x01 00001557: PUSH2 0x259e 0000155a: JUMP 0000155b: JUMPDEST 0000155c: PUSH2 0x1565 0000155f: SWAP2 00001560: SWAP1 00001561: PUSH2 0x25c0 00001564: JUMP 00001565: JUMPDEST 00001566: PUSH1 0x40 00001568: MLOAD 00001569: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 0000158a: PUSH1 0xe0 0000158c: DUP5 0000158d: SWAP1 0000158e: SHL 0000158f: AND 00001590: DUP2 00001591: MSTORE 00001592: PUSH2 0xffff 00001595: SWAP1 00001596: SWAP2 00001597: AND 00001598: PUSH1 0x04 0000159a: DUP3 0000159b: ADD 0000159c: MSTORE 0000159d: PUSH1 0x24 0000159f: ADD 000015a0: PUSH1 0x80 000015a2: PUSH1 0x40 000015a4: MLOAD 000015a5: DUP1 000015a6: DUP4 000015a7: SUB 000015a8: DUP2 000015a9: DUP7 000015aa: GAS 000015ab: STATICCALL 000015ac: ISZERO 000015ad: DUP1 000015ae: ISZERO 000015af: PUSH2 0x15bc 000015b2: JUMPI 000015b3: RETURNDATASIZE 000015b4: PUSH1 0x00 000015b6: DUP1 000015b7: RETURNDATACOPY 000015b8: RETURNDATASIZE 000015b9: PUSH1 0x00 000015bb: REVERT 000015bc: JUMPDEST 000015bd: POP 000015be: POP 000015bf: POP 000015c0: POP 000015c1: PUSH1 0x40 000015c3: MLOAD 000015c4: RETURNDATASIZE 000015c5: PUSH1 0x1f 000015c7: NOT 000015c8: PUSH1 0x1f 000015ca: DUP3 000015cb: ADD 000015cc: AND 000015cd: DUP3 000015ce: ADD 000015cf: DUP1 000015d0: PUSH1 0x40 000015d2: MSTORE 000015d3: POP 000015d4: DUP2 000015d5: ADD 000015d6: SWAP1 000015d7: PUSH2 0x15e0 000015da: SWAP2 000015db: SWAP1 000015dc: PUSH2 0x25f3 000015df: JUMP 000015e0: JUMPDEST 000015e1: SWAP4 000015e2: POP 000015e3: POP 000015e4: POP 000015e5: SWAP2 000015e6: POP 000015e7: DUP1 000015e8: PUSH2 0x1674 000015eb: JUMPI 000015ec: PUSH1 0x40 000015ee: MLOAD 000015ef: PUSH32 0x252c09d700000000000000000000000000000000000000000000000000000000 00001610: DUP2 00001611: MSTORE 00001612: PUSH1 0x00 00001614: PUSH1 0x04 00001616: DUP3 00001617: ADD 00001618: MSTORE 00001619: PUSH1 0x01 0000161b: PUSH1 0x01 0000161d: PUSH1 0xa0 0000161f: SHL 00001620: SUB 00001621: DUP8 00001622: AND 00001623: SWAP1 00001624: PUSH4 0x252c09d7 00001629: SWAP1 0000162a: PUSH1 0x24 0000162c: ADD 0000162d: PUSH1 0x80 0000162f: PUSH1 0x40 00001631: MLOAD 00001632: DUP1 00001633: DUP4 00001634: SUB 00001635: DUP2 00001636: DUP7 00001637: GAS 00001638: STATICCALL 00001639: ISZERO 0000163a: DUP1 0000163b: ISZERO 0000163c: PUSH2 0x1649 0000163f: JUMPI 00001640: RETURNDATASIZE 00001641: PUSH1 0x00 00001643: DUP1 00001644: RETURNDATACOPY 00001645: RETURNDATASIZE 00001646: PUSH1 0x00 00001648: REVERT 00001649: JUMPDEST 0000164a: POP 0000164b: POP 0000164c: POP 0000164d: POP 0000164e: PUSH1 0x40 00001650: MLOAD 00001651: RETURNDATASIZE 00001652: PUSH1 0x1f 00001654: NOT 00001655: PUSH1 0x1f 00001657: DUP3 00001658: ADD 00001659: AND 0000165a: DUP3 0000165b: ADD 0000165c: DUP1 0000165d: PUSH1 0x40 0000165f: MSTORE 00001660: POP 00001661: DUP2 00001662: ADD 00001663: SWAP1 00001664: PUSH2 0x166d 00001667: SWAP2 00001668: SWAP1 00001669: PUSH2 0x25f3 0000166c: JUMP 0000166d: JUMPDEST 0000166e: POP 0000166f: SWAP2 00001670: SWAP4 00001671: POP 00001672: POP 00001673: POP 00001674: JUMPDEST 00001675: PUSH2 0x0b4b 00001678: DUP3 00001679: TIMESTAMP 0000167a: PUSH2 0x264b 0000167d: JUMP 0000167e: JUMPDEST 0000167f: PUSH1 0x00 00001681: DUP1 00001682: DUP3 00001683: PUSH4 0xffffffff 00001688: AND 00001689: PUSH1 0x00 0000168b: SUB 0000168c: PUSH2 0x16f1 0000168f: JUMPI 00001690: PUSH1 0x40 00001692: MLOAD 00001693: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000016b4: DUP2 000016b5: MSTORE 000016b6: PUSH1 0x20 000016b8: PUSH1 0x04 000016ba: DUP3 000016bb: ADD 000016bc: MSTORE 000016bd: PUSH1 0x02 000016bf: PUSH1 0x24 000016c1: DUP3 000016c2: ADD 000016c3: MSTORE 000016c4: PUSH32 0x4250000000000000000000000000000000000000000000000000000000000000 000016e5: PUSH1 0x44 000016e7: DUP3 000016e8: ADD 000016e9: MSTORE 000016ea: PUSH1 0x64 000016ec: ADD 000016ed: PUSH2 0x027a 000016f0: JUMP 000016f1: JUMPDEST 000016f2: PUSH1 0x40 000016f4: DUP1 000016f5: MLOAD 000016f6: PUSH1 0x02 000016f8: DUP1 000016f9: DUP3 000016fa: MSTORE 000016fb: PUSH1 0x60 000016fd: DUP3 000016fe: ADD 000016ff: DUP4 00001700: MSTORE 00001701: PUSH1 0x00 00001703: SWAP3 00001704: PUSH1 0x20 00001706: DUP4 00001707: ADD 00001708: SWAP1 00001709: DUP1 0000170a: CALLDATASIZE 0000170b: DUP4 0000170c: CALLDATACOPY 0000170d: ADD 0000170e: SWAP1 0000170f: POP 00001710: POP 00001711: SWAP1 00001712: POP 00001713: DUP4 00001714: DUP2 00001715: PUSH1 0x00 00001717: DUP2 00001718: MLOAD 00001719: DUP2 0000171a: LT 0000171b: PUSH2 0x1726 0000171e: JUMPI 0000171f: PUSH2 0x1726 00001722: PUSH2 0x2697 00001725: JUMP 00001726: JUMPDEST 00001727: PUSH1 0x20 00001729: MUL 0000172a: PUSH1 0x20 0000172c: ADD 0000172d: ADD 0000172e: SWAP1 0000172f: PUSH4 0xffffffff 00001734: AND 00001735: SWAP1 00001736: DUP2 00001737: PUSH4 0xffffffff 0000173c: AND 0000173d: DUP2 0000173e: MSTORE 0000173f: POP 00001740: POP 00001741: PUSH1 0x00 00001743: DUP2 00001744: PUSH1 0x01 00001746: DUP2 00001747: MLOAD 00001748: DUP2 00001749: LT 0000174a: PUSH2 0x1755 0000174d: JUMPI 0000174e: PUSH2 0x1755 00001751: PUSH2 0x2697 00001754: JUMP 00001755: JUMPDEST 00001756: PUSH1 0x20 00001758: MUL 00001759: PUSH1 0x20 0000175b: ADD 0000175c: ADD 0000175d: SWAP1 0000175e: PUSH4 0xffffffff 00001763: AND 00001764: SWAP1 00001765: DUP2 00001766: PUSH4 0xffffffff 0000176b: AND 0000176c: DUP2 0000176d: MSTORE 0000176e: POP 0000176f: POP 00001770: PUSH1 0x00 00001772: DUP1 00001773: DUP7 00001774: PUSH1 0x01 00001776: PUSH1 0x01 00001778: PUSH1 0xa0 0000177a: SHL 0000177b: SUB 0000177c: AND 0000177d: PUSH4 0x883bdbfd 00001782: DUP5 00001783: PUSH1 0x40 00001785: MLOAD 00001786: DUP3 00001787: PUSH4 0xffffffff 0000178c: AND 0000178d: PUSH1 0xe0 0000178f: SHL 00001790: DUP2 00001791: MSTORE 00001792: PUSH1 0x04 00001794: ADD 00001795: PUSH2 0x179e 00001798: SWAP2 00001799: SWAP1 0000179a: PUSH2 0x26c6 0000179d: JUMP 0000179e: JUMPDEST 0000179f: PUSH1 0x00 000017a1: PUSH1 0x40 000017a3: MLOAD 000017a4: DUP1 000017a5: DUP4 000017a6: SUB 000017a7: DUP2 000017a8: DUP7 000017a9: GAS 000017aa: STATICCALL 000017ab: ISZERO 000017ac: DUP1 000017ad: ISZERO 000017ae: PUSH2 0x17bb 000017b1: JUMPI 000017b2: RETURNDATASIZE 000017b3: PUSH1 0x00 000017b5: DUP1 000017b6: RETURNDATACOPY 000017b7: RETURNDATASIZE 000017b8: PUSH1 0x00 000017ba: REVERT 000017bb: JUMPDEST 000017bc: POP 000017bd: POP 000017be: POP 000017bf: POP 000017c0: PUSH1 0x40 000017c2: MLOAD 000017c3: RETURNDATASIZE 000017c4: PUSH1 0x00 000017c6: DUP3 000017c7: RETURNDATACOPY 000017c8: PUSH1 0x1f 000017ca: RETURNDATASIZE 000017cb: SWAP1 000017cc: DUP2 000017cd: ADD 000017ce: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000017ef: AND 000017f0: DUP3 000017f1: ADD 000017f2: PUSH1 0x40 000017f4: MSTORE 000017f5: PUSH2 0x1801 000017f8: SWAP2 000017f9: SWAP1 000017fa: DUP2 000017fb: ADD 000017fc: SWAP1 000017fd: PUSH2 0x27f7 00001800: JUMP 00001801: JUMPDEST 00001802: SWAP2 00001803: POP 00001804: SWAP2 00001805: POP 00001806: PUSH1 0x00 00001808: DUP3 00001809: PUSH1 0x00 0000180b: DUP2 0000180c: MLOAD 0000180d: DUP2 0000180e: LT 0000180f: PUSH2 0x181a 00001812: JUMPI 00001813: PUSH2 0x181a 00001816: PUSH2 0x2697 00001819: JUMP 0000181a: JUMPDEST 0000181b: PUSH1 0x20 0000181d: MUL 0000181e: PUSH1 0x20 00001820: ADD 00001821: ADD 00001822: MLOAD 00001823: DUP4 00001824: PUSH1 0x01 00001826: DUP2 00001827: MLOAD 00001828: DUP2 00001829: LT 0000182a: PUSH2 0x1835 0000182d: JUMPI 0000182e: PUSH2 0x1835 00001831: PUSH2 0x2697 00001834: JUMP 00001835: JUMPDEST 00001836: PUSH1 0x20 00001838: MUL 00001839: PUSH1 0x20 0000183b: ADD 0000183c: ADD 0000183d: MLOAD 0000183e: PUSH2 0x1847 00001841: SWAP2 00001842: SWAP1 00001843: PUSH2 0x28ba 00001846: JUMP 00001847: JUMPDEST 00001848: SWAP1 00001849: POP 0000184a: PUSH1 0x00 0000184c: DUP3 0000184d: PUSH1 0x00 0000184f: DUP2 00001850: MLOAD 00001851: DUP2 00001852: LT 00001853: PUSH2 0x185e 00001856: JUMPI 00001857: PUSH2 0x185e 0000185a: PUSH2 0x2697 0000185d: JUMP 0000185e: JUMPDEST 0000185f: PUSH1 0x20 00001861: MUL 00001862: PUSH1 0x20 00001864: ADD 00001865: ADD 00001866: MLOAD 00001867: DUP4 00001868: PUSH1 0x01 0000186a: DUP2 0000186b: MLOAD 0000186c: DUP2 0000186d: LT 0000186e: PUSH2 0x1879 00001871: JUMPI 00001872: PUSH2 0x1879 00001875: PUSH2 0x2697 00001878: JUMP 00001879: JUMPDEST 0000187a: PUSH1 0x20 0000187c: MUL 0000187d: PUSH1 0x20 0000187f: ADD 00001880: ADD 00001881: MLOAD 00001882: PUSH2 0x188b 00001885: SWAP2 00001886: SWAP1 00001887: PUSH2 0x28ff 0000188a: JUMP 0000188b: JUMPDEST 0000188c: SWAP1 0000188d: POP 0000188e: PUSH4 0xffffffff 00001893: DUP9 00001894: AND 00001895: PUSH2 0x189e 00001898: DUP2 00001899: DUP5 0000189a: PUSH2 0x291f 0000189d: JUMP 0000189e: JUMPDEST 0000189f: SWAP8 000018a0: POP 000018a1: PUSH1 0x00 000018a3: DUP4 000018a4: PUSH1 0x06 000018a6: SIGNEXTEND 000018a7: SLT 000018a8: DUP1 000018a9: ISZERO 000018aa: PUSH2 0x18be 000018ad: JUMPI 000018ae: POP 000018af: PUSH2 0x18b8 000018b2: DUP2 000018b3: DUP5 000018b4: PUSH2 0x2993 000018b7: JUMP 000018b8: JUMPDEST 000018b9: PUSH1 0x06 000018bb: SIGNEXTEND 000018bc: ISZERO 000018bd: ISZERO 000018be: JUMPDEST 000018bf: ISZERO 000018c0: PUSH2 0x18d1 000018c3: JUMPI 000018c4: DUP8 000018c5: PUSH2 0x18cd 000018c8: DUP2 000018c9: PUSH2 0x29b5 000018cc: JUMP 000018cd: JUMPDEST 000018ce: SWAP9 000018cf: POP 000018d0: POP 000018d1: JUMPDEST 000018d2: PUSH4 0xffffffff 000018d7: DUP10 000018d8: AND 000018d9: PUSH24 0xffffffffffffffffffffffffffffffffffffffff00000000 000018f2: PUSH1 0x20 000018f4: DUP5 000018f5: SWAP1 000018f6: SHL 000018f7: AND 000018f8: PUSH2 0x1908 000018fb: PUSH1 0x01 000018fd: PUSH1 0x01 000018ff: PUSH1 0xa0 00001901: SHL 00001902: SUB 00001903: DUP4 00001904: PUSH2 0x2a12 00001907: JUMP 00001908: JUMPDEST 00001909: PUSH2 0x1912 0000190c: SWAP2 0000190d: SWAP1 0000190e: PUSH2 0x2a55 00001911: JUMP 00001912: JUMPDEST 00001913: SWAP8 00001914: POP 00001915: POP 00001916: POP 00001917: POP 00001918: POP 00001919: POP 0000191a: POP 0000191b: POP 0000191c: SWAP3 0000191d: POP 0000191e: SWAP3 0000191f: SWAP1 00001920: POP 00001921: JUMP 00001922: JUMPDEST 00001923: PUSH1 0x00 00001925: DUP1 00001926: PUSH1 0x00 00001928: DUP4 00001929: PUSH1 0x02 0000192b: SIGNEXTEND 0000192c: SLT 0000192d: PUSH2 0x1939 00001930: JUMPI 00001931: DUP3 00001932: PUSH1 0x02 00001934: SIGNEXTEND 00001935: PUSH2 0x1946 00001938: JUMP 00001939: JUMPDEST 0000193a: DUP3 0000193b: PUSH1 0x02 0000193d: SIGNEXTEND 0000193e: PUSH2 0x1946 00001941: SWAP1 00001942: PUSH2 0x2a8c 00001945: JUMP 00001946: JUMPDEST 00001947: SWAP1 00001948: POP 00001949: PUSH2 0x1971 0000194c: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618 0000196d: PUSH2 0x2ac4 00001970: JUMP 00001971: JUMPDEST 00001972: PUSH1 0x02 00001974: SIGNEXTEND 00001975: DUP2 00001976: GT 00001977: ISZERO 00001978: PUSH2 0x19dd 0000197b: JUMPI 0000197c: PUSH1 0x40 0000197e: MLOAD 0000197f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000019a0: DUP2 000019a1: MSTORE 000019a2: PUSH1 0x20 000019a4: PUSH1 0x04 000019a6: DUP3 000019a7: ADD 000019a8: MSTORE 000019a9: PUSH1 0x01 000019ab: PUSH1 0x24 000019ad: DUP3 000019ae: ADD 000019af: MSTORE 000019b0: PUSH32 0x5400000000000000000000000000000000000000000000000000000000000000 000019d1: PUSH1 0x44 000019d3: DUP3 000019d4: ADD 000019d5: MSTORE 000019d6: PUSH1 0x64 000019d8: ADD 000019d9: PUSH2 0x027a 000019dc: JUMP 000019dd: JUMPDEST 000019de: PUSH1 0x00 000019e0: DUP2 000019e1: PUSH1 0x01 000019e3: AND 000019e4: PUSH1 0x00 000019e6: SUB 000019e7: PUSH2 0x1a01 000019ea: JUMPI 000019eb: PUSH17 0x0100000000000000000000000000000000 000019fd: PUSH2 0x1a13 00001a00: JUMP 00001a01: JUMPDEST 00001a02: PUSH16 0xfffcb933bd6fad37aa2d162d1a594001 00001a13: JUMPDEST 00001a14: PUSH17 0xffffffffffffffffffffffffffffffffff 00001a26: AND 00001a27: SWAP1 00001a28: POP 00001a29: PUSH1 0x02 00001a2b: DUP3 00001a2c: AND 00001a2d: ISZERO 00001a2e: PUSH2 0x1a52 00001a31: JUMPI 00001a32: PUSH1 0x80 00001a34: PUSH2 0x1a4d 00001a37: DUP3 00001a38: PUSH16 0xfff97272373d413259a46990580e213a 00001a49: PUSH2 0x2448 00001a4c: JUMP 00001a4d: JUMPDEST 00001a4e: SWAP1 00001a4f: SHR 00001a50: SWAP1 00001a51: POP 00001a52: JUMPDEST 00001a53: PUSH1 0x04 00001a55: DUP3 00001a56: AND 00001a57: ISZERO 00001a58: PUSH2 0x1a7c 00001a5b: JUMPI 00001a5c: PUSH1 0x80 00001a5e: PUSH2 0x1a77 00001a61: DUP3 00001a62: PUSH16 0xfff2e50f5f656932ef12357cf3c7fdcc 00001a73: PUSH2 0x2448 00001a76: JUMP 00001a77: JUMPDEST 00001a78: SWAP1 00001a79: SHR 00001a7a: SWAP1 00001a7b: POP 00001a7c: JUMPDEST 00001a7d: PUSH1 0x08 00001a7f: DUP3 00001a80: AND 00001a81: ISZERO 00001a82: PUSH2 0x1aa6 00001a85: JUMPI 00001a86: PUSH1 0x80 00001a88: PUSH2 0x1aa1 00001a8b: DUP3 00001a8c: PUSH16 0xffe5caca7e10e4e61c3624eaa0941cd0 00001a9d: PUSH2 0x2448 00001aa0: JUMP 00001aa1: JUMPDEST 00001aa2: SWAP1 00001aa3: SHR 00001aa4: SWAP1 00001aa5: POP 00001aa6: JUMPDEST 00001aa7: PUSH1 0x10 00001aa9: DUP3 00001aaa: AND 00001aab: ISZERO 00001aac: PUSH2 0x1ad0 00001aaf: JUMPI 00001ab0: PUSH1 0x80 00001ab2: PUSH2 0x1acb 00001ab5: DUP3 00001ab6: PUSH16 0xffcb9843d60f6159c9db58835c926644 00001ac7: PUSH2 0x2448 00001aca: JUMP 00001acb: JUMPDEST 00001acc: SWAP1 00001acd: SHR 00001ace: SWAP1 00001acf: POP 00001ad0: JUMPDEST 00001ad1: PUSH1 0x20 00001ad3: DUP3 00001ad4: AND 00001ad5: ISZERO 00001ad6: PUSH2 0x1afa 00001ad9: JUMPI 00001ada: PUSH1 0x80 00001adc: PUSH2 0x1af5 00001adf: DUP3 00001ae0: PUSH16 0xff973b41fa98c081472e6896dfb254c0 00001af1: PUSH2 0x2448 00001af4: JUMP 00001af5: JUMPDEST 00001af6: SWAP1 00001af7: SHR 00001af8: SWAP1 00001af9: POP 00001afa: JUMPDEST 00001afb: PUSH1 0x40 00001afd: DUP3 00001afe: AND 00001aff: ISZERO 00001b00: PUSH2 0x1b24 00001b03: JUMPI 00001b04: PUSH1 0x80 00001b06: PUSH2 0x1b1f 00001b09: DUP3 00001b0a: PUSH16 0xff2ea16466c96a3843ec78b326b52861 00001b1b: PUSH2 0x2448 00001b1e: JUMP 00001b1f: JUMPDEST 00001b20: SWAP1 00001b21: SHR 00001b22: SWAP1 00001b23: POP 00001b24: JUMPDEST 00001b25: PUSH1 0x80 00001b27: DUP3 00001b28: AND 00001b29: ISZERO 00001b2a: PUSH2 0x1b4e 00001b2d: JUMPI 00001b2e: PUSH1 0x80 00001b30: PUSH2 0x1b49 00001b33: DUP3 00001b34: PUSH16 0xfe5dee046a99a2a811c461f1969c3053 00001b45: PUSH2 0x2448 00001b48: JUMP 00001b49: JUMPDEST 00001b4a: SWAP1 00001b4b: SHR 00001b4c: SWAP1 00001b4d: POP 00001b4e: JUMPDEST 00001b4f: PUSH2 0x0100 00001b52: DUP3 00001b53: AND 00001b54: ISZERO 00001b55: PUSH2 0x1b79 00001b58: JUMPI 00001b59: PUSH1 0x80 00001b5b: PUSH2 0x1b74 00001b5e: DUP3 00001b5f: PUSH16 0xfcbe86c7900a88aedcffc83b479aa3a4 00001b70: PUSH2 0x2448 00001b73: JUMP 00001b74: JUMPDEST 00001b75: SWAP1 00001b76: SHR 00001b77: SWAP1 00001b78: POP 00001b79: JUMPDEST 00001b7a: PUSH2 0x0200 00001b7d: DUP3 00001b7e: AND 00001b7f: ISZERO 00001b80: PUSH2 0x1ba4 00001b83: JUMPI 00001b84: PUSH1 0x80 00001b86: PUSH2 0x1b9f 00001b89: DUP3 00001b8a: PUSH16 0xf987a7253ac413176f2b074cf7815e54 00001b9b: PUSH2 0x2448 00001b9e: JUMP 00001b9f: JUMPDEST 00001ba0: SWAP1 00001ba1: SHR 00001ba2: SWAP1 00001ba3: POP 00001ba4: JUMPDEST 00001ba5: PUSH2 0x0400 00001ba8: DUP3 00001ba9: AND 00001baa: ISZERO 00001bab: PUSH2 0x1bcf 00001bae: JUMPI 00001baf: PUSH1 0x80 00001bb1: PUSH2 0x1bca 00001bb4: DUP3 00001bb5: PUSH16 0xf3392b0822b70005940c7a398e4b70f3 00001bc6: PUSH2 0x2448 00001bc9: JUMP 00001bca: JUMPDEST 00001bcb: SWAP1 00001bcc: SHR 00001bcd: SWAP1 00001bce: POP 00001bcf: JUMPDEST 00001bd0: PUSH2 0x0800 00001bd3: DUP3 00001bd4: AND 00001bd5: ISZERO 00001bd6: PUSH2 0x1bfa 00001bd9: JUMPI 00001bda: PUSH1 0x80 00001bdc: PUSH2 0x1bf5 00001bdf: DUP3 00001be0: PUSH16 0xe7159475a2c29b7443b29c7fa6e889d9 00001bf1: PUSH2 0x2448 00001bf4: JUMP 00001bf5: JUMPDEST 00001bf6: SWAP1 00001bf7: SHR 00001bf8: SWAP1 00001bf9: POP 00001bfa: JUMPDEST 00001bfb: PUSH2 0x1000 00001bfe: DUP3 00001bff: AND 00001c00: ISZERO 00001c01: PUSH2 0x1c25 00001c04: JUMPI 00001c05: PUSH1 0x80 00001c07: PUSH2 0x1c20 00001c0a: DUP3 00001c0b: PUSH16 0xd097f3bdfd2022b8845ad8f792aa5825 00001c1c: PUSH2 0x2448 00001c1f: JUMP 00001c20: JUMPDEST 00001c21: SWAP1 00001c22: SHR 00001c23: SWAP1 00001c24: POP 00001c25: JUMPDEST 00001c26: PUSH2 0x2000 00001c29: DUP3 00001c2a: AND 00001c2b: ISZERO 00001c2c: PUSH2 0x1c50 00001c2f: JUMPI 00001c30: PUSH1 0x80 00001c32: PUSH2 0x1c4b 00001c35: DUP3 00001c36: PUSH16 0xa9f746462d870fdf8a65dc1f90e061e5 00001c47: PUSH2 0x2448 00001c4a: JUMP 00001c4b: JUMPDEST 00001c4c: SWAP1 00001c4d: SHR 00001c4e: SWAP1 00001c4f: POP 00001c50: JUMPDEST 00001c51: PUSH2 0x4000 00001c54: DUP3 00001c55: AND 00001c56: ISZERO 00001c57: PUSH2 0x1c7b 00001c5a: JUMPI 00001c5b: PUSH1 0x80 00001c5d: PUSH2 0x1c76 00001c60: DUP3 00001c61: PUSH16 0x70d869a156d2a1b890bb3df62baf32f7 00001c72: PUSH2 0x2448 00001c75: JUMP 00001c76: JUMPDEST 00001c77: SWAP1 00001c78: SHR 00001c79: SWAP1 00001c7a: POP 00001c7b: JUMPDEST 00001c7c: PUSH2 0x8000 00001c7f: DUP3 00001c80: AND 00001c81: ISZERO 00001c82: PUSH2 0x1ca6 00001c85: JUMPI 00001c86: PUSH1 0x80 00001c88: PUSH2 0x1ca1 00001c8b: DUP3 00001c8c: PUSH16 0x31be135f97d08fd981231505542fcfa6 00001c9d: PUSH2 0x2448 00001ca0: JUMP 00001ca1: JUMPDEST 00001ca2: SWAP1 00001ca3: SHR 00001ca4: SWAP1 00001ca5: POP 00001ca6: JUMPDEST 00001ca7: PUSH3 0x010000 00001cab: DUP3 00001cac: AND 00001cad: ISZERO 00001cae: PUSH2 0x1cd2 00001cb1: JUMPI 00001cb2: PUSH1 0x80 00001cb4: PUSH2 0x1ccd 00001cb7: DUP3 00001cb8: PUSH16 0x09aa508b5b7a84e1c677de54f3e99bc9 00001cc9: PUSH2 0x2448 00001ccc: JUMP 00001ccd: JUMPDEST 00001cce: SWAP1 00001ccf: SHR 00001cd0: SWAP1 00001cd1: POP 00001cd2: JUMPDEST 00001cd3: PUSH3 0x020000 00001cd7: DUP3 00001cd8: AND 00001cd9: ISZERO 00001cda: PUSH2 0x1cfd 00001cdd: JUMPI 00001cde: PUSH1 0x80 00001ce0: PUSH2 0x1cf8 00001ce3: DUP3 00001ce4: PUSH15 0x5d6af8dedb81196699c329225ee604 00001cf4: PUSH2 0x2448 00001cf7: JUMP 00001cf8: JUMPDEST 00001cf9: SWAP1 00001cfa: SHR 00001cfb: SWAP1 00001cfc: POP 00001cfd: JUMPDEST 00001cfe: PUSH3 0x040000 00001d02: DUP3 00001d03: AND 00001d04: ISZERO 00001d05: PUSH2 0x1d27 00001d08: JUMPI 00001d09: PUSH1 0x80 00001d0b: PUSH2 0x1d22 00001d0e: DUP3 00001d0f: PUSH14 0x2216e584f5fa1ea926041bedfe98 00001d1e: PUSH2 0x2448 00001d21: JUMP 00001d22: JUMPDEST 00001d23: SWAP1 00001d24: SHR 00001d25: SWAP1 00001d26: POP 00001d27: JUMPDEST 00001d28: PUSH3 0x080000 00001d2c: DUP3 00001d2d: AND 00001d2e: ISZERO 00001d2f: PUSH2 0x1d4f 00001d32: JUMPI 00001d33: PUSH1 0x80 00001d35: PUSH2 0x1d4a 00001d38: DUP3 00001d39: PUSH12 0x048a170391f7dc42444e8fa2 00001d46: PUSH2 0x2448 00001d49: JUMP 00001d4a: JUMPDEST 00001d4b: SWAP1 00001d4c: SHR 00001d4d: SWAP1 00001d4e: POP 00001d4f: JUMPDEST 00001d50: PUSH1 0x00 00001d52: DUP5 00001d53: PUSH1 0x02 00001d55: SIGNEXTEND 00001d56: SGT 00001d57: ISZERO 00001d58: PUSH2 0x1d88 00001d5b: JUMPI 00001d5c: PUSH2 0x1d85 00001d5f: DUP2 00001d60: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001d81: PUSH2 0x248e 00001d84: JUMP 00001d85: JUMPDEST 00001d86: SWAP1 00001d87: POP 00001d88: JUMPDEST 00001d89: PUSH2 0x1d97 00001d8c: PUSH5 0x0100000000 00001d92: DUP3 00001d93: PUSH2 0x2b02 00001d96: JUMP 00001d97: JUMPDEST 00001d98: ISZERO 00001d99: PUSH2 0x1da3 00001d9c: JUMPI 00001d9d: PUSH1 0x01 00001d9f: PUSH2 0x1da6 00001da2: JUMP 00001da3: JUMPDEST 00001da4: PUSH1 0x00 00001da6: JUMPDEST 00001da7: PUSH2 0x0e7c 00001daa: SWAP1 00001dab: PUSH1 0xff 00001dad: AND 00001dae: PUSH1 0x20 00001db0: DUP4 00001db1: SWAP1 00001db2: SHR 00001db3: PUSH2 0x24a2 00001db6: JUMP 00001db7: JUMPDEST 00001db8: PUSH1 0x00 00001dba: PUSH16 0xffffffffffffffffffffffffffffffff 00001dcb: PUSH1 0x01 00001dcd: PUSH1 0x01 00001dcf: PUSH1 0xa0 00001dd1: SHL 00001dd2: SUB 00001dd3: DUP7 00001dd4: AND 00001dd5: GT 00001dd6: PUSH2 0x1e5e 00001dd9: JUMPI 00001dda: PUSH1 0x00 00001ddc: PUSH2 0x1dee 00001ddf: PUSH1 0x01 00001de1: PUSH1 0x01 00001de3: PUSH1 0xa0 00001de5: SHL 00001de6: SUB 00001de7: DUP8 00001de8: AND 00001de9: DUP1 00001dea: PUSH2 0x2448 00001ded: JUMP 00001dee: JUMPDEST 00001def: SWAP1 00001df0: POP 00001df1: DUP3 00001df2: PUSH1 0x01 00001df4: PUSH1 0x01 00001df6: PUSH1 0xa0 00001df8: SHL 00001df9: SUB 00001dfa: AND 00001dfb: DUP5 00001dfc: PUSH1 0x01 00001dfe: PUSH1 0x01 00001e00: PUSH1 0xa0 00001e02: SHL 00001e03: SUB 00001e04: AND 00001e05: LT 00001e06: PUSH2 0x1e32 00001e09: JUMPI 00001e0a: PUSH2 0x1e2d 00001e0d: PUSH25 0x01000000000000000000000000000000000000000000000000 00001e27: DUP7 00001e28: DUP4 00001e29: PUSH2 0x203c 00001e2c: JUMP 00001e2d: JUMPDEST 00001e2e: PUSH2 0x1e56 00001e31: JUMP 00001e32: JUMPDEST 00001e33: PUSH2 0x1e56 00001e36: DUP2 00001e37: DUP7 00001e38: PUSH25 0x01000000000000000000000000000000000000000000000000 00001e52: PUSH2 0x203c 00001e55: JUMP 00001e56: JUMPDEST 00001e57: SWAP2 00001e58: POP 00001e59: POP 00001e5a: PUSH2 0x0e7c 00001e5d: JUMP 00001e5e: JUMPDEST 00001e5f: PUSH1 0x00 00001e61: PUSH2 0x1e7d 00001e64: PUSH1 0x01 00001e66: PUSH1 0x01 00001e68: PUSH1 0xa0 00001e6a: SHL 00001e6b: SUB 00001e6c: DUP8 00001e6d: AND 00001e6e: DUP1 00001e6f: PUSH9 0x010000000000000000 00001e79: PUSH2 0x203c 00001e7c: JUMP 00001e7d: JUMPDEST 00001e7e: SWAP1 00001e7f: POP 00001e80: DUP3 00001e81: PUSH1 0x01 00001e83: PUSH1 0x01 00001e85: PUSH1 0xa0 00001e87: SHL 00001e88: SUB 00001e89: AND 00001e8a: DUP5 00001e8b: PUSH1 0x01 00001e8d: PUSH1 0x01 00001e8f: PUSH1 0xa0 00001e91: SHL 00001e92: SUB 00001e93: AND 00001e94: LT 00001e95: PUSH2 0x1eb9 00001e98: JUMPI 00001e99: PUSH2 0x1eb4 00001e9c: PUSH17 0x0100000000000000000000000000000000 00001eae: DUP7 00001eaf: DUP4 00001eb0: PUSH2 0x203c 00001eb3: JUMP 00001eb4: JUMPDEST 00001eb5: PUSH2 0x0b4b 00001eb8: JUMP 00001eb9: JUMPDEST 00001eba: PUSH2 0x0b4b 00001ebd: DUP2 00001ebe: DUP7 00001ebf: PUSH17 0x0100000000000000000000000000000000 00001ed1: PUSH2 0x203c 00001ed4: JUMP 00001ed5: JUMPDEST 00001ed6: PUSH1 0x01 00001ed8: DUP1 00001ed9: SLOAD 00001eda: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00001efb: AND 00001efc: SWAP1 00001efd: SSTORE 00001efe: PUSH2 0x0cd9 00001f01: DUP2 00001f02: PUSH2 0x2137 00001f05: JUMP 00001f06: JUMPDEST 00001f07: PUSH1 0x40 00001f09: DUP1 00001f0a: MLOAD 00001f0b: PUSH1 0x01 00001f0d: PUSH1 0x01 00001f0f: PUSH1 0xa0 00001f11: SHL 00001f12: SUB 00001f13: DUP5 00001f14: AND 00001f15: PUSH1 0x24 00001f17: DUP3 00001f18: ADD 00001f19: MSTORE 00001f1a: PUSH1 0x44 00001f1c: DUP1 00001f1d: DUP3 00001f1e: ADD 00001f1f: DUP5 00001f20: SWAP1 00001f21: MSTORE 00001f22: DUP3 00001f23: MLOAD 00001f24: DUP1 00001f25: DUP4 00001f26: SUB 00001f27: SWAP1 00001f28: SWAP2 00001f29: ADD 00001f2a: DUP2 00001f2b: MSTORE 00001f2c: PUSH1 0x64 00001f2e: SWAP1 00001f2f: SWAP2 00001f30: ADD 00001f31: SWAP1 00001f32: SWAP2 00001f33: MSTORE 00001f34: PUSH1 0x20 00001f36: DUP2 00001f37: ADD 00001f38: DUP1 00001f39: MLOAD 00001f3a: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001f57: AND 00001f58: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 00001f79: OR 00001f7a: SWAP1 00001f7b: MSTORE 00001f7c: PUSH2 0x1f85 00001f7f: DUP5 00001f80: DUP3 00001f81: PUSH2 0x219f 00001f84: JUMP 00001f85: JUMPDEST 00001f86: PUSH2 0x116e 00001f89: JUMPI 00001f8a: PUSH1 0x40 00001f8c: MLOAD 00001f8d: PUSH1 0x01 00001f8f: PUSH1 0x01 00001f91: PUSH1 0xa0 00001f93: SHL 00001f94: SUB 00001f95: DUP5 00001f96: DUP2 00001f97: AND 00001f98: PUSH1 0x24 00001f9a: DUP4 00001f9b: ADD 00001f9c: MSTORE 00001f9d: PUSH1 0x00 00001f9f: PUSH1 0x44 00001fa1: DUP4 00001fa2: ADD 00001fa3: MSTORE 00001fa4: PUSH2 0x1fba 00001fa7: SWAP2 00001fa8: DUP7 00001fa9: SWAP2 00001faa: DUP3 00001fab: AND 00001fac: SWAP1 00001fad: PUSH4 0x095ea7b3 00001fb2: SWAP1 00001fb3: PUSH1 0x64 00001fb5: ADD 00001fb6: PUSH2 0x11a1 00001fb9: JUMP 00001fba: JUMPDEST 00001fbb: PUSH2 0x116e 00001fbe: DUP5 00001fbf: DUP3 00001fc0: JUMPDEST 00001fc1: PUSH1 0x00 00001fc3: PUSH2 0x1fd5 00001fc6: PUSH1 0x01 00001fc8: PUSH1 0x01 00001fca: PUSH1 0xa0 00001fcc: SHL 00001fcd: SUB 00001fce: DUP5 00001fcf: AND 00001fd0: DUP4 00001fd1: PUSH2 0x2249 00001fd4: JUMP 00001fd5: JUMPDEST 00001fd6: SWAP1 00001fd7: POP 00001fd8: DUP1 00001fd9: MLOAD 00001fda: PUSH1 0x00 00001fdc: EQ 00001fdd: ISZERO 00001fde: DUP1 00001fdf: ISZERO 00001fe0: PUSH2 0x1ffa 00001fe3: JUMPI 00001fe4: POP 00001fe5: DUP1 00001fe6: DUP1 00001fe7: PUSH1 0x20 00001fe9: ADD 00001fea: SWAP1 00001feb: MLOAD 00001fec: DUP2 00001fed: ADD 00001fee: SWAP1 00001fef: PUSH2 0x1ff8 00001ff2: SWAP2 00001ff3: SWAP1 00001ff4: PUSH2 0x2b16 00001ff7: JUMP 00001ff8: JUMPDEST 00001ff9: ISZERO 00001ffa: JUMPDEST 00001ffb: ISZERO 00001ffc: PUSH2 0x11e8 00001fff: JUMPI 00002000: PUSH1 0x40 00002002: MLOAD 00002003: PUSH32 0x5274afe700000000000000000000000000000000000000000000000000000000 00002024: DUP2 00002025: MSTORE 00002026: PUSH1 0x01 00002028: PUSH1 0x01 0000202a: PUSH1 0xa0 0000202c: SHL 0000202d: SUB 0000202e: DUP5 0000202f: AND 00002030: PUSH1 0x04 00002032: DUP3 00002033: ADD 00002034: MSTORE 00002035: PUSH1 0x24 00002037: ADD 00002038: PUSH2 0x027a 0000203b: JUMP 0000203c: JUMPDEST 0000203d: PUSH1 0x00 0000203f: DUP4 00002040: DUP4 00002041: MUL 00002042: DUP2 00002043: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00002064: DUP6 00002065: DUP8 00002066: MULMOD 00002067: DUP3 00002068: DUP2 00002069: LT 0000206a: DUP4 0000206b: DUP3 0000206c: SUB 0000206d: SUB 0000206e: SWAP2 0000206f: POP 00002070: POP 00002071: DUP1 00002072: PUSH1 0x00 00002074: SUB 00002075: PUSH2 0x2091 00002078: JUMPI 00002079: DUP4 0000207a: DUP3 0000207b: DUP2 0000207c: PUSH2 0x2087 0000207f: JUMPI 00002080: PUSH2 0x2087 00002083: PUSH2 0x245f 00002086: JUMP 00002087: JUMPDEST 00002088: DIV 00002089: SWAP3 0000208a: POP 0000208b: POP 0000208c: POP 0000208d: PUSH2 0x1326 00002090: JUMP 00002091: JUMPDEST 00002092: DUP1 00002093: DUP5 00002094: GT 00002095: PUSH2 0x20ca 00002098: JUMPI 00002099: PUSH1 0x40 0000209b: MLOAD 0000209c: PUSH32 0x227bc15300000000000000000000000000000000000000000000000000000000 000020bd: DUP2 000020be: MSTORE 000020bf: PUSH1 0x04 000020c1: ADD 000020c2: PUSH1 0x40 000020c4: MLOAD 000020c5: DUP1 000020c6: SWAP2 000020c7: SUB 000020c8: SWAP1 000020c9: REVERT 000020ca: JUMPDEST 000020cb: PUSH1 0x00 000020cd: DUP5 000020ce: DUP7 000020cf: DUP9 000020d0: MULMOD 000020d1: PUSH1 0x00 000020d3: DUP7 000020d4: DUP2 000020d5: SUB 000020d6: DUP8 000020d7: AND 000020d8: SWAP7 000020d9: DUP8 000020da: SWAP1 000020db: DIV 000020dc: SWAP7 000020dd: PUSH1 0x02 000020df: PUSH1 0x03 000020e1: DUP10 000020e2: MUL 000020e3: DUP2 000020e4: XOR 000020e5: DUP1 000020e6: DUP11 000020e7: MUL 000020e8: DUP3 000020e9: SUB 000020ea: MUL 000020eb: DUP1 000020ec: DUP11 000020ed: MUL 000020ee: DUP3 000020ef: SUB 000020f0: MUL 000020f1: DUP1 000020f2: DUP11 000020f3: MUL 000020f4: DUP3 000020f5: SUB 000020f6: MUL 000020f7: DUP1 000020f8: DUP11 000020f9: MUL 000020fa: DUP3 000020fb: SUB 000020fc: MUL 000020fd: DUP1 000020fe: DUP11 000020ff: MUL 00002100: DUP3 00002101: SUB 00002102: MUL 00002103: DUP1 00002104: DUP11 00002105: MUL 00002106: SWAP1 00002107: SWAP2 00002108: SUB 00002109: MUL 0000210a: SWAP2 0000210b: DUP2 0000210c: SWAP1 0000210d: SUB 0000210e: DUP2 0000210f: SWAP1 00002110: DIV 00002111: PUSH1 0x01 00002113: ADD 00002114: DUP7 00002115: DUP5 00002116: GT 00002117: SWAP1 00002118: SWAP6 00002119: SUB 0000211a: SWAP5 0000211b: SWAP1 0000211c: SWAP5 0000211d: MUL 0000211e: SWAP2 0000211f: SWAP1 00002120: SWAP5 00002121: SUB 00002122: SWAP3 00002123: SWAP1 00002124: SWAP3 00002125: DIV 00002126: SWAP2 00002127: SWAP1 00002128: SWAP2 00002129: OR 0000212a: SWAP2 0000212b: SWAP1 0000212c: SWAP2 0000212d: MUL 0000212e: SWAP2 0000212f: POP 00002130: POP 00002131: SWAP4 00002132: SWAP3 00002133: POP 00002134: POP 00002135: POP 00002136: JUMP 00002137: JUMPDEST 00002138: PUSH1 0x00 0000213a: DUP1 0000213b: SLOAD 0000213c: PUSH1 0x01 0000213e: PUSH1 0x01 00002140: PUSH1 0xa0 00002142: SHL 00002143: SUB 00002144: DUP4 00002145: DUP2 00002146: AND 00002147: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00002168: DUP4 00002169: AND 0000216a: DUP2 0000216b: OR 0000216c: DUP5 0000216d: SSTORE 0000216e: PUSH1 0x40 00002170: MLOAD 00002171: SWAP2 00002172: SWAP1 00002173: SWAP3 00002174: AND 00002175: SWAP3 00002176: DUP4 00002177: SWAP2 00002178: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00002199: SWAP2 0000219a: SWAP1 0000219b: LOG3 0000219c: POP 0000219d: POP 0000219e: JUMP 0000219f: JUMPDEST 000021a0: PUSH1 0x00 000021a2: DUP1 000021a3: PUSH1 0x00 000021a5: DUP5 000021a6: PUSH1 0x01 000021a8: PUSH1 0x01 000021aa: PUSH1 0xa0 000021ac: SHL 000021ad: SUB 000021ae: AND 000021af: DUP5 000021b0: PUSH1 0x40 000021b2: MLOAD 000021b3: PUSH2 0x21bc 000021b6: SWAP2 000021b7: SWAP1 000021b8: PUSH2 0x2b31 000021bb: JUMP 000021bc: JUMPDEST 000021bd: PUSH1 0x00 000021bf: PUSH1 0x40 000021c1: MLOAD 000021c2: DUP1 000021c3: DUP4 000021c4: SUB 000021c5: DUP2 000021c6: PUSH1 0x00 000021c8: DUP7 000021c9: GAS 000021ca: CALL 000021cb: SWAP2 000021cc: POP 000021cd: POP 000021ce: RETURNDATASIZE 000021cf: DUP1 000021d0: PUSH1 0x00 000021d2: DUP2 000021d3: EQ 000021d4: PUSH2 0x21f9 000021d7: JUMPI 000021d8: PUSH1 0x40 000021da: MLOAD 000021db: SWAP2 000021dc: POP 000021dd: PUSH1 0x1f 000021df: NOT 000021e0: PUSH1 0x3f 000021e2: RETURNDATASIZE 000021e3: ADD 000021e4: AND 000021e5: DUP3 000021e6: ADD 000021e7: PUSH1 0x40 000021e9: MSTORE 000021ea: RETURNDATASIZE 000021eb: DUP3 000021ec: MSTORE 000021ed: RETURNDATASIZE 000021ee: PUSH1 0x00 000021f0: PUSH1 0x20 000021f2: DUP5 000021f3: ADD 000021f4: RETURNDATACOPY 000021f5: PUSH2 0x21fe 000021f8: JUMP 000021f9: JUMPDEST 000021fa: PUSH1 0x60 000021fc: SWAP2 000021fd: POP 000021fe: JUMPDEST 000021ff: POP 00002200: SWAP2 00002201: POP 00002202: SWAP2 00002203: POP 00002204: DUP2 00002205: DUP1 00002206: ISZERO 00002207: PUSH2 0x2228 0000220a: JUMPI 0000220b: POP 0000220c: DUP1 0000220d: MLOAD 0000220e: ISZERO 0000220f: DUP1 00002210: PUSH2 0x2228 00002213: JUMPI 00002214: POP 00002215: DUP1 00002216: DUP1 00002217: PUSH1 0x20 00002219: ADD 0000221a: SWAP1 0000221b: MLOAD 0000221c: DUP2 0000221d: ADD 0000221e: SWAP1 0000221f: PUSH2 0x2228 00002222: SWAP2 00002223: SWAP1 00002224: PUSH2 0x2b16 00002227: JUMP 00002228: JUMPDEST 00002229: DUP1 0000222a: ISZERO 0000222b: PUSH2 0x223e 0000222e: JUMPI 0000222f: POP 00002230: PUSH1 0x00 00002232: DUP6 00002233: PUSH1 0x01 00002235: PUSH1 0x01 00002237: PUSH1 0xa0 00002239: SHL 0000223a: SUB 0000223b: AND 0000223c: EXTCODESIZE 0000223d: GT 0000223e: JUMPDEST 0000223f: SWAP3 00002240: POP 00002241: POP 00002242: POP 00002243: JUMPDEST 00002244: SWAP3 00002245: SWAP2 00002246: POP 00002247: POP 00002248: JUMP 00002249: JUMPDEST 0000224a: PUSH1 0x60 0000224c: PUSH2 0x1326 0000224f: DUP4 00002250: DUP4 00002251: PUSH1 0x00 00002253: DUP5 00002254: PUSH1 0x00 00002256: DUP1 00002257: DUP6 00002258: PUSH1 0x01 0000225a: PUSH1 0x01 0000225c: PUSH1 0xa0 0000225e: SHL 0000225f: SUB 00002260: AND 00002261: DUP5 00002262: DUP7 00002263: PUSH1 0x40 00002265: MLOAD 00002266: PUSH2 0x226f 00002269: SWAP2 0000226a: SWAP1 0000226b: PUSH2 0x2b31 0000226e: JUMP 0000226f: JUMPDEST 00002270: PUSH1 0x00 00002272: PUSH1 0x40 00002274: MLOAD 00002275: DUP1 00002276: DUP4 00002277: SUB 00002278: DUP2 00002279: DUP6 0000227a: DUP8 0000227b: GAS 0000227c: CALL 0000227d: SWAP3 0000227e: POP 0000227f: POP 00002280: POP 00002281: RETURNDATASIZE 00002282: DUP1 00002283: PUSH1 0x00 00002285: DUP2 00002286: EQ 00002287: PUSH2 0x22ac 0000228a: JUMPI 0000228b: PUSH1 0x40 0000228d: MLOAD 0000228e: SWAP2 0000228f: POP 00002290: PUSH1 0x1f 00002292: NOT 00002293: PUSH1 0x3f 00002295: RETURNDATASIZE 00002296: ADD 00002297: AND 00002298: DUP3 00002299: ADD 0000229a: PUSH1 0x40 0000229c: MSTORE 0000229d: RETURNDATASIZE 0000229e: DUP3 0000229f: MSTORE 000022a0: RETURNDATASIZE 000022a1: PUSH1 0x00 000022a3: PUSH1 0x20 000022a5: DUP5 000022a6: ADD 000022a7: RETURNDATACOPY 000022a8: PUSH2 0x22b1 000022ab: JUMP 000022ac: JUMPDEST 000022ad: PUSH1 0x60 000022af: SWAP2 000022b0: POP 000022b1: JUMPDEST 000022b2: POP 000022b3: SWAP2 000022b4: POP 000022b5: SWAP2 000022b6: POP 000022b7: PUSH2 0x0b4b 000022ba: DUP7 000022bb: DUP4 000022bc: DUP4 000022bd: PUSH1 0x60 000022bf: DUP3 000022c0: PUSH2 0x22d1 000022c3: JUMPI 000022c4: PUSH2 0x22cc 000022c7: DUP3 000022c8: PUSH2 0x2331 000022cb: JUMP 000022cc: JUMPDEST 000022cd: PUSH2 0x1326 000022d0: JUMP 000022d1: JUMPDEST 000022d2: DUP2 000022d3: MLOAD 000022d4: ISZERO 000022d5: DUP1 000022d6: ISZERO 000022d7: PUSH2 0x22e8 000022da: JUMPI 000022db: POP 000022dc: PUSH1 0x01 000022de: PUSH1 0x01 000022e0: PUSH1 0xa0 000022e2: SHL 000022e3: SUB 000022e4: DUP5 000022e5: AND 000022e6: EXTCODESIZE 000022e7: ISZERO 000022e8: JUMPDEST 000022e9: ISZERO 000022ea: PUSH2 0x232a 000022ed: JUMPI 000022ee: PUSH1 0x40 000022f0: MLOAD 000022f1: PUSH32 0x9996b31500000000000000000000000000000000000000000000000000000000 00002312: DUP2 00002313: MSTORE 00002314: PUSH1 0x01 00002316: PUSH1 0x01 00002318: PUSH1 0xa0 0000231a: SHL 0000231b: SUB 0000231c: DUP6 0000231d: AND 0000231e: PUSH1 0x04 00002320: DUP3 00002321: ADD 00002322: MSTORE 00002323: PUSH1 0x24 00002325: ADD 00002326: PUSH2 0x027a 00002329: JUMP 0000232a: JUMPDEST 0000232b: POP 0000232c: DUP1 0000232d: PUSH2 0x1326 00002330: JUMP 00002331: JUMPDEST 00002332: DUP1 00002333: MLOAD 00002334: ISZERO 00002335: PUSH2 0x2341 00002338: JUMPI 00002339: DUP1 0000233a: MLOAD 0000233b: DUP1 0000233c: DUP3 0000233d: PUSH1 0x20 0000233f: ADD 00002340: REVERT 00002341: JUMPDEST 00002342: PUSH1 0x40 00002344: MLOAD 00002345: PUSH32 0x1425ea4200000000000000000000000000000000000000000000000000000000 00002366: DUP2 00002367: MSTORE 00002368: PUSH1 0x04 0000236a: ADD 0000236b: PUSH1 0x40 0000236d: MLOAD 0000236e: DUP1 0000236f: SWAP2 00002370: SUB 00002371: SWAP1 00002372: REVERT 00002373: JUMPDEST 00002374: PUSH1 0x00 00002376: PUSH1 0x20 00002378: DUP3 00002379: DUP5 0000237a: SUB 0000237b: SLT 0000237c: ISZERO 0000237d: PUSH2 0x2385 00002380: JUMPI 00002381: PUSH1 0x00 00002383: DUP1 00002384: REVERT 00002385: JUMPDEST 00002386: POP 00002387: CALLDATALOAD 00002388: SWAP2 00002389: SWAP1 0000238a: POP 0000238b: JUMP 0000238c: JUMPDEST 0000238d: PUSH1 0x01 0000238f: PUSH1 0x01 00002391: PUSH1 0xa0 00002393: SHL 00002394: SUB 00002395: DUP2 00002396: AND 00002397: DUP2 00002398: EQ 00002399: PUSH2 0x0cd9 0000239c: JUMPI 0000239d: PUSH1 0x00 0000239f: DUP1 000023a0: REVERT 000023a1: JUMPDEST 000023a2: PUSH1 0x00 000023a4: PUSH1 0x20 000023a6: DUP3 000023a7: DUP5 000023a8: SUB 000023a9: SLT 000023aa: ISZERO 000023ab: PUSH2 0x23b3 000023ae: JUMPI 000023af: PUSH1 0x00 000023b1: DUP1 000023b2: REVERT 000023b3: JUMPDEST 000023b4: DUP2 000023b5: CALLDATALOAD 000023b6: PUSH2 0x1326 000023b9: DUP2 000023ba: PUSH2 0x238c 000023bd: JUMP 000023be: JUMPDEST 000023bf: PUSH4 0xffffffff 000023c4: DUP2 000023c5: AND 000023c6: DUP2 000023c7: EQ 000023c8: PUSH2 0x0cd9 000023cb: JUMPI 000023cc: PUSH1 0x00 000023ce: DUP1 000023cf: REVERT 000023d0: JUMPDEST 000023d1: PUSH1 0x00 000023d3: PUSH1 0x20 000023d5: DUP3 000023d6: DUP5 000023d7: SUB 000023d8: SLT 000023d9: ISZERO 000023da: PUSH2 0x23e2 000023dd: JUMPI 000023de: PUSH1 0x00 000023e0: DUP1 000023e1: REVERT 000023e2: JUMPDEST 000023e3: DUP2 000023e4: CALLDATALOAD 000023e5: PUSH2 0x1326 000023e8: DUP2 000023e9: PUSH2 0x23be 000023ec: JUMP 000023ed: JUMPDEST 000023ee: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 0000240f: PUSH1 0x00 00002411: MSTORE 00002412: PUSH1 0x11 00002414: PUSH1 0x04 00002416: MSTORE 00002417: PUSH1 0x24 00002419: PUSH1 0x00 0000241b: REVERT 0000241c: JUMPDEST 0000241d: DUP2 0000241e: DUP2 0000241f: SUB 00002420: DUP2 00002421: DUP2 00002422: GT 00002423: ISZERO 00002424: PUSH2 0x2243 00002427: JUMPI 00002428: PUSH2 0x2243 0000242b: PUSH2 0x23ed 0000242e: JUMP 0000242f: JUMPDEST 00002430: PUSH1 0x00 00002432: PUSH1 0x20 00002434: DUP3 00002435: DUP5 00002436: SUB 00002437: SLT 00002438: ISZERO 00002439: PUSH2 0x2441 0000243c: JUMPI 0000243d: PUSH1 0x00 0000243f: DUP1 00002440: REVERT 00002441: JUMPDEST 00002442: POP 00002443: MLOAD 00002444: SWAP2 00002445: SWAP1 00002446: POP 00002447: JUMP 00002448: JUMPDEST 00002449: DUP1 0000244a: DUP3 0000244b: MUL 0000244c: DUP2 0000244d: ISZERO 0000244e: DUP3 0000244f: DUP3 00002450: DIV 00002451: DUP5 00002452: EQ 00002453: OR 00002454: PUSH2 0x2243 00002457: JUMPI 00002458: PUSH2 0x2243 0000245b: PUSH2 0x23ed 0000245e: JUMP 0000245f: JUMPDEST 00002460: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002481: PUSH1 0x00 00002483: MSTORE 00002484: PUSH1 0x12 00002486: PUSH1 0x04 00002488: MSTORE 00002489: PUSH1 0x24 0000248b: PUSH1 0x00 0000248d: REVERT 0000248e: JUMPDEST 0000248f: PUSH1 0x00 00002491: DUP3 00002492: PUSH2 0x249d 00002495: JUMPI 00002496: PUSH2 0x249d 00002499: PUSH2 0x245f 0000249c: JUMP 0000249d: JUMPDEST 0000249e: POP 0000249f: DIV 000024a0: SWAP1 000024a1: JUMP 000024a2: JUMPDEST 000024a3: DUP1 000024a4: DUP3 000024a5: ADD 000024a6: DUP1 000024a7: DUP3 000024a8: GT 000024a9: ISZERO 000024aa: PUSH2 0x2243 000024ad: JUMPI 000024ae: PUSH2 0x2243 000024b1: PUSH2 0x23ed 000024b4: JUMP 000024b5: JUMPDEST 000024b6: PUSH4 0xffffffff 000024bb: DUP2 000024bc: DUP2 000024bd: AND 000024be: DUP4 000024bf: DUP3 000024c0: AND 000024c1: MUL 000024c2: DUP1 000024c3: DUP3 000024c4: AND 000024c5: SWAP2 000024c6: SWAP1 000024c7: DUP3 000024c8: DUP2 000024c9: EQ 000024ca: PUSH2 0x24d5 000024cd: JUMPI 000024ce: PUSH2 0x24d5 000024d1: PUSH2 0x23ed 000024d4: JUMP 000024d5: JUMPDEST 000024d6: POP 000024d7: POP 000024d8: SWAP3 000024d9: SWAP2 000024da: POP 000024db: POP 000024dc: JUMP 000024dd: JUMPDEST 000024de: DUP1 000024df: MLOAD 000024e0: PUSH2 0xffff 000024e3: DUP2 000024e4: AND 000024e5: DUP2 000024e6: EQ 000024e7: PUSH2 0x24ef 000024ea: JUMPI 000024eb: PUSH1 0x00 000024ed: DUP1 000024ee: REVERT 000024ef: JUMPDEST 000024f0: SWAP2 000024f1: SWAP1 000024f2: POP 000024f3: JUMP 000024f4: JUMPDEST 000024f5: DUP1 000024f6: MLOAD 000024f7: DUP1 000024f8: ISZERO 000024f9: ISZERO 000024fa: DUP2 000024fb: EQ 000024fc: PUSH2 0x24ef 000024ff: JUMPI 00002500: PUSH1 0x00 00002502: DUP1 00002503: REVERT 00002504: JUMPDEST 00002505: PUSH1 0x00 00002507: DUP1 00002508: PUSH1 0x00 0000250a: DUP1 0000250b: PUSH1 0x00 0000250d: DUP1 0000250e: PUSH1 0x00 00002510: PUSH1 0xe0 00002512: DUP9 00002513: DUP11 00002514: SUB 00002515: SLT 00002516: ISZERO 00002517: PUSH2 0x251f 0000251a: JUMPI 0000251b: PUSH1 0x00 0000251d: DUP1 0000251e: REVERT 0000251f: JUMPDEST 00002520: DUP8 00002521: MLOAD 00002522: PUSH2 0x252a 00002525: DUP2 00002526: PUSH2 0x238c 00002529: JUMP 0000252a: JUMPDEST 0000252b: DUP1 0000252c: SWAP8 0000252d: POP 0000252e: POP 0000252f: PUSH1 0x20 00002531: DUP9 00002532: ADD 00002533: MLOAD 00002534: DUP1 00002535: PUSH1 0x02 00002537: SIGNEXTEND 00002538: DUP2 00002539: EQ 0000253a: PUSH2 0x2542 0000253d: JUMPI 0000253e: PUSH1 0x00 00002540: DUP1 00002541: REVERT 00002542: JUMPDEST 00002543: SWAP6 00002544: POP 00002545: PUSH2 0x2550 00002548: PUSH1 0x40 0000254a: DUP10 0000254b: ADD 0000254c: PUSH2 0x24dd 0000254f: JUMP 00002550: JUMPDEST 00002551: SWAP5 00002552: POP 00002553: PUSH2 0x255e 00002556: PUSH1 0x60 00002558: DUP10 00002559: ADD 0000255a: PUSH2 0x24dd 0000255d: JUMP 0000255e: JUMPDEST 0000255f: SWAP4 00002560: POP 00002561: PUSH2 0x256c 00002564: PUSH1 0x80 00002566: DUP10 00002567: ADD 00002568: PUSH2 0x24dd 0000256b: JUMP 0000256c: JUMPDEST 0000256d: SWAP3 0000256e: POP 0000256f: PUSH1 0xa0 00002571: DUP9 00002572: ADD 00002573: MLOAD 00002574: PUSH1 0xff 00002576: DUP2 00002577: AND 00002578: DUP2 00002579: EQ 0000257a: PUSH2 0x2582 0000257d: JUMPI 0000257e: PUSH1 0x00 00002580: DUP1 00002581: REVERT 00002582: JUMPDEST 00002583: SWAP2 00002584: POP 00002585: PUSH2 0x2590 00002588: PUSH1 0xc0 0000258a: DUP10 0000258b: ADD 0000258c: PUSH2 0x24f4 0000258f: JUMP 00002590: JUMPDEST 00002591: SWAP1 00002592: POP 00002593: SWAP3 00002594: SWAP6 00002595: SWAP9 00002596: SWAP2 00002597: SWAP5 00002598: SWAP8 00002599: POP 0000259a: SWAP3 0000259b: SWAP6 0000259c: POP 0000259d: JUMP 0000259e: JUMPDEST 0000259f: PUSH2 0xffff 000025a2: DUP2 000025a3: DUP2 000025a4: AND 000025a5: DUP4 000025a6: DUP3 000025a7: AND 000025a8: ADD 000025a9: SWAP1 000025aa: DUP1 000025ab: DUP3 000025ac: GT 000025ad: ISZERO 000025ae: PUSH2 0x25b9 000025b1: JUMPI 000025b2: PUSH2 0x25b9 000025b5: PUSH2 0x23ed 000025b8: JUMP 000025b9: JUMPDEST 000025ba: POP 000025bb: SWAP3 000025bc: SWAP2 000025bd: POP 000025be: POP 000025bf: JUMP 000025c0: JUMPDEST 000025c1: PUSH1 0x00 000025c3: PUSH2 0xffff 000025c6: DUP1 000025c7: DUP5 000025c8: AND 000025c9: DUP1 000025ca: PUSH2 0x25d5 000025cd: JUMPI 000025ce: PUSH2 0x25d5 000025d1: PUSH2 0x245f 000025d4: JUMP 000025d5: JUMPDEST 000025d6: SWAP3 000025d7: AND 000025d8: SWAP2 000025d9: SWAP1 000025da: SWAP2 000025db: MOD 000025dc: SWAP3 000025dd: SWAP2 000025de: POP 000025df: POP 000025e0: JUMP 000025e1: JUMPDEST 000025e2: DUP1 000025e3: MLOAD 000025e4: PUSH1 0x06 000025e6: DUP2 000025e7: SWAP1 000025e8: SIGNEXTEND 000025e9: DUP2 000025ea: EQ 000025eb: PUSH2 0x24ef 000025ee: JUMPI 000025ef: PUSH1 0x00 000025f1: DUP1 000025f2: REVERT 000025f3: JUMPDEST 000025f4: PUSH1 0x00 000025f6: DUP1 000025f7: PUSH1 0x00 000025f9: DUP1 000025fa: PUSH1 0x80 000025fc: DUP6 000025fd: DUP8 000025fe: SUB 000025ff: SLT 00002600: ISZERO 00002601: PUSH2 0x2609 00002604: JUMPI 00002605: PUSH1 0x00 00002607: DUP1 00002608: REVERT 00002609: JUMPDEST 0000260a: DUP5 0000260b: MLOAD 0000260c: PUSH2 0x2614 0000260f: DUP2 00002610: PUSH2 0x23be 00002613: JUMP 00002614: JUMPDEST 00002615: SWAP4 00002616: POP 00002617: PUSH2 0x2622 0000261a: PUSH1 0x20 0000261c: DUP7 0000261d: ADD 0000261e: PUSH2 0x25e1 00002621: JUMP 00002622: JUMPDEST 00002623: SWAP3 00002624: POP 00002625: PUSH1 0x40 00002627: DUP6 00002628: ADD 00002629: MLOAD 0000262a: PUSH2 0x2632 0000262d: DUP2 0000262e: PUSH2 0x238c 00002631: JUMP 00002632: JUMPDEST 00002633: SWAP2 00002634: POP 00002635: PUSH2 0x2640 00002638: PUSH1 0x60 0000263a: DUP7 0000263b: ADD 0000263c: PUSH2 0x24f4 0000263f: JUMP 00002640: JUMPDEST 00002641: SWAP1 00002642: POP 00002643: SWAP3 00002644: SWAP6 00002645: SWAP2 00002646: SWAP5 00002647: POP 00002648: SWAP3 00002649: POP 0000264a: JUMP 0000264b: JUMPDEST 0000264c: PUSH4 0xffffffff 00002651: DUP3 00002652: DUP2 00002653: AND 00002654: DUP3 00002655: DUP3 00002656: AND 00002657: SUB 00002658: SWAP1 00002659: DUP1 0000265a: DUP3 0000265b: GT 0000265c: ISZERO 0000265d: PUSH2 0x25b9 00002660: JUMPI 00002661: PUSH2 0x25b9 00002664: PUSH2 0x23ed 00002667: JUMP 00002668: JUMPDEST 00002669: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 0000268a: PUSH1 0x00 0000268c: MSTORE 0000268d: PUSH1 0x41 0000268f: PUSH1 0x04 00002691: MSTORE 00002692: PUSH1 0x24 00002694: PUSH1 0x00 00002696: REVERT 00002697: JUMPDEST 00002698: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 000026b9: PUSH1 0x00 000026bb: MSTORE 000026bc: PUSH1 0x32 000026be: PUSH1 0x04 000026c0: MSTORE 000026c1: PUSH1 0x24 000026c3: PUSH1 0x00 000026c5: REVERT 000026c6: JUMPDEST 000026c7: PUSH1 0x20 000026c9: DUP1 000026ca: DUP3 000026cb: MSTORE 000026cc: DUP3 000026cd: MLOAD 000026ce: DUP3 000026cf: DUP3 000026d0: ADD 000026d1: DUP2 000026d2: SWAP1 000026d3: MSTORE 000026d4: PUSH1 0x00 000026d6: SWAP2 000026d7: SWAP1 000026d8: DUP5 000026d9: DUP3 000026da: ADD 000026db: SWAP1 000026dc: PUSH1 0x40 000026de: DUP6 000026df: ADD 000026e0: SWAP1 000026e1: DUP5 000026e2: JUMPDEST 000026e3: DUP2 000026e4: DUP2 000026e5: LT 000026e6: ISZERO 000026e7: PUSH2 0x2704 000026ea: JUMPI 000026eb: DUP4 000026ec: MLOAD 000026ed: PUSH4 0xffffffff 000026f2: AND 000026f3: DUP4 000026f4: MSTORE 000026f5: SWAP3 000026f6: DUP5 000026f7: ADD 000026f8: SWAP3 000026f9: SWAP2 000026fa: DUP5 000026fb: ADD 000026fc: SWAP2 000026fd: PUSH1 0x01 000026ff: ADD 00002700: PUSH2 0x26e2 00002703: JUMP 00002704: JUMPDEST 00002705: POP 00002706: SWAP1 00002707: SWAP7 00002708: SWAP6 00002709: POP 0000270a: POP 0000270b: POP 0000270c: POP 0000270d: POP 0000270e: POP 0000270f: JUMP 00002710: JUMPDEST 00002711: PUSH1 0x40 00002713: MLOAD 00002714: PUSH1 0x1f 00002716: DUP3 00002717: ADD 00002718: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00002739: AND 0000273a: DUP2 0000273b: ADD 0000273c: PUSH8 0xffffffffffffffff 00002745: DUP2 00002746: GT 00002747: DUP3 00002748: DUP3 00002749: LT 0000274a: OR 0000274b: ISZERO 0000274c: PUSH2 0x2757 0000274f: JUMPI 00002750: PUSH2 0x2757 00002753: PUSH2 0x2668 00002756: JUMP 00002757: JUMPDEST 00002758: PUSH1 0x40 0000275a: MSTORE 0000275b: SWAP2 0000275c: SWAP1 0000275d: POP 0000275e: JUMP 0000275f: JUMPDEST 00002760: PUSH1 0x00 00002762: PUSH8 0xffffffffffffffff 0000276b: DUP3 0000276c: GT 0000276d: ISZERO 0000276e: PUSH2 0x2779 00002771: JUMPI 00002772: PUSH2 0x2779 00002775: PUSH2 0x2668 00002778: JUMP 00002779: JUMPDEST 0000277a: POP 0000277b: PUSH1 0x05 0000277d: SHL 0000277e: PUSH1 0x20 00002780: ADD 00002781: SWAP1 00002782: JUMP 00002783: JUMPDEST 00002784: PUSH1 0x00 00002786: DUP3 00002787: PUSH1 0x1f 00002789: DUP4 0000278a: ADD 0000278b: SLT 0000278c: PUSH2 0x2794 0000278f: JUMPI 00002790: PUSH1 0x00 00002792: DUP1 00002793: REVERT 00002794: JUMPDEST 00002795: DUP2 00002796: MLOAD 00002797: PUSH1 0x20 00002799: PUSH2 0x27a9 0000279c: PUSH2 0x27a4 0000279f: DUP4 000027a0: PUSH2 0x275f 000027a3: JUMP 000027a4: JUMPDEST 000027a5: PUSH2 0x2710 000027a8: JUMP 000027a9: JUMPDEST 000027aa: DUP3 000027ab: DUP2 000027ac: MSTORE 000027ad: PUSH1 0x05 000027af: SWAP3 000027b0: SWAP1 000027b1: SWAP3 000027b2: SHL 000027b3: DUP5 000027b4: ADD 000027b5: DUP2 000027b6: ADD 000027b7: SWAP2 000027b8: DUP2 000027b9: DUP2 000027ba: ADD 000027bb: SWAP1 000027bc: DUP7 000027bd: DUP5 000027be: GT 000027bf: ISZERO 000027c0: PUSH2 0x27c8 000027c3: JUMPI 000027c4: PUSH1 0x00 000027c6: DUP1 000027c7: REVERT 000027c8: JUMPDEST 000027c9: DUP3 000027ca: DUP7 000027cb: ADD 000027cc: JUMPDEST 000027cd: DUP5 000027ce: DUP2 000027cf: LT 000027d0: ISZERO 000027d1: PUSH2 0x27ec 000027d4: JUMPI 000027d5: DUP1 000027d6: MLOAD 000027d7: PUSH2 0x27df 000027da: DUP2 000027db: PUSH2 0x238c 000027de: JUMP 000027df: JUMPDEST 000027e0: DUP4 000027e1: MSTORE 000027e2: SWAP2 000027e3: DUP4 000027e4: ADD 000027e5: SWAP2 000027e6: DUP4 000027e7: ADD 000027e8: PUSH2 0x27cc 000027eb: JUMP 000027ec: JUMPDEST 000027ed: POP 000027ee: SWAP7 000027ef: SWAP6 000027f0: POP 000027f1: POP 000027f2: POP 000027f3: POP 000027f4: POP 000027f5: POP 000027f6: JUMP 000027f7: JUMPDEST 000027f8: PUSH1 0x00 000027fa: DUP1 000027fb: PUSH1 0x40 000027fd: DUP4 000027fe: DUP6 000027ff: SUB 00002800: SLT 00002801: ISZERO 00002802: PUSH2 0x280a 00002805: JUMPI 00002806: PUSH1 0x00 00002808: DUP1 00002809: REVERT 0000280a: JUMPDEST 0000280b: DUP3 0000280c: MLOAD 0000280d: PUSH8 0xffffffffffffffff 00002816: DUP1 00002817: DUP3 00002818: GT 00002819: ISZERO 0000281a: PUSH2 0x2822 0000281d: JUMPI 0000281e: PUSH1 0x00 00002820: DUP1 00002821: REVERT 00002822: JUMPDEST 00002823: DUP2 00002824: DUP6 00002825: ADD 00002826: SWAP2 00002827: POP 00002828: DUP6 00002829: PUSH1 0x1f 0000282b: DUP4 0000282c: ADD 0000282d: SLT 0000282e: PUSH2 0x2836 00002831: JUMPI 00002832: PUSH1 0x00 00002834: DUP1 00002835: REVERT 00002836: JUMPDEST 00002837: DUP2 00002838: MLOAD 00002839: PUSH1 0x20 0000283b: PUSH2 0x2846 0000283e: PUSH2 0x27a4 00002841: DUP4 00002842: PUSH2 0x275f 00002845: JUMP 00002846: JUMPDEST 00002847: DUP3 00002848: DUP2 00002849: MSTORE 0000284a: PUSH1 0x05 0000284c: SWAP3 0000284d: SWAP1 0000284e: SWAP3 0000284f: SHL 00002850: DUP5 00002851: ADD 00002852: DUP2 00002853: ADD 00002854: SWAP2 00002855: DUP2 00002856: DUP2 00002857: ADD 00002858: SWAP1 00002859: DUP10 0000285a: DUP5 0000285b: GT 0000285c: ISZERO 0000285d: PUSH2 0x2865 00002860: JUMPI 00002861: PUSH1 0x00 00002863: DUP1 00002864: REVERT 00002865: JUMPDEST 00002866: SWAP5 00002867: DUP3 00002868: ADD 00002869: SWAP5 0000286a: JUMPDEST 0000286b: DUP4 0000286c: DUP7 0000286d: LT 0000286e: ISZERO 0000286f: PUSH2 0x288a 00002872: JUMPI 00002873: PUSH2 0x287b 00002876: DUP7 00002877: PUSH2 0x25e1 0000287a: JUMP 0000287b: JUMPDEST 0000287c: DUP3 0000287d: MSTORE 0000287e: SWAP5 0000287f: DUP3 00002880: ADD 00002881: SWAP5 00002882: SWAP1 00002883: DUP3 00002884: ADD 00002885: SWAP1 00002886: PUSH2 0x286a 00002889: JUMP 0000288a: JUMPDEST 0000288b: SWAP2 0000288c: DUP9 0000288d: ADD 0000288e: MLOAD 0000288f: SWAP2 00002890: SWAP7 00002891: POP 00002892: SWAP1 00002893: SWAP4 00002894: POP 00002895: POP 00002896: POP 00002897: DUP1 00002898: DUP3 00002899: GT 0000289a: ISZERO 0000289b: PUSH2 0x28a3 0000289e: JUMPI 0000289f: PUSH1 0x00 000028a1: DUP1 000028a2: REVERT 000028a3: JUMPDEST 000028a4: POP 000028a5: PUSH2 0x28b0 000028a8: DUP6 000028a9: DUP3 000028aa: DUP7 000028ab: ADD 000028ac: PUSH2 0x2783 000028af: JUMP 000028b0: JUMPDEST 000028b1: SWAP2 000028b2: POP 000028b3: POP 000028b4: SWAP3 000028b5: POP 000028b6: SWAP3 000028b7: SWAP1 000028b8: POP 000028b9: JUMP 000028ba: JUMPDEST 000028bb: PUSH1 0x06 000028bd: DUP3 000028be: DUP2 000028bf: SIGNEXTEND 000028c0: SWAP1 000028c1: DUP3 000028c2: SWAP1 000028c3: SIGNEXTEND 000028c4: SUB 000028c5: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000 000028e6: DUP2 000028e7: SLT 000028e8: PUSH7 0x7fffffffffffff 000028f0: DUP3 000028f1: SGT 000028f2: OR 000028f3: ISZERO 000028f4: PUSH2 0x2243 000028f7: JUMPI 000028f8: PUSH2 0x2243 000028fb: PUSH2 0x23ed 000028fe: JUMP 000028ff: JUMPDEST 00002900: PUSH1 0x01 00002902: PUSH1 0x01 00002904: PUSH1 0xa0 00002906: SHL 00002907: SUB 00002908: DUP3 00002909: DUP2 0000290a: AND 0000290b: DUP3 0000290c: DUP3 0000290d: AND 0000290e: SUB 0000290f: SWAP1 00002910: DUP1 00002911: DUP3 00002912: GT 00002913: ISZERO 00002914: PUSH2 0x25b9 00002917: JUMPI 00002918: PUSH2 0x25b9 0000291b: PUSH2 0x23ed 0000291e: JUMP 0000291f: JUMPDEST 00002920: PUSH1 0x00 00002922: DUP2 00002923: PUSH1 0x06 00002925: SIGNEXTEND 00002926: DUP4 00002927: PUSH1 0x06 00002929: SIGNEXTEND 0000292a: DUP1 0000292b: PUSH2 0x2936 0000292e: JUMPI 0000292f: PUSH2 0x2936 00002932: PUSH2 0x245f 00002935: JUMP 00002936: JUMPDEST 00002937: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00002958: DUP2 00002959: EQ 0000295a: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000 0000297b: DUP4 0000297c: EQ 0000297d: AND 0000297e: ISZERO 0000297f: PUSH2 0x298a 00002982: JUMPI 00002983: PUSH2 0x298a 00002986: PUSH2 0x23ed 00002989: JUMP 0000298a: JUMPDEST 0000298b: SWAP1 0000298c: SDIV 0000298d: SWAP4 0000298e: SWAP3 0000298f: POP 00002990: POP 00002991: POP 00002992: JUMP 00002993: JUMPDEST 00002994: PUSH1 0x00 00002996: DUP3 00002997: PUSH1 0x06 00002999: SIGNEXTEND 0000299a: DUP1 0000299b: PUSH2 0x29a6 0000299e: JUMPI 0000299f: PUSH2 0x29a6 000029a2: PUSH2 0x245f 000029a5: JUMP 000029a6: JUMPDEST 000029a7: DUP1 000029a8: DUP4 000029a9: PUSH1 0x06 000029ab: SIGNEXTEND 000029ac: SMOD 000029ad: SWAP2 000029ae: POP 000029af: POP 000029b0: SWAP3 000029b1: SWAP2 000029b2: POP 000029b3: POP 000029b4: JUMP 000029b5: JUMPDEST 000029b6: PUSH1 0x00 000029b8: DUP2 000029b9: PUSH1 0x02 000029bb: SIGNEXTEND 000029bc: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000 000029dd: DUP2 000029de: SUB 000029df: PUSH2 0x29ea 000029e2: JUMPI 000029e3: PUSH2 0x29ea 000029e6: PUSH2 0x23ed 000029e9: JUMP 000029ea: JUMPDEST 000029eb: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00002a0c: ADD 00002a0d: SWAP3 00002a0e: SWAP2 00002a0f: POP 00002a10: POP 00002a11: JUMP 00002a12: JUMPDEST 00002a13: PUSH24 0xffffffffffffffffffffffffffffffffffffffffffffffff 00002a2c: DUP3 00002a2d: DUP2 00002a2e: AND 00002a2f: DUP3 00002a30: DUP3 00002a31: AND 00002a32: DUP2 00002a33: DUP2 00002a34: MUL 00002a35: DUP4 00002a36: AND 00002a37: SWAP3 00002a38: SWAP2 00002a39: DUP2 00002a3a: ISZERO 00002a3b: DUP3 00002a3c: DUP6 00002a3d: DIV 00002a3e: DUP3 00002a3f: EQ 00002a40: OR 00002a41: PUSH2 0x2a4c 00002a44: JUMPI 00002a45: PUSH2 0x2a4c 00002a48: PUSH2 0x23ed 00002a4b: JUMP 00002a4c: JUMPDEST 00002a4d: POP 00002a4e: POP 00002a4f: POP 00002a50: SWAP3 00002a51: SWAP2 00002a52: POP 00002a53: POP 00002a54: JUMP 00002a55: JUMPDEST 00002a56: PUSH1 0x00 00002a58: PUSH24 0xffffffffffffffffffffffffffffffffffffffffffffffff 00002a71: DUP1 00002a72: DUP5 00002a73: AND 00002a74: DUP1 00002a75: PUSH2 0x2a80 00002a78: JUMPI 00002a79: PUSH2 0x2a80 00002a7c: PUSH2 0x245f 00002a7f: JUMP 00002a80: JUMPDEST 00002a81: SWAP3 00002a82: AND 00002a83: SWAP2 00002a84: SWAP1 00002a85: SWAP2 00002a86: DIV 00002a87: SWAP3 00002a88: SWAP2 00002a89: POP 00002a8a: POP 00002a8b: JUMP 00002a8c: JUMPDEST 00002a8d: PUSH1 0x00 00002a8f: PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 00002ab0: DUP3 00002ab1: SUB 00002ab2: PUSH2 0x2abd 00002ab5: JUMPI 00002ab6: PUSH2 0x2abd 00002ab9: PUSH2 0x23ed 00002abc: JUMP 00002abd: JUMPDEST 00002abe: POP 00002abf: PUSH1 0x00 00002ac1: SUB 00002ac2: SWAP1 00002ac3: JUMP 00002ac4: JUMPDEST 00002ac5: PUSH1 0x00 00002ac7: DUP2 00002ac8: PUSH1 0x02 00002aca: SIGNEXTEND 00002acb: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000 00002aec: DUP2 00002aed: SUB 00002aee: PUSH2 0x2af9 00002af1: JUMPI 00002af2: PUSH2 0x2af9 00002af5: PUSH2 0x23ed 00002af8: JUMP 00002af9: JUMPDEST 00002afa: PUSH1 0x00 00002afc: SUB 00002afd: SWAP3 00002afe: SWAP2 00002aff: POP 00002b00: POP 00002b01: JUMP 00002b02: JUMPDEST 00002b03: PUSH1 0x00 00002b05: DUP3 00002b06: PUSH2 0x2b11 00002b09: JUMPI 00002b0a: PUSH2 0x2b11 00002b0d: PUSH2 0x245f 00002b10: JUMP 00002b11: JUMPDEST 00002b12: POP 00002b13: MOD 00002b14: SWAP1 00002b15: JUMP 00002b16: JUMPDEST 00002b17: PUSH1 0x00 00002b19: PUSH1 0x20 00002b1b: DUP3 00002b1c: DUP5 00002b1d: SUB 00002b1e: SLT 00002b1f: ISZERO 00002b20: PUSH2 0x2b28 00002b23: JUMPI 00002b24: PUSH1 0x00 00002b26: DUP1 00002b27: REVERT 00002b28: JUMPDEST 00002b29: PUSH2 0x1326 00002b2c: DUP3 00002b2d: PUSH2 0x24f4 00002b30: JUMP 00002b31: JUMPDEST 00002b32: PUSH1 0x00 00002b34: DUP3 00002b35: MLOAD 00002b36: PUSH1 0x00 00002b38: JUMPDEST 00002b39: DUP2 00002b3a: DUP2 00002b3b: LT 00002b3c: ISZERO 00002b3d: PUSH2 0x2b52 00002b40: JUMPI 00002b41: PUSH1 0x20 00002b43: DUP2 00002b44: DUP7 00002b45: ADD 00002b46: DUP2 00002b47: ADD 00002b48: MLOAD 00002b49: DUP6 00002b4a: DUP4 00002b4b: ADD 00002b4c: MSTORE 00002b4d: ADD 00002b4e: PUSH2 0x2b38 00002b51: JUMP 00002b52: JUMPDEST 00002b53: POP 00002b54: PUSH1 0x00 00002b56: SWAP3 00002b57: ADD 00002b58: SWAP2 00002b59: DUP3 00002b5a: MSTORE 00002b5b: POP 00002b5c: SWAP2 00002b5d: SWAP1 00002b5e: POP 00002b5f: JUMP 00002b60: INVALID 00002b61: LOG1 00002b62: PUSH5 0x736f6c6343 00002b68: STOP 00002b69: ADDMOD 00002b6a: EQ 00002b6b: STOP 00002b6c: EXP
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | auth | detector | Authorization based on tx.origin | 70 | no | — |
viewvalidation_json{
"reason": "missing sink mapping",
"status": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xe30c3978",
"selector": "0xe30c3978",
"calldata_variants": [
"0xe30c3978",
"0xe30c39780000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf0fa55a9",
"selector": "0xf0fa55a9",
"calldata_variants": [
"0xf0fa55a9",
"0xf0fa55a90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbc7576d3",
"selector": "0xbc7576d3",
"calldata_variants": [
"0xbc7576d3",
"0xbc7576d30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc9ae5e0a",
"selector": "0xc9ae5e0a",
"calldata_variants": [
"0xc9ae5e0a",
"0xc9ae5e0a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcce0d6fb",
"selector": "0xcce0d6fb",
"calldata_variants": [
"0xcce0d6fb",
"0xcce0d6fb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa2b6eef0",
"selector": "0xa2b6eef0",
"calldata_variants": [
"0xa2b6eef0",
"0xa2b6eef00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaf97d3bd",
"selector": "0xaf97d3bd",
"calldata_variants": [
"0xaf97d3bd",
"0xaf97d3bd0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 416,
"type": "msg_sender_eq_const",
"value": 1.0970776880180083e+48
},
{
"pc": 1381,
"type": "tx_origin_used"
},
{
"pc": 394,
"type": "msg_sender_eq_const",
"value": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
},
{
"pc": 1380,
"type": "tx_origin_used"
}
]
}
|
| medium | oracle | codex | TWAP can collapse to spot price, enabling price manipulation around buy/burn swaps | 75 | no | — |
viewevidence_json{
"evidence": "Both buy functions derive `amountOutMinimum` from `getTitanQuoteForEth`/`getDragonQuoteForTitan`, which cap the TWAP window by `oldestObservation` and fall back to `pool.slot0()` (spot price) when `secondsAgo == 0`, making the min-out manipulable when the pool has limited observations.",
"locations": [
"contracts/contracts/TitanBuy.sol:196",
"contracts/contracts/TitanBuy.sol:371",
"contracts/contracts/TitanBuy.sol:389",
"contracts/contracts/DragonBuyAndBurn.sol:246",
"contracts/contracts/DragonBuyAndBurn.sol:544",
"contracts/contracts/DragonBuyAndBurn.sol:623"
],
"recommendation": "Require a minimum TWAP window and revert if `oldestObservation` is below the configured window instead of falling back to spot price. Consider enforcing a longer minimum TWAP, delaying public buy calls until sufficient observations exist, or using an independent oracle (e.g., Chainlink) for min-out calculations.",
"exploit_scenario": "An attacker can manipulate the WETH/TitanX and/or DragonX/TitanX Uniswap V3 pools (especially when observation history is short) so `secondsAgo` becomes 0 or very small, causing the contracts to use spot/short-TWAP prices for `amountOutMinimum`. The attacker then calls `buyTitanX()` or `buyAndBurnDragonX()` in the same block, allowing the swap to execute at an unfavorable price and extracting value via a back-run, draining WETH from the contracts over time."
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0x4cfb349b44ca52c9ce8905757635319efa2ffca0da96b4fafbe27730f7badaeb
call_targets:
0x9217622b957411ac4a5608a9a0689c8a256344d1
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x4cfb349b44ca52c9ce8905757635319efa2ffca0da96b4fafbe27730f7badaeb",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x9217622b957411ac4a5608a9a0689c8a256344d1"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xe30c3978",
"selector": "0xe30c3978",
"calldata_variants": [
"0xe30c3978",
"0xe30c39780000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf0fa55a9",
"selector": "0xf0fa55a9",
"calldata_variants": [
"0xf0fa55a9",
"0xf0fa55a90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbc7576d3",
"selector": "0xbc7576d3",
"calldata_variants": [
"0xbc7576d3",
"0xbc7576d30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc9ae5e0a",
"selector": "0xc9ae5e0a",
"calldata_variants": [
"0xc9ae5e0a",
"0xc9ae5e0a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcce0d6fb",
"selector": "0xcce0d6fb",
"calldata_variants": [
"0xcce0d6fb",
"0xcce0d6fb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa2b6eef0",
"selector": "0xa2b6eef0",
"calldata_variants": [
"0xa2b6eef0",
"0xa2b6eef00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaf97d3bd",
"selector": "0xaf97d3bd",
"calldata_variants": [
"0xaf97d3bd",
"0xaf97d3bd0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 502,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1819,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2230,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 7,
"guards_detected": [
{
"pc": 416,
"type": "msg_sender_eq_const",
"value": 1.0970776880180083e+48
},
{
"pc": 1381,
"type": "tx_origin_used"
},
{
"pc": 394,
"type": "msg_sender_eq_const",
"value": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
},
{
"pc": 1380,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 7
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0x4cfb349b44ca52c9ce8905757635319efa2ffca0da96b4fafbe27730f7badaeb
call_targets:
0x9217622b957411ac4a5608a9a0689c8a256344d1
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x4cfb349b44ca52c9ce8905757635319efa2ffca0da96b4fafbe27730f7badaeb",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x9217622b957411ac4a5608a9a0689c8a256344d1"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xe30c3978",
"selector": "0xe30c3978",
"calldata_variants": [
"0xe30c3978",
"0xe30c39780000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf0fa55a9",
"selector": "0xf0fa55a9",
"calldata_variants": [
"0xf0fa55a9",
"0xf0fa55a90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xbc7576d3",
"selector": "0xbc7576d3",
"calldata_variants": [
"0xbc7576d3",
"0xbc7576d30000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc9ae5e0a",
"selector": "0xc9ae5e0a",
"calldata_variants": [
"0xc9ae5e0a",
"0xc9ae5e0a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcce0d6fb",
"selector": "0xcce0d6fb",
"calldata_variants": [
"0xcce0d6fb",
"0xcce0d6fb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa2b6eef0",
"selector": "0xa2b6eef0",
"calldata_variants": [
"0xa2b6eef0",
"0xa2b6eef00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaf97d3bd",
"selector": "0xaf97d3bd",
"calldata_variants": [
"0xaf97d3bd",
"0xaf97d3bd0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 502,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1819,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2230,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 7,
"guards_detected": [
{
"pc": 416,
"type": "msg_sender_eq_const",
"value": 1.0970776880180083e+48
},
{
"pc": 1381,
"type": "tx_origin_used"
},
{
"pc": 394,
"type": "msg_sender_eq_const",
"value": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
},
{
"pc": 1380,
"type": "tx_origin_used"
}
]
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 5
}
|
| info | other | cast | Heavy CALL-family usage | 55 | no | — |
viewevidence_json{
"notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
"call_family_count": 16
}
|