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

Analysis Run

682e09b2-8a52-43fd-9fd2-1a4d25cd281c

complete
Chain ID
1
Address
Block Number
Created
Sun, Dec 28, 2025 2:01 PM
Review Summary

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
30301 report.consolidate complete 1 / 1 3 months ago
73990 artifact.fetch complete 1 / 3 1 week ago
73991 tool.cast_disasm complete 1 / 3 1 week ago
73992 analysis.bundle complete 1 / 3 1 week ago
73993 capability.graph complete 1 / 3 1 week ago
73994 detector.run complete 1 / 3 1 week ago
73995 validation.fork complete 1 / 3 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
2
No findings?
no
Summary
Found 2 issues: reward accrual can be reset on reward-rate updates, and unchecked ERC20 return values can silently desync accounting or approvals.
View stderr
[codex:644418] OpenAI Codex v0.77.0 (research preview)
[codex:644418] --------
[codex:644418] workdir: /tmp/codex-multi-iykkhe31
[codex:644418] model: gpt-5.2-codex
[codex:644418] provider: openai
[codex:644418] approval: never
[codex:644418] sandbox: read-only
[codex:644418] reasoning effort: xhigh
[codex:644418] reasoning summaries: auto
[codex:644418] session id: 019b653c-ba3d-7020-81cf-401c5929c25a
[codex:644418] --------
[codex:644418] user
[codex:644418] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:644418] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:644418] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:644418] 
[codex:644418] Scope rules:
[codex:644418] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:644418] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:644418] 
[codex:644418] Output MUST be valid JSON matching the provided schema.
[codex:644418] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:644418] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:644418] 
[codex:644418] Output constraints (IMPORTANT):
[codex:644418] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:644418] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:644418] mcp startup: no servers
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Reading AUDIT_BUNDLE.txt**
[codex:644418] exec
[codex:644418] /bin/bash -lc ls in /tmp/codex-multi-iykkhe31 succeeded in 5ms:
[codex:644418] AUDIT_BUNDLE.txt
[codex:644418] codex-output-schema.json
[codex:644418] contracts
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Reading AUDIT_BUNDLE.txt**
[codex:644418] exec
[codex:644418] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:644418] 
[codex:644418] ================================================================================
[codex:644418] FILE: contracts/@openzeppelin/contracts/access/AccessControl.sol
[codex:644418] ================================================================================
[codex:644418] // SPDX-License-Identifier: MIT
[codex:644418] // OpenZeppelin Contracts v4.4.1 (access/AccessControl.sol)
[codex:644418] 
[codex:644418] pragma solidity ^0.8.0;
[codex:644418] 
[codex:644418] import "./IAccessControl.sol";
[codex:644418] import "../utils/Context.sol";
[codex:644418] import "../utils/Strings.sol";
[codex:644418] import "../utils/introspection/ERC165.sol";
[codex:644418] 
[codex:644418] /**
[codex:644418]  * @dev Contract module that allows children to implement role-based access
[codex:644418]  * control mechanisms. This is a lightweight version that doesn't allow enumerating role
[codex:644418]  * members except through off-chain means by accessing the contract event logs. Some
[codex:644418]  * applications may benefit from on-chain enumerability, for those cases see
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Handling truncated file output**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '1,200p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:644418] 
[codex:644418] ================================================================================
[codex:644418] FILE: contracts/@openzeppelin/contracts/access/AccessControl.sol
[codex:644418] ================================================================================
[codex:644418] // SPDX-License-Identifier: MIT
[codex:644418] // OpenZeppelin Contracts v4.4.1 (access/AccessControl.sol)
[codex:644418] 
[codex:644418] pragma solidity ^0.8.0;
[codex:644418] 
[codex:644418] import "./IAccessControl.sol";
[codex:644418] import "../utils/Context.sol";
[codex:644418] import "../utils/Strings.sol";
[codex:644418] import "../utils/introspection/ERC165.sol";
[codex:644418] 
[codex:644418] /**
[codex:644418]  * @dev Contract module that allows children to implement role-based access
[codex:644418]  * control mechanisms. This is a lightweight version that doesn't allow enumerating role
[codex:644418]  * members except through off-chain means by accessing the contract event logs. Some
[codex:644418]  * applications may benefit from on-chain enumerability, for those cases see
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Pausing for more input**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '200,400p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418]         bytes32 previousAdminRole = getRoleAdmin(role);
[codex:644418]         _roles[role].adminRole = adminRole;
[codex:644418]         emit RoleAdminChanged(role, previousAdminRole, adminRole);
[codex:644418]     }
[codex:644418] 
[codex:644418]     /**
[codex:644418]      * @dev Grants `role` to `account`.
[codex:644418]      *
[codex:644418]      * Internal function without access restriction.
[codex:644418]      */
[codex:644418]     function _grantRole(bytes32 role, address account) internal virtual {
[codex:644418]         if (!hasRole(role, account)) {
[codex:644418]             _roles[role].members[account] = true;
[codex:644418]             emit RoleGranted(role, account, _msgSender());
[codex:644418]         }
[codex:644418]     }
[codex:644418] 
[codex:644418]     /**
[codex:644418]      * @dev Revokes `role` from `account`.
[codex:644418]      *
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Continuing process**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '400,600p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 5ms:
[codex:644418] interface IERC20 {
[codex:644418]     /**
[codex:644418]      * @dev Returns the amount of tokens in existence.
[codex:644418]      */
[codex:644418]     function totalSupply() external view returns (uint256);
[codex:644418] 
[codex:644418]     /**
[codex:644418]      * @dev Returns the amount of tokens owned by `account`.
[codex:644418]      */
[codex:644418]     function balanceOf(address account) external view returns (uint256);
[codex:644418] 
[codex:644418]     /**
[codex:644418]      * @dev Moves `amount` tokens from the caller's account to `recipient`.
[codex:644418]      *
[codex:644418]      * Returns a boolean value indicating whether the operation succeeded.
[codex:644418]      *
[codex:644418]      * Emits a {Transfer} event.
[codex:644418]      */
[codex:644418]     function transfer(address recipient, uint256 amount) external returns (bool);
[codex:644418] 
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Continuing inspection**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '600,800p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418]      *
[codex:644418]      *  - an externally-owned account
[codex:644418]      *  - a contract in construction
[codex:644418]      *  - an address where a contract will be created
[codex:644418]      *  - an address where a contract lived, but was destroyed
[codex:644418]      * ====
[codex:644418]      */
[codex:644418]     function isContract(address account) internal view returns (bool) {
[codex:644418]         // This method relies on extcodesize, which returns 0 for contracts in
[codex:644418]         // construction, since the code is only stored at the end of the
[codex:644418]         // constructor execution.
[codex:644418] 
[codex:644418]         uint256 size;
[codex:644418]         assembly {
[codex:644418]             size := extcodesize(account)
[codex:644418]         }
[codex:644418]         return size > 0;
[codex:644418]     }
[codex:644418] 
[codex:644418]     /**
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Continuing analysis**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '800,1000p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 5ms:
[codex:644418] FILE: contracts/@openzeppelin/contracts/utils/Context.sol
[codex:644418] ================================================================================
[codex:644418] // SPDX-License-Identifier: MIT
[codex:644418] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
[codex:644418] 
[codex:644418] pragma solidity ^0.8.0;
[codex:644418] 
[codex:644418] /**
[codex:644418]  * @dev Provides information about the current execution context, including the
[codex:644418]  * sender of the transaction and its data. While these are generally available
[codex:644418]  * via msg.sender and msg.data, they should not be accessed in such a direct
[codex:644418]  * manner, since when dealing with meta-transactions the account sending and
[codex:644418]  * paying for execution may not be the actual sender (as far as an application
[codex:644418]  * is concerned).
[codex:644418]  *
[codex:644418]  * This contract is only required for intermediate, library-like contracts.
[codex:644418]  */
[codex:644418] abstract contract Context {
[codex:644418]     function _msgSender() internal view virtual returns (address) {
[codex:644418]         return msg.sender;
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Continuing processing**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '1000,1200p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418]     TokenDistributor public immutable tokenDistributor;
[codex:644418] 
[codex:644418]     // Reward rate (block)
[codex:644418]     uint256 public currentRewardPerBlock;
[codex:644418] 
[codex:644418]     // Last reward adjustment block number
[codex:644418]     uint256 public lastRewardAdjustment;
[codex:644418] 
[codex:644418]     // Last update block for rewards
[codex:644418]     uint256 public lastUpdateBlock;
[codex:644418] 
[codex:644418]     // Current end block for the current reward period
[codex:644418]     uint256 public periodEndBlock;
[codex:644418] 
[codex:644418]     // Reward per token stored
[codex:644418]     uint256 public rewardPerTokenStored;
[codex:644418] 
[codex:644418]     // Total existing shares
[codex:644418]     uint256 public totalShares;
[codex:644418] 
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Proceeding with review**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '1200,1400p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418]     /**
[codex:644418]      * @notice Update the reward per block (in rewardToken)
[codex:644418]      * @dev Only callable by owner. Owner is meant to be another smart contract.
[codex:644418]      */
[codex:644418]     function updateRewards(uint256 reward, uint256 rewardDurationInBlocks)
[codex:644418]         external
[codex:644418]         onlyRole(REWARD_UPDATE_ROLE)
[codex:644418]     {
[codex:644418]         // Adjust the current reward per block
[codex:644418]         if (block.number >= periodEndBlock) {
[codex:644418]             currentRewardPerBlock = reward / rewardDurationInBlocks;
[codex:644418]         } else {
[codex:644418]             currentRewardPerBlock =
[codex:644418]                 (reward + ((periodEndBlock - block.number) * currentRewardPerBlock)) /
[codex:644418]                 rewardDurationInBlocks;
[codex:644418]         }
[codex:644418] 
[codex:644418]         lastUpdateBlock = block.number;
[codex:644418]         periodEndBlock = block.number + rewardDurationInBlocks;
[codex:644418] 
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Finishing exploration**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '1400,1600p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 5ms:
[codex:644418] import {ReentrancyGuard} from '@openzeppelin/contracts/security/ReentrancyGuard.sol';
[codex:644418] import {IERC20, SafeERC20} from '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';
[codex:644418] 
[codex:644418] import {IMintableERC20} from './IMintableERC20.sol';
[codex:644418] 
[codex:644418] /**
[codex:644418]  * @title TokenDistributor
[codex:644418]  * @notice It handles the distribution of X2Y2 token.
[codex:644418]  * It auto-adjusts block rewards over a set number of periods.
[codex:644418]  */
[codex:644418] contract TokenDistributor is ReentrancyGuard {
[codex:644418]     using SafeERC20 for IERC20;
[codex:644418]     using SafeERC20 for IMintableERC20;
[codex:644418] 
[codex:644418]     struct StakingPeriod {
[codex:644418]         uint256 rewardPerBlockForStaking;
[codex:644418]         uint256 rewardPerBlockForOthers;
[codex:644418]         uint256 periodLengthInBlock;
[codex:644418]     }
[codex:644418] 
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Needing more input to proceed**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '1600,1800p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418]         emit Compound(msg.sender, pendingRewards);
[codex:644418]     }
[codex:644418] 
[codex:644418]     /**
[codex:644418]      * @notice Update pool rewards
[codex:644418]      */
[codex:644418]     function updatePool() external nonReentrant {
[codex:644418]         _updatePool();
[codex:644418]     }
[codex:644418] 
[codex:644418]     /**
[codex:644418]      * @notice Withdraw staked tokens and compound pending rewards
[codex:644418]      * @param amount amount to withdraw
[codex:644418]      */
[codex:644418]     function withdraw(uint256 amount) external nonReentrant {
[codex:644418]         require(
[codex:644418]             (userInfo[msg.sender].amount >= amount) && (amount > 0),
[codex:644418]             'Withdraw: Amount must be > 0 or lower than user balance'
[codex:644418]         );
[codex:644418] 
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Continuing exploration**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '1800,2000p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418]             rewardPerBlockForStaking,
[codex:644418]             rewardPerBlockForOthers
[codex:644418]         );
[codex:644418]     }
[codex:644418] 
[codex:644418]     /**
[codex:644418]      * @notice Return reward multiplier over the given "from" to "to" block.
[codex:644418]      * @param from block to start calculating reward
[codex:644418]      * @param to block to finish calculating reward
[codex:644418]      * @return the multiplier for the period
[codex:644418]      */
[codex:644418]     function _getMultiplier(uint256 from, uint256 to) internal view returns (uint256) {
[codex:644418]         if (to <= endBlock) {
[codex:644418]             return to - from;
[codex:644418]         } else if (from >= endBlock) {
[codex:644418]             return 0;
[codex:644418]         } else {
[codex:644418]             return endBlock - from;
[codex:644418]         }
[codex:644418]     }
[codex:644418] 
[codex:644418] 
[codex:644418] 
[codex:644418] 
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Analyzing FeeSharingSystem and TokenDistributor contracts**
[codex:644418] thinking
[codex:644418] **Reviewing reward minting and accounting nuances**
[codex:644418] 
[codex:644418] There is a lot here! I’m examining how reward tokens are minted and accounted for in FeeSharingSystem and TokenDistributor, including potential issues like unstaked minted tokens causing stuck balances, allowance setting quirks that might break deposits, and how reward updates might miscalculate accrued rewards if not properly updated. I’ll look closely at how pending rewards affect total staked amounts and how updateRewards handles rewardPerTokenStored to see if any reward loss or dilution risks arise.
[codex:644418] thinking
[codex:644418] **Analyzing reward calculation logic and phase transitions**
[codex:644418] 
[codex:644418] I’m carefully unpacking how updateRewards impacts reward accrual and the phase-based reward scheduling in TokenDistributor, including subtle consequences of updating lastUpdateBlock without refreshing rewardPerTokenStored that can cause lost rewards. I’m also considering how phase looping and multiplier calculations interplay with minting limits and share accounting to check for any inconsistencies or exploitable gaps.
[codex:644418] thinking
[codex:644418] **Examining withdrawal process and role assignment details**
[codex:644418] 
[codex:644418] I’m reviewing how withdraw handles token transfers alongside reentrancy protection, plus how role administration and share calculations work to check if any subtle issues arise from role defaults or share pricing mechanics during deposits and withdrawals.
[codex:644418] thinking
[codex:644418] **Analyzing approval handling and reentrancy protections**
[codex:644418] 
[codex:644418] I’m going through the allowance adjustments and mint calls to see if unchecked return values or token standards like USDT cause failures, and also checking if internal nonReentrant guards effectively block token mint and transfer reentrancy from external tokens.
[codex:644418] exec
[codex:644418] /bin/bash -lc "nl -ba contracts/contracts/FeeSharingSystem.sol | sed -n '140,240p'" in /tmp/codex-multi-iykkhe31 succeeded in 7ms:
[codex:644418]    140	    function deposit(uint256 amount, bool claimRewardToken) external nonReentrant {
[codex:644418]    141	        require(amount >= PRECISION_FACTOR, 'Deposit: Amount must be >= 1 X2Y2');
[codex:644418]    142	
[codex:644418]    143	        // Auto compounds for everyone
[codex:644418]    144	        tokenDistributor.harvestAndCompound();
[codex:644418]    145	
[codex:644418]    146	        // Update reward for user
[codex:644418]    147	        _updateReward(msg.sender);
[codex:644418]    148	
[codex:644418]    149	        // Retrieve total amount staked by this contract
[codex:644418]    150	        (uint256 totalAmountStaked, ) = tokenDistributor.userInfo(address(this));
[codex:644418]    151	
[codex:644418]    152	        // Transfer X2Y2 tokens to this address
[codex:644418]    153	        x2y2Token.safeTransferFrom(msg.sender, address(this), amount);
[codex:644418]    154	
[codex:644418]    155	        uint256 currentShares;
[codex:644418]    156	
[codex:644418]    157	        // Calculate the number of shares to issue for the user
[codex:644418]    158	        if (totalShares != 0) {
[codex:644418]    159	            currentShares = (amount * totalShares) / totalAmountStaked;
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Continuing to review updateRewards function**
[codex:644418] exec
[codex:644418] /bin/bash -lc "nl -ba contracts/contracts/FeeSharingSystem.sol | sed -n '238,320p'" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418]    238	    /**
[codex:644418]    239	     * @notice Update the reward per block (in rewardToken)
[codex:644418]    240	     * @dev Only callable by owner. Owner is meant to be another smart contract.
[codex:644418]    241	     */
[codex:644418]    242	    function updateRewards(uint256 reward, uint256 rewardDurationInBlocks)
[codex:644418]    243	        external
[codex:644418]    244	        onlyRole(REWARD_UPDATE_ROLE)
[codex:644418]    245	    {
[codex:644418]    246	        // Adjust the current reward per block
[codex:644418]    247	        if (block.number >= periodEndBlock) {
[codex:644418]    248	            currentRewardPerBlock = reward / rewardDurationInBlocks;
[codex:644418]    249	        } else {
[codex:644418]    250	            currentRewardPerBlock =
[codex:644418]    251	                (reward + ((periodEndBlock - block.number) * currentRewardPerBlock)) /
[codex:644418]    252	                rewardDurationInBlocks;
[codex:644418]    253	        }
[codex:644418]    254	
[codex:644418]    255	        lastUpdateBlock = block.number;
[codex:644418]    256	        periodEndBlock = block.number + rewardDurationInBlocks;
[codex:644418]    257	
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Requesting line numbers for function**
[codex:644418] exec
[codex:644418] /bin/bash -lc "nl -ba contracts/contracts/FeeSharingSystem.sol | sed -n '320,380p'" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418]    320	
[codex:644418]    321	    /**
[codex:644418]    322	     * @notice Check current allowance and adjust if necessary
[codex:644418]    323	     * @param _amount amount to transfer
[codex:644418]    324	     * @param _to token to transfer
[codex:644418]    325	     */
[codex:644418]    326	    function _checkAndAdjustX2Y2TokenAllowanceIfRequired(uint256 _amount, address _to) internal {
[codex:644418]    327	        if (x2y2Token.allowance(address(this), _to) < _amount) {
[codex:644418]    328	            x2y2Token.approve(_to, type(uint256).max);
[codex:644418]    329	        }
[codex:644418]    330	    }
[codex:644418]    331	
[codex:644418]    332	    /**
[codex:644418]    333	     * @notice Return last block where rewards must be distributed
[codex:644418]    334	     */
[codex:644418]    335	    function _lastRewardBlock() internal view returns (uint256) {
[codex:644418]    336	        return block.number < periodEndBlock ? block.number : periodEndBlock;
[codex:644418]    337	    }
[codex:644418]    338	
[codex:644418]    339	    /**
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Preparing to review TokenDistributor mint function**
[codex:644418] exec
[codex:644418] /bin/bash -lc "nl -ba contracts/contracts/TokenDistributor.sol | sed -n '200,320p'" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418]    200	        userInfo[msg.sender].rewardDebt =
[codex:644418]    201	            (userInfo[msg.sender].amount * accTokenPerShare) /
[codex:644418]    202	            PRECISION_FACTOR;
[codex:644418]    203	
[codex:644418]    204	        emit Compound(msg.sender, pendingRewards);
[codex:644418]    205	    }
[codex:644418]    206	
[codex:644418]    207	    /**
[codex:644418]    208	     * @notice Update pool rewards
[codex:644418]    209	     */
[codex:644418]    210	    function updatePool() external nonReentrant {
[codex:644418]    211	        _updatePool();
[codex:644418]    212	    }
[codex:644418]    213	
[codex:644418]    214	    /**
[codex:644418]    215	     * @notice Withdraw staked tokens and compound pending rewards
[codex:644418]    216	     * @param amount amount to withdraw
[codex:644418]    217	     */
[codex:644418]    218	    function withdraw(uint256 amount) external nonReentrant {
[codex:644418]    219	        require(
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Adding line numbers for mint function**
[codex:644418] exec
[codex:644418] /bin/bash -lc "nl -ba contracts/contracts/TokenDistributor.sol | sed -n '320,420p'" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418]    320	            return
[codex:644418]    321	                (userInfo[user].amount * adjustedTokenPerShare) /
[codex:644418]    322	                PRECISION_FACTOR -
[codex:644418]    323	                userInfo[user].rewardDebt;
[codex:644418]    324	        } else {
[codex:644418]    325	            return
[codex:644418]    326	                (userInfo[user].amount * accTokenPerShare) /
[codex:644418]    327	                PRECISION_FACTOR -
[codex:644418]    328	                userInfo[user].rewardDebt;
[codex:644418]    329	        }
[codex:644418]    330	    }
[codex:644418]    331	
[codex:644418]    332	    /**
[codex:644418]    333	     * @notice Update reward variables of the pool
[codex:644418]    334	     */
[codex:644418]    335	    function _updatePool() internal {
[codex:644418]    336	        if (block.number <= lastRewardBlock) {
[codex:644418]    337	            return;
[codex:644418]    338	        }
[codex:644418]    339	
[codex:644418] 
[codex:644418] thinking
[codex:644418] **Producing JSON vulnerability report**
[codex:644418] 
[codex:644418] I’m putting together a detailed JSON output summarizing two main findings: a medium-severity reward accrual reset bug in `updateRewards` that can wipe staker rewards if triggered by a privileged updater, and a low-severity unchecked ERC20 return value issue on `approve` and `mint` calls that could cause silent failures in reward accounting. I want to clearly state severity, categories, exploit scenarios, recommendations, evidence with file lines, and ensure the output matches the requested schema format precisely.
[codex:644418] codex
[codex:644418] {"no_findings":false,"summary":"Found 2 issues: reward accrual can be reset on reward-rate updates, and unchecked ERC20 return values can silently desync accounting or approvals.","findings":[{"severity":"medium","category":"other","title":"Reward accrual can be wiped when updateRewards resets lastUpdateBlock","exploit_scenario":"A caller with REWARD_UPDATE_ROLE can call updateRewards after rewards have accrued. Because rewardPerTokenStored is not updated before lastUpdateBlock is reset, all rewards between the previous lastUpdateBlock and this update become unclaimable. Repeated updates can continuously zero out staker rewards without changing balances.","recommendation":"Before changing currentRewardPerBlock/periodEndBlock, snapshot rewards by updating rewardPerTokenStored and lastUpdateBlock (e.g., call _updateReward(address(0)) or set rewardPerTokenStored = _rewardPerToken(); lastUpdateBlock = _lastRewardBlock()).","evidence":"updateRewards updates lastUpdateBlock and periodEndBlock without first updating rewardPerTokenStored, so prior rewards are skipped.","locations":["contracts/contracts/FeeSharingSystem.sol:242","contracts/contracts/FeeSharingSystem.sol:255"]},{"severity":"low","category":"other","title":"Unchecked ERC20 return values on approve/mint can silently fail and desync accounting","exploit_scenario":"If x2y2Token returns false (non‑standard or mint disabled), FeeSharingSystem still proceeds and TokenDistributor skips reward accounting while minting (or minting to tokenSplitter) may silently fail. This can lead to stuck rewards, missing distributions, or unexpected reverts later.","recommendation":"Use SafeERC20 for approvals or require true return values; for minting, check the return value and revert on failure for both staking and tokenSplitter mints.","evidence":"approve() return value is ignored; mint() return value for tokenSplitter is ignored and staking mint only conditionally updates accounting.","locations":["contracts/contracts/FeeSharingSystem.sol:326","contracts/contracts/FeeSharingSystem.sol:328","contracts/contracts/TokenDistributor.sol:371","contracts/contracts/TokenDistributor.sol:380"]}]}
[codex:644418] tokens used
[codex:644418] 60,818
[codex:644418] {"no_findings":false,"summary":"Found 2 issues: reward accrual can be reset on reward-rate updates, and unchecked ERC20 return values can silently desync accounting or approvals.","findings":[{"severity":"medium","category":"other","title":"Reward accrual can be wiped when updateRewards resets lastUpdateBlock","exploit_scenario":"A caller with REWARD_UPDATE_ROLE can call updateRewards after rewards have accrued. Because rewardPerTokenStored is not updated before lastUpdateBlock is reset, all rewards between the previous lastUpdateBlock and this update become unclaimable. Repeated updates can continuously zero out staker rewards without changing balances.","recommendation":"Before changing currentRewardPerBlock/periodEndBlock, snapshot rewards by updating rewardPerTokenStored and lastUpdateBlock (e.g., call _updateReward(address(0)) or set rewardPerTokenStored = _rewardPerToken(); lastUpdateBlock = _lastRewardBlock()).","evidence":"updateRewards updates lastUpdateBlock and periodEndBlock without first updating rewardPerTokenStored, so prior rewards are skipped.","locations":["contracts/contracts/FeeSharingSystem.sol:242","contracts/contracts/FeeSharingSystem.sol:255"]},{"severity":"low","category":"other","title":"Unchecked ERC20 return values on approve/mint can silently fail and desync accounting","exploit_scenario":"If x2y2Token returns false (non‑standard or mint disabled), FeeSharingSystem still proceeds and TokenDistributor skips reward accounting while minting (or minting to tokenSplitter) may silently fail. This can lead to stuck rewards, missing distributions, or unexpected reverts later.","recommendation":"Use SafeERC20 for approvals or require true return values; for minting, check the return value and revert on failure for both staking and tokenSplitter mints.","evidence":"approve() return value is ignored; mint() return value for tokenSplitter is ignored and staking mint only conditionally updates accounting.","locations":["contracts/contracts/FeeSharingSystem.sol:326","contracts/contracts/FeeSharingSystem.sol:328","contracts/contracts/TokenDistributor.sol:371","contracts/contracts/TokenDistributor.sol:380"]}]}
Metadata
{
    "codex": {
        "ran_at": "2025-12-28T14:01:54.377091+00:00",
        "returncode": 0
    },
    "summary": "Found 2 issues: reward accrual can be reset on reward-rate updates, and unchecked ERC20 return values can silently desync accounting or approvals.",
    "raw_final": {
        "summary": "Found 2 issues: reward accrual can be reset on reward-rate updates, and unchecked ERC20 return values can silently desync accounting or approvals.",
        "findings": [
            {
                "title": "Reward accrual can be wiped when updateRewards resets lastUpdateBlock",
                "category": "other",
                "evidence": "updateRewards updates lastUpdateBlock and periodEndBlock without first updating rewardPerTokenStored, so prior rewards are skipped.",
                "severity": "medium",
                "locations": [
                    "contracts/contracts/FeeSharingSystem.sol:242",
                    "contracts/contracts/FeeSharingSystem.sol:255"
                ],
                "recommendation": "Before changing currentRewardPerBlock/periodEndBlock, snapshot rewards by updating rewardPerTokenStored and lastUpdateBlock (e.g., call _updateReward(address(0)) or set rewardPerTokenStored = _rewardPerToken(); lastUpdateBlock = _lastRewardBlock()).",
                "exploit_scenario": "A caller with REWARD_UPDATE_ROLE can call updateRewards after rewards have accrued. Because rewardPerTokenStored is not updated before lastUpdateBlock is reset, all rewards between the previous lastUpdateBlock and this update become unclaimable. Repeated updates can continuously zero out staker rewards without changing balances."
            },
            {
                "title": "Unchecked ERC20 return values on approve/mint can silently fail and desync accounting",
                "category": "other",
                "evidence": "approve() return value is ignored; mint() return value for tokenSplitter is ignored and staking mint only conditionally updates accounting.",
                "severity": "low",
                "locations": [
                    "contracts/contracts/FeeSharingSystem.sol:326",
                    "contracts/contracts/FeeSharingSystem.sol:328",
                    "contracts/contracts/TokenDistributor.sol:371",
                    "contracts/contracts/TokenDistributor.sol:380"
                ],
                "recommendation": "Use SafeERC20 for approvals or require true return values; for minting, check the return value and revert on failure for both staking and tokenSplitter mints.",
                "exploit_scenario": "If x2y2Token returns false (non\u2011standard or mint disabled), FeeSharingSystem still proceeds and TokenDistributor skips reward accounting while minting (or minting to tokenSplitter) may silently fail. This can lead to stuck rewards, missing distributions, or unexpected reverts later."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
17
EXT*/BALANCE
8
Total opcodes
4829
Flags
heavy_ext_balance_usage call_family_heavy
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLVALUE
00000006: DUP1
00000007: ISZERO
00000008: PUSH2 0x0010
0000000b: JUMPI
0000000c: PUSH1 0x00
0000000e: DUP1
0000000f: REVERT
00000010: JUMPDEST
00000011: POP
00000012: PUSH1 0x04
00000014: CALLDATASIZE
00000015: LT
00000016: PUSH2 0x019a
00000019: JUMPI
0000001a: PUSH1 0x00
0000001c: CALLDATALOAD
0000001d: PUSH1 0xe0
0000001f: SHR
00000020: DUP1
00000021: PUSH4 0x4641257d
00000026: GT
00000027: PUSH2 0x00e4
0000002a: JUMPI
0000002b: DUP1
0000002c: PUSH4 0xa9f8d181
00000031: GT
00000032: PUSH2 0x0092
00000035: JUMPI
00000036: DUP1
00000037: PUSH4 0xa9f8d181
0000003c: EQ
0000003d: PUSH2 0x03ae
00000040: JUMPI
00000041: DUP1
00000042: PUSH4 0xcb4aec61
00000047: EQ
00000048: PUSH2 0x03b6
0000004b: JUMPI
0000004c: DUP1
0000004d: PUSH4 0xccd34cd5
00000052: EQ
00000053: PUSH2 0x03bf
00000056: JUMPI
00000057: DUP1
00000058: PUSH4 0xd547741f
0000005d: EQ
0000005e: PUSH2 0x03ce
00000061: JUMPI
00000062: DUP1
00000063: PUSH4 0xdf136d65
00000068: EQ
00000069: PUSH2 0x03e1
0000006c: JUMPI
0000006d: DUP1
0000006e: PUSH4 0xe098bd4b
00000073: EQ
00000074: PUSH2 0x03ea
00000077: JUMPI
00000078: DUP1
00000079: PUSH4 0xebde5ee6
0000007e: EQ
0000007f: PUSH2 0x03fd
00000082: JUMPI
00000083: DUP1
00000084: PUSH4 0xf7c618c1
00000089: EQ
0000008a: PUSH2 0x0424
0000008d: JUMPI
0000008e: PUSH1 0x00
00000090: DUP1
00000091: REVERT
00000092: JUMPDEST
00000093: DUP1
00000094: PUSH4 0x4641257d
00000099: EQ
0000009a: PUSH2 0x0335
0000009d: JUMPI
0000009e: DUP1
0000009f: PUSH4 0x5b0680f6
000000a4: EQ
000000a5: PUSH2 0x033d
000000a8: JUMPI
000000a9: DUP1
000000aa: PUSH4 0x91d14854
000000af: EQ
000000b0: PUSH2 0x0364
000000b3: JUMPI
000000b4: DUP1
000000b5: PUSH4 0x97e50818
000000ba: EQ
000000bb: PUSH2 0x0377
000000be: JUMPI
000000bf: DUP1
000000c0: PUSH4 0x9a408321
000000c5: EQ
000000c6: PUSH2 0x038a
000000c9: JUMPI
000000ca: DUP1
000000cb: PUSH4 0xa217fddf
000000d0: EQ
000000d1: PUSH2 0x039d
000000d4: JUMPI
000000d5: DUP1
000000d6: PUSH4 0xa218141b
000000db: EQ
000000dc: PUSH2 0x03a5
000000df: JUMPI
000000e0: PUSH1 0x00
000000e2: DUP1
000000e3: REVERT
000000e4: JUMPDEST
000000e5: DUP1
000000e6: PUSH4 0x2f2ff15d
000000eb: GT
000000ec: PUSH2 0x014c
000000ef: JUMPI
000000f0: DUP1
000000f1: PUSH4 0x2f2ff15d
000000f6: EQ
000000f7: PUSH2 0x02a7
000000fa: JUMPI
000000fb: DUP1
000000fc: PUSH4 0x2f4f21e2
00000101: EQ
00000102: PUSH2 0x02ba
00000105: JUMPI
00000106: DUP1
00000107: PUSH4 0x353efdcf
0000010c: EQ
0000010d: PUSH2 0x02cd
00000110: JUMPI
00000111: DUP1
00000112: PUSH4 0x36568abe
00000117: EQ
00000118: PUSH2 0x02f4
0000011b: JUMPI
0000011c: DUP1
0000011d: PUSH4 0x38d07436
00000122: EQ
00000123: PUSH2 0x0307
00000126: JUMPI
00000127: DUP1
00000128: PUSH4 0x3a98ef39
0000012d: EQ
0000012e: PUSH2 0x031a
00000131: JUMPI
00000132: DUP1
00000133: PUSH4 0x40d2abae
00000138: EQ
00000139: PUSH2 0x0323
0000013c: JUMPI
0000013d: DUP1
0000013e: PUSH4 0x442da82f
00000143: EQ
00000144: PUSH2 0x032c
00000147: JUMPI
00000148: PUSH1 0x00
0000014a: DUP1
0000014b: REVERT
0000014c: JUMPDEST
0000014d: DUP1
0000014e: PUSH4 0x01ffc9a7
00000153: EQ
00000154: PUSH2 0x019f
00000157: JUMPI
00000158: DUP1
00000159: PUSH4 0x097aad10
0000015e: EQ
0000015f: PUSH2 0x01c7
00000162: JUMPI
00000163: DUP1
00000164: PUSH4 0x18a6bc32
00000169: EQ
0000016a: PUSH2 0x01e8
0000016d: JUMPI
0000016e: DUP1
0000016f: PUSH4 0x1959a002
00000174: EQ
00000175: PUSH2 0x021c
00000178: JUMPI
00000179: DUP1
0000017a: PUSH4 0x1c1c6fe5
0000017f: EQ
00000180: PUSH2 0x0266
00000183: JUMPI
00000184: DUP1
00000185: PUSH4 0x248a9ca3
0000018a: EQ
0000018b: PUSH2 0x027b
0000018e: JUMPI
0000018f: DUP1
00000190: PUSH4 0x26170c3c
00000195: EQ
00000196: PUSH2 0x029f
00000199: JUMPI
0000019a: JUMPDEST
0000019b: PUSH1 0x00
0000019d: DUP1
0000019e: REVERT
0000019f: JUMPDEST
000001a0: PUSH2 0x01b2
000001a3: PUSH2 0x01ad
000001a6: CALLDATASIZE
000001a7: PUSH1 0x04
000001a9: PUSH2 0x1dc3
000001ac: JUMP
000001ad: JUMPDEST
000001ae: PUSH2 0x044b
000001b1: JUMP
000001b2: JUMPDEST
000001b3: PUSH1 0x40
000001b5: MLOAD
000001b6: SWAP1
000001b7: ISZERO
000001b8: ISZERO
000001b9: DUP2
000001ba: MSTORE
000001bb: PUSH1 0x20
000001bd: ADD
000001be: JUMPDEST
000001bf: PUSH1 0x40
000001c1: MLOAD
000001c2: DUP1
000001c3: SWAP2
000001c4: SUB
000001c5: SWAP1
000001c6: RETURN
000001c7: JUMPDEST
000001c8: PUSH2 0x01da
000001cb: PUSH2 0x01d5
000001ce: CALLDATASIZE
000001cf: PUSH1 0x04
000001d1: PUSH2 0x1e09
000001d4: JUMP
000001d5: JUMPDEST
000001d6: PUSH2 0x0482
000001d9: JUMP
000001da: JUMPDEST
000001db: PUSH1 0x40
000001dd: MLOAD
000001de: SWAP1
000001df: DUP2
000001e0: MSTORE
000001e1: PUSH1 0x20
000001e3: ADD
000001e4: PUSH2 0x01be
000001e7: JUMP
000001e8: JUMPDEST
000001e9: PUSH2 0x020f
000001ec: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
0000020d: DUP2
0000020e: JUMP
0000020f: JUMPDEST
00000210: PUSH1 0x40
00000212: MLOAD
00000213: PUSH2 0x01be
00000216: SWAP2
00000217: SWAP1
00000218: PUSH2 0x1e24
0000021b: JUMP
0000021c: JUMPDEST
0000021d: PUSH2 0x024b
00000220: PUSH2 0x022a
00000223: CALLDATASIZE
00000224: PUSH1 0x04
00000226: PUSH2 0x1e09
00000229: JUMP
0000022a: JUMPDEST
0000022b: PUSH1 0x08
0000022d: PUSH1 0x20
0000022f: MSTORE
00000230: PUSH1 0x00
00000232: SWAP1
00000233: DUP2
00000234: MSTORE
00000235: PUSH1 0x40
00000237: SWAP1
00000238: KECCAK256
00000239: DUP1
0000023a: SLOAD
0000023b: PUSH1 0x01
0000023d: DUP3
0000023e: ADD
0000023f: SLOAD
00000240: PUSH1 0x02
00000242: SWAP1
00000243: SWAP3
00000244: ADD
00000245: SLOAD
00000246: SWAP1
00000247: SWAP2
00000248: SWAP1
00000249: DUP4
0000024a: JUMP
0000024b: JUMPDEST
0000024c: PUSH1 0x40
0000024e: DUP1
0000024f: MLOAD
00000250: SWAP4
00000251: DUP5
00000252: MSTORE
00000253: PUSH1 0x20
00000255: DUP5
00000256: ADD
00000257: SWAP3
00000258: SWAP1
00000259: SWAP3
0000025a: MSTORE
0000025b: SWAP1
0000025c: DUP3
0000025d: ADD
0000025e: MSTORE
0000025f: PUSH1 0x60
00000261: ADD
00000262: PUSH2 0x01be
00000265: JUMP
00000266: JUMPDEST
00000267: PUSH2 0x0279
0000026a: PUSH2 0x0274
0000026d: CALLDATASIZE
0000026e: PUSH1 0x04
00000270: PUSH2 0x1e49
00000273: JUMP
00000274: JUMPDEST
00000275: PUSH2 0x048d
00000278: JUMP
00000279: JUMPDEST
0000027a: STOP
0000027b: JUMPDEST
0000027c: PUSH2 0x01da
0000027f: PUSH2 0x0289
00000282: CALLDATASIZE
00000283: PUSH1 0x04
00000285: PUSH2 0x1e66
00000288: JUMP
00000289: JUMPDEST
0000028a: PUSH1 0x00
0000028c: SWAP1
0000028d: DUP2
0000028e: MSTORE
0000028f: PUSH1 0x01
00000291: PUSH1 0x20
00000293: DUP2
00000294: SWAP1
00000295: MSTORE
00000296: PUSH1 0x40
00000298: SWAP1
00000299: SWAP2
0000029a: KECCAK256
0000029b: ADD
0000029c: SLOAD
0000029d: SWAP1
0000029e: JUMP
0000029f: JUMPDEST
000002a0: PUSH2 0x01da
000002a3: PUSH2 0x04df
000002a6: JUMP
000002a7: JUMPDEST
000002a8: PUSH2 0x0279
000002ab: PUSH2 0x02b5
000002ae: CALLDATASIZE
000002af: PUSH1 0x04
000002b1: PUSH2 0x1e7f
000002b4: JUMP
000002b5: JUMPDEST
000002b6: PUSH2 0x0648
000002b9: JUMP
000002ba: JUMPDEST
000002bb: PUSH2 0x01b2
000002be: PUSH2 0x02c8
000002c1: CALLDATASIZE
000002c2: PUSH1 0x04
000002c4: PUSH2 0x1eab
000002c7: JUMP
000002c8: JUMPDEST
000002c9: PUSH2 0x0674
000002cc: JUMP
000002cd: JUMPDEST
000002ce: PUSH2 0x01da
000002d1: PUSH32 0x2561bf26f818282a3be40719542054d2173eb0d38539e8a8d3cff22f29fd2384
000002f2: DUP2
000002f3: JUMP
000002f4: JUMPDEST
000002f5: PUSH2 0x0279
000002f8: PUSH2 0x0302
000002fb: CALLDATASIZE
000002fc: PUSH1 0x04
000002fe: PUSH2 0x1e7f
00000301: JUMP
00000302: JUMPDEST
00000303: PUSH2 0x09c1
00000306: JUMP
00000307: JUMPDEST
00000308: PUSH2 0x0279
0000030b: PUSH2 0x0315
0000030e: CALLDATASIZE
0000030f: PUSH1 0x04
00000311: PUSH2 0x1ed5
00000314: JUMP
00000315: JUMPDEST
00000316: PUSH2 0x0a3f
00000319: JUMP
0000031a: JUMPDEST
0000031b: PUSH2 0x01da
0000031e: PUSH1 0x07
00000320: SLOAD
00000321: DUP2
00000322: JUMP
00000323: JUMPDEST
00000324: PUSH2 0x01da
00000327: PUSH1 0x03
00000329: SLOAD
0000032a: DUP2
0000032b: JUMP
0000032c: JUMPDEST
0000032d: PUSH2 0x01da
00000330: PUSH1 0x05
00000332: SLOAD
00000333: DUP2
00000334: JUMP
00000335: JUMPDEST
00000336: PUSH2 0x0279
00000339: PUSH2 0x0b03
0000033c: JUMP
0000033d: JUMPDEST
0000033e: PUSH2 0x01da
00000341: PUSH32 0xd139c7f3a5460f246794bd24bff3478b49114f682a7cc4513889d72531631b96
00000362: DUP2
00000363: JUMP
00000364: JUMPDEST
00000365: PUSH2 0x01b2
00000368: PUSH2 0x0372
0000036b: CALLDATASIZE
0000036c: PUSH1 0x04
0000036e: PUSH2 0x1e7f
00000371: JUMP
00000372: JUMPDEST
00000373: PUSH2 0x0c9b
00000376: JUMP
00000377: JUMPDEST
00000378: PUSH2 0x0279
0000037b: PUSH2 0x0385
0000037e: CALLDATASIZE
0000037f: PUSH1 0x04
00000381: PUSH2 0x1f05
00000384: JUMP
00000385: JUMPDEST
00000386: PUSH2 0x0cc6
00000389: JUMP
0000038a: JUMPDEST
0000038b: PUSH2 0x0279
0000038e: PUSH2 0x0398
00000391: CALLDATASIZE
00000392: PUSH1 0x04
00000394: PUSH2 0x1ed5
00000397: JUMP
00000398: JUMPDEST
00000399: PUSH2 0x0d9d
0000039c: JUMP
0000039d: JUMPDEST
0000039e: PUSH2 0x01da
000003a1: PUSH1 0x00
000003a3: DUP2
000003a4: JUMP
000003a5: JUMPDEST
000003a6: PUSH2 0x01da
000003a9: PUSH1 0x04
000003ab: SLOAD
000003ac: DUP2
000003ad: JUMP
000003ae: JUMPDEST
000003af: PUSH2 0x01da
000003b2: PUSH2 0x110f
000003b5: JUMP
000003b6: JUMPDEST
000003b7: PUSH2 0x01da
000003ba: PUSH1 0x02
000003bc: SLOAD
000003bd: DUP2
000003be: JUMP
000003bf: JUMPDEST
000003c0: PUSH2 0x01da
000003c3: PUSH8 0x0de0b6b3a7640000
000003cc: DUP2
000003cd: JUMP
000003ce: JUMPDEST
000003cf: PUSH2 0x0279
000003d2: PUSH2 0x03dc
000003d5: CALLDATASIZE
000003d6: PUSH1 0x04
000003d8: PUSH2 0x1e7f
000003db: JUMP
000003dc: JUMPDEST
000003dd: PUSH2 0x111e
000003e0: JUMP
000003e1: JUMPDEST
000003e2: PUSH2 0x01da
000003e5: PUSH1 0x06
000003e7: SLOAD
000003e8: DUP2
000003e9: JUMP
000003ea: JUMPDEST
000003eb: PUSH2 0x01da
000003ee: PUSH2 0x03f8
000003f1: CALLDATASIZE
000003f2: PUSH1 0x04
000003f4: PUSH2 0x1e09
000003f7: JUMP
000003f8: JUMPDEST
000003f9: PUSH2 0x1145
000003fc: JUMP
000003fd: JUMPDEST
000003fe: PUSH2 0x020f
00000401: PUSH32 0x0000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9
00000422: DUP2
00000423: JUMP
00000424: JUMPDEST
00000425: PUSH2 0x020f
00000428: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00000449: DUP2
0000044a: JUMP
0000044b: JUMPDEST
0000044c: PUSH1 0x00
0000044e: PUSH1 0x01
00000450: PUSH1 0x01
00000452: PUSH1 0xe0
00000454: SHL
00000455: SUB
00000456: NOT
00000457: DUP3
00000458: AND
00000459: PUSH4 0x7965db0b
0000045e: PUSH1 0xe0
00000460: SHL
00000461: EQ
00000462: DUP1
00000463: PUSH2 0x047c
00000466: JUMPI
00000467: POP
00000468: PUSH4 0x01ffc9a7
0000046d: PUSH1 0xe0
0000046f: SHL
00000470: PUSH1 0x01
00000472: PUSH1 0x01
00000474: PUSH1 0xe0
00000476: SHL
00000477: SUB
00000478: NOT
00000479: DUP4
0000047a: AND
0000047b: EQ
0000047c: JUMPDEST
0000047d: SWAP3
0000047e: SWAP2
0000047f: POP
00000480: POP
00000481: JUMP
00000482: JUMPDEST
00000483: PUSH1 0x00
00000485: PUSH2 0x047c
00000488: DUP3
00000489: PUSH2 0x12ce
0000048c: JUMP
0000048d: JUMPDEST
0000048e: PUSH1 0x02
00000490: PUSH1 0x00
00000492: SLOAD
00000493: EQ
00000494: ISZERO
00000495: PUSH2 0x04b9
00000498: JUMPI
00000499: PUSH1 0x40
0000049b: MLOAD
0000049c: PUSH3 0x461bcd
000004a0: PUSH1 0xe5
000004a2: SHL
000004a3: DUP2
000004a4: MSTORE
000004a5: PUSH1 0x04
000004a7: ADD
000004a8: PUSH2 0x04b0
000004ab: SWAP1
000004ac: PUSH2 0x1f27
000004af: JUMP
000004b0: JUMPDEST
000004b1: PUSH1 0x40
000004b3: MLOAD
000004b4: DUP1
000004b5: SWAP2
000004b6: SUB
000004b7: SWAP1
000004b8: REVERT
000004b9: JUMPDEST
000004ba: PUSH1 0x02
000004bc: PUSH1 0x00
000004be: SWAP1
000004bf: DUP2
000004c0: SSTORE
000004c1: CALLER
000004c2: DUP2
000004c3: MSTORE
000004c4: PUSH1 0x08
000004c6: PUSH1 0x20
000004c8: MSTORE
000004c9: PUSH1 0x40
000004cb: SWAP1
000004cc: KECCAK256
000004cd: SLOAD
000004ce: PUSH2 0x04d7
000004d1: SWAP1
000004d2: DUP3
000004d3: PUSH2 0x1344
000004d6: JUMP
000004d7: JUMPDEST
000004d8: POP
000004d9: PUSH1 0x01
000004db: PUSH1 0x00
000004dd: SSTORE
000004de: JUMP
000004df: JUMPDEST
000004e0: PUSH1 0x00
000004e2: DUP1
000004e3: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
00000504: PUSH1 0x01
00000506: PUSH1 0x01
00000508: PUSH1 0xa0
0000050a: SHL
0000050b: SUB
0000050c: AND
0000050d: PUSH4 0x1959a002
00000512: ADDRESS
00000513: PUSH1 0x40
00000515: MLOAD
00000516: DUP3
00000517: PUSH4 0xffffffff
0000051c: AND
0000051d: PUSH1 0xe0
0000051f: SHL
00000520: DUP2
00000521: MSTORE
00000522: PUSH1 0x04
00000524: ADD
00000525: PUSH2 0x052e
00000528: SWAP2
00000529: SWAP1
0000052a: PUSH2 0x1e24
0000052d: JUMP
0000052e: JUMPDEST
0000052f: PUSH1 0x40
00000531: DUP1
00000532: MLOAD
00000533: DUP1
00000534: DUP4
00000535: SUB
00000536: DUP2
00000537: DUP7
00000538: GAS
00000539: STATICCALL
0000053a: ISZERO
0000053b: DUP1
0000053c: ISZERO
0000053d: PUSH2 0x054a
00000540: JUMPI
00000541: RETURNDATASIZE
00000542: PUSH1 0x00
00000544: DUP1
00000545: RETURNDATACOPY
00000546: RETURNDATASIZE
00000547: PUSH1 0x00
00000549: REVERT
0000054a: JUMPDEST
0000054b: POP
0000054c: POP
0000054d: POP
0000054e: POP
0000054f: PUSH1 0x40
00000551: MLOAD
00000552: RETURNDATASIZE
00000553: PUSH1 0x1f
00000555: NOT
00000556: PUSH1 0x1f
00000558: DUP3
00000559: ADD
0000055a: AND
0000055b: DUP3
0000055c: ADD
0000055d: DUP1
0000055e: PUSH1 0x40
00000560: MSTORE
00000561: POP
00000562: DUP2
00000563: ADD
00000564: SWAP1
00000565: PUSH2 0x056e
00000568: SWAP2
00000569: SWAP1
0000056a: PUSH2 0x1f5e
0000056d: JUMP
0000056e: JUMPDEST
0000056f: POP
00000570: PUSH1 0x40
00000572: MLOAD
00000573: PUSH3 0x97aad1
00000577: PUSH1 0xe4
00000579: SHL
0000057a: DUP2
0000057b: MSTORE
0000057c: SWAP1
0000057d: SWAP2
0000057e: POP
0000057f: PUSH1 0x01
00000581: PUSH1 0x01
00000583: PUSH1 0xa0
00000585: SHL
00000586: SUB
00000587: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
000005a8: AND
000005a9: SWAP1
000005aa: PUSH4 0x097aad10
000005af: SWAP1
000005b0: PUSH2 0x05bd
000005b3: SWAP1
000005b4: ADDRESS
000005b5: SWAP1
000005b6: PUSH1 0x04
000005b8: ADD
000005b9: PUSH2 0x1e24
000005bc: JUMP
000005bd: JUMPDEST
000005be: PUSH1 0x20
000005c0: PUSH1 0x40
000005c2: MLOAD
000005c3: DUP1
000005c4: DUP4
000005c5: SUB
000005c6: DUP2
000005c7: DUP7
000005c8: GAS
000005c9: STATICCALL
000005ca: ISZERO
000005cb: DUP1
000005cc: ISZERO
000005cd: PUSH2 0x05da
000005d0: JUMPI
000005d1: RETURNDATASIZE
000005d2: PUSH1 0x00
000005d4: DUP1
000005d5: RETURNDATACOPY
000005d6: RETURNDATASIZE
000005d7: PUSH1 0x00
000005d9: REVERT
000005da: JUMPDEST
000005db: POP
000005dc: POP
000005dd: POP
000005de: POP
000005df: PUSH1 0x40
000005e1: MLOAD
000005e2: RETURNDATASIZE
000005e3: PUSH1 0x1f
000005e5: NOT
000005e6: PUSH1 0x1f
000005e8: DUP3
000005e9: ADD
000005ea: AND
000005eb: DUP3
000005ec: ADD
000005ed: DUP1
000005ee: PUSH1 0x40
000005f0: MSTORE
000005f1: POP
000005f2: DUP2
000005f3: ADD
000005f4: SWAP1
000005f5: PUSH2 0x05fe
000005f8: SWAP2
000005f9: SWAP1
000005fa: PUSH2 0x1f82
000005fd: JUMP
000005fe: JUMPDEST
000005ff: PUSH2 0x0608
00000602: SWAP1
00000603: DUP3
00000604: PUSH2 0x1fb1
00000607: JUMP
00000608: JUMPDEST
00000609: SWAP1
0000060a: POP
0000060b: PUSH1 0x07
0000060d: SLOAD
0000060e: PUSH1 0x00
00000610: EQ
00000611: PUSH2 0x0638
00000614: JUMPI
00000615: PUSH1 0x07
00000617: SLOAD
00000618: PUSH2 0x0629
0000061b: PUSH8 0x0de0b6b3a7640000
00000624: DUP4
00000625: PUSH2 0x1fc9
00000628: JUMP
00000629: JUMPDEST
0000062a: PUSH2 0x0633
0000062d: SWAP2
0000062e: SWAP1
0000062f: PUSH2 0x1fe8
00000632: JUMP
00000633: JUMPDEST
00000634: PUSH2 0x0642
00000637: JUMP
00000638: JUMPDEST
00000639: PUSH8 0x0de0b6b3a7640000
00000642: JUMPDEST
00000643: SWAP2
00000644: POP
00000645: POP
00000646: SWAP1
00000647: JUMP
00000648: JUMPDEST
00000649: PUSH1 0x00
0000064b: DUP3
0000064c: DUP2
0000064d: MSTORE
0000064e: PUSH1 0x01
00000650: PUSH1 0x20
00000652: DUP2
00000653: SWAP1
00000654: MSTORE
00000655: PUSH1 0x40
00000657: SWAP1
00000658: SWAP2
00000659: KECCAK256
0000065a: ADD
0000065b: SLOAD
0000065c: PUSH2 0x0665
0000065f: DUP2
00000660: CALLER
00000661: PUSH2 0x1609
00000664: JUMP
00000665: JUMPDEST
00000666: PUSH2 0x066f
00000669: DUP4
0000066a: DUP4
0000066b: PUSH2 0x166d
0000066e: JUMP
0000066f: JUMPDEST
00000670: POP
00000671: POP
00000672: POP
00000673: JUMP
00000674: JUMPDEST
00000675: PUSH1 0x00
00000677: PUSH1 0x02
00000679: PUSH1 0x00
0000067b: SLOAD
0000067c: EQ
0000067d: ISZERO
0000067e: PUSH2 0x0699
00000681: JUMPI
00000682: PUSH1 0x40
00000684: MLOAD
00000685: PUSH3 0x461bcd
00000689: PUSH1 0xe5
0000068b: SHL
0000068c: DUP2
0000068d: MSTORE
0000068e: PUSH1 0x04
00000690: ADD
00000691: PUSH2 0x04b0
00000694: SWAP1
00000695: PUSH2 0x1f27
00000698: JUMP
00000699: JUMPDEST
0000069a: PUSH1 0x02
0000069c: PUSH1 0x00
0000069e: SSTORE
0000069f: PUSH32 0x2561bf26f818282a3be40719542054d2173eb0d38539e8a8d3cff22f29fd2384
000006c0: PUSH2 0x06c9
000006c3: DUP2
000006c4: CALLER
000006c5: PUSH2 0x1609
000006c8: JUMP
000006c9: JUMPDEST
000006ca: PUSH8 0x0de0b6b3a7640000
000006d3: DUP4
000006d4: LT
000006d5: ISZERO
000006d6: PUSH2 0x06f1
000006d9: JUMPI
000006da: PUSH1 0x40
000006dc: MLOAD
000006dd: PUSH3 0x461bcd
000006e1: PUSH1 0xe5
000006e3: SHL
000006e4: DUP2
000006e5: MSTORE
000006e6: PUSH1 0x04
000006e8: ADD
000006e9: PUSH2 0x04b0
000006ec: SWAP1
000006ed: PUSH2 0x200a
000006f0: JUMP
000006f1: JUMPDEST
000006f2: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
00000713: PUSH1 0x01
00000715: PUSH1 0x01
00000717: PUSH1 0xa0
00000719: SHL
0000071a: SUB
0000071b: AND
0000071c: PUSH4 0x2a4e051b
00000721: PUSH1 0x40
00000723: MLOAD
00000724: DUP2
00000725: PUSH4 0xffffffff
0000072a: AND
0000072b: PUSH1 0xe0
0000072d: SHL
0000072e: DUP2
0000072f: MSTORE
00000730: PUSH1 0x04
00000732: ADD
00000733: PUSH1 0x00
00000735: PUSH1 0x40
00000737: MLOAD
00000738: DUP1
00000739: DUP4
0000073a: SUB
0000073b: DUP2
0000073c: PUSH1 0x00
0000073e: DUP8
0000073f: DUP1
00000740: EXTCODESIZE
00000741: ISZERO
00000742: DUP1
00000743: ISZERO
00000744: PUSH2 0x074c
00000747: JUMPI
00000748: PUSH1 0x00
0000074a: DUP1
0000074b: REVERT
0000074c: JUMPDEST
0000074d: POP
0000074e: GAS
0000074f: CALL
00000750: ISZERO
00000751: DUP1
00000752: ISZERO
00000753: PUSH2 0x0760
00000756: JUMPI
00000757: RETURNDATASIZE
00000758: PUSH1 0x00
0000075a: DUP1
0000075b: RETURNDATACOPY
0000075c: RETURNDATASIZE
0000075d: PUSH1 0x00
0000075f: REVERT
00000760: JUMPDEST
00000761: POP
00000762: POP
00000763: POP
00000764: POP
00000765: PUSH2 0x076d
00000768: DUP5
00000769: PUSH2 0x16d8
0000076c: JUMP
0000076d: JUMPDEST
0000076e: PUSH1 0x40
00000770: MLOAD
00000771: PUSH4 0x0cacd001
00000776: PUSH1 0xe1
00000778: SHL
00000779: DUP2
0000077a: MSTORE
0000077b: PUSH1 0x00
0000077d: SWAP1
0000077e: PUSH1 0x01
00000780: PUSH1 0x01
00000782: PUSH1 0xa0
00000784: SHL
00000785: SUB
00000786: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
000007a7: AND
000007a8: SWAP1
000007a9: PUSH4 0x1959a002
000007ae: SWAP1
000007af: PUSH2 0x07bc
000007b2: SWAP1
000007b3: ADDRESS
000007b4: SWAP1
000007b5: PUSH1 0x04
000007b7: ADD
000007b8: PUSH2 0x1e24
000007bb: JUMP
000007bc: JUMPDEST
000007bd: PUSH1 0x40
000007bf: DUP1
000007c0: MLOAD
000007c1: DUP1
000007c2: DUP4
000007c3: SUB
000007c4: DUP2
000007c5: DUP7
000007c6: GAS
000007c7: STATICCALL
000007c8: ISZERO
000007c9: DUP1
000007ca: ISZERO
000007cb: PUSH2 0x07d8
000007ce: JUMPI
000007cf: RETURNDATASIZE
000007d0: PUSH1 0x00
000007d2: DUP1
000007d3: RETURNDATACOPY
000007d4: RETURNDATASIZE
000007d5: PUSH1 0x00
000007d7: REVERT
000007d8: JUMPDEST
000007d9: POP
000007da: POP
000007db: POP
000007dc: POP
000007dd: PUSH1 0x40
000007df: MLOAD
000007e0: RETURNDATASIZE
000007e1: PUSH1 0x1f
000007e3: NOT
000007e4: PUSH1 0x1f
000007e6: DUP3
000007e7: ADD
000007e8: AND
000007e9: DUP3
000007ea: ADD
000007eb: DUP1
000007ec: PUSH1 0x40
000007ee: MSTORE
000007ef: POP
000007f0: DUP2
000007f1: ADD
000007f2: SWAP1
000007f3: PUSH2 0x07fc
000007f6: SWAP2
000007f7: SWAP1
000007f8: PUSH2 0x1f5e
000007fb: JUMP
000007fc: JUMPDEST
000007fd: POP
000007fe: SWAP1
000007ff: POP
00000800: PUSH2 0x0834
00000803: PUSH1 0x01
00000805: PUSH1 0x01
00000807: PUSH1 0xa0
00000809: SHL
0000080a: SUB
0000080b: PUSH32 0x0000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9
0000082c: AND
0000082d: CALLER
0000082e: ADDRESS
0000082f: DUP8
00000830: PUSH2 0x172d
00000833: JUMP
00000834: JUMPDEST
00000835: PUSH1 0x00
00000837: PUSH1 0x07
00000839: SLOAD
0000083a: PUSH1 0x00
0000083c: EQ
0000083d: PUSH2 0x087d
00000840: JUMPI
00000841: DUP2
00000842: PUSH1 0x07
00000844: SLOAD
00000845: DUP7
00000846: PUSH2 0x084f
00000849: SWAP2
0000084a: SWAP1
0000084b: PUSH2 0x1fc9
0000084e: JUMP
0000084f: JUMPDEST
00000850: PUSH2 0x0859
00000853: SWAP2
00000854: SWAP1
00000855: PUSH2 0x1fe8
00000858: JUMP
00000859: JUMPDEST
0000085a: SWAP1
0000085b: POP
0000085c: DUP1
0000085d: PUSH2 0x0878
00000860: JUMPI
00000861: PUSH1 0x40
00000863: MLOAD
00000864: PUSH3 0x461bcd
00000868: PUSH1 0xe5
0000086a: SHL
0000086b: DUP2
0000086c: MSTORE
0000086d: PUSH1 0x04
0000086f: ADD
00000870: PUSH2 0x04b0
00000873: SWAP1
00000874: PUSH2 0x204b
00000877: JUMP
00000878: JUMPDEST
00000879: PUSH2 0x0880
0000087c: JUMP
0000087d: JUMPDEST
0000087e: POP
0000087f: DUP4
00000880: JUMPDEST
00000881: PUSH1 0x01
00000883: PUSH1 0x01
00000885: PUSH1 0xa0
00000887: SHL
00000888: SUB
00000889: DUP7
0000088a: AND
0000088b: PUSH1 0x00
0000088d: SWAP1
0000088e: DUP2
0000088f: MSTORE
00000890: PUSH1 0x08
00000892: PUSH1 0x20
00000894: MSTORE
00000895: PUSH1 0x40
00000897: DUP2
00000898: KECCAK256
00000899: DUP1
0000089a: SLOAD
0000089b: DUP4
0000089c: SWAP3
0000089d: SWAP1
0000089e: PUSH2 0x08a8
000008a1: SWAP1
000008a2: DUP5
000008a3: SWAP1
000008a4: PUSH2 0x1fb1
000008a7: JUMP
000008a8: JUMPDEST
000008a9: SWAP3
000008aa: POP
000008ab: POP
000008ac: DUP2
000008ad: SWAP1
000008ae: SSTORE
000008af: POP
000008b0: DUP1
000008b1: PUSH1 0x07
000008b3: PUSH1 0x00
000008b5: DUP3
000008b6: DUP3
000008b7: SLOAD
000008b8: PUSH2 0x08c1
000008bb: SWAP2
000008bc: SWAP1
000008bd: PUSH2 0x1fb1
000008c0: JUMP
000008c1: JUMPDEST
000008c2: SWAP1
000008c3: SWAP2
000008c4: SSTORE
000008c5: POP
000008c6: PUSH2 0x08f1
000008c9: SWAP1
000008ca: POP
000008cb: DUP6
000008cc: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
000008ed: PUSH2 0x179e
000008f0: JUMP
000008f1: JUMPDEST
000008f2: PUSH1 0x40
000008f4: MLOAD
000008f5: PUSH4 0xb6b55f25
000008fa: PUSH1 0xe0
000008fc: SHL
000008fd: DUP2
000008fe: MSTORE
000008ff: PUSH1 0x04
00000901: DUP2
00000902: ADD
00000903: DUP7
00000904: SWAP1
00000905: MSTORE
00000906: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
00000927: PUSH1 0x01
00000929: PUSH1 0x01
0000092b: PUSH1 0xa0
0000092d: SHL
0000092e: SUB
0000092f: AND
00000930: SWAP1
00000931: PUSH4 0xb6b55f25
00000936: SWAP1
00000937: PUSH1 0x24
00000939: ADD
0000093a: PUSH1 0x00
0000093c: PUSH1 0x40
0000093e: MLOAD
0000093f: DUP1
00000940: DUP4
00000941: SUB
00000942: DUP2
00000943: PUSH1 0x00
00000945: DUP8
00000946: DUP1
00000947: EXTCODESIZE
00000948: ISZERO
00000949: DUP1
0000094a: ISZERO
0000094b: PUSH2 0x0953
0000094e: JUMPI
0000094f: PUSH1 0x00
00000951: DUP1
00000952: REVERT
00000953: JUMPDEST
00000954: POP
00000955: GAS
00000956: CALL
00000957: ISZERO
00000958: DUP1
00000959: ISZERO
0000095a: PUSH2 0x0967
0000095d: JUMPI
0000095e: RETURNDATASIZE
0000095f: PUSH1 0x00
00000961: DUP1
00000962: RETURNDATACOPY
00000963: RETURNDATASIZE
00000964: PUSH1 0x00
00000966: REVERT
00000967: JUMPDEST
00000968: POP
00000969: POP
0000096a: PUSH1 0x40
0000096c: DUP1
0000096d: MLOAD
0000096e: DUP9
0000096f: DUP2
00000970: MSTORE
00000971: PUSH1 0x00
00000973: PUSH1 0x20
00000975: DUP3
00000976: ADD
00000977: MSTORE
00000978: PUSH1 0x01
0000097a: PUSH1 0x01
0000097c: PUSH1 0xa0
0000097e: SHL
0000097f: SUB
00000980: DUP11
00000981: AND
00000982: SWAP4
00000983: POP
00000984: PUSH32 0x90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15
000009a5: SWAP3
000009a6: POP
000009a7: ADD
000009a8: PUSH1 0x40
000009aa: MLOAD
000009ab: DUP1
000009ac: SWAP2
000009ad: SUB
000009ae: SWAP1
000009af: LOG2
000009b0: PUSH1 0x01
000009b2: SWAP4
000009b3: POP
000009b4: POP
000009b5: POP
000009b6: POP
000009b7: PUSH1 0x01
000009b9: PUSH1 0x00
000009bb: SSTORE
000009bc: SWAP3
000009bd: SWAP2
000009be: POP
000009bf: POP
000009c0: JUMP
000009c1: JUMPDEST
000009c2: PUSH1 0x01
000009c4: PUSH1 0x01
000009c6: PUSH1 0xa0
000009c8: SHL
000009c9: SUB
000009ca: DUP2
000009cb: AND
000009cc: CALLER
000009cd: EQ
000009ce: PUSH2 0x0a31
000009d1: JUMPI
000009d2: PUSH1 0x40
000009d4: MLOAD
000009d5: PUSH3 0x461bcd
000009d9: PUSH1 0xe5
000009db: SHL
000009dc: DUP2
000009dd: MSTORE
000009de: PUSH1 0x20
000009e0: PUSH1 0x04
000009e2: DUP3
000009e3: ADD
000009e4: MSTORE
000009e5: PUSH1 0x2f
000009e7: PUSH1 0x24
000009e9: DUP3
000009ea: ADD
000009eb: MSTORE
000009ec: PUSH32 0x416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e6365
00000a0d: PUSH1 0x44
00000a0f: DUP3
00000a10: ADD
00000a11: MSTORE
00000a12: PUSH15 0x103937b632b9903337b91039b2b633
00000a22: PUSH1 0x89
00000a24: SHL
00000a25: PUSH1 0x64
00000a27: DUP3
00000a28: ADD
00000a29: MSTORE
00000a2a: PUSH1 0x84
00000a2c: ADD
00000a2d: PUSH2 0x04b0
00000a30: JUMP
00000a31: JUMPDEST
00000a32: PUSH2 0x0a3b
00000a35: DUP3
00000a36: DUP3
00000a37: PUSH2 0x18cc
00000a3a: JUMP
00000a3b: JUMPDEST
00000a3c: POP
00000a3d: POP
00000a3e: JUMP
00000a3f: JUMPDEST
00000a40: PUSH1 0x02
00000a42: PUSH1 0x00
00000a44: SLOAD
00000a45: EQ
00000a46: ISZERO
00000a47: PUSH2 0x0a62
00000a4a: JUMPI
00000a4b: PUSH1 0x40
00000a4d: MLOAD
00000a4e: PUSH3 0x461bcd
00000a52: PUSH1 0xe5
00000a54: SHL
00000a55: DUP2
00000a56: MSTORE
00000a57: PUSH1 0x04
00000a59: ADD
00000a5a: PUSH2 0x04b0
00000a5d: SWAP1
00000a5e: PUSH2 0x1f27
00000a61: JUMP
00000a62: JUMPDEST
00000a63: PUSH1 0x02
00000a65: PUSH1 0x00
00000a67: SSTORE
00000a68: DUP2
00000a69: ISZERO
00000a6a: DUP1
00000a6b: ISZERO
00000a6c: SWAP1
00000a6d: PUSH2 0x0a85
00000a70: JUMPI
00000a71: POP
00000a72: CALLER
00000a73: PUSH1 0x00
00000a75: SWAP1
00000a76: DUP2
00000a77: MSTORE
00000a78: PUSH1 0x08
00000a7a: PUSH1 0x20
00000a7c: MSTORE
00000a7d: PUSH1 0x40
00000a7f: SWAP1
00000a80: KECCAK256
00000a81: SLOAD
00000a82: DUP3
00000a83: GT
00000a84: ISZERO
00000a85: JUMPDEST
00000a86: PUSH2 0x0af0
00000a89: JUMPI
00000a8a: PUSH1 0x40
00000a8c: MLOAD
00000a8d: PUSH3 0x461bcd
00000a91: PUSH1 0xe5
00000a93: SHL
00000a94: DUP2
00000a95: MSTORE
00000a96: PUSH1 0x20
00000a98: PUSH1 0x04
00000a9a: DUP3
00000a9b: ADD
00000a9c: MSTORE
00000a9d: PUSH1 0x36
00000a9f: PUSH1 0x24
00000aa1: DUP3
00000aa2: ADD
00000aa3: MSTORE
00000aa4: PUSH32 0x57697468647261773a2053686172657320657175616c20746f2030206f72206c
00000ac5: PUSH1 0x44
00000ac7: DUP3
00000ac8: ADD
00000ac9: MSTORE
00000aca: PUSH22 0x6172676572207468616e207573657220736861726573
00000ae1: PUSH1 0x50
00000ae3: SHL
00000ae4: PUSH1 0x64
00000ae6: DUP3
00000ae7: ADD
00000ae8: MSTORE
00000ae9: PUSH1 0x84
00000aeb: ADD
00000aec: PUSH2 0x04b0
00000aef: JUMP
00000af0: JUMPDEST
00000af1: PUSH2 0x0afa
00000af4: DUP3
00000af5: DUP3
00000af6: PUSH2 0x1344
00000af9: JUMP
00000afa: JUMPDEST
00000afb: POP
00000afc: POP
00000afd: PUSH1 0x01
00000aff: PUSH1 0x00
00000b01: SSTORE
00000b02: JUMP
00000b03: JUMPDEST
00000b04: PUSH1 0x02
00000b06: PUSH1 0x00
00000b08: SLOAD
00000b09: EQ
00000b0a: ISZERO
00000b0b: PUSH2 0x0b26
00000b0e: JUMPI
00000b0f: PUSH1 0x40
00000b11: MLOAD
00000b12: PUSH3 0x461bcd
00000b16: PUSH1 0xe5
00000b18: SHL
00000b19: DUP2
00000b1a: MSTORE
00000b1b: PUSH1 0x04
00000b1d: ADD
00000b1e: PUSH2 0x04b0
00000b21: SWAP1
00000b22: PUSH2 0x1f27
00000b25: JUMP
00000b26: JUMPDEST
00000b27: PUSH1 0x02
00000b29: PUSH1 0x00
00000b2b: DUP2
00000b2c: SWAP1
00000b2d: SSTORE
00000b2e: POP
00000b2f: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
00000b50: PUSH1 0x01
00000b52: PUSH1 0x01
00000b54: PUSH1 0xa0
00000b56: SHL
00000b57: SUB
00000b58: AND
00000b59: PUSH4 0x2a4e051b
00000b5e: PUSH1 0x40
00000b60: MLOAD
00000b61: DUP2
00000b62: PUSH4 0xffffffff
00000b67: AND
00000b68: PUSH1 0xe0
00000b6a: SHL
00000b6b: DUP2
00000b6c: MSTORE
00000b6d: PUSH1 0x04
00000b6f: ADD
00000b70: PUSH1 0x00
00000b72: PUSH1 0x40
00000b74: MLOAD
00000b75: DUP1
00000b76: DUP4
00000b77: SUB
00000b78: DUP2
00000b79: PUSH1 0x00
00000b7b: DUP8
00000b7c: DUP1
00000b7d: EXTCODESIZE
00000b7e: ISZERO
00000b7f: DUP1
00000b80: ISZERO
00000b81: PUSH2 0x0b89
00000b84: JUMPI
00000b85: PUSH1 0x00
00000b87: DUP1
00000b88: REVERT
00000b89: JUMPDEST
00000b8a: POP
00000b8b: GAS
00000b8c: CALL
00000b8d: ISZERO
00000b8e: DUP1
00000b8f: ISZERO
00000b90: PUSH2 0x0b9d
00000b93: JUMPI
00000b94: RETURNDATASIZE
00000b95: PUSH1 0x00
00000b97: DUP1
00000b98: RETURNDATACOPY
00000b99: RETURNDATASIZE
00000b9a: PUSH1 0x00
00000b9c: REVERT
00000b9d: JUMPDEST
00000b9e: POP
00000b9f: POP
00000ba0: POP
00000ba1: POP
00000ba2: PUSH2 0x0baa
00000ba5: CALLER
00000ba6: PUSH2 0x16d8
00000ba9: JUMP
00000baa: JUMPDEST
00000bab: CALLER
00000bac: PUSH1 0x00
00000bae: SWAP1
00000baf: DUP2
00000bb0: MSTORE
00000bb1: PUSH1 0x08
00000bb3: PUSH1 0x20
00000bb5: MSTORE
00000bb6: PUSH1 0x40
00000bb8: SWAP1
00000bb9: KECCAK256
00000bba: PUSH1 0x02
00000bbc: ADD
00000bbd: SLOAD
00000bbe: DUP1
00000bbf: PUSH2 0x0c16
00000bc2: JUMPI
00000bc3: PUSH1 0x40
00000bc5: MLOAD
00000bc6: PUSH3 0x461bcd
00000bca: PUSH1 0xe5
00000bcc: SHL
00000bcd: DUP2
00000bce: MSTORE
00000bcf: PUSH1 0x20
00000bd1: PUSH1 0x04
00000bd3: DUP3
00000bd4: ADD
00000bd5: MSTORE
00000bd6: PUSH1 0x24
00000bd8: DUP1
00000bd9: DUP3
00000bda: ADD
00000bdb: MSTORE
00000bdc: PUSH32 0x486172766573743a2050656e64696e672072657761726473206d757374206265
00000bfd: PUSH1 0x44
00000bff: DUP3
00000c00: ADD
00000c01: MSTORE
00000c02: PUSH4 0x0203e203
00000c07: PUSH1 0xe4
00000c09: SHL
00000c0a: PUSH1 0x64
00000c0c: DUP3
00000c0d: ADD
00000c0e: MSTORE
00000c0f: PUSH1 0x84
00000c11: ADD
00000c12: PUSH2 0x04b0
00000c15: JUMP
00000c16: JUMPDEST
00000c17: CALLER
00000c18: PUSH1 0x00
00000c1a: DUP2
00000c1b: DUP2
00000c1c: MSTORE
00000c1d: PUSH1 0x08
00000c1f: PUSH1 0x20
00000c21: MSTORE
00000c22: PUSH1 0x40
00000c24: DUP2
00000c25: KECCAK256
00000c26: PUSH1 0x02
00000c28: ADD
00000c29: SSTORE
00000c2a: PUSH2 0x0c5e
00000c2d: SWAP1
00000c2e: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00000c4f: PUSH1 0x01
00000c51: PUSH1 0x01
00000c53: PUSH1 0xa0
00000c55: SHL
00000c56: SUB
00000c57: AND
00000c58: SWAP1
00000c59: DUP4
00000c5a: PUSH2 0x1933
00000c5d: JUMP
00000c5e: JUMPDEST
00000c5f: PUSH1 0x40
00000c61: MLOAD
00000c62: DUP2
00000c63: DUP2
00000c64: MSTORE
00000c65: CALLER
00000c66: SWAP1
00000c67: PUSH32 0xc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba
00000c88: SWAP1
00000c89: PUSH1 0x20
00000c8b: ADD
00000c8c: PUSH1 0x40
00000c8e: MLOAD
00000c8f: DUP1
00000c90: SWAP2
00000c91: SUB
00000c92: SWAP1
00000c93: LOG2
00000c94: POP
00000c95: PUSH1 0x01
00000c97: PUSH1 0x00
00000c99: SSTORE
00000c9a: JUMP
00000c9b: JUMPDEST
00000c9c: PUSH1 0x00
00000c9e: SWAP2
00000c9f: DUP3
00000ca0: MSTORE
00000ca1: PUSH1 0x01
00000ca3: PUSH1 0x20
00000ca5: SWAP1
00000ca6: DUP2
00000ca7: MSTORE
00000ca8: PUSH1 0x40
00000caa: DUP1
00000cab: DUP5
00000cac: KECCAK256
00000cad: PUSH1 0x01
00000caf: PUSH1 0x01
00000cb1: PUSH1 0xa0
00000cb3: SHL
00000cb4: SUB
00000cb5: SWAP4
00000cb6: SWAP1
00000cb7: SWAP4
00000cb8: AND
00000cb9: DUP5
00000cba: MSTORE
00000cbb: SWAP2
00000cbc: SWAP1
00000cbd: MSTORE
00000cbe: SWAP1
00000cbf: KECCAK256
00000cc0: SLOAD
00000cc1: PUSH1 0xff
00000cc3: AND
00000cc4: SWAP1
00000cc5: JUMP
00000cc6: JUMPDEST
00000cc7: PUSH32 0xd139c7f3a5460f246794bd24bff3478b49114f682a7cc4513889d72531631b96
00000ce8: PUSH2 0x0cf1
00000ceb: DUP2
00000cec: CALLER
00000ced: PUSH2 0x1609
00000cf0: JUMP
00000cf1: JUMPDEST
00000cf2: PUSH1 0x05
00000cf4: SLOAD
00000cf5: NUMBER
00000cf6: LT
00000cf7: PUSH2 0x0d0c
00000cfa: JUMPI
00000cfb: PUSH2 0x0d04
00000cfe: DUP3
00000cff: DUP5
00000d00: PUSH2 0x1fe8
00000d03: JUMP
00000d04: JUMPDEST
00000d05: PUSH1 0x02
00000d07: SSTORE
00000d08: PUSH2 0x0d40
00000d0b: JUMP
00000d0c: JUMPDEST
00000d0d: DUP2
00000d0e: PUSH1 0x02
00000d10: SLOAD
00000d11: NUMBER
00000d12: PUSH1 0x05
00000d14: SLOAD
00000d15: PUSH2 0x0d1e
00000d18: SWAP2
00000d19: SWAP1
00000d1a: PUSH2 0x2072
00000d1d: JUMP
00000d1e: JUMPDEST
00000d1f: PUSH2 0x0d28
00000d22: SWAP2
00000d23: SWAP1
00000d24: PUSH2 0x1fc9
00000d27: JUMP
00000d28: JUMPDEST
00000d29: PUSH2 0x0d32
00000d2c: SWAP1
00000d2d: DUP6
00000d2e: PUSH2 0x1fb1
00000d31: JUMP
00000d32: JUMPDEST
00000d33: PUSH2 0x0d3c
00000d36: SWAP2
00000d37: SWAP1
00000d38: PUSH2 0x1fe8
00000d3b: JUMP
00000d3c: JUMPDEST
00000d3d: PUSH1 0x02
00000d3f: SSTORE
00000d40: JUMPDEST
00000d41: NUMBER
00000d42: PUSH1 0x04
00000d44: DUP2
00000d45: SWAP1
00000d46: SSTORE
00000d47: PUSH2 0x0d51
00000d4a: SWAP1
00000d4b: DUP4
00000d4c: SWAP1
00000d4d: PUSH2 0x1fb1
00000d50: JUMP
00000d51: JUMPDEST
00000d52: PUSH1 0x05
00000d54: SSTORE
00000d55: PUSH1 0x02
00000d57: SLOAD
00000d58: PUSH1 0x40
00000d5a: DUP1
00000d5b: MLOAD
00000d5c: DUP5
00000d5d: DUP2
00000d5e: MSTORE
00000d5f: PUSH1 0x20
00000d61: DUP2
00000d62: ADD
00000d63: SWAP3
00000d64: SWAP1
00000d65: SWAP3
00000d66: MSTORE
00000d67: DUP2
00000d68: ADD
00000d69: DUP5
00000d6a: SWAP1
00000d6b: MSTORE
00000d6c: PUSH32 0x55b4fa63fe43865f67b4f2c4a4df1cf9e6c1f85767211b44b45cf4649b2c2b51
00000d8d: SWAP1
00000d8e: PUSH1 0x60
00000d90: ADD
00000d91: PUSH1 0x40
00000d93: MLOAD
00000d94: DUP1
00000d95: SWAP2
00000d96: SUB
00000d97: SWAP1
00000d98: LOG1
00000d99: POP
00000d9a: POP
00000d9b: POP
00000d9c: JUMP
00000d9d: JUMPDEST
00000d9e: PUSH1 0x02
00000da0: PUSH1 0x00
00000da2: SLOAD
00000da3: EQ
00000da4: ISZERO
00000da5: PUSH2 0x0dc0
00000da8: JUMPI
00000da9: PUSH1 0x40
00000dab: MLOAD
00000dac: PUSH3 0x461bcd
00000db0: PUSH1 0xe5
00000db2: SHL
00000db3: DUP2
00000db4: MSTORE
00000db5: PUSH1 0x04
00000db7: ADD
00000db8: PUSH2 0x04b0
00000dbb: SWAP1
00000dbc: PUSH2 0x1f27
00000dbf: JUMP
00000dc0: JUMPDEST
00000dc1: PUSH1 0x02
00000dc3: PUSH1 0x00
00000dc5: SSTORE
00000dc6: PUSH8 0x0de0b6b3a7640000
00000dcf: DUP3
00000dd0: LT
00000dd1: ISZERO
00000dd2: PUSH2 0x0ded
00000dd5: JUMPI
00000dd6: PUSH1 0x40
00000dd8: MLOAD
00000dd9: PUSH3 0x461bcd
00000ddd: PUSH1 0xe5
00000ddf: SHL
00000de0: DUP2
00000de1: MSTORE
00000de2: PUSH1 0x04
00000de4: ADD
00000de5: PUSH2 0x04b0
00000de8: SWAP1
00000de9: PUSH2 0x200a
00000dec: JUMP
00000ded: JUMPDEST
00000dee: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
00000e0f: PUSH1 0x01
00000e11: PUSH1 0x01
00000e13: PUSH1 0xa0
00000e15: SHL
00000e16: SUB
00000e17: AND
00000e18: PUSH4 0x2a4e051b
00000e1d: PUSH1 0x40
00000e1f: MLOAD
00000e20: DUP2
00000e21: PUSH4 0xffffffff
00000e26: AND
00000e27: PUSH1 0xe0
00000e29: SHL
00000e2a: DUP2
00000e2b: MSTORE
00000e2c: PUSH1 0x04
00000e2e: ADD
00000e2f: PUSH1 0x00
00000e31: PUSH1 0x40
00000e33: MLOAD
00000e34: DUP1
00000e35: DUP4
00000e36: SUB
00000e37: DUP2
00000e38: PUSH1 0x00
00000e3a: DUP8
00000e3b: DUP1
00000e3c: EXTCODESIZE
00000e3d: ISZERO
00000e3e: DUP1
00000e3f: ISZERO
00000e40: PUSH2 0x0e48
00000e43: JUMPI
00000e44: PUSH1 0x00
00000e46: DUP1
00000e47: REVERT
00000e48: JUMPDEST
00000e49: POP
00000e4a: GAS
00000e4b: CALL
00000e4c: ISZERO
00000e4d: DUP1
00000e4e: ISZERO
00000e4f: PUSH2 0x0e5c
00000e52: JUMPI
00000e53: RETURNDATASIZE
00000e54: PUSH1 0x00
00000e56: DUP1
00000e57: RETURNDATACOPY
00000e58: RETURNDATASIZE
00000e59: PUSH1 0x00
00000e5b: REVERT
00000e5c: JUMPDEST
00000e5d: POP
00000e5e: POP
00000e5f: POP
00000e60: POP
00000e61: PUSH2 0x0e69
00000e64: CALLER
00000e65: PUSH2 0x16d8
00000e68: JUMP
00000e69: JUMPDEST
00000e6a: PUSH1 0x40
00000e6c: MLOAD
00000e6d: PUSH4 0x0cacd001
00000e72: PUSH1 0xe1
00000e74: SHL
00000e75: DUP2
00000e76: MSTORE
00000e77: PUSH1 0x00
00000e79: SWAP1
00000e7a: PUSH1 0x01
00000e7c: PUSH1 0x01
00000e7e: PUSH1 0xa0
00000e80: SHL
00000e81: SUB
00000e82: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
00000ea3: AND
00000ea4: SWAP1
00000ea5: PUSH4 0x1959a002
00000eaa: SWAP1
00000eab: PUSH2 0x0eb8
00000eae: SWAP1
00000eaf: ADDRESS
00000eb0: SWAP1
00000eb1: PUSH1 0x04
00000eb3: ADD
00000eb4: PUSH2 0x1e24
00000eb7: JUMP
00000eb8: JUMPDEST
00000eb9: PUSH1 0x40
00000ebb: DUP1
00000ebc: MLOAD
00000ebd: DUP1
00000ebe: DUP4
00000ebf: SUB
00000ec0: DUP2
00000ec1: DUP7
00000ec2: GAS
00000ec3: STATICCALL
00000ec4: ISZERO
00000ec5: DUP1
00000ec6: ISZERO
00000ec7: PUSH2 0x0ed4
00000eca: JUMPI
00000ecb: RETURNDATASIZE
00000ecc: PUSH1 0x00
00000ece: DUP1
00000ecf: RETURNDATACOPY
00000ed0: RETURNDATASIZE
00000ed1: PUSH1 0x00
00000ed3: REVERT
00000ed4: JUMPDEST
00000ed5: POP
00000ed6: POP
00000ed7: POP
00000ed8: POP
00000ed9: PUSH1 0x40
00000edb: MLOAD
00000edc: RETURNDATASIZE
00000edd: PUSH1 0x1f
00000edf: NOT
00000ee0: PUSH1 0x1f
00000ee2: DUP3
00000ee3: ADD
00000ee4: AND
00000ee5: DUP3
00000ee6: ADD
00000ee7: DUP1
00000ee8: PUSH1 0x40
00000eea: MSTORE
00000eeb: POP
00000eec: DUP2
00000eed: ADD
00000eee: SWAP1
00000eef: PUSH2 0x0ef8
00000ef2: SWAP2
00000ef3: SWAP1
00000ef4: PUSH2 0x1f5e
00000ef7: JUMP
00000ef8: JUMPDEST
00000ef9: POP
00000efa: SWAP1
00000efb: POP
00000efc: PUSH2 0x0f30
00000eff: PUSH1 0x01
00000f01: PUSH1 0x01
00000f03: PUSH1 0xa0
00000f05: SHL
00000f06: SUB
00000f07: PUSH32 0x0000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9
00000f28: AND
00000f29: CALLER
00000f2a: ADDRESS
00000f2b: DUP7
00000f2c: PUSH2 0x172d
00000f2f: JUMP
00000f30: JUMPDEST
00000f31: PUSH1 0x00
00000f33: PUSH1 0x07
00000f35: SLOAD
00000f36: PUSH1 0x00
00000f38: EQ
00000f39: PUSH2 0x0f79
00000f3c: JUMPI
00000f3d: DUP2
00000f3e: PUSH1 0x07
00000f40: SLOAD
00000f41: DUP6
00000f42: PUSH2 0x0f4b
00000f45: SWAP2
00000f46: SWAP1
00000f47: PUSH2 0x1fc9
00000f4a: JUMP
00000f4b: JUMPDEST
00000f4c: PUSH2 0x0f55
00000f4f: SWAP2
00000f50: SWAP1
00000f51: PUSH2 0x1fe8
00000f54: JUMP
00000f55: JUMPDEST
00000f56: SWAP1
00000f57: POP
00000f58: DUP1
00000f59: PUSH2 0x0f74
00000f5c: JUMPI
00000f5d: PUSH1 0x40
00000f5f: MLOAD
00000f60: PUSH3 0x461bcd
00000f64: PUSH1 0xe5
00000f66: SHL
00000f67: DUP2
00000f68: MSTORE
00000f69: PUSH1 0x04
00000f6b: ADD
00000f6c: PUSH2 0x04b0
00000f6f: SWAP1
00000f70: PUSH2 0x204b
00000f73: JUMP
00000f74: JUMPDEST
00000f75: PUSH2 0x0f7c
00000f78: JUMP
00000f79: JUMPDEST
00000f7a: POP
00000f7b: DUP3
00000f7c: JUMPDEST
00000f7d: CALLER
00000f7e: PUSH1 0x00
00000f80: SWAP1
00000f81: DUP2
00000f82: MSTORE
00000f83: PUSH1 0x08
00000f85: PUSH1 0x20
00000f87: MSTORE
00000f88: PUSH1 0x40
00000f8a: DUP2
00000f8b: KECCAK256
00000f8c: DUP1
00000f8d: SLOAD
00000f8e: DUP4
00000f8f: SWAP3
00000f90: SWAP1
00000f91: PUSH2 0x0f9b
00000f94: SWAP1
00000f95: DUP5
00000f96: SWAP1
00000f97: PUSH2 0x1fb1
00000f9a: JUMP
00000f9b: JUMPDEST
00000f9c: SWAP3
00000f9d: POP
00000f9e: POP
00000f9f: DUP2
00000fa0: SWAP1
00000fa1: SSTORE
00000fa2: POP
00000fa3: DUP1
00000fa4: PUSH1 0x07
00000fa6: PUSH1 0x00
00000fa8: DUP3
00000fa9: DUP3
00000faa: SLOAD
00000fab: PUSH2 0x0fb4
00000fae: SWAP2
00000faf: SWAP1
00000fb0: PUSH2 0x1fb1
00000fb3: JUMP
00000fb4: JUMPDEST
00000fb5: SWAP1
00000fb6: SWAP2
00000fb7: SSTORE
00000fb8: POP
00000fb9: PUSH1 0x00
00000fbb: SWAP1
00000fbc: POP
00000fbd: DUP4
00000fbe: ISZERO
00000fbf: PUSH2 0x1024
00000fc2: JUMPI
00000fc3: POP
00000fc4: CALLER
00000fc5: PUSH1 0x00
00000fc7: SWAP1
00000fc8: DUP2
00000fc9: MSTORE
00000fca: PUSH1 0x08
00000fcc: PUSH1 0x20
00000fce: MSTORE
00000fcf: PUSH1 0x40
00000fd1: SWAP1
00000fd2: KECCAK256
00000fd3: PUSH1 0x02
00000fd5: ADD
00000fd6: SLOAD
00000fd7: DUP1
00000fd8: ISZERO
00000fd9: PUSH2 0x1024
00000fdc: JUMPI
00000fdd: CALLER
00000fde: PUSH1 0x00
00000fe0: DUP2
00000fe1: DUP2
00000fe2: MSTORE
00000fe3: PUSH1 0x08
00000fe5: PUSH1 0x20
00000fe7: MSTORE
00000fe8: PUSH1 0x40
00000fea: DUP2
00000feb: KECCAK256
00000fec: PUSH1 0x02
00000fee: ADD
00000fef: SSTORE
00000ff0: PUSH2 0x1024
00000ff3: SWAP1
00000ff4: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00001015: PUSH1 0x01
00001017: PUSH1 0x01
00001019: PUSH1 0xa0
0000101b: SHL
0000101c: SUB
0000101d: AND
0000101e: SWAP1
0000101f: DUP4
00001020: PUSH2 0x1933
00001023: JUMP
00001024: JUMPDEST
00001025: PUSH2 0x104e
00001028: DUP6
00001029: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
0000104a: PUSH2 0x179e
0000104d: JUMP
0000104e: JUMPDEST
0000104f: PUSH1 0x40
00001051: MLOAD
00001052: PUSH4 0xb6b55f25
00001057: PUSH1 0xe0
00001059: SHL
0000105a: DUP2
0000105b: MSTORE
0000105c: PUSH1 0x04
0000105e: DUP2
0000105f: ADD
00001060: DUP7
00001061: SWAP1
00001062: MSTORE
00001063: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
00001084: PUSH1 0x01
00001086: PUSH1 0x01
00001088: PUSH1 0xa0
0000108a: SHL
0000108b: SUB
0000108c: AND
0000108d: SWAP1
0000108e: PUSH4 0xb6b55f25
00001093: SWAP1
00001094: PUSH1 0x24
00001096: ADD
00001097: PUSH1 0x00
00001099: PUSH1 0x40
0000109b: MLOAD
0000109c: DUP1
0000109d: DUP4
0000109e: SUB
0000109f: DUP2
000010a0: PUSH1 0x00
000010a2: DUP8
000010a3: DUP1
000010a4: EXTCODESIZE
000010a5: ISZERO
000010a6: DUP1
000010a7: ISZERO
000010a8: PUSH2 0x10b0
000010ab: JUMPI
000010ac: PUSH1 0x00
000010ae: DUP1
000010af: REVERT
000010b0: JUMPDEST
000010b1: POP
000010b2: GAS
000010b3: CALL
000010b4: ISZERO
000010b5: DUP1
000010b6: ISZERO
000010b7: PUSH2 0x10c4
000010ba: JUMPI
000010bb: RETURNDATASIZE
000010bc: PUSH1 0x00
000010be: DUP1
000010bf: RETURNDATACOPY
000010c0: RETURNDATASIZE
000010c1: PUSH1 0x00
000010c3: REVERT
000010c4: JUMPDEST
000010c5: POP
000010c6: POP
000010c7: PUSH1 0x40
000010c9: DUP1
000010ca: MLOAD
000010cb: DUP9
000010cc: DUP2
000010cd: MSTORE
000010ce: PUSH1 0x20
000010d0: DUP2
000010d1: ADD
000010d2: DUP6
000010d3: SWAP1
000010d4: MSTORE
000010d5: CALLER
000010d6: SWAP4
000010d7: POP
000010d8: PUSH32 0x90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15
000010f9: SWAP3
000010fa: POP
000010fb: ADD
000010fc: PUSH1 0x40
000010fe: MLOAD
000010ff: DUP1
00001100: SWAP2
00001101: SUB
00001102: SWAP1
00001103: LOG2
00001104: POP
00001105: POP
00001106: PUSH1 0x01
00001108: PUSH1 0x00
0000110a: SSTORE
0000110b: POP
0000110c: POP
0000110d: POP
0000110e: JUMP
0000110f: JUMPDEST
00001110: PUSH1 0x00
00001112: PUSH2 0x1119
00001115: PUSH2 0x1963
00001118: JUMP
00001119: JUMPDEST
0000111a: SWAP1
0000111b: POP
0000111c: SWAP1
0000111d: JUMP
0000111e: JUMPDEST
0000111f: PUSH1 0x00
00001121: DUP3
00001122: DUP2
00001123: MSTORE
00001124: PUSH1 0x01
00001126: PUSH1 0x20
00001128: DUP2
00001129: SWAP1
0000112a: MSTORE
0000112b: PUSH1 0x40
0000112d: SWAP1
0000112e: SWAP2
0000112f: KECCAK256
00001130: ADD
00001131: SLOAD
00001132: PUSH2 0x113b
00001135: DUP2
00001136: CALLER
00001137: PUSH2 0x1609
0000113a: JUMP
0000113b: JUMPDEST
0000113c: PUSH2 0x066f
0000113f: DUP4
00001140: DUP4
00001141: PUSH2 0x18cc
00001144: JUMP
00001145: JUMPDEST
00001146: PUSH1 0x00
00001148: DUP1
00001149: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
0000116a: PUSH1 0x01
0000116c: PUSH1 0x01
0000116e: PUSH1 0xa0
00001170: SHL
00001171: SUB
00001172: AND
00001173: PUSH4 0x1959a002
00001178: ADDRESS
00001179: PUSH1 0x40
0000117b: MLOAD
0000117c: DUP3
0000117d: PUSH4 0xffffffff
00001182: AND
00001183: PUSH1 0xe0
00001185: SHL
00001186: DUP2
00001187: MSTORE
00001188: PUSH1 0x04
0000118a: ADD
0000118b: PUSH2 0x1194
0000118e: SWAP2
0000118f: SWAP1
00001190: PUSH2 0x1e24
00001193: JUMP
00001194: JUMPDEST
00001195: PUSH1 0x40
00001197: DUP1
00001198: MLOAD
00001199: DUP1
0000119a: DUP4
0000119b: SUB
0000119c: DUP2
0000119d: DUP7
0000119e: GAS
0000119f: STATICCALL
000011a0: ISZERO
000011a1: DUP1
000011a2: ISZERO
000011a3: PUSH2 0x11b0
000011a6: JUMPI
000011a7: RETURNDATASIZE
000011a8: PUSH1 0x00
000011aa: DUP1
000011ab: RETURNDATACOPY
000011ac: RETURNDATASIZE
000011ad: PUSH1 0x00
000011af: REVERT
000011b0: JUMPDEST
000011b1: POP
000011b2: POP
000011b3: POP
000011b4: POP
000011b5: PUSH1 0x40
000011b7: MLOAD
000011b8: RETURNDATASIZE
000011b9: PUSH1 0x1f
000011bb: NOT
000011bc: PUSH1 0x1f
000011be: DUP3
000011bf: ADD
000011c0: AND
000011c1: DUP3
000011c2: ADD
000011c3: DUP1
000011c4: PUSH1 0x40
000011c6: MSTORE
000011c7: POP
000011c8: DUP2
000011c9: ADD
000011ca: SWAP1
000011cb: PUSH2 0x11d4
000011ce: SWAP2
000011cf: SWAP1
000011d0: PUSH2 0x1f5e
000011d3: JUMP
000011d4: JUMPDEST
000011d5: POP
000011d6: PUSH1 0x40
000011d8: MLOAD
000011d9: PUSH3 0x97aad1
000011dd: PUSH1 0xe4
000011df: SHL
000011e0: DUP2
000011e1: MSTORE
000011e2: SWAP1
000011e3: SWAP2
000011e4: POP
000011e5: PUSH1 0x01
000011e7: PUSH1 0x01
000011e9: PUSH1 0xa0
000011eb: SHL
000011ec: SUB
000011ed: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
0000120e: AND
0000120f: SWAP1
00001210: PUSH4 0x097aad10
00001215: SWAP1
00001216: PUSH2 0x1223
00001219: SWAP1
0000121a: ADDRESS
0000121b: SWAP1
0000121c: PUSH1 0x04
0000121e: ADD
0000121f: PUSH2 0x1e24
00001222: JUMP
00001223: JUMPDEST
00001224: PUSH1 0x20
00001226: PUSH1 0x40
00001228: MLOAD
00001229: DUP1
0000122a: DUP4
0000122b: SUB
0000122c: DUP2
0000122d: DUP7
0000122e: GAS
0000122f: STATICCALL
00001230: ISZERO
00001231: DUP1
00001232: ISZERO
00001233: PUSH2 0x1240
00001236: JUMPI
00001237: RETURNDATASIZE
00001238: PUSH1 0x00
0000123a: DUP1
0000123b: RETURNDATACOPY
0000123c: RETURNDATASIZE
0000123d: PUSH1 0x00
0000123f: REVERT
00001240: JUMPDEST
00001241: POP
00001242: POP
00001243: POP
00001244: POP
00001245: PUSH1 0x40
00001247: MLOAD
00001248: RETURNDATASIZE
00001249: PUSH1 0x1f
0000124b: NOT
0000124c: PUSH1 0x1f
0000124e: DUP3
0000124f: ADD
00001250: AND
00001251: DUP3
00001252: ADD
00001253: DUP1
00001254: PUSH1 0x40
00001256: MSTORE
00001257: POP
00001258: DUP2
00001259: ADD
0000125a: SWAP1
0000125b: PUSH2 0x1264
0000125e: SWAP2
0000125f: SWAP1
00001260: PUSH2 0x1f82
00001263: JUMP
00001264: JUMPDEST
00001265: PUSH2 0x126e
00001268: SWAP1
00001269: DUP3
0000126a: PUSH2 0x1fb1
0000126d: JUMP
0000126e: JUMPDEST
0000126f: PUSH1 0x01
00001271: PUSH1 0x01
00001273: PUSH1 0xa0
00001275: SHL
00001276: SUB
00001277: DUP5
00001278: AND
00001279: PUSH1 0x00
0000127b: SWAP1
0000127c: DUP2
0000127d: MSTORE
0000127e: PUSH1 0x08
00001280: PUSH1 0x20
00001282: MSTORE
00001283: PUSH1 0x40
00001285: SWAP1
00001286: KECCAK256
00001287: SLOAD
00001288: SWAP1
00001289: SWAP2
0000128a: POP
0000128b: ISZERO
0000128c: PUSH2 0x12c4
0000128f: JUMPI
00001290: PUSH1 0x07
00001292: SLOAD
00001293: PUSH1 0x01
00001295: PUSH1 0x01
00001297: PUSH1 0xa0
00001299: SHL
0000129a: SUB
0000129b: DUP5
0000129c: AND
0000129d: PUSH1 0x00
0000129f: SWAP1
000012a0: DUP2
000012a1: MSTORE
000012a2: PUSH1 0x08
000012a4: PUSH1 0x20
000012a6: MSTORE
000012a7: PUSH1 0x40
000012a9: SWAP1
000012aa: KECCAK256
000012ab: SLOAD
000012ac: PUSH2 0x12b5
000012af: SWAP1
000012b0: DUP4
000012b1: PUSH2 0x1fc9
000012b4: JUMP
000012b5: JUMPDEST
000012b6: PUSH2 0x12bf
000012b9: SWAP2
000012ba: SWAP1
000012bb: PUSH2 0x1fe8
000012be: JUMP
000012bf: JUMPDEST
000012c0: PUSH2 0x12c7
000012c3: JUMP
000012c4: JUMPDEST
000012c5: PUSH1 0x00
000012c7: JUMPDEST
000012c8: SWAP4
000012c9: SWAP3
000012ca: POP
000012cb: POP
000012cc: POP
000012cd: JUMP
000012ce: JUMPDEST
000012cf: PUSH1 0x01
000012d1: PUSH1 0x01
000012d3: PUSH1 0xa0
000012d5: SHL
000012d6: SUB
000012d7: DUP2
000012d8: AND
000012d9: PUSH1 0x00
000012db: SWAP1
000012dc: DUP2
000012dd: MSTORE
000012de: PUSH1 0x08
000012e0: PUSH1 0x20
000012e2: MSTORE
000012e3: PUSH1 0x40
000012e5: DUP2
000012e6: KECCAK256
000012e7: PUSH1 0x02
000012e9: DUP2
000012ea: ADD
000012eb: SLOAD
000012ec: PUSH1 0x01
000012ee: SWAP1
000012ef: SWAP2
000012f0: ADD
000012f1: SLOAD
000012f2: PUSH8 0x0de0b6b3a7640000
000012fb: SWAP1
000012fc: PUSH2 0x1303
000012ff: PUSH2 0x197a
00001302: JUMP
00001303: JUMPDEST
00001304: PUSH2 0x130d
00001307: SWAP2
00001308: SWAP1
00001309: PUSH2 0x2072
0000130c: JUMP
0000130d: JUMPDEST
0000130e: PUSH1 0x01
00001310: PUSH1 0x01
00001312: PUSH1 0xa0
00001314: SHL
00001315: SUB
00001316: DUP6
00001317: AND
00001318: PUSH1 0x00
0000131a: SWAP1
0000131b: DUP2
0000131c: MSTORE
0000131d: PUSH1 0x08
0000131f: PUSH1 0x20
00001321: MSTORE
00001322: PUSH1 0x40
00001324: SWAP1
00001325: KECCAK256
00001326: SLOAD
00001327: PUSH2 0x1330
0000132a: SWAP2
0000132b: SWAP1
0000132c: PUSH2 0x1fc9
0000132f: JUMP
00001330: JUMPDEST
00001331: PUSH2 0x133a
00001334: SWAP2
00001335: SWAP1
00001336: PUSH2 0x1fe8
00001339: JUMP
0000133a: JUMPDEST
0000133b: PUSH2 0x047c
0000133e: SWAP2
0000133f: SWAP1
00001340: PUSH2 0x1fb1
00001343: JUMP
00001344: JUMPDEST
00001345: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
00001366: PUSH1 0x01
00001368: PUSH1 0x01
0000136a: PUSH1 0xa0
0000136c: SHL
0000136d: SUB
0000136e: AND
0000136f: PUSH4 0x2a4e051b
00001374: PUSH1 0x40
00001376: MLOAD
00001377: DUP2
00001378: PUSH4 0xffffffff
0000137d: AND
0000137e: PUSH1 0xe0
00001380: SHL
00001381: DUP2
00001382: MSTORE
00001383: PUSH1 0x04
00001385: ADD
00001386: PUSH1 0x00
00001388: PUSH1 0x40
0000138a: MLOAD
0000138b: DUP1
0000138c: DUP4
0000138d: SUB
0000138e: DUP2
0000138f: PUSH1 0x00
00001391: DUP8
00001392: DUP1
00001393: EXTCODESIZE
00001394: ISZERO
00001395: DUP1
00001396: ISZERO
00001397: PUSH2 0x139f
0000139a: JUMPI
0000139b: PUSH1 0x00
0000139d: DUP1
0000139e: REVERT
0000139f: JUMPDEST
000013a0: POP
000013a1: GAS
000013a2: CALL
000013a3: ISZERO
000013a4: DUP1
000013a5: ISZERO
000013a6: PUSH2 0x13b3
000013a9: JUMPI
000013aa: RETURNDATASIZE
000013ab: PUSH1 0x00
000013ad: DUP1
000013ae: RETURNDATACOPY
000013af: RETURNDATASIZE
000013b0: PUSH1 0x00
000013b2: REVERT
000013b3: JUMPDEST
000013b4: POP
000013b5: POP
000013b6: POP
000013b7: POP
000013b8: PUSH2 0x13c0
000013bb: CALLER
000013bc: PUSH2 0x16d8
000013bf: JUMP
000013c0: JUMPDEST
000013c1: PUSH1 0x40
000013c3: MLOAD
000013c4: PUSH4 0x0cacd001
000013c9: PUSH1 0xe1
000013cb: SHL
000013cc: DUP2
000013cd: MSTORE
000013ce: PUSH1 0x00
000013d0: SWAP1
000013d1: PUSH1 0x01
000013d3: PUSH1 0x01
000013d5: PUSH1 0xa0
000013d7: SHL
000013d8: SUB
000013d9: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
000013fa: AND
000013fb: SWAP1
000013fc: PUSH4 0x1959a002
00001401: SWAP1
00001402: PUSH2 0x140f
00001405: SWAP1
00001406: ADDRESS
00001407: SWAP1
00001408: PUSH1 0x04
0000140a: ADD
0000140b: PUSH2 0x1e24
0000140e: JUMP
0000140f: JUMPDEST
00001410: PUSH1 0x40
00001412: DUP1
00001413: MLOAD
00001414: DUP1
00001415: DUP4
00001416: SUB
00001417: DUP2
00001418: DUP7
00001419: GAS
0000141a: STATICCALL
0000141b: ISZERO
0000141c: DUP1
0000141d: ISZERO
0000141e: PUSH2 0x142b
00001421: JUMPI
00001422: RETURNDATASIZE
00001423: PUSH1 0x00
00001425: DUP1
00001426: RETURNDATACOPY
00001427: RETURNDATASIZE
00001428: PUSH1 0x00
0000142a: REVERT
0000142b: JUMPDEST
0000142c: POP
0000142d: POP
0000142e: POP
0000142f: POP
00001430: PUSH1 0x40
00001432: MLOAD
00001433: RETURNDATASIZE
00001434: PUSH1 0x1f
00001436: NOT
00001437: PUSH1 0x1f
00001439: DUP3
0000143a: ADD
0000143b: AND
0000143c: DUP3
0000143d: ADD
0000143e: DUP1
0000143f: PUSH1 0x40
00001441: MSTORE
00001442: POP
00001443: DUP2
00001444: ADD
00001445: SWAP1
00001446: PUSH2 0x144f
00001449: SWAP2
0000144a: SWAP1
0000144b: PUSH2 0x1f5e
0000144e: JUMP
0000144f: JUMPDEST
00001450: POP
00001451: SWAP1
00001452: POP
00001453: PUSH1 0x00
00001455: PUSH1 0x07
00001457: SLOAD
00001458: DUP5
00001459: DUP4
0000145a: PUSH2 0x1463
0000145d: SWAP2
0000145e: SWAP1
0000145f: PUSH2 0x1fc9
00001462: JUMP
00001463: JUMPDEST
00001464: PUSH2 0x146d
00001467: SWAP2
00001468: SWAP1
00001469: PUSH2 0x1fe8
0000146c: JUMP
0000146d: JUMPDEST
0000146e: CALLER
0000146f: PUSH1 0x00
00001471: SWAP1
00001472: DUP2
00001473: MSTORE
00001474: PUSH1 0x08
00001476: PUSH1 0x20
00001478: MSTORE
00001479: PUSH1 0x40
0000147b: DUP2
0000147c: KECCAK256
0000147d: DUP1
0000147e: SLOAD
0000147f: SWAP3
00001480: SWAP4
00001481: POP
00001482: DUP7
00001483: SWAP3
00001484: SWAP1
00001485: SWAP2
00001486: SWAP1
00001487: PUSH2 0x1491
0000148a: SWAP1
0000148b: DUP5
0000148c: SWAP1
0000148d: PUSH2 0x2072
00001490: JUMP
00001491: JUMPDEST
00001492: SWAP3
00001493: POP
00001494: POP
00001495: DUP2
00001496: SWAP1
00001497: SSTORE
00001498: POP
00001499: DUP4
0000149a: PUSH1 0x07
0000149c: PUSH1 0x00
0000149e: DUP3
0000149f: DUP3
000014a0: SLOAD
000014a1: PUSH2 0x14aa
000014a4: SWAP2
000014a5: SWAP1
000014a6: PUSH2 0x2072
000014a9: JUMP
000014aa: JUMPDEST
000014ab: SWAP1
000014ac: SWAP2
000014ad: SSTORE
000014ae: POP
000014af: POP
000014b0: PUSH1 0x40
000014b2: MLOAD
000014b3: PUSH4 0x2e1a7d4d
000014b8: PUSH1 0xe0
000014ba: SHL
000014bb: DUP2
000014bc: MSTORE
000014bd: PUSH1 0x04
000014bf: DUP2
000014c0: ADD
000014c1: DUP3
000014c2: SWAP1
000014c3: MSTORE
000014c4: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1
000014e5: PUSH1 0x01
000014e7: PUSH1 0x01
000014e9: PUSH1 0xa0
000014eb: SHL
000014ec: SUB
000014ed: AND
000014ee: SWAP1
000014ef: PUSH4 0x2e1a7d4d
000014f4: SWAP1
000014f5: PUSH1 0x24
000014f7: ADD
000014f8: PUSH1 0x00
000014fa: PUSH1 0x40
000014fc: MLOAD
000014fd: DUP1
000014fe: DUP4
000014ff: SUB
00001500: DUP2
00001501: PUSH1 0x00
00001503: DUP8
00001504: DUP1
00001505: EXTCODESIZE
00001506: ISZERO
00001507: DUP1
00001508: ISZERO
00001509: PUSH2 0x1511
0000150c: JUMPI
0000150d: PUSH1 0x00
0000150f: DUP1
00001510: REVERT
00001511: JUMPDEST
00001512: POP
00001513: GAS
00001514: CALL
00001515: ISZERO
00001516: DUP1
00001517: ISZERO
00001518: PUSH2 0x1525
0000151b: JUMPI
0000151c: RETURNDATASIZE
0000151d: PUSH1 0x00
0000151f: DUP1
00001520: RETURNDATACOPY
00001521: RETURNDATASIZE
00001522: PUSH1 0x00
00001524: REVERT
00001525: JUMPDEST
00001526: POP
00001527: POP
00001528: POP
00001529: POP
0000152a: PUSH1 0x00
0000152c: DUP4
0000152d: ISZERO
0000152e: PUSH2 0x1593
00001531: JUMPI
00001532: POP
00001533: CALLER
00001534: PUSH1 0x00
00001536: SWAP1
00001537: DUP2
00001538: MSTORE
00001539: PUSH1 0x08
0000153b: PUSH1 0x20
0000153d: MSTORE
0000153e: PUSH1 0x40
00001540: SWAP1
00001541: KECCAK256
00001542: PUSH1 0x02
00001544: ADD
00001545: SLOAD
00001546: DUP1
00001547: ISZERO
00001548: PUSH2 0x1593
0000154b: JUMPI
0000154c: CALLER
0000154d: PUSH1 0x00
0000154f: DUP2
00001550: DUP2
00001551: MSTORE
00001552: PUSH1 0x08
00001554: PUSH1 0x20
00001556: MSTORE
00001557: PUSH1 0x40
00001559: DUP2
0000155a: KECCAK256
0000155b: PUSH1 0x02
0000155d: ADD
0000155e: SSTORE
0000155f: PUSH2 0x1593
00001562: SWAP1
00001563: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
00001584: PUSH1 0x01
00001586: PUSH1 0x01
00001588: PUSH1 0xa0
0000158a: SHL
0000158b: SUB
0000158c: AND
0000158d: SWAP1
0000158e: DUP4
0000158f: PUSH2 0x1933
00001592: JUMP
00001593: JUMPDEST
00001594: PUSH2 0x15c7
00001597: PUSH1 0x01
00001599: PUSH1 0x01
0000159b: PUSH1 0xa0
0000159d: SHL
0000159e: SUB
0000159f: PUSH32 0x0000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9
000015c0: AND
000015c1: CALLER
000015c2: DUP5
000015c3: PUSH2 0x1933
000015c6: JUMP
000015c7: JUMPDEST
000015c8: PUSH1 0x40
000015ca: DUP1
000015cb: MLOAD
000015cc: DUP4
000015cd: DUP2
000015ce: MSTORE
000015cf: PUSH1 0x20
000015d1: DUP2
000015d2: ADD
000015d3: DUP4
000015d4: SWAP1
000015d5: MSTORE
000015d6: CALLER
000015d7: SWAP2
000015d8: PUSH32 0xf279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568
000015f9: SWAP2
000015fa: ADD
000015fb: PUSH1 0x40
000015fd: MLOAD
000015fe: DUP1
000015ff: SWAP2
00001600: SUB
00001601: SWAP1
00001602: LOG2
00001603: POP
00001604: POP
00001605: POP
00001606: POP
00001607: POP
00001608: JUMP
00001609: JUMPDEST
0000160a: PUSH2 0x1613
0000160d: DUP3
0000160e: DUP3
0000160f: PUSH2 0x0c9b
00001612: JUMP
00001613: JUMPDEST
00001614: PUSH2 0x0a3b
00001617: JUMPI
00001618: PUSH2 0x162b
0000161b: DUP2
0000161c: PUSH1 0x01
0000161e: PUSH1 0x01
00001620: PUSH1 0xa0
00001622: SHL
00001623: SUB
00001624: AND
00001625: PUSH1 0x14
00001627: PUSH2 0x19dd
0000162a: JUMP
0000162b: JUMPDEST
0000162c: PUSH2 0x1636
0000162f: DUP4
00001630: PUSH1 0x20
00001632: PUSH2 0x19dd
00001635: JUMP
00001636: JUMPDEST
00001637: PUSH1 0x40
00001639: MLOAD
0000163a: PUSH1 0x20
0000163c: ADD
0000163d: PUSH2 0x1647
00001640: SWAP3
00001641: SWAP2
00001642: SWAP1
00001643: PUSH2 0x20b5
00001646: JUMP
00001647: JUMPDEST
00001648: PUSH1 0x40
0000164a: DUP1
0000164b: MLOAD
0000164c: PUSH1 0x1f
0000164e: NOT
0000164f: DUP2
00001650: DUP5
00001651: SUB
00001652: ADD
00001653: DUP2
00001654: MSTORE
00001655: SWAP1
00001656: DUP3
00001657: SWAP1
00001658: MSTORE
00001659: PUSH3 0x461bcd
0000165d: PUSH1 0xe5
0000165f: SHL
00001660: DUP3
00001661: MSTORE
00001662: PUSH2 0x04b0
00001665: SWAP2
00001666: PUSH1 0x04
00001668: ADD
00001669: PUSH2 0x2124
0000166c: JUMP
0000166d: JUMPDEST
0000166e: PUSH2 0x1677
00001671: DUP3
00001672: DUP3
00001673: PUSH2 0x0c9b
00001676: JUMP
00001677: JUMPDEST
00001678: PUSH2 0x0a3b
0000167b: JUMPI
0000167c: PUSH1 0x00
0000167e: DUP3
0000167f: DUP2
00001680: MSTORE
00001681: PUSH1 0x01
00001683: PUSH1 0x20
00001685: DUP2
00001686: DUP2
00001687: MSTORE
00001688: PUSH1 0x40
0000168a: DUP1
0000168b: DUP5
0000168c: KECCAK256
0000168d: PUSH1 0x01
0000168f: PUSH1 0x01
00001691: PUSH1 0xa0
00001693: SHL
00001694: SUB
00001695: DUP7
00001696: AND
00001697: DUP1
00001698: DUP7
00001699: MSTORE
0000169a: SWAP3
0000169b: MSTORE
0000169c: DUP1
0000169d: DUP5
0000169e: KECCAK256
0000169f: DUP1
000016a0: SLOAD
000016a1: PUSH1 0xff
000016a3: NOT
000016a4: AND
000016a5: SWAP1
000016a6: SWAP4
000016a7: OR
000016a8: SWAP1
000016a9: SWAP3
000016aa: SSTORE
000016ab: SWAP1
000016ac: MLOAD
000016ad: CALLER
000016ae: SWAP3
000016af: DUP6
000016b0: SWAP2
000016b1: PUSH32 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d
000016d2: SWAP2
000016d3: SWAP1
000016d4: LOG4
000016d5: POP
000016d6: POP
000016d7: JUMP
000016d8: JUMPDEST
000016d9: PUSH1 0x04
000016db: SLOAD
000016dc: NUMBER
000016dd: EQ
000016de: PUSH2 0x16f8
000016e1: JUMPI
000016e2: PUSH2 0x16e9
000016e5: PUSH2 0x197a
000016e8: JUMP
000016e9: JUMPDEST
000016ea: PUSH1 0x06
000016ec: SSTORE
000016ed: PUSH2 0x16f4
000016f0: PUSH2 0x1963
000016f3: JUMP
000016f4: JUMPDEST
000016f5: PUSH1 0x04
000016f7: SSTORE
000016f8: JUMPDEST
000016f9: PUSH2 0x1701
000016fc: DUP2
000016fd: PUSH2 0x12ce
00001700: JUMP
00001701: JUMPDEST
00001702: PUSH1 0x01
00001704: PUSH1 0x01
00001706: PUSH1 0xa0
00001708: SHL
00001709: SUB
0000170a: SWAP1
0000170b: SWAP2
0000170c: AND
0000170d: PUSH1 0x00
0000170f: SWAP1
00001710: DUP2
00001711: MSTORE
00001712: PUSH1 0x08
00001714: PUSH1 0x20
00001716: MSTORE
00001717: PUSH1 0x40
00001719: SWAP1
0000171a: KECCAK256
0000171b: PUSH1 0x02
0000171d: DUP2
0000171e: ADD
0000171f: SWAP2
00001720: SWAP1
00001721: SWAP2
00001722: SSTORE
00001723: PUSH1 0x06
00001725: SLOAD
00001726: PUSH1 0x01
00001728: SWAP1
00001729: SWAP2
0000172a: ADD
0000172b: SSTORE
0000172c: JUMP
0000172d: JUMPDEST
0000172e: PUSH1 0x40
00001730: MLOAD
00001731: PUSH1 0x01
00001733: PUSH1 0x01
00001735: PUSH1 0xa0
00001737: SHL
00001738: SUB
00001739: DUP1
0000173a: DUP6
0000173b: AND
0000173c: PUSH1 0x24
0000173e: DUP4
0000173f: ADD
00001740: MSTORE
00001741: DUP4
00001742: AND
00001743: PUSH1 0x44
00001745: DUP3
00001746: ADD
00001747: MSTORE
00001748: PUSH1 0x64
0000174a: DUP2
0000174b: ADD
0000174c: DUP3
0000174d: SWAP1
0000174e: MSTORE
0000174f: PUSH2 0x1798
00001752: SWAP1
00001753: DUP6
00001754: SWAP1
00001755: PUSH4 0x23b872dd
0000175a: PUSH1 0xe0
0000175c: SHL
0000175d: SWAP1
0000175e: PUSH1 0x84
00001760: ADD
00001761: JUMPDEST
00001762: PUSH1 0x40
00001764: DUP1
00001765: MLOAD
00001766: PUSH1 0x1f
00001768: NOT
00001769: DUP2
0000176a: DUP5
0000176b: SUB
0000176c: ADD
0000176d: DUP2
0000176e: MSTORE
0000176f: SWAP2
00001770: SWAP1
00001771: MSTORE
00001772: PUSH1 0x20
00001774: DUP2
00001775: ADD
00001776: DUP1
00001777: MLOAD
00001778: PUSH1 0x01
0000177a: PUSH1 0x01
0000177c: PUSH1 0xe0
0000177e: SHL
0000177f: SUB
00001780: AND
00001781: PUSH1 0x01
00001783: PUSH1 0x01
00001785: PUSH1 0xe0
00001787: SHL
00001788: SUB
00001789: NOT
0000178a: SWAP1
0000178b: SWAP4
0000178c: AND
0000178d: SWAP3
0000178e: SWAP1
0000178f: SWAP3
00001790: OR
00001791: SWAP1
00001792: SWAP2
00001793: MSTORE
00001794: PUSH2 0x1b79
00001797: JUMP
00001798: JUMPDEST
00001799: POP
0000179a: POP
0000179b: POP
0000179c: POP
0000179d: JUMP
0000179e: JUMPDEST
0000179f: PUSH1 0x40
000017a1: MLOAD
000017a2: PUSH4 0x6eb1769f
000017a7: PUSH1 0xe1
000017a9: SHL
000017aa: DUP2
000017ab: MSTORE
000017ac: ADDRESS
000017ad: PUSH1 0x04
000017af: DUP3
000017b0: ADD
000017b1: MSTORE
000017b2: PUSH1 0x01
000017b4: PUSH1 0x01
000017b6: PUSH1 0xa0
000017b8: SHL
000017b9: SUB
000017ba: DUP3
000017bb: DUP2
000017bc: AND
000017bd: PUSH1 0x24
000017bf: DUP4
000017c0: ADD
000017c1: MSTORE
000017c2: DUP4
000017c3: SWAP2
000017c4: PUSH32 0x0000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9
000017e5: SWAP1
000017e6: SWAP2
000017e7: AND
000017e8: SWAP1
000017e9: PUSH4 0xdd62ed3e
000017ee: SWAP1
000017ef: PUSH1 0x44
000017f1: ADD
000017f2: PUSH1 0x20
000017f4: PUSH1 0x40
000017f6: MLOAD
000017f7: DUP1
000017f8: DUP4
000017f9: SUB
000017fa: DUP2
000017fb: DUP7
000017fc: GAS
000017fd: STATICCALL
000017fe: ISZERO
000017ff: DUP1
00001800: ISZERO
00001801: PUSH2 0x180e
00001804: JUMPI
00001805: RETURNDATASIZE
00001806: PUSH1 0x00
00001808: DUP1
00001809: RETURNDATACOPY
0000180a: RETURNDATASIZE
0000180b: PUSH1 0x00
0000180d: REVERT
0000180e: JUMPDEST
0000180f: POP
00001810: POP
00001811: POP
00001812: POP
00001813: PUSH1 0x40
00001815: MLOAD
00001816: RETURNDATASIZE
00001817: PUSH1 0x1f
00001819: NOT
0000181a: PUSH1 0x1f
0000181c: DUP3
0000181d: ADD
0000181e: AND
0000181f: DUP3
00001820: ADD
00001821: DUP1
00001822: PUSH1 0x40
00001824: MSTORE
00001825: POP
00001826: DUP2
00001827: ADD
00001828: SWAP1
00001829: PUSH2 0x1832
0000182c: SWAP2
0000182d: SWAP1
0000182e: PUSH2 0x1f82
00001831: JUMP
00001832: JUMPDEST
00001833: LT
00001834: ISZERO
00001835: PUSH2 0x0a3b
00001838: JUMPI
00001839: PUSH1 0x40
0000183b: MLOAD
0000183c: PUSH4 0x095ea7b3
00001841: PUSH1 0xe0
00001843: SHL
00001844: DUP2
00001845: MSTORE
00001846: PUSH1 0x01
00001848: PUSH1 0x01
0000184a: PUSH1 0xa0
0000184c: SHL
0000184d: SUB
0000184e: DUP3
0000184f: DUP2
00001850: AND
00001851: PUSH1 0x04
00001853: DUP4
00001854: ADD
00001855: MSTORE
00001856: PUSH1 0x00
00001858: NOT
00001859: PUSH1 0x24
0000185b: DUP4
0000185c: ADD
0000185d: MSTORE
0000185e: PUSH32 0x0000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9
0000187f: AND
00001880: SWAP1
00001881: PUSH4 0x095ea7b3
00001886: SWAP1
00001887: PUSH1 0x44
00001889: ADD
0000188a: PUSH1 0x20
0000188c: PUSH1 0x40
0000188e: MLOAD
0000188f: DUP1
00001890: DUP4
00001891: SUB
00001892: DUP2
00001893: PUSH1 0x00
00001895: DUP8
00001896: GAS
00001897: CALL
00001898: ISZERO
00001899: DUP1
0000189a: ISZERO
0000189b: PUSH2 0x18a8
0000189e: JUMPI
0000189f: RETURNDATASIZE
000018a0: PUSH1 0x00
000018a2: DUP1
000018a3: RETURNDATACOPY
000018a4: RETURNDATASIZE
000018a5: PUSH1 0x00
000018a7: REVERT
000018a8: JUMPDEST
000018a9: POP
000018aa: POP
000018ab: POP
000018ac: POP
000018ad: PUSH1 0x40
000018af: MLOAD
000018b0: RETURNDATASIZE
000018b1: PUSH1 0x1f
000018b3: NOT
000018b4: PUSH1 0x1f
000018b6: DUP3
000018b7: ADD
000018b8: AND
000018b9: DUP3
000018ba: ADD
000018bb: DUP1
000018bc: PUSH1 0x40
000018be: MSTORE
000018bf: POP
000018c0: DUP2
000018c1: ADD
000018c2: SWAP1
000018c3: PUSH2 0x066f
000018c6: SWAP2
000018c7: SWAP1
000018c8: PUSH2 0x2157
000018cb: JUMP
000018cc: JUMPDEST
000018cd: PUSH2 0x18d6
000018d0: DUP3
000018d1: DUP3
000018d2: PUSH2 0x0c9b
000018d5: JUMP
000018d6: JUMPDEST
000018d7: ISZERO
000018d8: PUSH2 0x0a3b
000018db: JUMPI
000018dc: PUSH1 0x00
000018de: DUP3
000018df: DUP2
000018e0: MSTORE
000018e1: PUSH1 0x01
000018e3: PUSH1 0x20
000018e5: SWAP1
000018e6: DUP2
000018e7: MSTORE
000018e8: PUSH1 0x40
000018ea: DUP1
000018eb: DUP4
000018ec: KECCAK256
000018ed: PUSH1 0x01
000018ef: PUSH1 0x01
000018f1: PUSH1 0xa0
000018f3: SHL
000018f4: SUB
000018f5: DUP6
000018f6: AND
000018f7: DUP1
000018f8: DUP6
000018f9: MSTORE
000018fa: SWAP3
000018fb: MSTORE
000018fc: DUP1
000018fd: DUP4
000018fe: KECCAK256
000018ff: DUP1
00001900: SLOAD
00001901: PUSH1 0xff
00001903: NOT
00001904: AND
00001905: SWAP1
00001906: SSTORE
00001907: MLOAD
00001908: CALLER
00001909: SWAP3
0000190a: DUP6
0000190b: SWAP2
0000190c: PUSH32 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b
0000192d: SWAP2
0000192e: SWAP1
0000192f: LOG4
00001930: POP
00001931: POP
00001932: JUMP
00001933: JUMPDEST
00001934: PUSH1 0x40
00001936: MLOAD
00001937: PUSH1 0x01
00001939: PUSH1 0x01
0000193b: PUSH1 0xa0
0000193d: SHL
0000193e: SUB
0000193f: DUP4
00001940: AND
00001941: PUSH1 0x24
00001943: DUP3
00001944: ADD
00001945: MSTORE
00001946: PUSH1 0x44
00001948: DUP2
00001949: ADD
0000194a: DUP3
0000194b: SWAP1
0000194c: MSTORE
0000194d: PUSH2 0x066f
00001950: SWAP1
00001951: DUP5
00001952: SWAP1
00001953: PUSH4 0xa9059cbb
00001958: PUSH1 0xe0
0000195a: SHL
0000195b: SWAP1
0000195c: PUSH1 0x64
0000195e: ADD
0000195f: PUSH2 0x1761
00001962: JUMP
00001963: JUMPDEST
00001964: PUSH1 0x00
00001966: PUSH1 0x05
00001968: SLOAD
00001969: NUMBER
0000196a: LT
0000196b: PUSH2 0x1975
0000196e: JUMPI
0000196f: POP
00001970: PUSH1 0x05
00001972: SLOAD
00001973: SWAP1
00001974: JUMP
00001975: JUMPDEST
00001976: POP
00001977: NUMBER
00001978: SWAP1
00001979: JUMP
0000197a: JUMPDEST
0000197b: PUSH1 0x00
0000197d: PUSH1 0x07
0000197f: SLOAD
00001980: PUSH1 0x00
00001982: EQ
00001983: ISZERO
00001984: PUSH2 0x198e
00001987: JUMPI
00001988: POP
00001989: PUSH1 0x06
0000198b: SLOAD
0000198c: SWAP1
0000198d: JUMP
0000198e: JUMPDEST
0000198f: PUSH1 0x07
00001991: SLOAD
00001992: PUSH8 0x0de0b6b3a7640000
0000199b: PUSH1 0x02
0000199d: SLOAD
0000199e: PUSH2 0x19a7
000019a1: SWAP2
000019a2: SWAP1
000019a3: PUSH2 0x1fc9
000019a6: JUMP
000019a7: JUMPDEST
000019a8: PUSH1 0x04
000019aa: SLOAD
000019ab: PUSH2 0x19b2
000019ae: PUSH2 0x1963
000019b1: JUMP
000019b2: JUMPDEST
000019b3: PUSH2 0x19bc
000019b6: SWAP2
000019b7: SWAP1
000019b8: PUSH2 0x2072
000019bb: JUMP
000019bc: JUMPDEST
000019bd: PUSH2 0x19c6
000019c0: SWAP2
000019c1: SWAP1
000019c2: PUSH2 0x1fc9
000019c5: JUMP
000019c6: JUMPDEST
000019c7: PUSH2 0x19d0
000019ca: SWAP2
000019cb: SWAP1
000019cc: PUSH2 0x1fe8
000019cf: JUMP
000019d0: JUMPDEST
000019d1: PUSH1 0x06
000019d3: SLOAD
000019d4: PUSH2 0x1119
000019d7: SWAP2
000019d8: SWAP1
000019d9: PUSH2 0x1fb1
000019dc: JUMP
000019dd: JUMPDEST
000019de: PUSH1 0x60
000019e0: PUSH1 0x00
000019e2: PUSH2 0x19ec
000019e5: DUP4
000019e6: PUSH1 0x02
000019e8: PUSH2 0x1fc9
000019eb: JUMP
000019ec: JUMPDEST
000019ed: PUSH2 0x19f7
000019f0: SWAP1
000019f1: PUSH1 0x02
000019f3: PUSH2 0x1fb1
000019f6: JUMP
000019f7: JUMPDEST
000019f8: PUSH8 0xffffffffffffffff
00001a01: DUP2
00001a02: GT
00001a03: ISZERO
00001a04: PUSH2 0x1a0f
00001a07: JUMPI
00001a08: PUSH2 0x1a0f
00001a0b: PUSH2 0x2174
00001a0e: JUMP
00001a0f: JUMPDEST
00001a10: PUSH1 0x40
00001a12: MLOAD
00001a13: SWAP1
00001a14: DUP1
00001a15: DUP3
00001a16: MSTORE
00001a17: DUP1
00001a18: PUSH1 0x1f
00001a1a: ADD
00001a1b: PUSH1 0x1f
00001a1d: NOT
00001a1e: AND
00001a1f: PUSH1 0x20
00001a21: ADD
00001a22: DUP3
00001a23: ADD
00001a24: PUSH1 0x40
00001a26: MSTORE
00001a27: DUP1
00001a28: ISZERO
00001a29: PUSH2 0x1a39
00001a2c: JUMPI
00001a2d: PUSH1 0x20
00001a2f: DUP3
00001a30: ADD
00001a31: DUP2
00001a32: DUP1
00001a33: CALLDATASIZE
00001a34: DUP4
00001a35: CALLDATACOPY
00001a36: ADD
00001a37: SWAP1
00001a38: POP
00001a39: JUMPDEST
00001a3a: POP
00001a3b: SWAP1
00001a3c: POP
00001a3d: PUSH1 0x03
00001a3f: PUSH1 0xfc
00001a41: SHL
00001a42: DUP2
00001a43: PUSH1 0x00
00001a45: DUP2
00001a46: MLOAD
00001a47: DUP2
00001a48: LT
00001a49: PUSH2 0x1a54
00001a4c: JUMPI
00001a4d: PUSH2 0x1a54
00001a50: PUSH2 0x218a
00001a53: JUMP
00001a54: JUMPDEST
00001a55: PUSH1 0x20
00001a57: ADD
00001a58: ADD
00001a59: SWAP1
00001a5a: PUSH1 0x01
00001a5c: PUSH1 0x01
00001a5e: PUSH1 0xf8
00001a60: SHL
00001a61: SUB
00001a62: NOT
00001a63: AND
00001a64: SWAP1
00001a65: DUP2
00001a66: PUSH1 0x00
00001a68: BYTE
00001a69: SWAP1
00001a6a: MSTORE8
00001a6b: POP
00001a6c: PUSH1 0x0f
00001a6e: PUSH1 0xfb
00001a70: SHL
00001a71: DUP2
00001a72: PUSH1 0x01
00001a74: DUP2
00001a75: MLOAD
00001a76: DUP2
00001a77: LT
00001a78: PUSH2 0x1a83
00001a7b: JUMPI
00001a7c: PUSH2 0x1a83
00001a7f: PUSH2 0x218a
00001a82: JUMP
00001a83: JUMPDEST
00001a84: PUSH1 0x20
00001a86: ADD
00001a87: ADD
00001a88: SWAP1
00001a89: PUSH1 0x01
00001a8b: PUSH1 0x01
00001a8d: PUSH1 0xf8
00001a8f: SHL
00001a90: SUB
00001a91: NOT
00001a92: AND
00001a93: SWAP1
00001a94: DUP2
00001a95: PUSH1 0x00
00001a97: BYTE
00001a98: SWAP1
00001a99: MSTORE8
00001a9a: POP
00001a9b: PUSH1 0x00
00001a9d: PUSH2 0x1aa7
00001aa0: DUP5
00001aa1: PUSH1 0x02
00001aa3: PUSH2 0x1fc9
00001aa6: JUMP
00001aa7: JUMPDEST
00001aa8: PUSH2 0x1ab2
00001aab: SWAP1
00001aac: PUSH1 0x01
00001aae: PUSH2 0x1fb1
00001ab1: JUMP
00001ab2: JUMPDEST
00001ab3: SWAP1
00001ab4: POP
00001ab5: JUMPDEST
00001ab6: PUSH1 0x01
00001ab8: DUP2
00001ab9: GT
00001aba: ISZERO
00001abb: PUSH2 0x1b2a
00001abe: JUMPI
00001abf: PUSH16 0x181899199a1a9b1b9c1cb0b131b232b3
00001ad0: PUSH1 0x81
00001ad2: SHL
00001ad3: DUP6
00001ad4: PUSH1 0x0f
00001ad6: AND
00001ad7: PUSH1 0x10
00001ad9: DUP2
00001ada: LT
00001adb: PUSH2 0x1ae6
00001ade: JUMPI
00001adf: PUSH2 0x1ae6
00001ae2: PUSH2 0x218a
00001ae5: JUMP
00001ae6: JUMPDEST
00001ae7: BYTE
00001ae8: PUSH1 0xf8
00001aea: SHL
00001aeb: DUP3
00001aec: DUP3
00001aed: DUP2
00001aee: MLOAD
00001aef: DUP2
00001af0: LT
00001af1: PUSH2 0x1afc
00001af4: JUMPI
00001af5: PUSH2 0x1afc
00001af8: PUSH2 0x218a
00001afb: JUMP
00001afc: JUMPDEST
00001afd: PUSH1 0x20
00001aff: ADD
00001b00: ADD
00001b01: SWAP1
00001b02: PUSH1 0x01
00001b04: PUSH1 0x01
00001b06: PUSH1 0xf8
00001b08: SHL
00001b09: SUB
00001b0a: NOT
00001b0b: AND
00001b0c: SWAP1
00001b0d: DUP2
00001b0e: PUSH1 0x00
00001b10: BYTE
00001b11: SWAP1
00001b12: MSTORE8
00001b13: POP
00001b14: PUSH1 0x04
00001b16: SWAP5
00001b17: SWAP1
00001b18: SWAP5
00001b19: SHR
00001b1a: SWAP4
00001b1b: PUSH2 0x1b23
00001b1e: DUP2
00001b1f: PUSH2 0x21a0
00001b22: JUMP
00001b23: JUMPDEST
00001b24: SWAP1
00001b25: POP
00001b26: PUSH2 0x1ab5
00001b29: JUMP
00001b2a: JUMPDEST
00001b2b: POP
00001b2c: DUP4
00001b2d: ISZERO
00001b2e: PUSH2 0x12c7
00001b31: JUMPI
00001b32: PUSH1 0x40
00001b34: MLOAD
00001b35: PUSH3 0x461bcd
00001b39: PUSH1 0xe5
00001b3b: SHL
00001b3c: DUP2
00001b3d: MSTORE
00001b3e: PUSH1 0x20
00001b40: PUSH1 0x04
00001b42: DUP3
00001b43: ADD
00001b44: DUP2
00001b45: SWAP1
00001b46: MSTORE
00001b47: PUSH1 0x24
00001b49: DUP3
00001b4a: ADD
00001b4b: MSTORE
00001b4c: PUSH32 0x537472696e67733a20686578206c656e67746820696e73756666696369656e74
00001b6d: PUSH1 0x44
00001b6f: DUP3
00001b70: ADD
00001b71: MSTORE
00001b72: PUSH1 0x64
00001b74: ADD
00001b75: PUSH2 0x04b0
00001b78: JUMP
00001b79: JUMPDEST
00001b7a: PUSH1 0x00
00001b7c: PUSH2 0x1bce
00001b7f: DUP3
00001b80: PUSH1 0x40
00001b82: MLOAD
00001b83: DUP1
00001b84: PUSH1 0x40
00001b86: ADD
00001b87: PUSH1 0x40
00001b89: MSTORE
00001b8a: DUP1
00001b8b: PUSH1 0x20
00001b8d: DUP2
00001b8e: MSTORE
00001b8f: PUSH1 0x20
00001b91: ADD
00001b92: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564
00001bb3: DUP2
00001bb4: MSTORE
00001bb5: POP
00001bb6: DUP6
00001bb7: PUSH1 0x01
00001bb9: PUSH1 0x01
00001bbb: PUSH1 0xa0
00001bbd: SHL
00001bbe: SUB
00001bbf: AND
00001bc0: PUSH2 0x1c4b
00001bc3: SWAP1
00001bc4: SWAP3
00001bc5: SWAP2
00001bc6: SWAP1
00001bc7: PUSH4 0xffffffff
00001bcc: AND
00001bcd: JUMP
00001bce: JUMPDEST
00001bcf: DUP1
00001bd0: MLOAD
00001bd1: SWAP1
00001bd2: SWAP2
00001bd3: POP
00001bd4: ISZERO
00001bd5: PUSH2 0x066f
00001bd8: JUMPI
00001bd9: DUP1
00001bda: DUP1
00001bdb: PUSH1 0x20
00001bdd: ADD
00001bde: SWAP1
00001bdf: MLOAD
00001be0: DUP2
00001be1: ADD
00001be2: SWAP1
00001be3: PUSH2 0x1bec
00001be6: SWAP2
00001be7: SWAP1
00001be8: PUSH2 0x2157
00001beb: JUMP
00001bec: JUMPDEST
00001bed: PUSH2 0x066f
00001bf0: JUMPI
00001bf1: PUSH1 0x40
00001bf3: MLOAD
00001bf4: PUSH3 0x461bcd
00001bf8: PUSH1 0xe5
00001bfa: SHL
00001bfb: DUP2
00001bfc: MSTORE
00001bfd: PUSH1 0x20
00001bff: PUSH1 0x04
00001c01: DUP3
00001c02: ADD
00001c03: MSTORE
00001c04: PUSH1 0x2a
00001c06: PUSH1 0x24
00001c08: DUP3
00001c09: ADD
00001c0a: MSTORE
00001c0b: PUSH32 0x5361666545524332303a204552433230206f7065726174696f6e20646964206e
00001c2c: PUSH1 0x44
00001c2e: DUP3
00001c2f: ADD
00001c30: MSTORE
00001c31: PUSH10 0x1bdd081cdd58d8d95959
00001c3c: PUSH1 0xb2
00001c3e: SHL
00001c3f: PUSH1 0x64
00001c41: DUP3
00001c42: ADD
00001c43: MSTORE
00001c44: PUSH1 0x84
00001c46: ADD
00001c47: PUSH2 0x04b0
00001c4a: JUMP
00001c4b: JUMPDEST
00001c4c: PUSH1 0x60
00001c4e: PUSH2 0x1c5a
00001c51: DUP5
00001c52: DUP5
00001c53: PUSH1 0x00
00001c55: DUP6
00001c56: PUSH2 0x1c62
00001c59: JUMP
00001c5a: JUMPDEST
00001c5b: SWAP5
00001c5c: SWAP4
00001c5d: POP
00001c5e: POP
00001c5f: POP
00001c60: POP
00001c61: JUMP
00001c62: JUMPDEST
00001c63: PUSH1 0x60
00001c65: DUP3
00001c66: SELFBALANCE
00001c67: LT
00001c68: ISZERO
00001c69: PUSH2 0x1cc3
00001c6c: JUMPI
00001c6d: PUSH1 0x40
00001c6f: MLOAD
00001c70: PUSH3 0x461bcd
00001c74: PUSH1 0xe5
00001c76: SHL
00001c77: DUP2
00001c78: MSTORE
00001c79: PUSH1 0x20
00001c7b: PUSH1 0x04
00001c7d: DUP3
00001c7e: ADD
00001c7f: MSTORE
00001c80: PUSH1 0x26
00001c82: PUSH1 0x24
00001c84: DUP3
00001c85: ADD
00001c86: MSTORE
00001c87: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e636520666f
00001ca8: PUSH1 0x44
00001caa: DUP3
00001cab: ADD
00001cac: MSTORE
00001cad: PUSH6 0x1c8818d85b1b
00001cb4: PUSH1 0xd2
00001cb6: SHL
00001cb7: PUSH1 0x64
00001cb9: DUP3
00001cba: ADD
00001cbb: MSTORE
00001cbc: PUSH1 0x84
00001cbe: ADD
00001cbf: PUSH2 0x04b0
00001cc2: JUMP
00001cc3: JUMPDEST
00001cc4: DUP5
00001cc5: EXTCODESIZE
00001cc6: PUSH2 0x1d11
00001cc9: JUMPI
00001cca: PUSH1 0x40
00001ccc: MLOAD
00001ccd: PUSH3 0x461bcd
00001cd1: PUSH1 0xe5
00001cd3: SHL
00001cd4: DUP2
00001cd5: MSTORE
00001cd6: PUSH1 0x20
00001cd8: PUSH1 0x04
00001cda: DUP3
00001cdb: ADD
00001cdc: MSTORE
00001cdd: PUSH1 0x1d
00001cdf: PUSH1 0x24
00001ce1: DUP3
00001ce2: ADD
00001ce3: MSTORE
00001ce4: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000
00001d05: PUSH1 0x44
00001d07: DUP3
00001d08: ADD
00001d09: MSTORE
00001d0a: PUSH1 0x64
00001d0c: ADD
00001d0d: PUSH2 0x04b0
00001d10: JUMP
00001d11: JUMPDEST
00001d12: PUSH1 0x00
00001d14: DUP1
00001d15: DUP7
00001d16: PUSH1 0x01
00001d18: PUSH1 0x01
00001d1a: PUSH1 0xa0
00001d1c: SHL
00001d1d: SUB
00001d1e: AND
00001d1f: DUP6
00001d20: DUP8
00001d21: PUSH1 0x40
00001d23: MLOAD
00001d24: PUSH2 0x1d2d
00001d27: SWAP2
00001d28: SWAP1
00001d29: PUSH2 0x21b7
00001d2c: JUMP
00001d2d: JUMPDEST
00001d2e: PUSH1 0x00
00001d30: PUSH1 0x40
00001d32: MLOAD
00001d33: DUP1
00001d34: DUP4
00001d35: SUB
00001d36: DUP2
00001d37: DUP6
00001d38: DUP8
00001d39: GAS
00001d3a: CALL
00001d3b: SWAP3
00001d3c: POP
00001d3d: POP
00001d3e: POP
00001d3f: RETURNDATASIZE
00001d40: DUP1
00001d41: PUSH1 0x00
00001d43: DUP2
00001d44: EQ
00001d45: PUSH2 0x1d6a
00001d48: JUMPI
00001d49: PUSH1 0x40
00001d4b: MLOAD
00001d4c: SWAP2
00001d4d: POP
00001d4e: PUSH1 0x1f
00001d50: NOT
00001d51: PUSH1 0x3f
00001d53: RETURNDATASIZE
00001d54: ADD
00001d55: AND
00001d56: DUP3
00001d57: ADD
00001d58: PUSH1 0x40
00001d5a: MSTORE
00001d5b: RETURNDATASIZE
00001d5c: DUP3
00001d5d: MSTORE
00001d5e: RETURNDATASIZE
00001d5f: PUSH1 0x00
00001d61: PUSH1 0x20
00001d63: DUP5
00001d64: ADD
00001d65: RETURNDATACOPY
00001d66: PUSH2 0x1d6f
00001d69: JUMP
00001d6a: JUMPDEST
00001d6b: PUSH1 0x60
00001d6d: SWAP2
00001d6e: POP
00001d6f: JUMPDEST
00001d70: POP
00001d71: SWAP2
00001d72: POP
00001d73: SWAP2
00001d74: POP
00001d75: PUSH2 0x1d7f
00001d78: DUP3
00001d79: DUP3
00001d7a: DUP7
00001d7b: PUSH2 0x1d8a
00001d7e: JUMP
00001d7f: JUMPDEST
00001d80: SWAP8
00001d81: SWAP7
00001d82: POP
00001d83: POP
00001d84: POP
00001d85: POP
00001d86: POP
00001d87: POP
00001d88: POP
00001d89: JUMP
00001d8a: JUMPDEST
00001d8b: PUSH1 0x60
00001d8d: DUP4
00001d8e: ISZERO
00001d8f: PUSH2 0x1d99
00001d92: JUMPI
00001d93: POP
00001d94: DUP2
00001d95: PUSH2 0x12c7
00001d98: JUMP
00001d99: JUMPDEST
00001d9a: DUP3
00001d9b: MLOAD
00001d9c: ISZERO
00001d9d: PUSH2 0x1da9
00001da0: JUMPI
00001da1: DUP3
00001da2: MLOAD
00001da3: DUP1
00001da4: DUP5
00001da5: PUSH1 0x20
00001da7: ADD
00001da8: REVERT
00001da9: JUMPDEST
00001daa: DUP2
00001dab: PUSH1 0x40
00001dad: MLOAD
00001dae: PUSH3 0x461bcd
00001db2: PUSH1 0xe5
00001db4: SHL
00001db5: DUP2
00001db6: MSTORE
00001db7: PUSH1 0x04
00001db9: ADD
00001dba: PUSH2 0x04b0
00001dbd: SWAP2
00001dbe: SWAP1
00001dbf: PUSH2 0x2124
00001dc2: JUMP
00001dc3: JUMPDEST
00001dc4: PUSH1 0x00
00001dc6: PUSH1 0x20
00001dc8: DUP3
00001dc9: DUP5
00001dca: SUB
00001dcb: SLT
00001dcc: ISZERO
00001dcd: PUSH2 0x1dd5
00001dd0: JUMPI
00001dd1: PUSH1 0x00
00001dd3: DUP1
00001dd4: REVERT
00001dd5: JUMPDEST
00001dd6: DUP2
00001dd7: CALLDATALOAD
00001dd8: PUSH1 0x01
00001dda: PUSH1 0x01
00001ddc: PUSH1 0xe0
00001dde: SHL
00001ddf: SUB
00001de0: NOT
00001de1: DUP2
00001de2: AND
00001de3: DUP2
00001de4: EQ
00001de5: PUSH2 0x12c7
00001de8: JUMPI
00001de9: PUSH1 0x00
00001deb: DUP1
00001dec: REVERT
00001ded: JUMPDEST
00001dee: DUP1
00001def: CALLDATALOAD
00001df0: PUSH1 0x01
00001df2: PUSH1 0x01
00001df4: PUSH1 0xa0
00001df6: SHL
00001df7: SUB
00001df8: DUP2
00001df9: AND
00001dfa: DUP2
00001dfb: EQ
00001dfc: PUSH2 0x1e04
00001dff: JUMPI
00001e00: PUSH1 0x00
00001e02: DUP1
00001e03: REVERT
00001e04: JUMPDEST
00001e05: SWAP2
00001e06: SWAP1
00001e07: POP
00001e08: JUMP
00001e09: JUMPDEST
00001e0a: PUSH1 0x00
00001e0c: PUSH1 0x20
00001e0e: DUP3
00001e0f: DUP5
00001e10: SUB
00001e11: SLT
00001e12: ISZERO
00001e13: PUSH2 0x1e1b
00001e16: JUMPI
00001e17: PUSH1 0x00
00001e19: DUP1
00001e1a: REVERT
00001e1b: JUMPDEST
00001e1c: PUSH2 0x12c7
00001e1f: DUP3
00001e20: PUSH2 0x1ded
00001e23: JUMP
00001e24: JUMPDEST
00001e25: PUSH1 0x01
00001e27: PUSH1 0x01
00001e29: PUSH1 0xa0
00001e2b: SHL
00001e2c: SUB
00001e2d: SWAP2
00001e2e: SWAP1
00001e2f: SWAP2
00001e30: AND
00001e31: DUP2
00001e32: MSTORE
00001e33: PUSH1 0x20
00001e35: ADD
00001e36: SWAP1
00001e37: JUMP
00001e38: JUMPDEST
00001e39: DUP1
00001e3a: ISZERO
00001e3b: ISZERO
00001e3c: DUP2
00001e3d: EQ
00001e3e: PUSH2 0x1e46
00001e41: JUMPI
00001e42: PUSH1 0x00
00001e44: DUP1
00001e45: REVERT
00001e46: JUMPDEST
00001e47: POP
00001e48: JUMP
00001e49: JUMPDEST
00001e4a: PUSH1 0x00
00001e4c: PUSH1 0x20
00001e4e: DUP3
00001e4f: DUP5
00001e50: SUB
00001e51: SLT
00001e52: ISZERO
00001e53: PUSH2 0x1e5b
00001e56: JUMPI
00001e57: PUSH1 0x00
00001e59: DUP1
00001e5a: REVERT
00001e5b: JUMPDEST
00001e5c: DUP2
00001e5d: CALLDATALOAD
00001e5e: PUSH2 0x12c7
00001e61: DUP2
00001e62: PUSH2 0x1e38
00001e65: JUMP
00001e66: JUMPDEST
00001e67: PUSH1 0x00
00001e69: PUSH1 0x20
00001e6b: DUP3
00001e6c: DUP5
00001e6d: SUB
00001e6e: SLT
00001e6f: ISZERO
00001e70: PUSH2 0x1e78
00001e73: JUMPI
00001e74: PUSH1 0x00
00001e76: DUP1
00001e77: REVERT
00001e78: JUMPDEST
00001e79: POP
00001e7a: CALLDATALOAD
00001e7b: SWAP2
00001e7c: SWAP1
00001e7d: POP
00001e7e: JUMP
00001e7f: JUMPDEST
00001e80: PUSH1 0x00
00001e82: DUP1
00001e83: PUSH1 0x40
00001e85: DUP4
00001e86: DUP6
00001e87: SUB
00001e88: SLT
00001e89: ISZERO
00001e8a: PUSH2 0x1e92
00001e8d: JUMPI
00001e8e: PUSH1 0x00
00001e90: DUP1
00001e91: REVERT
00001e92: JUMPDEST
00001e93: DUP3
00001e94: CALLDATALOAD
00001e95: SWAP2
00001e96: POP
00001e97: PUSH2 0x1ea2
00001e9a: PUSH1 0x20
00001e9c: DUP5
00001e9d: ADD
00001e9e: PUSH2 0x1ded
00001ea1: JUMP
00001ea2: JUMPDEST
00001ea3: SWAP1
00001ea4: POP
00001ea5: SWAP3
00001ea6: POP
00001ea7: SWAP3
00001ea8: SWAP1
00001ea9: POP
00001eaa: JUMP
00001eab: JUMPDEST
00001eac: PUSH1 0x00
00001eae: DUP1
00001eaf: PUSH1 0x40
00001eb1: DUP4
00001eb2: DUP6
00001eb3: SUB
00001eb4: SLT
00001eb5: ISZERO
00001eb6: PUSH2 0x1ebe
00001eb9: JUMPI
00001eba: PUSH1 0x00
00001ebc: DUP1
00001ebd: REVERT
00001ebe: JUMPDEST
00001ebf: PUSH2 0x1ec7
00001ec2: DUP4
00001ec3: PUSH2 0x1ded
00001ec6: JUMP
00001ec7: JUMPDEST
00001ec8: SWAP5
00001ec9: PUSH1 0x20
00001ecb: SWAP4
00001ecc: SWAP1
00001ecd: SWAP4
00001ece: ADD
00001ecf: CALLDATALOAD
00001ed0: SWAP4
00001ed1: POP
00001ed2: POP
00001ed3: POP
00001ed4: JUMP
00001ed5: JUMPDEST
00001ed6: PUSH1 0x00
00001ed8: DUP1
00001ed9: PUSH1 0x40
00001edb: DUP4
00001edc: DUP6
00001edd: SUB
00001ede: SLT
00001edf: ISZERO
00001ee0: PUSH2 0x1ee8
00001ee3: JUMPI
00001ee4: PUSH1 0x00
00001ee6: DUP1
00001ee7: REVERT
00001ee8: JUMPDEST
00001ee9: DUP3
00001eea: CALLDATALOAD
00001eeb: SWAP2
00001eec: POP
00001eed: PUSH1 0x20
00001eef: DUP4
00001ef0: ADD
00001ef1: CALLDATALOAD
00001ef2: PUSH2 0x1efa
00001ef5: DUP2
00001ef6: PUSH2 0x1e38
00001ef9: JUMP
00001efa: JUMPDEST
00001efb: DUP1
00001efc: SWAP2
00001efd: POP
00001efe: POP
00001eff: SWAP3
00001f00: POP
00001f01: SWAP3
00001f02: SWAP1
00001f03: POP
00001f04: JUMP
00001f05: JUMPDEST
00001f06: PUSH1 0x00
00001f08: DUP1
00001f09: PUSH1 0x40
00001f0b: DUP4
00001f0c: DUP6
00001f0d: SUB
00001f0e: SLT
00001f0f: ISZERO
00001f10: PUSH2 0x1f18
00001f13: JUMPI
00001f14: PUSH1 0x00
00001f16: DUP1
00001f17: REVERT
00001f18: JUMPDEST
00001f19: POP
00001f1a: POP
00001f1b: DUP1
00001f1c: CALLDATALOAD
00001f1d: SWAP3
00001f1e: PUSH1 0x20
00001f20: SWAP1
00001f21: SWAP2
00001f22: ADD
00001f23: CALLDATALOAD
00001f24: SWAP2
00001f25: POP
00001f26: JUMP
00001f27: JUMPDEST
00001f28: PUSH1 0x20
00001f2a: DUP1
00001f2b: DUP3
00001f2c: MSTORE
00001f2d: PUSH1 0x1f
00001f2f: SWAP1
00001f30: DUP3
00001f31: ADD
00001f32: MSTORE
00001f33: PUSH32 0x5265656e7472616e637947756172643a207265656e7472616e742063616c6c00
00001f54: PUSH1 0x40
00001f56: DUP3
00001f57: ADD
00001f58: MSTORE
00001f59: PUSH1 0x60
00001f5b: ADD
00001f5c: SWAP1
00001f5d: JUMP
00001f5e: JUMPDEST
00001f5f: PUSH1 0x00
00001f61: DUP1
00001f62: PUSH1 0x40
00001f64: DUP4
00001f65: DUP6
00001f66: SUB
00001f67: SLT
00001f68: ISZERO
00001f69: PUSH2 0x1f71
00001f6c: JUMPI
00001f6d: PUSH1 0x00
00001f6f: DUP1
00001f70: REVERT
00001f71: JUMPDEST
00001f72: POP
00001f73: POP
00001f74: DUP1
00001f75: MLOAD
00001f76: PUSH1 0x20
00001f78: SWAP1
00001f79: SWAP2
00001f7a: ADD
00001f7b: MLOAD
00001f7c: SWAP1
00001f7d: SWAP3
00001f7e: SWAP1
00001f7f: SWAP2
00001f80: POP
00001f81: JUMP
00001f82: JUMPDEST
00001f83: PUSH1 0x00
00001f85: PUSH1 0x20
00001f87: DUP3
00001f88: DUP5
00001f89: SUB
00001f8a: SLT
00001f8b: ISZERO
00001f8c: PUSH2 0x1f94
00001f8f: JUMPI
00001f90: PUSH1 0x00
00001f92: DUP1
00001f93: REVERT
00001f94: JUMPDEST
00001f95: POP
00001f96: MLOAD
00001f97: SWAP2
00001f98: SWAP1
00001f99: POP
00001f9a: JUMP
00001f9b: JUMPDEST
00001f9c: PUSH4 0x4e487b71
00001fa1: PUSH1 0xe0
00001fa3: SHL
00001fa4: PUSH1 0x00
00001fa6: MSTORE
00001fa7: PUSH1 0x11
00001fa9: PUSH1 0x04
00001fab: MSTORE
00001fac: PUSH1 0x24
00001fae: PUSH1 0x00
00001fb0: REVERT
00001fb1: JUMPDEST
00001fb2: PUSH1 0x00
00001fb4: DUP3
00001fb5: NOT
00001fb6: DUP3
00001fb7: GT
00001fb8: ISZERO
00001fb9: PUSH2 0x1fc4
00001fbc: JUMPI
00001fbd: PUSH2 0x1fc4
00001fc0: PUSH2 0x1f9b
00001fc3: JUMP
00001fc4: JUMPDEST
00001fc5: POP
00001fc6: ADD
00001fc7: SWAP1
00001fc8: JUMP
00001fc9: JUMPDEST
00001fca: PUSH1 0x00
00001fcc: DUP2
00001fcd: PUSH1 0x00
00001fcf: NOT
00001fd0: DIV
00001fd1: DUP4
00001fd2: GT
00001fd3: DUP3
00001fd4: ISZERO
00001fd5: ISZERO
00001fd6: AND
00001fd7: ISZERO
00001fd8: PUSH2 0x1fe3
00001fdb: JUMPI
00001fdc: PUSH2 0x1fe3
00001fdf: PUSH2 0x1f9b
00001fe2: JUMP
00001fe3: JUMPDEST
00001fe4: POP
00001fe5: MUL
00001fe6: SWAP1
00001fe7: JUMP
00001fe8: JUMPDEST
00001fe9: PUSH1 0x00
00001feb: DUP3
00001fec: PUSH2 0x2005
00001fef: JUMPI
00001ff0: PUSH4 0x4e487b71
00001ff5: PUSH1 0xe0
00001ff7: SHL
00001ff8: PUSH1 0x00
00001ffa: MSTORE
00001ffb: PUSH1 0x12
00001ffd: PUSH1 0x04
00001fff: MSTORE
00002000: PUSH1 0x24
00002002: PUSH1 0x00
00002004: REVERT
00002005: JUMPDEST
00002006: POP
00002007: DIV
00002008: SWAP1
00002009: JUMP
0000200a: JUMPDEST
0000200b: PUSH1 0x20
0000200d: DUP1
0000200e: DUP3
0000200f: MSTORE
00002010: PUSH1 0x21
00002012: SWAP1
00002013: DUP3
00002014: ADD
00002015: MSTORE
00002016: PUSH32 0x4465706f7369743a20416d6f756e74206d757374206265203e3d203120583259
00002037: PUSH1 0x40
00002039: DUP3
0000203a: ADD
0000203b: MSTORE
0000203c: PUSH1 0x19
0000203e: PUSH1 0xf9
00002040: SHL
00002041: PUSH1 0x60
00002043: DUP3
00002044: ADD
00002045: MSTORE
00002046: PUSH1 0x80
00002048: ADD
00002049: SWAP1
0000204a: JUMP
0000204b: JUMPDEST
0000204c: PUSH1 0x20
0000204e: DUP1
0000204f: DUP3
00002050: MSTORE
00002051: PUSH1 0x0d
00002053: SWAP1
00002054: DUP3
00002055: ADD
00002056: MSTORE
00002057: PUSH13 0x11195c1bdcda5d0e8811985a5b
00002065: PUSH1 0x9a
00002067: SHL
00002068: PUSH1 0x40
0000206a: DUP3
0000206b: ADD
0000206c: MSTORE
0000206d: PUSH1 0x60
0000206f: ADD
00002070: SWAP1
00002071: JUMP
00002072: JUMPDEST
00002073: PUSH1 0x00
00002075: DUP3
00002076: DUP3
00002077: LT
00002078: ISZERO
00002079: PUSH2 0x2084
0000207c: JUMPI
0000207d: PUSH2 0x2084
00002080: PUSH2 0x1f9b
00002083: JUMP
00002084: JUMPDEST
00002085: POP
00002086: SUB
00002087: SWAP1
00002088: JUMP
00002089: JUMPDEST
0000208a: PUSH1 0x00
0000208c: JUMPDEST
0000208d: DUP4
0000208e: DUP2
0000208f: LT
00002090: ISZERO
00002091: PUSH2 0x20a4
00002094: JUMPI
00002095: DUP2
00002096: DUP2
00002097: ADD
00002098: MLOAD
00002099: DUP4
0000209a: DUP3
0000209b: ADD
0000209c: MSTORE
0000209d: PUSH1 0x20
0000209f: ADD
000020a0: PUSH2 0x208c
000020a3: JUMP
000020a4: JUMPDEST
000020a5: DUP4
000020a6: DUP2
000020a7: GT
000020a8: ISZERO
000020a9: PUSH2 0x1798
000020ac: JUMPI
000020ad: POP
000020ae: POP
000020af: PUSH1 0x00
000020b1: SWAP2
000020b2: ADD
000020b3: MSTORE
000020b4: JUMP
000020b5: JUMPDEST
000020b6: PUSH23 0x020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1
000020ce: PUSH1 0x4d
000020d0: SHL
000020d1: DUP2
000020d2: MSTORE
000020d3: PUSH1 0x00
000020d5: DUP4
000020d6: MLOAD
000020d7: PUSH2 0x20e7
000020da: DUP2
000020db: PUSH1 0x17
000020dd: DUP6
000020de: ADD
000020df: PUSH1 0x20
000020e1: DUP9
000020e2: ADD
000020e3: PUSH2 0x2089
000020e6: JUMP
000020e7: JUMPDEST
000020e8: PUSH17 0x01034b99036b4b9b9b4b733903937b6329
000020fa: PUSH1 0x7d
000020fc: SHL
000020fd: PUSH1 0x17
000020ff: SWAP2
00002100: DUP5
00002101: ADD
00002102: SWAP2
00002103: DUP3
00002104: ADD
00002105: MSTORE
00002106: DUP4
00002107: MLOAD
00002108: PUSH2 0x2118
0000210b: DUP2
0000210c: PUSH1 0x28
0000210e: DUP5
0000210f: ADD
00002110: PUSH1 0x20
00002112: DUP9
00002113: ADD
00002114: PUSH2 0x2089
00002117: JUMP
00002118: JUMPDEST
00002119: ADD
0000211a: PUSH1 0x28
0000211c: ADD
0000211d: SWAP5
0000211e: SWAP4
0000211f: POP
00002120: POP
00002121: POP
00002122: POP
00002123: JUMP
00002124: JUMPDEST
00002125: PUSH1 0x20
00002127: DUP2
00002128: MSTORE
00002129: PUSH1 0x00
0000212b: DUP3
0000212c: MLOAD
0000212d: DUP1
0000212e: PUSH1 0x20
00002130: DUP5
00002131: ADD
00002132: MSTORE
00002133: PUSH2 0x2143
00002136: DUP2
00002137: PUSH1 0x40
00002139: DUP6
0000213a: ADD
0000213b: PUSH1 0x20
0000213d: DUP8
0000213e: ADD
0000213f: PUSH2 0x2089
00002142: JUMP
00002143: JUMPDEST
00002144: PUSH1 0x1f
00002146: ADD
00002147: PUSH1 0x1f
00002149: NOT
0000214a: AND
0000214b: SWAP2
0000214c: SWAP1
0000214d: SWAP2
0000214e: ADD
0000214f: PUSH1 0x40
00002151: ADD
00002152: SWAP3
00002153: SWAP2
00002154: POP
00002155: POP
00002156: JUMP
00002157: JUMPDEST
00002158: PUSH1 0x00
0000215a: PUSH1 0x20
0000215c: DUP3
0000215d: DUP5
0000215e: SUB
0000215f: SLT
00002160: ISZERO
00002161: PUSH2 0x2169
00002164: JUMPI
00002165: PUSH1 0x00
00002167: DUP1
00002168: REVERT
00002169: JUMPDEST
0000216a: DUP2
0000216b: MLOAD
0000216c: PUSH2 0x12c7
0000216f: DUP2
00002170: PUSH2 0x1e38
00002173: JUMP
00002174: JUMPDEST
00002175: PUSH4 0x4e487b71
0000217a: PUSH1 0xe0
0000217c: SHL
0000217d: PUSH1 0x00
0000217f: MSTORE
00002180: PUSH1 0x41
00002182: PUSH1 0x04
00002184: MSTORE
00002185: PUSH1 0x24
00002187: PUSH1 0x00
00002189: REVERT
0000218a: JUMPDEST
0000218b: PUSH4 0x4e487b71
00002190: PUSH1 0xe0
00002192: SHL
00002193: PUSH1 0x00
00002195: MSTORE
00002196: PUSH1 0x32
00002198: PUSH1 0x04
0000219a: MSTORE
0000219b: PUSH1 0x24
0000219d: PUSH1 0x00
0000219f: REVERT
000021a0: JUMPDEST
000021a1: PUSH1 0x00
000021a3: DUP2
000021a4: PUSH2 0x21af
000021a7: JUMPI
000021a8: PUSH2 0x21af
000021ab: PUSH2 0x1f9b
000021ae: JUMP
000021af: JUMPDEST
000021b0: POP
000021b1: PUSH1 0x00
000021b3: NOT
000021b4: ADD
000021b5: SWAP1
000021b6: JUMP
000021b7: JUMPDEST
000021b8: PUSH1 0x00
000021ba: DUP3
000021bb: MLOAD
000021bc: PUSH2 0x21c9
000021bf: DUP2
000021c0: DUP5
000021c1: PUSH1 0x20
000021c3: DUP8
000021c4: ADD
000021c5: PUSH2 0x2089
000021c8: JUMP
000021c9: JUMPDEST
000021ca: SWAP2
000021cb: SWAP1
000021cc: SWAP2
000021cd: ADD
000021ce: SWAP3
000021cf: SWAP2
000021d0: POP
000021d1: POP
000021d2: JUMP
000021d3: INVALID
000021d4: LOG2
000021d5: PUSH5 0x6970667358
000021db: UNKNOWN(0x22)
000021dc: SLT
000021dd: KECCAK256
000021de: UNKNOWN(0xD2)
000021df: DUP7
000021e0: DUP9
000021e1: DUP7
000021e2: UNKNOWN(0xC4)
000021e3: UNKNOWN(0x28)
000021e4: UNKNOWN(0xCC)
000021e5: TIMESTAMP
000021e6: SWAP9
000021e7: XOR
000021e8: SLT
000021e9: PUSH27 0x9a43a60dd6f8c0c39093dfe63a21359a8263681f64736f6c634300
00002205: ADDMOD
00002206: SIGNEXTEND
00002207: STOP
00002208: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x16894135515c5b782568b2691a51f0138c3eda1889853b7ac46bd364cc8958a8
call_targets: 0xc8c3cc5be962b6d281e4a53dbcce1359f76a1b85
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x16894135515c5b782568b2691a51f0138c3eda1889853b7ac46bd364cc8958a8",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xc8c3cc5be962b6d281e4a53dbcce1359f76a1b85"
    ],
    "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": "0xa9f8d181",
            "selector": "0xa9f8d181",
            "calldata_variants": [
                "0xa9f8d181",
                "0xa9f8d1810000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcb4aec61",
            "selector": "0xcb4aec61",
            "calldata_variants": [
                "0xcb4aec61",
                "0xcb4aec610000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xccd34cd5",
            "selector": "0xccd34cd5",
            "calldata_variants": [
                "0xccd34cd5",
                "0xccd34cd50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd547741f",
            "selector": "0xd547741f",
            "calldata_variants": [
                "0xd547741f",
                "0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdf136d65",
            "selector": "0xdf136d65",
            "calldata_variants": [
                "0xdf136d65",
                "0xdf136d650000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe098bd4b",
            "selector": "0xe098bd4b",
            "calldata_variants": [
                "0xe098bd4b",
                "0xe098bd4b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xebde5ee6",
            "selector": "0xebde5ee6",
            "calldata_variants": [
                "0xebde5ee6",
                "0xebde5ee60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf7c618c1",
            "selector": "0xf7c618c1",
            "calldata_variants": [
                "0xf7c618c1",
                "0xf7c618c10000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1871,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2390,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2956,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 9,
    "guards_detected": [],
    "untrusted_call_count": 9
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x16894135515c5b782568b2691a51f0138c3eda1889853b7ac46bd364cc8958a8
call_targets: 0xc8c3cc5be962b6d281e4a53dbcce1359f76a1b85
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x16894135515c5b782568b2691a51f0138c3eda1889853b7ac46bd364cc8958a8",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xc8c3cc5be962b6d281e4a53dbcce1359f76a1b85"
    ],
    "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": "0xa9f8d181",
            "selector": "0xa9f8d181",
            "calldata_variants": [
                "0xa9f8d181",
                "0xa9f8d1810000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcb4aec61",
            "selector": "0xcb4aec61",
            "calldata_variants": [
                "0xcb4aec61",
                "0xcb4aec610000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xccd34cd5",
            "selector": "0xccd34cd5",
            "calldata_variants": [
                "0xccd34cd5",
                "0xccd34cd50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd547741f",
            "selector": "0xd547741f",
            "calldata_variants": [
                "0xd547741f",
                "0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdf136d65",
            "selector": "0xdf136d65",
            "calldata_variants": [
                "0xdf136d65",
                "0xdf136d650000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe098bd4b",
            "selector": "0xe098bd4b",
            "calldata_variants": [
                "0xe098bd4b",
                "0xe098bd4b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xebde5ee6",
            "selector": "0xebde5ee6",
            "calldata_variants": [
                "0xebde5ee6",
                "0xebde5ee60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf7c618c1",
            "selector": "0xf7c618c1",
            "calldata_variants": [
                "0xf7c618c1",
                "0xf7c618c10000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1871,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2390,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2956,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 9,
    "guards_detected": []
}
medium other codex Reward accrual can be wiped when updateRewards resets lastUpdateBlock 75 no
view
evidence_json
{
    "evidence": "updateRewards updates lastUpdateBlock and periodEndBlock without first updating rewardPerTokenStored, so prior rewards are skipped.",
    "locations": [
        "contracts/contracts/FeeSharingSystem.sol:242",
        "contracts/contracts/FeeSharingSystem.sol:255"
    ],
    "recommendation": "Before changing currentRewardPerBlock/periodEndBlock, snapshot rewards by updating rewardPerTokenStored and lastUpdateBlock (e.g., call _updateReward(address(0)) or set rewardPerTokenStored = _rewardPerToken(); lastUpdateBlock = _lastRewardBlock()).",
    "exploit_scenario": "A caller with REWARD_UPDATE_ROLE can call updateRewards after rewards have accrued. Because rewardPerTokenStored is not updated before lastUpdateBlock is reset, all rewards between the previous lastUpdateBlock and this update become unclaimable. Repeated updates can continuously zero out staker rewards without changing balances."
}
low other codex Unchecked ERC20 return values on approve/mint can silently fail and desync accounting 65 no
view
evidence_json
{
    "evidence": "approve() return value is ignored; mint() return value for tokenSplitter is ignored and staking mint only conditionally updates accounting.",
    "locations": [
        "contracts/contracts/FeeSharingSystem.sol:326",
        "contracts/contracts/FeeSharingSystem.sol:328",
        "contracts/contracts/TokenDistributor.sol:371",
        "contracts/contracts/TokenDistributor.sol:380"
    ],
    "recommendation": "Use SafeERC20 for approvals or require true return values; for minting, check the return value and revert on failure for both staking and tokenSplitter mints.",
    "exploit_scenario": "If x2y2Token returns false (non\u2011standard or mint disabled), FeeSharingSystem still proceeds and TokenDistributor skips reward accounting while minting (or minting to tokenSplitter) may silently fail. This can lead to stuck rewards, missing distributions, or unexpected reverts later."
}
info other cast Heavy EXTCODE*/BALANCE usage 55 no
view
evidence_json
{
    "notes": "frequent external code or balance checks; may indicate introspection or validation logic",
    "ext_balance_count": 8
}
info other cast Heavy CALL-family usage 55 no
view
evidence_json
{
    "notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
    "call_family_count": 17
}