57ace033-9a1d-4d2f-b70e-f28fa74799da
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 30343 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 74242 | artifact.fetch | failed | 1 / 3 | 1 week ago |
| 74243 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 74244 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 74245 | capability.graph | complete | 1 / 3 | 1 week ago |
| 74246 | detector.run | complete | 1 / 3 | 1 week ago |
| 74247 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1033435] OpenAI Codex v0.77.0 (research preview)
[codex:1033435] --------
[codex:1033435] workdir: /tmp/codex-multi-_yfoll9b
[codex:1033435] model: gpt-5.2-codex
[codex:1033435] provider: openai
[codex:1033435] approval: never
[codex:1033435] sandbox: read-only
[codex:1033435] reasoning effort: xhigh
[codex:1033435] reasoning summaries: auto
[codex:1033435] session id: 019b6604-fd79-7f61-98b2-8f66be5f0b18
[codex:1033435] --------
[codex:1033435] user
[codex:1033435] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1033435] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1033435] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1033435]
[codex:1033435] Scope rules:
[codex:1033435] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1033435] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1033435]
[codex:1033435] Output MUST be valid JSON matching the provided schema.
[codex:1033435] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1033435] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1033435]
[codex:1033435] Output constraints (IMPORTANT):
[codex:1033435] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1033435] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1033435] mcp startup: no servers
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Preparing to read AUDIT_BUNDLE file**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc ls in /tmp/codex-multi-_yfoll9b succeeded in 5ms:
[codex:1033435] AUDIT_BUNDLE.txt
[codex:1033435] codex-output-schema.json
[codex:1033435] contracts
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Reading AUDIT_BUNDLE.txt**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1033435]
[codex:1033435] ================================================================================
[codex:1033435] FILE: contracts/@openzeppelin/contracts/access/manager/IAccessManaged.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] // OpenZeppelin Contracts (last updated v5.0.0) (access/manager/IAccessManaged.sol)
[codex:1033435]
[codex:1033435] pragma solidity ^0.8.20;
[codex:1033435]
[codex:1033435] interface IAccessManaged {
[codex:1033435] /**
[codex:1033435] * @dev Authority that manages this contract was updated.
[codex:1033435] */
[codex:1033435] event AuthorityUpdated(address authority);
[codex:1033435]
[codex:1033435] error AccessManagedUnauthorized(address caller);
[codex:1033435] error AccessManagedRequiredDelay(address caller, uint32 delay);
[codex:1033435] error AccessManagedInvalidAuthority(address authority);
[codex:1033435]
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Planning full AUDIT_BUNDLE read**
[codex:1033435]
[codex:1033435] I’m investigating whether the AUDIT_BUNDLE fully includes only relevant first-party code or more third-party like OpenZeppelin, noting the output truncated at 64951 tokens. Since the file is 7640 lines long and system cuts messages, I plan to read it in chunks with sed or ripgrep to find all file boundaries and ensure I don't miss any critical first-party snippets. This way, I can confirm what the bundle truly contains before moving on.
[codex:1033435] exec
[codex:1033435] /bin/bash -lc 'rg "''^FILE:" -n AUDIT_BUNDLE.txt' in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] 4:FILE: contracts/@openzeppelin/contracts/access/manager/IAccessManaged.sol
[codex:1033435] 40:FILE: contracts/@openzeppelin/contracts/access/manager/IAccessManager.sol
[codex:1033435] 436:FILE: contracts/@openzeppelin/contracts/interfaces/IERC4626.sol
[codex:1033435] 670:FILE: contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol
[codex:1033435] 694:FILE: contracts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol
[codex:1033435] 859:FILE: contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol
[codex:1033435] 903:FILE: contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol
[codex:1033435] 1100:FILE: contracts/@openzeppelin/contracts/proxy/Proxy.sol
[codex:1033435] 1173:FILE: contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.sol
[codex:1033435] 1193:FILE: contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol
[codex:1033435] 1276:FILE: contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
[codex:1033435] 1306:FILE: contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol
[codex:1033435] 1400:FILE: contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
[codex:1033435] 1522:FILE: contracts/@openzeppelin/contracts/token/ERC721/IERC721.sol
[codex:1033435] 1661:FILE: contracts/@openzeppelin/contracts/utils/Address.sol
[codex:1033435] 1824:FILE: contracts/@openzeppelin/contracts/utils/StorageSlot.sol
[codex:1033435] 1963:FILE: contracts/@openzeppelin/contracts/utils/introspection/IERC165.sol
[codex:1033435] 1992:FILE: contracts/@openzeppelin/contracts/utils/math/Math.sol
[codex:1033435] 2411:FILE: contracts/@openzeppelin/contracts/utils/math/SafeCast.sol
[codex:1033435] 3568:FILE: contracts/@openzeppelin/contracts/utils/types/Time.sol
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Planning full AUDIT_BUNDLE review**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '1,2000p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1033435]
[codex:1033435] ================================================================================
[codex:1033435] FILE: contracts/@openzeppelin/contracts/access/manager/IAccessManaged.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] // OpenZeppelin Contracts (last updated v5.0.0) (access/manager/IAccessManaged.sol)
[codex:1033435]
[codex:1033435] pragma solidity ^0.8.20;
[codex:1033435]
[codex:1033435] interface IAccessManaged {
[codex:1033435] /**
[codex:1033435] * @dev Authority that manages this contract was updated.
[codex:1033435] */
[codex:1033435] event AuthorityUpdated(address authority);
[codex:1033435]
[codex:1033435] error AccessManagedUnauthorized(address caller);
[codex:1033435] error AccessManagedRequiredDelay(address caller, uint32 delay);
[codex:1033435] error AccessManagedInvalidAuthority(address authority);
[codex:1033435]
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Requesting additional file chunks**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '2001,4000p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 7ms:
[codex:1033435] */
[codex:1033435] library Math {
[codex:1033435] /**
[codex:1033435] * @dev Muldiv operation overflow.
[codex:1033435] */
[codex:1033435] error MathOverflowedMulDiv();
[codex:1033435]
[codex:1033435] enum Rounding {
[codex:1033435] Floor, // Toward negative infinity
[codex:1033435] Ceil, // Toward positive infinity
[codex:1033435] Trunc, // Toward zero
[codex:1033435] Expand // Away from zero
[codex:1033435] }
[codex:1033435]
[codex:1033435] /**
[codex:1033435] * @dev Returns the addition of two unsigned integers, with an overflow flag.
[codex:1033435] */
[codex:1033435] function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
[codex:1033435] unchecked {
[codex:1033435] uint256 c = a + b;
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Needing more content to proceed**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '4001,6000p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435]
[codex:1033435] /// @inheritdoc IAccessManager
[codex:1033435] function isTargetClosed(address target) public view virtual returns (bool) {
[codex:1033435] AccessManagerStorage storage $ = _getAccessManagerStorage();
[codex:1033435] return $._targets[target].closed;
[codex:1033435] }
[codex:1033435]
[codex:1033435] /// @inheritdoc IAccessManager
[codex:1033435] function getTargetFunctionRole(address target, bytes4 selector) public view virtual returns (uint64) {
[codex:1033435] AccessManagerStorage storage $ = _getAccessManagerStorage();
[codex:1033435] return $._targets[target].allowedRoles[selector];
[codex:1033435] }
[codex:1033435]
[codex:1033435] /// @inheritdoc IAccessManager
[codex:1033435] function getTargetAdminDelay(address target) public view virtual returns (uint32) {
[codex:1033435] AccessManagerStorage storage $ = _getAccessManagerStorage();
[codex:1033435] return $._targets[target].adminDelay.get();
[codex:1033435] }
[codex:1033435]
[codex:1033435] /// @inheritdoc IAccessManager
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Requesting final contract chunk**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6001,7640p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] /// @param id The unique identifier for the position.
[codex:1033435] /// @param trader The address of the trader who opened the position.
[codex:1033435] /// @param currency The address of the currency to be paid for the position.
[codex:1033435] /// @param collateralCurrency The address of the currency to be received for the position.
[codex:1033435] /// @param lastFundingTimestamp The timestamp of the last funding payment.
[codex:1033435] /// @param downPayment The initial down payment amount required to open the position (is in `currency` for long, `collateralCurrency` for short positions)
[codex:1033435] /// @param principal The total principal amount to be borrowed for the position (is in `currency`)
[codex:1033435] /// @param collateralAmount The total collateral amount to be received for the position (is in `collateralCurrency`)
[codex:1033435] /// @param feesToBePaid The total fees to be paid for the position (is in `currency`)
[codex:1033435] struct Position {
[codex:1033435] uint256 id;
[codex:1033435] address trader;
[codex:1033435] address currency;
[codex:1033435] address collateralCurrency;
[codex:1033435] uint256 lastFundingTimestamp;
[codex:1033435] uint256 downPayment;
[codex:1033435] uint256 principal;
[codex:1033435] uint256 collateralAmount;
[codex:1033435] uint256 feesToBePaid;
[codex:1033435] }
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Preparing to extract contract files**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '5842,6238p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 5ms:
[codex:1033435] FILE: contracts/contracts/IWasabiPerps.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435]
[codex:1033435] import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:1033435] import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
[codex:1033435] import "./vaults/IWasabiVault.sol";
[codex:1033435]
[codex:1033435] interface IWasabiPerps {
[codex:1033435]
[codex:1033435] error LiquidationThresholdNotReached(); // 0xc4d82e43
[codex:1033435] error InvalidSignature(); // 0x8baa579f
[codex:1033435] error PositionAlreadyTaken(); // 0xe168e4db
[codex:1033435] error SwapFunctionNeeded(); // 0xac8da8e3
[codex:1033435] error OrderExpired(); // 0xc56873ba
[codex:1033435] error InvalidOrder(); // 0xaf610693
[codex:1033435] error PriceTargetNotReached(); // 0x5d5ce003
[codex:1033435] error InvalidCurrency(); // 0xf5993428
[codex:1033435] error InvalidTargetCurrency(); // 0x0415b9ce
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Reviewing Perp interfaces and utilities**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6239,6344p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/PerpUtils.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435]
[codex:1033435] import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:1033435] import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:1033435] import "./weth/IWETH.sol";
[codex:1033435] import {IWasabiPerps} from "./IWasabiPerps.sol";
[codex:1033435]
[codex:1033435] library PerpUtils {
[codex:1033435] using Address for address;
[codex:1033435] using SafeERC20 for IERC20;
[codex:1033435]
[codex:1033435] /// @dev Pays ETH to a given address
[codex:1033435] /// @param _amount The amount to pay
[codex:1033435] /// @param _target The address to pay to
[codex:1033435] function payETH(uint256 _amount, address _target) internal {
[codex:1033435] if (_amount > 0) {
[codex:1033435] (bool sent, ) = payable(_target).call{value: _amount}("");
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Investigating PerpUtils external calls**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6345,6397p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/admin/IAddressProvider.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435]
[codex:1033435] import "../vaults/IWasabiVault.sol";
[codex:1033435] import "../router/IWasabiRouter.sol";
[codex:1033435] import "../util/IPartnerFeeManager.sol";
[codex:1033435]
[codex:1033435] interface IAddressProvider {
[codex:1033435] error InvalidAddress();
[codex:1033435] error InvalidLiquidationFee();
[codex:1033435]
[codex:1033435] /// @dev Returns the Wasabi router
[codex:1033435] function wasabiRouter() external view returns (IWasabiRouter);
[codex:1033435]
[codex:1033435] /// @dev Returns the fee receiver address
[codex:1033435] function feeReceiver() external view returns (address);
[codex:1033435]
[codex:1033435] /// @dev Returns the WETH address
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Reviewing IAddressProvider and IDebtController interfaces**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6398,6491p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 5ms:
[codex:1033435] FILE: contracts/contracts/admin/IDebtController.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435]
[codex:1033435] interface IDebtController {
[codex:1033435] error InvalidValue();
[codex:1033435] error IdenticalAddresses();
[codex:1033435] error ZeroAddress();
[codex:1033435] error PrincipalTooHigh(); // 0xd7cdb444
[codex:1033435]
[codex:1033435] event MaxLeverageChanged(address tokenA, address tokenB, uint256 maxLeverage);
[codex:1033435]
[codex:1033435] event LiquidationThresholdChanged(address tokenA, address tokenB, uint256 liquidationThresholdBps);
[codex:1033435]
[codex:1033435] /// @dev Returns the maximum apy
[codex:1033435] /// @notice The maximum apy is a percentage, e.g. 300% APY = 300
[codex:1033435] function maxApy() external view returns (uint256);
[codex:1033435]
[codex:1033435] /// @dev Returns the liquidation fee bps
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Reviewing IPerpManager segment**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6492,6540p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/admin/IPerpManager.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435]
[codex:1033435] interface IPerpManager {
[codex:1033435] error AlreadyMigrated();
[codex:1033435] error InvalidLength();
[codex:1033435]
[codex:1033435] event AuthorizedSignerChanged(
[codex:1033435] address indexed trader,
[codex:1033435] address indexed signer,
[codex:1033435] bool isAuthorized
[codex:1033435] );
[codex:1033435]
[codex:1033435] /// @dev check if account is admin and revert if not
[codex:1033435] function isAdmin(address account) external view;
[codex:1033435]
[codex:1033435] /// @dev check if account has the given role and revert if not
[codex:1033435] /// @param roleId role id
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Reviewing PerpManager contract**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6541,6888p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/admin/PerpManager.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435]
[codex:1033435] import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
[codex:1033435] import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
[codex:1033435] import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
[codex:1033435] import "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
[codex:1033435]
[codex:1033435] import "./IPerpManager.sol";
[codex:1033435] import "./Roles.sol";
[codex:1033435] import "./IAddressProvider.sol";
[codex:1033435] import "./IDebtController.sol";
[codex:1033435] import "../vaults/IWasabiVault.sol";
[codex:1033435] import "../router/IWasabiRouter.sol";
[codex:1033435]
[codex:1033435] contract PerpManager is UUPSUpgradeable, AccessManagerUpgradeable, IPerpManager, IAddressProvider, IDebtController {
[codex:1033435] uint256 public constant LEVERAGE_DENOMINATOR = 100;
[codex:1033435] uint256 public constant APY_DENOMINATOR = 100;
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Checking AccessManager for vulnerabilities**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6889,6901p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 5ms:
[codex:1033435] FILE: contracts/contracts/admin/Roles.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435]
[codex:1033435] library Roles {
[codex:1033435] uint64 public constant LIQUIDATOR_ROLE = 100;
[codex:1033435] uint64 public constant ORDER_SIGNER_ROLE = 101;
[codex:1033435] uint64 public constant ORDER_EXECUTOR_ROLE = 102;
[codex:1033435] uint64 public constant VAULT_ADMIN_ROLE = 103;
[codex:1033435] }
[codex:1033435]
[codex:1033435] ================================================================================
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Checking IWasabiRouter implementation**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '6902,7031p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/router/IWasabiRouter.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435]
[codex:1033435] import "../IWasabiPerps.sol";
[codex:1033435] import "../weth/IWETH.sol";
[codex:1033435]
[codex:1033435] interface IWasabiRouter {
[codex:1033435]
[codex:1033435] event PositionOpenedWithOrder(address _trader, bytes32 _orderHash);
[codex:1033435]
[codex:1033435] error InvalidTrader(); // 0xfb7595a2
[codex:1033435] error InvalidSignature(); // 0x8baa579f
[codex:1033435] error InvalidPool(); // 0x2083cd40
[codex:1033435] error InvalidETHReceived(); // 0x3daee882
[codex:1033435] error InvalidFeeBips(); // 0x82c96382
[codex:1033435] error FeeReceiverNotSet(); // 0x0b37568b
[codex:1033435] error OrderAlreadyUsed(); // 0x88b39043
[codex:1033435]
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Reviewing IStrategy interface**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '7032,7071p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/strategy/IStrategy.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435]
[codex:1033435] interface IStrategy {
[codex:1033435] error OnlyVault();
[codex:1033435]
[codex:1033435] /// @dev The vault that the strategy is attached to
[codex:1033435] function vault() external view returns (address);
[codex:1033435]
[codex:1033435] /// @dev The asset that the strategy deposits and withdraws
[codex:1033435] function asset() external view returns (address);
[codex:1033435]
[codex:1033435] /// @dev The collateral asset that the strategy holds
[codex:1033435] function collateralAsset() external view returns (address);
[codex:1033435]
[codex:1033435] /// @dev Deposits the asset into the strategy
[codex:1033435] /// @notice The vault should transfer the asset to the strategy before calling this function
[codex:1033435] /// @param amount The amount of asset to deposit
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Reviewing IPartnerFeeManager section**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '7072,7124p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/contracts/util/IPartnerFeeManager.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435]
[codex:1033435] interface IPartnerFeeManager {
[codex:1033435] error AddressNotPartner();
[codex:1033435] error CallerNotPool();
[codex:1033435] error InvalidFeeShareBips();
[codex:1033435]
[codex:1033435] event FeesAccrued(address indexed partner, address indexed feeToken, uint256 amount);
[codex:1033435] event FeesClaimed(address indexed partner, address indexed feeToken, uint256 amount);
[codex:1033435]
[codex:1033435] /// @dev Returns true if the given address is a partner
[codex:1033435] /// @param partner the address to check
[codex:1033435] /// @return true if the given address is a partner, false otherwise
[codex:1033435] function isPartner(address partner) external view returns (bool);
[codex:1033435]
[codex:1033435] /// @dev Returns the accrued fees for the given partner and fee token
[codex:1033435] /// @param partner the partner to get accrued fees for
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Reviewing IWasabiVault code section**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '7125,7237p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 5ms:
[codex:1033435] FILE: contracts/contracts/vaults/IWasabiVault.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] pragma solidity ^0.8.23;
[codex:1033435]
[codex:1033435] import "@openzeppelin/contracts/interfaces/IERC4626.sol";
[codex:1033435]
[codex:1033435] interface IWasabiVault is IERC4626 {
[codex:1033435] error AlreadyMigrated(); // 0xca1c3cbc
[codex:1033435] error PrincipalTooHigh(); // 0xd7cdb444
[codex:1033435] error InsufficientAvailablePrincipal(); // 0x836ee0c2
[codex:1033435] error InsufficientPrincipalRepaid(); // 0xb0f8fc9b
[codex:1033435] error CannotClaimNonYieldBearingAsset(address _asset); // 0x4cfaa278
[codex:1033435] error EthTransferFailed(); // 0x6d963f88
[codex:1033435] error CannotDepositEth(); // 0x2e15428f
[codex:1033435] error CallerNotPool(); // 0xe9211597
[codex:1033435] error InvalidEthAmount(); // 0x0772327b
[codex:1033435] error InvalidAmount(); // 0x2c5211c6
[codex:1033435] error NoDustToClean(); // 0x37e34f38
[codex:1033435] error AmountExceedsDebt(); // 0x64ddcf37
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Analyzing upgrade and access control patterns**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "sed -n '4831,4987p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] FILE: contracts/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol
[codex:1033435] ================================================================================
[codex:1033435] // SPDX-License-Identifier: MIT
[codex:1033435] // OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/UUPSUpgradeable.sol)
[codex:1033435]
[codex:1033435] pragma solidity ^0.8.20;
[codex:1033435]
[codex:1033435] import {IERC1822Proxiable} from "@openzeppelin/contracts/interfaces/draft-IERC1822.sol";
[codex:1033435] import {ERC1967Utils} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol";
[codex:1033435] import {Initializable} from "./Initializable.sol";
[codex:1033435]
[codex:1033435] /**
[codex:1033435] * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an
[codex:1033435] * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.
[codex:1033435] *
[codex:1033435] * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is
[codex:1033435] * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing
[codex:1033435] * `UUPSUpgradeable` with a custom implementation of upgrades.
[codex:1033435] *
[codex:1033435] * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.
[codex:1033435]
[codex:1033435]
[codex:1033435]
[codex:1033435]
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Analyzing vault asset accounting and access controls**
[codex:1033435] thinking
[codex:1033435] **Examining role delay bypass and fee minting nuances**
[codex:1033435]
[codex:1033435] There's a governance gap where PerpManager’s admin actions bypass configured role delays, allowing immediate execution even if delays are set. I’m also looking at inconsistent timing in minting fee shares around interest updates, which may cause fee recipients to get slightly more or less than intended—an accounting mismatch that could affect share dilution but isn’t straightforwardly exploitable. Let's keep these complexities in mind as I keep analyzing!
[codex:1033435] thinking
[codex:1033435] **Identifying access control gaps and reentrancy concerns**
[codex:1033435]
[codex:1033435] I’m digging into several design choices that could lead to bypassing execution delays in AccessManager roles, potential reentrancy risks when interacting with external strategies, and nuanced admin control issues—like how cleaning “dust” assets or upgrading contracts might behave unexpectedly due to role checks or external calls. These areas seem to hinge on trust assumptions and could cause subtle issues if misused.
[codex:1033435] thinking
[codex:1033435] **Evaluating strategy loss accounting and upgrade authorization**
[codex:1033435]
[codex:1033435] I’m exploring how strategy withdrawals don’t adjust totalAssetValue for losses, risking overstated share prices and potential insolvency; plus, the vault upgrade flow may fail if the manager contract itself lacks admin role, blocking upgrades despite admin calls. These gaps highlight subtle design and access control interactions affecting fund accuracy and upgradeability.
[codex:1033435] thinking
[codex:1033435] **Examining role implications in vault upgrade and admin calls**
[codex:1033435]
[codex:1033435] I’m analyzing how granting the PerpManager contract admin role affects vault upgrades and access checks, noting that this setup lets PerpManager-originated calls pass onlyAdmin checks without enforcing delays, which aligns with the earlier delay bypass concern and impacts vault function authorization.
[codex:1033435] exec
[codex:1033435] /bin/bash -lc 'rg -n "recordRepayment|_handleInterestFee" contracts/contracts/vaults/WasabiVault.sol' in /tmp/codex-multi-_yfoll9b succeeded in 8ms:
[codex:1033435] 184: function recordRepayment(uint256 _totalRepaid, uint256 _principal, bool _isLiquidation) external onlyPool {
[codex:1033435] 193: _handleInterestFee(interestPaid);
[codex:1033435] 346: _handleInterestFee(interestReceived);
[codex:1033435] 351: function _handleInterestFee(uint256 _interestAmount) internal {
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Locating recordRepayment function lines**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "nl -ba contracts/contracts/vaults/WasabiVault.sol | sed -n '170,220p'" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] 170
[codex:1033435] 171 return shares;
[codex:1033435] 172 }
[codex:1033435] 173
[codex:1033435] 174 /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
[codex:1033435] 175 /* POOL FUNCTIONS */
[codex:1033435] 176 /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
[codex:1033435] 177
[codex:1033435] 178 /// @inheritdoc IWasabiVault
[codex:1033435] 179 function borrow(uint256 _amount) external onlyPool {
[codex:1033435] 180 _borrow(msg.sender, _amount);
[codex:1033435] 181 }
[codex:1033435] 182
[codex:1033435] 183 /// @inheritdoc IWasabiVault
[codex:1033435] 184 function recordRepayment(uint256 _totalRepaid, uint256 _principal, bool _isLiquidation) external onlyPool {
[codex:1033435] 185 if (_totalRepaid < _principal) {
[codex:1033435] 186 // Only liquidations can cause bad debt
[codex:1033435] 187 if (!_isLiquidation) revert InsufficientPrincipalRepaid();
[codex:1033435] 188 uint256 loss = _principal - _totalRepaid;
[codex:1033435] 189 totalAssetValue -= loss;
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Seeking line numbers for specific functions**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "nl -ba contracts/contracts/vaults/WasabiVault.sol | sed -n '320,380p'" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] 320 totalAssetValue = 0;
[codex:1033435] 321 }
[codex:1033435] 322
[codex:1033435] 323 IERC20(asset()).safeTransfer(receiver, assets);
[codex:1033435] 324
[codex:1033435] 325 emit Withdraw(caller, receiver, owner, assets, shares);
[codex:1033435] 326 }
[codex:1033435] 327
[codex:1033435] 328 function _borrow(address _receiver, uint256 _amount) internal {
[codex:1033435] 329 IERC20 assetToken = IERC20(asset());
[codex:1033435] 330 if (assetToken.balanceOf(address(this)) < _amount) {
[codex:1033435] 331 revert InsufficientAvailablePrincipal();
[codex:1033435] 332 }
[codex:1033435] 333 assetToken.safeTransfer(_receiver, _amount);
[codex:1033435] 334 }
[codex:1033435] 335
[codex:1033435] 336 function _strategyClaim(address _strategy) internal {
[codex:1033435] 337 // Get the interest earned since the last observed amount
[codex:1033435] 338 uint256 interestReceived = IStrategy(_strategy).getNewInterest(strategyDebt[_strategy]);
[codex:1033435] 339 if (interestReceived == 0) return;
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Searching for access control locations**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "rg -n \"isAdmin\\(|checkRole\\(\" contracts/contracts/admin/PerpManager.sol" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] 56: isAdmin(msg.sender);
[codex:1033435] 61: checkRole(Roles.VAULT_ADMIN_ROLE, msg.sender);
[codex:1033435] 148: function isAdmin(address account) public view {
[codex:1033435] 149: checkRole(ADMIN_ROLE, account);
[codex:1033435] 153: function checkRole(uint64 roleId, address account) public view {
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Reviewing checkRole usage**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "nl -ba contracts/contracts/admin/PerpManager.sol | sed -n '130,170p'" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] 130 uint256 _maxApy
[codex:1033435] 131 ) external onlyAdmin {
[codex:1033435] 132 if (wethAddress != address(0)) revert AlreadyMigrated();
[codex:1033435] 133 wasabiRouter = _wasabiRouter;
[codex:1033435] 134 feeReceiver = _feeReceiver;
[codex:1033435] 135 wethAddress = _wethAddress;
[codex:1033435] 136 liquidationFeeReceiver = _liquidationFeeReceiver;
[codex:1033435] 137 stakingAccountFactory = _stakingAccountFactory;
[codex:1033435] 138 partnerFeeManager = _partnerFeeManager;
[codex:1033435] 139 maxApy = _maxApy;
[codex:1033435] 140 liquidationFeeBps = 500; // 5%
[codex:1033435] 141 }
[codex:1033435] 142
[codex:1033435] 143 /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
[codex:1033435] 144 /* IPerpManager Views */
[codex:1033435] 145 /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
[codex:1033435] 146
[codex:1033435] 147 /// @inheritdoc IPerpManager
[codex:1033435] 148 function isAdmin(address account) public view {
[codex:1033435] 149 checkRole(ADMIN_ROLE, account);
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Searching for access control modifiers**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc 'rg -n "modifier onlyAdmin|modifier onlyRole" contracts/contracts/vaults/WasabiVault.sol' in /tmp/codex-multi-_yfoll9b succeeded in 7ms:
[codex:1033435] 104: modifier onlyAdmin() {
[codex:1033435] 110: modifier onlyRole(uint64 roleId) {
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "nl -ba contracts/contracts/vaults/WasabiVault.sol | sed -n '96,120p'" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] 96 if (msg.sender != address(shortPool)) {
[codex:1033435] 97 // Nested checks save a little gas compared to using &&
[codex:1033435] 98 if (msg.sender != address(longPool)) revert CallerNotPool();
[codex:1033435] 99 }
[codex:1033435] 100 _;
[codex:1033435] 101 }
[codex:1033435] 102
[codex:1033435] 103 /// @dev Checks if the caller is an admin
[codex:1033435] 104 modifier onlyAdmin() {
[codex:1033435] 105 _getManager().isAdmin(msg.sender);
[codex:1033435] 106 _;
[codex:1033435] 107 }
[codex:1033435] 108
[codex:1033435] 109 /// @dev Checks if the caller has the correct role
[codex:1033435] 110 modifier onlyRole(uint64 roleId) {
[codex:1033435] 111 _getManager().checkRole(roleId, msg.sender);
[codex:1033435] 112 _;
[codex:1033435] 113 }
[codex:1033435] 114
[codex:1033435] 115 /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Analyzing potential vulnerabilities in PerpManager and WasabiVault**
[codex:1033435] exec
[codex:1033435] /bin/bash -lc "nl -ba contracts/contracts/vaults/WasabiVault.sol | sed -n '214,250p'" in /tmp/codex-multi-_yfoll9b succeeded in 6ms:
[codex:1033435] 214 }
[codex:1033435] 215
[codex:1033435] 216 /// @inheritdoc IWasabiVault
[codex:1033435] 217 function strategyWithdraw(address _strategy, uint256 _withdrawAmount) external onlyAdmin {
[codex:1033435] 218 // Claim any interest earned on deposits first
[codex:1033435] 219 _strategyClaim(_strategy);
[codex:1033435] 220 // Check the withdraw amount - 0 is used to withdraw all deposits
[codex:1033435] 221 if (_withdrawAmount == 0) {
[codex:1033435] 222 _withdrawAmount = strategyDebt[_strategy];
[codex:1033435] 223 }
[codex:1033435] 224 if (_withdrawAmount > strategyDebt[_strategy]) {
[codex:1033435] 225 revert AmountExceedsDebt();
[codex:1033435] 226 }
[codex:1033435] 227 // Withdraw the assets from the strategy contract
[codex:1033435] 228 (address collateral, uint256 collateralSold) = IStrategy(_strategy).withdraw(_withdrawAmount);
[codex:1033435] 229 // Update the strategy debt
[codex:1033435] 230 strategyDebt[_strategy] -= _withdrawAmount;
[codex:1033435] 231 // Emit the event
[codex:1033435] 232 emit StrategyWithdraw(_strategy, collateral, _withdrawAmount, collateralSold);
[codex:1033435] 233 }
[codex:1033435]
[codex:1033435] thinking
[codex:1033435] **Preparing detailed audit findings**
[codex:1033435] codex
[codex:1033435] {"no_findings":false,"summary":"Identified 3 issues: AccessManager delay bypass for privileged actions, fee share over-minting on repayments, and missing loss reconciliation for strategy withdrawals.","findings":[{"severity":"medium","category":"access_control","title":"AccessManager execution delays are bypassed for PerpManager/Vault privileged actions","exploit_scenario":"If ADMIN_ROLE or VAULT_ADMIN_ROLE is configured with a non-zero execution delay for timelock protection, role holders can still call privileged methods (e.g., vault upgrades, parameter changes, strategy operations) directly because role checks only verify membership and ignore the configured delay. A compromised admin key can therefore act immediately, bypassing the intended delay window.","recommendation":"Use AccessManaged-style `restricted` checks (via `IAccessManager.canCall`) or enforce `executionDelay == 0` in `checkRole`/`isAdmin`. Alternatively require privileged actions to be executed through `AccessManager.execute` so scheduling and delays are honored.","evidence":"`checkRole` only checks `hasRole` and discards the execution delay return value; vault modifiers call `isAdmin`/`checkRole` directly, so delays are never enforced.","locations":["contracts/contracts/admin/PerpManager.sol:148","contracts/contracts/admin/PerpManager.sol:153","contracts/contracts/vaults/WasabiVault.sol:104","contracts/contracts/vaults/WasabiVault.sol:110"]},{"severity":"low","category":"math","title":"Interest fee shares are minted before interest is added, inflating fees","exploit_scenario":"When a pool repays with interest, `_handleInterestFee` is called before `totalAssetValue` is increased. Fee shares are thus minted at a cheaper pre-interest share price, giving the fee receiver more than the configured percentage of interest (diluting depositors). The discrepancy grows with larger interest relative to assets.","recommendation":"Add interest to `totalAssetValue` before computing fee shares, or compute fee shares using a dilution-aware formula based on post-interest assets (and make the order consistent with `_strategyClaim`).","evidence":"`recordRepayment` calls `_handleInterestFee` before incrementing `totalAssetValue`, while `_handleInterestFee` uses `_convertToShares` based on current `totalAssets`.","locations":["contracts/contracts/vaults/WasabiVault.sol:184","contracts/contracts/vaults/WasabiVault.sol:193","contracts/contracts/vaults/WasabiVault.sol:351"]},{"severity":"medium","category":"other","title":"Strategy withdrawals do not reconcile actual assets returned, overstating total assets","exploit_scenario":"If a strategy returns fewer assets than `_withdrawAmount` (loss, slippage, or malicious behavior), the vault still reduces `strategyDebt` by the full requested amount and leaves `totalAssetValue` unchanged. This overstates share value and can let early withdrawers drain available liquidity while later users face insolvency or reverts.","recommendation":"Track actual assets received (e.g., balance-before/after) and decrease `totalAssetValue` for any loss; require strategies to return the precise asset amount withdrawn and validate it before updating `strategyDebt`.","evidence":"`strategyWithdraw` reduces `strategyDebt` without checking the amount of assets returned or adjusting `totalAssetValue` for losses.","locations":["contracts/contracts/vaults/WasabiVault.sol:217","contracts/contracts/vaults/WasabiVault.sol:228","contracts/contracts/vaults/WasabiVault.sol:230"]}]}
[codex:1033435] tokens used
[codex:1033435] 104,390
[codex:1033435] {"no_findings":false,"summary":"Identified 3 issues: AccessManager delay bypass for privileged actions, fee share over-minting on repayments, and missing loss reconciliation for strategy withdrawals.","findings":[{"severity":"medium","category":"access_control","title":"AccessManager execution delays are bypassed for PerpManager/Vault privileged actions","exploit_scenario":"If ADMIN_ROLE or VAULT_ADMIN_ROLE is configured with a non-zero execution delay for timelock protection, role holders can still call privileged methods (e.g., vault upgrades, parameter changes, strategy operations) directly because role checks only verify membership and ignore the configured delay. A compromised admin key can therefore act immediately, bypassing the intended delay window.","recommendation":"Use AccessManaged-style `restricted` checks (via `IAccessManager.canCall`) or enforce `executionDelay == 0` in `checkRole`/`isAdmin`. Alternatively require privileged actions to be executed through `AccessManager.execute` so scheduling and delays are honored.","evidence":"`checkRole` only checks `hasRole` and discards the execution delay return value; vault modifiers call `isAdmin`/`checkRole` directly, so delays are never enforced.","locations":["contracts/contracts/admin/PerpManager.sol:148","contracts/contracts/admin/PerpManager.sol:153","contracts/contracts/vaults/WasabiVault.sol:104","contracts/contracts/vaults/WasabiVault.sol:110"]},{"severity":"low","category":"math","title":"Interest fee shares are minted before interest is added, inflating fees","exploit_scenario":"When a pool repays with interest, `_handleInterestFee` is called before `totalAssetValue` is increased. Fee shares are thus minted at a cheaper pre-interest share price, giving the fee receiver more than the configured percentage of interest (diluting depositors). The discrepancy grows with larger interest relative to assets.","recommendation":"Add interest to `totalAssetValue` before computing fee shares, or compute fee shares using a dilution-aware formula based on post-interest assets (and make the order consistent with `_strategyClaim`).","evidence":"`recordRepayment` calls `_handleInterestFee` before incrementing `totalAssetValue`, while `_handleInterestFee` uses `_convertToShares` based on current `totalAssets`.","locations":["contracts/contracts/vaults/WasabiVault.sol:184","contracts/contracts/vaults/WasabiVault.sol:193","contracts/contracts/vaults/WasabiVault.sol:351"]},{"severity":"medium","category":"other","title":"Strategy withdrawals do not reconcile actual assets returned, overstating total assets","exploit_scenario":"If a strategy returns fewer assets than `_withdrawAmount` (loss, slippage, or malicious behavior), the vault still reduces `strategyDebt` by the full requested amount and leaves `totalAssetValue` unchanged. This overstates share value and can let early withdrawers drain available liquidity while later users face insolvency or reverts.","recommendation":"Track actual assets received (e.g., balance-before/after) and decrease `totalAssetValue` for any loss; require strategies to return the precise asset amount withdrawn and validate it before updating `strategyDebt`.","evidence":"`strategyWithdraw` reduces `strategyDebt` without checking the amount of assets returned or adjusting `totalAssetValue` for losses.","locations":["contracts/contracts/vaults/WasabiVault.sol:217","contracts/contracts/vaults/WasabiVault.sol:228","contracts/contracts/vaults/WasabiVault.sol:230"]}]}
{
"codex": {
"ran_at": "2025-12-28T17:40:59.074185+00:00",
"returncode": 0
},
"summary": "Identified 3 issues: AccessManager delay bypass for privileged actions, fee share over-minting on repayments, and missing loss reconciliation for strategy withdrawals.",
"raw_final": {
"summary": "Identified 3 issues: AccessManager delay bypass for privileged actions, fee share over-minting on repayments, and missing loss reconciliation for strategy withdrawals.",
"findings": [
{
"title": "AccessManager execution delays are bypassed for PerpManager/Vault privileged actions",
"category": "access_control",
"evidence": "`checkRole` only checks `hasRole` and discards the execution delay return value; vault modifiers call `isAdmin`/`checkRole` directly, so delays are never enforced.",
"severity": "medium",
"locations": [
"contracts/contracts/admin/PerpManager.sol:148",
"contracts/contracts/admin/PerpManager.sol:153",
"contracts/contracts/vaults/WasabiVault.sol:104",
"contracts/contracts/vaults/WasabiVault.sol:110"
],
"recommendation": "Use AccessManaged-style `restricted` checks (via `IAccessManager.canCall`) or enforce `executionDelay == 0` in `checkRole`/`isAdmin`. Alternatively require privileged actions to be executed through `AccessManager.execute` so scheduling and delays are honored.",
"exploit_scenario": "If ADMIN_ROLE or VAULT_ADMIN_ROLE is configured with a non-zero execution delay for timelock protection, role holders can still call privileged methods (e.g., vault upgrades, parameter changes, strategy operations) directly because role checks only verify membership and ignore the configured delay. A compromised admin key can therefore act immediately, bypassing the intended delay window."
},
{
"title": "Interest fee shares are minted before interest is added, inflating fees",
"category": "math",
"evidence": "`recordRepayment` calls `_handleInterestFee` before incrementing `totalAssetValue`, while `_handleInterestFee` uses `_convertToShares` based on current `totalAssets`.",
"severity": "low",
"locations": [
"contracts/contracts/vaults/WasabiVault.sol:184",
"contracts/contracts/vaults/WasabiVault.sol:193",
"contracts/contracts/vaults/WasabiVault.sol:351"
],
"recommendation": "Add interest to `totalAssetValue` before computing fee shares, or compute fee shares using a dilution-aware formula based on post-interest assets (and make the order consistent with `_strategyClaim`).",
"exploit_scenario": "When a pool repays with interest, `_handleInterestFee` is called before `totalAssetValue` is increased. Fee shares are thus minted at a cheaper pre-interest share price, giving the fee receiver more than the configured percentage of interest (diluting depositors). The discrepancy grows with larger interest relative to assets."
},
{
"title": "Strategy withdrawals do not reconcile actual assets returned, overstating total assets",
"category": "other",
"evidence": "`strategyWithdraw` reduces `strategyDebt` without checking the amount of assets returned or adjusting `totalAssetValue` for losses.",
"severity": "medium",
"locations": [
"contracts/contracts/vaults/WasabiVault.sol:217",
"contracts/contracts/vaults/WasabiVault.sol:228",
"contracts/contracts/vaults/WasabiVault.sol:230"
],
"recommendation": "Track actual assets received (e.g., balance-before/after) and decrease `totalAssetValue` for any loss; require strategies to return the precise asset amount withdrawn and validate it before updating `strategyDebt`.",
"exploit_scenario": "If a strategy returns fewer assets than `_withdrawAmount` (loss, slippage, or malicious behavior), the vault still reduces `strategyDebt` by the full requested amount and leaves `totalAssetValue` unchanged. This overstates share value and can let early withdrawers drain available liquidity while later users face insolvency or reverts."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x02ff 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x8f90ae5a 00000019: GT 0000001a: PUSH2 0x0190 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xba087652 00000024: GT 00000025: PUSH2 0x00dc 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xd905777e 0000002f: GT 00000030: PUSH2 0x0095 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xef8b30f7 0000003a: GT 0000003b: PUSH2 0x006f 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xef8b30f7 00000045: EQ 00000046: PUSH2 0x0806 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf14faf6f 00000050: EQ 00000051: PUSH2 0x08c6 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xf2fde38b 0000005b: EQ 0000005c: PUSH2 0x08e6 0000005f: JUMPI 00000060: DUP1 00000061: PUSH4 0xf4b70990 00000066: EQ 00000067: PUSH2 0x0906 0000006a: JUMPI 0000006b: PUSH1 0x00 0000006d: DUP1 0000006e: REVERT 0000006f: JUMPDEST 00000070: DUP1 00000071: PUSH4 0xd905777e 00000076: EQ 00000077: PUSH2 0x0866 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0xdd62ed3e 00000081: EQ 00000082: PUSH2 0x0886 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0xe42d19dc 0000008c: EQ 0000008d: PUSH2 0x08a6 00000090: JUMPI 00000091: PUSH1 0x00 00000093: DUP1 00000094: REVERT 00000095: JUMPDEST 00000096: DUP1 00000097: PUSH4 0xba087652 0000009c: EQ 0000009d: PUSH2 0x07a4 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0xc5ebeaec 000000a7: EQ 000000a8: PUSH2 0x07c4 000000ab: JUMPI 000000ac: DUP1 000000ad: PUSH4 0xc63d75b6 000000b2: EQ 000000b3: PUSH2 0x07e4 000000b6: JUMPI 000000b7: DUP1 000000b8: PUSH4 0xc6e6f592 000000bd: EQ 000000be: PUSH2 0x0806 000000c1: JUMPI 000000c2: DUP1 000000c3: PUSH4 0xce96cb77 000000c8: EQ 000000c9: PUSH2 0x0826 000000cc: JUMPI 000000cd: DUP1 000000ce: PUSH4 0xd03d421c 000000d3: EQ 000000d4: PUSH2 0x0846 000000d7: JUMPI 000000d8: PUSH1 0x00 000000da: DUP1 000000db: REVERT 000000dc: JUMPDEST 000000dd: DUP1 000000de: PUSH4 0xa9059cbb 000000e3: GT 000000e4: PUSH2 0x0149 000000e7: JUMPI 000000e8: DUP1 000000e9: PUSH4 0xad9d4ba3 000000ee: GT 000000ef: PUSH2 0x0123 000000f2: JUMPI 000000f3: DUP1 000000f4: PUSH4 0xad9d4ba3 000000f9: EQ 000000fa: PUSH2 0x0731 000000fd: JUMPI 000000fe: DUP1 000000ff: PUSH4 0xb3d7f6b9 00000104: EQ 00000105: PUSH2 0x0744 00000108: JUMPI 00000109: DUP1 0000010a: PUSH4 0xb460af94 0000010f: EQ 00000110: PUSH2 0x0764 00000113: JUMPI 00000114: DUP1 00000115: PUSH4 0xb8fae763 0000011a: EQ 0000011b: PUSH2 0x0784 0000011e: JUMPI 0000011f: PUSH1 0x00 00000121: DUP1 00000122: REVERT 00000123: JUMPDEST 00000124: DUP1 00000125: PUSH4 0xa9059cbb 0000012a: EQ 0000012b: PUSH2 0x06c0 0000012e: JUMPI 0000012f: DUP1 00000130: PUSH4 0xa9e97500 00000135: EQ 00000136: PUSH2 0x06e0 00000139: JUMPI 0000013a: DUP1 0000013b: PUSH4 0xad3cb1cc 00000140: EQ 00000141: PUSH2 0x0700 00000144: JUMPI 00000145: PUSH1 0x00 00000147: DUP1 00000148: REVERT 00000149: JUMPDEST 0000014a: DUP1 0000014b: PUSH4 0x8f90ae5a 00000150: EQ 00000151: PUSH2 0x0615 00000154: JUMPI 00000155: DUP1 00000156: PUSH4 0x9317c200 0000015b: EQ 0000015c: PUSH2 0x062b 0000015f: JUMPI 00000160: DUP1 00000161: PUSH4 0x94bf804d 00000166: EQ 00000167: PUSH2 0x064b 0000016a: JUMPI 0000016b: DUP1 0000016c: PUSH4 0x95d89b41 00000171: EQ 00000172: PUSH2 0x066b 00000175: JUMPI 00000176: DUP1 00000177: PUSH4 0x9b845cdd 0000017c: EQ 0000017d: PUSH2 0x0680 00000180: JUMPI 00000181: DUP1 00000182: PUSH4 0x9c307ca2 00000187: EQ 00000188: PUSH2 0x06a0 0000018b: JUMPI 0000018c: PUSH1 0x00 0000018e: DUP1 0000018f: REVERT 00000190: JUMPDEST 00000191: DUP1 00000192: PUSH4 0x4cdad506 00000197: GT 00000198: PUSH2 0x024f 0000019b: JUMPI 0000019c: DUP1 0000019d: PUSH4 0x6e553f65 000001a2: GT 000001a3: PUSH2 0x0208 000001a6: JUMPI 000001a7: DUP1 000001a8: PUSH4 0x715018a6 000001ad: GT 000001ae: PUSH2 0x01e2 000001b1: JUMPI 000001b2: DUP1 000001b3: PUSH4 0x715018a6 000001b8: EQ 000001b9: PUSH2 0x059e 000001bc: JUMPI 000001bd: DUP1 000001be: PUSH4 0x80d57855 000001c3: EQ 000001c4: PUSH2 0x05b3 000001c7: JUMPI 000001c8: DUP1 000001c9: PUSH4 0x86651203 000001ce: EQ 000001cf: PUSH2 0x05e0 000001d2: JUMPI 000001d3: DUP1 000001d4: PUSH4 0x8da5cb5b 000001d9: EQ 000001da: PUSH2 0x0600 000001dd: JUMPI 000001de: PUSH1 0x00 000001e0: DUP1 000001e1: REVERT 000001e2: JUMPDEST 000001e3: DUP1 000001e4: PUSH4 0x6e553f65 000001e9: EQ 000001ea: PUSH2 0x053e 000001ed: JUMPI 000001ee: DUP1 000001ef: PUSH4 0x6f799ed8 000001f4: EQ 000001f5: PUSH2 0x055e 000001f8: JUMPI 000001f9: DUP1 000001fa: PUSH4 0x70a08231 000001ff: EQ 00000200: PUSH2 0x057e 00000203: JUMPI 00000204: PUSH1 0x00 00000206: DUP1 00000207: REVERT 00000208: JUMPDEST 00000209: DUP1 0000020a: PUSH4 0x4cdad506 0000020f: EQ 00000210: PUSH2 0x0363 00000213: JUMPI 00000214: DUP1 00000215: PUSH4 0x4d9b3509 0000021a: EQ 0000021b: PUSH2 0x04c1 0000021e: JUMPI 0000021f: DUP1 00000220: PUSH4 0x4f1ef286 00000225: EQ 00000226: PUSH2 0x04d6 00000229: JUMPI 0000022a: DUP1 0000022b: PUSH4 0x52d1902d 00000230: EQ 00000231: PUSH2 0x04e9 00000234: JUMPI 00000235: DUP1 00000236: PUSH4 0x5a294bc3 0000023b: EQ 0000023c: PUSH2 0x04fe 0000023f: JUMPI 00000240: DUP1 00000241: PUSH4 0x6d8638d4 00000246: EQ 00000247: PUSH2 0x051e 0000024a: JUMPI 0000024b: PUSH1 0x00 0000024d: DUP1 0000024e: REVERT 0000024f: JUMPDEST 00000250: DUP1 00000251: PUSH4 0x18160ddd 00000256: GT 00000257: PUSH2 0x02bc 0000025a: JUMPI 0000025b: DUP1 0000025c: PUSH4 0x313ce567 00000261: GT 00000262: PUSH2 0x0296 00000265: JUMPI 00000266: DUP1 00000267: PUSH4 0x313ce567 0000026c: EQ 0000026d: PUSH2 0x0437 00000270: JUMPI 00000271: DUP1 00000272: PUSH4 0x38d52e0f 00000277: EQ 00000278: PUSH2 0x045e 0000027b: JUMPI 0000027c: DUP1 0000027d: PUSH4 0x397f1133 00000282: EQ 00000283: PUSH2 0x048b 00000286: JUMPI 00000287: DUP1 00000288: PUSH4 0x402d267d 0000028d: EQ 0000028e: PUSH2 0x04a1 00000291: JUMPI 00000292: PUSH1 0x00 00000294: DUP1 00000295: REVERT 00000296: JUMPDEST 00000297: DUP1 00000298: PUSH4 0x18160ddd 0000029d: EQ 0000029e: PUSH2 0x03d3 000002a1: JUMPI 000002a2: DUP1 000002a3: PUSH4 0x23b872dd 000002a8: EQ 000002a9: PUSH2 0x03f5 000002ac: JUMPI 000002ad: DUP1 000002ae: PUSH4 0x2a67ed7b 000002b3: EQ 000002b4: PUSH2 0x0415 000002b7: JUMPI 000002b8: PUSH1 0x00 000002ba: DUP1 000002bb: REVERT 000002bc: JUMPDEST 000002bd: DUP1 000002be: PUSH4 0x01a598da 000002c3: EQ 000002c4: PUSH2 0x0304 000002c7: JUMPI 000002c8: DUP1 000002c9: PUSH4 0x01e1d114 000002ce: EQ 000002cf: PUSH2 0x032c 000002d2: JUMPI 000002d3: DUP1 000002d4: PUSH4 0x06fdde03 000002d9: EQ 000002da: PUSH2 0x0341 000002dd: JUMPI 000002de: DUP1 000002df: PUSH4 0x07a2d13a 000002e4: EQ 000002e5: PUSH2 0x0363 000002e8: JUMPI 000002e9: DUP1 000002ea: PUSH4 0x095ea7b3 000002ef: EQ 000002f0: PUSH2 0x0383 000002f3: JUMPI 000002f4: DUP1 000002f5: PUSH4 0x0a28a477 000002fa: EQ 000002fb: PUSH2 0x03b3 000002fe: JUMPI 000002ff: JUMPDEST 00000300: PUSH1 0x00 00000302: DUP1 00000303: REVERT 00000304: JUMPDEST 00000305: CALLVALUE 00000306: DUP1 00000307: ISZERO 00000308: PUSH2 0x0310 0000030b: JUMPI 0000030c: PUSH1 0x00 0000030e: DUP1 0000030f: REVERT 00000310: JUMPDEST 00000311: POP 00000312: PUSH2 0x0319 00000315: PUSH2 0x0926 00000318: JUMP 00000319: JUMPDEST 0000031a: PUSH1 0x40 0000031c: MLOAD 0000031d: SWAP1 0000031e: DUP2 0000031f: MSTORE 00000320: PUSH1 0x20 00000322: ADD 00000323: JUMPDEST 00000324: PUSH1 0x40 00000326: MLOAD 00000327: DUP1 00000328: SWAP2 00000329: SUB 0000032a: SWAP1 0000032b: RETURN 0000032c: JUMPDEST 0000032d: CALLVALUE 0000032e: DUP1 0000032f: ISZERO 00000330: PUSH2 0x0338 00000333: JUMPI 00000334: PUSH1 0x00 00000336: DUP1 00000337: REVERT 00000338: JUMPDEST 00000339: POP 0000033a: PUSH1 0x01 0000033c: SLOAD 0000033d: PUSH2 0x0319 00000340: JUMP 00000341: JUMPDEST 00000342: CALLVALUE 00000343: DUP1 00000344: ISZERO 00000345: PUSH2 0x034d 00000348: JUMPI 00000349: PUSH1 0x00 0000034b: DUP1 0000034c: REVERT 0000034d: JUMPDEST 0000034e: POP 0000034f: PUSH2 0x0356 00000352: PUSH2 0x0935 00000355: JUMP 00000356: JUMPDEST 00000357: PUSH1 0x40 00000359: MLOAD 0000035a: PUSH2 0x0323 0000035d: SWAP2 0000035e: SWAP1 0000035f: PUSH2 0x2d18 00000362: JUMP 00000363: JUMPDEST 00000364: CALLVALUE 00000365: DUP1 00000366: ISZERO 00000367: PUSH2 0x036f 0000036a: JUMPI 0000036b: PUSH1 0x00 0000036d: DUP1 0000036e: REVERT 0000036f: JUMPDEST 00000370: POP 00000371: PUSH2 0x0319 00000374: PUSH2 0x037e 00000377: CALLDATASIZE 00000378: PUSH1 0x04 0000037a: PUSH2 0x2d4b 0000037d: JUMP 0000037e: JUMPDEST 0000037f: PUSH2 0x09f8 00000382: JUMP 00000383: JUMPDEST 00000384: CALLVALUE 00000385: DUP1 00000386: ISZERO 00000387: PUSH2 0x038f 0000038a: JUMPI 0000038b: PUSH1 0x00 0000038d: DUP1 0000038e: REVERT 0000038f: JUMPDEST 00000390: POP 00000391: PUSH2 0x03a3 00000394: PUSH2 0x039e 00000397: CALLDATASIZE 00000398: PUSH1 0x04 0000039a: PUSH2 0x2d79 0000039d: JUMP 0000039e: JUMPDEST 0000039f: PUSH2 0x0a0b 000003a2: JUMP 000003a3: JUMPDEST 000003a4: PUSH1 0x40 000003a6: MLOAD 000003a7: SWAP1 000003a8: ISZERO 000003a9: ISZERO 000003aa: DUP2 000003ab: MSTORE 000003ac: PUSH1 0x20 000003ae: ADD 000003af: PUSH2 0x0323 000003b2: JUMP 000003b3: JUMPDEST 000003b4: CALLVALUE 000003b5: DUP1 000003b6: ISZERO 000003b7: PUSH2 0x03bf 000003ba: JUMPI 000003bb: PUSH1 0x00 000003bd: DUP1 000003be: REVERT 000003bf: JUMPDEST 000003c0: POP 000003c1: PUSH2 0x0319 000003c4: PUSH2 0x03ce 000003c7: CALLDATASIZE 000003c8: PUSH1 0x04 000003ca: PUSH2 0x2d4b 000003cd: JUMP 000003ce: JUMPDEST 000003cf: PUSH2 0x0a23 000003d2: JUMP 000003d3: JUMPDEST 000003d4: CALLVALUE 000003d5: DUP1 000003d6: ISZERO 000003d7: PUSH2 0x03df 000003da: JUMPI 000003db: PUSH1 0x00 000003dd: DUP1 000003de: REVERT 000003df: JUMPDEST 000003e0: POP 000003e1: PUSH1 0x00 000003e3: DUP1 000003e4: MLOAD 000003e5: PUSH1 0x20 000003e7: PUSH2 0x34c8 000003ea: DUP4 000003eb: CODECOPY 000003ec: DUP2 000003ed: MLOAD 000003ee: SWAP2 000003ef: MSTORE 000003f0: SLOAD 000003f1: PUSH2 0x0319 000003f4: JUMP 000003f5: JUMPDEST 000003f6: CALLVALUE 000003f7: DUP1 000003f8: ISZERO 000003f9: PUSH2 0x0401 000003fc: JUMPI 000003fd: PUSH1 0x00 000003ff: DUP1 00000400: REVERT 00000401: JUMPDEST 00000402: POP 00000403: PUSH2 0x03a3 00000406: PUSH2 0x0410 00000409: CALLDATASIZE 0000040a: PUSH1 0x04 0000040c: PUSH2 0x2da5 0000040f: JUMP 00000410: JUMPDEST 00000411: PUSH2 0x0a30 00000414: JUMP 00000415: JUMPDEST 00000416: CALLVALUE 00000417: DUP1 00000418: ISZERO 00000419: PUSH2 0x0421 0000041c: JUMPI 0000041d: PUSH1 0x00 0000041f: DUP1 00000420: REVERT 00000421: JUMPDEST 00000422: POP 00000423: PUSH2 0x0435 00000426: PUSH2 0x0430 00000429: CALLDATASIZE 0000042a: PUSH1 0x04 0000042c: PUSH2 0x2e96 0000042f: JUMP 00000430: JUMPDEST 00000431: PUSH2 0x0a56 00000434: JUMP 00000435: JUMPDEST 00000436: STOP 00000437: JUMPDEST 00000438: CALLVALUE 00000439: DUP1 0000043a: ISZERO 0000043b: PUSH2 0x0443 0000043e: JUMPI 0000043f: PUSH1 0x00 00000441: DUP1 00000442: REVERT 00000443: JUMPDEST 00000444: POP 00000445: PUSH2 0x044c 00000448: PUSH2 0x0ac6 0000044b: JUMP 0000044c: JUMPDEST 0000044d: PUSH1 0x40 0000044f: MLOAD 00000450: PUSH1 0xff 00000452: SWAP1 00000453: SWAP2 00000454: AND 00000455: DUP2 00000456: MSTORE 00000457: PUSH1 0x20 00000459: ADD 0000045a: PUSH2 0x0323 0000045d: JUMP 0000045e: JUMPDEST 0000045f: CALLVALUE 00000460: DUP1 00000461: ISZERO 00000462: PUSH2 0x046a 00000465: JUMPI 00000466: PUSH1 0x00 00000468: DUP1 00000469: REVERT 0000046a: JUMPDEST 0000046b: POP 0000046c: PUSH2 0x0473 0000046f: PUSH2 0x0b0a 00000472: JUMP 00000473: JUMPDEST 00000474: PUSH1 0x40 00000476: MLOAD 00000477: PUSH1 0x01 00000479: PUSH1 0x01 0000047b: PUSH1 0xa0 0000047d: SHL 0000047e: SUB 0000047f: SWAP1 00000480: SWAP2 00000481: AND 00000482: DUP2 00000483: MSTORE 00000484: PUSH1 0x20 00000486: ADD 00000487: PUSH2 0x0323 0000048a: JUMP 0000048b: JUMPDEST 0000048c: CALLVALUE 0000048d: DUP1 0000048e: ISZERO 0000048f: PUSH2 0x0497 00000492: JUMPI 00000493: PUSH1 0x00 00000495: DUP1 00000496: REVERT 00000497: JUMPDEST 00000498: POP 00000499: PUSH2 0x0319 0000049c: PUSH1 0x06 0000049e: SLOAD 0000049f: DUP2 000004a0: JUMP 000004a1: JUMPDEST 000004a2: CALLVALUE 000004a3: DUP1 000004a4: ISZERO 000004a5: PUSH2 0x04ad 000004a8: JUMPI 000004a9: PUSH1 0x00 000004ab: DUP1 000004ac: REVERT 000004ad: JUMPDEST 000004ae: POP 000004af: PUSH2 0x0319 000004b2: PUSH2 0x04bc 000004b5: CALLDATASIZE 000004b6: PUSH1 0x04 000004b8: PUSH2 0x2f48 000004bb: JUMP 000004bc: JUMPDEST 000004bd: PUSH2 0x0b3f 000004c0: JUMP 000004c1: JUMPDEST 000004c2: CALLVALUE 000004c3: DUP1 000004c4: ISZERO 000004c5: PUSH2 0x04cd 000004c8: JUMPI 000004c9: PUSH1 0x00 000004cb: DUP1 000004cc: REVERT 000004cd: JUMPDEST 000004ce: POP 000004cf: PUSH2 0x0435 000004d2: PUSH2 0x0b7e 000004d5: JUMP 000004d6: JUMPDEST 000004d7: PUSH2 0x0435 000004da: PUSH2 0x04e4 000004dd: CALLDATASIZE 000004de: PUSH1 0x04 000004e0: PUSH2 0x2f65 000004e3: JUMP 000004e4: JUMPDEST 000004e5: PUSH2 0x0c55 000004e8: JUMP 000004e9: JUMPDEST 000004ea: CALLVALUE 000004eb: DUP1 000004ec: ISZERO 000004ed: PUSH2 0x04f5 000004f0: JUMPI 000004f1: PUSH1 0x00 000004f3: DUP1 000004f4: REVERT 000004f5: JUMPDEST 000004f6: POP 000004f7: PUSH2 0x0319 000004fa: PUSH2 0x0c70 000004fd: JUMP 000004fe: JUMPDEST 000004ff: CALLVALUE 00000500: DUP1 00000501: ISZERO 00000502: PUSH2 0x050a 00000505: JUMPI 00000506: PUSH1 0x00 00000508: DUP1 00000509: REVERT 0000050a: JUMPDEST 0000050b: POP 0000050c: PUSH2 0x0435 0000050f: PUSH2 0x0519 00000512: CALLDATASIZE 00000513: PUSH1 0x04 00000515: PUSH2 0x2d79 00000518: JUMP 00000519: JUMPDEST 0000051a: PUSH2 0x0c8d 0000051d: JUMP 0000051e: JUMPDEST 0000051f: CALLVALUE 00000520: DUP1 00000521: ISZERO 00000522: PUSH2 0x052a 00000525: JUMPI 00000526: PUSH1 0x00 00000528: DUP1 00000529: REVERT 0000052a: JUMPDEST 0000052b: POP 0000052c: PUSH2 0x0435 0000052f: PUSH2 0x0539 00000532: CALLDATASIZE 00000533: PUSH1 0x04 00000535: PUSH2 0x2d4b 00000538: JUMP 00000539: JUMPDEST 0000053a: PUSH2 0x0e4d 0000053d: JUMP 0000053e: JUMPDEST 0000053f: CALLVALUE 00000540: DUP1 00000541: ISZERO 00000542: PUSH2 0x054a 00000545: JUMPI 00000546: PUSH1 0x00 00000548: DUP1 00000549: REVERT 0000054a: JUMPDEST 0000054b: POP 0000054c: PUSH2 0x0319 0000054f: PUSH2 0x0559 00000552: CALLDATASIZE 00000553: PUSH1 0x04 00000555: PUSH2 0x2fc9 00000558: JUMP 00000559: JUMPDEST 0000055a: PUSH2 0x0f14 0000055d: JUMP 0000055e: JUMPDEST 0000055f: CALLVALUE 00000560: DUP1 00000561: ISZERO 00000562: PUSH2 0x056a 00000565: JUMPI 00000566: PUSH1 0x00 00000568: DUP1 00000569: REVERT 0000056a: JUMPDEST 0000056b: POP 0000056c: PUSH2 0x0435 0000056f: PUSH2 0x0579 00000572: CALLDATASIZE 00000573: PUSH1 0x04 00000575: PUSH2 0x2d79 00000578: JUMP 00000579: JUMPDEST 0000057a: PUSH2 0x0f73 0000057d: JUMP 0000057e: JUMPDEST 0000057f: CALLVALUE 00000580: DUP1 00000581: ISZERO 00000582: PUSH2 0x058a 00000585: JUMPI 00000586: PUSH1 0x00 00000588: DUP1 00000589: REVERT 0000058a: JUMPDEST 0000058b: POP 0000058c: PUSH2 0x0319 0000058f: PUSH2 0x0599 00000592: CALLDATASIZE 00000593: PUSH1 0x04 00000595: PUSH2 0x2f48 00000598: JUMP 00000599: JUMPDEST 0000059a: PUSH2 0x10d7 0000059d: JUMP 0000059e: JUMPDEST 0000059f: CALLVALUE 000005a0: DUP1 000005a1: ISZERO 000005a2: PUSH2 0x05aa 000005a5: JUMPI 000005a6: PUSH1 0x00 000005a8: DUP1 000005a9: REVERT 000005aa: JUMPDEST 000005ab: POP 000005ac: PUSH2 0x0435 000005af: PUSH2 0x10ff 000005b2: JUMP 000005b3: JUMPDEST 000005b4: CALLVALUE 000005b5: DUP1 000005b6: ISZERO 000005b7: PUSH2 0x05bf 000005ba: JUMPI 000005bb: PUSH1 0x00 000005bd: DUP1 000005be: REVERT 000005bf: JUMPDEST 000005c0: POP 000005c1: PUSH2 0x0319 000005c4: PUSH2 0x05ce 000005c7: CALLDATASIZE 000005c8: PUSH1 0x04 000005ca: PUSH2 0x2f48 000005cd: JUMP 000005ce: JUMPDEST 000005cf: PUSH1 0x05 000005d1: PUSH1 0x20 000005d3: MSTORE 000005d4: PUSH1 0x00 000005d6: SWAP1 000005d7: DUP2 000005d8: MSTORE 000005d9: PUSH1 0x40 000005db: SWAP1 000005dc: KECCAK256 000005dd: SLOAD 000005de: DUP2 000005df: JUMP 000005e0: JUMPDEST 000005e1: CALLVALUE 000005e2: DUP1 000005e3: ISZERO 000005e4: PUSH2 0x05ec 000005e7: JUMPI 000005e8: PUSH1 0x00 000005ea: DUP1 000005eb: REVERT 000005ec: JUMPDEST 000005ed: POP 000005ee: PUSH2 0x0435 000005f1: PUSH2 0x05fb 000005f4: CALLDATASIZE 000005f5: PUSH1 0x04 000005f7: PUSH2 0x2d4b 000005fa: JUMP 000005fb: JUMPDEST 000005fc: PUSH2 0x1113 000005ff: JUMP 00000600: JUMPDEST 00000601: CALLVALUE 00000602: DUP1 00000603: ISZERO 00000604: PUSH2 0x060c 00000607: JUMPI 00000608: PUSH1 0x00 0000060a: DUP1 0000060b: REVERT 0000060c: JUMPDEST 0000060d: POP 0000060e: PUSH2 0x0473 00000611: PUSH2 0x11d6 00000614: JUMP 00000615: JUMPDEST 00000616: CALLVALUE 00000617: DUP1 00000618: ISZERO 00000619: PUSH2 0x0621 0000061c: JUMPI 0000061d: PUSH1 0x00 0000061f: DUP1 00000620: REVERT 00000621: JUMPDEST 00000622: POP 00000623: PUSH2 0x0319 00000626: PUSH1 0x01 00000628: SLOAD 00000629: DUP2 0000062a: JUMP 0000062b: JUMPDEST 0000062c: CALLVALUE 0000062d: DUP1 0000062e: ISZERO 0000062f: PUSH2 0x0637 00000632: JUMPI 00000633: PUSH1 0x00 00000635: DUP1 00000636: REVERT 00000637: JUMPDEST 00000638: POP 00000639: PUSH2 0x0435 0000063c: PUSH2 0x0646 0000063f: CALLDATASIZE 00000640: PUSH1 0x04 00000642: PUSH2 0x2e96 00000645: JUMP 00000646: JUMPDEST 00000647: PUSH2 0x11ff 0000064a: JUMP 0000064b: JUMPDEST 0000064c: CALLVALUE 0000064d: DUP1 0000064e: ISZERO 0000064f: PUSH2 0x0657 00000652: JUMPI 00000653: PUSH1 0x00 00000655: DUP1 00000656: REVERT 00000657: JUMPDEST 00000658: POP 00000659: PUSH2 0x0319 0000065c: PUSH2 0x0666 0000065f: CALLDATASIZE 00000660: PUSH1 0x04 00000662: PUSH2 0x2fc9 00000665: JUMP 00000666: JUMPDEST 00000667: PUSH2 0x1319 0000066a: JUMP 0000066b: JUMPDEST 0000066c: CALLVALUE 0000066d: DUP1 0000066e: ISZERO 0000066f: PUSH2 0x0677 00000672: JUMPI 00000673: PUSH1 0x00 00000675: DUP1 00000676: REVERT 00000677: JUMPDEST 00000678: POP 00000679: PUSH2 0x0356 0000067c: PUSH2 0x1337 0000067f: JUMP 00000680: JUMPDEST 00000681: CALLVALUE 00000682: DUP1 00000683: ISZERO 00000684: PUSH2 0x068c 00000687: JUMPI 00000688: PUSH1 0x00 0000068a: DUP1 0000068b: REVERT 0000068c: JUMPDEST 0000068d: POP 0000068e: PUSH2 0x0473 00000691: PUSH2 0x069b 00000694: CALLDATASIZE 00000695: PUSH1 0x04 00000697: PUSH2 0x3007 0000069a: JUMP 0000069b: JUMPDEST 0000069c: PUSH2 0x1376 0000069f: JUMP 000006a0: JUMPDEST 000006a1: CALLVALUE 000006a2: DUP1 000006a3: ISZERO 000006a4: PUSH2 0x06ac 000006a7: JUMPI 000006a8: PUSH1 0x00 000006aa: DUP1 000006ab: REVERT 000006ac: JUMPDEST 000006ad: POP 000006ae: PUSH1 0x03 000006b0: SLOAD 000006b1: PUSH2 0x0473 000006b4: SWAP1 000006b5: PUSH1 0x01 000006b7: PUSH1 0x01 000006b9: PUSH1 0xa0 000006bb: SHL 000006bc: SUB 000006bd: AND 000006be: DUP2 000006bf: JUMP 000006c0: JUMPDEST 000006c1: CALLVALUE 000006c2: DUP1 000006c3: ISZERO 000006c4: PUSH2 0x06cc 000006c7: JUMPI 000006c8: PUSH1 0x00 000006ca: DUP1 000006cb: REVERT 000006cc: JUMPDEST 000006cd: POP 000006ce: PUSH2 0x03a3 000006d1: PUSH2 0x06db 000006d4: CALLDATASIZE 000006d5: PUSH1 0x04 000006d7: PUSH2 0x2d79 000006da: JUMP 000006db: JUMPDEST 000006dc: PUSH2 0x139f 000006df: JUMP 000006e0: JUMPDEST 000006e1: CALLVALUE 000006e2: DUP1 000006e3: ISZERO 000006e4: PUSH2 0x06ec 000006e7: JUMPI 000006e8: PUSH1 0x00 000006ea: DUP1 000006eb: REVERT 000006ec: JUMPDEST 000006ed: POP 000006ee: PUSH2 0x0435 000006f1: PUSH2 0x06fb 000006f4: CALLDATASIZE 000006f5: PUSH1 0x04 000006f7: PUSH2 0x2f48 000006fa: JUMP 000006fb: JUMPDEST 000006fc: PUSH2 0x13ad 000006ff: JUMP 00000700: JUMPDEST 00000701: CALLVALUE 00000702: DUP1 00000703: ISZERO 00000704: PUSH2 0x070c 00000707: JUMPI 00000708: PUSH1 0x00 0000070a: DUP1 0000070b: REVERT 0000070c: JUMPDEST 0000070d: POP 0000070e: PUSH2 0x0356 00000711: PUSH1 0x40 00000713: MLOAD 00000714: DUP1 00000715: PUSH1 0x40 00000717: ADD 00000718: PUSH1 0x40 0000071a: MSTORE 0000071b: DUP1 0000071c: PUSH1 0x05 0000071e: DUP2 0000071f: MSTORE 00000720: PUSH1 0x20 00000722: ADD 00000723: PUSH5 0x0352e302e3 00000729: PUSH1 0xdc 0000072b: SHL 0000072c: DUP2 0000072d: MSTORE 0000072e: POP 0000072f: DUP2 00000730: JUMP 00000731: JUMPDEST 00000732: PUSH2 0x0319 00000735: PUSH2 0x073f 00000738: CALLDATASIZE 00000739: PUSH1 0x04 0000073b: PUSH2 0x2f48 0000073e: JUMP 0000073f: JUMPDEST 00000740: PUSH2 0x1417 00000743: JUMP 00000744: JUMPDEST 00000745: CALLVALUE 00000746: DUP1 00000747: ISZERO 00000748: PUSH2 0x0750 0000074b: JUMPI 0000074c: PUSH1 0x00 0000074e: DUP1 0000074f: REVERT 00000750: JUMPDEST 00000751: POP 00000752: PUSH2 0x0319 00000755: PUSH2 0x075f 00000758: CALLDATASIZE 00000759: PUSH1 0x04 0000075b: PUSH2 0x2d4b 0000075e: JUMP 0000075f: JUMPDEST 00000760: PUSH2 0x15a6 00000763: JUMP 00000764: JUMPDEST 00000765: CALLVALUE 00000766: DUP1 00000767: ISZERO 00000768: PUSH2 0x0770 0000076b: JUMPI 0000076c: PUSH1 0x00 0000076e: DUP1 0000076f: REVERT 00000770: JUMPDEST 00000771: POP 00000772: PUSH2 0x0319 00000775: PUSH2 0x077f 00000778: CALLDATASIZE 00000779: PUSH1 0x04 0000077b: PUSH2 0x3024 0000077e: JUMP 0000077f: JUMPDEST 00000780: PUSH2 0x15b3 00000783: JUMP 00000784: JUMPDEST 00000785: CALLVALUE 00000786: DUP1 00000787: ISZERO 00000788: PUSH2 0x0790 0000078b: JUMPI 0000078c: PUSH1 0x00 0000078e: DUP1 0000078f: REVERT 00000790: JUMPDEST 00000791: POP 00000792: PUSH1 0x04 00000794: SLOAD 00000795: PUSH2 0x0473 00000798: SWAP1 00000799: PUSH1 0x01 0000079b: PUSH1 0x01 0000079d: PUSH1 0xa0 0000079f: SHL 000007a0: SUB 000007a1: AND 000007a2: DUP2 000007a3: JUMP 000007a4: JUMPDEST 000007a5: CALLVALUE 000007a6: DUP1 000007a7: ISZERO 000007a8: PUSH2 0x07b0 000007ab: JUMPI 000007ac: PUSH1 0x00 000007ae: DUP1 000007af: REVERT 000007b0: JUMPDEST 000007b1: POP 000007b2: PUSH2 0x0319 000007b5: PUSH2 0x07bf 000007b8: CALLDATASIZE 000007b9: PUSH1 0x04 000007bb: PUSH2 0x3024 000007be: JUMP 000007bf: JUMPDEST 000007c0: PUSH2 0x160b 000007c3: JUMP 000007c4: JUMPDEST 000007c5: CALLVALUE 000007c6: DUP1 000007c7: ISZERO 000007c8: PUSH2 0x07d0 000007cb: JUMPI 000007cc: PUSH1 0x00 000007ce: DUP1 000007cf: REVERT 000007d0: JUMPDEST 000007d1: POP 000007d2: PUSH2 0x0435 000007d5: PUSH2 0x07df 000007d8: CALLDATASIZE 000007d9: PUSH1 0x04 000007db: PUSH2 0x2d4b 000007de: JUMP 000007df: JUMPDEST 000007e0: PUSH2 0x165a 000007e3: JUMP 000007e4: JUMPDEST 000007e5: CALLVALUE 000007e6: DUP1 000007e7: ISZERO 000007e8: PUSH2 0x07f0 000007eb: JUMPI 000007ec: PUSH1 0x00 000007ee: DUP1 000007ef: REVERT 000007f0: JUMPDEST 000007f1: POP 000007f2: PUSH2 0x0319 000007f5: PUSH2 0x07ff 000007f8: CALLDATASIZE 000007f9: PUSH1 0x04 000007fb: PUSH2 0x2f48 000007fe: JUMP 000007ff: JUMPDEST 00000800: POP 00000801: PUSH1 0x00 00000803: NOT 00000804: SWAP1 00000805: JUMP 00000806: JUMPDEST 00000807: CALLVALUE 00000808: DUP1 00000809: ISZERO 0000080a: PUSH2 0x0812 0000080d: JUMPI 0000080e: PUSH1 0x00 00000810: DUP1 00000811: REVERT 00000812: JUMPDEST 00000813: POP 00000814: PUSH2 0x0319 00000817: PUSH2 0x0821 0000081a: CALLDATASIZE 0000081b: PUSH1 0x04 0000081d: PUSH2 0x2d4b 00000820: JUMP 00000821: JUMPDEST 00000822: PUSH2 0x16a1 00000825: JUMP 00000826: JUMPDEST 00000827: CALLVALUE 00000828: DUP1 00000829: ISZERO 0000082a: PUSH2 0x0832 0000082d: JUMPI 0000082e: PUSH1 0x00 00000830: DUP1 00000831: REVERT 00000832: JUMPDEST 00000833: POP 00000834: PUSH2 0x0319 00000837: PUSH2 0x0841 0000083a: CALLDATASIZE 0000083b: PUSH1 0x04 0000083d: PUSH2 0x2f48 00000840: JUMP 00000841: JUMPDEST 00000842: PUSH2 0x16ae 00000845: JUMP 00000846: JUMPDEST 00000847: CALLVALUE 00000848: DUP1 00000849: ISZERO 0000084a: PUSH2 0x0852 0000084d: JUMPI 0000084e: PUSH1 0x00 00000850: DUP1 00000851: REVERT 00000852: JUMPDEST 00000853: POP 00000854: PUSH2 0x0435 00000857: PUSH2 0x0861 0000085a: CALLDATASIZE 0000085b: PUSH1 0x04 0000085d: PUSH2 0x3066 00000860: JUMP 00000861: JUMPDEST 00000862: PUSH2 0x16c3 00000865: JUMP 00000866: JUMPDEST 00000867: CALLVALUE 00000868: DUP1 00000869: ISZERO 0000086a: PUSH2 0x0872 0000086d: JUMPI 0000086e: PUSH1 0x00 00000870: DUP1 00000871: REVERT 00000872: JUMPDEST 00000873: POP 00000874: PUSH2 0x0319 00000877: PUSH2 0x0881 0000087a: CALLDATASIZE 0000087b: PUSH1 0x04 0000087d: PUSH2 0x2f48 00000880: JUMP 00000881: JUMPDEST 00000882: PUSH2 0x1787 00000885: JUMP 00000886: JUMPDEST 00000887: CALLVALUE 00000888: DUP1 00000889: ISZERO 0000088a: PUSH2 0x0892 0000088d: JUMPI 0000088e: PUSH1 0x00 00000890: DUP1 00000891: REVERT 00000892: JUMPDEST 00000893: POP 00000894: PUSH2 0x0319 00000897: PUSH2 0x08a1 0000089a: CALLDATASIZE 0000089b: PUSH1 0x04 0000089d: PUSH2 0x3094 000008a0: JUMP 000008a1: JUMPDEST 000008a2: PUSH2 0x1792 000008a5: JUMP 000008a6: JUMPDEST 000008a7: CALLVALUE 000008a8: DUP1 000008a9: ISZERO 000008aa: PUSH2 0x08b2 000008ad: JUMPI 000008ae: PUSH1 0x00 000008b0: DUP1 000008b1: REVERT 000008b2: JUMPDEST 000008b3: POP 000008b4: PUSH1 0x00 000008b6: SLOAD 000008b7: PUSH2 0x0473 000008ba: SWAP1 000008bb: PUSH1 0x01 000008bd: PUSH1 0x01 000008bf: PUSH1 0xa0 000008c1: SHL 000008c2: SUB 000008c3: AND 000008c4: DUP2 000008c5: JUMP 000008c6: JUMPDEST 000008c7: CALLVALUE 000008c8: DUP1 000008c9: ISZERO 000008ca: PUSH2 0x08d2 000008cd: JUMPI 000008ce: PUSH1 0x00 000008d0: DUP1 000008d1: REVERT 000008d2: JUMPDEST 000008d3: POP 000008d4: PUSH2 0x0435 000008d7: PUSH2 0x08e1 000008da: CALLDATASIZE 000008db: PUSH1 0x04 000008dd: PUSH2 0x2d4b 000008e0: JUMP 000008e1: JUMPDEST 000008e2: PUSH2 0x17dc 000008e5: JUMP 000008e6: JUMPDEST 000008e7: CALLVALUE 000008e8: DUP1 000008e9: ISZERO 000008ea: PUSH2 0x08f2 000008ed: JUMPI 000008ee: PUSH1 0x00 000008f0: DUP1 000008f1: REVERT 000008f2: JUMPDEST 000008f3: POP 000008f4: PUSH2 0x0435 000008f7: PUSH2 0x0901 000008fa: CALLDATASIZE 000008fb: PUSH1 0x04 000008fd: PUSH2 0x2f48 00000900: JUMP 00000901: JUMPDEST 00000902: PUSH2 0x18e2 00000905: JUMP 00000906: JUMPDEST 00000907: CALLVALUE 00000908: DUP1 00000909: ISZERO 0000090a: PUSH2 0x0912 0000090d: JUMPI 0000090e: PUSH1 0x00 00000910: DUP1 00000911: REVERT 00000912: JUMPDEST 00000913: POP 00000914: PUSH1 0x02 00000916: SLOAD 00000917: PUSH2 0x0473 0000091a: SWAP1 0000091b: PUSH1 0x01 0000091d: PUSH1 0x01 0000091f: PUSH1 0xa0 00000921: SHL 00000922: SUB 00000923: AND 00000924: DUP2 00000925: JUMP 00000926: JUMPDEST 00000927: PUSH1 0x00 00000929: PUSH2 0x0930 0000092c: PUSH2 0x191d 0000092f: JUMP 00000930: JUMPDEST 00000931: SWAP1 00000932: POP 00000933: SWAP1 00000934: JUMP 00000935: JUMPDEST 00000936: PUSH32 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03 00000957: DUP1 00000958: SLOAD 00000959: PUSH1 0x60 0000095b: SWAP2 0000095c: PUSH1 0x00 0000095e: DUP1 0000095f: MLOAD 00000960: PUSH1 0x20 00000962: PUSH2 0x34a8 00000965: DUP4 00000966: CODECOPY 00000967: DUP2 00000968: MLOAD 00000969: SWAP2 0000096a: MSTORE 0000096b: SWAP2 0000096c: PUSH2 0x0974 0000096f: SWAP1 00000970: PUSH2 0x30c2 00000973: JUMP 00000974: JUMPDEST 00000975: DUP1 00000976: PUSH1 0x1f 00000978: ADD 00000979: PUSH1 0x20 0000097b: DUP1 0000097c: SWAP2 0000097d: DIV 0000097e: MUL 0000097f: PUSH1 0x20 00000981: ADD 00000982: PUSH1 0x40 00000984: MLOAD 00000985: SWAP1 00000986: DUP2 00000987: ADD 00000988: PUSH1 0x40 0000098a: MSTORE 0000098b: DUP1 0000098c: SWAP3 0000098d: SWAP2 0000098e: SWAP1 0000098f: DUP2 00000990: DUP2 00000991: MSTORE 00000992: PUSH1 0x20 00000994: ADD 00000995: DUP3 00000996: DUP1 00000997: SLOAD 00000998: PUSH2 0x09a0 0000099b: SWAP1 0000099c: PUSH2 0x30c2 0000099f: JUMP 000009a0: JUMPDEST 000009a1: DUP1 000009a2: ISZERO 000009a3: PUSH2 0x09ed 000009a6: JUMPI 000009a7: DUP1 000009a8: PUSH1 0x1f 000009aa: LT 000009ab: PUSH2 0x09c2 000009ae: JUMPI 000009af: PUSH2 0x0100 000009b2: DUP1 000009b3: DUP4 000009b4: SLOAD 000009b5: DIV 000009b6: MUL 000009b7: DUP4 000009b8: MSTORE 000009b9: SWAP2 000009ba: PUSH1 0x20 000009bc: ADD 000009bd: SWAP2 000009be: PUSH2 0x09ed 000009c1: JUMP 000009c2: JUMPDEST 000009c3: DUP3 000009c4: ADD 000009c5: SWAP2 000009c6: SWAP1 000009c7: PUSH1 0x00 000009c9: MSTORE 000009ca: PUSH1 0x20 000009cc: PUSH1 0x00 000009ce: KECCAK256 000009cf: SWAP1 000009d0: JUMPDEST 000009d1: DUP2 000009d2: SLOAD 000009d3: DUP2 000009d4: MSTORE 000009d5: SWAP1 000009d6: PUSH1 0x01 000009d8: ADD 000009d9: SWAP1 000009da: PUSH1 0x20 000009dc: ADD 000009dd: DUP1 000009de: DUP4 000009df: GT 000009e0: PUSH2 0x09d0 000009e3: JUMPI 000009e4: DUP3 000009e5: SWAP1 000009e6: SUB 000009e7: PUSH1 0x1f 000009e9: AND 000009ea: DUP3 000009eb: ADD 000009ec: SWAP2 000009ed: JUMPDEST 000009ee: POP 000009ef: POP 000009f0: POP 000009f1: POP 000009f2: POP 000009f3: SWAP2 000009f4: POP 000009f5: POP 000009f6: SWAP1 000009f7: JUMP 000009f8: JUMPDEST 000009f9: PUSH1 0x00 000009fb: PUSH2 0x0a05 000009fe: DUP3 000009ff: PUSH1 0x00 00000a01: PUSH2 0x1957 00000a04: JUMP 00000a05: JUMPDEST 00000a06: SWAP3 00000a07: SWAP2 00000a08: POP 00000a09: POP 00000a0a: JUMP 00000a0b: JUMPDEST 00000a0c: PUSH1 0x00 00000a0e: CALLER 00000a0f: PUSH2 0x0a19 00000a12: DUP2 00000a13: DUP6 00000a14: DUP6 00000a15: PUSH2 0x199f 00000a18: JUMP 00000a19: JUMPDEST 00000a1a: POP 00000a1b: PUSH1 0x01 00000a1d: SWAP4 00000a1e: SWAP3 00000a1f: POP 00000a20: POP 00000a21: POP 00000a22: JUMP 00000a23: JUMPDEST 00000a24: PUSH1 0x00 00000a26: PUSH2 0x0a05 00000a29: DUP3 00000a2a: PUSH1 0x01 00000a2c: PUSH2 0x19ac 00000a2f: JUMP 00000a30: JUMPDEST 00000a31: PUSH1 0x00 00000a33: CALLER 00000a34: PUSH2 0x0a3e 00000a37: DUP6 00000a38: DUP3 00000a39: DUP6 00000a3a: PUSH2 0x19e4 00000a3d: JUMP 00000a3e: JUMPDEST 00000a3f: PUSH2 0x0a49 00000a42: DUP6 00000a43: DUP6 00000a44: DUP6 00000a45: PUSH2 0x1a37 00000a48: JUMP 00000a49: JUMPDEST 00000a4a: PUSH1 0x01 00000a4c: SWAP2 00000a4d: POP 00000a4e: POP 00000a4f: JUMPDEST 00000a50: SWAP4 00000a51: SWAP3 00000a52: POP 00000a53: POP 00000a54: POP 00000a55: JUMP 00000a56: JUMPDEST 00000a57: PUSH2 0x0a5e 00000a5a: PUSH2 0x1a96 00000a5d: JUMP 00000a5e: JUMPDEST 00000a5f: PUSH2 0x0a68 00000a62: DUP3 00000a63: DUP3 00000a64: PUSH2 0x1adf 00000a67: JUMP 00000a68: JUMPDEST 00000a69: PUSH2 0x0a71 00000a6c: DUP5 00000a6d: PUSH2 0x1af1 00000a70: JUMP 00000a71: JUMPDEST 00000a72: PUSH2 0x0a7a 00000a75: DUP4 00000a76: PUSH2 0x1b02 00000a79: JUMP 00000a7a: JUMPDEST 00000a7b: PUSH2 0x0a82 00000a7e: PUSH2 0x1b13 00000a81: JUMP 00000a82: JUMPDEST 00000a83: PUSH2 0x0a8a 00000a86: PUSH2 0x1b23 00000a89: JUMP 00000a8a: JUMPDEST 00000a8b: POP 00000a8c: POP 00000a8d: PUSH1 0x03 00000a8f: DUP1 00000a90: SLOAD 00000a91: PUSH1 0x01 00000a93: PUSH1 0x01 00000a95: PUSH1 0xa0 00000a97: SHL 00000a98: SUB 00000a99: SWAP6 00000a9a: DUP7 00000a9b: AND 00000a9c: PUSH1 0x01 00000a9e: PUSH1 0x01 00000aa0: PUSH1 0xa0 00000aa2: SHL 00000aa3: SUB 00000aa4: NOT 00000aa5: SWAP2 00000aa6: DUP3 00000aa7: AND 00000aa8: OR 00000aa9: SWAP1 00000aaa: SWAP2 00000aab: SSTORE 00000aac: PUSH1 0x04 00000aae: DUP1 00000aaf: SLOAD 00000ab0: SWAP5 00000ab1: SWAP1 00000ab2: SWAP6 00000ab3: AND 00000ab4: SWAP4 00000ab5: AND 00000ab6: SWAP3 00000ab7: SWAP1 00000ab8: SWAP3 00000ab9: OR 00000aba: SWAP1 00000abb: SWAP3 00000abc: SSTORE 00000abd: POP 00000abe: POP 00000abf: PUSH2 0x03e8 00000ac2: PUSH1 0x06 00000ac4: SSTORE 00000ac5: JUMP 00000ac6: JUMPDEST 00000ac7: PUSH1 0x00 00000ac9: DUP1 00000aca: PUSH32 0x0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00 00000aeb: SWAP1 00000aec: POP 00000aed: PUSH1 0x00 00000aef: DUP2 00000af0: SLOAD 00000af1: PUSH2 0x0b04 00000af4: SWAP2 00000af5: SWAP1 00000af6: PUSH1 0x01 00000af8: PUSH1 0xa0 00000afa: SHL 00000afb: SWAP1 00000afc: DIV 00000afd: PUSH1 0xff 00000aff: AND 00000b00: PUSH2 0x3112 00000b03: JUMP 00000b04: JUMPDEST 00000b05: SWAP2 00000b06: POP 00000b07: POP 00000b08: SWAP1 00000b09: JUMP 00000b0a: JUMPDEST 00000b0b: PUSH1 0x00 00000b0d: DUP1 00000b0e: PUSH32 0x0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00 00000b2f: JUMPDEST 00000b30: SLOAD 00000b31: PUSH1 0x01 00000b33: PUSH1 0x01 00000b35: PUSH1 0xa0 00000b37: SHL 00000b38: SUB 00000b39: AND 00000b3a: SWAP3 00000b3b: SWAP2 00000b3c: POP 00000b3d: POP 00000b3e: JUMP 00000b3f: JUMPDEST 00000b40: PUSH1 0x00 00000b42: DUP1 00000b43: PUSH2 0x0b4a 00000b46: PUSH2 0x191d 00000b49: JUMP 00000b4a: JUMPDEST 00000b4b: SWAP1 00000b4c: POP 00000b4d: PUSH1 0x00 00000b4f: NOT 00000b50: DUP2 00000b51: SUB 00000b52: PUSH2 0x0b5f 00000b55: JUMPI 00000b56: POP 00000b57: PUSH1 0x00 00000b59: NOT 00000b5a: SWAP3 00000b5b: SWAP2 00000b5c: POP 00000b5d: POP 00000b5e: JUMP 00000b5f: JUMPDEST 00000b60: DUP1 00000b61: PUSH1 0x01 00000b63: SLOAD 00000b64: LT 00000b65: PUSH2 0x0b71 00000b68: JUMPI 00000b69: POP 00000b6a: PUSH1 0x00 00000b6c: SWAP3 00000b6d: SWAP2 00000b6e: POP 00000b6f: POP 00000b70: JUMP 00000b71: JUMPDEST 00000b72: PUSH1 0x01 00000b74: SLOAD 00000b75: PUSH2 0x0a4f 00000b78: SWAP1 00000b79: DUP3 00000b7a: PUSH2 0x312b 00000b7d: JUMP 00000b7e: JUMPDEST 00000b7f: PUSH1 0x67 00000b81: PUSH2 0x0b88 00000b84: PUSH2 0x1b2b 00000b87: JUMP 00000b88: JUMPDEST 00000b89: PUSH1 0x01 00000b8b: PUSH1 0x01 00000b8d: PUSH1 0xa0 00000b8f: SHL 00000b90: SUB 00000b91: AND 00000b92: PUSH4 0xc614384c 00000b97: DUP3 00000b98: CALLER 00000b99: PUSH1 0x40 00000b9b: MLOAD 00000b9c: DUP4 00000b9d: PUSH4 0xffffffff 00000ba2: AND 00000ba3: PUSH1 0xe0 00000ba5: SHL 00000ba6: DUP2 00000ba7: MSTORE 00000ba8: PUSH1 0x04 00000baa: ADD 00000bab: PUSH2 0x0bb5 00000bae: SWAP3 00000baf: SWAP2 00000bb0: SWAP1 00000bb1: PUSH2 0x313e 00000bb4: JUMP 00000bb5: JUMPDEST 00000bb6: PUSH1 0x00 00000bb8: PUSH1 0x40 00000bba: MLOAD 00000bbb: DUP1 00000bbc: DUP4 00000bbd: SUB 00000bbe: DUP2 00000bbf: DUP7 00000bc0: DUP1 00000bc1: EXTCODESIZE 00000bc2: ISZERO 00000bc3: DUP1 00000bc4: ISZERO 00000bc5: PUSH2 0x0bcd 00000bc8: JUMPI 00000bc9: PUSH1 0x00 00000bcb: DUP1 00000bcc: REVERT 00000bcd: JUMPDEST 00000bce: POP 00000bcf: GAS 00000bd0: STATICCALL 00000bd1: ISZERO 00000bd2: DUP1 00000bd3: ISZERO 00000bd4: PUSH2 0x0be1 00000bd7: JUMPI 00000bd8: RETURNDATASIZE 00000bd9: PUSH1 0x00 00000bdb: DUP1 00000bdc: RETURNDATACOPY 00000bdd: RETURNDATASIZE 00000bde: PUSH1 0x00 00000be0: REVERT 00000be1: JUMPDEST 00000be2: POP 00000be3: POP 00000be4: POP 00000be5: POP 00000be6: PUSH2 0x0bfb 00000be9: PUSH1 0x00 00000beb: DUP1 00000bec: MLOAD 00000bed: PUSH1 0x20 00000bef: PUSH2 0x34c8 00000bf2: DUP4 00000bf3: CODECOPY 00000bf4: DUP2 00000bf5: MLOAD 00000bf6: SWAP2 00000bf7: MSTORE 00000bf8: SLOAD 00000bf9: SWAP1 00000bfa: JUMP 00000bfb: JUMPDEST 00000bfc: ISZERO 00000bfd: DUP1 00000bfe: ISZERO 00000bff: PUSH2 0x0c0a 00000c02: JUMPI 00000c03: POP 00000c04: PUSH1 0x00 00000c06: PUSH1 0x01 00000c08: SLOAD 00000c09: GT 00000c0a: JUMPDEST 00000c0b: ISZERO 00000c0c: PUSH2 0x0c39 00000c0f: JUMPI 00000c10: PUSH1 0x01 00000c12: DUP1 00000c13: SLOAD 00000c14: PUSH1 0x00 00000c16: SWAP1 00000c17: SWAP2 00000c18: SSTORE 00000c19: PUSH2 0x0c35 00000c1c: CALLER 00000c1d: DUP3 00000c1e: PUSH2 0x0c25 00000c21: PUSH2 0x0b0a 00000c24: JUMP 00000c25: JUMPDEST 00000c26: PUSH1 0x01 00000c28: PUSH1 0x01 00000c2a: PUSH1 0xa0 00000c2c: SHL 00000c2d: SUB 00000c2e: AND 00000c2f: SWAP2 00000c30: SWAP1 00000c31: PUSH2 0x1b35 00000c34: JUMP 00000c35: JUMPDEST 00000c36: POP 00000c37: POP 00000c38: JUMP 00000c39: JUMPDEST 00000c3a: PUSH1 0x40 00000c3c: MLOAD 00000c3d: PUSH4 0x06fc69e7 00000c42: PUSH1 0xe3 00000c44: SHL 00000c45: DUP2 00000c46: MSTORE 00000c47: PUSH1 0x04 00000c49: ADD 00000c4a: PUSH1 0x40 00000c4c: MLOAD 00000c4d: DUP1 00000c4e: SWAP2 00000c4f: SUB 00000c50: SWAP1 00000c51: REVERT 00000c52: JUMPDEST 00000c53: POP 00000c54: JUMP 00000c55: JUMPDEST 00000c56: PUSH2 0x0c5d 00000c59: PUSH2 0x1b94 00000c5c: JUMP 00000c5d: JUMPDEST 00000c5e: PUSH2 0x0c66 00000c61: DUP3 00000c62: PUSH2 0x1c39 00000c65: JUMP 00000c66: JUMPDEST 00000c67: PUSH2 0x0c35 00000c6a: DUP3 00000c6b: DUP3 00000c6c: PUSH2 0x1c9d 00000c6f: JUMP 00000c70: JUMPDEST 00000c71: PUSH1 0x00 00000c73: PUSH2 0x0c7a 00000c76: PUSH2 0x1d5a 00000c79: JUMP 00000c7a: JUMPDEST 00000c7b: POP 00000c7c: PUSH1 0x00 00000c7e: DUP1 00000c7f: MLOAD 00000c80: PUSH1 0x20 00000c82: PUSH2 0x34e8 00000c85: DUP4 00000c86: CODECOPY 00000c87: DUP2 00000c88: MLOAD 00000c89: SWAP2 00000c8a: MSTORE 00000c8b: SWAP1 00000c8c: JUMP 00000c8d: JUMPDEST 00000c8e: PUSH2 0x0c95 00000c91: PUSH2 0x1b2b 00000c94: JUMP 00000c95: JUMPDEST 00000c96: PUSH1 0x40 00000c98: MLOAD 00000c99: PUSH4 0x0935e01b 00000c9e: PUSH1 0xe2 00000ca0: SHL 00000ca1: DUP2 00000ca2: MSTORE 00000ca3: CALLER 00000ca4: PUSH1 0x04 00000ca6: DUP3 00000ca7: ADD 00000ca8: MSTORE 00000ca9: PUSH1 0x01 00000cab: PUSH1 0x01 00000cad: PUSH1 0xa0 00000caf: SHL 00000cb0: SUB 00000cb1: SWAP2 00000cb2: SWAP1 00000cb3: SWAP2 00000cb4: AND 00000cb5: SWAP1 00000cb6: PUSH4 0x24d7806c 00000cbb: SWAP1 00000cbc: PUSH1 0x24 00000cbe: ADD 00000cbf: PUSH1 0x00 00000cc1: PUSH1 0x40 00000cc3: MLOAD 00000cc4: DUP1 00000cc5: DUP4 00000cc6: SUB 00000cc7: DUP2 00000cc8: DUP7 00000cc9: DUP1 00000cca: EXTCODESIZE 00000ccb: ISZERO 00000ccc: DUP1 00000ccd: ISZERO 00000cce: PUSH2 0x0cd6 00000cd1: JUMPI 00000cd2: PUSH1 0x00 00000cd4: DUP1 00000cd5: REVERT 00000cd6: JUMPDEST 00000cd7: POP 00000cd8: GAS 00000cd9: STATICCALL 00000cda: ISZERO 00000cdb: DUP1 00000cdc: ISZERO 00000cdd: PUSH2 0x0cea 00000ce0: JUMPI 00000ce1: RETURNDATASIZE 00000ce2: PUSH1 0x00 00000ce4: DUP1 00000ce5: RETURNDATACOPY 00000ce6: RETURNDATASIZE 00000ce7: PUSH1 0x00 00000ce9: REVERT 00000cea: JUMPDEST 00000ceb: POP 00000cec: POP 00000ced: POP 00000cee: POP 00000cef: PUSH2 0x0cf7 00000cf2: DUP3 00000cf3: PUSH2 0x1da3 00000cf6: JUMP 00000cf7: JUMPDEST 00000cf8: DUP1 00000cf9: PUSH1 0x00 00000cfb: SUB 00000cfc: PUSH2 0x0d1a 00000cff: JUMPI 00000d00: POP 00000d01: PUSH1 0x01 00000d03: PUSH1 0x01 00000d05: PUSH1 0xa0 00000d07: SHL 00000d08: SUB 00000d09: DUP2 00000d0a: AND 00000d0b: PUSH1 0x00 00000d0d: SWAP1 00000d0e: DUP2 00000d0f: MSTORE 00000d10: PUSH1 0x05 00000d12: PUSH1 0x20 00000d14: MSTORE 00000d15: PUSH1 0x40 00000d17: SWAP1 00000d18: KECCAK256 00000d19: SLOAD 00000d1a: JUMPDEST 00000d1b: PUSH1 0x01 00000d1d: PUSH1 0x01 00000d1f: PUSH1 0xa0 00000d21: SHL 00000d22: SUB 00000d23: DUP3 00000d24: AND 00000d25: PUSH1 0x00 00000d27: SWAP1 00000d28: DUP2 00000d29: MSTORE 00000d2a: PUSH1 0x05 00000d2c: PUSH1 0x20 00000d2e: MSTORE 00000d2f: PUSH1 0x40 00000d31: SWAP1 00000d32: KECCAK256 00000d33: SLOAD 00000d34: DUP2 00000d35: GT 00000d36: ISZERO 00000d37: PUSH2 0x0d53 00000d3a: JUMPI 00000d3b: PUSH1 0x40 00000d3d: MLOAD 00000d3e: PUSH4 0x64ddcf37 00000d43: PUSH1 0xe0 00000d45: SHL 00000d46: DUP2 00000d47: MSTORE 00000d48: PUSH1 0x04 00000d4a: ADD 00000d4b: PUSH1 0x40 00000d4d: MLOAD 00000d4e: DUP1 00000d4f: SWAP2 00000d50: SUB 00000d51: SWAP1 00000d52: REVERT 00000d53: JUMPDEST 00000d54: PUSH1 0x40 00000d56: MLOAD 00000d57: PUSH4 0x2e1a7d4d 00000d5c: PUSH1 0xe0 00000d5e: SHL 00000d5f: DUP2 00000d60: MSTORE 00000d61: PUSH1 0x04 00000d63: DUP2 00000d64: ADD 00000d65: DUP3 00000d66: SWAP1 00000d67: MSTORE 00000d68: PUSH1 0x00 00000d6a: SWAP1 00000d6b: DUP2 00000d6c: SWAP1 00000d6d: PUSH1 0x01 00000d6f: PUSH1 0x01 00000d71: PUSH1 0xa0 00000d73: SHL 00000d74: SUB 00000d75: DUP6 00000d76: AND 00000d77: SWAP1 00000d78: PUSH4 0x2e1a7d4d 00000d7d: SWAP1 00000d7e: PUSH1 0x24 00000d80: ADD 00000d81: PUSH1 0x40 00000d83: DUP1 00000d84: MLOAD 00000d85: DUP1 00000d86: DUP4 00000d87: SUB 00000d88: DUP2 00000d89: PUSH1 0x00 00000d8b: DUP8 00000d8c: GAS 00000d8d: CALL 00000d8e: ISZERO 00000d8f: DUP1 00000d90: ISZERO 00000d91: PUSH2 0x0d9e 00000d94: JUMPI 00000d95: RETURNDATASIZE 00000d96: PUSH1 0x00 00000d98: DUP1 00000d99: RETURNDATACOPY 00000d9a: RETURNDATASIZE 00000d9b: PUSH1 0x00 00000d9d: REVERT 00000d9e: JUMPDEST 00000d9f: POP 00000da0: POP 00000da1: POP 00000da2: POP 00000da3: PUSH1 0x40 00000da5: MLOAD 00000da6: RETURNDATASIZE 00000da7: PUSH1 0x1f 00000da9: NOT 00000daa: PUSH1 0x1f 00000dac: DUP3 00000dad: ADD 00000dae: AND 00000daf: DUP3 00000db0: ADD 00000db1: DUP1 00000db2: PUSH1 0x40 00000db4: MSTORE 00000db5: POP 00000db6: DUP2 00000db7: ADD 00000db8: SWAP1 00000db9: PUSH2 0x0dc2 00000dbc: SWAP2 00000dbd: SWAP1 00000dbe: PUSH2 0x3161 00000dc1: JUMP 00000dc2: JUMPDEST 00000dc3: PUSH1 0x01 00000dc5: PUSH1 0x01 00000dc7: PUSH1 0xa0 00000dc9: SHL 00000dca: SUB 00000dcb: DUP7 00000dcc: AND 00000dcd: PUSH1 0x00 00000dcf: SWAP1 00000dd0: DUP2 00000dd1: MSTORE 00000dd2: PUSH1 0x05 00000dd4: PUSH1 0x20 00000dd6: MSTORE 00000dd7: PUSH1 0x40 00000dd9: DUP2 00000dda: KECCAK256 00000ddb: DUP1 00000ddc: SLOAD 00000ddd: SWAP4 00000dde: SWAP6 00000ddf: POP 00000de0: SWAP2 00000de1: SWAP4 00000de2: POP 00000de3: DUP6 00000de4: SWAP3 00000de5: PUSH2 0x0def 00000de8: SWAP1 00000de9: DUP5 00000dea: SWAP1 00000deb: PUSH2 0x312b 00000dee: JUMP 00000def: JUMPDEST 00000df0: SWAP1 00000df1: SWAP2 00000df2: SSTORE 00000df3: POP 00000df4: POP 00000df5: PUSH1 0x40 00000df7: DUP1 00000df8: MLOAD 00000df9: PUSH1 0x01 00000dfb: PUSH1 0x01 00000dfd: PUSH1 0xa0 00000dff: SHL 00000e00: SUB 00000e01: DUP1 00000e02: DUP8 00000e03: AND 00000e04: DUP3 00000e05: MSTORE 00000e06: DUP5 00000e07: AND 00000e08: PUSH1 0x20 00000e0a: DUP3 00000e0b: ADD 00000e0c: MSTORE 00000e0d: SWAP1 00000e0e: DUP2 00000e0f: ADD 00000e10: DUP5 00000e11: SWAP1 00000e12: MSTORE 00000e13: PUSH1 0x60 00000e15: DUP2 00000e16: ADD 00000e17: DUP3 00000e18: SWAP1 00000e19: MSTORE 00000e1a: PUSH32 0xac2d5a3a47c15d35354a9e217defda494d018314f05170b7bfabb20d7807e5af 00000e3b: SWAP1 00000e3c: PUSH1 0x80 00000e3e: ADD 00000e3f: JUMPDEST 00000e40: PUSH1 0x40 00000e42: MLOAD 00000e43: DUP1 00000e44: SWAP2 00000e45: SUB 00000e46: SWAP1 00000e47: LOG1 00000e48: POP 00000e49: POP 00000e4a: POP 00000e4b: POP 00000e4c: JUMP 00000e4d: JUMPDEST 00000e4e: PUSH1 0x67 00000e50: PUSH2 0x0e57 00000e53: PUSH2 0x1b2b 00000e56: JUMP 00000e57: JUMPDEST 00000e58: PUSH1 0x01 00000e5a: PUSH1 0x01 00000e5c: PUSH1 0xa0 00000e5e: SHL 00000e5f: SUB 00000e60: AND 00000e61: PUSH4 0xc614384c 00000e66: DUP3 00000e67: CALLER 00000e68: PUSH1 0x40 00000e6a: MLOAD 00000e6b: DUP4 00000e6c: PUSH4 0xffffffff 00000e71: AND 00000e72: PUSH1 0xe0 00000e74: SHL 00000e75: DUP2 00000e76: MSTORE 00000e77: PUSH1 0x04 00000e79: ADD 00000e7a: PUSH2 0x0e84 00000e7d: SWAP3 00000e7e: SWAP2 00000e7f: SWAP1 00000e80: PUSH2 0x313e 00000e83: JUMP 00000e84: JUMPDEST 00000e85: PUSH1 0x00 00000e87: PUSH1 0x40 00000e89: MLOAD 00000e8a: DUP1 00000e8b: DUP4 00000e8c: SUB 00000e8d: DUP2 00000e8e: DUP7 00000e8f: DUP1 00000e90: EXTCODESIZE 00000e91: ISZERO 00000e92: DUP1 00000e93: ISZERO 00000e94: PUSH2 0x0e9c 00000e97: JUMPI 00000e98: PUSH1 0x00 00000e9a: DUP1 00000e9b: REVERT 00000e9c: JUMPDEST 00000e9d: POP 00000e9e: GAS 00000e9f: STATICCALL 00000ea0: ISZERO 00000ea1: DUP1 00000ea2: ISZERO 00000ea3: PUSH2 0x0eb0 00000ea6: JUMPI 00000ea7: RETURNDATASIZE 00000ea8: PUSH1 0x00 00000eaa: DUP1 00000eab: RETURNDATACOPY 00000eac: RETURNDATASIZE 00000ead: PUSH1 0x00 00000eaf: REVERT 00000eb0: JUMPDEST 00000eb1: POP 00000eb2: POP 00000eb3: POP 00000eb4: POP 00000eb5: PUSH2 0x07d0 00000eb8: DUP3 00000eb9: GT 00000eba: ISZERO 00000ebb: PUSH2 0x0ed7 00000ebe: JUMPI 00000ebf: PUSH1 0x40 00000ec1: MLOAD 00000ec2: PUSH4 0x8e395cd1 00000ec7: PUSH1 0xe0 00000ec9: SHL 00000eca: DUP2 00000ecb: MSTORE 00000ecc: PUSH1 0x04 00000ece: ADD 00000ecf: PUSH1 0x40 00000ed1: MLOAD 00000ed2: DUP1 00000ed3: SWAP2 00000ed4: SUB 00000ed5: SWAP1 00000ed6: REVERT 00000ed7: JUMPDEST 00000ed8: PUSH1 0x06 00000eda: DUP3 00000edb: SWAP1 00000edc: SSTORE 00000edd: PUSH1 0x40 00000edf: MLOAD 00000ee0: DUP3 00000ee1: DUP2 00000ee2: MSTORE 00000ee3: PUSH32 0x78db22ec39a3a152ce52bed69825ba8367f13dfa30f56079a0e0314d6cb2a1e7 00000f04: SWAP1 00000f05: PUSH1 0x20 00000f07: ADD 00000f08: JUMPDEST 00000f09: PUSH1 0x40 00000f0b: MLOAD 00000f0c: DUP1 00000f0d: SWAP2 00000f0e: SUB 00000f0f: SWAP1 00000f10: LOG1 00000f11: POP 00000f12: POP 00000f13: JUMP 00000f14: JUMPDEST 00000f15: PUSH1 0x00 00000f17: DUP1 00000f18: PUSH2 0x0f20 00000f1b: DUP4 00000f1c: PUSH2 0x0b3f 00000f1f: JUMP 00000f20: JUMPDEST 00000f21: SWAP1 00000f22: POP 00000f23: DUP1 00000f24: DUP5 00000f25: GT 00000f26: ISZERO 00000f27: PUSH2 0x0f52 00000f2a: JUMPI 00000f2b: DUP3 00000f2c: DUP5 00000f2d: DUP3 00000f2e: PUSH1 0x40 00000f30: MLOAD 00000f31: PUSH4 0x3c8097d9 00000f36: PUSH1 0xe1 00000f38: SHL 00000f39: DUP2 00000f3a: MSTORE 00000f3b: PUSH1 0x04 00000f3d: ADD 00000f3e: PUSH2 0x0f49 00000f41: SWAP4 00000f42: SWAP3 00000f43: SWAP2 00000f44: SWAP1 00000f45: PUSH2 0x318f 00000f48: JUMP 00000f49: JUMPDEST 00000f4a: PUSH1 0x40 00000f4c: MLOAD 00000f4d: DUP1 00000f4e: SWAP2 00000f4f: SUB 00000f50: SWAP1 00000f51: REVERT 00000f52: JUMPDEST 00000f53: PUSH1 0x00 00000f55: PUSH2 0x0f5d 00000f58: DUP6 00000f59: PUSH2 0x16a1 00000f5c: JUMP 00000f5d: JUMPDEST 00000f5e: SWAP1 00000f5f: POP 00000f60: PUSH2 0x0f6b 00000f63: CALLER 00000f64: DUP6 00000f65: DUP8 00000f66: DUP5 00000f67: PUSH2 0x1f35 00000f6a: JUMP 00000f6b: JUMPDEST 00000f6c: SWAP5 00000f6d: SWAP4 00000f6e: POP 00000f6f: POP 00000f70: POP 00000f71: POP 00000f72: JUMP 00000f73: JUMPDEST 00000f74: PUSH2 0x0f7b 00000f77: PUSH2 0x1b2b 00000f7a: JUMP 00000f7b: JUMPDEST 00000f7c: PUSH1 0x40 00000f7e: MLOAD 00000f7f: PUSH4 0x0935e01b 00000f84: PUSH1 0xe2 00000f86: SHL 00000f87: DUP2 00000f88: MSTORE 00000f89: CALLER 00000f8a: PUSH1 0x04 00000f8c: DUP3 00000f8d: ADD 00000f8e: MSTORE 00000f8f: PUSH1 0x01 00000f91: PUSH1 0x01 00000f93: PUSH1 0xa0 00000f95: SHL 00000f96: SUB 00000f97: SWAP2 00000f98: SWAP1 00000f99: SWAP2 00000f9a: AND 00000f9b: SWAP1 00000f9c: PUSH4 0x24d7806c 00000fa1: SWAP1 00000fa2: PUSH1 0x24 00000fa4: ADD 00000fa5: PUSH1 0x00 00000fa7: PUSH1 0x40 00000fa9: MLOAD 00000faa: DUP1 00000fab: DUP4 00000fac: SUB 00000fad: DUP2 00000fae: DUP7 00000faf: DUP1 00000fb0: EXTCODESIZE 00000fb1: ISZERO 00000fb2: DUP1 00000fb3: ISZERO 00000fb4: PUSH2 0x0fbc 00000fb7: JUMPI 00000fb8: PUSH1 0x00 00000fba: DUP1 00000fbb: REVERT 00000fbc: JUMPDEST 00000fbd: POP 00000fbe: GAS 00000fbf: STATICCALL 00000fc0: ISZERO 00000fc1: DUP1 00000fc2: ISZERO 00000fc3: PUSH2 0x0fd0 00000fc6: JUMPI 00000fc7: RETURNDATASIZE 00000fc8: PUSH1 0x00 00000fca: DUP1 00000fcb: RETURNDATACOPY 00000fcc: RETURNDATASIZE 00000fcd: PUSH1 0x00 00000fcf: REVERT 00000fd0: JUMPDEST 00000fd1: POP 00000fd2: POP 00000fd3: POP 00000fd4: POP 00000fd5: PUSH2 0x0fdd 00000fd8: DUP3 00000fd9: PUSH2 0x1da3 00000fdc: JUMP 00000fdd: JUMPDEST 00000fde: PUSH2 0x0fe7 00000fe1: DUP3 00000fe2: DUP3 00000fe3: PUSH2 0x1ff5 00000fe6: JUMP 00000fe7: JUMPDEST 00000fe8: PUSH1 0x01 00000fea: PUSH1 0x01 00000fec: PUSH1 0xa0 00000fee: SHL 00000fef: SUB 00000ff0: DUP3 00000ff1: AND 00000ff2: PUSH1 0x00 00000ff4: SWAP1 00000ff5: DUP2 00000ff6: MSTORE 00000ff7: PUSH1 0x05 00000ff9: PUSH1 0x20 00000ffb: MSTORE 00000ffc: PUSH1 0x40 00000ffe: DUP2 00000fff: KECCAK256 00001000: DUP1 00001001: SLOAD 00001002: DUP4 00001003: SWAP3 00001004: SWAP1 00001005: PUSH2 0x100f 00001008: SWAP1 00001009: DUP5 0000100a: SWAP1 0000100b: PUSH2 0x31b0 0000100e: JUMP 0000100f: JUMPDEST 00001010: SWAP1 00001011: SWAP2 00001012: SSTORE 00001013: POP 00001014: POP 00001015: PUSH1 0x40 00001017: MLOAD 00001018: PUSH4 0xb6b55f25 0000101d: PUSH1 0xe0 0000101f: SHL 00001020: DUP2 00001021: MSTORE 00001022: PUSH1 0x04 00001024: DUP2 00001025: ADD 00001026: DUP3 00001027: SWAP1 00001028: MSTORE 00001029: PUSH1 0x00 0000102b: SWAP1 0000102c: DUP2 0000102d: SWAP1 0000102e: PUSH1 0x01 00001030: PUSH1 0x01 00001032: PUSH1 0xa0 00001034: SHL 00001035: SUB 00001036: DUP6 00001037: AND 00001038: SWAP1 00001039: PUSH4 0xb6b55f25 0000103e: SWAP1 0000103f: PUSH1 0x24 00001041: ADD 00001042: PUSH1 0x40 00001044: DUP1 00001045: MLOAD 00001046: DUP1 00001047: DUP4 00001048: SUB 00001049: DUP2 0000104a: PUSH1 0x00 0000104c: DUP8 0000104d: GAS 0000104e: CALL 0000104f: ISZERO 00001050: DUP1 00001051: ISZERO 00001052: PUSH2 0x105f 00001055: JUMPI 00001056: RETURNDATASIZE 00001057: PUSH1 0x00 00001059: DUP1 0000105a: RETURNDATACOPY 0000105b: RETURNDATASIZE 0000105c: PUSH1 0x00 0000105e: REVERT 0000105f: JUMPDEST 00001060: POP 00001061: POP 00001062: POP 00001063: POP 00001064: PUSH1 0x40 00001066: MLOAD 00001067: RETURNDATASIZE 00001068: PUSH1 0x1f 0000106a: NOT 0000106b: PUSH1 0x1f 0000106d: DUP3 0000106e: ADD 0000106f: AND 00001070: DUP3 00001071: ADD 00001072: DUP1 00001073: PUSH1 0x40 00001075: MSTORE 00001076: POP 00001077: DUP2 00001078: ADD 00001079: SWAP1 0000107a: PUSH2 0x1083 0000107d: SWAP2 0000107e: SWAP1 0000107f: PUSH2 0x3161 00001082: JUMP 00001083: JUMPDEST 00001084: PUSH1 0x40 00001086: DUP1 00001087: MLOAD 00001088: PUSH1 0x01 0000108a: PUSH1 0x01 0000108c: PUSH1 0xa0 0000108e: SHL 0000108f: SUB 00001090: DUP1 00001091: DUP10 00001092: AND 00001093: DUP3 00001094: MSTORE 00001095: DUP5 00001096: AND 00001097: PUSH1 0x20 00001099: DUP3 0000109a: ADD 0000109b: MSTORE 0000109c: SWAP1 0000109d: DUP2 0000109e: ADD 0000109f: DUP7 000010a0: SWAP1 000010a1: MSTORE 000010a2: PUSH1 0x60 000010a4: DUP2 000010a5: ADD 000010a6: DUP3 000010a7: SWAP1 000010a8: MSTORE 000010a9: SWAP2 000010aa: SWAP4 000010ab: POP 000010ac: SWAP2 000010ad: POP 000010ae: PUSH32 0x1d2b1045a76b2c3ec32fb992dd65aa3ade30353ea512435cfee8259544b06a98 000010cf: SWAP1 000010d0: PUSH1 0x80 000010d2: ADD 000010d3: PUSH2 0x0e3f 000010d6: JUMP 000010d7: JUMPDEST 000010d8: PUSH1 0x01 000010da: PUSH1 0x01 000010dc: PUSH1 0xa0 000010de: SHL 000010df: SUB 000010e0: AND 000010e1: PUSH1 0x00 000010e3: SWAP1 000010e4: DUP2 000010e5: MSTORE 000010e6: PUSH1 0x00 000010e8: DUP1 000010e9: MLOAD 000010ea: PUSH1 0x20 000010ec: PUSH2 0x34a8 000010ef: DUP4 000010f0: CODECOPY 000010f1: DUP2 000010f2: MLOAD 000010f3: SWAP2 000010f4: MSTORE 000010f5: PUSH1 0x20 000010f7: MSTORE 000010f8: PUSH1 0x40 000010fa: SWAP1 000010fb: KECCAK256 000010fc: SLOAD 000010fd: SWAP1 000010fe: JUMP 000010ff: JUMPDEST 00001100: PUSH2 0x1107 00001103: PUSH2 0x209f 00001106: JUMP 00001107: JUMPDEST 00001108: PUSH2 0x1111 0000110b: PUSH1 0x00 0000110d: PUSH2 0x20d1 00001110: JUMP 00001111: JUMPDEST 00001112: JUMP 00001113: JUMPDEST 00001114: PUSH1 0x67 00001116: PUSH2 0x111d 00001119: PUSH2 0x1b2b 0000111c: JUMP 0000111d: JUMPDEST 0000111e: PUSH1 0x01 00001120: PUSH1 0x01 00001122: PUSH1 0xa0 00001124: SHL 00001125: SUB 00001126: AND 00001127: PUSH4 0xc614384c 0000112c: DUP3 0000112d: CALLER 0000112e: PUSH1 0x40 00001130: MLOAD 00001131: DUP4 00001132: PUSH4 0xffffffff 00001137: AND 00001138: PUSH1 0xe0 0000113a: SHL 0000113b: DUP2 0000113c: MSTORE 0000113d: PUSH1 0x04 0000113f: ADD 00001140: PUSH2 0x114a 00001143: SWAP3 00001144: SWAP2 00001145: SWAP1 00001146: PUSH2 0x313e 00001149: JUMP 0000114a: JUMPDEST 0000114b: PUSH1 0x00 0000114d: PUSH1 0x40 0000114f: MLOAD 00001150: DUP1 00001151: DUP4 00001152: SUB 00001153: DUP2 00001154: DUP7 00001155: DUP1 00001156: EXTCODESIZE 00001157: ISZERO 00001158: DUP1 00001159: ISZERO 0000115a: PUSH2 0x1162 0000115d: JUMPI 0000115e: PUSH1 0x00 00001160: DUP1 00001161: REVERT 00001162: JUMPDEST 00001163: POP 00001164: GAS 00001165: STATICCALL 00001166: ISZERO 00001167: DUP1 00001168: ISZERO 00001169: PUSH2 0x1176 0000116c: JUMPI 0000116d: RETURNDATASIZE 0000116e: PUSH1 0x00 00001170: DUP1 00001171: RETURNDATACOPY 00001172: RETURNDATASIZE 00001173: PUSH1 0x00 00001175: REVERT 00001176: JUMPDEST 00001177: POP 00001178: POP 00001179: POP 0000117a: POP 0000117b: DUP2 0000117c: PUSH2 0x11a5 0000117f: PUSH32 0x5f64ef5afc66734d661a0e9d6aa10a8d47dcf2c1c681696cce952f8ef9115384 000011a0: PUSH1 0x00 000011a2: SHL 000011a3: SWAP1 000011a4: JUMP 000011a5: JUMPDEST 000011a6: SSTORE 000011a7: PUSH1 0x40 000011a9: MLOAD 000011aa: DUP3 000011ab: DUP2 000011ac: MSTORE 000011ad: PUSH32 0x333b26cca69716ad4680ddb07663f5bfb4f06045671f336af9a83690a3ae00f9 000011ce: SWAP1 000011cf: PUSH1 0x20 000011d1: ADD 000011d2: PUSH2 0x0f08 000011d5: JUMP 000011d6: JUMPDEST 000011d7: PUSH1 0x00 000011d9: DUP1 000011da: PUSH32 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300 000011fb: PUSH2 0x0b2f 000011fe: JUMP 000011ff: JUMPDEST 00001200: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 00001221: DUP1 00001222: SLOAD 00001223: PUSH1 0x01 00001225: PUSH1 0x40 00001227: SHL 00001228: DUP2 00001229: DIV 0000122a: PUSH1 0xff 0000122c: AND 0000122d: ISZERO 0000122e: SWAP1 0000122f: PUSH8 0xffffffffffffffff 00001238: AND 00001239: PUSH1 0x00 0000123b: DUP2 0000123c: ISZERO 0000123d: DUP1 0000123e: ISZERO 0000123f: PUSH2 0x1245 00001242: JUMPI 00001243: POP 00001244: DUP3 00001245: JUMPDEST 00001246: SWAP1 00001247: POP 00001248: PUSH1 0x00 0000124a: DUP3 0000124b: PUSH8 0xffffffffffffffff 00001254: AND 00001255: PUSH1 0x01 00001257: EQ 00001258: DUP1 00001259: ISZERO 0000125a: PUSH2 0x1262 0000125d: JUMPI 0000125e: POP 0000125f: ADDRESS 00001260: EXTCODESIZE 00001261: ISZERO 00001262: JUMPDEST 00001263: SWAP1 00001264: POP 00001265: DUP2 00001266: ISZERO 00001267: DUP1 00001268: ISZERO 00001269: PUSH2 0x1270 0000126c: JUMPI 0000126d: POP 0000126e: DUP1 0000126f: ISZERO 00001270: JUMPDEST 00001271: ISZERO 00001272: PUSH2 0x128e 00001275: JUMPI 00001276: PUSH1 0x40 00001278: MLOAD 00001279: PUSH4 0xf92ee8a9 0000127e: PUSH1 0xe0 00001280: SHL 00001281: DUP2 00001282: MSTORE 00001283: PUSH1 0x04 00001285: ADD 00001286: PUSH1 0x40 00001288: MLOAD 00001289: DUP1 0000128a: SWAP2 0000128b: SUB 0000128c: SWAP1 0000128d: REVERT 0000128e: JUMPDEST 0000128f: DUP5 00001290: SLOAD 00001291: PUSH8 0xffffffffffffffff 0000129a: NOT 0000129b: AND 0000129c: PUSH1 0x01 0000129e: OR 0000129f: DUP6 000012a0: SSTORE 000012a1: DUP4 000012a2: ISZERO 000012a3: PUSH2 0x12b8 000012a6: JUMPI 000012a7: DUP5 000012a8: SLOAD 000012a9: PUSH1 0xff 000012ab: PUSH1 0x40 000012ad: SHL 000012ae: NOT 000012af: AND 000012b0: PUSH1 0x01 000012b2: PUSH1 0x40 000012b4: SHL 000012b5: OR 000012b6: DUP6 000012b7: SSTORE 000012b8: JUMPDEST 000012b9: PUSH2 0x12c6 000012bc: DUP12 000012bd: DUP12 000012be: DUP12 000012bf: DUP12 000012c0: DUP12 000012c1: DUP12 000012c2: PUSH2 0x0a56 000012c5: JUMP 000012c6: JUMPDEST 000012c7: DUP4 000012c8: ISZERO 000012c9: PUSH2 0x130c 000012cc: JUMPI 000012cd: DUP5 000012ce: SLOAD 000012cf: PUSH1 0xff 000012d1: PUSH1 0x40 000012d3: SHL 000012d4: NOT 000012d5: AND 000012d6: DUP6 000012d7: SSTORE 000012d8: PUSH1 0x40 000012da: MLOAD 000012db: PUSH1 0x01 000012dd: DUP2 000012de: MSTORE 000012df: PUSH32 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 00001300: SWAP1 00001301: PUSH1 0x20 00001303: ADD 00001304: PUSH1 0x40 00001306: MLOAD 00001307: DUP1 00001308: SWAP2 00001309: SUB 0000130a: SWAP1 0000130b: LOG1 0000130c: JUMPDEST 0000130d: POP 0000130e: POP 0000130f: POP 00001310: POP 00001311: POP 00001312: POP 00001313: POP 00001314: POP 00001315: POP 00001316: POP 00001317: POP 00001318: JUMP 00001319: JUMPDEST 0000131a: PUSH1 0x00 0000131c: PUSH1 0x00 0000131e: NOT 0000131f: PUSH1 0x00 00001321: PUSH2 0x1329 00001324: DUP6 00001325: PUSH2 0x15a6 00001328: JUMP 00001329: JUMPDEST 0000132a: SWAP1 0000132b: POP 0000132c: PUSH2 0x0f6b 0000132f: CALLER 00001330: DUP6 00001331: DUP4 00001332: DUP9 00001333: PUSH2 0x1f35 00001336: JUMP 00001337: JUMPDEST 00001338: PUSH32 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace04 00001359: DUP1 0000135a: SLOAD 0000135b: PUSH1 0x60 0000135d: SWAP2 0000135e: PUSH1 0x00 00001360: DUP1 00001361: MLOAD 00001362: PUSH1 0x20 00001364: PUSH2 0x34a8 00001367: DUP4 00001368: CODECOPY 00001369: DUP2 0000136a: MLOAD 0000136b: SWAP2 0000136c: MSTORE 0000136d: SWAP2 0000136e: PUSH2 0x0974 00001371: SWAP1 00001372: PUSH2 0x30c2 00001375: JUMP 00001376: JUMPDEST 00001377: PUSH1 0x00 00001379: DUP2 0000137a: PUSH2 0x138e 0000137d: JUMPI 0000137e: PUSH1 0x04 00001380: SLOAD 00001381: PUSH1 0x01 00001383: PUSH1 0x01 00001385: PUSH1 0xa0 00001387: SHL 00001388: SUB 00001389: AND 0000138a: PUSH2 0x0a05 0000138d: JUMP 0000138e: JUMPDEST 0000138f: POP 00001390: POP 00001391: PUSH1 0x03 00001393: SLOAD 00001394: PUSH1 0x01 00001396: PUSH1 0x01 00001398: PUSH1 0xa0 0000139a: SHL 0000139b: SUB 0000139c: AND 0000139d: SWAP1 0000139e: JUMP 0000139f: JUMPDEST 000013a0: PUSH1 0x00 000013a2: CALLER 000013a3: PUSH2 0x0a19 000013a6: DUP2 000013a7: DUP6 000013a8: DUP6 000013a9: PUSH2 0x1a37 000013ac: JUMP 000013ad: JUMPDEST 000013ae: PUSH2 0x13b5 000013b1: PUSH2 0x1b2b 000013b4: JUMP 000013b5: JUMPDEST 000013b6: PUSH1 0x40 000013b8: MLOAD 000013b9: PUSH4 0x0935e01b 000013be: PUSH1 0xe2 000013c0: SHL 000013c1: DUP2 000013c2: MSTORE 000013c3: CALLER 000013c4: PUSH1 0x04 000013c6: DUP3 000013c7: ADD 000013c8: MSTORE 000013c9: PUSH1 0x01 000013cb: PUSH1 0x01 000013cd: PUSH1 0xa0 000013cf: SHL 000013d0: SUB 000013d1: SWAP2 000013d2: SWAP1 000013d3: SWAP2 000013d4: AND 000013d5: SWAP1 000013d6: PUSH4 0x24d7806c 000013db: SWAP1 000013dc: PUSH1 0x24 000013de: ADD 000013df: PUSH1 0x00 000013e1: PUSH1 0x40 000013e3: MLOAD 000013e4: DUP1 000013e5: DUP4 000013e6: SUB 000013e7: DUP2 000013e8: DUP7 000013e9: DUP1 000013ea: EXTCODESIZE 000013eb: ISZERO 000013ec: DUP1 000013ed: ISZERO 000013ee: PUSH2 0x13f6 000013f1: JUMPI 000013f2: PUSH1 0x00 000013f4: DUP1 000013f5: REVERT 000013f6: JUMPDEST 000013f7: POP 000013f8: GAS 000013f9: STATICCALL 000013fa: ISZERO 000013fb: DUP1 000013fc: ISZERO 000013fd: PUSH2 0x140a 00001400: JUMPI 00001401: RETURNDATASIZE 00001402: PUSH1 0x00 00001404: DUP1 00001405: RETURNDATACOPY 00001406: RETURNDATASIZE 00001407: PUSH1 0x00 00001409: REVERT 0000140a: JUMPDEST 0000140b: POP 0000140c: POP 0000140d: POP 0000140e: POP 0000140f: PUSH2 0x0c52 00001412: DUP2 00001413: PUSH2 0x1da3 00001416: JUMP 00001417: JUMPDEST 00001418: PUSH1 0x00 0000141a: PUSH2 0x1421 0000141d: PUSH2 0x2142 00001420: JUMP 00001421: JUMPDEST 00001422: PUSH1 0x00 00001424: PUSH2 0x142b 00001427: PUSH2 0x217a 0000142a: JUMP 0000142b: JUMPDEST 0000142c: SWAP1 0000142d: POP 0000142e: DUP1 0000142f: PUSH1 0x01 00001431: PUSH1 0x01 00001433: PUSH1 0xa0 00001435: SHL 00001436: SUB 00001437: AND 00001438: PUSH2 0x143f 0000143b: PUSH2 0x0b0a 0000143e: JUMP 0000143f: JUMPDEST 00001440: PUSH1 0x01 00001442: PUSH1 0x01 00001444: PUSH1 0xa0 00001446: SHL 00001447: SUB 00001448: AND 00001449: EQ 0000144a: PUSH2 0x1466 0000144d: JUMPI 0000144e: PUSH1 0x40 00001450: MLOAD 00001451: PUSH4 0x2e15428f 00001456: PUSH1 0xe0 00001458: SHL 00001459: DUP2 0000145a: MSTORE 0000145b: PUSH1 0x04 0000145d: ADD 0000145e: PUSH1 0x40 00001460: MLOAD 00001461: DUP1 00001462: SWAP2 00001463: SUB 00001464: SWAP1 00001465: REVERT 00001466: JUMPDEST 00001467: CALLVALUE 00001468: PUSH1 0x00 0000146a: DUP2 0000146b: SWAP1 0000146c: SUB 0000146d: PUSH2 0x1489 00001470: JUMPI 00001471: PUSH1 0x40 00001473: MLOAD 00001474: PUSH4 0x0772327b 00001479: PUSH1 0xe0 0000147b: SHL 0000147c: DUP2 0000147d: MSTORE 0000147e: PUSH1 0x04 00001480: ADD 00001481: PUSH1 0x40 00001483: MLOAD 00001484: DUP1 00001485: SWAP2 00001486: SUB 00001487: SWAP1 00001488: REVERT 00001489: JUMPDEST 0000148a: PUSH1 0x00 0000148c: PUSH2 0x1494 0000148f: DUP6 00001490: PUSH2 0x0b3f 00001493: JUMP 00001494: JUMPDEST 00001495: SWAP1 00001496: POP 00001497: DUP1 00001498: DUP3 00001499: GT 0000149a: ISZERO 0000149b: PUSH2 0x14bd 0000149e: JUMPI 0000149f: DUP5 000014a0: DUP3 000014a1: DUP3 000014a2: PUSH1 0x40 000014a4: MLOAD 000014a5: PUSH4 0x3c8097d9 000014aa: PUSH1 0xe1 000014ac: SHL 000014ad: DUP2 000014ae: MSTORE 000014af: PUSH1 0x04 000014b1: ADD 000014b2: PUSH2 0x0f49 000014b5: SWAP4 000014b6: SWAP3 000014b7: SWAP2 000014b8: SWAP1 000014b9: PUSH2 0x318f 000014bc: JUMP 000014bd: JUMPDEST 000014be: PUSH1 0x00 000014c0: PUSH2 0x14c8 000014c3: DUP4 000014c4: PUSH2 0x16a1 000014c7: JUMP 000014c8: JUMPDEST 000014c9: SWAP1 000014ca: POP 000014cb: DUP4 000014cc: PUSH1 0x01 000014ce: PUSH1 0x01 000014d0: PUSH1 0xa0 000014d2: SHL 000014d3: SUB 000014d4: AND 000014d5: PUSH4 0xd0e30db0 000014da: DUP5 000014db: PUSH1 0x40 000014dd: MLOAD 000014de: DUP3 000014df: PUSH4 0xffffffff 000014e4: AND 000014e5: PUSH1 0xe0 000014e7: SHL 000014e8: DUP2 000014e9: MSTORE 000014ea: PUSH1 0x04 000014ec: ADD 000014ed: PUSH1 0x00 000014ef: PUSH1 0x40 000014f1: MLOAD 000014f2: DUP1 000014f3: DUP4 000014f4: SUB 000014f5: DUP2 000014f6: DUP6 000014f7: DUP9 000014f8: DUP1 000014f9: EXTCODESIZE 000014fa: ISZERO 000014fb: DUP1 000014fc: ISZERO 000014fd: PUSH2 0x1505 00001500: JUMPI 00001501: PUSH1 0x00 00001503: DUP1 00001504: REVERT 00001505: JUMPDEST 00001506: POP 00001507: GAS 00001508: CALL 00001509: ISZERO 0000150a: DUP1 0000150b: ISZERO 0000150c: PUSH2 0x1519 0000150f: JUMPI 00001510: RETURNDATASIZE 00001511: PUSH1 0x00 00001513: DUP1 00001514: RETURNDATACOPY 00001515: RETURNDATASIZE 00001516: PUSH1 0x00 00001518: REVERT 00001519: JUMPDEST 0000151a: POP 0000151b: POP 0000151c: POP 0000151d: POP 0000151e: POP 0000151f: PUSH2 0x1528 00001522: DUP7 00001523: DUP3 00001524: PUSH2 0x21e5 00001527: JUMP 00001528: JUMPDEST 00001529: DUP3 0000152a: PUSH1 0x01 0000152c: PUSH1 0x00 0000152e: DUP3 0000152f: DUP3 00001530: SLOAD 00001531: PUSH2 0x153a 00001534: SWAP2 00001535: SWAP1 00001536: PUSH2 0x31b0 00001539: JUMP 0000153a: JUMPDEST 0000153b: SWAP1 0000153c: SWAP2 0000153d: SSTORE 0000153e: POP 0000153f: POP 00001540: PUSH1 0x40 00001542: DUP1 00001543: MLOAD 00001544: DUP5 00001545: DUP2 00001546: MSTORE 00001547: PUSH1 0x20 00001549: DUP2 0000154a: ADD 0000154b: DUP4 0000154c: SWAP1 0000154d: MSTORE 0000154e: PUSH1 0x01 00001550: PUSH1 0x01 00001552: PUSH1 0xa0 00001554: SHL 00001555: SUB 00001556: DUP9 00001557: AND 00001558: SWAP2 00001559: CALLER 0000155a: SWAP2 0000155b: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7 0000157c: SWAP2 0000157d: ADD 0000157e: PUSH1 0x40 00001580: MLOAD 00001581: DUP1 00001582: SWAP2 00001583: SUB 00001584: SWAP1 00001585: LOG3 00001586: SWAP4 00001587: POP 00001588: POP 00001589: POP 0000158a: POP 0000158b: PUSH2 0x15a1 0000158e: PUSH1 0x01 00001590: PUSH1 0x00 00001592: DUP1 00001593: MLOAD 00001594: PUSH1 0x20 00001596: PUSH2 0x3508 00001599: DUP4 0000159a: CODECOPY 0000159b: DUP2 0000159c: MLOAD 0000159d: SWAP2 0000159e: MSTORE 0000159f: SSTORE 000015a0: JUMP 000015a1: JUMPDEST 000015a2: SWAP2 000015a3: SWAP1 000015a4: POP 000015a5: JUMP 000015a6: JUMPDEST 000015a7: PUSH1 0x00 000015a9: PUSH2 0x0a05 000015ac: DUP3 000015ad: PUSH1 0x01 000015af: PUSH2 0x1957 000015b2: JUMP 000015b3: JUMPDEST 000015b4: PUSH1 0x00 000015b6: DUP1 000015b7: PUSH2 0x15bf 000015ba: DUP4 000015bb: PUSH2 0x16ae 000015be: JUMP 000015bf: JUMPDEST 000015c0: SWAP1 000015c1: POP 000015c2: DUP1 000015c3: DUP6 000015c4: GT 000015c5: ISZERO 000015c6: PUSH2 0x15e8 000015c9: JUMPI 000015ca: DUP3 000015cb: DUP6 000015cc: DUP3 000015cd: PUSH1 0x40 000015cf: MLOAD 000015d0: PUSH4 0x3fa733bb 000015d5: PUSH1 0xe2 000015d7: SHL 000015d8: DUP2 000015d9: MSTORE 000015da: PUSH1 0x04 000015dc: ADD 000015dd: PUSH2 0x0f49 000015e0: SWAP4 000015e1: SWAP3 000015e2: SWAP2 000015e3: SWAP1 000015e4: PUSH2 0x318f 000015e7: JUMP 000015e8: JUMPDEST 000015e9: PUSH1 0x00 000015eb: PUSH2 0x15f3 000015ee: DUP7 000015ef: PUSH2 0x0a23 000015f2: JUMP 000015f3: JUMPDEST 000015f4: SWAP1 000015f5: POP 000015f6: PUSH2 0x1602 000015f9: CALLER 000015fa: DUP7 000015fb: DUP7 000015fc: DUP10 000015fd: DUP6 000015fe: PUSH2 0x222f 00001601: JUMP 00001602: JUMPDEST 00001603: SWAP6 00001604: SWAP5 00001605: POP 00001606: POP 00001607: POP 00001608: POP 00001609: POP 0000160a: JUMP 0000160b: JUMPDEST 0000160c: PUSH1 0x00 0000160e: DUP1 0000160f: PUSH2 0x1617 00001612: DUP4 00001613: PUSH2 0x1787 00001616: JUMP 00001617: JUMPDEST 00001618: SWAP1 00001619: POP 0000161a: DUP1 0000161b: DUP6 0000161c: GT 0000161d: ISZERO 0000161e: PUSH2 0x1640 00001621: JUMPI 00001622: DUP3 00001623: DUP6 00001624: DUP3 00001625: PUSH1 0x40 00001627: MLOAD 00001628: PUSH4 0x2e52afbb 0000162d: PUSH1 0xe2 0000162f: SHL 00001630: DUP2 00001631: MSTORE 00001632: PUSH1 0x04 00001634: ADD 00001635: PUSH2 0x0f49 00001638: SWAP4 00001639: SWAP3 0000163a: SWAP2 0000163b: SWAP1 0000163c: PUSH2 0x318f 0000163f: JUMP 00001640: JUMPDEST 00001641: PUSH1 0x00 00001643: PUSH2 0x164b 00001646: DUP7 00001647: PUSH2 0x09f8 0000164a: JUMP 0000164b: JUMPDEST 0000164c: SWAP1 0000164d: POP 0000164e: PUSH2 0x1602 00001651: CALLER 00001652: DUP7 00001653: DUP7 00001654: DUP5 00001655: DUP11 00001656: PUSH2 0x222f 00001659: JUMP 0000165a: JUMPDEST 0000165b: PUSH1 0x04 0000165d: SLOAD 0000165e: PUSH1 0x01 00001660: PUSH1 0x01 00001662: PUSH1 0xa0 00001664: SHL 00001665: SUB 00001666: AND 00001667: CALLER 00001668: EQ 00001669: PUSH2 0x1697 0000166c: JUMPI 0000166d: PUSH1 0x03 0000166f: SLOAD 00001670: PUSH1 0x01 00001672: PUSH1 0x01 00001674: PUSH1 0xa0 00001676: SHL 00001677: SUB 00001678: AND 00001679: CALLER 0000167a: EQ 0000167b: PUSH2 0x1697 0000167e: JUMPI 0000167f: PUSH1 0x40 00001681: MLOAD 00001682: PUSH4 0xe9211597 00001687: PUSH1 0xe0 00001689: SHL 0000168a: DUP2 0000168b: MSTORE 0000168c: PUSH1 0x04 0000168e: ADD 0000168f: PUSH1 0x40 00001691: MLOAD 00001692: DUP1 00001693: SWAP2 00001694: SUB 00001695: SWAP1 00001696: REVERT 00001697: JUMPDEST 00001698: PUSH2 0x0c52 0000169b: CALLER 0000169c: DUP3 0000169d: PUSH2 0x1ff5 000016a0: JUMP 000016a1: JUMPDEST 000016a2: PUSH1 0x00 000016a4: PUSH2 0x0a05 000016a7: DUP3 000016a8: PUSH1 0x00 000016aa: PUSH2 0x19ac 000016ad: JUMP 000016ae: JUMPDEST 000016af: PUSH1 0x00 000016b1: PUSH2 0x0a05 000016b4: PUSH2 0x16bc 000016b7: DUP4 000016b8: PUSH2 0x10d7 000016bb: JUMP 000016bc: JUMPDEST 000016bd: PUSH1 0x00 000016bf: PUSH2 0x1957 000016c2: JUMP 000016c3: JUMPDEST 000016c4: PUSH1 0x04 000016c6: SLOAD 000016c7: PUSH1 0x01 000016c9: PUSH1 0x01 000016cb: PUSH1 0xa0 000016cd: SHL 000016ce: SUB 000016cf: AND 000016d0: CALLER 000016d1: EQ 000016d2: PUSH2 0x1700 000016d5: JUMPI 000016d6: PUSH1 0x03 000016d8: SLOAD 000016d9: PUSH1 0x01 000016db: PUSH1 0x01 000016dd: PUSH1 0xa0 000016df: SHL 000016e0: SUB 000016e1: AND 000016e2: CALLER 000016e3: EQ 000016e4: PUSH2 0x1700 000016e7: JUMPI 000016e8: PUSH1 0x40 000016ea: MLOAD 000016eb: PUSH4 0xe9211597 000016f0: PUSH1 0xe0 000016f2: SHL 000016f3: DUP2 000016f4: MSTORE 000016f5: PUSH1 0x04 000016f7: ADD 000016f8: PUSH1 0x40 000016fa: MLOAD 000016fb: DUP1 000016fc: SWAP2 000016fd: SUB 000016fe: SWAP1 000016ff: REVERT 00001700: JUMPDEST 00001701: DUP2 00001702: DUP4 00001703: LT 00001704: ISZERO 00001705: PUSH2 0x1752 00001708: JUMPI 00001709: DUP1 0000170a: PUSH2 0x1726 0000170d: JUMPI 0000170e: PUSH1 0x40 00001710: MLOAD 00001711: PUSH4 0xb0f8fc9b 00001716: PUSH1 0xe0 00001718: SHL 00001719: DUP2 0000171a: MSTORE 0000171b: PUSH1 0x04 0000171d: ADD 0000171e: PUSH1 0x40 00001720: MLOAD 00001721: DUP1 00001722: SWAP2 00001723: SUB 00001724: SWAP1 00001725: REVERT 00001726: JUMPDEST 00001727: PUSH1 0x00 00001729: PUSH2 0x1732 0000172c: DUP5 0000172d: DUP5 0000172e: PUSH2 0x312b 00001731: JUMP 00001732: JUMPDEST 00001733: SWAP1 00001734: POP 00001735: DUP1 00001736: PUSH1 0x01 00001738: PUSH1 0x00 0000173a: DUP3 0000173b: DUP3 0000173c: SLOAD 0000173d: PUSH2 0x1746 00001740: SWAP2 00001741: SWAP1 00001742: PUSH2 0x312b 00001745: JUMP 00001746: JUMPDEST 00001747: SWAP1 00001748: SWAP2 00001749: SSTORE 0000174a: POP 0000174b: PUSH2 0x1782 0000174e: SWAP2 0000174f: POP 00001750: POP 00001751: JUMP 00001752: JUMPDEST 00001753: PUSH1 0x00 00001755: PUSH2 0x175e 00001758: DUP4 00001759: DUP6 0000175a: PUSH2 0x312b 0000175d: JUMP 0000175e: JUMPDEST 0000175f: SWAP1 00001760: POP 00001761: PUSH2 0x1769 00001764: DUP2 00001765: PUSH2 0x2375 00001768: JUMP 00001769: JUMPDEST 0000176a: DUP1 0000176b: PUSH1 0x01 0000176d: PUSH1 0x00 0000176f: DUP3 00001770: DUP3 00001771: SLOAD 00001772: PUSH2 0x177b 00001775: SWAP2 00001776: SWAP1 00001777: PUSH2 0x31b0 0000177a: JUMP 0000177b: JUMPDEST 0000177c: SWAP1 0000177d: SWAP2 0000177e: SSTORE 0000177f: POP 00001780: POP 00001781: POP 00001782: JUMPDEST 00001783: POP 00001784: POP 00001785: POP 00001786: JUMP 00001787: JUMPDEST 00001788: PUSH1 0x00 0000178a: PUSH2 0x0a05 0000178d: DUP3 0000178e: PUSH2 0x10d7 00001791: JUMP 00001792: JUMPDEST 00001793: PUSH1 0x01 00001795: PUSH1 0x01 00001797: PUSH1 0xa0 00001799: SHL 0000179a: SUB 0000179b: SWAP2 0000179c: DUP3 0000179d: AND 0000179e: PUSH1 0x00 000017a0: SWAP1 000017a1: DUP2 000017a2: MSTORE 000017a3: PUSH32 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace01 000017c4: PUSH1 0x20 000017c6: SWAP1 000017c7: DUP2 000017c8: MSTORE 000017c9: PUSH1 0x40 000017cb: DUP1 000017cc: DUP4 000017cd: KECCAK256 000017ce: SWAP4 000017cf: SWAP1 000017d0: SWAP5 000017d1: AND 000017d2: DUP3 000017d3: MSTORE 000017d4: SWAP2 000017d5: SWAP1 000017d6: SWAP2 000017d7: MSTORE 000017d8: KECCAK256 000017d9: SLOAD 000017da: SWAP1 000017db: JUMP 000017dc: JUMPDEST 000017dd: PUSH1 0x67 000017df: PUSH2 0x17e6 000017e2: PUSH2 0x1b2b 000017e5: JUMP 000017e6: JUMPDEST 000017e7: PUSH1 0x01 000017e9: PUSH1 0x01 000017eb: PUSH1 0xa0 000017ed: SHL 000017ee: SUB 000017ef: AND 000017f0: PUSH4 0xc614384c 000017f5: DUP3 000017f6: CALLER 000017f7: PUSH1 0x40 000017f9: MLOAD 000017fa: DUP4 000017fb: PUSH4 0xffffffff 00001800: AND 00001801: PUSH1 0xe0 00001803: SHL 00001804: DUP2 00001805: MSTORE 00001806: PUSH1 0x04 00001808: ADD 00001809: PUSH2 0x1813 0000180c: SWAP3 0000180d: SWAP2 0000180e: SWAP1 0000180f: PUSH2 0x313e 00001812: JUMP 00001813: JUMPDEST 00001814: PUSH1 0x00 00001816: PUSH1 0x40 00001818: MLOAD 00001819: DUP1 0000181a: DUP4 0000181b: SUB 0000181c: DUP2 0000181d: DUP7 0000181e: DUP1 0000181f: EXTCODESIZE 00001820: ISZERO 00001821: DUP1 00001822: ISZERO 00001823: PUSH2 0x182b 00001826: JUMPI 00001827: PUSH1 0x00 00001829: DUP1 0000182a: REVERT 0000182b: JUMPDEST 0000182c: POP 0000182d: GAS 0000182e: STATICCALL 0000182f: ISZERO 00001830: DUP1 00001831: ISZERO 00001832: PUSH2 0x183f 00001835: JUMPI 00001836: RETURNDATASIZE 00001837: PUSH1 0x00 00001839: DUP1 0000183a: RETURNDATACOPY 0000183b: RETURNDATASIZE 0000183c: PUSH1 0x00 0000183e: REVERT 0000183f: JUMPDEST 00001840: POP 00001841: POP 00001842: POP 00001843: POP 00001844: DUP2 00001845: PUSH1 0x00 00001847: SUB 00001848: PUSH2 0x1864 0000184b: JUMPI 0000184c: PUSH1 0x40 0000184e: MLOAD 0000184f: PUSH4 0x162908e3 00001854: PUSH1 0xe1 00001856: SHL 00001857: DUP2 00001858: MSTORE 00001859: PUSH1 0x04 0000185b: ADD 0000185c: PUSH1 0x40 0000185e: MLOAD 0000185f: DUP1 00001860: SWAP2 00001861: SUB 00001862: SWAP1 00001863: REVERT 00001864: JUMPDEST 00001865: PUSH2 0x1883 00001868: CALLER 00001869: ADDRESS 0000186a: DUP5 0000186b: PUSH2 0x1872 0000186e: PUSH2 0x0b0a 00001871: JUMP 00001872: JUMPDEST 00001873: PUSH1 0x01 00001875: PUSH1 0x01 00001877: PUSH1 0xa0 00001879: SHL 0000187a: SUB 0000187b: AND 0000187c: SWAP3 0000187d: SWAP2 0000187e: SWAP1 0000187f: PUSH2 0x2418 00001882: JUMP 00001883: JUMPDEST 00001884: DUP2 00001885: PUSH1 0x01 00001887: PUSH1 0x00 00001889: DUP3 0000188a: DUP3 0000188b: SLOAD 0000188c: PUSH2 0x1895 0000188f: SWAP2 00001890: SWAP1 00001891: PUSH2 0x31b0 00001894: JUMP 00001895: JUMPDEST 00001896: SWAP1 00001897: SWAP2 00001898: SSTORE 00001899: POP 0000189a: PUSH32 0x8f721bf293f3e50bca3ef8987b9d6d300867879e600625884397974fa5d1a927 000018bb: SWAP1 000018bc: POP 000018bd: PUSH2 0x18c4 000018c0: PUSH2 0x0b0a 000018c3: JUMP 000018c4: JUMPDEST 000018c5: PUSH1 0x40 000018c7: DUP1 000018c8: MLOAD 000018c9: PUSH1 0x01 000018cb: PUSH1 0x01 000018cd: PUSH1 0xa0 000018cf: SHL 000018d0: SUB 000018d1: SWAP1 000018d2: SWAP3 000018d3: AND 000018d4: DUP3 000018d5: MSTORE 000018d6: PUSH1 0x20 000018d8: DUP3 000018d9: ADD 000018da: DUP6 000018db: SWAP1 000018dc: MSTORE 000018dd: ADD 000018de: PUSH2 0x0f08 000018e1: JUMP 000018e2: JUMPDEST 000018e3: PUSH2 0x18ea 000018e6: PUSH2 0x209f 000018e9: JUMP 000018ea: JUMPDEST 000018eb: PUSH1 0x01 000018ed: PUSH1 0x01 000018ef: PUSH1 0xa0 000018f1: SHL 000018f2: SUB 000018f3: DUP2 000018f4: AND 000018f5: PUSH2 0x1914 000018f8: JUMPI 000018f9: PUSH1 0x40 000018fb: MLOAD 000018fc: PUSH4 0x1e4fbdf7 00001901: PUSH1 0xe0 00001903: SHL 00001904: DUP2 00001905: MSTORE 00001906: PUSH1 0x00 00001908: PUSH1 0x04 0000190a: DUP3 0000190b: ADD 0000190c: MSTORE 0000190d: PUSH1 0x24 0000190f: ADD 00001910: PUSH2 0x0f49 00001913: JUMP 00001914: JUMPDEST 00001915: PUSH2 0x0c52 00001918: DUP2 00001919: PUSH2 0x20d1 0000191c: JUMP 0000191d: JUMPDEST 0000191e: PUSH32 0x5f64ef5afc66734d661a0e9d6aa10a8d47dcf2c1c681696cce952f8ef9115384 0000193f: SLOAD 00001940: PUSH1 0x00 00001942: SWAP1 00001943: DUP1 00001944: ISZERO 00001945: PUSH2 0x194e 00001948: JUMPI 00001949: DUP1 0000194a: PUSH2 0x0b04 0000194d: JUMP 0000194e: JUMPDEST 0000194f: PUSH1 0x00 00001951: NOT 00001952: SWAP2 00001953: POP 00001954: POP 00001955: SWAP1 00001956: JUMP 00001957: JUMPDEST 00001958: PUSH1 0x00 0000195a: PUSH2 0x0a4f 0000195d: PUSH2 0x1965 00001960: PUSH1 0x01 00001962: SLOAD 00001963: SWAP1 00001964: JUMP 00001965: JUMPDEST 00001966: PUSH2 0x1970 00001969: SWAP1 0000196a: PUSH1 0x01 0000196c: PUSH2 0x31b0 0000196f: JUMP 00001970: JUMPDEST 00001971: PUSH2 0x197c 00001974: PUSH1 0x00 00001976: PUSH1 0x0a 00001978: PUSH2 0x32aa 0000197b: JUMP 0000197c: JUMPDEST 0000197d: PUSH1 0x00 0000197f: DUP1 00001980: MLOAD 00001981: PUSH1 0x20 00001983: PUSH2 0x34c8 00001986: DUP4 00001987: CODECOPY 00001988: DUP2 00001989: MLOAD 0000198a: SWAP2 0000198b: MSTORE 0000198c: SLOAD 0000198d: PUSH2 0x1996 00001990: SWAP2 00001991: SWAP1 00001992: PUSH2 0x31b0 00001995: JUMP 00001996: JUMPDEST 00001997: DUP6 00001998: SWAP2 00001999: SWAP1 0000199a: DUP6 0000199b: PUSH2 0x2451 0000199e: JUMP 0000199f: JUMPDEST 000019a0: PUSH2 0x1782 000019a3: DUP4 000019a4: DUP4 000019a5: DUP4 000019a6: PUSH1 0x01 000019a8: PUSH2 0x24a0 000019ab: JUMP 000019ac: JUMPDEST 000019ad: PUSH1 0x00 000019af: PUSH2 0x0a4f 000019b2: PUSH2 0x19bc 000019b5: DUP3 000019b6: PUSH1 0x0a 000019b8: PUSH2 0x32aa 000019bb: JUMP 000019bc: JUMPDEST 000019bd: PUSH1 0x00 000019bf: DUP1 000019c0: MLOAD 000019c1: PUSH1 0x20 000019c3: PUSH2 0x34c8 000019c6: DUP4 000019c7: CODECOPY 000019c8: DUP2 000019c9: MLOAD 000019ca: SWAP2 000019cb: MSTORE 000019cc: SLOAD 000019cd: PUSH2 0x19d6 000019d0: SWAP2 000019d1: SWAP1 000019d2: PUSH2 0x31b0 000019d5: JUMP 000019d6: JUMPDEST 000019d7: PUSH1 0x01 000019d9: SLOAD 000019da: PUSH2 0x1996 000019dd: SWAP1 000019de: PUSH1 0x01 000019e0: PUSH2 0x31b0 000019e3: JUMP 000019e4: JUMPDEST 000019e5: PUSH1 0x00 000019e7: PUSH2 0x19f0 000019ea: DUP5 000019eb: DUP5 000019ec: PUSH2 0x1792 000019ef: JUMP 000019f0: JUMPDEST 000019f1: SWAP1 000019f2: POP 000019f3: PUSH1 0x00 000019f5: NOT 000019f6: DUP2 000019f7: EQ 000019f8: PUSH2 0x1a31 000019fb: JUMPI 000019fc: DUP2 000019fd: DUP2 000019fe: LT 000019ff: ISZERO 00001a00: PUSH2 0x1a22 00001a03: JUMPI 00001a04: DUP3 00001a05: DUP2 00001a06: DUP4 00001a07: PUSH1 0x40 00001a09: MLOAD 00001a0a: PUSH4 0x7dc7a0d9 00001a0f: PUSH1 0xe1 00001a11: SHL 00001a12: DUP2 00001a13: MSTORE 00001a14: PUSH1 0x04 00001a16: ADD 00001a17: PUSH2 0x0f49 00001a1a: SWAP4 00001a1b: SWAP3 00001a1c: SWAP2 00001a1d: SWAP1 00001a1e: PUSH2 0x318f 00001a21: JUMP 00001a22: JUMPDEST 00001a23: PUSH2 0x1a31 00001a26: DUP5 00001a27: DUP5 00001a28: DUP5 00001a29: DUP5 00001a2a: SUB 00001a2b: PUSH1 0x00 00001a2d: PUSH2 0x24a0 00001a30: JUMP 00001a31: JUMPDEST 00001a32: POP 00001a33: POP 00001a34: POP 00001a35: POP 00001a36: JUMP 00001a37: JUMPDEST 00001a38: PUSH1 0x01 00001a3a: PUSH1 0x01 00001a3c: PUSH1 0xa0 00001a3e: SHL 00001a3f: SUB 00001a40: DUP4 00001a41: AND 00001a42: PUSH2 0x1a61 00001a45: JUMPI 00001a46: PUSH1 0x40 00001a48: MLOAD 00001a49: PUSH4 0x4b637e8f 00001a4e: PUSH1 0xe1 00001a50: SHL 00001a51: DUP2 00001a52: MSTORE 00001a53: PUSH1 0x00 00001a55: PUSH1 0x04 00001a57: DUP3 00001a58: ADD 00001a59: MSTORE 00001a5a: PUSH1 0x24 00001a5c: ADD 00001a5d: PUSH2 0x0f49 00001a60: JUMP 00001a61: JUMPDEST 00001a62: PUSH1 0x01 00001a64: PUSH1 0x01 00001a66: PUSH1 0xa0 00001a68: SHL 00001a69: SUB 00001a6a: DUP3 00001a6b: AND 00001a6c: PUSH2 0x1a8b 00001a6f: JUMPI 00001a70: PUSH1 0x40 00001a72: MLOAD 00001a73: PUSH4 0xec442f05 00001a78: PUSH1 0xe0 00001a7a: SHL 00001a7b: DUP2 00001a7c: MSTORE 00001a7d: PUSH1 0x00 00001a7f: PUSH1 0x04 00001a81: DUP3 00001a82: ADD 00001a83: MSTORE 00001a84: PUSH1 0x24 00001a86: ADD 00001a87: PUSH2 0x0f49 00001a8a: JUMP 00001a8b: JUMPDEST 00001a8c: PUSH2 0x1782 00001a8f: DUP4 00001a90: DUP4 00001a91: DUP4 00001a92: PUSH2 0x2587 00001a95: JUMP 00001a96: JUMPDEST 00001a97: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 00001ab8: SLOAD 00001ab9: PUSH1 0x01 00001abb: PUSH1 0x40 00001abd: SHL 00001abe: SWAP1 00001abf: DIV 00001ac0: PUSH1 0xff 00001ac2: AND 00001ac3: PUSH2 0x1111 00001ac6: JUMPI 00001ac7: PUSH1 0x40 00001ac9: MLOAD 00001aca: PUSH4 0x1afcd79f 00001acf: PUSH1 0xe3 00001ad1: SHL 00001ad2: DUP2 00001ad3: MSTORE 00001ad4: PUSH1 0x04 00001ad6: ADD 00001ad7: PUSH1 0x40 00001ad9: MLOAD 00001ada: DUP1 00001adb: SWAP2 00001adc: SUB 00001add: SWAP1 00001ade: REVERT 00001adf: JUMPDEST 00001ae0: PUSH2 0x1ae7 00001ae3: PUSH2 0x1a96 00001ae6: JUMP 00001ae7: JUMPDEST 00001ae8: PUSH2 0x0c35 00001aeb: DUP3 00001aec: DUP3 00001aed: PUSH2 0x26b2 00001af0: JUMP 00001af1: JUMPDEST 00001af2: PUSH2 0x1af9 00001af5: PUSH2 0x1a96 00001af8: JUMP 00001af9: JUMPDEST 00001afa: PUSH2 0x0c52 00001afd: DUP2 00001afe: PUSH2 0x2703 00001b01: JUMP 00001b02: JUMPDEST 00001b03: PUSH2 0x1b0a 00001b06: PUSH2 0x1a96 00001b09: JUMP 00001b0a: JUMPDEST 00001b0b: PUSH2 0x0c52 00001b0e: DUP2 00001b0f: PUSH2 0x270b 00001b12: JUMP 00001b13: JUMPDEST 00001b14: PUSH2 0x1b1b 00001b17: PUSH2 0x1a96 00001b1a: JUMP 00001b1b: JUMPDEST 00001b1c: PUSH2 0x1111 00001b1f: PUSH2 0x278f 00001b22: JUMP 00001b23: JUMPDEST 00001b24: PUSH2 0x1111 00001b27: PUSH2 0x1a96 00001b2a: JUMP 00001b2b: JUMPDEST 00001b2c: PUSH1 0x00 00001b2e: PUSH2 0x0930 00001b31: PUSH2 0x11d6 00001b34: JUMP 00001b35: JUMPDEST 00001b36: PUSH1 0x40 00001b38: MLOAD 00001b39: PUSH1 0x01 00001b3b: PUSH1 0x01 00001b3d: PUSH1 0xa0 00001b3f: SHL 00001b40: SUB 00001b41: DUP4 00001b42: DUP2 00001b43: AND 00001b44: PUSH1 0x24 00001b46: DUP4 00001b47: ADD 00001b48: MSTORE 00001b49: PUSH1 0x44 00001b4b: DUP3 00001b4c: ADD 00001b4d: DUP4 00001b4e: SWAP1 00001b4f: MSTORE 00001b50: PUSH2 0x1782 00001b53: SWAP2 00001b54: DUP6 00001b55: SWAP2 00001b56: DUP3 00001b57: AND 00001b58: SWAP1 00001b59: PUSH4 0xa9059cbb 00001b5e: SWAP1 00001b5f: PUSH1 0x64 00001b61: ADD 00001b62: JUMPDEST 00001b63: PUSH1 0x40 00001b65: MLOAD 00001b66: PUSH1 0x20 00001b68: DUP2 00001b69: DUP4 00001b6a: SUB 00001b6b: SUB 00001b6c: DUP2 00001b6d: MSTORE 00001b6e: SWAP1 00001b6f: PUSH1 0x40 00001b71: MSTORE 00001b72: SWAP2 00001b73: POP 00001b74: PUSH1 0xe0 00001b76: SHL 00001b77: PUSH1 0x20 00001b79: DUP3 00001b7a: ADD 00001b7b: DUP1 00001b7c: MLOAD 00001b7d: PUSH1 0x01 00001b7f: PUSH1 0x01 00001b81: PUSH1 0xe0 00001b83: SHL 00001b84: SUB 00001b85: DUP4 00001b86: DUP2 00001b87: DUP4 00001b88: AND 00001b89: OR 00001b8a: DUP4 00001b8b: MSTORE 00001b8c: POP 00001b8d: POP 00001b8e: POP 00001b8f: POP 00001b90: PUSH2 0x2797 00001b93: JUMP 00001b94: JUMPDEST 00001b95: ADDRESS 00001b96: PUSH1 0x01 00001b98: PUSH1 0x01 00001b9a: PUSH1 0xa0 00001b9c: SHL 00001b9d: SUB 00001b9e: PUSH32 0x0000000000000000000000007f1cec2328170e510f2d0375ce1ba7ac45d1681a 00001bbf: AND 00001bc0: EQ 00001bc1: DUP1 00001bc2: PUSH2 0x1c1b 00001bc5: JUMPI 00001bc6: POP 00001bc7: PUSH32 0x0000000000000000000000007f1cec2328170e510f2d0375ce1ba7ac45d1681a 00001be8: PUSH1 0x01 00001bea: PUSH1 0x01 00001bec: PUSH1 0xa0 00001bee: SHL 00001bef: SUB 00001bf0: AND 00001bf1: PUSH2 0x1c0f 00001bf4: PUSH1 0x00 00001bf6: DUP1 00001bf7: MLOAD 00001bf8: PUSH1 0x20 00001bfa: PUSH2 0x34e8 00001bfd: DUP4 00001bfe: CODECOPY 00001bff: DUP2 00001c00: MLOAD 00001c01: SWAP2 00001c02: MSTORE 00001c03: SLOAD 00001c04: PUSH1 0x01 00001c06: PUSH1 0x01 00001c08: PUSH1 0xa0 00001c0a: SHL 00001c0b: SUB 00001c0c: AND 00001c0d: SWAP1 00001c0e: JUMP 00001c0f: JUMPDEST 00001c10: PUSH1 0x01 00001c12: PUSH1 0x01 00001c14: PUSH1 0xa0 00001c16: SHL 00001c17: SUB 00001c18: AND 00001c19: EQ 00001c1a: ISZERO 00001c1b: JUMPDEST 00001c1c: ISZERO 00001c1d: PUSH2 0x1111 00001c20: JUMPI 00001c21: PUSH1 0x40 00001c23: MLOAD 00001c24: PUSH4 0x703e46dd 00001c29: PUSH1 0xe1 00001c2b: SHL 00001c2c: DUP2 00001c2d: MSTORE 00001c2e: PUSH1 0x04 00001c30: ADD 00001c31: PUSH1 0x40 00001c33: MLOAD 00001c34: DUP1 00001c35: SWAP2 00001c36: SUB 00001c37: SWAP1 00001c38: REVERT 00001c39: JUMPDEST 00001c3a: PUSH2 0x1c41 00001c3d: PUSH2 0x1b2b 00001c40: JUMP 00001c41: JUMPDEST 00001c42: PUSH1 0x40 00001c44: MLOAD 00001c45: PUSH4 0x0935e01b 00001c4a: PUSH1 0xe2 00001c4c: SHL 00001c4d: DUP2 00001c4e: MSTORE 00001c4f: CALLER 00001c50: PUSH1 0x04 00001c52: DUP3 00001c53: ADD 00001c54: MSTORE 00001c55: PUSH1 0x01 00001c57: PUSH1 0x01 00001c59: PUSH1 0xa0 00001c5b: SHL 00001c5c: SUB 00001c5d: SWAP2 00001c5e: SWAP1 00001c5f: SWAP2 00001c60: AND 00001c61: SWAP1 00001c62: PUSH4 0x24d7806c 00001c67: SWAP1 00001c68: PUSH1 0x24 00001c6a: ADD 00001c6b: PUSH1 0x00 00001c6d: PUSH1 0x40 00001c6f: MLOAD 00001c70: DUP1 00001c71: DUP4 00001c72: SUB 00001c73: DUP2 00001c74: DUP7 00001c75: DUP1 00001c76: EXTCODESIZE 00001c77: ISZERO 00001c78: DUP1 00001c79: ISZERO 00001c7a: PUSH2 0x1c82 00001c7d: JUMPI 00001c7e: PUSH1 0x00 00001c80: DUP1 00001c81: REVERT 00001c82: JUMPDEST 00001c83: POP 00001c84: GAS 00001c85: STATICCALL 00001c86: ISZERO 00001c87: DUP1 00001c88: ISZERO 00001c89: PUSH2 0x1c96 00001c8c: JUMPI 00001c8d: RETURNDATASIZE 00001c8e: PUSH1 0x00 00001c90: DUP1 00001c91: RETURNDATACOPY 00001c92: RETURNDATASIZE 00001c93: PUSH1 0x00 00001c95: REVERT 00001c96: JUMPDEST 00001c97: POP 00001c98: POP 00001c99: POP 00001c9a: POP 00001c9b: POP 00001c9c: JUMP 00001c9d: JUMPDEST 00001c9e: DUP2 00001c9f: PUSH1 0x01 00001ca1: PUSH1 0x01 00001ca3: PUSH1 0xa0 00001ca5: SHL 00001ca6: SUB 00001ca7: AND 00001ca8: PUSH4 0x52d1902d 00001cad: PUSH1 0x40 00001caf: MLOAD 00001cb0: DUP2 00001cb1: PUSH4 0xffffffff 00001cb6: AND 00001cb7: PUSH1 0xe0 00001cb9: SHL 00001cba: DUP2 00001cbb: MSTORE 00001cbc: PUSH1 0x04 00001cbe: ADD 00001cbf: PUSH1 0x20 00001cc1: PUSH1 0x40 00001cc3: MLOAD 00001cc4: DUP1 00001cc5: DUP4 00001cc6: SUB 00001cc7: DUP2 00001cc8: DUP7 00001cc9: GAS 00001cca: STATICCALL 00001ccb: SWAP3 00001ccc: POP 00001ccd: POP 00001cce: POP 00001ccf: DUP1 00001cd0: ISZERO 00001cd1: PUSH2 0x1cf7 00001cd4: JUMPI 00001cd5: POP 00001cd6: PUSH1 0x40 00001cd8: DUP1 00001cd9: MLOAD 00001cda: PUSH1 0x1f 00001cdc: RETURNDATASIZE 00001cdd: SWAP1 00001cde: DUP2 00001cdf: ADD 00001ce0: PUSH1 0x1f 00001ce2: NOT 00001ce3: AND 00001ce4: DUP3 00001ce5: ADD 00001ce6: SWAP1 00001ce7: SWAP3 00001ce8: MSTORE 00001ce9: PUSH2 0x1cf4 00001cec: SWAP2 00001ced: DUP2 00001cee: ADD 00001cef: SWAP1 00001cf0: PUSH2 0x32b9 00001cf3: JUMP 00001cf4: JUMPDEST 00001cf5: PUSH1 0x01 00001cf7: JUMPDEST 00001cf8: PUSH2 0x1d1f 00001cfb: JUMPI 00001cfc: PUSH1 0x40 00001cfe: MLOAD 00001cff: PUSH4 0x4c9c8ce3 00001d04: PUSH1 0xe0 00001d06: SHL 00001d07: DUP2 00001d08: MSTORE 00001d09: PUSH1 0x01 00001d0b: PUSH1 0x01 00001d0d: PUSH1 0xa0 00001d0f: SHL 00001d10: SUB 00001d11: DUP4 00001d12: AND 00001d13: PUSH1 0x04 00001d15: DUP3 00001d16: ADD 00001d17: MSTORE 00001d18: PUSH1 0x24 00001d1a: ADD 00001d1b: PUSH2 0x0f49 00001d1e: JUMP 00001d1f: JUMPDEST 00001d20: PUSH1 0x00 00001d22: DUP1 00001d23: MLOAD 00001d24: PUSH1 0x20 00001d26: PUSH2 0x34e8 00001d29: DUP4 00001d2a: CODECOPY 00001d2b: DUP2 00001d2c: MLOAD 00001d2d: SWAP2 00001d2e: MSTORE 00001d2f: DUP2 00001d30: EQ 00001d31: PUSH2 0x1d50 00001d34: JUMPI 00001d35: PUSH1 0x40 00001d37: MLOAD 00001d38: PUSH4 0x2a875269 00001d3d: PUSH1 0xe2 00001d3f: SHL 00001d40: DUP2 00001d41: MSTORE 00001d42: PUSH1 0x04 00001d44: DUP2 00001d45: ADD 00001d46: DUP3 00001d47: SWAP1 00001d48: MSTORE 00001d49: PUSH1 0x24 00001d4b: ADD 00001d4c: PUSH2 0x0f49 00001d4f: JUMP 00001d50: JUMPDEST 00001d51: PUSH2 0x1782 00001d54: DUP4 00001d55: DUP4 00001d56: PUSH2 0x27fa 00001d59: JUMP 00001d5a: JUMPDEST 00001d5b: ADDRESS 00001d5c: PUSH1 0x01 00001d5e: PUSH1 0x01 00001d60: PUSH1 0xa0 00001d62: SHL 00001d63: SUB 00001d64: PUSH32 0x0000000000000000000000007f1cec2328170e510f2d0375ce1ba7ac45d1681a 00001d85: AND 00001d86: EQ 00001d87: PUSH2 0x1111 00001d8a: JUMPI 00001d8b: PUSH1 0x40 00001d8d: MLOAD 00001d8e: PUSH4 0x703e46dd 00001d93: PUSH1 0xe1 00001d95: SHL 00001d96: DUP2 00001d97: MSTORE 00001d98: PUSH1 0x04 00001d9a: ADD 00001d9b: PUSH1 0x40 00001d9d: MLOAD 00001d9e: DUP1 00001d9f: SWAP2 00001da0: SUB 00001da1: SWAP1 00001da2: REVERT 00001da3: JUMPDEST 00001da4: PUSH1 0x01 00001da6: PUSH1 0x01 00001da8: PUSH1 0xa0 00001daa: SHL 00001dab: SUB 00001dac: DUP2 00001dad: AND 00001dae: PUSH1 0x00 00001db0: DUP2 00001db1: DUP2 00001db2: MSTORE 00001db3: PUSH1 0x05 00001db5: PUSH1 0x20 00001db7: MSTORE 00001db8: PUSH1 0x40 00001dba: DUP1 00001dbb: DUP3 00001dbc: KECCAK256 00001dbd: SLOAD 00001dbe: SWAP1 00001dbf: MLOAD 00001dc0: PUSH3 0x60260f 00001dc4: PUSH1 0xe2 00001dc6: SHL 00001dc7: DUP2 00001dc8: MSTORE 00001dc9: SWAP2 00001dca: SWAP3 00001dcb: SWAP2 00001dcc: PUSH4 0x0180983c 00001dd1: SWAP2 00001dd2: PUSH2 0x1de1 00001dd5: SWAP2 00001dd6: PUSH1 0x04 00001dd8: ADD 00001dd9: SWAP1 00001dda: DUP2 00001ddb: MSTORE 00001ddc: PUSH1 0x20 00001dde: ADD 00001ddf: SWAP1 00001de0: JUMP 00001de1: JUMPDEST 00001de2: PUSH1 0x20 00001de4: PUSH1 0x40 00001de6: MLOAD 00001de7: DUP1 00001de8: DUP4 00001de9: SUB 00001dea: DUP2 00001deb: DUP7 00001dec: GAS 00001ded: STATICCALL 00001dee: ISZERO 00001def: DUP1 00001df0: ISZERO 00001df1: PUSH2 0x1dfe 00001df4: JUMPI 00001df5: RETURNDATASIZE 00001df6: PUSH1 0x00 00001df8: DUP1 00001df9: RETURNDATACOPY 00001dfa: RETURNDATASIZE 00001dfb: PUSH1 0x00 00001dfd: REVERT 00001dfe: JUMPDEST 00001dff: POP 00001e00: POP 00001e01: POP 00001e02: POP 00001e03: PUSH1 0x40 00001e05: MLOAD 00001e06: RETURNDATASIZE 00001e07: PUSH1 0x1f 00001e09: NOT 00001e0a: PUSH1 0x1f 00001e0c: DUP3 00001e0d: ADD 00001e0e: AND 00001e0f: DUP3 00001e10: ADD 00001e11: DUP1 00001e12: PUSH1 0x40 00001e14: MSTORE 00001e15: POP 00001e16: DUP2 00001e17: ADD 00001e18: SWAP1 00001e19: PUSH2 0x1e22 00001e1c: SWAP2 00001e1d: SWAP1 00001e1e: PUSH2 0x32b9 00001e21: JUMP 00001e22: JUMPDEST 00001e23: SWAP1 00001e24: POP 00001e25: DUP1 00001e26: PUSH1 0x00 00001e28: SUB 00001e29: PUSH2 0x1e30 00001e2c: JUMPI 00001e2d: POP 00001e2e: POP 00001e2f: JUMP 00001e30: JUMPDEST 00001e31: PUSH1 0x00 00001e33: DUP3 00001e34: PUSH1 0x01 00001e36: PUSH1 0x01 00001e38: PUSH1 0xa0 00001e3a: SHL 00001e3b: SUB 00001e3c: AND 00001e3d: PUSH4 0xaabaecd6 00001e42: PUSH1 0x40 00001e44: MLOAD 00001e45: DUP2 00001e46: PUSH4 0xffffffff 00001e4b: AND 00001e4c: PUSH1 0xe0 00001e4e: SHL 00001e4f: DUP2 00001e50: MSTORE 00001e51: PUSH1 0x04 00001e53: ADD 00001e54: PUSH1 0x20 00001e56: PUSH1 0x40 00001e58: MLOAD 00001e59: DUP1 00001e5a: DUP4 00001e5b: SUB 00001e5c: DUP2 00001e5d: DUP7 00001e5e: GAS 00001e5f: STATICCALL 00001e60: ISZERO 00001e61: DUP1 00001e62: ISZERO 00001e63: PUSH2 0x1e70 00001e66: JUMPI 00001e67: RETURNDATASIZE 00001e68: PUSH1 0x00 00001e6a: DUP1 00001e6b: RETURNDATACOPY 00001e6c: RETURNDATASIZE 00001e6d: PUSH1 0x00 00001e6f: REVERT 00001e70: JUMPDEST 00001e71: POP 00001e72: POP 00001e73: POP 00001e74: POP 00001e75: PUSH1 0x40 00001e77: MLOAD 00001e78: RETURNDATASIZE 00001e79: PUSH1 0x1f 00001e7b: NOT 00001e7c: PUSH1 0x1f 00001e7e: DUP3 00001e7f: ADD 00001e80: AND 00001e81: DUP3 00001e82: ADD 00001e83: DUP1 00001e84: PUSH1 0x40 00001e86: MSTORE 00001e87: POP 00001e88: DUP2 00001e89: ADD 00001e8a: SWAP1 00001e8b: PUSH2 0x1e94 00001e8e: SWAP2 00001e8f: SWAP1 00001e90: PUSH2 0x32d2 00001e93: JUMP 00001e94: JUMPDEST 00001e95: SWAP1 00001e96: POP 00001e97: DUP2 00001e98: PUSH1 0x01 00001e9a: PUSH1 0x00 00001e9c: DUP3 00001e9d: DUP3 00001e9e: SLOAD 00001e9f: PUSH2 0x1ea8 00001ea2: SWAP2 00001ea3: SWAP1 00001ea4: PUSH2 0x31b0 00001ea7: JUMP 00001ea8: JUMPDEST 00001ea9: SWAP1 00001eaa: SWAP2 00001eab: SSTORE 00001eac: POP 00001ead: POP 00001eae: PUSH1 0x01 00001eb0: PUSH1 0x01 00001eb2: PUSH1 0xa0 00001eb4: SHL 00001eb5: SUB 00001eb6: DUP4 00001eb7: AND 00001eb8: PUSH1 0x00 00001eba: SWAP1 00001ebb: DUP2 00001ebc: MSTORE 00001ebd: PUSH1 0x05 00001ebf: PUSH1 0x20 00001ec1: MSTORE 00001ec2: PUSH1 0x40 00001ec4: DUP2 00001ec5: KECCAK256 00001ec6: DUP1 00001ec7: SLOAD 00001ec8: DUP5 00001ec9: SWAP3 00001eca: SWAP1 00001ecb: PUSH2 0x1ed5 00001ece: SWAP1 00001ecf: DUP5 00001ed0: SWAP1 00001ed1: PUSH2 0x31b0 00001ed4: JUMP 00001ed5: JUMPDEST 00001ed6: SWAP1 00001ed7: SWAP2 00001ed8: SSTORE 00001ed9: POP 00001eda: PUSH2 0x1ee4 00001edd: SWAP1 00001ede: POP 00001edf: DUP3 00001ee0: PUSH2 0x2375 00001ee3: JUMP 00001ee4: JUMPDEST 00001ee5: PUSH1 0x40 00001ee7: DUP1 00001ee8: MLOAD 00001ee9: PUSH1 0x01 00001eeb: PUSH1 0x01 00001eed: PUSH1 0xa0 00001eef: SHL 00001ef0: SUB 00001ef1: DUP1 00001ef2: DUP7 00001ef3: AND 00001ef4: DUP3 00001ef5: MSTORE 00001ef6: DUP4 00001ef7: AND 00001ef8: PUSH1 0x20 00001efa: DUP3 00001efb: ADD 00001efc: MSTORE 00001efd: SWAP1 00001efe: DUP2 00001eff: ADD 00001f00: DUP4 00001f01: SWAP1 00001f02: MSTORE 00001f03: PUSH32 0xd674ffbdd2e1f5f45aac44c22799c2d22817c55bf17da1cf57ca32adf7200c21 00001f24: SWAP1 00001f25: PUSH1 0x60 00001f27: ADD 00001f28: JUMPDEST 00001f29: PUSH1 0x40 00001f2b: MLOAD 00001f2c: DUP1 00001f2d: SWAP2 00001f2e: SUB 00001f2f: SWAP1 00001f30: LOG1 00001f31: POP 00001f32: POP 00001f33: POP 00001f34: JUMP 00001f35: JUMPDEST 00001f36: PUSH2 0x1f3d 00001f39: PUSH2 0x2142 00001f3c: JUMP 00001f3d: JUMPDEST 00001f3e: DUP2 00001f3f: ISZERO 00001f40: DUP1 00001f41: PUSH2 0x1f48 00001f44: JUMPI 00001f45: POP 00001f46: DUP1 00001f47: ISZERO 00001f48: JUMPDEST 00001f49: ISZERO 00001f4a: PUSH2 0x1f66 00001f4d: JUMPI 00001f4e: PUSH1 0x40 00001f50: MLOAD 00001f51: PUSH4 0x162908e3 00001f56: PUSH1 0xe1 00001f58: SHL 00001f59: DUP2 00001f5a: MSTORE 00001f5b: PUSH1 0x04 00001f5d: ADD 00001f5e: PUSH1 0x40 00001f60: MLOAD 00001f61: DUP1 00001f62: SWAP2 00001f63: SUB 00001f64: SWAP1 00001f65: REVERT 00001f66: JUMPDEST 00001f67: PUSH2 0x1f74 00001f6a: DUP5 00001f6b: ADDRESS 00001f6c: DUP5 00001f6d: PUSH2 0x1872 00001f70: PUSH2 0x0b0a 00001f73: JUMP 00001f74: JUMPDEST 00001f75: PUSH2 0x1f7e 00001f78: DUP4 00001f79: DUP3 00001f7a: PUSH2 0x21e5 00001f7d: JUMP 00001f7e: JUMPDEST 00001f7f: DUP2 00001f80: PUSH1 0x01 00001f82: PUSH1 0x00 00001f84: DUP3 00001f85: DUP3 00001f86: SLOAD 00001f87: PUSH2 0x1f90 00001f8a: SWAP2 00001f8b: SWAP1 00001f8c: PUSH2 0x31b0 00001f8f: JUMP 00001f90: JUMPDEST 00001f91: SWAP1 00001f92: SWAP2 00001f93: SSTORE 00001f94: POP 00001f95: POP 00001f96: PUSH1 0x40 00001f98: DUP1 00001f99: MLOAD 00001f9a: DUP4 00001f9b: DUP2 00001f9c: MSTORE 00001f9d: PUSH1 0x20 00001f9f: DUP2 00001fa0: ADD 00001fa1: DUP4 00001fa2: SWAP1 00001fa3: MSTORE 00001fa4: PUSH1 0x01 00001fa6: PUSH1 0x01 00001fa8: PUSH1 0xa0 00001faa: SHL 00001fab: SUB 00001fac: DUP1 00001fad: DUP7 00001fae: AND 00001faf: SWAP3 00001fb0: SWAP1 00001fb1: DUP8 00001fb2: AND 00001fb3: SWAP2 00001fb4: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7 00001fd5: SWAP2 00001fd6: ADD 00001fd7: PUSH1 0x40 00001fd9: MLOAD 00001fda: DUP1 00001fdb: SWAP2 00001fdc: SUB 00001fdd: SWAP1 00001fde: LOG3 00001fdf: PUSH2 0x1a31 00001fe2: PUSH1 0x01 00001fe4: PUSH1 0x00 00001fe6: DUP1 00001fe7: MLOAD 00001fe8: PUSH1 0x20 00001fea: PUSH2 0x3508 00001fed: DUP4 00001fee: CODECOPY 00001fef: DUP2 00001ff0: MLOAD 00001ff1: SWAP2 00001ff2: MSTORE 00001ff3: SSTORE 00001ff4: JUMP 00001ff5: JUMPDEST 00001ff6: PUSH1 0x00 00001ff8: PUSH2 0x1fff 00001ffb: PUSH2 0x0b0a 00001ffe: JUMP 00001fff: JUMPDEST 00002000: PUSH1 0x40 00002002: MLOAD 00002003: PUSH4 0x70a08231 00002008: PUSH1 0xe0 0000200a: SHL 0000200b: DUP2 0000200c: MSTORE 0000200d: ADDRESS 0000200e: PUSH1 0x04 00002010: DUP3 00002011: ADD 00002012: MSTORE 00002013: SWAP1 00002014: SWAP2 00002015: POP 00002016: DUP3 00002017: SWAP1 00002018: PUSH1 0x01 0000201a: PUSH1 0x01 0000201c: PUSH1 0xa0 0000201e: SHL 0000201f: SUB 00002020: DUP4 00002021: AND 00002022: SWAP1 00002023: PUSH4 0x70a08231 00002028: SWAP1 00002029: PUSH1 0x24 0000202b: ADD 0000202c: PUSH1 0x20 0000202e: PUSH1 0x40 00002030: MLOAD 00002031: DUP1 00002032: DUP4 00002033: SUB 00002034: DUP2 00002035: DUP7 00002036: GAS 00002037: STATICCALL 00002038: ISZERO 00002039: DUP1 0000203a: ISZERO 0000203b: PUSH2 0x2048 0000203e: JUMPI 0000203f: RETURNDATASIZE 00002040: PUSH1 0x00 00002042: DUP1 00002043: RETURNDATACOPY 00002044: RETURNDATASIZE 00002045: PUSH1 0x00 00002047: REVERT 00002048: JUMPDEST 00002049: POP 0000204a: POP 0000204b: POP 0000204c: POP 0000204d: PUSH1 0x40 0000204f: MLOAD 00002050: RETURNDATASIZE 00002051: PUSH1 0x1f 00002053: NOT 00002054: PUSH1 0x1f 00002056: DUP3 00002057: ADD 00002058: AND 00002059: DUP3 0000205a: ADD 0000205b: DUP1 0000205c: PUSH1 0x40 0000205e: MSTORE 0000205f: POP 00002060: DUP2 00002061: ADD 00002062: SWAP1 00002063: PUSH2 0x206c 00002066: SWAP2 00002067: SWAP1 00002068: PUSH2 0x32b9 0000206b: JUMP 0000206c: JUMPDEST 0000206d: LT 0000206e: ISZERO 0000206f: PUSH2 0x208b 00002072: JUMPI 00002073: PUSH1 0x40 00002075: MLOAD 00002076: PUSH4 0x41b77061 0000207b: PUSH1 0xe1 0000207d: SHL 0000207e: DUP2 0000207f: MSTORE 00002080: PUSH1 0x04 00002082: ADD 00002083: PUSH1 0x40 00002085: MLOAD 00002086: DUP1 00002087: SWAP2 00002088: SUB 00002089: SWAP1 0000208a: REVERT 0000208b: JUMPDEST 0000208c: PUSH2 0x1782 0000208f: PUSH1 0x01 00002091: PUSH1 0x01 00002093: PUSH1 0xa0 00002095: SHL 00002096: SUB 00002097: DUP3 00002098: AND 00002099: DUP5 0000209a: DUP5 0000209b: PUSH2 0x1b35 0000209e: JUMP 0000209f: JUMPDEST 000020a0: CALLER 000020a1: PUSH2 0x20a8 000020a4: PUSH2 0x11d6 000020a7: JUMP 000020a8: JUMPDEST 000020a9: PUSH1 0x01 000020ab: PUSH1 0x01 000020ad: PUSH1 0xa0 000020af: SHL 000020b0: SUB 000020b1: AND 000020b2: EQ 000020b3: PUSH2 0x1111 000020b6: JUMPI 000020b7: PUSH1 0x40 000020b9: MLOAD 000020ba: PUSH4 0x118cdaa7 000020bf: PUSH1 0xe0 000020c1: SHL 000020c2: DUP2 000020c3: MSTORE 000020c4: CALLER 000020c5: PUSH1 0x04 000020c7: DUP3 000020c8: ADD 000020c9: MSTORE 000020ca: PUSH1 0x24 000020cc: ADD 000020cd: PUSH2 0x0f49 000020d0: JUMP 000020d1: JUMPDEST 000020d2: PUSH32 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300 000020f3: DUP1 000020f4: SLOAD 000020f5: PUSH1 0x01 000020f7: PUSH1 0x01 000020f9: PUSH1 0xa0 000020fb: SHL 000020fc: SUB 000020fd: NOT 000020fe: DUP2 000020ff: AND 00002100: PUSH1 0x01 00002102: PUSH1 0x01 00002104: PUSH1 0xa0 00002106: SHL 00002107: SUB 00002108: DUP5 00002109: DUP2 0000210a: AND 0000210b: SWAP2 0000210c: DUP3 0000210d: OR 0000210e: DUP5 0000210f: SSTORE 00002110: PUSH1 0x40 00002112: MLOAD 00002113: SWAP3 00002114: AND 00002115: SWAP2 00002116: DUP3 00002117: SWAP1 00002118: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00002139: SWAP1 0000213a: PUSH1 0x00 0000213c: SWAP1 0000213d: LOG3 0000213e: POP 0000213f: POP 00002140: POP 00002141: JUMP 00002142: JUMPDEST 00002143: PUSH1 0x00 00002145: DUP1 00002146: MLOAD 00002147: PUSH1 0x20 00002149: PUSH2 0x3508 0000214c: DUP4 0000214d: CODECOPY 0000214e: DUP2 0000214f: MLOAD 00002150: SWAP2 00002151: MSTORE 00002152: DUP1 00002153: SLOAD 00002154: PUSH1 0x01 00002156: NOT 00002157: ADD 00002158: PUSH2 0x2174 0000215b: JUMPI 0000215c: PUSH1 0x40 0000215e: MLOAD 0000215f: PUSH4 0x3ee5aeb5 00002164: PUSH1 0xe0 00002166: SHL 00002167: DUP2 00002168: MSTORE 00002169: PUSH1 0x04 0000216b: ADD 0000216c: PUSH1 0x40 0000216e: MLOAD 0000216f: DUP1 00002170: SWAP2 00002171: SUB 00002172: SWAP1 00002173: REVERT 00002174: JUMPDEST 00002175: PUSH1 0x02 00002177: SWAP1 00002178: SSTORE 00002179: JUMP 0000217a: JUMPDEST 0000217b: PUSH1 0x00 0000217d: PUSH2 0x2184 00002180: PUSH2 0x1b2b 00002183: JUMP 00002184: JUMPDEST 00002185: PUSH1 0x01 00002187: PUSH1 0x01 00002189: PUSH1 0xa0 0000218b: SHL 0000218c: SUB 0000218d: AND 0000218e: PUSH4 0x4f0e0ef3 00002193: PUSH1 0x40 00002195: MLOAD 00002196: DUP2 00002197: PUSH4 0xffffffff 0000219c: AND 0000219d: PUSH1 0xe0 0000219f: SHL 000021a0: DUP2 000021a1: MSTORE 000021a2: PUSH1 0x04 000021a4: ADD 000021a5: PUSH1 0x20 000021a7: PUSH1 0x40 000021a9: MLOAD 000021aa: DUP1 000021ab: DUP4 000021ac: SUB 000021ad: DUP2 000021ae: DUP7 000021af: GAS 000021b0: STATICCALL 000021b1: ISZERO 000021b2: DUP1 000021b3: ISZERO 000021b4: PUSH2 0x21c1 000021b7: JUMPI 000021b8: RETURNDATASIZE 000021b9: PUSH1 0x00 000021bb: DUP1 000021bc: RETURNDATACOPY 000021bd: RETURNDATASIZE 000021be: PUSH1 0x00 000021c0: REVERT 000021c1: JUMPDEST 000021c2: POP 000021c3: POP 000021c4: POP 000021c5: POP 000021c6: PUSH1 0x40 000021c8: MLOAD 000021c9: RETURNDATASIZE 000021ca: PUSH1 0x1f 000021cc: NOT 000021cd: PUSH1 0x1f 000021cf: DUP3 000021d0: ADD 000021d1: AND 000021d2: DUP3 000021d3: ADD 000021d4: DUP1 000021d5: PUSH1 0x40 000021d7: MSTORE 000021d8: POP 000021d9: DUP2 000021da: ADD 000021db: SWAP1 000021dc: PUSH2 0x0930 000021df: SWAP2 000021e0: SWAP1 000021e1: PUSH2 0x32d2 000021e4: JUMP 000021e5: JUMPDEST 000021e6: PUSH1 0x01 000021e8: PUSH1 0x01 000021ea: PUSH1 0xa0 000021ec: SHL 000021ed: SUB 000021ee: DUP3 000021ef: AND 000021f0: PUSH2 0x220f 000021f3: JUMPI 000021f4: PUSH1 0x40 000021f6: MLOAD 000021f7: PUSH4 0xec442f05 000021fc: PUSH1 0xe0 000021fe: SHL 000021ff: DUP2 00002200: MSTORE 00002201: PUSH1 0x00 00002203: PUSH1 0x04 00002205: DUP3 00002206: ADD 00002207: MSTORE 00002208: PUSH1 0x24 0000220a: ADD 0000220b: PUSH2 0x0f49 0000220e: JUMP 0000220f: JUMPDEST 00002210: PUSH2 0x0c35 00002213: PUSH1 0x00 00002215: DUP4 00002216: DUP4 00002217: PUSH2 0x2587 0000221a: JUMP 0000221b: JUMPDEST 0000221c: PUSH1 0x01 0000221e: PUSH1 0x00 00002220: DUP1 00002221: MLOAD 00002222: PUSH1 0x20 00002224: PUSH2 0x3508 00002227: DUP4 00002228: CODECOPY 00002229: DUP2 0000222a: MLOAD 0000222b: SWAP2 0000222c: MSTORE 0000222d: SSTORE 0000222e: JUMP 0000222f: JUMPDEST 00002230: PUSH2 0x2237 00002233: PUSH2 0x2142 00002236: JUMP 00002237: JUMPDEST 00002238: DUP2 00002239: ISZERO 0000223a: DUP1 0000223b: PUSH2 0x2242 0000223e: JUMPI 0000223f: POP 00002240: DUP1 00002241: ISZERO 00002242: JUMPDEST 00002243: ISZERO 00002244: PUSH2 0x2260 00002247: JUMPI 00002248: PUSH1 0x40 0000224a: MLOAD 0000224b: PUSH4 0x162908e3 00002250: PUSH1 0xe1 00002252: SHL 00002253: DUP2 00002254: MSTORE 00002255: PUSH1 0x04 00002257: ADD 00002258: PUSH1 0x40 0000225a: MLOAD 0000225b: DUP1 0000225c: SWAP2 0000225d: SUB 0000225e: SWAP1 0000225f: REVERT 00002260: JUMPDEST 00002261: DUP3 00002262: PUSH1 0x01 00002264: PUSH1 0x01 00002266: PUSH1 0xa0 00002268: SHL 00002269: SUB 0000226a: AND 0000226b: DUP6 0000226c: PUSH1 0x01 0000226e: PUSH1 0x01 00002270: PUSH1 0xa0 00002272: SHL 00002273: SUB 00002274: AND 00002275: EQ 00002276: PUSH2 0x22a4 00002279: JUMPI 0000227a: PUSH2 0x2281 0000227d: PUSH2 0x2850 00002280: JUMP 00002281: JUMPDEST 00002282: PUSH1 0x01 00002284: PUSH1 0x01 00002286: PUSH1 0xa0 00002288: SHL 00002289: SUB 0000228a: AND 0000228b: DUP6 0000228c: PUSH1 0x01 0000228e: PUSH1 0x01 00002290: PUSH1 0xa0 00002292: SHL 00002293: SUB 00002294: AND 00002295: EQ 00002296: PUSH2 0x22a4 00002299: JUMPI 0000229a: PUSH2 0x22a4 0000229d: DUP4 0000229e: DUP7 0000229f: DUP4 000022a0: PUSH2 0x19e4 000022a3: JUMP 000022a4: JUMPDEST 000022a5: PUSH2 0x22ae 000022a8: DUP4 000022a9: DUP3 000022aa: PUSH2 0x2897 000022ad: JUMP 000022ae: JUMPDEST 000022af: DUP2 000022b0: PUSH1 0x01 000022b2: PUSH1 0x00 000022b4: DUP3 000022b5: DUP3 000022b6: SLOAD 000022b7: PUSH2 0x22c0 000022ba: SWAP2 000022bb: SWAP1 000022bc: PUSH2 0x312b 000022bf: JUMP 000022c0: JUMPDEST 000022c1: SWAP1 000022c2: SWAP2 000022c3: SSTORE 000022c4: POP 000022c5: POP 000022c6: PUSH1 0x00 000022c8: DUP1 000022c9: MLOAD 000022ca: PUSH1 0x20 000022cc: PUSH2 0x34c8 000022cf: DUP4 000022d0: CODECOPY 000022d1: DUP2 000022d2: MLOAD 000022d3: SWAP2 000022d4: MSTORE 000022d5: SLOAD 000022d6: PUSH1 0x00 000022d8: SUB 000022d9: PUSH2 0x22f1 000022dc: JUMPI 000022dd: PUSH1 0x01 000022df: SLOAD 000022e0: PUSH2 0x22e9 000022e3: SWAP1 000022e4: DUP4 000022e5: PUSH2 0x31b0 000022e8: JUMP 000022e9: JUMPDEST 000022ea: PUSH1 0x00 000022ec: PUSH1 0x01 000022ee: SSTORE 000022ef: SWAP2 000022f0: POP 000022f1: JUMPDEST 000022f2: PUSH2 0x22fe 000022f5: DUP5 000022f6: DUP4 000022f7: PUSH2 0x0c25 000022fa: PUSH2 0x0b0a 000022fd: JUMP 000022fe: JUMPDEST 000022ff: DUP3 00002300: PUSH1 0x01 00002302: PUSH1 0x01 00002304: PUSH1 0xa0 00002306: SHL 00002307: SUB 00002308: AND 00002309: DUP5 0000230a: PUSH1 0x01 0000230c: PUSH1 0x01 0000230e: PUSH1 0xa0 00002310: SHL 00002311: SUB 00002312: AND 00002313: DUP7 00002314: PUSH1 0x01 00002316: PUSH1 0x01 00002318: PUSH1 0xa0 0000231a: SHL 0000231b: SUB 0000231c: AND 0000231d: PUSH32 0xfbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db 0000233e: DUP6 0000233f: DUP6 00002340: PUSH1 0x40 00002342: MLOAD 00002343: PUSH2 0x2356 00002346: SWAP3 00002347: SWAP2 00002348: SWAP1 00002349: SWAP2 0000234a: DUP3 0000234b: MSTORE 0000234c: PUSH1 0x20 0000234e: DUP3 0000234f: ADD 00002350: MSTORE 00002351: PUSH1 0x40 00002353: ADD 00002354: SWAP1 00002355: JUMP 00002356: JUMPDEST 00002357: PUSH1 0x40 00002359: MLOAD 0000235a: DUP1 0000235b: SWAP2 0000235c: SUB 0000235d: SWAP1 0000235e: LOG4 0000235f: PUSH2 0x1c96 00002362: PUSH1 0x01 00002364: PUSH1 0x00 00002366: DUP1 00002367: MLOAD 00002368: PUSH1 0x20 0000236a: PUSH2 0x3508 0000236d: DUP4 0000236e: CODECOPY 0000236f: DUP2 00002370: MLOAD 00002371: SWAP2 00002372: MSTORE 00002373: SSTORE 00002374: JUMP 00002375: JUMPDEST 00002376: PUSH1 0x06 00002378: SLOAD 00002379: ISZERO 0000237a: DUP1 0000237b: ISZERO 0000237c: SWAP1 0000237d: PUSH2 0x2385 00002380: JUMPI 00002381: POP 00002382: DUP1 00002383: ISZERO 00002384: ISZERO 00002385: JUMPDEST 00002386: ISZERO 00002387: PUSH2 0x0c52 0000238a: JUMPI 0000238b: PUSH1 0x00 0000238d: PUSH2 0x2394 00002390: PUSH2 0x28cd 00002393: JUMP 00002394: JUMPDEST 00002395: SWAP1 00002396: POP 00002397: PUSH1 0x00 00002399: PUSH2 0x23bd 0000239c: PUSH2 0x2710 0000239f: PUSH1 0x06 000023a1: SLOAD 000023a2: DUP6 000023a3: PUSH2 0x23ac 000023a6: SWAP2 000023a7: SWAP1 000023a8: PUSH2 0x32ef 000023ab: JUMP 000023ac: JUMPDEST 000023ad: PUSH2 0x23b6 000023b0: SWAP2 000023b1: SWAP1 000023b2: PUSH2 0x331c 000023b5: JUMP 000023b6: JUMPDEST 000023b7: PUSH1 0x00 000023b9: PUSH2 0x19ac 000023bc: JUMP 000023bd: JUMPDEST 000023be: SWAP1 000023bf: POP 000023c0: DUP1 000023c1: ISZERO 000023c2: PUSH2 0x23cf 000023c5: JUMPI 000023c6: PUSH2 0x23cf 000023c9: DUP3 000023ca: DUP3 000023cb: PUSH2 0x21e5 000023ce: JUMP 000023cf: JUMPDEST 000023d0: PUSH1 0x40 000023d2: DUP1 000023d3: MLOAD 000023d4: DUP5 000023d5: DUP2 000023d6: MSTORE 000023d7: PUSH1 0x20 000023d9: DUP2 000023da: ADD 000023db: DUP4 000023dc: SWAP1 000023dd: MSTORE 000023de: PUSH1 0x01 000023e0: PUSH1 0x01 000023e2: PUSH1 0xa0 000023e4: SHL 000023e5: SUB 000023e6: DUP5 000023e7: AND 000023e8: SWAP2 000023e9: DUP2 000023ea: ADD 000023eb: SWAP2 000023ec: SWAP1 000023ed: SWAP2 000023ee: MSTORE 000023ef: PUSH32 0x7aac1d760c1303ffd477b8f4cbb620643af0e91b529c76a409d27c385d1dac7a 00002410: SWAP1 00002411: PUSH1 0x60 00002413: ADD 00002414: PUSH2 0x1f28 00002417: JUMP 00002418: JUMPDEST 00002419: PUSH1 0x40 0000241b: MLOAD 0000241c: PUSH1 0x01 0000241e: PUSH1 0x01 00002420: PUSH1 0xa0 00002422: SHL 00002423: SUB 00002424: DUP5 00002425: DUP2 00002426: AND 00002427: PUSH1 0x24 00002429: DUP4 0000242a: ADD 0000242b: MSTORE 0000242c: DUP4 0000242d: DUP2 0000242e: AND 0000242f: PUSH1 0x44 00002431: DUP4 00002432: ADD 00002433: MSTORE 00002434: PUSH1 0x64 00002436: DUP3 00002437: ADD 00002438: DUP4 00002439: SWAP1 0000243a: MSTORE 0000243b: PUSH2 0x1a31 0000243e: SWAP2 0000243f: DUP7 00002440: SWAP2 00002441: DUP3 00002442: AND 00002443: SWAP1 00002444: PUSH4 0x23b872dd 00002449: SWAP1 0000244a: PUSH1 0x84 0000244c: ADD 0000244d: PUSH2 0x1b62 00002450: JUMP 00002451: JUMPDEST 00002452: PUSH1 0x00 00002454: DUP1 00002455: PUSH2 0x245f 00002458: DUP7 00002459: DUP7 0000245a: DUP7 0000245b: PUSH2 0x2914 0000245e: JUMP 0000245f: JUMPDEST 00002460: SWAP1 00002461: POP 00002462: PUSH2 0x246a 00002465: DUP4 00002466: PUSH2 0x29d8 00002469: JUMP 0000246a: JUMPDEST 0000246b: DUP1 0000246c: ISZERO 0000246d: PUSH2 0x2486 00002470: JUMPI 00002471: POP 00002472: PUSH1 0x00 00002474: DUP5 00002475: DUP1 00002476: PUSH2 0x2481 00002479: JUMPI 0000247a: PUSH2 0x2481 0000247d: PUSH2 0x3306 00002480: JUMP 00002481: JUMPDEST 00002482: DUP7 00002483: DUP9 00002484: MULMOD 00002485: GT 00002486: JUMPDEST 00002487: ISZERO 00002488: PUSH2 0x1602 0000248b: JUMPI 0000248c: PUSH2 0x2496 0000248f: PUSH1 0x01 00002491: DUP3 00002492: PUSH2 0x31b0 00002495: JUMP 00002496: JUMPDEST 00002497: SWAP7 00002498: SWAP6 00002499: POP 0000249a: POP 0000249b: POP 0000249c: POP 0000249d: POP 0000249e: POP 0000249f: JUMP 000024a0: JUMPDEST 000024a1: PUSH1 0x00 000024a3: DUP1 000024a4: MLOAD 000024a5: PUSH1 0x20 000024a7: PUSH2 0x34a8 000024aa: DUP4 000024ab: CODECOPY 000024ac: DUP2 000024ad: MLOAD 000024ae: SWAP2 000024af: MSTORE 000024b0: PUSH1 0x01 000024b2: PUSH1 0x01 000024b4: PUSH1 0xa0 000024b6: SHL 000024b7: SUB 000024b8: DUP6 000024b9: AND 000024ba: PUSH2 0x24d9 000024bd: JUMPI 000024be: PUSH1 0x40 000024c0: MLOAD 000024c1: PUSH4 0xe602df05 000024c6: PUSH1 0xe0 000024c8: SHL 000024c9: DUP2 000024ca: MSTORE 000024cb: PUSH1 0x00 000024cd: PUSH1 0x04 000024cf: DUP3 000024d0: ADD 000024d1: MSTORE 000024d2: PUSH1 0x24 000024d4: ADD 000024d5: PUSH2 0x0f49 000024d8: JUMP 000024d9: JUMPDEST 000024da: PUSH1 0x01 000024dc: PUSH1 0x01 000024de: PUSH1 0xa0 000024e0: SHL 000024e1: SUB 000024e2: DUP5 000024e3: AND 000024e4: PUSH2 0x2503 000024e7: JUMPI 000024e8: PUSH1 0x40 000024ea: MLOAD 000024eb: PUSH4 0x4a1406b1 000024f0: PUSH1 0xe1 000024f2: SHL 000024f3: DUP2 000024f4: MSTORE 000024f5: PUSH1 0x00 000024f7: PUSH1 0x04 000024f9: DUP3 000024fa: ADD 000024fb: MSTORE 000024fc: PUSH1 0x24 000024fe: ADD 000024ff: PUSH2 0x0f49 00002502: JUMP 00002503: JUMPDEST 00002504: PUSH1 0x01 00002506: PUSH1 0x01 00002508: PUSH1 0xa0 0000250a: SHL 0000250b: SUB 0000250c: DUP1 0000250d: DUP7 0000250e: AND 0000250f: PUSH1 0x00 00002511: SWAP1 00002512: DUP2 00002513: MSTORE 00002514: PUSH1 0x01 00002516: DUP4 00002517: ADD 00002518: PUSH1 0x20 0000251a: SWAP1 0000251b: DUP2 0000251c: MSTORE 0000251d: PUSH1 0x40 0000251f: DUP1 00002520: DUP4 00002521: KECCAK256 00002522: SWAP4 00002523: DUP9 00002524: AND 00002525: DUP4 00002526: MSTORE 00002527: SWAP3 00002528: SWAP1 00002529: MSTORE 0000252a: KECCAK256 0000252b: DUP4 0000252c: SWAP1 0000252d: SSTORE 0000252e: DUP2 0000252f: ISZERO 00002530: PUSH2 0x1c96 00002533: JUMPI 00002534: DUP4 00002535: PUSH1 0x01 00002537: PUSH1 0x01 00002539: PUSH1 0xa0 0000253b: SHL 0000253c: SUB 0000253d: AND 0000253e: DUP6 0000253f: PUSH1 0x01 00002541: PUSH1 0x01 00002543: PUSH1 0xa0 00002545: SHL 00002546: SUB 00002547: AND 00002548: PUSH32 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 00002569: DUP6 0000256a: PUSH1 0x40 0000256c: MLOAD 0000256d: PUSH2 0x2578 00002570: SWAP2 00002571: DUP2 00002572: MSTORE 00002573: PUSH1 0x20 00002575: ADD 00002576: SWAP1 00002577: JUMP 00002578: JUMPDEST 00002579: PUSH1 0x40 0000257b: MLOAD 0000257c: DUP1 0000257d: SWAP2 0000257e: SUB 0000257f: SWAP1 00002580: LOG3 00002581: POP 00002582: POP 00002583: POP 00002584: POP 00002585: POP 00002586: JUMP 00002587: JUMPDEST 00002588: PUSH1 0x00 0000258a: DUP1 0000258b: MLOAD 0000258c: PUSH1 0x20 0000258e: PUSH2 0x34a8 00002591: DUP4 00002592: CODECOPY 00002593: DUP2 00002594: MLOAD 00002595: SWAP2 00002596: MSTORE 00002597: PUSH1 0x01 00002599: PUSH1 0x01 0000259b: PUSH1 0xa0 0000259d: SHL 0000259e: SUB 0000259f: DUP5 000025a0: AND 000025a1: PUSH2 0x25c3 000025a4: JUMPI 000025a5: DUP2 000025a6: DUP2 000025a7: PUSH1 0x02 000025a9: ADD 000025aa: PUSH1 0x00 000025ac: DUP3 000025ad: DUP3 000025ae: SLOAD 000025af: PUSH2 0x25b8 000025b2: SWAP2 000025b3: SWAP1 000025b4: PUSH2 0x31b0 000025b7: JUMP 000025b8: JUMPDEST 000025b9: SWAP1 000025ba: SWAP2 000025bb: SSTORE 000025bc: POP 000025bd: PUSH2 0x2622 000025c0: SWAP1 000025c1: POP 000025c2: JUMP 000025c3: JUMPDEST 000025c4: PUSH1 0x01 000025c6: PUSH1 0x01 000025c8: PUSH1 0xa0 000025ca: SHL 000025cb: SUB 000025cc: DUP5 000025cd: AND 000025ce: PUSH1 0x00 000025d0: SWAP1 000025d1: DUP2 000025d2: MSTORE 000025d3: PUSH1 0x20 000025d5: DUP3 000025d6: SWAP1 000025d7: MSTORE 000025d8: PUSH1 0x40 000025da: SWAP1 000025db: KECCAK256 000025dc: SLOAD 000025dd: DUP3 000025de: DUP2 000025df: LT 000025e0: ISZERO 000025e1: PUSH2 0x2603 000025e4: JUMPI 000025e5: DUP5 000025e6: DUP2 000025e7: DUP5 000025e8: PUSH1 0x40 000025ea: MLOAD 000025eb: PUSH4 0x391434e3 000025f0: PUSH1 0xe2 000025f2: SHL 000025f3: DUP2 000025f4: MSTORE 000025f5: PUSH1 0x04 000025f7: ADD 000025f8: PUSH2 0x0f49 000025fb: SWAP4 000025fc: SWAP3 000025fd: SWAP2 000025fe: SWAP1 000025ff: PUSH2 0x318f 00002602: JUMP 00002603: JUMPDEST 00002604: PUSH1 0x01 00002606: PUSH1 0x01 00002608: PUSH1 0xa0 0000260a: SHL 0000260b: SUB 0000260c: DUP6 0000260d: AND 0000260e: PUSH1 0x00 00002610: SWAP1 00002611: DUP2 00002612: MSTORE 00002613: PUSH1 0x20 00002615: DUP4 00002616: SWAP1 00002617: MSTORE 00002618: PUSH1 0x40 0000261a: SWAP1 0000261b: KECCAK256 0000261c: SWAP1 0000261d: DUP4 0000261e: SWAP1 0000261f: SUB 00002620: SWAP1 00002621: SSTORE 00002622: JUMPDEST 00002623: PUSH1 0x01 00002625: PUSH1 0x01 00002627: PUSH1 0xa0 00002629: SHL 0000262a: SUB 0000262b: DUP4 0000262c: AND 0000262d: PUSH2 0x2640 00002630: JUMPI 00002631: PUSH1 0x02 00002633: DUP2 00002634: ADD 00002635: DUP1 00002636: SLOAD 00002637: DUP4 00002638: SWAP1 00002639: SUB 0000263a: SWAP1 0000263b: SSTORE 0000263c: PUSH2 0x265f 0000263f: JUMP 00002640: JUMPDEST 00002641: PUSH1 0x01 00002643: PUSH1 0x01 00002645: PUSH1 0xa0 00002647: SHL 00002648: SUB 00002649: DUP4 0000264a: AND 0000264b: PUSH1 0x00 0000264d: SWAP1 0000264e: DUP2 0000264f: MSTORE 00002650: PUSH1 0x20 00002652: DUP3 00002653: SWAP1 00002654: MSTORE 00002655: PUSH1 0x40 00002657: SWAP1 00002658: KECCAK256 00002659: DUP1 0000265a: SLOAD 0000265b: DUP4 0000265c: ADD 0000265d: SWAP1 0000265e: SSTORE 0000265f: JUMPDEST 00002660: DUP3 00002661: PUSH1 0x01 00002663: PUSH1 0x01 00002665: PUSH1 0xa0 00002667: SHL 00002668: SUB 00002669: AND 0000266a: DUP5 0000266b: PUSH1 0x01 0000266d: PUSH1 0x01 0000266f: PUSH1 0xa0 00002671: SHL 00002672: SUB 00002673: AND 00002674: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 00002695: DUP5 00002696: PUSH1 0x40 00002698: MLOAD 00002699: PUSH2 0x26a4 0000269c: SWAP2 0000269d: DUP2 0000269e: MSTORE 0000269f: PUSH1 0x20 000026a1: ADD 000026a2: SWAP1 000026a3: JUMP 000026a4: JUMPDEST 000026a5: PUSH1 0x40 000026a7: MLOAD 000026a8: DUP1 000026a9: SWAP2 000026aa: SUB 000026ab: SWAP1 000026ac: LOG3 000026ad: POP 000026ae: POP 000026af: POP 000026b0: POP 000026b1: JUMP 000026b2: JUMPDEST 000026b3: PUSH2 0x26ba 000026b6: PUSH2 0x1a96 000026b9: JUMP 000026ba: JUMPDEST 000026bb: PUSH1 0x00 000026bd: DUP1 000026be: MLOAD 000026bf: PUSH1 0x20 000026c1: PUSH2 0x34a8 000026c4: DUP4 000026c5: CODECOPY 000026c6: DUP2 000026c7: MLOAD 000026c8: SWAP2 000026c9: MSTORE 000026ca: PUSH32 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03 000026eb: PUSH2 0x26f4 000026ee: DUP5 000026ef: DUP3 000026f0: PUSH2 0x3377 000026f3: JUMP 000026f4: JUMPDEST 000026f5: POP 000026f6: PUSH1 0x04 000026f8: DUP2 000026f9: ADD 000026fa: PUSH2 0x1a31 000026fd: DUP4 000026fe: DUP3 000026ff: PUSH2 0x3377 00002702: JUMP 00002703: JUMPDEST 00002704: PUSH2 0x18ea 00002707: PUSH2 0x1a96 0000270a: JUMP 0000270b: JUMPDEST 0000270c: PUSH2 0x2713 0000270f: PUSH2 0x1a96 00002712: JUMP 00002713: JUMPDEST 00002714: PUSH32 0x0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00 00002735: PUSH1 0x00 00002737: DUP1 00002738: PUSH2 0x2740 0000273b: DUP5 0000273c: PUSH2 0x2a05 0000273f: JUMP 00002740: JUMPDEST 00002741: SWAP2 00002742: POP 00002743: SWAP2 00002744: POP 00002745: DUP2 00002746: PUSH2 0x2750 00002749: JUMPI 0000274a: PUSH1 0x12 0000274c: PUSH2 0x2752 0000274f: JUMP 00002750: JUMPDEST 00002751: DUP1 00002752: JUMPDEST 00002753: DUP4 00002754: SLOAD 00002755: PUSH1 0x01 00002757: PUSH1 0x01 00002759: PUSH1 0xa8 0000275b: SHL 0000275c: SUB 0000275d: NOT 0000275e: AND 0000275f: PUSH1 0x01 00002761: PUSH1 0xa0 00002763: SHL 00002764: PUSH1 0xff 00002766: SWAP3 00002767: SWAP1 00002768: SWAP3 00002769: AND 0000276a: SWAP2 0000276b: SWAP1 0000276c: SWAP2 0000276d: MUL 0000276e: PUSH1 0x01 00002770: PUSH1 0x01 00002772: PUSH1 0xa0 00002774: SHL 00002775: SUB 00002776: NOT 00002777: AND 00002778: OR 00002779: PUSH1 0x01 0000277b: PUSH1 0x01 0000277d: PUSH1 0xa0 0000277f: SHL 00002780: SUB 00002781: SWAP5 00002782: SWAP1 00002783: SWAP5 00002784: AND 00002785: SWAP4 00002786: SWAP1 00002787: SWAP4 00002788: OR 00002789: SWAP1 0000278a: SWAP2 0000278b: SSTORE 0000278c: POP 0000278d: POP 0000278e: JUMP 0000278f: JUMPDEST 00002790: PUSH2 0x221b 00002793: PUSH2 0x1a96 00002796: JUMP 00002797: JUMPDEST 00002798: PUSH1 0x00 0000279a: PUSH2 0x27ac 0000279d: PUSH1 0x01 0000279f: PUSH1 0x01 000027a1: PUSH1 0xa0 000027a3: SHL 000027a4: SUB 000027a5: DUP5 000027a6: AND 000027a7: DUP4 000027a8: PUSH2 0x2ae1 000027ab: JUMP 000027ac: JUMPDEST 000027ad: SWAP1 000027ae: POP 000027af: DUP1 000027b0: MLOAD 000027b1: PUSH1 0x00 000027b3: EQ 000027b4: ISZERO 000027b5: DUP1 000027b6: ISZERO 000027b7: PUSH2 0x27d1 000027ba: JUMPI 000027bb: POP 000027bc: DUP1 000027bd: DUP1 000027be: PUSH1 0x20 000027c0: ADD 000027c1: SWAP1 000027c2: MLOAD 000027c3: DUP2 000027c4: ADD 000027c5: SWAP1 000027c6: PUSH2 0x27cf 000027c9: SWAP2 000027ca: SWAP1 000027cb: PUSH2 0x3436 000027ce: JUMP 000027cf: JUMPDEST 000027d0: ISZERO 000027d1: JUMPDEST 000027d2: ISZERO 000027d3: PUSH2 0x1782 000027d6: JUMPI 000027d7: PUSH1 0x40 000027d9: MLOAD 000027da: PUSH4 0x5274afe7 000027df: PUSH1 0xe0 000027e1: SHL 000027e2: DUP2 000027e3: MSTORE 000027e4: PUSH1 0x01 000027e6: PUSH1 0x01 000027e8: PUSH1 0xa0 000027ea: SHL 000027eb: SUB 000027ec: DUP5 000027ed: AND 000027ee: PUSH1 0x04 000027f0: DUP3 000027f1: ADD 000027f2: MSTORE 000027f3: PUSH1 0x24 000027f5: ADD 000027f6: PUSH2 0x0f49 000027f9: JUMP 000027fa: JUMPDEST 000027fb: PUSH2 0x2803 000027fe: DUP3 000027ff: PUSH2 0x2aef 00002802: JUMP 00002803: JUMPDEST 00002804: PUSH1 0x40 00002806: MLOAD 00002807: PUSH1 0x01 00002809: PUSH1 0x01 0000280b: PUSH1 0xa0 0000280d: SHL 0000280e: SUB 0000280f: DUP4 00002810: AND 00002811: SWAP1 00002812: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b 00002833: SWAP1 00002834: PUSH1 0x00 00002836: SWAP1 00002837: LOG2 00002838: DUP1 00002839: MLOAD 0000283a: ISZERO 0000283b: PUSH2 0x2848 0000283e: JUMPI 0000283f: PUSH2 0x1782 00002842: DUP3 00002843: DUP3 00002844: PUSH2 0x2b54 00002847: JUMP 00002848: JUMPDEST 00002849: PUSH2 0x0c35 0000284c: PUSH2 0x2bc1 0000284f: JUMP 00002850: JUMPDEST 00002851: PUSH1 0x00 00002853: PUSH2 0x285a 00002856: PUSH2 0x1b2b 00002859: JUMP 0000285a: JUMPDEST 0000285b: PUSH1 0x01 0000285d: PUSH1 0x01 0000285f: PUSH1 0xa0 00002861: SHL 00002862: SUB 00002863: AND 00002864: PUSH4 0xea81ec6f 00002869: PUSH1 0x40 0000286b: MLOAD 0000286c: DUP2 0000286d: PUSH4 0xffffffff 00002872: AND 00002873: PUSH1 0xe0 00002875: SHL 00002876: DUP2 00002877: MSTORE 00002878: PUSH1 0x04 0000287a: ADD 0000287b: PUSH1 0x20 0000287d: PUSH1 0x40 0000287f: MLOAD 00002880: DUP1 00002881: DUP4 00002882: SUB 00002883: DUP2 00002884: DUP7 00002885: GAS 00002886: STATICCALL 00002887: ISZERO 00002888: DUP1 00002889: ISZERO 0000288a: PUSH2 0x21c1 0000288d: JUMPI 0000288e: RETURNDATASIZE 0000288f: PUSH1 0x00 00002891: DUP1 00002892: RETURNDATACOPY 00002893: RETURNDATASIZE 00002894: PUSH1 0x00 00002896: REVERT 00002897: JUMPDEST 00002898: PUSH1 0x01 0000289a: PUSH1 0x01 0000289c: PUSH1 0xa0 0000289e: SHL 0000289f: SUB 000028a0: DUP3 000028a1: AND 000028a2: PUSH2 0x28c1 000028a5: JUMPI 000028a6: PUSH1 0x40 000028a8: MLOAD 000028a9: PUSH4 0x4b637e8f 000028ae: PUSH1 0xe1 000028b0: SHL 000028b1: DUP2 000028b2: MSTORE 000028b3: PUSH1 0x00 000028b5: PUSH1 0x04 000028b7: DUP3 000028b8: ADD 000028b9: MSTORE 000028ba: PUSH1 0x24 000028bc: ADD 000028bd: PUSH2 0x0f49 000028c0: JUMP 000028c1: JUMPDEST 000028c2: PUSH2 0x0c35 000028c5: DUP3 000028c6: PUSH1 0x00 000028c8: DUP4 000028c9: PUSH2 0x2587 000028cc: JUMP 000028cd: JUMPDEST 000028ce: PUSH1 0x00 000028d0: PUSH2 0x28d7 000028d3: PUSH2 0x1b2b 000028d6: JUMP 000028d7: JUMPDEST 000028d8: PUSH1 0x01 000028da: PUSH1 0x01 000028dc: PUSH1 0xa0 000028de: SHL 000028df: SUB 000028e0: AND 000028e1: PUSH4 0xb3f00674 000028e6: PUSH1 0x40 000028e8: MLOAD 000028e9: DUP2 000028ea: PUSH4 0xffffffff 000028ef: AND 000028f0: PUSH1 0xe0 000028f2: SHL 000028f3: DUP2 000028f4: MSTORE 000028f5: PUSH1 0x04 000028f7: ADD 000028f8: PUSH1 0x20 000028fa: PUSH1 0x40 000028fc: MLOAD 000028fd: DUP1 000028fe: DUP4 000028ff: SUB 00002900: DUP2 00002901: DUP7 00002902: GAS 00002903: STATICCALL 00002904: ISZERO 00002905: DUP1 00002906: ISZERO 00002907: PUSH2 0x21c1 0000290a: JUMPI 0000290b: RETURNDATASIZE 0000290c: PUSH1 0x00 0000290e: DUP1 0000290f: RETURNDATACOPY 00002910: RETURNDATASIZE 00002911: PUSH1 0x00 00002913: REVERT 00002914: JUMPDEST 00002915: PUSH1 0x00 00002917: DUP4 00002918: DUP4 00002919: MUL 0000291a: DUP2 0000291b: PUSH1 0x00 0000291d: NOT 0000291e: DUP6 0000291f: DUP8 00002920: MULMOD 00002921: DUP3 00002922: DUP2 00002923: LT 00002924: DUP4 00002925: DUP3 00002926: SUB 00002927: SUB 00002928: SWAP2 00002929: POP 0000292a: POP 0000292b: DUP1 0000292c: PUSH1 0x00 0000292e: SUB 0000292f: PUSH2 0x294b 00002932: JUMPI 00002933: DUP4 00002934: DUP3 00002935: DUP2 00002936: PUSH2 0x2941 00002939: JUMPI 0000293a: PUSH2 0x2941 0000293d: PUSH2 0x3306 00002940: JUMP 00002941: JUMPDEST 00002942: DIV 00002943: SWAP3 00002944: POP 00002945: POP 00002946: POP 00002947: PUSH2 0x0a4f 0000294a: JUMP 0000294b: JUMPDEST 0000294c: DUP1 0000294d: DUP5 0000294e: GT 0000294f: PUSH2 0x296b 00002952: JUMPI 00002953: PUSH1 0x40 00002955: MLOAD 00002956: PUSH4 0x227bc153 0000295b: PUSH1 0xe0 0000295d: SHL 0000295e: DUP2 0000295f: MSTORE 00002960: PUSH1 0x04 00002962: ADD 00002963: PUSH1 0x40 00002965: MLOAD 00002966: DUP1 00002967: SWAP2 00002968: SUB 00002969: SWAP1 0000296a: REVERT 0000296b: JUMPDEST 0000296c: PUSH1 0x00 0000296e: DUP5 0000296f: DUP7 00002970: DUP9 00002971: MULMOD 00002972: PUSH1 0x00 00002974: DUP7 00002975: DUP2 00002976: SUB 00002977: DUP8 00002978: AND 00002979: SWAP7 0000297a: DUP8 0000297b: SWAP1 0000297c: DIV 0000297d: SWAP7 0000297e: PUSH1 0x02 00002980: PUSH1 0x03 00002982: DUP10 00002983: MUL 00002984: DUP2 00002985: XOR 00002986: DUP1 00002987: DUP11 00002988: MUL 00002989: DUP3 0000298a: SUB 0000298b: MUL 0000298c: DUP1 0000298d: DUP11 0000298e: MUL 0000298f: DUP3 00002990: SUB 00002991: MUL 00002992: DUP1 00002993: DUP11 00002994: MUL 00002995: DUP3 00002996: SUB 00002997: MUL 00002998: DUP1 00002999: DUP11 0000299a: MUL 0000299b: DUP3 0000299c: SUB 0000299d: MUL 0000299e: DUP1 0000299f: DUP11 000029a0: MUL 000029a1: DUP3 000029a2: SUB 000029a3: MUL 000029a4: DUP1 000029a5: DUP11 000029a6: MUL 000029a7: SWAP1 000029a8: SWAP2 000029a9: SUB 000029aa: MUL 000029ab: SWAP2 000029ac: DUP2 000029ad: SWAP1 000029ae: SUB 000029af: DUP2 000029b0: SWAP1 000029b1: DIV 000029b2: PUSH1 0x01 000029b4: ADD 000029b5: DUP7 000029b6: DUP5 000029b7: GT 000029b8: SWAP1 000029b9: SWAP6 000029ba: SUB 000029bb: SWAP5 000029bc: SWAP1 000029bd: SWAP5 000029be: MUL 000029bf: SWAP2 000029c0: SWAP1 000029c1: SWAP5 000029c2: SUB 000029c3: SWAP3 000029c4: SWAP1 000029c5: SWAP3 000029c6: DIV 000029c7: SWAP2 000029c8: SWAP1 000029c9: SWAP2 000029ca: OR 000029cb: SWAP2 000029cc: SWAP1 000029cd: SWAP2 000029ce: MUL 000029cf: SWAP2 000029d0: POP 000029d1: POP 000029d2: SWAP4 000029d3: SWAP3 000029d4: POP 000029d5: POP 000029d6: POP 000029d7: JUMP 000029d8: JUMPDEST 000029d9: PUSH1 0x00 000029db: PUSH1 0x02 000029dd: DUP3 000029de: PUSH1 0x03 000029e0: DUP2 000029e1: GT 000029e2: ISZERO 000029e3: PUSH2 0x29ee 000029e6: JUMPI 000029e7: PUSH2 0x29ee 000029ea: PUSH2 0x3453 000029ed: JUMP 000029ee: JUMPDEST 000029ef: PUSH2 0x29f8 000029f2: SWAP2 000029f3: SWAP1 000029f4: PUSH2 0x3469 000029f7: JUMP 000029f8: JUMPDEST 000029f9: PUSH1 0xff 000029fb: AND 000029fc: PUSH1 0x01 000029fe: EQ 000029ff: SWAP1 00002a00: POP 00002a01: SWAP2 00002a02: SWAP1 00002a03: POP 00002a04: JUMP 00002a05: JUMPDEST 00002a06: PUSH1 0x40 00002a08: DUP1 00002a09: MLOAD 00002a0a: PUSH1 0x04 00002a0c: DUP2 00002a0d: MSTORE 00002a0e: PUSH1 0x24 00002a10: DUP2 00002a11: ADD 00002a12: DUP3 00002a13: MSTORE 00002a14: PUSH1 0x20 00002a16: DUP2 00002a17: ADD 00002a18: DUP1 00002a19: MLOAD 00002a1a: PUSH1 0x01 00002a1c: PUSH1 0x01 00002a1e: PUSH1 0xe0 00002a20: SHL 00002a21: SUB 00002a22: AND 00002a23: PUSH4 0x313ce567 00002a28: PUSH1 0xe0 00002a2a: SHL 00002a2b: OR 00002a2c: SWAP1 00002a2d: MSTORE 00002a2e: SWAP1 00002a2f: MLOAD 00002a30: PUSH1 0x00 00002a32: SWAP2 00002a33: DUP3 00002a34: SWAP2 00002a35: DUP3 00002a36: SWAP2 00002a37: DUP3 00002a38: SWAP2 00002a39: PUSH1 0x01 00002a3b: PUSH1 0x01 00002a3d: PUSH1 0xa0 00002a3f: SHL 00002a40: SUB 00002a41: DUP8 00002a42: AND 00002a43: SWAP2 00002a44: PUSH2 0x2a4c 00002a47: SWAP2 00002a48: PUSH2 0x348b 00002a4b: JUMP 00002a4c: JUMPDEST 00002a4d: PUSH1 0x00 00002a4f: PUSH1 0x40 00002a51: MLOAD 00002a52: DUP1 00002a53: DUP4 00002a54: SUB 00002a55: DUP2 00002a56: DUP6 00002a57: GAS 00002a58: STATICCALL 00002a59: SWAP2 00002a5a: POP 00002a5b: POP 00002a5c: RETURNDATASIZE 00002a5d: DUP1 00002a5e: PUSH1 0x00 00002a60: DUP2 00002a61: EQ 00002a62: PUSH2 0x2a87 00002a65: JUMPI 00002a66: PUSH1 0x40 00002a68: MLOAD 00002a69: SWAP2 00002a6a: POP 00002a6b: PUSH1 0x1f 00002a6d: NOT 00002a6e: PUSH1 0x3f 00002a70: RETURNDATASIZE 00002a71: ADD 00002a72: AND 00002a73: DUP3 00002a74: ADD 00002a75: PUSH1 0x40 00002a77: MSTORE 00002a78: RETURNDATASIZE 00002a79: DUP3 00002a7a: MSTORE 00002a7b: RETURNDATASIZE 00002a7c: PUSH1 0x00 00002a7e: PUSH1 0x20 00002a80: DUP5 00002a81: ADD 00002a82: RETURNDATACOPY 00002a83: PUSH2 0x2a8c 00002a86: JUMP 00002a87: JUMPDEST 00002a88: PUSH1 0x60 00002a8a: SWAP2 00002a8b: POP 00002a8c: JUMPDEST 00002a8d: POP 00002a8e: SWAP2 00002a8f: POP 00002a90: SWAP2 00002a91: POP 00002a92: DUP2 00002a93: DUP1 00002a94: ISZERO 00002a95: PUSH2 0x2aa0 00002a98: JUMPI 00002a99: POP 00002a9a: PUSH1 0x20 00002a9c: DUP2 00002a9d: MLOAD 00002a9e: LT 00002a9f: ISZERO 00002aa0: JUMPDEST 00002aa1: ISZERO 00002aa2: PUSH2 0x2ad4 00002aa5: JUMPI 00002aa6: PUSH1 0x00 00002aa8: DUP2 00002aa9: DUP1 00002aaa: PUSH1 0x20 00002aac: ADD 00002aad: SWAP1 00002aae: MLOAD 00002aaf: DUP2 00002ab0: ADD 00002ab1: SWAP1 00002ab2: PUSH2 0x2abb 00002ab5: SWAP2 00002ab6: SWAP1 00002ab7: PUSH2 0x32b9 00002aba: JUMP 00002abb: JUMPDEST 00002abc: SWAP1 00002abd: POP 00002abe: PUSH1 0xff 00002ac0: DUP2 00002ac1: GT 00002ac2: PUSH2 0x2ad2 00002ac5: JUMPI 00002ac6: PUSH1 0x01 00002ac8: SWAP7 00002ac9: SWAP1 00002aca: SWAP6 00002acb: POP 00002acc: SWAP4 00002acd: POP 00002ace: POP 00002acf: POP 00002ad0: POP 00002ad1: JUMP 00002ad2: JUMPDEST 00002ad3: POP 00002ad4: JUMPDEST 00002ad5: POP 00002ad6: PUSH1 0x00 00002ad8: SWAP5 00002ad9: DUP6 00002ada: SWAP5 00002adb: POP 00002adc: SWAP3 00002add: POP 00002ade: POP 00002adf: POP 00002ae0: JUMP 00002ae1: JUMPDEST 00002ae2: PUSH1 0x60 00002ae4: PUSH2 0x0a4f 00002ae7: DUP4 00002ae8: DUP4 00002ae9: PUSH1 0x00 00002aeb: PUSH2 0x2be0 00002aee: JUMP 00002aef: JUMPDEST 00002af0: DUP1 00002af1: PUSH1 0x01 00002af3: PUSH1 0x01 00002af5: PUSH1 0xa0 00002af7: SHL 00002af8: SUB 00002af9: AND 00002afa: EXTCODESIZE 00002afb: PUSH1 0x00 00002afd: SUB 00002afe: PUSH2 0x2b25 00002b01: JUMPI 00002b02: PUSH1 0x40 00002b04: MLOAD 00002b05: PUSH4 0x4c9c8ce3 00002b0a: PUSH1 0xe0 00002b0c: SHL 00002b0d: DUP2 00002b0e: MSTORE 00002b0f: PUSH1 0x01 00002b11: PUSH1 0x01 00002b13: PUSH1 0xa0 00002b15: SHL 00002b16: SUB 00002b17: DUP3 00002b18: AND 00002b19: PUSH1 0x04 00002b1b: DUP3 00002b1c: ADD 00002b1d: MSTORE 00002b1e: PUSH1 0x24 00002b20: ADD 00002b21: PUSH2 0x0f49 00002b24: JUMP 00002b25: JUMPDEST 00002b26: PUSH1 0x00 00002b28: DUP1 00002b29: MLOAD 00002b2a: PUSH1 0x20 00002b2c: PUSH2 0x34e8 00002b2f: DUP4 00002b30: CODECOPY 00002b31: DUP2 00002b32: MLOAD 00002b33: SWAP2 00002b34: MSTORE 00002b35: DUP1 00002b36: SLOAD 00002b37: PUSH1 0x01 00002b39: PUSH1 0x01 00002b3b: PUSH1 0xa0 00002b3d: SHL 00002b3e: SUB 00002b3f: NOT 00002b40: AND 00002b41: PUSH1 0x01 00002b43: PUSH1 0x01 00002b45: PUSH1 0xa0 00002b47: SHL 00002b48: SUB 00002b49: SWAP3 00002b4a: SWAP1 00002b4b: SWAP3 00002b4c: AND 00002b4d: SWAP2 00002b4e: SWAP1 00002b4f: SWAP2 00002b50: OR 00002b51: SWAP1 00002b52: SSTORE 00002b53: JUMP 00002b54: JUMPDEST 00002b55: PUSH1 0x60 00002b57: PUSH1 0x00 00002b59: DUP1 00002b5a: DUP5 00002b5b: PUSH1 0x01 00002b5d: PUSH1 0x01 00002b5f: PUSH1 0xa0 00002b61: SHL 00002b62: SUB 00002b63: AND 00002b64: DUP5 00002b65: PUSH1 0x40 00002b67: MLOAD 00002b68: PUSH2 0x2b71 00002b6b: SWAP2 00002b6c: SWAP1 00002b6d: PUSH2 0x348b 00002b70: JUMP 00002b71: JUMPDEST 00002b72: PUSH1 0x00 00002b74: PUSH1 0x40 00002b76: MLOAD 00002b77: DUP1 00002b78: DUP4 00002b79: SUB 00002b7a: DUP2 00002b7b: DUP6 00002b7c: GAS 00002b7d: DELEGATECALL 00002b7e: SWAP2 00002b7f: POP 00002b80: POP 00002b81: RETURNDATASIZE 00002b82: DUP1 00002b83: PUSH1 0x00 00002b85: DUP2 00002b86: EQ 00002b87: PUSH2 0x2bac 00002b8a: JUMPI 00002b8b: PUSH1 0x40 00002b8d: MLOAD 00002b8e: SWAP2 00002b8f: POP 00002b90: PUSH1 0x1f 00002b92: NOT 00002b93: PUSH1 0x3f 00002b95: RETURNDATASIZE 00002b96: ADD 00002b97: AND 00002b98: DUP3 00002b99: ADD 00002b9a: PUSH1 0x40 00002b9c: MSTORE 00002b9d: RETURNDATASIZE 00002b9e: DUP3 00002b9f: MSTORE 00002ba0: RETURNDATASIZE 00002ba1: PUSH1 0x00 00002ba3: PUSH1 0x20 00002ba5: DUP5 00002ba6: ADD 00002ba7: RETURNDATACOPY 00002ba8: PUSH2 0x2bb1 00002bab: JUMP 00002bac: JUMPDEST 00002bad: PUSH1 0x60 00002baf: SWAP2 00002bb0: POP 00002bb1: JUMPDEST 00002bb2: POP 00002bb3: SWAP2 00002bb4: POP 00002bb5: SWAP2 00002bb6: POP 00002bb7: PUSH2 0x1602 00002bba: DUP6 00002bbb: DUP4 00002bbc: DUP4 00002bbd: PUSH2 0x2c6f 00002bc0: JUMP 00002bc1: JUMPDEST 00002bc2: CALLVALUE 00002bc3: ISZERO 00002bc4: PUSH2 0x1111 00002bc7: JUMPI 00002bc8: PUSH1 0x40 00002bca: MLOAD 00002bcb: PUSH4 0xb398979f 00002bd0: PUSH1 0xe0 00002bd2: SHL 00002bd3: DUP2 00002bd4: MSTORE 00002bd5: PUSH1 0x04 00002bd7: ADD 00002bd8: PUSH1 0x40 00002bda: MLOAD 00002bdb: DUP1 00002bdc: SWAP2 00002bdd: SUB 00002bde: SWAP1 00002bdf: REVERT 00002be0: JUMPDEST 00002be1: PUSH1 0x60 00002be3: DUP2 00002be4: SELFBALANCE 00002be5: LT 00002be6: ISZERO 00002be7: PUSH2 0x2c05 00002bea: JUMPI 00002beb: PUSH1 0x40 00002bed: MLOAD 00002bee: PUSH4 0xcd786059 00002bf3: PUSH1 0xe0 00002bf5: SHL 00002bf6: DUP2 00002bf7: MSTORE 00002bf8: ADDRESS 00002bf9: PUSH1 0x04 00002bfb: DUP3 00002bfc: ADD 00002bfd: MSTORE 00002bfe: PUSH1 0x24 00002c00: ADD 00002c01: PUSH2 0x0f49 00002c04: JUMP 00002c05: JUMPDEST 00002c06: PUSH1 0x00 00002c08: DUP1 00002c09: DUP6 00002c0a: PUSH1 0x01 00002c0c: PUSH1 0x01 00002c0e: PUSH1 0xa0 00002c10: SHL 00002c11: SUB 00002c12: AND 00002c13: DUP5 00002c14: DUP7 00002c15: PUSH1 0x40 00002c17: MLOAD 00002c18: PUSH2 0x2c21 00002c1b: SWAP2 00002c1c: SWAP1 00002c1d: PUSH2 0x348b 00002c20: JUMP 00002c21: JUMPDEST 00002c22: PUSH1 0x00 00002c24: PUSH1 0x40 00002c26: MLOAD 00002c27: DUP1 00002c28: DUP4 00002c29: SUB 00002c2a: DUP2 00002c2b: DUP6 00002c2c: DUP8 00002c2d: GAS 00002c2e: CALL 00002c2f: SWAP3 00002c30: POP 00002c31: POP 00002c32: POP 00002c33: RETURNDATASIZE 00002c34: DUP1 00002c35: PUSH1 0x00 00002c37: DUP2 00002c38: EQ 00002c39: PUSH2 0x2c5e 00002c3c: JUMPI 00002c3d: PUSH1 0x40 00002c3f: MLOAD 00002c40: SWAP2 00002c41: POP 00002c42: PUSH1 0x1f 00002c44: NOT 00002c45: PUSH1 0x3f 00002c47: RETURNDATASIZE 00002c48: ADD 00002c49: AND 00002c4a: DUP3 00002c4b: ADD 00002c4c: PUSH1 0x40 00002c4e: MSTORE 00002c4f: RETURNDATASIZE 00002c50: DUP3 00002c51: MSTORE 00002c52: RETURNDATASIZE 00002c53: PUSH1 0x00 00002c55: PUSH1 0x20 00002c57: DUP5 00002c58: ADD 00002c59: RETURNDATACOPY 00002c5a: PUSH2 0x2c63 00002c5d: JUMP 00002c5e: JUMPDEST 00002c5f: PUSH1 0x60 00002c61: SWAP2 00002c62: POP 00002c63: JUMPDEST 00002c64: POP 00002c65: SWAP2 00002c66: POP 00002c67: SWAP2 00002c68: POP 00002c69: PUSH2 0x2496 00002c6c: DUP7 00002c6d: DUP4 00002c6e: DUP4 00002c6f: JUMPDEST 00002c70: PUSH1 0x60 00002c72: DUP3 00002c73: PUSH2 0x2c84 00002c76: JUMPI 00002c77: PUSH2 0x2c7f 00002c7a: DUP3 00002c7b: PUSH2 0x2ccb 00002c7e: JUMP 00002c7f: JUMPDEST 00002c80: PUSH2 0x0a4f 00002c83: JUMP 00002c84: JUMPDEST 00002c85: DUP2 00002c86: MLOAD 00002c87: ISZERO 00002c88: DUP1 00002c89: ISZERO 00002c8a: PUSH2 0x2c9b 00002c8d: JUMPI 00002c8e: POP 00002c8f: PUSH1 0x01 00002c91: PUSH1 0x01 00002c93: PUSH1 0xa0 00002c95: SHL 00002c96: SUB 00002c97: DUP5 00002c98: AND 00002c99: EXTCODESIZE 00002c9a: ISZERO 00002c9b: JUMPDEST 00002c9c: ISZERO 00002c9d: PUSH2 0x2cc4 00002ca0: JUMPI 00002ca1: PUSH1 0x40 00002ca3: MLOAD 00002ca4: PUSH4 0x9996b315 00002ca9: PUSH1 0xe0 00002cab: SHL 00002cac: DUP2 00002cad: MSTORE 00002cae: PUSH1 0x01 00002cb0: PUSH1 0x01 00002cb2: PUSH1 0xa0 00002cb4: SHL 00002cb5: SUB 00002cb6: DUP6 00002cb7: AND 00002cb8: PUSH1 0x04 00002cba: DUP3 00002cbb: ADD 00002cbc: MSTORE 00002cbd: PUSH1 0x24 00002cbf: ADD 00002cc0: PUSH2 0x0f49 00002cc3: JUMP 00002cc4: JUMPDEST 00002cc5: POP 00002cc6: DUP1 00002cc7: PUSH2 0x0a4f 00002cca: JUMP 00002ccb: JUMPDEST 00002ccc: DUP1 00002ccd: MLOAD 00002cce: ISZERO 00002ccf: PUSH2 0x2cdb 00002cd2: JUMPI 00002cd3: DUP1 00002cd4: MLOAD 00002cd5: DUP1 00002cd6: DUP3 00002cd7: PUSH1 0x20 00002cd9: ADD 00002cda: REVERT 00002cdb: JUMPDEST 00002cdc: PUSH1 0x40 00002cde: MLOAD 00002cdf: PUSH4 0x0a12f521 00002ce4: PUSH1 0xe1 00002ce6: SHL 00002ce7: DUP2 00002ce8: MSTORE 00002ce9: PUSH1 0x04 00002ceb: ADD 00002cec: PUSH1 0x40 00002cee: MLOAD 00002cef: DUP1 00002cf0: SWAP2 00002cf1: SUB 00002cf2: SWAP1 00002cf3: REVERT 00002cf4: JUMPDEST 00002cf5: PUSH1 0x00 00002cf7: JUMPDEST 00002cf8: DUP4 00002cf9: DUP2 00002cfa: LT 00002cfb: ISZERO 00002cfc: PUSH2 0x2d0f 00002cff: JUMPI 00002d00: DUP2 00002d01: DUP2 00002d02: ADD 00002d03: MLOAD 00002d04: DUP4 00002d05: DUP3 00002d06: ADD 00002d07: MSTORE 00002d08: PUSH1 0x20 00002d0a: ADD 00002d0b: PUSH2 0x2cf7 00002d0e: JUMP 00002d0f: JUMPDEST 00002d10: POP 00002d11: POP 00002d12: PUSH1 0x00 00002d14: SWAP2 00002d15: ADD 00002d16: MSTORE 00002d17: JUMP 00002d18: JUMPDEST 00002d19: PUSH1 0x20 00002d1b: DUP2 00002d1c: MSTORE 00002d1d: PUSH1 0x00 00002d1f: DUP3 00002d20: MLOAD 00002d21: DUP1 00002d22: PUSH1 0x20 00002d24: DUP5 00002d25: ADD 00002d26: MSTORE 00002d27: PUSH2 0x2d37 00002d2a: DUP2 00002d2b: PUSH1 0x40 00002d2d: DUP6 00002d2e: ADD 00002d2f: PUSH1 0x20 00002d31: DUP8 00002d32: ADD 00002d33: PUSH2 0x2cf4 00002d36: JUMP 00002d37: JUMPDEST 00002d38: PUSH1 0x1f 00002d3a: ADD 00002d3b: PUSH1 0x1f 00002d3d: NOT 00002d3e: AND 00002d3f: SWAP2 00002d40: SWAP1 00002d41: SWAP2 00002d42: ADD 00002d43: PUSH1 0x40 00002d45: ADD 00002d46: SWAP3 00002d47: SWAP2 00002d48: POP 00002d49: POP 00002d4a: JUMP 00002d4b: JUMPDEST 00002d4c: PUSH1 0x00 00002d4e: PUSH1 0x20 00002d50: DUP3 00002d51: DUP5 00002d52: SUB 00002d53: SLT 00002d54: ISZERO 00002d55: PUSH2 0x2d5d 00002d58: JUMPI 00002d59: PUSH1 0x00 00002d5b: DUP1 00002d5c: REVERT 00002d5d: JUMPDEST 00002d5e: POP 00002d5f: CALLDATALOAD 00002d60: SWAP2 00002d61: SWAP1 00002d62: POP 00002d63: JUMP 00002d64: JUMPDEST 00002d65: PUSH1 0x01 00002d67: PUSH1 0x01 00002d69: PUSH1 0xa0 00002d6b: SHL 00002d6c: SUB 00002d6d: DUP2 00002d6e: AND 00002d6f: DUP2 00002d70: EQ 00002d71: PUSH2 0x0c52 00002d74: JUMPI 00002d75: PUSH1 0x00 00002d77: DUP1 00002d78: REVERT 00002d79: JUMPDEST 00002d7a: PUSH1 0x00 00002d7c: DUP1 00002d7d: PUSH1 0x40 00002d7f: DUP4 00002d80: DUP6 00002d81: SUB 00002d82: SLT 00002d83: ISZERO 00002d84: PUSH2 0x2d8c 00002d87: JUMPI 00002d88: PUSH1 0x00 00002d8a: DUP1 00002d8b: REVERT 00002d8c: JUMPDEST 00002d8d: DUP3 00002d8e: CALLDATALOAD 00002d8f: PUSH2 0x2d97 00002d92: DUP2 00002d93: PUSH2 0x2d64 00002d96: JUMP 00002d97: JUMPDEST 00002d98: SWAP5 00002d99: PUSH1 0x20 00002d9b: SWAP4 00002d9c: SWAP1 00002d9d: SWAP4 00002d9e: ADD 00002d9f: CALLDATALOAD 00002da0: SWAP4 00002da1: POP 00002da2: POP 00002da3: POP 00002da4: JUMP 00002da5: JUMPDEST 00002da6: PUSH1 0x00 00002da8: DUP1 00002da9: PUSH1 0x00 00002dab: PUSH1 0x60 00002dad: DUP5 00002dae: DUP7 00002daf: SUB 00002db0: SLT 00002db1: ISZERO 00002db2: PUSH2 0x2dba 00002db5: JUMPI 00002db6: PUSH1 0x00 00002db8: DUP1 00002db9: REVERT 00002dba: JUMPDEST 00002dbb: DUP4 00002dbc: CALLDATALOAD 00002dbd: PUSH2 0x2dc5 00002dc0: DUP2 00002dc1: PUSH2 0x2d64 00002dc4: JUMP 00002dc5: JUMPDEST 00002dc6: SWAP3 00002dc7: POP 00002dc8: PUSH1 0x20 00002dca: DUP5 00002dcb: ADD 00002dcc: CALLDATALOAD 00002dcd: PUSH2 0x2dd5 00002dd0: DUP2 00002dd1: PUSH2 0x2d64 00002dd4: JUMP 00002dd5: JUMPDEST 00002dd6: SWAP3 00002dd7: SWAP6 00002dd8: SWAP3 00002dd9: SWAP5 00002dda: POP 00002ddb: POP 00002ddc: POP 00002ddd: PUSH1 0x40 00002ddf: SWAP2 00002de0: SWAP1 00002de1: SWAP2 00002de2: ADD 00002de3: CALLDATALOAD 00002de4: SWAP1 00002de5: JUMP 00002de6: JUMPDEST 00002de7: PUSH4 0x4e487b71 00002dec: PUSH1 0xe0 00002dee: SHL 00002def: PUSH1 0x00 00002df1: MSTORE 00002df2: PUSH1 0x41 00002df4: PUSH1 0x04 00002df6: MSTORE 00002df7: PUSH1 0x24 00002df9: PUSH1 0x00 00002dfb: REVERT 00002dfc: JUMPDEST 00002dfd: PUSH1 0x00 00002dff: DUP1 00002e00: PUSH8 0xffffffffffffffff 00002e09: DUP5 00002e0a: GT 00002e0b: ISZERO 00002e0c: PUSH2 0x2e17 00002e0f: JUMPI 00002e10: PUSH2 0x2e17 00002e13: PUSH2 0x2de6 00002e16: JUMP 00002e17: JUMPDEST 00002e18: POP 00002e19: PUSH1 0x40 00002e1b: MLOAD 00002e1c: PUSH1 0x1f 00002e1e: NOT 00002e1f: PUSH1 0x1f 00002e21: DUP6 00002e22: ADD 00002e23: DUP2 00002e24: AND 00002e25: PUSH1 0x3f 00002e27: ADD 00002e28: AND 00002e29: DUP2 00002e2a: ADD 00002e2b: DUP2 00002e2c: DUP2 00002e2d: LT 00002e2e: PUSH8 0xffffffffffffffff 00002e37: DUP3 00002e38: GT 00002e39: OR 00002e3a: ISZERO 00002e3b: PUSH2 0x2e46 00002e3e: JUMPI 00002e3f: PUSH2 0x2e46 00002e42: PUSH2 0x2de6 00002e45: JUMP 00002e46: JUMPDEST 00002e47: PUSH1 0x40 00002e49: MSTORE 00002e4a: DUP4 00002e4b: DUP2 00002e4c: MSTORE 00002e4d: SWAP1 00002e4e: POP 00002e4f: DUP1 00002e50: DUP3 00002e51: DUP5 00002e52: ADD 00002e53: DUP6 00002e54: LT 00002e55: ISZERO 00002e56: PUSH2 0x2e5e 00002e59: JUMPI 00002e5a: PUSH1 0x00 00002e5c: DUP1 00002e5d: REVERT 00002e5e: JUMPDEST 00002e5f: DUP4 00002e60: DUP4 00002e61: PUSH1 0x20 00002e63: DUP4 00002e64: ADD 00002e65: CALLDATACOPY 00002e66: PUSH1 0x00 00002e68: PUSH1 0x20 00002e6a: DUP6 00002e6b: DUP4 00002e6c: ADD 00002e6d: ADD 00002e6e: MSTORE 00002e6f: POP 00002e70: SWAP4 00002e71: SWAP3 00002e72: POP 00002e73: POP 00002e74: POP 00002e75: JUMP 00002e76: JUMPDEST 00002e77: PUSH1 0x00 00002e79: DUP3 00002e7a: PUSH1 0x1f 00002e7c: DUP4 00002e7d: ADD 00002e7e: SLT 00002e7f: PUSH2 0x2e87 00002e82: JUMPI 00002e83: PUSH1 0x00 00002e85: DUP1 00002e86: REVERT 00002e87: JUMPDEST 00002e88: PUSH2 0x0a4f 00002e8b: DUP4 00002e8c: DUP4 00002e8d: CALLDATALOAD 00002e8e: PUSH1 0x20 00002e90: DUP6 00002e91: ADD 00002e92: PUSH2 0x2dfc 00002e95: JUMP 00002e96: JUMPDEST 00002e97: PUSH1 0x00 00002e99: DUP1 00002e9a: PUSH1 0x00 00002e9c: DUP1 00002e9d: PUSH1 0x00 00002e9f: DUP1 00002ea0: PUSH1 0xc0 00002ea2: DUP8 00002ea3: DUP10 00002ea4: SUB 00002ea5: SLT 00002ea6: ISZERO 00002ea7: PUSH2 0x2eaf 00002eaa: JUMPI 00002eab: PUSH1 0x00 00002ead: DUP1 00002eae: REVERT 00002eaf: JUMPDEST 00002eb0: DUP7 00002eb1: CALLDATALOAD 00002eb2: PUSH2 0x2eba 00002eb5: DUP2 00002eb6: PUSH2 0x2d64 00002eb9: JUMP 00002eba: JUMPDEST 00002ebb: SWAP6 00002ebc: POP 00002ebd: PUSH1 0x20 00002ebf: DUP8 00002ec0: ADD 00002ec1: CALLDATALOAD 00002ec2: PUSH2 0x2eca 00002ec5: DUP2 00002ec6: PUSH2 0x2d64 00002ec9: JUMP 00002eca: JUMPDEST 00002ecb: SWAP5 00002ecc: POP 00002ecd: PUSH1 0x40 00002ecf: DUP8 00002ed0: ADD 00002ed1: CALLDATALOAD 00002ed2: PUSH2 0x2eda 00002ed5: DUP2 00002ed6: PUSH2 0x2d64 00002ed9: JUMP 00002eda: JUMPDEST 00002edb: SWAP4 00002edc: POP 00002edd: PUSH1 0x60 00002edf: DUP8 00002ee0: ADD 00002ee1: CALLDATALOAD 00002ee2: PUSH2 0x2eea 00002ee5: DUP2 00002ee6: PUSH2 0x2d64 00002ee9: JUMP 00002eea: JUMPDEST 00002eeb: SWAP3 00002eec: POP 00002eed: PUSH1 0x80 00002eef: DUP8 00002ef0: ADD 00002ef1: CALLDATALOAD 00002ef2: PUSH8 0xffffffffffffffff 00002efb: DUP2 00002efc: GT 00002efd: ISZERO 00002efe: PUSH2 0x2f06 00002f01: JUMPI 00002f02: PUSH1 0x00 00002f04: DUP1 00002f05: REVERT 00002f06: JUMPDEST 00002f07: PUSH2 0x2f12 00002f0a: DUP10 00002f0b: DUP3 00002f0c: DUP11 00002f0d: ADD 00002f0e: PUSH2 0x2e76 00002f11: JUMP 00002f12: JUMPDEST 00002f13: SWAP3 00002f14: POP 00002f15: POP 00002f16: PUSH1 0xa0 00002f18: DUP8 00002f19: ADD 00002f1a: CALLDATALOAD 00002f1b: PUSH8 0xffffffffffffffff 00002f24: DUP2 00002f25: GT 00002f26: ISZERO 00002f27: PUSH2 0x2f2f 00002f2a: JUMPI 00002f2b: PUSH1 0x00 00002f2d: DUP1 00002f2e: REVERT 00002f2f: JUMPDEST 00002f30: PUSH2 0x2f3b 00002f33: DUP10 00002f34: DUP3 00002f35: DUP11 00002f36: ADD 00002f37: PUSH2 0x2e76 00002f3a: JUMP 00002f3b: JUMPDEST 00002f3c: SWAP2 00002f3d: POP 00002f3e: POP 00002f3f: SWAP3 00002f40: SWAP6 00002f41: POP 00002f42: SWAP3 00002f43: SWAP6 00002f44: POP 00002f45: SWAP3 00002f46: SWAP6 00002f47: JUMP 00002f48: JUMPDEST 00002f49: PUSH1 0x00 00002f4b: PUSH1 0x20 00002f4d: DUP3 00002f4e: DUP5 00002f4f: SUB 00002f50: SLT 00002f51: ISZERO 00002f52: PUSH2 0x2f5a 00002f55: JUMPI 00002f56: PUSH1 0x00 00002f58: DUP1 00002f59: REVERT 00002f5a: JUMPDEST 00002f5b: DUP2 00002f5c: CALLDATALOAD 00002f5d: PUSH2 0x0a4f 00002f60: DUP2 00002f61: PUSH2 0x2d64 00002f64: JUMP 00002f65: JUMPDEST 00002f66: PUSH1 0x00 00002f68: DUP1 00002f69: PUSH1 0x40 00002f6b: DUP4 00002f6c: DUP6 00002f6d: SUB 00002f6e: SLT 00002f6f: ISZERO 00002f70: PUSH2 0x2f78 00002f73: JUMPI 00002f74: PUSH1 0x00 00002f76: DUP1 00002f77: REVERT 00002f78: JUMPDEST 00002f79: DUP3 00002f7a: CALLDATALOAD 00002f7b: PUSH2 0x2f83 00002f7e: DUP2 00002f7f: PUSH2 0x2d64 00002f82: JUMP 00002f83: JUMPDEST 00002f84: SWAP2 00002f85: POP 00002f86: PUSH1 0x20 00002f88: DUP4 00002f89: ADD 00002f8a: CALLDATALOAD 00002f8b: PUSH8 0xffffffffffffffff 00002f94: DUP2 00002f95: GT 00002f96: ISZERO 00002f97: PUSH2 0x2f9f 00002f9a: JUMPI 00002f9b: PUSH1 0x00 00002f9d: DUP1 00002f9e: REVERT 00002f9f: JUMPDEST 00002fa0: DUP4 00002fa1: ADD 00002fa2: PUSH1 0x1f 00002fa4: DUP2 00002fa5: ADD 00002fa6: DUP6 00002fa7: SGT 00002fa8: PUSH2 0x2fb0 00002fab: JUMPI 00002fac: PUSH1 0x00 00002fae: DUP1 00002faf: REVERT 00002fb0: JUMPDEST 00002fb1: PUSH2 0x2fbf 00002fb4: DUP6 00002fb5: DUP3 00002fb6: CALLDATALOAD 00002fb7: PUSH1 0x20 00002fb9: DUP5 00002fba: ADD 00002fbb: PUSH2 0x2dfc 00002fbe: JUMP 00002fbf: JUMPDEST 00002fc0: SWAP2 00002fc1: POP 00002fc2: POP 00002fc3: SWAP3 00002fc4: POP 00002fc5: SWAP3 00002fc6: SWAP1 00002fc7: POP 00002fc8: JUMP 00002fc9: JUMPDEST 00002fca: PUSH1 0x00 00002fcc: DUP1 00002fcd: PUSH1 0x40 00002fcf: DUP4 00002fd0: DUP6 00002fd1: SUB 00002fd2: SLT 00002fd3: ISZERO 00002fd4: PUSH2 0x2fdc 00002fd7: JUMPI 00002fd8: PUSH1 0x00 00002fda: DUP1 00002fdb: REVERT 00002fdc: JUMPDEST 00002fdd: DUP3 00002fde: CALLDATALOAD 00002fdf: SWAP2 00002fe0: POP 00002fe1: PUSH1 0x20 00002fe3: DUP4 00002fe4: ADD 00002fe5: CALLDATALOAD 00002fe6: PUSH2 0x2fee 00002fe9: DUP2 00002fea: PUSH2 0x2d64 00002fed: JUMP 00002fee: JUMPDEST 00002fef: DUP1 00002ff0: SWAP2 00002ff1: POP 00002ff2: POP 00002ff3: SWAP3 00002ff4: POP 00002ff5: SWAP3 00002ff6: SWAP1 00002ff7: POP 00002ff8: JUMP 00002ff9: JUMPDEST 00002ffa: DUP1 00002ffb: ISZERO 00002ffc: ISZERO 00002ffd: DUP2 00002ffe: EQ 00002fff: PUSH2 0x0c52 00003002: JUMPI 00003003: PUSH1 0x00 00003005: DUP1 00003006: REVERT 00003007: JUMPDEST 00003008: PUSH1 0x00 0000300a: PUSH1 0x20 0000300c: DUP3 0000300d: DUP5 0000300e: SUB 0000300f: SLT 00003010: ISZERO 00003011: PUSH2 0x3019 00003014: JUMPI 00003015: PUSH1 0x00 00003017: DUP1 00003018: REVERT 00003019: JUMPDEST 0000301a: DUP2 0000301b: CALLDATALOAD 0000301c: PUSH2 0x0a4f 0000301f: DUP2 00003020: PUSH2 0x2ff9 00003023: JUMP 00003024: JUMPDEST 00003025: PUSH1 0x00 00003027: DUP1 00003028: PUSH1 0x00 0000302a: PUSH1 0x60 0000302c: DUP5 0000302d: DUP7 0000302e: SUB 0000302f: SLT 00003030: ISZERO 00003031: PUSH2 0x3039 00003034: JUMPI 00003035: PUSH1 0x00 00003037: DUP1 00003038: REVERT 00003039: JUMPDEST 0000303a: DUP4 0000303b: CALLDATALOAD 0000303c: SWAP3 0000303d: POP 0000303e: PUSH1 0x20 00003040: DUP5 00003041: ADD 00003042: CALLDATALOAD 00003043: PUSH2 0x304b 00003046: DUP2 00003047: PUSH2 0x2d64 0000304a: JUMP 0000304b: JUMPDEST 0000304c: SWAP2 0000304d: POP 0000304e: PUSH1 0x40 00003050: DUP5 00003051: ADD 00003052: CALLDATALOAD 00003053: PUSH2 0x305b 00003056: DUP2 00003057: PUSH2 0x2d64 0000305a: JUMP 0000305b: JUMPDEST 0000305c: DUP1 0000305d: SWAP2 0000305e: POP 0000305f: POP 00003060: SWAP3 00003061: POP 00003062: SWAP3 00003063: POP 00003064: SWAP3 00003065: JUMP 00003066: JUMPDEST 00003067: PUSH1 0x00 00003069: DUP1 0000306a: PUSH1 0x00 0000306c: PUSH1 0x60 0000306e: DUP5 0000306f: DUP7 00003070: SUB 00003071: SLT 00003072: ISZERO 00003073: PUSH2 0x307b 00003076: JUMPI 00003077: PUSH1 0x00 00003079: DUP1 0000307a: REVERT 0000307b: JUMPDEST 0000307c: DUP4 0000307d: CALLDATALOAD 0000307e: SWAP3 0000307f: POP 00003080: PUSH1 0x20 00003082: DUP5 00003083: ADD 00003084: CALLDATALOAD 00003085: SWAP2 00003086: POP 00003087: PUSH1 0x40 00003089: DUP5 0000308a: ADD 0000308b: CALLDATALOAD 0000308c: PUSH2 0x305b 0000308f: DUP2 00003090: PUSH2 0x2ff9 00003093: JUMP 00003094: JUMPDEST 00003095: PUSH1 0x00 00003097: DUP1 00003098: PUSH1 0x40 0000309a: DUP4 0000309b: DUP6 0000309c: SUB 0000309d: SLT 0000309e: ISZERO 0000309f: PUSH2 0x30a7 000030a2: JUMPI 000030a3: PUSH1 0x00 000030a5: DUP1 000030a6: REVERT 000030a7: JUMPDEST 000030a8: DUP3 000030a9: CALLDATALOAD 000030aa: PUSH2 0x30b2 000030ad: DUP2 000030ae: PUSH2 0x2d64 000030b1: JUMP 000030b2: JUMPDEST 000030b3: SWAP2 000030b4: POP 000030b5: PUSH1 0x20 000030b7: DUP4 000030b8: ADD 000030b9: CALLDATALOAD 000030ba: PUSH2 0x2fee 000030bd: DUP2 000030be: PUSH2 0x2d64 000030c1: JUMP 000030c2: JUMPDEST 000030c3: PUSH1 0x01 000030c5: DUP2 000030c6: DUP2 000030c7: SHR 000030c8: SWAP1 000030c9: DUP3 000030ca: AND 000030cb: DUP1 000030cc: PUSH2 0x30d6 000030cf: JUMPI 000030d0: PUSH1 0x7f 000030d2: DUP3 000030d3: AND 000030d4: SWAP2 000030d5: POP 000030d6: JUMPDEST 000030d7: PUSH1 0x20 000030d9: DUP3 000030da: LT 000030db: DUP2 000030dc: SUB 000030dd: PUSH2 0x30f6 000030e0: JUMPI 000030e1: PUSH4 0x4e487b71 000030e6: PUSH1 0xe0 000030e8: SHL 000030e9: PUSH1 0x00 000030eb: MSTORE 000030ec: PUSH1 0x22 000030ee: PUSH1 0x04 000030f0: MSTORE 000030f1: PUSH1 0x24 000030f3: PUSH1 0x00 000030f5: REVERT 000030f6: JUMPDEST 000030f7: POP 000030f8: SWAP2 000030f9: SWAP1 000030fa: POP 000030fb: JUMP 000030fc: JUMPDEST 000030fd: PUSH4 0x4e487b71 00003102: PUSH1 0xe0 00003104: SHL 00003105: PUSH1 0x00 00003107: MSTORE 00003108: PUSH1 0x11 0000310a: PUSH1 0x04 0000310c: MSTORE 0000310d: PUSH1 0x24 0000310f: PUSH1 0x00 00003111: REVERT 00003112: JUMPDEST 00003113: PUSH1 0xff 00003115: DUP2 00003116: DUP2 00003117: AND 00003118: DUP4 00003119: DUP3 0000311a: AND 0000311b: ADD 0000311c: SWAP1 0000311d: DUP2 0000311e: GT 0000311f: ISZERO 00003120: PUSH2 0x0a05 00003123: JUMPI 00003124: PUSH2 0x0a05 00003127: PUSH2 0x30fc 0000312a: JUMP 0000312b: JUMPDEST 0000312c: DUP2 0000312d: DUP2 0000312e: SUB 0000312f: DUP2 00003130: DUP2 00003131: GT 00003132: ISZERO 00003133: PUSH2 0x0a05 00003136: JUMPI 00003137: PUSH2 0x0a05 0000313a: PUSH2 0x30fc 0000313d: JUMP 0000313e: JUMPDEST 0000313f: PUSH8 0xffffffffffffffff 00003148: SWAP3 00003149: SWAP1 0000314a: SWAP3 0000314b: AND 0000314c: DUP3 0000314d: MSTORE 0000314e: PUSH1 0x01 00003150: PUSH1 0x01 00003152: PUSH1 0xa0 00003154: SHL 00003155: SUB 00003156: AND 00003157: PUSH1 0x20 00003159: DUP3 0000315a: ADD 0000315b: MSTORE 0000315c: PUSH1 0x40 0000315e: ADD 0000315f: SWAP1 00003160: JUMP 00003161: JUMPDEST 00003162: PUSH1 0x00 00003164: DUP1 00003165: PUSH1 0x40 00003167: DUP4 00003168: DUP6 00003169: SUB 0000316a: SLT 0000316b: ISZERO 0000316c: PUSH2 0x3174 0000316f: JUMPI 00003170: PUSH1 0x00 00003172: DUP1 00003173: REVERT 00003174: JUMPDEST 00003175: DUP3 00003176: MLOAD 00003177: PUSH2 0x317f 0000317a: DUP2 0000317b: PUSH2 0x2d64 0000317e: JUMP 0000317f: JUMPDEST 00003180: PUSH1 0x20 00003182: SWAP4 00003183: SWAP1 00003184: SWAP4 00003185: ADD 00003186: MLOAD 00003187: SWAP3 00003188: SWAP5 00003189: SWAP3 0000318a: SWAP4 0000318b: POP 0000318c: POP 0000318d: POP 0000318e: JUMP 0000318f: JUMPDEST 00003190: PUSH1 0x01 00003192: PUSH1 0x01 00003194: PUSH1 0xa0 00003196: SHL 00003197: SUB 00003198: SWAP4 00003199: SWAP1 0000319a: SWAP4 0000319b: AND 0000319c: DUP4 0000319d: MSTORE 0000319e: PUSH1 0x20 000031a0: DUP4 000031a1: ADD 000031a2: SWAP2 000031a3: SWAP1 000031a4: SWAP2 000031a5: MSTORE 000031a6: PUSH1 0x40 000031a8: DUP3 000031a9: ADD 000031aa: MSTORE 000031ab: PUSH1 0x60 000031ad: ADD 000031ae: SWAP1 000031af: JUMP 000031b0: JUMPDEST 000031b1: DUP1 000031b2: DUP3 000031b3: ADD 000031b4: DUP1 000031b5: DUP3 000031b6: GT 000031b7: ISZERO 000031b8: PUSH2 0x0a05 000031bb: JUMPI 000031bc: PUSH2 0x0a05 000031bf: PUSH2 0x30fc 000031c2: JUMP 000031c3: JUMPDEST 000031c4: PUSH1 0x01 000031c6: DUP2 000031c7: JUMPDEST 000031c8: PUSH1 0x01 000031ca: DUP5 000031cb: GT 000031cc: ISZERO 000031cd: PUSH2 0x31fe 000031d0: JUMPI 000031d1: DUP1 000031d2: DUP6 000031d3: DIV 000031d4: DUP2 000031d5: GT 000031d6: ISZERO 000031d7: PUSH2 0x31e2 000031da: JUMPI 000031db: PUSH2 0x31e2 000031de: PUSH2 0x30fc 000031e1: JUMP 000031e2: JUMPDEST 000031e3: PUSH1 0x01 000031e5: DUP5 000031e6: AND 000031e7: ISZERO 000031e8: PUSH2 0x31f0 000031eb: JUMPI 000031ec: SWAP1 000031ed: DUP2 000031ee: MUL 000031ef: SWAP1 000031f0: JUMPDEST 000031f1: PUSH1 0x01 000031f3: SWAP4 000031f4: SWAP1 000031f5: SWAP4 000031f6: SHR 000031f7: SWAP3 000031f8: DUP1 000031f9: MUL 000031fa: PUSH2 0x31c7 000031fd: JUMP 000031fe: JUMPDEST 000031ff: SWAP4 00003200: POP 00003201: SWAP4 00003202: SWAP2 00003203: POP 00003204: POP 00003205: JUMP 00003206: JUMPDEST 00003207: PUSH1 0x00 00003209: DUP3 0000320a: PUSH2 0x3215 0000320d: JUMPI 0000320e: POP 0000320f: PUSH1 0x01 00003211: PUSH2 0x0a05 00003214: JUMP 00003215: JUMPDEST 00003216: DUP2 00003217: PUSH2 0x3222 0000321a: JUMPI 0000321b: POP 0000321c: PUSH1 0x00 0000321e: PUSH2 0x0a05 00003221: JUMP 00003222: JUMPDEST 00003223: DUP2 00003224: PUSH1 0x01 00003226: DUP2 00003227: EQ 00003228: PUSH2 0x3238 0000322b: JUMPI 0000322c: PUSH1 0x02 0000322e: DUP2 0000322f: EQ 00003230: PUSH2 0x3242 00003233: JUMPI 00003234: PUSH2 0x325e 00003237: JUMP 00003238: JUMPDEST 00003239: PUSH1 0x01 0000323b: SWAP2 0000323c: POP 0000323d: POP 0000323e: PUSH2 0x0a05 00003241: JUMP 00003242: JUMPDEST 00003243: PUSH1 0xff 00003245: DUP5 00003246: GT 00003247: ISZERO 00003248: PUSH2 0x3253 0000324b: JUMPI 0000324c: PUSH2 0x3253 0000324f: PUSH2 0x30fc 00003252: JUMP 00003253: JUMPDEST 00003254: POP 00003255: POP 00003256: PUSH1 0x01 00003258: DUP3 00003259: SHL 0000325a: PUSH2 0x0a05 0000325d: JUMP 0000325e: JUMPDEST 0000325f: POP 00003260: PUSH1 0x20 00003262: DUP4 00003263: LT 00003264: PUSH2 0x0133 00003267: DUP4 00003268: LT 00003269: AND 0000326a: PUSH1 0x4e 0000326c: DUP5 0000326d: LT 0000326e: PUSH1 0x0b 00003270: DUP5 00003271: LT 00003272: AND 00003273: OR 00003274: ISZERO 00003275: PUSH2 0x3281 00003278: JUMPI 00003279: POP 0000327a: DUP2 0000327b: DUP2 0000327c: EXP 0000327d: PUSH2 0x0a05 00003280: JUMP 00003281: JUMPDEST 00003282: PUSH2 0x328e 00003285: PUSH1 0x00 00003287: NOT 00003288: DUP5 00003289: DUP5 0000328a: PUSH2 0x31c3 0000328d: JUMP 0000328e: JUMPDEST 0000328f: DUP1 00003290: PUSH1 0x00 00003292: NOT 00003293: DIV 00003294: DUP3 00003295: GT 00003296: ISZERO 00003297: PUSH2 0x32a2 0000329a: JUMPI 0000329b: PUSH2 0x32a2 0000329e: PUSH2 0x30fc 000032a1: JUMP 000032a2: JUMPDEST 000032a3: MUL 000032a4: SWAP4 000032a5: SWAP3 000032a6: POP 000032a7: POP 000032a8: POP 000032a9: JUMP 000032aa: JUMPDEST 000032ab: PUSH1 0x00 000032ad: PUSH2 0x0a4f 000032b0: PUSH1 0xff 000032b2: DUP5 000032b3: AND 000032b4: DUP4 000032b5: PUSH2 0x3206 000032b8: JUMP 000032b9: JUMPDEST 000032ba: PUSH1 0x00 000032bc: PUSH1 0x20 000032be: DUP3 000032bf: DUP5 000032c0: SUB 000032c1: SLT 000032c2: ISZERO 000032c3: PUSH2 0x32cb 000032c6: JUMPI 000032c7: PUSH1 0x00 000032c9: DUP1 000032ca: REVERT 000032cb: JUMPDEST 000032cc: POP 000032cd: MLOAD 000032ce: SWAP2 000032cf: SWAP1 000032d0: POP 000032d1: JUMP 000032d2: JUMPDEST 000032d3: PUSH1 0x00 000032d5: PUSH1 0x20 000032d7: DUP3 000032d8: DUP5 000032d9: SUB 000032da: SLT 000032db: ISZERO 000032dc: PUSH2 0x32e4 000032df: JUMPI 000032e0: PUSH1 0x00 000032e2: DUP1 000032e3: REVERT 000032e4: JUMPDEST 000032e5: DUP2 000032e6: MLOAD 000032e7: PUSH2 0x0a4f 000032ea: DUP2 000032eb: PUSH2 0x2d64 000032ee: JUMP 000032ef: JUMPDEST 000032f0: DUP1 000032f1: DUP3 000032f2: MUL 000032f3: DUP2 000032f4: ISZERO 000032f5: DUP3 000032f6: DUP3 000032f7: DIV 000032f8: DUP5 000032f9: EQ 000032fa: OR 000032fb: PUSH2 0x0a05 000032fe: JUMPI 000032ff: PUSH2 0x0a05 00003302: PUSH2 0x30fc 00003305: JUMP 00003306: JUMPDEST 00003307: PUSH4 0x4e487b71 0000330c: PUSH1 0xe0 0000330e: SHL 0000330f: PUSH1 0x00 00003311: MSTORE 00003312: PUSH1 0x12 00003314: PUSH1 0x04 00003316: MSTORE 00003317: PUSH1 0x24 00003319: PUSH1 0x00 0000331b: REVERT 0000331c: JUMPDEST 0000331d: PUSH1 0x00 0000331f: DUP3 00003320: PUSH2 0x332b 00003323: JUMPI 00003324: PUSH2 0x332b 00003327: PUSH2 0x3306 0000332a: JUMP 0000332b: JUMPDEST 0000332c: POP 0000332d: DIV 0000332e: SWAP1 0000332f: JUMP 00003330: JUMPDEST 00003331: PUSH1 0x1f 00003333: DUP3 00003334: GT 00003335: ISZERO 00003336: PUSH2 0x1782 00003339: JUMPI 0000333a: DUP1 0000333b: PUSH1 0x00 0000333d: MSTORE 0000333e: PUSH1 0x20 00003340: PUSH1 0x00 00003342: KECCAK256 00003343: PUSH1 0x1f 00003345: DUP5 00003346: ADD 00003347: PUSH1 0x05 00003349: SHR 0000334a: DUP2 0000334b: ADD 0000334c: PUSH1 0x20 0000334e: DUP6 0000334f: LT 00003350: ISZERO 00003351: PUSH2 0x3357 00003354: JUMPI 00003355: POP 00003356: DUP1 00003357: JUMPDEST 00003358: PUSH1 0x1f 0000335a: DUP5 0000335b: ADD 0000335c: PUSH1 0x05 0000335e: SHR 0000335f: DUP3 00003360: ADD 00003361: SWAP2 00003362: POP 00003363: JUMPDEST 00003364: DUP2 00003365: DUP2 00003366: LT 00003367: ISZERO 00003368: PUSH2 0x1c96 0000336b: JUMPI 0000336c: PUSH1 0x00 0000336e: DUP2 0000336f: SSTORE 00003370: PUSH1 0x01 00003372: ADD 00003373: PUSH2 0x3363 00003376: JUMP 00003377: JUMPDEST 00003378: DUP2 00003379: MLOAD 0000337a: PUSH8 0xffffffffffffffff 00003383: DUP2 00003384: GT 00003385: ISZERO 00003386: PUSH2 0x3391 00003389: JUMPI 0000338a: PUSH2 0x3391 0000338d: PUSH2 0x2de6 00003390: JUMP 00003391: JUMPDEST 00003392: PUSH2 0x33a5 00003395: DUP2 00003396: PUSH2 0x339f 00003399: DUP5 0000339a: SLOAD 0000339b: PUSH2 0x30c2 0000339e: JUMP 0000339f: JUMPDEST 000033a0: DUP5 000033a1: PUSH2 0x3330 000033a4: JUMP 000033a5: JUMPDEST 000033a6: PUSH1 0x20 000033a8: PUSH1 0x1f 000033aa: DUP3 000033ab: GT 000033ac: PUSH1 0x01 000033ae: DUP2 000033af: EQ 000033b0: PUSH2 0x33d9 000033b3: JUMPI 000033b4: PUSH1 0x00 000033b6: DUP4 000033b7: ISZERO 000033b8: PUSH2 0x33c1 000033bb: JUMPI 000033bc: POP 000033bd: DUP5 000033be: DUP3 000033bf: ADD 000033c0: MLOAD 000033c1: JUMPDEST 000033c2: PUSH1 0x00 000033c4: NOT 000033c5: PUSH1 0x03 000033c7: DUP6 000033c8: SWAP1 000033c9: SHL 000033ca: SHR 000033cb: NOT 000033cc: AND 000033cd: PUSH1 0x01 000033cf: DUP5 000033d0: SWAP1 000033d1: SHL 000033d2: OR 000033d3: DUP5 000033d4: SSTORE 000033d5: PUSH2 0x1c96 000033d8: JUMP 000033d9: JUMPDEST 000033da: PUSH1 0x00 000033dc: DUP5 000033dd: DUP2 000033de: MSTORE 000033df: PUSH1 0x20 000033e1: DUP2 000033e2: KECCAK256 000033e3: PUSH1 0x1f 000033e5: NOT 000033e6: DUP6 000033e7: AND 000033e8: SWAP2 000033e9: JUMPDEST 000033ea: DUP3 000033eb: DUP2 000033ec: LT 000033ed: ISZERO 000033ee: PUSH2 0x3409 000033f1: JUMPI 000033f2: DUP8 000033f3: DUP6 000033f4: ADD 000033f5: MLOAD 000033f6: DUP3 000033f7: SSTORE 000033f8: PUSH1 0x20 000033fa: SWAP5 000033fb: DUP6 000033fc: ADD 000033fd: SWAP5 000033fe: PUSH1 0x01 00003400: SWAP1 00003401: SWAP3 00003402: ADD 00003403: SWAP2 00003404: ADD 00003405: PUSH2 0x33e9 00003408: JUMP 00003409: JUMPDEST 0000340a: POP 0000340b: DUP5 0000340c: DUP3 0000340d: LT 0000340e: ISZERO 0000340f: PUSH2 0x3427 00003412: JUMPI 00003413: DUP7 00003414: DUP5 00003415: ADD 00003416: MLOAD 00003417: PUSH1 0x00 00003419: NOT 0000341a: PUSH1 0x03 0000341c: DUP8 0000341d: SWAP1 0000341e: SHL 0000341f: PUSH1 0xf8 00003421: AND 00003422: SHR 00003423: NOT 00003424: AND 00003425: DUP2 00003426: SSTORE 00003427: JUMPDEST 00003428: POP 00003429: POP 0000342a: POP 0000342b: POP 0000342c: PUSH1 0x01 0000342e: SWAP1 0000342f: DUP2 00003430: SHL 00003431: ADD 00003432: SWAP1 00003433: SSTORE 00003434: POP 00003435: JUMP 00003436: JUMPDEST 00003437: PUSH1 0x00 00003439: PUSH1 0x20 0000343b: DUP3 0000343c: DUP5 0000343d: SUB 0000343e: SLT 0000343f: ISZERO 00003440: PUSH2 0x3448 00003443: JUMPI 00003444: PUSH1 0x00 00003446: DUP1 00003447: REVERT 00003448: JUMPDEST 00003449: DUP2 0000344a: MLOAD 0000344b: PUSH2 0x0a4f 0000344e: DUP2 0000344f: PUSH2 0x2ff9 00003452: JUMP 00003453: JUMPDEST 00003454: PUSH4 0x4e487b71 00003459: PUSH1 0xe0 0000345b: SHL 0000345c: PUSH1 0x00 0000345e: MSTORE 0000345f: PUSH1 0x21 00003461: PUSH1 0x04 00003463: MSTORE 00003464: PUSH1 0x24 00003466: PUSH1 0x00 00003468: REVERT 00003469: JUMPDEST 0000346a: PUSH1 0x00 0000346c: PUSH1 0xff 0000346e: DUP4 0000346f: AND 00003470: DUP1 00003471: PUSH2 0x347c 00003474: JUMPI 00003475: PUSH2 0x347c 00003478: PUSH2 0x3306 0000347b: JUMP 0000347c: JUMPDEST 0000347d: DUP1 0000347e: PUSH1 0xff 00003480: DUP5 00003481: AND 00003482: MOD 00003483: SWAP2 00003484: POP 00003485: POP 00003486: SWAP3 00003487: SWAP2 00003488: POP 00003489: POP 0000348a: JUMP 0000348b: JUMPDEST 0000348c: PUSH1 0x00 0000348e: DUP3 0000348f: MLOAD 00003490: PUSH2 0x349d 00003493: DUP2 00003494: DUP5 00003495: PUSH1 0x20 00003497: DUP8 00003498: ADD 00003499: PUSH2 0x2cf4 0000349c: JUMP 0000349d: JUMPDEST 0000349e: SWAP2 0000349f: SWAP1 000034a0: SWAP2 000034a1: ADD 000034a2: SWAP3 000034a3: SWAP2 000034a4: POP 000034a5: POP 000034a6: JUMP 000034a7: INVALID 000034a8: MSTORE 000034a9: UNKNOWN(0xC6) 000034aa: ORIGIN 000034ab: SELFBALANCE 000034ac: UNKNOWN(0xE1) 000034ad: DELEGATECALL 000034ae: PUSH30 0xb19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1 000034cd: DELEGATECALL 000034ce: PUSH30 0xb19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02360894a13b 000034ed: LOG1 000034ee: LOG3 000034ef: UNKNOWN(0x21) 000034f0: MOD 000034f1: PUSH8 0xc828492db98dca3e 000034fa: KECCAK256 000034fb: PUSH23 0xcc3735a920a3ca505d382bbc9b779b17422d0df9222301 00003513: DUP12 00003514: ORIGIN 00003515: UNKNOWN(0xB4) 00003516: UNKNOWN(0xD1) 00003517: STATICCALL 00003518: CHAINID 00003519: UNKNOWN(0xE0) 0000351a: PUSH18 0x723d6817e2486d003becc55f00a264697066 0000352d: PUSH20 0x58221220877857600ee00a88f25a1c4f1f14eefb 00003542: UNKNOWN(0xE8) 00003543: JUMPI 00003544: PC 00003545: SIGNEXTEND 00003546: UNKNOWN(0xD6) 00003547: SWAP9 00003548: PUSH14 0xac523a7ec5dfbd4a7b64736f6c63 00003557: NUMBER 00003558: STOP 00003559: ADDMOD 0000355a: BYTE 0000355b: STOP 0000355c: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | auth | detector | Authorization based on tx.origin | 70 | no | — |
viewvalidation_json{
"reason": "missing sink mapping",
"status": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xef8b30f7",
"selector": "0xef8b30f7",
"calldata_variants": [
"0xef8b30f7",
"0xef8b30f70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf14faf6f",
"selector": "0xf14faf6f",
"calldata_variants": [
"0xf14faf6f",
"0xf14faf6f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf4b70990",
"selector": "0xf4b70990",
"calldata_variants": [
"0xf4b70990",
"0xf4b709900000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd905777e",
"selector": "0xd905777e",
"calldata_variants": [
"0xd905777e",
"0xd905777e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe42d19dc",
"selector": "0xe42d19dc",
"calldata_variants": [
"0xe42d19dc",
"0xe42d19dc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xba087652",
"selector": "0xba087652",
"calldata_variants": [
"0xba087652",
"0xba0876520000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 13482,
"type": "tx_origin_used"
},
{
"pc": 13588,
"type": "tx_origin_used"
}
]
}
|
| high | upgradeability | detector | Untrusted DELEGATECALL target reachable | 55 | no | no |
viewtrace_id: 0xe45c971654a4195c79be60b2489b1793787ebc273bd5a1ec707eff182b03691a
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0xe45c971654a4195c79be60b2489b1793787ebc273bd5a1ec707eff182b03691a",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xef8b30f7",
"selector": "0xef8b30f7",
"calldata_variants": [
"0xef8b30f7",
"0xef8b30f70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf14faf6f",
"selector": "0xf14faf6f",
"calldata_variants": [
"0xf14faf6f",
"0xf14faf6f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf4b70990",
"selector": "0xf4b70990",
"calldata_variants": [
"0xf4b70990",
"0xf4b709900000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd905777e",
"selector": "0xd905777e",
"calldata_variants": [
"0xd905777e",
"0xd905777e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe42d19dc",
"selector": "0xe42d19dc",
"calldata_variants": [
"0xe42d19dc",
"0xe42d19dc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xba087652",
"selector": "0xba087652",
"calldata_variants": [
"0xba087652",
"0xba0876520000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 11133,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
},
{
"pc": 13485,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
},
{
"pc": 13517,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 13482,
"type": "tx_origin_used"
},
{
"pc": 13588,
"type": "tx_origin_used"
}
],
"delegatecall_count": 3,
"untrusted_delegatecall_count": 3
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 3
}
|
| medium | access_control | codex | AccessManager execution delays are bypassed for PerpManager/Vault privileged actions | 75 | no | — |
viewevidence_json{
"evidence": "`checkRole` only checks `hasRole` and discards the execution delay return value; vault modifiers call `isAdmin`/`checkRole` directly, so delays are never enforced.",
"locations": [
"contracts/contracts/admin/PerpManager.sol:148",
"contracts/contracts/admin/PerpManager.sol:153",
"contracts/contracts/vaults/WasabiVault.sol:104",
"contracts/contracts/vaults/WasabiVault.sol:110"
],
"recommendation": "Use AccessManaged-style `restricted` checks (via `IAccessManager.canCall`) or enforce `executionDelay == 0` in `checkRole`/`isAdmin`. Alternatively require privileged actions to be executed through `AccessManager.execute` so scheduling and delays are honored.",
"exploit_scenario": "If ADMIN_ROLE or VAULT_ADMIN_ROLE is configured with a non-zero execution delay for timelock protection, role holders can still call privileged methods (e.g., vault upgrades, parameter changes, strategy operations) directly because role checks only verify membership and ignore the configured delay. A compromised admin key can therefore act immediately, bypassing the intended delay window."
}
|
| medium | other | codex | Strategy withdrawals do not reconcile actual assets returned, overstating total assets | 75 | no | — |
viewevidence_json{
"evidence": "`strategyWithdraw` reduces `strategyDebt` without checking the amount of assets returned or adjusting `totalAssetValue` for losses.",
"locations": [
"contracts/contracts/vaults/WasabiVault.sol:217",
"contracts/contracts/vaults/WasabiVault.sol:228",
"contracts/contracts/vaults/WasabiVault.sol:230"
],
"recommendation": "Track actual assets received (e.g., balance-before/after) and decrease `totalAssetValue` for any loss; require strategies to return the precise asset amount withdrawn and validate it before updating `strategyDebt`.",
"exploit_scenario": "If a strategy returns fewer assets than `_withdrawAmount` (loss, slippage, or malicious behavior), the vault still reduces `strategyDebt` by the full requested amount and leaves `totalAssetValue` unchanged. This overstates share value and can let early withdrawers drain available liquidity while later users face insolvency or reverts."
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0x4a90c3bb11adde93179bda343aac2128a64068355ce9a16313daa1bcb2721b90
call_targets:
0x7f1cec2328170e510f2d0375ce1ba7ac45d1681a
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x4a90c3bb11adde93179bda343aac2128a64068355ce9a16313daa1bcb2721b90",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x7f1cec2328170e510f2d0375ce1ba7ac45d1681a"
],
"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": "0xef8b30f7",
"selector": "0xef8b30f7",
"calldata_variants": [
"0xef8b30f7",
"0xef8b30f70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf14faf6f",
"selector": "0xf14faf6f",
"calldata_variants": [
"0xf14faf6f",
"0xf14faf6f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf4b70990",
"selector": "0xf4b70990",
"calldata_variants": [
"0xf4b70990",
"0xf4b709900000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd905777e",
"selector": "0xd905777e",
"calldata_variants": [
"0xd905777e",
"0xd905777e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe42d19dc",
"selector": "0xe42d19dc",
"calldata_variants": [
"0xe42d19dc",
"0xe42d19dc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xba087652",
"selector": "0xba087652",
"calldata_variants": [
"0xba087652",
"0xba0876520000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3469,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4174,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5384,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 4,
"guards_detected": [
{
"pc": 13482,
"type": "tx_origin_used"
},
{
"pc": 13588,
"type": "tx_origin_used"
}
]
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0x4a90c3bb11adde93179bda343aac2128a64068355ce9a16313daa1bcb2721b90
call_targets:
0x7f1cec2328170e510f2d0375ce1ba7ac45d1681a
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x4a90c3bb11adde93179bda343aac2128a64068355ce9a16313daa1bcb2721b90",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x7f1cec2328170e510f2d0375ce1ba7ac45d1681a"
],
"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": "0xef8b30f7",
"selector": "0xef8b30f7",
"calldata_variants": [
"0xef8b30f7",
"0xef8b30f70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf14faf6f",
"selector": "0xf14faf6f",
"calldata_variants": [
"0xf14faf6f",
"0xf14faf6f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf4b70990",
"selector": "0xf4b70990",
"calldata_variants": [
"0xf4b70990",
"0xf4b709900000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd905777e",
"selector": "0xd905777e",
"calldata_variants": [
"0xd905777e",
"0xd905777e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe42d19dc",
"selector": "0xe42d19dc",
"calldata_variants": [
"0xe42d19dc",
"0xe42d19dc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xba087652",
"selector": "0xba087652",
"calldata_variants": [
"0xba087652",
"0xba0876520000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3469,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4174,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5384,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 4,
"guards_detected": [
{
"pc": 13482,
"type": "tx_origin_used"
},
{
"pc": 13588,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 4
}
|
| low | math | codex | Interest fee shares are minted before interest is added, inflating fees | 65 | no | — |
viewevidence_json{
"evidence": "`recordRepayment` calls `_handleInterestFee` before incrementing `totalAssetValue`, while `_handleInterestFee` uses `_convertToShares` based on current `totalAssets`.",
"locations": [
"contracts/contracts/vaults/WasabiVault.sol:184",
"contracts/contracts/vaults/WasabiVault.sol:193",
"contracts/contracts/vaults/WasabiVault.sol:351"
],
"recommendation": "Add interest to `totalAssetValue` before computing fee shares, or compute fee shares using a dilution-aware formula based on post-interest assets (and make the order consistent with `_strategyClaim`).",
"exploit_scenario": "When a pool repays with interest, `_handleInterestFee` is called before `totalAssetValue` is increased. Fee shares are thus minted at a cheaper pre-interest share price, giving the fee receiver more than the configured percentage of interest (diluting depositors). The discrepancy grows with larger interest relative to assets."
}
|
| info | other | cast | Heavy CALL-family usage | 55 | no | — |
viewevidence_json{
"notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
"call_family_count": 21
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 12
}
|