9fa9421d-55fc-4a1c-bd24-abcb9b4c1d7e
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 |
|---|---|---|---|---|
| 30579 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 104333 | artifact.fetch | failed | 1 / 3 | 1 week ago |
| 104334 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 104335 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 104336 | capability.graph | complete | 1 / 3 | 1 week ago |
| 104337 | detector.run | complete | 1 / 3 | 1 week ago |
| 104338 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1204517] OpenAI Codex v0.77.0 (research preview)
[codex:1204517] --------
[codex:1204517] workdir: /tmp/codex-multi-0cr6dm65
[codex:1204517] model: gpt-5.2-codex
[codex:1204517] provider: openai
[codex:1204517] approval: never
[codex:1204517] sandbox: read-only
[codex:1204517] reasoning effort: xhigh
[codex:1204517] reasoning summaries: auto
[codex:1204517] session id: 019b6bc9-0960-75d0-8206-fb7aca9dbe9c
[codex:1204517] --------
[codex:1204517] user
[codex:1204517] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1204517] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1204517] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1204517]
[codex:1204517] Scope rules:
[codex:1204517] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1204517] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1204517]
[codex:1204517] Output MUST be valid JSON matching the provided schema.
[codex:1204517] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1204517] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1204517]
[codex:1204517] Output constraints (IMPORTANT):
[codex:1204517] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1204517] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1204517] mcp startup: no servers
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Preparing to read instructions**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc ls in /tmp/codex-multi-0cr6dm65 succeeded in 5ms:
[codex:1204517] AUDIT_BUNDLE.txt
[codex:1204517] codex-output-schema.json
[codex:1204517] contracts
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Reading AUDIT_BUNDLE.txt contents**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-0cr6dm65 succeeded in 6ms:
[codex:1204517] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1204517]
[codex:1204517] ================================================================================
[codex:1204517] FILE: contracts/contracts/Revert.sol
[codex:1204517] ================================================================================
[codex:1204517] // SPDX-License-Identifier: MIT
[codex:1204517] pragma solidity 0.8.26;
[codex:1204517]
[codex:1204517] /// @notice Struct containing revert options
[codex:1204517] /// @param revertAddress Address to receive revert.
[codex:1204517] /// @param callOnRevert Flag if onRevert hook should be called.
[codex:1204517] /// @param abortAddress Address to receive funds if aborted.
[codex:1204517] /// @param revertMessage Arbitrary data sent back in onRevert.
[codex:1204517] /// @param onRevertGasLimit Gas limit for revert tx, unused on GatewayZEVM methods
[codex:1204517] struct RevertOptions {
[codex:1204517] address revertAddress;
[codex:1204517] bool callOnRevert;
[codex:1204517] address abortAddress;
[codex:1204517] bytes revertMessage;
[codex:1204517] uint256 onRevertGasLimit;
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Planning segmented reading of large file**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc 'wc -l AUDIT_BUNDLE.txt' in /tmp/codex-multi-0cr6dm65 succeeded in 5ms:
[codex:1204517] 2541 AUDIT_BUNDLE.txt
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Planning stepwise file reading**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '1,200p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 7ms:
[codex:1204517] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1204517]
[codex:1204517] ================================================================================
[codex:1204517] FILE: contracts/contracts/Revert.sol
[codex:1204517] ================================================================================
[codex:1204517] // SPDX-License-Identifier: MIT
[codex:1204517] pragma solidity 0.8.26;
[codex:1204517]
[codex:1204517] /// @notice Struct containing revert options
[codex:1204517] /// @param revertAddress Address to receive revert.
[codex:1204517] /// @param callOnRevert Flag if onRevert hook should be called.
[codex:1204517] /// @param abortAddress Address to receive funds if aborted.
[codex:1204517] /// @param revertMessage Arbitrary data sent back in onRevert.
[codex:1204517] /// @param onRevertGasLimit Gas limit for revert tx, unused on GatewayZEVM methods
[codex:1204517] struct RevertOptions {
[codex:1204517] address revertAddress;
[codex:1204517] bool callOnRevert;
[codex:1204517] address abortAddress;
[codex:1204517] bytes revertMessage;
[codex:1204517] uint256 onRevertGasLimit;
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Continuing process**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '200,400p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 5ms:
[codex:1204517] public
[codex:1204517] nonReentrant
[codex:1204517] onlyRole(WITHDRAWER_ROLE)
[codex:1204517] whenNotPaused
[codex:1204517] {
[codex:1204517] if (!whitelisted[token]) revert NotWhitelisted();
[codex:1204517]
[codex:1204517] // Transfer the tokens to the Gateway contract
[codex:1204517] IERC20(token).safeTransfer(address(gateway), amount);
[codex:1204517]
[codex:1204517] // Forward the call to the Gateway contract
[codex:1204517] gateway.executeWithERC20(messageContext, token, to, amount, data);
[codex:1204517]
[codex:1204517] emit WithdrawnAndCalled(to, token, amount, data);
[codex:1204517] }
[codex:1204517]
[codex:1204517] /// @notice WithdrawAndRevert transfers tokens to Gateway and call a contract with a revert functionality through
[codex:1204517] /// the Gateway.
[codex:1204517] /// @dev This function can only be called by the TSS address.
[codex:1204517] /// @param to Address of the contract to call.
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Continuing exploration**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '400,600p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 5ms:
[codex:1204517] /// @param amount The amount of ETH sent with the call.
[codex:1204517] /// @param data The calldata passed to the contract call.
[codex:1204517] /// @param revertContext Revert context to pass to onRevert.
[codex:1204517] event Reverted(address indexed to, address indexed token, uint256 amount, bytes data, RevertContext revertContext);
[codex:1204517]
[codex:1204517] /// @notice Emitted when a contract call with ERC20 tokens is executed.
[codex:1204517] /// @param token The address of the ERC20 token.
[codex:1204517] /// @param to The address of the contract called.
[codex:1204517] /// @param amount The amount of tokens transferred.
[codex:1204517] /// @param data The calldata passed to the contract call.
[codex:1204517] event ExecutedWithERC20(address indexed token, address indexed to, uint256 amount, bytes data);
[codex:1204517]
[codex:1204517] /// @notice Emitted when a deposit is made.
[codex:1204517] /// @param sender The address of the sender.
[codex:1204517] /// @param receiver The address of the receiver.
[codex:1204517] /// @param amount The amount of ETH or tokens deposited.
[codex:1204517] /// @param asset The address of the ERC20 token (zero address if ETH).
[codex:1204517] /// @param payload The calldata passed with the deposit. No longer used. Kept to maintain compatibility.
[codex:1204517] /// @param revertOptions Revert options.
[codex:1204517] event Deposited(
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Continuing with task**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '600,800p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 6ms:
[codex:1204517] /// @param revertOptions Revert options.
[codex:1204517] function call(address receiver, bytes calldata payload, RevertOptions calldata revertOptions) external;
[codex:1204517] }
[codex:1204517]
[codex:1204517] /// @notice Message context passed to execute function.
[codex:1204517] /// @param sender Sender from omnichain contract.
[codex:1204517] struct MessageContext {
[codex:1204517] address sender;
[codex:1204517] }
[codex:1204517]
[codex:1204517] /// @notice Interface implemented by contracts receiving authenticated calls.
[codex:1204517] interface Callable {
[codex:1204517] function onCall(MessageContext calldata context, bytes calldata message) external payable returns (bytes memory);
[codex:1204517] }
[codex:1204517]
[codex:1204517] ================================================================================
[codex:1204517] FILE: contracts/node_modules/@openzeppelin/contracts/access/IAccessControl.sol
[codex:1204517] ================================================================================
[codex:1204517] // SPDX-License-Identifier: MIT
[codex:1204517] // OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol)
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Planning targeted scan of AUDIT_BUNDLE**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc 'rg "FILE: contracts/contracts" -n AUDIT_BUNDLE.txt' in /tmp/codex-multi-0cr6dm65 succeeded in 6ms:
[codex:1204517] 4:FILE: contracts/contracts/Revert.sol
[codex:1204517] 44:FILE: contracts/contracts/evm/ERC20Custody.sol
[codex:1204517] 271:FILE: contracts/contracts/evm/interfaces/IERC20Custody.sol
[codex:1204517] 381:FILE: contracts/contracts/evm/interfaces/IGatewayEVM.sol
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Planning sequential audit file review**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '800,1000p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 5ms:
[codex:1204517] error ERC1967NonPayable();
[codex:1204517]
[codex:1204517] /**
[codex:1204517] * @dev Returns the current implementation address.
[codex:1204517] */
[codex:1204517] function getImplementation() internal view returns (address) {
[codex:1204517] return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value;
[codex:1204517] }
[codex:1204517]
[codex:1204517] /**
[codex:1204517] * @dev Stores a new address in the EIP1967 implementation slot.
[codex:1204517] */
[codex:1204517] function _setImplementation(address newImplementation) private {
[codex:1204517] if (newImplementation.code.length == 0) {
[codex:1204517] revert ERC1967InvalidImplementation(newImplementation);
[codex:1204517] }
[codex:1204517] StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation;
[codex:1204517] }
[codex:1204517]
[codex:1204517] /**
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Continuing exploration**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '1000,1200p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 5ms:
[codex:1204517] */
[codex:1204517] function transfer(address to, uint256 value) external returns (bool);
[codex:1204517]
[codex:1204517] /**
[codex:1204517] * @dev Returns the remaining number of tokens that `spender` will be
[codex:1204517] * allowed to spend on behalf of `owner` through {transferFrom}. This is
[codex:1204517] * zero by default.
[codex:1204517] *
[codex:1204517] * This value changes when {approve} or {transferFrom} are called.
[codex:1204517] */
[codex:1204517] function allowance(address owner, address spender) external view returns (uint256);
[codex:1204517]
[codex:1204517] /**
[codex:1204517] * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
[codex:1204517] * caller's tokens.
[codex:1204517] *
[codex:1204517] * Returns a boolean value indicating whether the operation succeeded.
[codex:1204517] *
[codex:1204517] * IMPORTANT: Beware that changing an allowance with this method brings the risk
[codex:1204517] * that someone may use both the old and the new allowance by unfortunate
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Continuing with task**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '1200,1400p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 5ms:
[codex:1204517] uint256 currentAllowance = token.allowance(address(this), spender);
[codex:1204517] if (currentAllowance < requestedDecrease) {
[codex:1204517] revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
[codex:1204517] }
[codex:1204517] forceApprove(token, spender, currentAllowance - requestedDecrease);
[codex:1204517] }
[codex:1204517] }
[codex:1204517]
[codex:1204517] /**
[codex:1204517] * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
[codex:1204517] * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
[codex:1204517] * to be set to zero before setting it to a non-zero value, such as USDT.
[codex:1204517] */
[codex:1204517] function forceApprove(IERC20 token, address spender, uint256 value) internal {
[codex:1204517] bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));
[codex:1204517]
[codex:1204517] if (!_callOptionalReturnBool(token, approvalCall)) {
[codex:1204517] _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
[codex:1204517] _callOptionalReturn(token, approvalCall);
[codex:1204517] }
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Continuing exploration**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '1400,1600p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 6ms:
[codex:1204517] }
[codex:1204517]
[codex:1204517] /**
[codex:1204517] * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
[codex:1204517] */
[codex:1204517] function _revert(bytes memory returndata) private pure {
[codex:1204517] // Look for revert reason and bubble it up if present
[codex:1204517] if (returndata.length > 0) {
[codex:1204517] // The easiest way to bubble the revert reason is using memory via assembly
[codex:1204517] /// @solidity memory-safe-assembly
[codex:1204517] assembly {
[codex:1204517] let returndata_size := mload(returndata)
[codex:1204517] revert(add(32, returndata), returndata_size)
[codex:1204517] }
[codex:1204517] } else {
[codex:1204517] revert FailedInnerCall();
[codex:1204517] }
[codex:1204517] }
[codex:1204517] }
[codex:1204517]
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Continuing exploration**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '1600,1800p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 5ms:
[codex:1204517]
[codex:1204517] /**
[codex:1204517] * @dev Contract module that allows children to implement role-based access
[codex:1204517] * control mechanisms. This is a lightweight version that doesn't allow enumerating role
[codex:1204517] * members except through off-chain means by accessing the contract event logs. Some
[codex:1204517] * applications may benefit from on-chain enumerability, for those cases see
[codex:1204517] * {AccessControlEnumerable}.
[codex:1204517] *
[codex:1204517] * Roles are referred to by their `bytes32` identifier. These should be exposed
[codex:1204517] * in the external API and be unique. The best way to achieve this is by
[codex:1204517] * using `public constant` hash digests:
[codex:1204517] *
[codex:1204517] * ```solidity
[codex:1204517] * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
[codex:1204517] * ```
[codex:1204517] *
[codex:1204517] * Roles can be used to represent a set of permissions. To restrict access to a
[codex:1204517] * function call, use {hasRole}:
[codex:1204517] *
[codex:1204517] * ```solidity
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Continuing process**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '1800,2000p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 6ms:
[codex:1204517] return true;
[codex:1204517] } else {
[codex:1204517] return false;
[codex:1204517] }
[codex:1204517] }
[codex:1204517]
[codex:1204517] /**
[codex:1204517] * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked.
[codex:1204517] *
[codex:1204517] * Internal function without access restriction.
[codex:1204517] *
[codex:1204517] * May emit a {RoleRevoked} event.
[codex:1204517] */
[codex:1204517] function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {
[codex:1204517] AccessControlStorage storage $ = _getAccessControlStorage();
[codex:1204517] if (hasRole(role, account)) {
[codex:1204517] $._roles[role].hasRole[account] = false;
[codex:1204517] emit RoleRevoked(role, account, _msgSender());
[codex:1204517] return true;
[codex:1204517] } else {
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Continuing exploration**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '2000,2200p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 5ms:
[codex:1204517] }
[codex:1204517]
[codex:1204517] /**
[codex:1204517] * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.
[codex:1204517] */
[codex:1204517] function _checkInitializing() internal view virtual {
[codex:1204517] if (!_isInitializing()) {
[codex:1204517] revert NotInitializing();
[codex:1204517] }
[codex:1204517] }
[codex:1204517]
[codex:1204517] /**
[codex:1204517] * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
[codex:1204517] * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
[codex:1204517] * to any version. It is recommended to use this to lock implementation contracts that are designed to be called
[codex:1204517] * through proxies.
[codex:1204517] *
[codex:1204517] * Emits an {Initialized} event the first time it is successfully executed.
[codex:1204517] */
[codex:1204517] function _disableInitializers() internal virtual {
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Continuing process**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '2200,2400p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 8ms:
[codex:1204517] */
[codex:1204517] function _upgradeToAndCallUUPS(address newImplementation, bytes memory data) private {
[codex:1204517] try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {
[codex:1204517] if (slot != ERC1967Utils.IMPLEMENTATION_SLOT) {
[codex:1204517] revert UUPSUnsupportedProxiableUUID(slot);
[codex:1204517] }
[codex:1204517] ERC1967Utils.upgradeToAndCall(newImplementation, data);
[codex:1204517] } catch {
[codex:1204517] // The implementation is not UUPS
[codex:1204517] revert ERC1967Utils.ERC1967InvalidImplementation(newImplementation);
[codex:1204517] }
[codex:1204517] }
[codex:1204517] }
[codex:1204517]
[codex:1204517] ================================================================================
[codex:1204517] FILE: contracts/node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol
[codex:1204517] ================================================================================
[codex:1204517] // SPDX-License-Identifier: MIT
[codex:1204517] // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
[codex:1204517]
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Finishing remaining task**
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "sed -n '2400,2541p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-0cr6dm65 succeeded in 6ms:
[codex:1204517] // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol)
[codex:1204517]
[codex:1204517] pragma solidity ^0.8.20;
[codex:1204517] import {Initializable} from "../proxy/utils/Initializable.sol";
[codex:1204517]
[codex:1204517] /**
[codex:1204517] * @dev Contract module that helps prevent reentrant calls to a function.
[codex:1204517] *
[codex:1204517] * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
[codex:1204517] * available, which can be applied to functions to make sure there are no nested
[codex:1204517] * (reentrant) calls to them.
[codex:1204517] *
[codex:1204517] * Note that because there is a single `nonReentrant` guard, functions marked as
[codex:1204517] * `nonReentrant` may not call one another. This can be worked around by making
[codex:1204517] * those functions `private`, and then adding `external` `nonReentrant` entry
[codex:1204517] * points to them.
[codex:1204517] *
[codex:1204517] * TIP: If you would like to learn more about reentrancy and alternative ways
[codex:1204517] * to protect against it, check out our blog post
[codex:1204517] * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
[codex:1204517]
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Analyzing ERC20Custody upgradeability and access control risks**
[codex:1204517] thinking
[codex:1204517] **Identifying function checks and preparing for line number referencing**
[codex:1204517]
[codex:1204517] I’m noting missing zero-address checks in withdraw functions and reviewing updateTSSAddress timing; now I plan to find exact line numbers in ERC20Custody.sol for precise reporting, especially around initialize and constructor absence.
[codex:1204517] exec
[codex:1204517] /bin/bash -lc "nl -ba contracts/contracts/evm/ERC20Custody.sol | sed -n '1,240p'" in /tmp/codex-multi-0cr6dm65 succeeded in 6ms:
[codex:1204517] 1 // SPDX-License-Identifier: MIT
[codex:1204517] 2 pragma solidity 0.8.26;
[codex:1204517] 3
[codex:1204517] 4 import { IERC20Custody } from "./interfaces/IERC20Custody.sol";
[codex:1204517] 5 import { IGatewayEVM, MessageContext } from "./interfaces/IGatewayEVM.sol";
[codex:1204517] 6
[codex:1204517] 7 import { RevertContext } from "../../contracts/Revert.sol";
[codex:1204517] 8
[codex:1204517] 9 import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
[codex:1204517] 10
[codex:1204517] 11 import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
[codex:1204517] 12 import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
[codex:1204517] 13 import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol";
[codex:1204517] 14 import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
[codex:1204517] 15 import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:1204517] 16 import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:1204517] 17
[codex:1204517] 18 /// @title ERC20Custody
[codex:1204517] 19 /// @notice Holds the ERC20 tokens deposited on ZetaChain and includes functionality to call a contract.
[codex:1204517] 20 /// @dev This contract does not call smart contracts directly, it passes through the Gateway contract.
[codex:1204517]
[codex:1204517] thinking
[codex:1204517] **Preparing audit findings and JSON output**
[codex:1204517] codex
[codex:1204517] {"no_findings":false,"summary":"Found 2 low-severity issues in ERC20Custody: incomplete role revocation on TSS rotation and missing initializer lock on the implementation.","findings":[{"severity":"low","category":"access_control","title":"Old TSS retains PAUSER_ROLE after TSS rotation","exploit_scenario":"When the admin rotates the TSS (e.g., after compromise), the old TSS keeps PAUSER_ROLE and can still pause/unpause the contract. A compromised former TSS can repeatedly pause to disrupt withdrawals/deposits, causing a denial-of-service until the admin intervenes.","recommendation":"In updateTSSAddress, revoke PAUSER_ROLE from the old tssAddress and (if intended) grant PAUSER_ROLE to the new TSS. Consider explicitly documenting which roles should move with TSS rotation.","evidence":"initialize grants PAUSER_ROLE to tssAddress, but updateTSSAddress only revokes WITHDRAWER_ROLE and WHITELISTER_ROLE, leaving PAUSER_ROLE untouched.","locations":["contracts/contracts/evm/ERC20Custody.sol:61","contracts/contracts/evm/ERC20Custody.sol:87"]},{"severity":"low","category":"upgradeability","title":"Implementation contract not locked against initialization","exploit_scenario":"Because the implementation lacks a constructor that disables initializers, any account can initialize the implementation contract directly and gain admin roles in its storage. If assets are accidentally sent to the implementation address, the attacker can withdraw/whitelist using those roles (or otherwise abuse admin-only functions on the implementation).","recommendation":"Add a constructor that calls `_disableInitializers()` (with the appropriate OZ unsafe-allow annotation) to lock the implementation contract.","evidence":"ERC20Custody is upgradeable and exposes initialize, but has no constructor calling _disableInitializers to lock the implementation.","locations":["contracts/contracts/evm/ERC20Custody.sol:18","contracts/contracts/evm/ERC20Custody.sol:46"]}]}
[codex:1204517] tokens used
[codex:1204517] 56,608
[codex:1204517] {"no_findings":false,"summary":"Found 2 low-severity issues in ERC20Custody: incomplete role revocation on TSS rotation and missing initializer lock on the implementation.","findings":[{"severity":"low","category":"access_control","title":"Old TSS retains PAUSER_ROLE after TSS rotation","exploit_scenario":"When the admin rotates the TSS (e.g., after compromise), the old TSS keeps PAUSER_ROLE and can still pause/unpause the contract. A compromised former TSS can repeatedly pause to disrupt withdrawals/deposits, causing a denial-of-service until the admin intervenes.","recommendation":"In updateTSSAddress, revoke PAUSER_ROLE from the old tssAddress and (if intended) grant PAUSER_ROLE to the new TSS. Consider explicitly documenting which roles should move with TSS rotation.","evidence":"initialize grants PAUSER_ROLE to tssAddress, but updateTSSAddress only revokes WITHDRAWER_ROLE and WHITELISTER_ROLE, leaving PAUSER_ROLE untouched.","locations":["contracts/contracts/evm/ERC20Custody.sol:61","contracts/contracts/evm/ERC20Custody.sol:87"]},{"severity":"low","category":"upgradeability","title":"Implementation contract not locked against initialization","exploit_scenario":"Because the implementation lacks a constructor that disables initializers, any account can initialize the implementation contract directly and gain admin roles in its storage. If assets are accidentally sent to the implementation address, the attacker can withdraw/whitelist using those roles (or otherwise abuse admin-only functions on the implementation).","recommendation":"Add a constructor that calls `_disableInitializers()` (with the appropriate OZ unsafe-allow annotation) to lock the implementation contract.","evidence":"ERC20Custody is upgradeable and exposes initialize, but has no constructor calling _disableInitializers to lock the implementation.","locations":["contracts/contracts/evm/ERC20Custody.sol:18","contracts/contracts/evm/ERC20Custody.sol:46"]}]}
{
"codex": {
"ran_at": "2025-12-29T20:28:26.874147+00:00",
"returncode": 0
},
"summary": "Found 2 low-severity issues in ERC20Custody: incomplete role revocation on TSS rotation and missing initializer lock on the implementation.",
"raw_final": {
"summary": "Found 2 low-severity issues in ERC20Custody: incomplete role revocation on TSS rotation and missing initializer lock on the implementation.",
"findings": [
{
"title": "Old TSS retains PAUSER_ROLE after TSS rotation",
"category": "access_control",
"evidence": "initialize grants PAUSER_ROLE to tssAddress, but updateTSSAddress only revokes WITHDRAWER_ROLE and WHITELISTER_ROLE, leaving PAUSER_ROLE untouched.",
"severity": "low",
"locations": [
"contracts/contracts/evm/ERC20Custody.sol:61",
"contracts/contracts/evm/ERC20Custody.sol:87"
],
"recommendation": "In updateTSSAddress, revoke PAUSER_ROLE from the old tssAddress and (if intended) grant PAUSER_ROLE to the new TSS. Consider explicitly documenting which roles should move with TSS rotation.",
"exploit_scenario": "When the admin rotates the TSS (e.g., after compromise), the old TSS keeps PAUSER_ROLE and can still pause/unpause the contract. A compromised former TSS can repeatedly pause to disrupt withdrawals/deposits, causing a denial-of-service until the admin intervenes."
},
{
"title": "Implementation contract not locked against initialization",
"category": "upgradeability",
"evidence": "ERC20Custody is upgradeable and exposes initialize, but has no constructor calling _disableInitializers to lock the implementation.",
"severity": "low",
"locations": [
"contracts/contracts/evm/ERC20Custody.sol:18",
"contracts/contracts/evm/ERC20Custody.sol:46"
],
"recommendation": "Add a constructor that calls `_disableInitializers()` (with the appropriate OZ unsafe-allow annotation) to lock the implementation contract.",
"exploit_scenario": "Because the implementation lacks a constructor that disables initializers, any account can initialize the implementation contract directly and gain admin roles in its storage. If assets are accidentally sent to the implementation address, the attacker can withdraw/whitelist using those roles (or otherwise abuse admin-only functions on the implementation)."
}
],
"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 0x01c2 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x91d14854 00000019: GT 0000001a: PUSH2 0x00f7 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xad3cb1cc 00000024: GT 00000025: PUSH2 0x0095 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xd9caed12 0000002f: GT 00000030: PUSH2 0x0064 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xd9caed12 0000003a: EQ 0000003b: PUSH2 0x05f6 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xe609055e 00000045: EQ 00000046: PUSH2 0x0616 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xe63ab1e9 00000050: EQ 00000051: PUSH2 0x0636 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xeab103df 0000005b: EQ 0000005c: PUSH2 0x066a 0000005f: JUMPI 00000060: PUSH1 0x00 00000062: DUP1 00000063: REVERT 00000064: JUMPDEST 00000065: DUP1 00000066: PUSH4 0xad3cb1cc 0000006b: EQ 0000006c: PUSH2 0x0530 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0xc0c53b8b 00000076: EQ 00000077: PUSH2 0x0586 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0xd547741f 00000081: EQ 00000082: PUSH2 0x05a6 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0xd936547e 0000008c: EQ 0000008d: PUSH2 0x05c6 00000090: JUMPI 00000091: PUSH1 0x00 00000093: DUP1 00000094: REVERT 00000095: JUMPDEST 00000096: DUP1 00000097: PUSH4 0x9a590427 0000009c: GT 0000009d: PUSH2 0x00d1 000000a0: JUMPI 000000a1: DUP1 000000a2: PUSH4 0x9a590427 000000a7: EQ 000000a8: PUSH2 0x04bb 000000ab: JUMPI 000000ac: DUP1 000000ad: PUSH4 0x9b19251a 000000b2: EQ 000000b3: PUSH2 0x04db 000000b6: JUMPI 000000b7: DUP1 000000b8: PUSH4 0xa217fddf 000000bd: EQ 000000be: PUSH2 0x04fb 000000c1: JUMPI 000000c2: DUP1 000000c3: PUSH4 0xad081852 000000c8: EQ 000000c9: PUSH2 0x0510 000000cc: JUMPI 000000cd: PUSH1 0x00 000000cf: DUP1 000000d0: REVERT 000000d1: JUMPDEST 000000d2: DUP1 000000d3: PUSH4 0x91d14854 000000d8: EQ 000000d9: PUSH2 0x0416 000000dc: JUMPI 000000dd: DUP1 000000de: PUSH4 0x950837aa 000000e3: EQ 000000e4: PUSH2 0x047b 000000e7: JUMPI 000000e8: DUP1 000000e9: PUSH4 0x99a3c356 000000ee: EQ 000000ef: PUSH2 0x049b 000000f2: JUMPI 000000f3: PUSH1 0x00 000000f5: DUP1 000000f6: REVERT 000000f7: JUMPDEST 000000f8: DUP1 000000f9: PUSH4 0x4f1ef286 000000fe: GT 000000ff: PUSH2 0x0164 00000102: JUMPI 00000103: DUP1 00000104: PUSH4 0x5b112591 00000109: GT 0000010a: PUSH2 0x013e 0000010d: JUMPI 0000010e: DUP1 0000010f: PUSH4 0x5b112591 00000114: EQ 00000115: PUSH2 0x0376 00000118: JUMPI 00000119: DUP1 0000011a: PUSH4 0x5c975abb 0000011f: EQ 00000120: PUSH2 0x0396 00000123: JUMPI 00000124: DUP1 00000125: PUSH4 0x8456cb59 0000012a: EQ 0000012b: PUSH2 0x03cd 0000012e: JUMPI 0000012f: DUP1 00000130: PUSH4 0x85f438c1 00000135: EQ 00000136: PUSH2 0x03e2 00000139: JUMPI 0000013a: PUSH1 0x00 0000013c: DUP1 0000013d: REVERT 0000013e: JUMPDEST 0000013f: DUP1 00000140: PUSH4 0x4f1ef286 00000145: EQ 00000146: PUSH2 0x031a 00000149: JUMPI 0000014a: DUP1 0000014b: PUSH4 0x52d1902d 00000150: EQ 00000151: PUSH2 0x032d 00000154: JUMPI 00000155: DUP1 00000156: PUSH4 0x570618e1 0000015b: EQ 0000015c: PUSH2 0x0342 0000015f: JUMPI 00000160: PUSH1 0x00 00000162: DUP1 00000163: REVERT 00000164: JUMPDEST 00000165: DUP1 00000166: PUSH4 0x252f07bf 0000016b: GT 0000016c: PUSH2 0x01a0 0000016f: JUMPI 00000170: DUP1 00000171: PUSH4 0x252f07bf 00000176: EQ 00000177: PUSH2 0x0291 0000017a: JUMPI 0000017b: DUP1 0000017c: PUSH4 0x2f2ff15d 00000181: EQ 00000182: PUSH2 0x02c3 00000185: JUMPI 00000186: DUP1 00000187: PUSH4 0x36568abe 0000018c: EQ 0000018d: PUSH2 0x02e5 00000190: JUMPI 00000191: DUP1 00000192: PUSH4 0x3f4ba83a 00000197: EQ 00000198: PUSH2 0x0305 0000019b: JUMPI 0000019c: PUSH1 0x00 0000019e: DUP1 0000019f: REVERT 000001a0: JUMPDEST 000001a1: DUP1 000001a2: PUSH4 0x01ffc9a7 000001a7: EQ 000001a8: PUSH2 0x01c7 000001ab: JUMPI 000001ac: DUP1 000001ad: PUSH4 0x116191b6 000001b2: EQ 000001b3: PUSH2 0x01fc 000001b6: JUMPI 000001b7: DUP1 000001b8: PUSH4 0x248a9ca3 000001bd: EQ 000001be: PUSH2 0x0234 000001c1: JUMPI 000001c2: JUMPDEST 000001c3: PUSH1 0x00 000001c5: DUP1 000001c6: REVERT 000001c7: JUMPDEST 000001c8: CALLVALUE 000001c9: DUP1 000001ca: ISZERO 000001cb: PUSH2 0x01d3 000001ce: JUMPI 000001cf: PUSH1 0x00 000001d1: DUP1 000001d2: REVERT 000001d3: JUMPDEST 000001d4: POP 000001d5: PUSH2 0x01e7 000001d8: PUSH2 0x01e2 000001db: CALLDATASIZE 000001dc: PUSH1 0x04 000001de: PUSH2 0x2170 000001e1: JUMP 000001e2: JUMPDEST 000001e3: PUSH2 0x068a 000001e6: JUMP 000001e7: JUMPDEST 000001e8: PUSH1 0x40 000001ea: MLOAD 000001eb: SWAP1 000001ec: ISZERO 000001ed: ISZERO 000001ee: DUP2 000001ef: MSTORE 000001f0: PUSH1 0x20 000001f2: ADD 000001f3: JUMPDEST 000001f4: PUSH1 0x40 000001f6: MLOAD 000001f7: DUP1 000001f8: SWAP2 000001f9: SUB 000001fa: SWAP1 000001fb: RETURN 000001fc: JUMPDEST 000001fd: CALLVALUE 000001fe: DUP1 000001ff: ISZERO 00000200: PUSH2 0x0208 00000203: JUMPI 00000204: PUSH1 0x00 00000206: DUP1 00000207: REVERT 00000208: JUMPDEST 00000209: POP 0000020a: PUSH1 0x00 0000020c: SLOAD 0000020d: PUSH2 0x021c 00000210: SWAP1 00000211: PUSH1 0x01 00000213: PUSH1 0x01 00000215: PUSH1 0xa0 00000217: SHL 00000218: SUB 00000219: AND 0000021a: DUP2 0000021b: JUMP 0000021c: JUMPDEST 0000021d: PUSH1 0x40 0000021f: MLOAD 00000220: PUSH1 0x01 00000222: PUSH1 0x01 00000224: PUSH1 0xa0 00000226: SHL 00000227: SUB 00000228: SWAP1 00000229: SWAP2 0000022a: AND 0000022b: DUP2 0000022c: MSTORE 0000022d: PUSH1 0x20 0000022f: ADD 00000230: PUSH2 0x01f3 00000233: JUMP 00000234: JUMPDEST 00000235: CALLVALUE 00000236: DUP1 00000237: ISZERO 00000238: PUSH2 0x0240 0000023b: JUMPI 0000023c: PUSH1 0x00 0000023e: DUP1 0000023f: REVERT 00000240: JUMPDEST 00000241: POP 00000242: PUSH2 0x0283 00000245: PUSH2 0x024f 00000248: CALLDATASIZE 00000249: PUSH1 0x04 0000024b: PUSH2 0x21b2 0000024e: JUMP 0000024f: JUMPDEST 00000250: PUSH1 0x00 00000252: SWAP1 00000253: DUP2 00000254: MSTORE 00000255: PUSH32 0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800 00000276: PUSH1 0x20 00000278: MSTORE 00000279: PUSH1 0x40 0000027b: SWAP1 0000027c: KECCAK256 0000027d: PUSH1 0x01 0000027f: ADD 00000280: SLOAD 00000281: SWAP1 00000282: JUMP 00000283: JUMPDEST 00000284: PUSH1 0x40 00000286: MLOAD 00000287: SWAP1 00000288: DUP2 00000289: MSTORE 0000028a: PUSH1 0x20 0000028c: ADD 0000028d: PUSH2 0x01f3 00000290: JUMP 00000291: JUMPDEST 00000292: CALLVALUE 00000293: DUP1 00000294: ISZERO 00000295: PUSH2 0x029d 00000298: JUMPI 00000299: PUSH1 0x00 0000029b: DUP1 0000029c: REVERT 0000029d: JUMPDEST 0000029e: POP 0000029f: PUSH1 0x02 000002a1: SLOAD 000002a2: PUSH2 0x01e7 000002a5: SWAP1 000002a6: PUSH21 0x010000000000000000000000000000000000000000 000002bc: SWAP1 000002bd: DIV 000002be: PUSH1 0xff 000002c0: AND 000002c1: DUP2 000002c2: JUMP 000002c3: JUMPDEST 000002c4: CALLVALUE 000002c5: DUP1 000002c6: ISZERO 000002c7: PUSH2 0x02cf 000002ca: JUMPI 000002cb: PUSH1 0x00 000002cd: DUP1 000002ce: REVERT 000002cf: JUMPDEST 000002d0: POP 000002d1: PUSH2 0x02e3 000002d4: PUSH2 0x02de 000002d7: CALLDATASIZE 000002d8: PUSH1 0x04 000002da: PUSH2 0x21e0 000002dd: JUMP 000002de: JUMPDEST 000002df: PUSH2 0x0723 000002e2: JUMP 000002e3: JUMPDEST 000002e4: STOP 000002e5: JUMPDEST 000002e6: CALLVALUE 000002e7: DUP1 000002e8: ISZERO 000002e9: PUSH2 0x02f1 000002ec: JUMPI 000002ed: PUSH1 0x00 000002ef: DUP1 000002f0: REVERT 000002f1: JUMPDEST 000002f2: POP 000002f3: PUSH2 0x02e3 000002f6: PUSH2 0x0300 000002f9: CALLDATASIZE 000002fa: PUSH1 0x04 000002fc: PUSH2 0x21e0 000002ff: JUMP 00000300: JUMPDEST 00000301: PUSH2 0x076d 00000304: JUMP 00000305: JUMPDEST 00000306: CALLVALUE 00000307: DUP1 00000308: ISZERO 00000309: PUSH2 0x0311 0000030c: JUMPI 0000030d: PUSH1 0x00 0000030f: DUP1 00000310: REVERT 00000311: JUMPDEST 00000312: POP 00000313: PUSH2 0x02e3 00000316: PUSH2 0x07be 00000319: JUMP 0000031a: JUMPDEST 0000031b: PUSH2 0x02e3 0000031e: PUSH2 0x0328 00000321: CALLDATASIZE 00000322: PUSH1 0x04 00000324: PUSH2 0x223f 00000327: JUMP 00000328: JUMPDEST 00000329: PUSH2 0x07f3 0000032c: JUMP 0000032d: JUMPDEST 0000032e: CALLVALUE 0000032f: DUP1 00000330: ISZERO 00000331: PUSH2 0x0339 00000334: JUMPI 00000335: PUSH1 0x00 00000337: DUP1 00000338: REVERT 00000339: JUMPDEST 0000033a: POP 0000033b: PUSH2 0x0283 0000033e: PUSH2 0x0812 00000341: JUMP 00000342: JUMPDEST 00000343: CALLVALUE 00000344: DUP1 00000345: ISZERO 00000346: PUSH2 0x034e 00000349: JUMPI 0000034a: PUSH1 0x00 0000034c: DUP1 0000034d: REVERT 0000034e: JUMPDEST 0000034f: POP 00000350: PUSH2 0x0283 00000353: PUSH32 0x8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a 00000374: DUP2 00000375: JUMP 00000376: JUMPDEST 00000377: CALLVALUE 00000378: DUP1 00000379: ISZERO 0000037a: PUSH2 0x0382 0000037d: JUMPI 0000037e: PUSH1 0x00 00000380: DUP1 00000381: REVERT 00000382: JUMPDEST 00000383: POP 00000384: PUSH1 0x02 00000386: SLOAD 00000387: PUSH2 0x021c 0000038a: SWAP1 0000038b: PUSH1 0x01 0000038d: PUSH1 0x01 0000038f: PUSH1 0xa0 00000391: SHL 00000392: SUB 00000393: AND 00000394: DUP2 00000395: JUMP 00000396: JUMPDEST 00000397: CALLVALUE 00000398: DUP1 00000399: ISZERO 0000039a: PUSH2 0x03a2 0000039d: JUMPI 0000039e: PUSH1 0x00 000003a0: DUP1 000003a1: REVERT 000003a2: JUMPDEST 000003a3: POP 000003a4: PUSH32 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300 000003c5: SLOAD 000003c6: PUSH1 0xff 000003c8: AND 000003c9: PUSH2 0x01e7 000003cc: JUMP 000003cd: JUMPDEST 000003ce: CALLVALUE 000003cf: DUP1 000003d0: ISZERO 000003d1: PUSH2 0x03d9 000003d4: JUMPI 000003d5: PUSH1 0x00 000003d7: DUP1 000003d8: REVERT 000003d9: JUMPDEST 000003da: POP 000003db: PUSH2 0x02e3 000003de: PUSH2 0x0841 000003e1: JUMP 000003e2: JUMPDEST 000003e3: CALLVALUE 000003e4: DUP1 000003e5: ISZERO 000003e6: PUSH2 0x03ee 000003e9: JUMPI 000003ea: PUSH1 0x00 000003ec: DUP1 000003ed: REVERT 000003ee: JUMPDEST 000003ef: POP 000003f0: PUSH2 0x0283 000003f3: PUSH32 0x10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4 00000414: DUP2 00000415: JUMP 00000416: JUMPDEST 00000417: CALLVALUE 00000418: DUP1 00000419: ISZERO 0000041a: PUSH2 0x0422 0000041d: JUMPI 0000041e: PUSH1 0x00 00000420: DUP1 00000421: REVERT 00000422: JUMPDEST 00000423: POP 00000424: PUSH2 0x01e7 00000427: PUSH2 0x0431 0000042a: CALLDATASIZE 0000042b: PUSH1 0x04 0000042d: PUSH2 0x21e0 00000430: JUMP 00000431: JUMPDEST 00000432: PUSH1 0x00 00000434: SWAP2 00000435: DUP3 00000436: MSTORE 00000437: PUSH32 0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800 00000458: PUSH1 0x20 0000045a: SWAP1 0000045b: DUP2 0000045c: MSTORE 0000045d: PUSH1 0x40 0000045f: DUP1 00000460: DUP5 00000461: KECCAK256 00000462: PUSH1 0x01 00000464: PUSH1 0x01 00000466: PUSH1 0xa0 00000468: SHL 00000469: SUB 0000046a: SWAP4 0000046b: SWAP1 0000046c: SWAP4 0000046d: AND 0000046e: DUP5 0000046f: MSTORE 00000470: SWAP2 00000471: SWAP1 00000472: MSTORE 00000473: SWAP1 00000474: KECCAK256 00000475: SLOAD 00000476: PUSH1 0xff 00000478: AND 00000479: SWAP1 0000047a: JUMP 0000047b: JUMPDEST 0000047c: CALLVALUE 0000047d: DUP1 0000047e: ISZERO 0000047f: PUSH2 0x0487 00000482: JUMPI 00000483: PUSH1 0x00 00000485: DUP1 00000486: REVERT 00000487: JUMPDEST 00000488: POP 00000489: PUSH2 0x02e3 0000048c: PUSH2 0x0496 0000048f: CALLDATASIZE 00000490: PUSH1 0x04 00000492: PUSH2 0x2348 00000495: JUMP 00000496: JUMPDEST 00000497: PUSH2 0x0873 0000049a: JUMP 0000049b: JUMPDEST 0000049c: CALLVALUE 0000049d: DUP1 0000049e: ISZERO 0000049f: PUSH2 0x04a7 000004a2: JUMPI 000004a3: PUSH1 0x00 000004a5: DUP1 000004a6: REVERT 000004a7: JUMPDEST 000004a8: POP 000004a9: PUSH2 0x02e3 000004ac: PUSH2 0x04b6 000004af: CALLDATASIZE 000004b0: PUSH1 0x04 000004b2: PUSH2 0x23ae 000004b5: JUMP 000004b6: JUMPDEST 000004b7: PUSH2 0x0a06 000004ba: JUMP 000004bb: JUMPDEST 000004bc: CALLVALUE 000004bd: DUP1 000004be: ISZERO 000004bf: PUSH2 0x04c7 000004c2: JUMPI 000004c3: PUSH1 0x00 000004c5: DUP1 000004c6: REVERT 000004c7: JUMPDEST 000004c8: POP 000004c9: PUSH2 0x02e3 000004cc: PUSH2 0x04d6 000004cf: CALLDATASIZE 000004d0: PUSH1 0x04 000004d2: PUSH2 0x2348 000004d5: JUMP 000004d6: JUMPDEST 000004d7: PUSH2 0x0bb4 000004da: JUMP 000004db: JUMPDEST 000004dc: CALLVALUE 000004dd: DUP1 000004de: ISZERO 000004df: PUSH2 0x04e7 000004e2: JUMPI 000004e3: PUSH1 0x00 000004e5: DUP1 000004e6: REVERT 000004e7: JUMPDEST 000004e8: POP 000004e9: PUSH2 0x02e3 000004ec: PUSH2 0x04f6 000004ef: CALLDATASIZE 000004f0: PUSH1 0x04 000004f2: PUSH2 0x2348 000004f5: JUMP 000004f6: JUMPDEST 000004f7: PUSH2 0x0c68 000004fa: JUMP 000004fb: JUMPDEST 000004fc: CALLVALUE 000004fd: DUP1 000004fe: ISZERO 000004ff: PUSH2 0x0507 00000502: JUMPI 00000503: PUSH1 0x00 00000505: DUP1 00000506: REVERT 00000507: JUMPDEST 00000508: POP 00000509: PUSH2 0x0283 0000050c: PUSH1 0x00 0000050e: DUP2 0000050f: JUMP 00000510: JUMPDEST 00000511: CALLVALUE 00000512: DUP1 00000513: ISZERO 00000514: PUSH2 0x051c 00000517: JUMPI 00000518: PUSH1 0x00 0000051a: DUP1 0000051b: REVERT 0000051c: JUMPDEST 0000051d: POP 0000051e: PUSH2 0x02e3 00000521: PUSH2 0x052b 00000524: CALLDATASIZE 00000525: PUSH1 0x04 00000527: PUSH2 0x2451 0000052a: JUMP 0000052b: JUMPDEST 0000052c: PUSH2 0x0d22 0000052f: JUMP 00000530: JUMPDEST 00000531: CALLVALUE 00000532: DUP1 00000533: ISZERO 00000534: PUSH2 0x053c 00000537: JUMPI 00000538: PUSH1 0x00 0000053a: DUP1 0000053b: REVERT 0000053c: JUMPDEST 0000053d: POP 0000053e: PUSH2 0x0579 00000541: PUSH1 0x40 00000543: MLOAD 00000544: DUP1 00000545: PUSH1 0x40 00000547: ADD 00000548: PUSH1 0x40 0000054a: MSTORE 0000054b: DUP1 0000054c: PUSH1 0x05 0000054e: DUP2 0000054f: MSTORE 00000550: PUSH1 0x20 00000552: ADD 00000553: PUSH32 0x352e302e30000000000000000000000000000000000000000000000000000000 00000574: DUP2 00000575: MSTORE 00000576: POP 00000577: DUP2 00000578: JUMP 00000579: JUMPDEST 0000057a: PUSH1 0x40 0000057c: MLOAD 0000057d: PUSH2 0x01f3 00000580: SWAP2 00000581: SWAP1 00000582: PUSH2 0x2500 00000585: JUMP 00000586: JUMPDEST 00000587: CALLVALUE 00000588: DUP1 00000589: ISZERO 0000058a: PUSH2 0x0592 0000058d: JUMPI 0000058e: PUSH1 0x00 00000590: DUP1 00000591: REVERT 00000592: JUMPDEST 00000593: POP 00000594: PUSH2 0x02e3 00000597: PUSH2 0x05a1 0000059a: CALLDATASIZE 0000059b: PUSH1 0x04 0000059d: PUSH2 0x2551 000005a0: JUMP 000005a1: JUMPDEST 000005a2: PUSH2 0x0e94 000005a5: JUMP 000005a6: JUMPDEST 000005a7: CALLVALUE 000005a8: DUP1 000005a9: ISZERO 000005aa: PUSH2 0x05b2 000005ad: JUMPI 000005ae: PUSH1 0x00 000005b0: DUP1 000005b1: REVERT 000005b2: JUMPDEST 000005b3: POP 000005b4: PUSH2 0x02e3 000005b7: PUSH2 0x05c1 000005ba: CALLDATASIZE 000005bb: PUSH1 0x04 000005bd: PUSH2 0x21e0 000005c0: JUMP 000005c1: JUMPDEST 000005c2: PUSH2 0x11b9 000005c5: JUMP 000005c6: JUMPDEST 000005c7: CALLVALUE 000005c8: DUP1 000005c9: ISZERO 000005ca: PUSH2 0x05d2 000005cd: JUMPI 000005ce: PUSH1 0x00 000005d0: DUP1 000005d1: REVERT 000005d2: JUMPDEST 000005d3: POP 000005d4: PUSH2 0x01e7 000005d7: PUSH2 0x05e1 000005da: CALLDATASIZE 000005db: PUSH1 0x04 000005dd: PUSH2 0x2348 000005e0: JUMP 000005e1: JUMPDEST 000005e2: PUSH1 0x01 000005e4: PUSH1 0x20 000005e6: MSTORE 000005e7: PUSH1 0x00 000005e9: SWAP1 000005ea: DUP2 000005eb: MSTORE 000005ec: PUSH1 0x40 000005ee: SWAP1 000005ef: KECCAK256 000005f0: SLOAD 000005f1: PUSH1 0xff 000005f3: AND 000005f4: DUP2 000005f5: JUMP 000005f6: JUMPDEST 000005f7: CALLVALUE 000005f8: DUP1 000005f9: ISZERO 000005fa: PUSH2 0x0602 000005fd: JUMPI 000005fe: PUSH1 0x00 00000600: DUP1 00000601: REVERT 00000602: JUMPDEST 00000603: POP 00000604: PUSH2 0x02e3 00000607: PUSH2 0x0611 0000060a: CALLDATASIZE 0000060b: PUSH1 0x04 0000060d: PUSH2 0x259c 00000610: JUMP 00000611: JUMPDEST 00000612: PUSH2 0x11fd 00000615: JUMP 00000616: JUMPDEST 00000617: CALLVALUE 00000618: DUP1 00000619: ISZERO 0000061a: PUSH2 0x0622 0000061d: JUMPI 0000061e: PUSH1 0x00 00000620: DUP1 00000621: REVERT 00000622: JUMPDEST 00000623: POP 00000624: PUSH2 0x02e3 00000627: PUSH2 0x0631 0000062a: CALLDATASIZE 0000062b: PUSH1 0x04 0000062d: PUSH2 0x25dd 00000630: JUMP 00000631: JUMPDEST 00000632: PUSH2 0x1314 00000635: JUMP 00000636: JUMPDEST 00000637: CALLVALUE 00000638: DUP1 00000639: ISZERO 0000063a: PUSH2 0x0642 0000063d: JUMPI 0000063e: PUSH1 0x00 00000640: DUP1 00000641: REVERT 00000642: JUMPDEST 00000643: POP 00000644: PUSH2 0x0283 00000647: PUSH32 0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a 00000668: DUP2 00000669: JUMP 0000066a: JUMPDEST 0000066b: CALLVALUE 0000066c: DUP1 0000066d: ISZERO 0000066e: PUSH2 0x0676 00000671: JUMPI 00000672: PUSH1 0x00 00000674: DUP1 00000675: REVERT 00000676: JUMPDEST 00000677: POP 00000678: PUSH2 0x02e3 0000067b: PUSH2 0x0685 0000067e: CALLDATASIZE 0000067f: PUSH1 0x04 00000681: PUSH2 0x265e 00000684: JUMP 00000685: JUMPDEST 00000686: PUSH2 0x155f 00000689: JUMP 0000068a: JUMPDEST 0000068b: PUSH1 0x00 0000068d: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 000006ae: DUP3 000006af: AND 000006b0: PUSH32 0x7965db0b00000000000000000000000000000000000000000000000000000000 000006d1: EQ 000006d2: DUP1 000006d3: PUSH2 0x071d 000006d6: JUMPI 000006d7: POP 000006d8: PUSH32 0x01ffc9a700000000000000000000000000000000000000000000000000000000 000006f9: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 0000071a: DUP4 0000071b: AND 0000071c: EQ 0000071d: JUMPDEST 0000071e: SWAP3 0000071f: SWAP2 00000720: POP 00000721: POP 00000722: JUMP 00000723: JUMPDEST 00000724: PUSH1 0x00 00000726: DUP3 00000727: DUP2 00000728: MSTORE 00000729: PUSH32 0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800 0000074a: PUSH1 0x20 0000074c: MSTORE 0000074d: PUSH1 0x40 0000074f: SWAP1 00000750: KECCAK256 00000751: PUSH1 0x01 00000753: ADD 00000754: SLOAD 00000755: PUSH2 0x075d 00000758: DUP2 00000759: PUSH2 0x15b5 0000075c: JUMP 0000075d: JUMPDEST 0000075e: PUSH2 0x0767 00000761: DUP4 00000762: DUP4 00000763: PUSH2 0x15bf 00000766: JUMP 00000767: JUMPDEST 00000768: POP 00000769: POP 0000076a: POP 0000076b: POP 0000076c: JUMP 0000076d: JUMPDEST 0000076e: PUSH1 0x01 00000770: PUSH1 0x01 00000772: PUSH1 0xa0 00000774: SHL 00000775: SUB 00000776: DUP2 00000777: AND 00000778: CALLER 00000779: EQ 0000077a: PUSH2 0x07af 0000077d: JUMPI 0000077e: PUSH1 0x40 00000780: MLOAD 00000781: PUSH32 0x6697b23200000000000000000000000000000000000000000000000000000000 000007a2: DUP2 000007a3: MSTORE 000007a4: PUSH1 0x04 000007a6: ADD 000007a7: PUSH1 0x40 000007a9: MLOAD 000007aa: DUP1 000007ab: SWAP2 000007ac: SUB 000007ad: SWAP1 000007ae: REVERT 000007af: JUMPDEST 000007b0: PUSH2 0x07b9 000007b3: DUP3 000007b4: DUP3 000007b5: PUSH2 0x168e 000007b8: JUMP 000007b9: JUMPDEST 000007ba: POP 000007bb: POP 000007bc: POP 000007bd: JUMP 000007be: JUMPDEST 000007bf: PUSH32 0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a 000007e0: PUSH2 0x07e8 000007e3: DUP2 000007e4: PUSH2 0x15b5 000007e7: JUMP 000007e8: JUMPDEST 000007e9: PUSH2 0x07f0 000007ec: PUSH2 0x1734 000007ef: JUMP 000007f0: JUMPDEST 000007f1: POP 000007f2: JUMP 000007f3: JUMPDEST 000007f4: PUSH2 0x07fb 000007f7: PUSH2 0x17a6 000007fa: JUMP 000007fb: JUMPDEST 000007fc: PUSH2 0x0804 000007ff: DUP3 00000800: PUSH2 0x1878 00000803: JUMP 00000804: JUMPDEST 00000805: PUSH2 0x080e 00000808: DUP3 00000809: DUP3 0000080a: PUSH2 0x1883 0000080d: JUMP 0000080e: JUMPDEST 0000080f: POP 00000810: POP 00000811: JUMP 00000812: JUMPDEST 00000813: PUSH1 0x00 00000815: PUSH2 0x081c 00000818: PUSH2 0x19a7 0000081b: JUMP 0000081c: JUMPDEST 0000081d: POP 0000081e: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 0000083f: SWAP1 00000840: JUMP 00000841: JUMPDEST 00000842: PUSH32 0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a 00000863: PUSH2 0x086b 00000866: DUP2 00000867: PUSH2 0x15b5 0000086a: JUMP 0000086b: JUMPDEST 0000086c: PUSH2 0x07f0 0000086f: PUSH2 0x1a09 00000872: JUMP 00000873: JUMPDEST 00000874: PUSH1 0x00 00000876: PUSH2 0x087e 00000879: DUP2 0000087a: PUSH2 0x15b5 0000087d: JUMP 0000087e: JUMPDEST 0000087f: PUSH1 0x01 00000881: PUSH1 0x01 00000883: PUSH1 0xa0 00000885: SHL 00000886: SUB 00000887: DUP3 00000888: AND 00000889: PUSH2 0x08be 0000088c: JUMPI 0000088d: PUSH1 0x40 0000088f: MLOAD 00000890: PUSH32 0xd92e233d00000000000000000000000000000000000000000000000000000000 000008b1: DUP2 000008b2: MSTORE 000008b3: PUSH1 0x04 000008b5: ADD 000008b6: PUSH1 0x40 000008b8: MLOAD 000008b9: DUP1 000008ba: SWAP2 000008bb: SUB 000008bc: SWAP1 000008bd: REVERT 000008be: JUMPDEST 000008bf: PUSH1 0x02 000008c1: SLOAD 000008c2: PUSH2 0x08f5 000008c5: SWAP1 000008c6: PUSH32 0x10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4 000008e7: SWAP1 000008e8: PUSH1 0x01 000008ea: PUSH1 0x01 000008ec: PUSH1 0xa0 000008ee: SHL 000008ef: SUB 000008f0: AND 000008f1: PUSH2 0x168e 000008f4: JUMP 000008f5: JUMPDEST 000008f6: POP 000008f7: PUSH1 0x02 000008f9: SLOAD 000008fa: PUSH2 0x092d 000008fd: SWAP1 000008fe: PUSH32 0x8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a 0000091f: SWAP1 00000920: PUSH1 0x01 00000922: PUSH1 0x01 00000924: PUSH1 0xa0 00000926: SHL 00000927: SUB 00000928: AND 00000929: PUSH2 0x168e 0000092c: JUMP 0000092d: JUMPDEST 0000092e: POP 0000092f: PUSH2 0x0958 00000932: PUSH32 0x10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4 00000953: DUP4 00000954: PUSH2 0x15bf 00000957: JUMP 00000958: JUMPDEST 00000959: POP 0000095a: PUSH2 0x0983 0000095d: PUSH32 0x8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a 0000097e: DUP4 0000097f: PUSH2 0x15bf 00000982: JUMP 00000983: JUMPDEST 00000984: POP 00000985: PUSH1 0x02 00000987: SLOAD 00000988: PUSH1 0x40 0000098a: DUP1 0000098b: MLOAD 0000098c: PUSH1 0x01 0000098e: PUSH1 0x01 00000990: PUSH1 0xa0 00000992: SHL 00000993: SUB 00000994: SWAP3 00000995: DUP4 00000996: AND 00000997: DUP2 00000998: MSTORE 00000999: SWAP2 0000099a: DUP5 0000099b: AND 0000099c: PUSH1 0x20 0000099e: DUP4 0000099f: ADD 000009a0: MSTORE 000009a1: PUSH32 0x4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6 000009c2: SWAP2 000009c3: ADD 000009c4: PUSH1 0x40 000009c6: MLOAD 000009c7: DUP1 000009c8: SWAP2 000009c9: SUB 000009ca: SWAP1 000009cb: LOG1 000009cc: POP 000009cd: PUSH1 0x02 000009cf: DUP1 000009d0: SLOAD 000009d1: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 000009f2: AND 000009f3: PUSH1 0x01 000009f5: PUSH1 0x01 000009f7: PUSH1 0xa0 000009f9: SHL 000009fa: SUB 000009fb: SWAP3 000009fc: SWAP1 000009fd: SWAP3 000009fe: AND 000009ff: SWAP2 00000a00: SWAP1 00000a01: SWAP2 00000a02: OR 00000a03: SWAP1 00000a04: SSTORE 00000a05: JUMP 00000a06: JUMPDEST 00000a07: PUSH2 0x0a0e 00000a0a: PUSH2 0x1a64 00000a0d: JUMP 00000a0e: JUMPDEST 00000a0f: PUSH32 0x10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4 00000a30: PUSH2 0x0a38 00000a33: DUP2 00000a34: PUSH2 0x15b5 00000a37: JUMP 00000a38: JUMPDEST 00000a39: PUSH2 0x0a40 00000a3c: PUSH2 0x1ae5 00000a3f: JUMP 00000a40: JUMPDEST 00000a41: PUSH1 0x01 00000a43: PUSH1 0x01 00000a45: PUSH1 0xa0 00000a47: SHL 00000a48: SUB 00000a49: DUP7 00000a4a: AND 00000a4b: PUSH1 0x00 00000a4d: SWAP1 00000a4e: DUP2 00000a4f: MSTORE 00000a50: PUSH1 0x01 00000a52: PUSH1 0x20 00000a54: MSTORE 00000a55: PUSH1 0x40 00000a57: SWAP1 00000a58: KECCAK256 00000a59: SLOAD 00000a5a: PUSH1 0xff 00000a5c: AND 00000a5d: PUSH2 0x0a92 00000a60: JUMPI 00000a61: PUSH1 0x40 00000a63: MLOAD 00000a64: PUSH32 0x584a793800000000000000000000000000000000000000000000000000000000 00000a85: DUP2 00000a86: MSTORE 00000a87: PUSH1 0x04 00000a89: ADD 00000a8a: PUSH1 0x40 00000a8c: MLOAD 00000a8d: DUP1 00000a8e: SWAP2 00000a8f: SUB 00000a90: SWAP1 00000a91: REVERT 00000a92: JUMPDEST 00000a93: PUSH1 0x00 00000a95: SLOAD 00000a96: PUSH2 0x0aac 00000a99: SWAP1 00000a9a: PUSH1 0x01 00000a9c: PUSH1 0x01 00000a9e: PUSH1 0xa0 00000aa0: SHL 00000aa1: SUB 00000aa2: DUP9 00000aa3: DUP2 00000aa4: AND 00000aa5: SWAP2 00000aa6: AND 00000aa7: DUP8 00000aa8: PUSH2 0x1b41 00000aab: JUMP 00000aac: JUMPDEST 00000aad: PUSH1 0x00 00000aaf: SLOAD 00000ab0: PUSH1 0x40 00000ab2: MLOAD 00000ab3: PUSH32 0xaa0c0fc100000000000000000000000000000000000000000000000000000000 00000ad4: DUP2 00000ad5: MSTORE 00000ad6: PUSH1 0x01 00000ad8: PUSH1 0x01 00000ada: PUSH1 0xa0 00000adc: SHL 00000add: SUB 00000ade: SWAP1 00000adf: SWAP2 00000ae0: AND 00000ae1: SWAP1 00000ae2: PUSH4 0xaa0c0fc1 00000ae7: SWAP1 00000ae8: PUSH2 0x0aff 00000aeb: SWAP1 00000aec: DUP10 00000aed: SWAP1 00000aee: DUP12 00000aef: SWAP1 00000af0: DUP11 00000af1: SWAP1 00000af2: DUP11 00000af3: SWAP1 00000af4: DUP11 00000af5: SWAP1 00000af6: DUP11 00000af7: SWAP1 00000af8: PUSH1 0x04 00000afa: ADD 00000afb: PUSH2 0x2779 00000afe: JUMP 00000aff: JUMPDEST 00000b00: PUSH1 0x00 00000b02: PUSH1 0x40 00000b04: MLOAD 00000b05: DUP1 00000b06: DUP4 00000b07: SUB 00000b08: DUP2 00000b09: PUSH1 0x00 00000b0b: DUP8 00000b0c: DUP1 00000b0d: EXTCODESIZE 00000b0e: ISZERO 00000b0f: DUP1 00000b10: ISZERO 00000b11: PUSH2 0x0b19 00000b14: JUMPI 00000b15: PUSH1 0x00 00000b17: DUP1 00000b18: REVERT 00000b19: JUMPDEST 00000b1a: POP 00000b1b: GAS 00000b1c: CALL 00000b1d: ISZERO 00000b1e: DUP1 00000b1f: ISZERO 00000b20: PUSH2 0x0b2d 00000b23: JUMPI 00000b24: RETURNDATASIZE 00000b25: PUSH1 0x00 00000b27: DUP1 00000b28: RETURNDATACOPY 00000b29: RETURNDATASIZE 00000b2a: PUSH1 0x00 00000b2c: REVERT 00000b2d: JUMPDEST 00000b2e: POP 00000b2f: POP 00000b30: POP 00000b31: POP 00000b32: DUP6 00000b33: PUSH1 0x01 00000b35: PUSH1 0x01 00000b37: PUSH1 0xa0 00000b39: SHL 00000b3a: SUB 00000b3b: AND 00000b3c: DUP8 00000b3d: PUSH1 0x01 00000b3f: PUSH1 0x01 00000b41: PUSH1 0xa0 00000b43: SHL 00000b44: SUB 00000b45: AND 00000b46: PUSH32 0x7b53ec10a80164e60591c43d9c222e9354886981b880a3fba19c9ceb77fb9721 00000b67: DUP8 00000b68: DUP8 00000b69: DUP8 00000b6a: DUP8 00000b6b: PUSH1 0x40 00000b6d: MLOAD 00000b6e: PUSH2 0x0b7a 00000b71: SWAP5 00000b72: SWAP4 00000b73: SWAP3 00000b74: SWAP2 00000b75: SWAP1 00000b76: PUSH2 0x27d0 00000b79: JUMP 00000b7a: JUMPDEST 00000b7b: PUSH1 0x40 00000b7d: MLOAD 00000b7e: DUP1 00000b7f: SWAP2 00000b80: SUB 00000b81: SWAP1 00000b82: LOG3 00000b83: POP 00000b84: PUSH2 0x0bac 00000b87: PUSH1 0x01 00000b89: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 00000baa: SSTORE 00000bab: JUMP 00000bac: JUMPDEST 00000bad: POP 00000bae: POP 00000baf: POP 00000bb0: POP 00000bb1: POP 00000bb2: POP 00000bb3: JUMP 00000bb4: JUMPDEST 00000bb5: PUSH32 0x8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a 00000bd6: PUSH2 0x0bde 00000bd9: DUP2 00000bda: PUSH2 0x15b5 00000bdd: JUMP 00000bde: JUMPDEST 00000bdf: PUSH1 0x01 00000be1: PUSH1 0x01 00000be3: PUSH1 0xa0 00000be5: SHL 00000be6: SUB 00000be7: DUP3 00000be8: AND 00000be9: PUSH2 0x0c1e 00000bec: JUMPI 00000bed: PUSH1 0x40 00000bef: MLOAD 00000bf0: PUSH32 0xd92e233d00000000000000000000000000000000000000000000000000000000 00000c11: DUP2 00000c12: MSTORE 00000c13: PUSH1 0x04 00000c15: ADD 00000c16: PUSH1 0x40 00000c18: MLOAD 00000c19: DUP1 00000c1a: SWAP2 00000c1b: SUB 00000c1c: SWAP1 00000c1d: REVERT 00000c1e: JUMPDEST 00000c1f: PUSH1 0x01 00000c21: PUSH1 0x01 00000c23: PUSH1 0xa0 00000c25: SHL 00000c26: SUB 00000c27: DUP3 00000c28: AND 00000c29: PUSH1 0x00 00000c2b: DUP2 00000c2c: DUP2 00000c2d: MSTORE 00000c2e: PUSH1 0x01 00000c30: PUSH1 0x20 00000c32: MSTORE 00000c33: PUSH1 0x40 00000c35: DUP1 00000c36: DUP3 00000c37: KECCAK256 00000c38: DUP1 00000c39: SLOAD 00000c3a: PUSH1 0xff 00000c3c: NOT 00000c3d: AND 00000c3e: SWAP1 00000c3f: SSTORE 00000c40: MLOAD 00000c41: PUSH32 0x51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da46791 00000c62: SWAP2 00000c63: SWAP1 00000c64: LOG2 00000c65: POP 00000c66: POP 00000c67: JUMP 00000c68: JUMPDEST 00000c69: PUSH32 0x8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a 00000c8a: PUSH2 0x0c92 00000c8d: DUP2 00000c8e: PUSH2 0x15b5 00000c91: JUMP 00000c92: JUMPDEST 00000c93: PUSH1 0x01 00000c95: PUSH1 0x01 00000c97: PUSH1 0xa0 00000c99: SHL 00000c9a: SUB 00000c9b: DUP3 00000c9c: AND 00000c9d: PUSH2 0x0cd2 00000ca0: JUMPI 00000ca1: PUSH1 0x40 00000ca3: MLOAD 00000ca4: PUSH32 0xd92e233d00000000000000000000000000000000000000000000000000000000 00000cc5: DUP2 00000cc6: MSTORE 00000cc7: PUSH1 0x04 00000cc9: ADD 00000cca: PUSH1 0x40 00000ccc: MLOAD 00000ccd: DUP1 00000cce: SWAP2 00000ccf: SUB 00000cd0: SWAP1 00000cd1: REVERT 00000cd2: JUMPDEST 00000cd3: PUSH1 0x01 00000cd5: PUSH1 0x01 00000cd7: PUSH1 0xa0 00000cd9: SHL 00000cda: SUB 00000cdb: DUP3 00000cdc: AND 00000cdd: PUSH1 0x00 00000cdf: DUP2 00000ce0: DUP2 00000ce1: MSTORE 00000ce2: PUSH1 0x01 00000ce4: PUSH1 0x20 00000ce6: DUP2 00000ce7: SWAP1 00000ce8: MSTORE 00000ce9: PUSH1 0x40 00000ceb: DUP1 00000cec: DUP4 00000ced: KECCAK256 00000cee: DUP1 00000cef: SLOAD 00000cf0: PUSH1 0xff 00000cf2: NOT 00000cf3: AND 00000cf4: SWAP1 00000cf5: SWAP3 00000cf6: OR 00000cf7: SWAP1 00000cf8: SWAP2 00000cf9: SSTORE 00000cfa: MLOAD 00000cfb: PUSH32 0xaab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a54 00000d1c: SWAP2 00000d1d: SWAP1 00000d1e: LOG2 00000d1f: POP 00000d20: POP 00000d21: JUMP 00000d22: JUMPDEST 00000d23: PUSH2 0x0d2a 00000d26: PUSH2 0x1a64 00000d29: JUMP 00000d2a: JUMPDEST 00000d2b: PUSH32 0x10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4 00000d4c: PUSH2 0x0d54 00000d4f: DUP2 00000d50: PUSH2 0x15b5 00000d53: JUMP 00000d54: JUMPDEST 00000d55: PUSH2 0x0d5c 00000d58: PUSH2 0x1ae5 00000d5b: JUMP 00000d5c: JUMPDEST 00000d5d: PUSH1 0x01 00000d5f: PUSH1 0x01 00000d61: PUSH1 0xa0 00000d63: SHL 00000d64: SUB 00000d65: DUP6 00000d66: AND 00000d67: PUSH1 0x00 00000d69: SWAP1 00000d6a: DUP2 00000d6b: MSTORE 00000d6c: PUSH1 0x01 00000d6e: PUSH1 0x20 00000d70: MSTORE 00000d71: PUSH1 0x40 00000d73: SWAP1 00000d74: KECCAK256 00000d75: SLOAD 00000d76: PUSH1 0xff 00000d78: AND 00000d79: PUSH2 0x0dae 00000d7c: JUMPI 00000d7d: PUSH1 0x40 00000d7f: MLOAD 00000d80: PUSH32 0x584a793800000000000000000000000000000000000000000000000000000000 00000da1: DUP2 00000da2: MSTORE 00000da3: PUSH1 0x04 00000da5: ADD 00000da6: PUSH1 0x40 00000da8: MLOAD 00000da9: DUP1 00000daa: SWAP2 00000dab: SUB 00000dac: SWAP1 00000dad: REVERT 00000dae: JUMPDEST 00000daf: PUSH1 0x00 00000db1: SLOAD 00000db2: PUSH2 0x0dc8 00000db5: SWAP1 00000db6: PUSH1 0x01 00000db8: PUSH1 0x01 00000dba: PUSH1 0xa0 00000dbc: SHL 00000dbd: SUB 00000dbe: DUP8 00000dbf: DUP2 00000dc0: AND 00000dc1: SWAP2 00000dc2: AND 00000dc3: DUP7 00000dc4: PUSH2 0x1b41 00000dc7: JUMP 00000dc8: JUMPDEST 00000dc9: PUSH1 0x00 00000dcb: SLOAD 00000dcc: PUSH1 0x40 00000dce: MLOAD 00000dcf: PUSH32 0x7bbe9afa00000000000000000000000000000000000000000000000000000000 00000df0: DUP2 00000df1: MSTORE 00000df2: PUSH1 0x01 00000df4: PUSH1 0x01 00000df6: PUSH1 0xa0 00000df8: SHL 00000df9: SUB 00000dfa: SWAP1 00000dfb: SWAP2 00000dfc: AND 00000dfd: SWAP1 00000dfe: PUSH4 0x7bbe9afa 00000e03: SWAP1 00000e04: PUSH2 0x0e1b 00000e07: SWAP1 00000e08: DUP11 00000e09: SWAP1 00000e0a: DUP10 00000e0b: SWAP1 00000e0c: DUP12 00000e0d: SWAP1 00000e0e: DUP11 00000e0f: SWAP1 00000e10: DUP11 00000e11: SWAP1 00000e12: DUP11 00000e13: SWAP1 00000e14: PUSH1 0x04 00000e16: ADD 00000e17: PUSH2 0x2807 00000e1a: JUMP 00000e1b: JUMPDEST 00000e1c: PUSH1 0x00 00000e1e: PUSH1 0x40 00000e20: MLOAD 00000e21: DUP1 00000e22: DUP4 00000e23: SUB 00000e24: DUP2 00000e25: PUSH1 0x00 00000e27: DUP8 00000e28: DUP1 00000e29: EXTCODESIZE 00000e2a: ISZERO 00000e2b: DUP1 00000e2c: ISZERO 00000e2d: PUSH2 0x0e35 00000e30: JUMPI 00000e31: PUSH1 0x00 00000e33: DUP1 00000e34: REVERT 00000e35: JUMPDEST 00000e36: POP 00000e37: GAS 00000e38: CALL 00000e39: ISZERO 00000e3a: DUP1 00000e3b: ISZERO 00000e3c: PUSH2 0x0e49 00000e3f: JUMPI 00000e40: RETURNDATASIZE 00000e41: PUSH1 0x00 00000e43: DUP1 00000e44: RETURNDATACOPY 00000e45: RETURNDATASIZE 00000e46: PUSH1 0x00 00000e48: REVERT 00000e49: JUMPDEST 00000e4a: POP 00000e4b: POP 00000e4c: POP 00000e4d: POP 00000e4e: DUP5 00000e4f: PUSH1 0x01 00000e51: PUSH1 0x01 00000e53: PUSH1 0xa0 00000e55: SHL 00000e56: SUB 00000e57: AND 00000e58: DUP7 00000e59: PUSH1 0x01 00000e5b: PUSH1 0x01 00000e5d: PUSH1 0xa0 00000e5f: SHL 00000e60: SUB 00000e61: AND 00000e62: PUSH32 0x6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5 00000e83: DUP7 00000e84: DUP7 00000e85: DUP7 00000e86: PUSH1 0x40 00000e88: MLOAD 00000e89: PUSH2 0x0b7a 00000e8c: SWAP4 00000e8d: SWAP3 00000e8e: SWAP2 00000e8f: SWAP1 00000e90: PUSH2 0x2866 00000e93: JUMP 00000e94: JUMPDEST 00000e95: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 00000eb6: DUP1 00000eb7: SLOAD 00000eb8: PUSH9 0x010000000000000000 00000ec2: DUP2 00000ec3: DIV 00000ec4: PUSH1 0xff 00000ec6: AND 00000ec7: ISZERO 00000ec8: SWAP1 00000ec9: PUSH8 0xffffffffffffffff 00000ed2: AND 00000ed3: PUSH1 0x00 00000ed5: DUP2 00000ed6: ISZERO 00000ed7: DUP1 00000ed8: ISZERO 00000ed9: PUSH2 0x0edf 00000edc: JUMPI 00000edd: POP 00000ede: DUP3 00000edf: JUMPDEST 00000ee0: SWAP1 00000ee1: POP 00000ee2: PUSH1 0x00 00000ee4: DUP3 00000ee5: PUSH8 0xffffffffffffffff 00000eee: AND 00000eef: PUSH1 0x01 00000ef1: EQ 00000ef2: DUP1 00000ef3: ISZERO 00000ef4: PUSH2 0x0efc 00000ef7: JUMPI 00000ef8: POP 00000ef9: ADDRESS 00000efa: EXTCODESIZE 00000efb: ISZERO 00000efc: JUMPDEST 00000efd: SWAP1 00000efe: POP 00000eff: DUP2 00000f00: ISZERO 00000f01: DUP1 00000f02: ISZERO 00000f03: PUSH2 0x0f0a 00000f06: JUMPI 00000f07: POP 00000f08: DUP1 00000f09: ISZERO 00000f0a: JUMPDEST 00000f0b: ISZERO 00000f0c: PUSH2 0x0f41 00000f0f: JUMPI 00000f10: PUSH1 0x40 00000f12: MLOAD 00000f13: PUSH32 0xf92ee8a900000000000000000000000000000000000000000000000000000000 00000f34: DUP2 00000f35: MSTORE 00000f36: PUSH1 0x04 00000f38: ADD 00000f39: PUSH1 0x40 00000f3b: MLOAD 00000f3c: DUP1 00000f3d: SWAP2 00000f3e: SUB 00000f3f: SWAP1 00000f40: REVERT 00000f41: JUMPDEST 00000f42: DUP5 00000f43: SLOAD 00000f44: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 00000f65: AND 00000f66: PUSH1 0x01 00000f68: OR 00000f69: DUP6 00000f6a: SSTORE 00000f6b: DUP4 00000f6c: ISZERO 00000f6d: PUSH2 0x0fa2 00000f70: JUMPI 00000f71: DUP5 00000f72: SLOAD 00000f73: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff 00000f94: AND 00000f95: PUSH9 0x010000000000000000 00000f9f: OR 00000fa0: DUP6 00000fa1: SSTORE 00000fa2: JUMPDEST 00000fa3: PUSH1 0x01 00000fa5: PUSH1 0x01 00000fa7: PUSH1 0xa0 00000fa9: SHL 00000faa: SUB 00000fab: DUP9 00000fac: AND 00000fad: ISZERO 00000fae: DUP1 00000faf: PUSH2 0x0fbf 00000fb2: JUMPI 00000fb3: POP 00000fb4: PUSH1 0x01 00000fb6: PUSH1 0x01 00000fb8: PUSH1 0xa0 00000fba: SHL 00000fbb: SUB 00000fbc: DUP8 00000fbd: AND 00000fbe: ISZERO 00000fbf: JUMPDEST 00000fc0: DUP1 00000fc1: PUSH2 0x0fd1 00000fc4: JUMPI 00000fc5: POP 00000fc6: PUSH1 0x01 00000fc8: PUSH1 0x01 00000fca: PUSH1 0xa0 00000fcc: SHL 00000fcd: SUB 00000fce: DUP7 00000fcf: AND 00000fd0: ISZERO 00000fd1: JUMPDEST 00000fd2: ISZERO 00000fd3: PUSH2 0x1008 00000fd6: JUMPI 00000fd7: PUSH1 0x40 00000fd9: MLOAD 00000fda: PUSH32 0xd92e233d00000000000000000000000000000000000000000000000000000000 00000ffb: DUP2 00000ffc: MSTORE 00000ffd: PUSH1 0x04 00000fff: ADD 00001000: PUSH1 0x40 00001002: MLOAD 00001003: DUP1 00001004: SWAP2 00001005: SUB 00001006: SWAP1 00001007: REVERT 00001008: JUMPDEST 00001009: PUSH2 0x1010 0000100c: PUSH2 0x1bdb 0000100f: JUMP 00001010: JUMPDEST 00001011: PUSH2 0x1018 00001014: PUSH2 0x1be3 00001017: JUMP 00001018: JUMPDEST 00001019: PUSH2 0x1020 0000101c: PUSH2 0x1bdb 0000101f: JUMP 00001020: JUMPDEST 00001021: PUSH2 0x1028 00001024: PUSH2 0x1bf3 00001027: JUMP 00001028: JUMPDEST 00001029: PUSH1 0x00 0000102b: DUP1 0000102c: SLOAD 0000102d: PUSH1 0x01 0000102f: PUSH1 0x01 00001031: PUSH1 0xa0 00001033: SHL 00001034: SUB 00001035: DUP1 00001036: DUP12 00001037: AND 00001038: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00001059: SWAP3 0000105a: DUP4 0000105b: AND 0000105c: OR 0000105d: DUP4 0000105e: SSTORE 0000105f: PUSH1 0x02 00001061: DUP1 00001062: SLOAD 00001063: SWAP2 00001064: DUP12 00001065: AND 00001066: SWAP2 00001067: SWAP1 00001068: SWAP3 00001069: AND 0000106a: OR 0000106b: SWAP1 0000106c: SSTORE 0000106d: PUSH2 0x1076 00001070: SWAP1 00001071: DUP8 00001072: PUSH2 0x15bf 00001075: JUMP 00001076: JUMPDEST 00001077: POP 00001078: PUSH2 0x10a1 0000107b: PUSH32 0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a 0000109c: DUP8 0000109d: PUSH2 0x15bf 000010a0: JUMP 000010a1: JUMPDEST 000010a2: POP 000010a3: PUSH2 0x10cc 000010a6: PUSH32 0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a 000010c7: DUP9 000010c8: PUSH2 0x15bf 000010cb: JUMP 000010cc: JUMPDEST 000010cd: POP 000010ce: PUSH2 0x10f7 000010d1: PUSH32 0x10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4 000010f2: DUP9 000010f3: PUSH2 0x15bf 000010f6: JUMP 000010f7: JUMPDEST 000010f8: POP 000010f9: PUSH2 0x1122 000010fc: PUSH32 0x8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a 0000111d: DUP8 0000111e: PUSH2 0x15bf 00001121: JUMP 00001122: JUMPDEST 00001123: POP 00001124: PUSH2 0x114d 00001127: PUSH32 0x8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a 00001148: DUP9 00001149: PUSH2 0x15bf 0000114c: JUMP 0000114d: JUMPDEST 0000114e: POP 0000114f: DUP4 00001150: ISZERO 00001151: PUSH2 0x11af 00001154: JUMPI 00001155: DUP5 00001156: SLOAD 00001157: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff 00001178: AND 00001179: DUP6 0000117a: SSTORE 0000117b: PUSH1 0x40 0000117d: MLOAD 0000117e: PUSH1 0x01 00001180: DUP2 00001181: MSTORE 00001182: PUSH32 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2 000011a3: SWAP1 000011a4: PUSH1 0x20 000011a6: ADD 000011a7: PUSH1 0x40 000011a9: MLOAD 000011aa: DUP1 000011ab: SWAP2 000011ac: SUB 000011ad: SWAP1 000011ae: LOG1 000011af: JUMPDEST 000011b0: POP 000011b1: POP 000011b2: POP 000011b3: POP 000011b4: POP 000011b5: POP 000011b6: POP 000011b7: POP 000011b8: JUMP 000011b9: JUMPDEST 000011ba: PUSH1 0x00 000011bc: DUP3 000011bd: DUP2 000011be: MSTORE 000011bf: PUSH32 0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800 000011e0: PUSH1 0x20 000011e2: MSTORE 000011e3: PUSH1 0x40 000011e5: SWAP1 000011e6: KECCAK256 000011e7: PUSH1 0x01 000011e9: ADD 000011ea: SLOAD 000011eb: PUSH2 0x11f3 000011ee: DUP2 000011ef: PUSH2 0x15b5 000011f2: JUMP 000011f3: JUMPDEST 000011f4: PUSH2 0x0767 000011f7: DUP4 000011f8: DUP4 000011f9: PUSH2 0x168e 000011fc: JUMP 000011fd: JUMPDEST 000011fe: PUSH2 0x1205 00001201: PUSH2 0x1a64 00001204: JUMP 00001205: JUMPDEST 00001206: PUSH32 0x10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4 00001227: PUSH2 0x122f 0000122a: DUP2 0000122b: PUSH2 0x15b5 0000122e: JUMP 0000122f: JUMPDEST 00001230: PUSH2 0x1237 00001233: PUSH2 0x1ae5 00001236: JUMP 00001237: JUMPDEST 00001238: PUSH1 0x01 0000123a: PUSH1 0x01 0000123c: PUSH1 0xa0 0000123e: SHL 0000123f: SUB 00001240: DUP4 00001241: AND 00001242: PUSH1 0x00 00001244: SWAP1 00001245: DUP2 00001246: MSTORE 00001247: PUSH1 0x01 00001249: PUSH1 0x20 0000124b: MSTORE 0000124c: PUSH1 0x40 0000124e: SWAP1 0000124f: KECCAK256 00001250: SLOAD 00001251: PUSH1 0xff 00001253: AND 00001254: PUSH2 0x1289 00001257: JUMPI 00001258: PUSH1 0x40 0000125a: MLOAD 0000125b: PUSH32 0x584a793800000000000000000000000000000000000000000000000000000000 0000127c: DUP2 0000127d: MSTORE 0000127e: PUSH1 0x04 00001280: ADD 00001281: PUSH1 0x40 00001283: MLOAD 00001284: DUP1 00001285: SWAP2 00001286: SUB 00001287: SWAP1 00001288: REVERT 00001289: JUMPDEST 0000128a: PUSH2 0x129d 0000128d: PUSH1 0x01 0000128f: PUSH1 0x01 00001291: PUSH1 0xa0 00001293: SHL 00001294: SUB 00001295: DUP5 00001296: AND 00001297: DUP6 00001298: DUP5 00001299: PUSH2 0x1b41 0000129c: JUMP 0000129d: JUMPDEST 0000129e: DUP3 0000129f: PUSH1 0x01 000012a1: PUSH1 0x01 000012a3: PUSH1 0xa0 000012a5: SHL 000012a6: SUB 000012a7: AND 000012a8: DUP5 000012a9: PUSH1 0x01 000012ab: PUSH1 0x01 000012ad: PUSH1 0xa0 000012af: SHL 000012b0: SUB 000012b1: AND 000012b2: PUSH32 0xd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb 000012d3: DUP5 000012d4: PUSH1 0x40 000012d6: MLOAD 000012d7: PUSH2 0x12e2 000012da: SWAP2 000012db: DUP2 000012dc: MSTORE 000012dd: PUSH1 0x20 000012df: ADD 000012e0: SWAP1 000012e1: JUMP 000012e2: JUMPDEST 000012e3: PUSH1 0x40 000012e5: MLOAD 000012e6: DUP1 000012e7: SWAP2 000012e8: SUB 000012e9: SWAP1 000012ea: LOG3 000012eb: POP 000012ec: PUSH2 0x07b9 000012ef: PUSH1 0x01 000012f1: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 00001312: SSTORE 00001313: JUMP 00001314: JUMPDEST 00001315: PUSH2 0x131c 00001318: PUSH2 0x1a64 0000131b: JUMP 0000131c: JUMPDEST 0000131d: PUSH2 0x1324 00001320: PUSH2 0x1ae5 00001323: JUMP 00001324: JUMPDEST 00001325: PUSH1 0x02 00001327: SLOAD 00001328: PUSH21 0x010000000000000000000000000000000000000000 0000133e: SWAP1 0000133f: DIV 00001340: PUSH1 0xff 00001342: AND 00001343: PUSH2 0x1378 00001346: JUMPI 00001347: PUSH1 0x40 00001349: MLOAD 0000134a: PUSH32 0x73cba66300000000000000000000000000000000000000000000000000000000 0000136b: DUP2 0000136c: MSTORE 0000136d: PUSH1 0x04 0000136f: ADD 00001370: PUSH1 0x40 00001372: MLOAD 00001373: DUP1 00001374: SWAP2 00001375: SUB 00001376: SWAP1 00001377: REVERT 00001378: JUMPDEST 00001379: PUSH1 0x01 0000137b: PUSH1 0x01 0000137d: PUSH1 0xa0 0000137f: SHL 00001380: SUB 00001381: DUP5 00001382: AND 00001383: PUSH1 0x00 00001385: SWAP1 00001386: DUP2 00001387: MSTORE 00001388: PUSH1 0x01 0000138a: PUSH1 0x20 0000138c: MSTORE 0000138d: PUSH1 0x40 0000138f: SWAP1 00001390: KECCAK256 00001391: SLOAD 00001392: PUSH1 0xff 00001394: AND 00001395: PUSH2 0x13ca 00001398: JUMPI 00001399: PUSH1 0x40 0000139b: MLOAD 0000139c: PUSH32 0x584a793800000000000000000000000000000000000000000000000000000000 000013bd: DUP2 000013be: MSTORE 000013bf: PUSH1 0x04 000013c1: ADD 000013c2: PUSH1 0x40 000013c4: MLOAD 000013c5: DUP1 000013c6: SWAP2 000013c7: SUB 000013c8: SWAP1 000013c9: REVERT 000013ca: JUMPDEST 000013cb: PUSH1 0x40 000013cd: MLOAD 000013ce: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 000013ef: DUP2 000013f0: MSTORE 000013f1: ADDRESS 000013f2: PUSH1 0x04 000013f4: DUP3 000013f5: ADD 000013f6: MSTORE 000013f7: PUSH1 0x00 000013f9: SWAP1 000013fa: PUSH1 0x01 000013fc: PUSH1 0x01 000013fe: PUSH1 0xa0 00001400: SHL 00001401: SUB 00001402: DUP7 00001403: AND 00001404: SWAP1 00001405: PUSH4 0x70a08231 0000140a: SWAP1 0000140b: PUSH1 0x24 0000140d: ADD 0000140e: PUSH1 0x20 00001410: PUSH1 0x40 00001412: MLOAD 00001413: DUP1 00001414: DUP4 00001415: SUB 00001416: DUP2 00001417: DUP7 00001418: GAS 00001419: STATICCALL 0000141a: ISZERO 0000141b: DUP1 0000141c: ISZERO 0000141d: PUSH2 0x142a 00001420: JUMPI 00001421: RETURNDATASIZE 00001422: PUSH1 0x00 00001424: DUP1 00001425: RETURNDATACOPY 00001426: RETURNDATASIZE 00001427: PUSH1 0x00 00001429: REVERT 0000142a: JUMPDEST 0000142b: POP 0000142c: POP 0000142d: POP 0000142e: POP 0000142f: PUSH1 0x40 00001431: MLOAD 00001432: RETURNDATASIZE 00001433: PUSH1 0x1f 00001435: NOT 00001436: PUSH1 0x1f 00001438: DUP3 00001439: ADD 0000143a: AND 0000143b: DUP3 0000143c: ADD 0000143d: DUP1 0000143e: PUSH1 0x40 00001440: MSTORE 00001441: POP 00001442: DUP2 00001443: ADD 00001444: SWAP1 00001445: PUSH2 0x144e 00001448: SWAP2 00001449: SWAP1 0000144a: PUSH2 0x2880 0000144d: JUMP 0000144e: JUMPDEST 0000144f: SWAP1 00001450: POP 00001451: PUSH2 0x1465 00001454: PUSH1 0x01 00001456: PUSH1 0x01 00001458: PUSH1 0xa0 0000145a: SHL 0000145b: SUB 0000145c: DUP7 0000145d: AND 0000145e: CALLER 0000145f: ADDRESS 00001460: DUP8 00001461: PUSH2 0x1c03 00001464: JUMP 00001465: JUMPDEST 00001466: PUSH1 0x40 00001468: MLOAD 00001469: PUSH32 0x70a0823100000000000000000000000000000000000000000000000000000000 0000148a: DUP2 0000148b: MSTORE 0000148c: ADDRESS 0000148d: PUSH1 0x04 0000148f: DUP3 00001490: ADD 00001491: MSTORE 00001492: PUSH1 0x01 00001494: PUSH1 0x01 00001496: PUSH1 0xa0 00001498: SHL 00001499: SUB 0000149a: DUP7 0000149b: AND 0000149c: SWAP1 0000149d: PUSH32 0x1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae 000014be: SWAP1 000014bf: DUP10 000014c0: SWAP1 000014c1: DUP10 000014c2: SWAP1 000014c3: DUP6 000014c4: SWAP1 000014c5: DUP6 000014c6: SWAP1 000014c7: PUSH4 0x70a08231 000014cc: SWAP1 000014cd: PUSH1 0x24 000014cf: ADD 000014d0: PUSH1 0x20 000014d2: PUSH1 0x40 000014d4: MLOAD 000014d5: DUP1 000014d6: DUP4 000014d7: SUB 000014d8: DUP2 000014d9: DUP7 000014da: GAS 000014db: STATICCALL 000014dc: ISZERO 000014dd: DUP1 000014de: ISZERO 000014df: PUSH2 0x14ec 000014e2: JUMPI 000014e3: RETURNDATASIZE 000014e4: PUSH1 0x00 000014e6: DUP1 000014e7: RETURNDATACOPY 000014e8: RETURNDATASIZE 000014e9: PUSH1 0x00 000014eb: REVERT 000014ec: JUMPDEST 000014ed: POP 000014ee: POP 000014ef: POP 000014f0: POP 000014f1: PUSH1 0x40 000014f3: MLOAD 000014f4: RETURNDATASIZE 000014f5: PUSH1 0x1f 000014f7: NOT 000014f8: PUSH1 0x1f 000014fa: DUP3 000014fb: ADD 000014fc: AND 000014fd: DUP3 000014fe: ADD 000014ff: DUP1 00001500: PUSH1 0x40 00001502: MSTORE 00001503: POP 00001504: DUP2 00001505: ADD 00001506: SWAP1 00001507: PUSH2 0x1510 0000150a: SWAP2 0000150b: SWAP1 0000150c: PUSH2 0x2880 0000150f: JUMP 00001510: JUMPDEST 00001511: PUSH2 0x151a 00001514: SWAP2 00001515: SWAP1 00001516: PUSH2 0x2899 00001519: JUMP 0000151a: JUMPDEST 0000151b: DUP8 0000151c: DUP8 0000151d: PUSH1 0x40 0000151f: MLOAD 00001520: PUSH2 0x152d 00001523: SWAP6 00001524: SWAP5 00001525: SWAP4 00001526: SWAP3 00001527: SWAP2 00001528: SWAP1 00001529: PUSH2 0x28d3 0000152c: JUMP 0000152d: JUMPDEST 0000152e: PUSH1 0x40 00001530: MLOAD 00001531: DUP1 00001532: SWAP2 00001533: SUB 00001534: SWAP1 00001535: LOG2 00001536: POP 00001537: PUSH2 0x0bac 0000153a: PUSH1 0x01 0000153c: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 0000155d: SSTORE 0000155e: JUMP 0000155f: JUMPDEST 00001560: PUSH1 0x00 00001562: PUSH2 0x156a 00001565: DUP2 00001566: PUSH2 0x15b5 00001569: JUMP 0000156a: JUMPDEST 0000156b: POP 0000156c: PUSH1 0x02 0000156e: DUP1 0000156f: SLOAD 00001570: SWAP2 00001571: ISZERO 00001572: ISZERO 00001573: PUSH21 0x010000000000000000000000000000000000000000 00001589: MUL 0000158a: PUSH32 0xffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff 000015ab: SWAP1 000015ac: SWAP3 000015ad: AND 000015ae: SWAP2 000015af: SWAP1 000015b0: SWAP2 000015b1: OR 000015b2: SWAP1 000015b3: SSTORE 000015b4: JUMP 000015b5: JUMPDEST 000015b6: PUSH2 0x07f0 000015b9: DUP2 000015ba: CALLER 000015bb: PUSH2 0x1c3c 000015be: JUMP 000015bf: JUMPDEST 000015c0: PUSH1 0x00 000015c2: DUP3 000015c3: DUP2 000015c4: MSTORE 000015c5: PUSH32 0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800 000015e6: PUSH1 0x20 000015e8: DUP2 000015e9: DUP2 000015ea: MSTORE 000015eb: PUSH1 0x40 000015ed: DUP1 000015ee: DUP5 000015ef: KECCAK256 000015f0: PUSH1 0x01 000015f2: PUSH1 0x01 000015f4: PUSH1 0xa0 000015f6: SHL 000015f7: SUB 000015f8: DUP7 000015f9: AND 000015fa: DUP6 000015fb: MSTORE 000015fc: SWAP1 000015fd: SWAP2 000015fe: MSTORE 000015ff: DUP3 00001600: KECCAK256 00001601: SLOAD 00001602: PUSH1 0xff 00001604: AND 00001605: PUSH2 0x1684 00001608: JUMPI 00001609: PUSH1 0x00 0000160b: DUP5 0000160c: DUP2 0000160d: MSTORE 0000160e: PUSH1 0x20 00001610: DUP3 00001611: DUP2 00001612: MSTORE 00001613: PUSH1 0x40 00001615: DUP1 00001616: DUP4 00001617: KECCAK256 00001618: PUSH1 0x01 0000161a: PUSH1 0x01 0000161c: PUSH1 0xa0 0000161e: SHL 0000161f: SUB 00001620: DUP8 00001621: AND 00001622: DUP5 00001623: MSTORE 00001624: SWAP1 00001625: SWAP2 00001626: MSTORE 00001627: SWAP1 00001628: KECCAK256 00001629: DUP1 0000162a: SLOAD 0000162b: PUSH1 0xff 0000162d: NOT 0000162e: AND 0000162f: PUSH1 0x01 00001631: OR 00001632: SWAP1 00001633: SSTORE 00001634: PUSH2 0x163a 00001637: CALLER 00001638: SWAP1 00001639: JUMP 0000163a: JUMPDEST 0000163b: PUSH1 0x01 0000163d: PUSH1 0x01 0000163f: PUSH1 0xa0 00001641: SHL 00001642: SUB 00001643: AND 00001644: DUP4 00001645: PUSH1 0x01 00001647: PUSH1 0x01 00001649: PUSH1 0xa0 0000164b: SHL 0000164c: SUB 0000164d: AND 0000164e: DUP6 0000164f: PUSH32 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d 00001670: PUSH1 0x40 00001672: MLOAD 00001673: PUSH1 0x40 00001675: MLOAD 00001676: DUP1 00001677: SWAP2 00001678: SUB 00001679: SWAP1 0000167a: LOG4 0000167b: PUSH1 0x01 0000167d: SWAP2 0000167e: POP 0000167f: POP 00001680: PUSH2 0x071d 00001683: JUMP 00001684: JUMPDEST 00001685: PUSH1 0x00 00001687: SWAP2 00001688: POP 00001689: POP 0000168a: PUSH2 0x071d 0000168d: JUMP 0000168e: JUMPDEST 0000168f: PUSH1 0x00 00001691: DUP3 00001692: DUP2 00001693: MSTORE 00001694: PUSH32 0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800 000016b5: PUSH1 0x20 000016b7: DUP2 000016b8: DUP2 000016b9: MSTORE 000016ba: PUSH1 0x40 000016bc: DUP1 000016bd: DUP5 000016be: KECCAK256 000016bf: PUSH1 0x01 000016c1: PUSH1 0x01 000016c3: PUSH1 0xa0 000016c5: SHL 000016c6: SUB 000016c7: DUP7 000016c8: AND 000016c9: DUP6 000016ca: MSTORE 000016cb: SWAP1 000016cc: SWAP2 000016cd: MSTORE 000016ce: DUP3 000016cf: KECCAK256 000016d0: SLOAD 000016d1: PUSH1 0xff 000016d3: AND 000016d4: ISZERO 000016d5: PUSH2 0x1684 000016d8: JUMPI 000016d9: PUSH1 0x00 000016db: DUP5 000016dc: DUP2 000016dd: MSTORE 000016de: PUSH1 0x20 000016e0: DUP3 000016e1: DUP2 000016e2: MSTORE 000016e3: PUSH1 0x40 000016e5: DUP1 000016e6: DUP4 000016e7: KECCAK256 000016e8: PUSH1 0x01 000016ea: PUSH1 0x01 000016ec: PUSH1 0xa0 000016ee: SHL 000016ef: SUB 000016f0: DUP8 000016f1: AND 000016f2: DUP1 000016f3: DUP6 000016f4: MSTORE 000016f5: SWAP3 000016f6: MSTORE 000016f7: DUP1 000016f8: DUP4 000016f9: KECCAK256 000016fa: DUP1 000016fb: SLOAD 000016fc: PUSH1 0xff 000016fe: NOT 000016ff: AND 00001700: SWAP1 00001701: SSTORE 00001702: MLOAD 00001703: CALLER 00001704: SWAP3 00001705: DUP8 00001706: SWAP2 00001707: PUSH32 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b 00001728: SWAP2 00001729: SWAP1 0000172a: LOG4 0000172b: PUSH1 0x01 0000172d: SWAP2 0000172e: POP 0000172f: POP 00001730: PUSH2 0x071d 00001733: JUMP 00001734: JUMPDEST 00001735: PUSH2 0x173c 00001738: PUSH2 0x1cc9 0000173b: JUMP 0000173c: JUMPDEST 0000173d: PUSH32 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300 0000175e: DUP1 0000175f: SLOAD 00001760: PUSH1 0xff 00001762: NOT 00001763: AND 00001764: DUP2 00001765: SSTORE 00001766: PUSH32 0x5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa 00001787: CALLER 00001788: JUMPDEST 00001789: PUSH1 0x40 0000178b: MLOAD 0000178c: PUSH1 0x01 0000178e: PUSH1 0x01 00001790: PUSH1 0xa0 00001792: SHL 00001793: SUB 00001794: SWAP1 00001795: SWAP2 00001796: AND 00001797: DUP2 00001798: MSTORE 00001799: PUSH1 0x20 0000179b: ADD 0000179c: PUSH1 0x40 0000179e: MLOAD 0000179f: DUP1 000017a0: SWAP2 000017a1: SUB 000017a2: SWAP1 000017a3: LOG1 000017a4: POP 000017a5: JUMP 000017a6: JUMPDEST 000017a7: ADDRESS 000017a8: PUSH1 0x01 000017aa: PUSH1 0x01 000017ac: PUSH1 0xa0 000017ae: SHL 000017af: SUB 000017b0: PUSH32 0x00000000000000000000000037555f2e573b7d84fe0a09365d3a443509e0f645 000017d1: AND 000017d2: EQ 000017d3: DUP1 000017d4: PUSH2 0x183f 000017d7: JUMPI 000017d8: POP 000017d9: PUSH32 0x00000000000000000000000037555f2e573b7d84fe0a09365d3a443509e0f645 000017fa: PUSH1 0x01 000017fc: PUSH1 0x01 000017fe: PUSH1 0xa0 00001800: SHL 00001801: SUB 00001802: AND 00001803: PUSH2 0x1833 00001806: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 00001827: SLOAD 00001828: PUSH1 0x01 0000182a: PUSH1 0x01 0000182c: PUSH1 0xa0 0000182e: SHL 0000182f: SUB 00001830: AND 00001831: SWAP1 00001832: JUMP 00001833: JUMPDEST 00001834: PUSH1 0x01 00001836: PUSH1 0x01 00001838: PUSH1 0xa0 0000183a: SHL 0000183b: SUB 0000183c: AND 0000183d: EQ 0000183e: ISZERO 0000183f: JUMPDEST 00001840: ISZERO 00001841: PUSH2 0x1876 00001844: JUMPI 00001845: PUSH1 0x40 00001847: MLOAD 00001848: PUSH32 0xe07c8dba00000000000000000000000000000000000000000000000000000000 00001869: DUP2 0000186a: MSTORE 0000186b: PUSH1 0x04 0000186d: ADD 0000186e: PUSH1 0x40 00001870: MLOAD 00001871: DUP1 00001872: SWAP2 00001873: SUB 00001874: SWAP1 00001875: REVERT 00001876: JUMPDEST 00001877: JUMP 00001878: JUMPDEST 00001879: PUSH1 0x00 0000187b: PUSH2 0x080e 0000187e: DUP2 0000187f: PUSH2 0x15b5 00001882: JUMP 00001883: JUMPDEST 00001884: DUP2 00001885: PUSH1 0x01 00001887: PUSH1 0x01 00001889: PUSH1 0xa0 0000188b: SHL 0000188c: SUB 0000188d: AND 0000188e: PUSH4 0x52d1902d 00001893: PUSH1 0x40 00001895: MLOAD 00001896: DUP2 00001897: PUSH4 0xffffffff 0000189c: AND 0000189d: PUSH1 0xe0 0000189f: SHL 000018a0: DUP2 000018a1: MSTORE 000018a2: PUSH1 0x04 000018a4: ADD 000018a5: PUSH1 0x20 000018a7: PUSH1 0x40 000018a9: MLOAD 000018aa: DUP1 000018ab: DUP4 000018ac: SUB 000018ad: DUP2 000018ae: DUP7 000018af: GAS 000018b0: STATICCALL 000018b1: SWAP3 000018b2: POP 000018b3: POP 000018b4: POP 000018b5: DUP1 000018b6: ISZERO 000018b7: PUSH2 0x18fb 000018ba: JUMPI 000018bb: POP 000018bc: PUSH1 0x40 000018be: DUP1 000018bf: MLOAD 000018c0: PUSH1 0x1f 000018c2: RETURNDATASIZE 000018c3: SWAP1 000018c4: DUP2 000018c5: ADD 000018c6: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000018e7: AND 000018e8: DUP3 000018e9: ADD 000018ea: SWAP1 000018eb: SWAP3 000018ec: MSTORE 000018ed: PUSH2 0x18f8 000018f0: SWAP2 000018f1: DUP2 000018f2: ADD 000018f3: SWAP1 000018f4: PUSH2 0x2880 000018f7: JUMP 000018f8: JUMPDEST 000018f9: PUSH1 0x01 000018fb: JUMPDEST 000018fc: PUSH2 0x1941 000018ff: JUMPI 00001900: PUSH1 0x40 00001902: MLOAD 00001903: PUSH32 0x4c9c8ce300000000000000000000000000000000000000000000000000000000 00001924: DUP2 00001925: MSTORE 00001926: PUSH1 0x01 00001928: PUSH1 0x01 0000192a: PUSH1 0xa0 0000192c: SHL 0000192d: SUB 0000192e: DUP4 0000192f: AND 00001930: PUSH1 0x04 00001932: DUP3 00001933: ADD 00001934: MSTORE 00001935: PUSH1 0x24 00001937: ADD 00001938: JUMPDEST 00001939: PUSH1 0x40 0000193b: MLOAD 0000193c: DUP1 0000193d: SWAP2 0000193e: SUB 0000193f: SWAP1 00001940: REVERT 00001941: JUMPDEST 00001942: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 00001963: DUP2 00001964: EQ 00001965: PUSH2 0x199d 00001968: JUMPI 00001969: PUSH1 0x40 0000196b: MLOAD 0000196c: PUSH32 0xaa1d49a400000000000000000000000000000000000000000000000000000000 0000198d: DUP2 0000198e: MSTORE 0000198f: PUSH1 0x04 00001991: DUP2 00001992: ADD 00001993: DUP3 00001994: SWAP1 00001995: MSTORE 00001996: PUSH1 0x24 00001998: ADD 00001999: PUSH2 0x1938 0000199c: JUMP 0000199d: JUMPDEST 0000199e: PUSH2 0x07b9 000019a1: DUP4 000019a2: DUP4 000019a3: PUSH2 0x1d24 000019a6: JUMP 000019a7: JUMPDEST 000019a8: ADDRESS 000019a9: PUSH1 0x01 000019ab: PUSH1 0x01 000019ad: PUSH1 0xa0 000019af: SHL 000019b0: SUB 000019b1: PUSH32 0x00000000000000000000000037555f2e573b7d84fe0a09365d3a443509e0f645 000019d2: AND 000019d3: EQ 000019d4: PUSH2 0x1876 000019d7: JUMPI 000019d8: PUSH1 0x40 000019da: MLOAD 000019db: PUSH32 0xe07c8dba00000000000000000000000000000000000000000000000000000000 000019fc: DUP2 000019fd: MSTORE 000019fe: PUSH1 0x04 00001a00: ADD 00001a01: PUSH1 0x40 00001a03: MLOAD 00001a04: DUP1 00001a05: SWAP2 00001a06: SUB 00001a07: SWAP1 00001a08: REVERT 00001a09: JUMPDEST 00001a0a: PUSH2 0x1a11 00001a0d: PUSH2 0x1ae5 00001a10: JUMP 00001a11: JUMPDEST 00001a12: PUSH32 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300 00001a33: DUP1 00001a34: SLOAD 00001a35: PUSH1 0xff 00001a37: NOT 00001a38: AND 00001a39: PUSH1 0x01 00001a3b: OR 00001a3c: DUP2 00001a3d: SSTORE 00001a3e: PUSH32 0x62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258 00001a5f: CALLER 00001a60: PUSH2 0x1788 00001a63: JUMP 00001a64: JUMPDEST 00001a65: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 00001a86: DUP1 00001a87: SLOAD 00001a88: PUSH32 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe 00001aa9: ADD 00001aaa: PUSH2 0x1adf 00001aad: JUMPI 00001aae: PUSH1 0x40 00001ab0: MLOAD 00001ab1: PUSH32 0x3ee5aeb500000000000000000000000000000000000000000000000000000000 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: PUSH1 0x02 00001ae2: SWAP1 00001ae3: SSTORE 00001ae4: JUMP 00001ae5: JUMPDEST 00001ae6: PUSH32 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300 00001b07: SLOAD 00001b08: PUSH1 0xff 00001b0a: AND 00001b0b: ISZERO 00001b0c: PUSH2 0x1876 00001b0f: JUMPI 00001b10: PUSH1 0x40 00001b12: MLOAD 00001b13: PUSH32 0xd93c066500000000000000000000000000000000000000000000000000000000 00001b34: DUP2 00001b35: MSTORE 00001b36: PUSH1 0x04 00001b38: ADD 00001b39: PUSH1 0x40 00001b3b: MLOAD 00001b3c: DUP1 00001b3d: SWAP2 00001b3e: SUB 00001b3f: SWAP1 00001b40: REVERT 00001b41: JUMPDEST 00001b42: PUSH1 0x40 00001b44: MLOAD 00001b45: PUSH1 0x01 00001b47: PUSH1 0x01 00001b49: PUSH1 0xa0 00001b4b: SHL 00001b4c: SUB 00001b4d: DUP4 00001b4e: DUP2 00001b4f: AND 00001b50: PUSH1 0x24 00001b52: DUP4 00001b53: ADD 00001b54: MSTORE 00001b55: PUSH1 0x44 00001b57: DUP3 00001b58: ADD 00001b59: DUP4 00001b5a: SWAP1 00001b5b: MSTORE 00001b5c: PUSH2 0x07b9 00001b5f: SWAP2 00001b60: DUP6 00001b61: SWAP2 00001b62: DUP3 00001b63: AND 00001b64: SWAP1 00001b65: PUSH4 0xa9059cbb 00001b6a: SWAP1 00001b6b: PUSH1 0x64 00001b6d: ADD 00001b6e: JUMPDEST 00001b6f: PUSH1 0x40 00001b71: MLOAD 00001b72: PUSH1 0x20 00001b74: DUP2 00001b75: DUP4 00001b76: SUB 00001b77: SUB 00001b78: DUP2 00001b79: MSTORE 00001b7a: SWAP1 00001b7b: PUSH1 0x40 00001b7d: MSTORE 00001b7e: SWAP2 00001b7f: POP 00001b80: PUSH1 0xe0 00001b82: SHL 00001b83: PUSH1 0x20 00001b85: DUP3 00001b86: ADD 00001b87: DUP1 00001b88: MLOAD 00001b89: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001ba6: DUP4 00001ba7: DUP2 00001ba8: DUP4 00001ba9: AND 00001baa: OR 00001bab: DUP4 00001bac: MSTORE 00001bad: POP 00001bae: POP 00001baf: POP 00001bb0: POP 00001bb1: PUSH2 0x1d7a 00001bb4: JUMP 00001bb5: JUMPDEST 00001bb6: PUSH1 0x01 00001bb8: PUSH32 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00 00001bd9: SSTORE 00001bda: JUMP 00001bdb: JUMPDEST 00001bdc: PUSH2 0x1876 00001bdf: PUSH2 0x1df6 00001be2: JUMP 00001be3: JUMPDEST 00001be4: PUSH2 0x1beb 00001be7: PUSH2 0x1df6 00001bea: JUMP 00001beb: JUMPDEST 00001bec: PUSH2 0x1876 00001bef: PUSH2 0x1e5d 00001bf2: JUMP 00001bf3: JUMPDEST 00001bf4: PUSH2 0x1bfb 00001bf7: PUSH2 0x1df6 00001bfa: JUMP 00001bfb: JUMPDEST 00001bfc: PUSH2 0x1876 00001bff: PUSH2 0x1e65 00001c02: JUMP 00001c03: JUMPDEST 00001c04: PUSH1 0x40 00001c06: MLOAD 00001c07: PUSH1 0x01 00001c09: PUSH1 0x01 00001c0b: PUSH1 0xa0 00001c0d: SHL 00001c0e: SUB 00001c0f: DUP5 00001c10: DUP2 00001c11: AND 00001c12: PUSH1 0x24 00001c14: DUP4 00001c15: ADD 00001c16: MSTORE 00001c17: DUP4 00001c18: DUP2 00001c19: AND 00001c1a: PUSH1 0x44 00001c1c: DUP4 00001c1d: ADD 00001c1e: MSTORE 00001c1f: PUSH1 0x64 00001c21: DUP3 00001c22: ADD 00001c23: DUP4 00001c24: SWAP1 00001c25: MSTORE 00001c26: PUSH2 0x0767 00001c29: SWAP2 00001c2a: DUP7 00001c2b: SWAP2 00001c2c: DUP3 00001c2d: AND 00001c2e: SWAP1 00001c2f: PUSH4 0x23b872dd 00001c34: SWAP1 00001c35: PUSH1 0x84 00001c37: ADD 00001c38: PUSH2 0x1b6e 00001c3b: JUMP 00001c3c: JUMPDEST 00001c3d: PUSH1 0x00 00001c3f: DUP3 00001c40: DUP2 00001c41: MSTORE 00001c42: PUSH32 0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800 00001c63: PUSH1 0x20 00001c65: SWAP1 00001c66: DUP2 00001c67: MSTORE 00001c68: PUSH1 0x40 00001c6a: DUP1 00001c6b: DUP4 00001c6c: KECCAK256 00001c6d: PUSH1 0x01 00001c6f: PUSH1 0x01 00001c71: PUSH1 0xa0 00001c73: SHL 00001c74: SUB 00001c75: DUP6 00001c76: AND 00001c77: DUP5 00001c78: MSTORE 00001c79: SWAP1 00001c7a: SWAP2 00001c7b: MSTORE 00001c7c: SWAP1 00001c7d: KECCAK256 00001c7e: SLOAD 00001c7f: PUSH1 0xff 00001c81: AND 00001c82: PUSH2 0x080e 00001c85: JUMPI 00001c86: PUSH1 0x40 00001c88: MLOAD 00001c89: PUSH32 0xe2517d3f00000000000000000000000000000000000000000000000000000000 00001caa: DUP2 00001cab: MSTORE 00001cac: PUSH1 0x01 00001cae: PUSH1 0x01 00001cb0: PUSH1 0xa0 00001cb2: SHL 00001cb3: SUB 00001cb4: DUP3 00001cb5: AND 00001cb6: PUSH1 0x04 00001cb8: DUP3 00001cb9: ADD 00001cba: MSTORE 00001cbb: PUSH1 0x24 00001cbd: DUP2 00001cbe: ADD 00001cbf: DUP4 00001cc0: SWAP1 00001cc1: MSTORE 00001cc2: PUSH1 0x44 00001cc4: ADD 00001cc5: PUSH2 0x1938 00001cc8: JUMP 00001cc9: JUMPDEST 00001cca: PUSH32 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300 00001ceb: SLOAD 00001cec: PUSH1 0xff 00001cee: AND 00001cef: PUSH2 0x1876 00001cf2: JUMPI 00001cf3: PUSH1 0x40 00001cf5: MLOAD 00001cf6: PUSH32 0x8dfc202b00000000000000000000000000000000000000000000000000000000 00001d17: DUP2 00001d18: MSTORE 00001d19: PUSH1 0x04 00001d1b: ADD 00001d1c: PUSH1 0x40 00001d1e: MLOAD 00001d1f: DUP1 00001d20: SWAP2 00001d21: SUB 00001d22: SWAP1 00001d23: REVERT 00001d24: JUMPDEST 00001d25: PUSH2 0x1d2d 00001d28: DUP3 00001d29: PUSH2 0x1e98 00001d2c: JUMP 00001d2d: JUMPDEST 00001d2e: PUSH1 0x40 00001d30: MLOAD 00001d31: PUSH1 0x01 00001d33: PUSH1 0x01 00001d35: PUSH1 0xa0 00001d37: SHL 00001d38: SUB 00001d39: DUP4 00001d3a: AND 00001d3b: SWAP1 00001d3c: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b 00001d5d: SWAP1 00001d5e: PUSH1 0x00 00001d60: SWAP1 00001d61: LOG2 00001d62: DUP1 00001d63: MLOAD 00001d64: ISZERO 00001d65: PUSH2 0x1d72 00001d68: JUMPI 00001d69: PUSH2 0x07b9 00001d6c: DUP3 00001d6d: DUP3 00001d6e: PUSH2 0x1f40 00001d71: JUMP 00001d72: JUMPDEST 00001d73: PUSH2 0x080e 00001d76: PUSH2 0x1fb6 00001d79: JUMP 00001d7a: JUMPDEST 00001d7b: PUSH1 0x00 00001d7d: PUSH2 0x1d8f 00001d80: PUSH1 0x01 00001d82: PUSH1 0x01 00001d84: PUSH1 0xa0 00001d86: SHL 00001d87: SUB 00001d88: DUP5 00001d89: AND 00001d8a: DUP4 00001d8b: PUSH2 0x1fee 00001d8e: JUMP 00001d8f: JUMPDEST 00001d90: SWAP1 00001d91: POP 00001d92: DUP1 00001d93: MLOAD 00001d94: PUSH1 0x00 00001d96: EQ 00001d97: ISZERO 00001d98: DUP1 00001d99: ISZERO 00001d9a: PUSH2 0x1db4 00001d9d: JUMPI 00001d9e: POP 00001d9f: DUP1 00001da0: DUP1 00001da1: PUSH1 0x20 00001da3: ADD 00001da4: SWAP1 00001da5: MLOAD 00001da6: DUP2 00001da7: ADD 00001da8: SWAP1 00001da9: PUSH2 0x1db2 00001dac: SWAP2 00001dad: SWAP1 00001dae: PUSH2 0x2900 00001db1: JUMP 00001db2: JUMPDEST 00001db3: ISZERO 00001db4: JUMPDEST 00001db5: ISZERO 00001db6: PUSH2 0x07b9 00001db9: JUMPI 00001dba: PUSH1 0x40 00001dbc: MLOAD 00001dbd: PUSH32 0x5274afe700000000000000000000000000000000000000000000000000000000 00001dde: DUP2 00001ddf: MSTORE 00001de0: PUSH1 0x01 00001de2: PUSH1 0x01 00001de4: PUSH1 0xa0 00001de6: SHL 00001de7: SUB 00001de8: DUP5 00001de9: AND 00001dea: PUSH1 0x04 00001dec: DUP3 00001ded: ADD 00001dee: MSTORE 00001def: PUSH1 0x24 00001df1: ADD 00001df2: PUSH2 0x1938 00001df5: JUMP 00001df6: JUMPDEST 00001df7: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 00001e18: SLOAD 00001e19: PUSH9 0x010000000000000000 00001e23: SWAP1 00001e24: DIV 00001e25: PUSH1 0xff 00001e27: AND 00001e28: PUSH2 0x1876 00001e2b: JUMPI 00001e2c: PUSH1 0x40 00001e2e: MLOAD 00001e2f: PUSH32 0xd7e6bcf800000000000000000000000000000000000000000000000000000000 00001e50: DUP2 00001e51: MSTORE 00001e52: PUSH1 0x04 00001e54: ADD 00001e55: PUSH1 0x40 00001e57: MLOAD 00001e58: DUP1 00001e59: SWAP2 00001e5a: SUB 00001e5b: SWAP1 00001e5c: REVERT 00001e5d: JUMPDEST 00001e5e: PUSH2 0x1bb5 00001e61: PUSH2 0x1df6 00001e64: JUMP 00001e65: JUMPDEST 00001e66: PUSH2 0x1e6d 00001e69: PUSH2 0x1df6 00001e6c: JUMP 00001e6d: JUMPDEST 00001e6e: PUSH32 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300 00001e8f: DUP1 00001e90: SLOAD 00001e91: PUSH1 0xff 00001e93: NOT 00001e94: AND 00001e95: SWAP1 00001e96: SSTORE 00001e97: JUMP 00001e98: JUMPDEST 00001e99: DUP1 00001e9a: PUSH1 0x01 00001e9c: PUSH1 0x01 00001e9e: PUSH1 0xa0 00001ea0: SHL 00001ea1: SUB 00001ea2: AND 00001ea3: EXTCODESIZE 00001ea4: PUSH1 0x00 00001ea6: SUB 00001ea7: PUSH2 0x1ee7 00001eaa: JUMPI 00001eab: PUSH1 0x40 00001ead: MLOAD 00001eae: PUSH32 0x4c9c8ce300000000000000000000000000000000000000000000000000000000 00001ecf: DUP2 00001ed0: MSTORE 00001ed1: PUSH1 0x01 00001ed3: PUSH1 0x01 00001ed5: PUSH1 0xa0 00001ed7: SHL 00001ed8: SUB 00001ed9: DUP3 00001eda: AND 00001edb: PUSH1 0x04 00001edd: DUP3 00001ede: ADD 00001edf: MSTORE 00001ee0: PUSH1 0x24 00001ee2: ADD 00001ee3: PUSH2 0x1938 00001ee6: JUMP 00001ee7: JUMPDEST 00001ee8: PUSH32 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc 00001f09: DUP1 00001f0a: SLOAD 00001f0b: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00001f2c: AND 00001f2d: PUSH1 0x01 00001f2f: PUSH1 0x01 00001f31: PUSH1 0xa0 00001f33: SHL 00001f34: SUB 00001f35: SWAP3 00001f36: SWAP1 00001f37: SWAP3 00001f38: AND 00001f39: SWAP2 00001f3a: SWAP1 00001f3b: SWAP2 00001f3c: OR 00001f3d: SWAP1 00001f3e: SSTORE 00001f3f: JUMP 00001f40: JUMPDEST 00001f41: PUSH1 0x60 00001f43: PUSH1 0x00 00001f45: DUP1 00001f46: DUP5 00001f47: PUSH1 0x01 00001f49: PUSH1 0x01 00001f4b: PUSH1 0xa0 00001f4d: SHL 00001f4e: SUB 00001f4f: AND 00001f50: DUP5 00001f51: PUSH1 0x40 00001f53: MLOAD 00001f54: PUSH2 0x1f5d 00001f57: SWAP2 00001f58: SWAP1 00001f59: PUSH2 0x291d 00001f5c: JUMP 00001f5d: JUMPDEST 00001f5e: PUSH1 0x00 00001f60: PUSH1 0x40 00001f62: MLOAD 00001f63: DUP1 00001f64: DUP4 00001f65: SUB 00001f66: DUP2 00001f67: DUP6 00001f68: GAS 00001f69: DELEGATECALL 00001f6a: SWAP2 00001f6b: POP 00001f6c: POP 00001f6d: RETURNDATASIZE 00001f6e: DUP1 00001f6f: PUSH1 0x00 00001f71: DUP2 00001f72: EQ 00001f73: PUSH2 0x1f98 00001f76: JUMPI 00001f77: PUSH1 0x40 00001f79: MLOAD 00001f7a: SWAP2 00001f7b: POP 00001f7c: PUSH1 0x1f 00001f7e: NOT 00001f7f: PUSH1 0x3f 00001f81: RETURNDATASIZE 00001f82: ADD 00001f83: AND 00001f84: DUP3 00001f85: ADD 00001f86: PUSH1 0x40 00001f88: MSTORE 00001f89: RETURNDATASIZE 00001f8a: DUP3 00001f8b: MSTORE 00001f8c: RETURNDATASIZE 00001f8d: PUSH1 0x00 00001f8f: PUSH1 0x20 00001f91: DUP5 00001f92: ADD 00001f93: RETURNDATACOPY 00001f94: PUSH2 0x1f9d 00001f97: JUMP 00001f98: JUMPDEST 00001f99: PUSH1 0x60 00001f9b: SWAP2 00001f9c: POP 00001f9d: JUMPDEST 00001f9e: POP 00001f9f: SWAP2 00001fa0: POP 00001fa1: SWAP2 00001fa2: POP 00001fa3: PUSH2 0x1fad 00001fa6: DUP6 00001fa7: DUP4 00001fa8: DUP4 00001fa9: PUSH2 0x2003 00001fac: JUMP 00001fad: JUMPDEST 00001fae: SWAP6 00001faf: SWAP5 00001fb0: POP 00001fb1: POP 00001fb2: POP 00001fb3: POP 00001fb4: POP 00001fb5: JUMP 00001fb6: JUMPDEST 00001fb7: CALLVALUE 00001fb8: ISZERO 00001fb9: PUSH2 0x1876 00001fbc: JUMPI 00001fbd: PUSH1 0x40 00001fbf: MLOAD 00001fc0: PUSH32 0xb398979f00000000000000000000000000000000000000000000000000000000 00001fe1: DUP2 00001fe2: MSTORE 00001fe3: PUSH1 0x04 00001fe5: ADD 00001fe6: PUSH1 0x40 00001fe8: MLOAD 00001fe9: DUP1 00001fea: SWAP2 00001feb: SUB 00001fec: SWAP1 00001fed: REVERT 00001fee: JUMPDEST 00001fef: PUSH1 0x60 00001ff1: PUSH2 0x1ffc 00001ff4: DUP4 00001ff5: DUP4 00001ff6: PUSH1 0x00 00001ff8: PUSH2 0x2078 00001ffb: JUMP 00001ffc: JUMPDEST 00001ffd: SWAP4 00001ffe: SWAP3 00001fff: POP 00002000: POP 00002001: POP 00002002: JUMP 00002003: JUMPDEST 00002004: PUSH1 0x60 00002006: DUP3 00002007: PUSH2 0x2018 0000200a: JUMPI 0000200b: PUSH2 0x2013 0000200e: DUP3 0000200f: PUSH2 0x212e 00002012: JUMP 00002013: JUMPDEST 00002014: PUSH2 0x1ffc 00002017: JUMP 00002018: JUMPDEST 00002019: DUP2 0000201a: MLOAD 0000201b: ISZERO 0000201c: DUP1 0000201d: ISZERO 0000201e: PUSH2 0x202f 00002021: JUMPI 00002022: POP 00002023: PUSH1 0x01 00002025: PUSH1 0x01 00002027: PUSH1 0xa0 00002029: SHL 0000202a: SUB 0000202b: DUP5 0000202c: AND 0000202d: EXTCODESIZE 0000202e: ISZERO 0000202f: JUMPDEST 00002030: ISZERO 00002031: PUSH2 0x2071 00002034: JUMPI 00002035: PUSH1 0x40 00002037: MLOAD 00002038: PUSH32 0x9996b31500000000000000000000000000000000000000000000000000000000 00002059: DUP2 0000205a: MSTORE 0000205b: PUSH1 0x01 0000205d: PUSH1 0x01 0000205f: PUSH1 0xa0 00002061: SHL 00002062: SUB 00002063: DUP6 00002064: AND 00002065: PUSH1 0x04 00002067: DUP3 00002068: ADD 00002069: MSTORE 0000206a: PUSH1 0x24 0000206c: ADD 0000206d: PUSH2 0x1938 00002070: JUMP 00002071: JUMPDEST 00002072: POP 00002073: SWAP3 00002074: SWAP2 00002075: POP 00002076: POP 00002077: JUMP 00002078: JUMPDEST 00002079: PUSH1 0x60 0000207b: DUP2 0000207c: SELFBALANCE 0000207d: LT 0000207e: ISZERO 0000207f: PUSH2 0x20b6 00002082: JUMPI 00002083: PUSH1 0x40 00002085: MLOAD 00002086: PUSH32 0xcd78605900000000000000000000000000000000000000000000000000000000 000020a7: DUP2 000020a8: MSTORE 000020a9: ADDRESS 000020aa: PUSH1 0x04 000020ac: DUP3 000020ad: ADD 000020ae: MSTORE 000020af: PUSH1 0x24 000020b1: ADD 000020b2: PUSH2 0x1938 000020b5: JUMP 000020b6: JUMPDEST 000020b7: PUSH1 0x00 000020b9: DUP1 000020ba: DUP6 000020bb: PUSH1 0x01 000020bd: PUSH1 0x01 000020bf: PUSH1 0xa0 000020c1: SHL 000020c2: SUB 000020c3: AND 000020c4: DUP5 000020c5: DUP7 000020c6: PUSH1 0x40 000020c8: MLOAD 000020c9: PUSH2 0x20d2 000020cc: SWAP2 000020cd: SWAP1 000020ce: PUSH2 0x291d 000020d1: JUMP 000020d2: JUMPDEST 000020d3: PUSH1 0x00 000020d5: PUSH1 0x40 000020d7: MLOAD 000020d8: DUP1 000020d9: DUP4 000020da: SUB 000020db: DUP2 000020dc: DUP6 000020dd: DUP8 000020de: GAS 000020df: CALL 000020e0: SWAP3 000020e1: POP 000020e2: POP 000020e3: POP 000020e4: RETURNDATASIZE 000020e5: DUP1 000020e6: PUSH1 0x00 000020e8: DUP2 000020e9: EQ 000020ea: PUSH2 0x210f 000020ed: JUMPI 000020ee: PUSH1 0x40 000020f0: MLOAD 000020f1: SWAP2 000020f2: POP 000020f3: PUSH1 0x1f 000020f5: NOT 000020f6: PUSH1 0x3f 000020f8: RETURNDATASIZE 000020f9: ADD 000020fa: AND 000020fb: DUP3 000020fc: ADD 000020fd: PUSH1 0x40 000020ff: MSTORE 00002100: RETURNDATASIZE 00002101: DUP3 00002102: MSTORE 00002103: RETURNDATASIZE 00002104: PUSH1 0x00 00002106: PUSH1 0x20 00002108: DUP5 00002109: ADD 0000210a: RETURNDATACOPY 0000210b: PUSH2 0x2114 0000210e: JUMP 0000210f: JUMPDEST 00002110: PUSH1 0x60 00002112: SWAP2 00002113: POP 00002114: JUMPDEST 00002115: POP 00002116: SWAP2 00002117: POP 00002118: SWAP2 00002119: POP 0000211a: PUSH2 0x2124 0000211d: DUP7 0000211e: DUP4 0000211f: DUP4 00002120: PUSH2 0x2003 00002123: JUMP 00002124: JUMPDEST 00002125: SWAP7 00002126: SWAP6 00002127: POP 00002128: POP 00002129: POP 0000212a: POP 0000212b: POP 0000212c: POP 0000212d: JUMP 0000212e: JUMPDEST 0000212f: DUP1 00002130: MLOAD 00002131: ISZERO 00002132: PUSH2 0x213e 00002135: JUMPI 00002136: DUP1 00002137: MLOAD 00002138: DUP1 00002139: DUP3 0000213a: PUSH1 0x20 0000213c: ADD 0000213d: REVERT 0000213e: JUMPDEST 0000213f: PUSH1 0x40 00002141: MLOAD 00002142: PUSH32 0x1425ea4200000000000000000000000000000000000000000000000000000000 00002163: DUP2 00002164: MSTORE 00002165: PUSH1 0x04 00002167: ADD 00002168: PUSH1 0x40 0000216a: MLOAD 0000216b: DUP1 0000216c: SWAP2 0000216d: SUB 0000216e: SWAP1 0000216f: REVERT 00002170: JUMPDEST 00002171: PUSH1 0x00 00002173: PUSH1 0x20 00002175: DUP3 00002176: DUP5 00002177: SUB 00002178: SLT 00002179: ISZERO 0000217a: PUSH2 0x2182 0000217d: JUMPI 0000217e: PUSH1 0x00 00002180: DUP1 00002181: REVERT 00002182: JUMPDEST 00002183: DUP2 00002184: CALLDATALOAD 00002185: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 000021a6: DUP2 000021a7: AND 000021a8: DUP2 000021a9: EQ 000021aa: PUSH2 0x1ffc 000021ad: JUMPI 000021ae: PUSH1 0x00 000021b0: DUP1 000021b1: REVERT 000021b2: JUMPDEST 000021b3: PUSH1 0x00 000021b5: PUSH1 0x20 000021b7: DUP3 000021b8: DUP5 000021b9: SUB 000021ba: SLT 000021bb: ISZERO 000021bc: PUSH2 0x21c4 000021bf: JUMPI 000021c0: PUSH1 0x00 000021c2: DUP1 000021c3: REVERT 000021c4: JUMPDEST 000021c5: POP 000021c6: CALLDATALOAD 000021c7: SWAP2 000021c8: SWAP1 000021c9: POP 000021ca: JUMP 000021cb: JUMPDEST 000021cc: PUSH1 0x01 000021ce: PUSH1 0x01 000021d0: PUSH1 0xa0 000021d2: SHL 000021d3: SUB 000021d4: DUP2 000021d5: AND 000021d6: DUP2 000021d7: EQ 000021d8: PUSH2 0x07f0 000021db: JUMPI 000021dc: PUSH1 0x00 000021de: DUP1 000021df: REVERT 000021e0: JUMPDEST 000021e1: PUSH1 0x00 000021e3: DUP1 000021e4: PUSH1 0x40 000021e6: DUP4 000021e7: DUP6 000021e8: SUB 000021e9: SLT 000021ea: ISZERO 000021eb: PUSH2 0x21f3 000021ee: JUMPI 000021ef: PUSH1 0x00 000021f1: DUP1 000021f2: REVERT 000021f3: JUMPDEST 000021f4: DUP3 000021f5: CALLDATALOAD 000021f6: SWAP2 000021f7: POP 000021f8: PUSH1 0x20 000021fa: DUP4 000021fb: ADD 000021fc: CALLDATALOAD 000021fd: PUSH2 0x2205 00002200: DUP2 00002201: PUSH2 0x21cb 00002204: JUMP 00002205: JUMPDEST 00002206: DUP1 00002207: SWAP2 00002208: POP 00002209: POP 0000220a: SWAP3 0000220b: POP 0000220c: SWAP3 0000220d: SWAP1 0000220e: POP 0000220f: JUMP 00002210: JUMPDEST 00002211: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002232: PUSH1 0x00 00002234: MSTORE 00002235: PUSH1 0x41 00002237: PUSH1 0x04 00002239: MSTORE 0000223a: PUSH1 0x24 0000223c: PUSH1 0x00 0000223e: REVERT 0000223f: JUMPDEST 00002240: PUSH1 0x00 00002242: DUP1 00002243: PUSH1 0x40 00002245: DUP4 00002246: DUP6 00002247: SUB 00002248: SLT 00002249: ISZERO 0000224a: PUSH2 0x2252 0000224d: JUMPI 0000224e: PUSH1 0x00 00002250: DUP1 00002251: REVERT 00002252: JUMPDEST 00002253: DUP3 00002254: CALLDATALOAD 00002255: PUSH2 0x225d 00002258: DUP2 00002259: PUSH2 0x21cb 0000225c: JUMP 0000225d: JUMPDEST 0000225e: SWAP2 0000225f: POP 00002260: PUSH1 0x20 00002262: DUP4 00002263: ADD 00002264: CALLDATALOAD 00002265: PUSH8 0xffffffffffffffff 0000226e: DUP2 0000226f: GT 00002270: ISZERO 00002271: PUSH2 0x2279 00002274: JUMPI 00002275: PUSH1 0x00 00002277: DUP1 00002278: REVERT 00002279: JUMPDEST 0000227a: DUP4 0000227b: ADD 0000227c: PUSH1 0x1f 0000227e: DUP2 0000227f: ADD 00002280: DUP6 00002281: SGT 00002282: PUSH2 0x228a 00002285: JUMPI 00002286: PUSH1 0x00 00002288: DUP1 00002289: REVERT 0000228a: JUMPDEST 0000228b: DUP1 0000228c: CALLDATALOAD 0000228d: PUSH8 0xffffffffffffffff 00002296: DUP2 00002297: GT 00002298: ISZERO 00002299: PUSH2 0x22a4 0000229c: JUMPI 0000229d: PUSH2 0x22a4 000022a0: PUSH2 0x2210 000022a3: JUMP 000022a4: JUMPDEST 000022a5: PUSH1 0x40 000022a7: MLOAD 000022a8: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000022c9: PUSH1 0x3f 000022cb: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000022ec: PUSH1 0x1f 000022ee: DUP6 000022ef: ADD 000022f0: AND 000022f1: ADD 000022f2: AND 000022f3: DUP2 000022f4: ADD 000022f5: DUP2 000022f6: DUP2 000022f7: LT 000022f8: PUSH8 0xffffffffffffffff 00002301: DUP3 00002302: GT 00002303: OR 00002304: ISZERO 00002305: PUSH2 0x2310 00002308: JUMPI 00002309: PUSH2 0x2310 0000230c: PUSH2 0x2210 0000230f: JUMP 00002310: JUMPDEST 00002311: PUSH1 0x40 00002313: MSTORE 00002314: DUP2 00002315: DUP2 00002316: MSTORE 00002317: DUP3 00002318: DUP3 00002319: ADD 0000231a: PUSH1 0x20 0000231c: ADD 0000231d: DUP8 0000231e: LT 0000231f: ISZERO 00002320: PUSH2 0x2328 00002323: JUMPI 00002324: PUSH1 0x00 00002326: DUP1 00002327: REVERT 00002328: JUMPDEST 00002329: DUP2 0000232a: PUSH1 0x20 0000232c: DUP5 0000232d: ADD 0000232e: PUSH1 0x20 00002330: DUP4 00002331: ADD 00002332: CALLDATACOPY 00002333: PUSH1 0x00 00002335: PUSH1 0x20 00002337: DUP4 00002338: DUP4 00002339: ADD 0000233a: ADD 0000233b: MSTORE 0000233c: DUP1 0000233d: SWAP4 0000233e: POP 0000233f: POP 00002340: POP 00002341: POP 00002342: SWAP3 00002343: POP 00002344: SWAP3 00002345: SWAP1 00002346: POP 00002347: JUMP 00002348: JUMPDEST 00002349: PUSH1 0x00 0000234b: PUSH1 0x20 0000234d: DUP3 0000234e: DUP5 0000234f: SUB 00002350: SLT 00002351: ISZERO 00002352: PUSH2 0x235a 00002355: JUMPI 00002356: PUSH1 0x00 00002358: DUP1 00002359: REVERT 0000235a: JUMPDEST 0000235b: DUP2 0000235c: CALLDATALOAD 0000235d: PUSH2 0x1ffc 00002360: DUP2 00002361: PUSH2 0x21cb 00002364: JUMP 00002365: JUMPDEST 00002366: PUSH1 0x00 00002368: DUP1 00002369: DUP4 0000236a: PUSH1 0x1f 0000236c: DUP5 0000236d: ADD 0000236e: SLT 0000236f: PUSH2 0x2377 00002372: JUMPI 00002373: PUSH1 0x00 00002375: DUP1 00002376: REVERT 00002377: JUMPDEST 00002378: POP 00002379: DUP2 0000237a: CALLDATALOAD 0000237b: PUSH8 0xffffffffffffffff 00002384: DUP2 00002385: GT 00002386: ISZERO 00002387: PUSH2 0x238f 0000238a: JUMPI 0000238b: PUSH1 0x00 0000238d: DUP1 0000238e: REVERT 0000238f: JUMPDEST 00002390: PUSH1 0x20 00002392: DUP4 00002393: ADD 00002394: SWAP2 00002395: POP 00002396: DUP4 00002397: PUSH1 0x20 00002399: DUP3 0000239a: DUP6 0000239b: ADD 0000239c: ADD 0000239d: GT 0000239e: ISZERO 0000239f: PUSH2 0x23a7 000023a2: JUMPI 000023a3: PUSH1 0x00 000023a5: DUP1 000023a6: REVERT 000023a7: JUMPDEST 000023a8: SWAP3 000023a9: POP 000023aa: SWAP3 000023ab: SWAP1 000023ac: POP 000023ad: JUMP 000023ae: JUMPDEST 000023af: PUSH1 0x00 000023b1: DUP1 000023b2: PUSH1 0x00 000023b4: DUP1 000023b5: PUSH1 0x00 000023b7: DUP1 000023b8: PUSH1 0xa0 000023ba: DUP8 000023bb: DUP10 000023bc: SUB 000023bd: SLT 000023be: ISZERO 000023bf: PUSH2 0x23c7 000023c2: JUMPI 000023c3: PUSH1 0x00 000023c5: DUP1 000023c6: REVERT 000023c7: JUMPDEST 000023c8: DUP7 000023c9: CALLDATALOAD 000023ca: PUSH2 0x23d2 000023cd: DUP2 000023ce: PUSH2 0x21cb 000023d1: JUMP 000023d2: JUMPDEST 000023d3: SWAP6 000023d4: POP 000023d5: PUSH1 0x20 000023d7: DUP8 000023d8: ADD 000023d9: CALLDATALOAD 000023da: PUSH2 0x23e2 000023dd: DUP2 000023de: PUSH2 0x21cb 000023e1: JUMP 000023e2: JUMPDEST 000023e3: SWAP5 000023e4: POP 000023e5: PUSH1 0x40 000023e7: DUP8 000023e8: ADD 000023e9: CALLDATALOAD 000023ea: SWAP4 000023eb: POP 000023ec: PUSH1 0x60 000023ee: DUP8 000023ef: ADD 000023f0: CALLDATALOAD 000023f1: PUSH8 0xffffffffffffffff 000023fa: DUP2 000023fb: GT 000023fc: ISZERO 000023fd: PUSH2 0x2405 00002400: JUMPI 00002401: PUSH1 0x00 00002403: DUP1 00002404: REVERT 00002405: JUMPDEST 00002406: PUSH2 0x2411 00002409: DUP10 0000240a: DUP3 0000240b: DUP11 0000240c: ADD 0000240d: PUSH2 0x2365 00002410: JUMP 00002411: JUMPDEST 00002412: SWAP1 00002413: SWAP5 00002414: POP 00002415: SWAP3 00002416: POP 00002417: POP 00002418: PUSH1 0x80 0000241a: DUP8 0000241b: ADD 0000241c: CALLDATALOAD 0000241d: PUSH8 0xffffffffffffffff 00002426: DUP2 00002427: GT 00002428: ISZERO 00002429: PUSH2 0x2431 0000242c: JUMPI 0000242d: PUSH1 0x00 0000242f: DUP1 00002430: REVERT 00002431: JUMPDEST 00002432: DUP8 00002433: ADD 00002434: PUSH1 0x80 00002436: DUP2 00002437: DUP11 00002438: SUB 00002439: SLT 0000243a: ISZERO 0000243b: PUSH2 0x2443 0000243e: JUMPI 0000243f: PUSH1 0x00 00002441: DUP1 00002442: REVERT 00002443: JUMPDEST 00002444: DUP1 00002445: SWAP2 00002446: POP 00002447: POP 00002448: SWAP3 00002449: SWAP6 0000244a: POP 0000244b: SWAP3 0000244c: SWAP6 0000244d: POP 0000244e: SWAP3 0000244f: SWAP6 00002450: JUMP 00002451: JUMPDEST 00002452: PUSH1 0x00 00002454: DUP1 00002455: PUSH1 0x00 00002457: DUP1 00002458: PUSH1 0x00 0000245a: DUP1 0000245b: DUP7 0000245c: DUP9 0000245d: SUB 0000245e: PUSH1 0xa0 00002460: DUP2 00002461: SLT 00002462: ISZERO 00002463: PUSH2 0x246b 00002466: JUMPI 00002467: PUSH1 0x00 00002469: DUP1 0000246a: REVERT 0000246b: JUMPDEST 0000246c: PUSH1 0x20 0000246e: DUP2 0000246f: SLT 00002470: ISZERO 00002471: PUSH2 0x2479 00002474: JUMPI 00002475: PUSH1 0x00 00002477: DUP1 00002478: REVERT 00002479: JUMPDEST 0000247a: POP 0000247b: DUP7 0000247c: SWAP6 0000247d: POP 0000247e: PUSH1 0x20 00002480: DUP8 00002481: ADD 00002482: CALLDATALOAD 00002483: PUSH2 0x248b 00002486: DUP2 00002487: PUSH2 0x21cb 0000248a: JUMP 0000248b: JUMPDEST 0000248c: SWAP5 0000248d: POP 0000248e: PUSH1 0x40 00002490: DUP8 00002491: ADD 00002492: CALLDATALOAD 00002493: PUSH2 0x249b 00002496: DUP2 00002497: PUSH2 0x21cb 0000249a: JUMP 0000249b: JUMPDEST 0000249c: SWAP4 0000249d: POP 0000249e: PUSH1 0x60 000024a0: DUP8 000024a1: ADD 000024a2: CALLDATALOAD 000024a3: SWAP3 000024a4: POP 000024a5: PUSH1 0x80 000024a7: DUP8 000024a8: ADD 000024a9: CALLDATALOAD 000024aa: PUSH8 0xffffffffffffffff 000024b3: DUP2 000024b4: GT 000024b5: ISZERO 000024b6: PUSH2 0x24be 000024b9: JUMPI 000024ba: PUSH1 0x00 000024bc: DUP1 000024bd: REVERT 000024be: JUMPDEST 000024bf: PUSH2 0x24ca 000024c2: DUP10 000024c3: DUP3 000024c4: DUP11 000024c5: ADD 000024c6: PUSH2 0x2365 000024c9: JUMP 000024ca: JUMPDEST 000024cb: SWAP8 000024cc: SWAP11 000024cd: SWAP7 000024ce: SWAP10 000024cf: POP 000024d0: SWAP5 000024d1: SWAP8 000024d2: POP 000024d3: SWAP3 000024d4: SWAP6 000024d5: SWAP4 000024d6: SWAP5 000024d7: SWAP3 000024d8: POP 000024d9: POP 000024da: POP 000024db: JUMP 000024dc: JUMPDEST 000024dd: PUSH1 0x00 000024df: JUMPDEST 000024e0: DUP4 000024e1: DUP2 000024e2: LT 000024e3: ISZERO 000024e4: PUSH2 0x24f7 000024e7: JUMPI 000024e8: DUP2 000024e9: DUP2 000024ea: ADD 000024eb: MLOAD 000024ec: DUP4 000024ed: DUP3 000024ee: ADD 000024ef: MSTORE 000024f0: PUSH1 0x20 000024f2: ADD 000024f3: PUSH2 0x24df 000024f6: JUMP 000024f7: JUMPDEST 000024f8: POP 000024f9: POP 000024fa: PUSH1 0x00 000024fc: SWAP2 000024fd: ADD 000024fe: MSTORE 000024ff: JUMP 00002500: JUMPDEST 00002501: PUSH1 0x20 00002503: DUP2 00002504: MSTORE 00002505: PUSH1 0x00 00002507: DUP3 00002508: MLOAD 00002509: DUP1 0000250a: PUSH1 0x20 0000250c: DUP5 0000250d: ADD 0000250e: MSTORE 0000250f: PUSH2 0x251f 00002512: DUP2 00002513: PUSH1 0x40 00002515: DUP6 00002516: ADD 00002517: PUSH1 0x20 00002519: DUP8 0000251a: ADD 0000251b: PUSH2 0x24dc 0000251e: JUMP 0000251f: JUMPDEST 00002520: PUSH1 0x1f 00002522: ADD 00002523: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00002544: AND 00002545: SWAP2 00002546: SWAP1 00002547: SWAP2 00002548: ADD 00002549: PUSH1 0x40 0000254b: ADD 0000254c: SWAP3 0000254d: SWAP2 0000254e: POP 0000254f: POP 00002550: JUMP 00002551: JUMPDEST 00002552: PUSH1 0x00 00002554: DUP1 00002555: PUSH1 0x00 00002557: PUSH1 0x60 00002559: DUP5 0000255a: DUP7 0000255b: SUB 0000255c: SLT 0000255d: ISZERO 0000255e: PUSH2 0x2566 00002561: JUMPI 00002562: PUSH1 0x00 00002564: DUP1 00002565: REVERT 00002566: JUMPDEST 00002567: DUP4 00002568: CALLDATALOAD 00002569: PUSH2 0x2571 0000256c: DUP2 0000256d: PUSH2 0x21cb 00002570: JUMP 00002571: JUMPDEST 00002572: SWAP3 00002573: POP 00002574: PUSH1 0x20 00002576: DUP5 00002577: ADD 00002578: CALLDATALOAD 00002579: PUSH2 0x2581 0000257c: DUP2 0000257d: PUSH2 0x21cb 00002580: JUMP 00002581: JUMPDEST 00002582: SWAP2 00002583: POP 00002584: PUSH1 0x40 00002586: DUP5 00002587: ADD 00002588: CALLDATALOAD 00002589: PUSH2 0x2591 0000258c: DUP2 0000258d: PUSH2 0x21cb 00002590: JUMP 00002591: JUMPDEST 00002592: DUP1 00002593: SWAP2 00002594: POP 00002595: POP 00002596: SWAP3 00002597: POP 00002598: SWAP3 00002599: POP 0000259a: SWAP3 0000259b: JUMP 0000259c: JUMPDEST 0000259d: PUSH1 0x00 0000259f: DUP1 000025a0: PUSH1 0x00 000025a2: PUSH1 0x60 000025a4: DUP5 000025a5: DUP7 000025a6: SUB 000025a7: SLT 000025a8: ISZERO 000025a9: PUSH2 0x25b1 000025ac: JUMPI 000025ad: PUSH1 0x00 000025af: DUP1 000025b0: REVERT 000025b1: JUMPDEST 000025b2: DUP4 000025b3: CALLDATALOAD 000025b4: PUSH2 0x25bc 000025b7: DUP2 000025b8: PUSH2 0x21cb 000025bb: JUMP 000025bc: JUMPDEST 000025bd: SWAP3 000025be: POP 000025bf: PUSH1 0x20 000025c1: DUP5 000025c2: ADD 000025c3: CALLDATALOAD 000025c4: PUSH2 0x25cc 000025c7: DUP2 000025c8: PUSH2 0x21cb 000025cb: JUMP 000025cc: JUMPDEST 000025cd: SWAP3 000025ce: SWAP6 000025cf: SWAP3 000025d0: SWAP5 000025d1: POP 000025d2: POP 000025d3: POP 000025d4: PUSH1 0x40 000025d6: SWAP2 000025d7: SWAP1 000025d8: SWAP2 000025d9: ADD 000025da: CALLDATALOAD 000025db: SWAP1 000025dc: JUMP 000025dd: JUMPDEST 000025de: PUSH1 0x00 000025e0: DUP1 000025e1: PUSH1 0x00 000025e3: DUP1 000025e4: PUSH1 0x00 000025e6: DUP1 000025e7: PUSH1 0x80 000025e9: DUP8 000025ea: DUP10 000025eb: SUB 000025ec: SLT 000025ed: ISZERO 000025ee: PUSH2 0x25f6 000025f1: JUMPI 000025f2: PUSH1 0x00 000025f4: DUP1 000025f5: REVERT 000025f6: JUMPDEST 000025f7: DUP7 000025f8: CALLDATALOAD 000025f9: PUSH8 0xffffffffffffffff 00002602: DUP2 00002603: GT 00002604: ISZERO 00002605: PUSH2 0x260d 00002608: JUMPI 00002609: PUSH1 0x00 0000260b: DUP1 0000260c: REVERT 0000260d: JUMPDEST 0000260e: PUSH2 0x2619 00002611: DUP10 00002612: DUP3 00002613: DUP11 00002614: ADD 00002615: PUSH2 0x2365 00002618: JUMP 00002619: JUMPDEST 0000261a: SWAP1 0000261b: SWAP8 0000261c: POP 0000261d: SWAP6 0000261e: POP 0000261f: POP 00002620: PUSH1 0x20 00002622: DUP8 00002623: ADD 00002624: CALLDATALOAD 00002625: PUSH2 0x262d 00002628: DUP2 00002629: PUSH2 0x21cb 0000262c: JUMP 0000262d: JUMPDEST 0000262e: SWAP4 0000262f: POP 00002630: PUSH1 0x40 00002632: DUP8 00002633: ADD 00002634: CALLDATALOAD 00002635: SWAP3 00002636: POP 00002637: PUSH1 0x60 00002639: DUP8 0000263a: ADD 0000263b: CALLDATALOAD 0000263c: PUSH8 0xffffffffffffffff 00002645: DUP2 00002646: GT 00002647: ISZERO 00002648: PUSH2 0x24be 0000264b: JUMPI 0000264c: PUSH1 0x00 0000264e: DUP1 0000264f: REVERT 00002650: JUMPDEST 00002651: DUP1 00002652: ISZERO 00002653: ISZERO 00002654: DUP2 00002655: EQ 00002656: PUSH2 0x07f0 00002659: JUMPI 0000265a: PUSH1 0x00 0000265c: DUP1 0000265d: REVERT 0000265e: JUMPDEST 0000265f: PUSH1 0x00 00002661: PUSH1 0x20 00002663: DUP3 00002664: DUP5 00002665: SUB 00002666: SLT 00002667: ISZERO 00002668: PUSH2 0x2670 0000266b: JUMPI 0000266c: PUSH1 0x00 0000266e: DUP1 0000266f: REVERT 00002670: JUMPDEST 00002671: DUP2 00002672: CALLDATALOAD 00002673: PUSH2 0x1ffc 00002676: DUP2 00002677: PUSH2 0x2650 0000267a: JUMP 0000267b: JUMPDEST 0000267c: DUP2 0000267d: DUP4 0000267e: MSTORE 0000267f: DUP2 00002680: DUP2 00002681: PUSH1 0x20 00002683: DUP6 00002684: ADD 00002685: CALLDATACOPY 00002686: POP 00002687: PUSH1 0x00 00002689: PUSH1 0x20 0000268b: DUP3 0000268c: DUP5 0000268d: ADD 0000268e: ADD 0000268f: MSTORE 00002690: PUSH1 0x00 00002692: PUSH1 0x20 00002694: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000026b5: PUSH1 0x1f 000026b7: DUP5 000026b8: ADD 000026b9: AND 000026ba: DUP5 000026bb: ADD 000026bc: ADD 000026bd: SWAP1 000026be: POP 000026bf: SWAP3 000026c0: SWAP2 000026c1: POP 000026c2: POP 000026c3: JUMP 000026c4: JUMPDEST 000026c5: PUSH1 0x00 000026c7: DUP2 000026c8: CALLDATALOAD 000026c9: PUSH2 0x26d1 000026cc: DUP2 000026cd: PUSH2 0x21cb 000026d0: JUMP 000026d1: JUMPDEST 000026d2: PUSH1 0x01 000026d4: PUSH1 0x01 000026d6: PUSH1 0xa0 000026d8: SHL 000026d9: SUB 000026da: AND 000026db: DUP4 000026dc: MSTORE 000026dd: PUSH1 0x20 000026df: DUP3 000026e0: ADD 000026e1: CALLDATALOAD 000026e2: PUSH2 0x26ea 000026e5: DUP2 000026e6: PUSH2 0x21cb 000026e9: JUMP 000026ea: JUMPDEST 000026eb: PUSH1 0x01 000026ed: PUSH1 0x01 000026ef: PUSH1 0xa0 000026f1: SHL 000026f2: SUB 000026f3: AND 000026f4: PUSH1 0x20 000026f6: DUP5 000026f7: ADD 000026f8: MSTORE 000026f9: PUSH1 0x40 000026fb: DUP3 000026fc: DUP2 000026fd: ADD 000026fe: CALLDATALOAD 000026ff: SWAP1 00002700: DUP5 00002701: ADD 00002702: MSTORE 00002703: PUSH1 0x60 00002705: DUP3 00002706: ADD 00002707: CALLDATALOAD 00002708: CALLDATASIZE 00002709: DUP4 0000270a: SWAP1 0000270b: SUB 0000270c: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1 0000272d: ADD 0000272e: DUP2 0000272f: SLT 00002730: PUSH2 0x2738 00002733: JUMPI 00002734: PUSH1 0x00 00002736: DUP1 00002737: REVERT 00002738: JUMPDEST 00002739: DUP3 0000273a: ADD 0000273b: PUSH1 0x20 0000273d: DUP2 0000273e: ADD 0000273f: SWAP1 00002740: CALLDATALOAD 00002741: PUSH8 0xffffffffffffffff 0000274a: DUP2 0000274b: GT 0000274c: ISZERO 0000274d: PUSH2 0x2755 00002750: JUMPI 00002751: PUSH1 0x00 00002753: DUP1 00002754: REVERT 00002755: JUMPDEST 00002756: DUP1 00002757: CALLDATASIZE 00002758: SUB 00002759: DUP3 0000275a: SGT 0000275b: ISZERO 0000275c: PUSH2 0x2764 0000275f: JUMPI 00002760: PUSH1 0x00 00002762: DUP1 00002763: REVERT 00002764: JUMPDEST 00002765: PUSH1 0x80 00002767: PUSH1 0x60 00002769: DUP7 0000276a: ADD 0000276b: MSTORE 0000276c: PUSH2 0x1fad 0000276f: PUSH1 0x80 00002771: DUP7 00002772: ADD 00002773: DUP3 00002774: DUP5 00002775: PUSH2 0x267b 00002778: JUMP 00002779: JUMPDEST 0000277a: PUSH1 0x01 0000277c: PUSH1 0x01 0000277e: PUSH1 0xa0 00002780: SHL 00002781: SUB 00002782: DUP8 00002783: AND 00002784: DUP2 00002785: MSTORE 00002786: PUSH1 0x01 00002788: PUSH1 0x01 0000278a: PUSH1 0xa0 0000278c: SHL 0000278d: SUB 0000278e: DUP7 0000278f: AND 00002790: PUSH1 0x20 00002792: DUP3 00002793: ADD 00002794: MSTORE 00002795: DUP5 00002796: PUSH1 0x40 00002798: DUP3 00002799: ADD 0000279a: MSTORE 0000279b: PUSH1 0xa0 0000279d: PUSH1 0x60 0000279f: DUP3 000027a0: ADD 000027a1: MSTORE 000027a2: PUSH1 0x00 000027a4: PUSH2 0x27b1 000027a7: PUSH1 0xa0 000027a9: DUP4 000027aa: ADD 000027ab: DUP6 000027ac: DUP8 000027ad: PUSH2 0x267b 000027b0: JUMP 000027b1: JUMPDEST 000027b2: DUP3 000027b3: DUP2 000027b4: SUB 000027b5: PUSH1 0x80 000027b7: DUP5 000027b8: ADD 000027b9: MSTORE 000027ba: PUSH2 0x27c3 000027bd: DUP2 000027be: DUP6 000027bf: PUSH2 0x26c4 000027c2: JUMP 000027c3: JUMPDEST 000027c4: SWAP10 000027c5: SWAP9 000027c6: POP 000027c7: POP 000027c8: POP 000027c9: POP 000027ca: POP 000027cb: POP 000027cc: POP 000027cd: POP 000027ce: POP 000027cf: JUMP 000027d0: JUMPDEST 000027d1: DUP5 000027d2: DUP2 000027d3: MSTORE 000027d4: PUSH1 0x60 000027d6: PUSH1 0x20 000027d8: DUP3 000027d9: ADD 000027da: MSTORE 000027db: PUSH1 0x00 000027dd: PUSH2 0x27ea 000027e0: PUSH1 0x60 000027e2: DUP4 000027e3: ADD 000027e4: DUP6 000027e5: DUP8 000027e6: PUSH2 0x267b 000027e9: JUMP 000027ea: JUMPDEST 000027eb: DUP3 000027ec: DUP2 000027ed: SUB 000027ee: PUSH1 0x40 000027f0: DUP5 000027f1: ADD 000027f2: MSTORE 000027f3: PUSH2 0x27fc 000027f6: DUP2 000027f7: DUP6 000027f8: PUSH2 0x26c4 000027fb: JUMP 000027fc: JUMPDEST 000027fd: SWAP8 000027fe: SWAP7 000027ff: POP 00002800: POP 00002801: POP 00002802: POP 00002803: POP 00002804: POP 00002805: POP 00002806: JUMP 00002807: JUMPDEST 00002808: PUSH1 0x00 0000280a: DUP8 0000280b: CALLDATALOAD 0000280c: PUSH2 0x2814 0000280f: DUP2 00002810: PUSH2 0x21cb 00002813: JUMP 00002814: JUMPDEST 00002815: PUSH1 0x01 00002817: PUSH1 0x01 00002819: PUSH1 0xa0 0000281b: SHL 0000281c: SUB 0000281d: DUP2 0000281e: AND 0000281f: DUP4 00002820: MSTORE 00002821: POP 00002822: PUSH1 0x01 00002824: PUSH1 0x01 00002826: PUSH1 0xa0 00002828: SHL 00002829: SUB 0000282a: DUP8 0000282b: AND 0000282c: PUSH1 0x20 0000282e: DUP4 0000282f: ADD 00002830: MSTORE 00002831: PUSH1 0x01 00002833: PUSH1 0x01 00002835: PUSH1 0xa0 00002837: SHL 00002838: SUB 00002839: DUP7 0000283a: AND 0000283b: PUSH1 0x40 0000283d: DUP4 0000283e: ADD 0000283f: MSTORE 00002840: DUP5 00002841: PUSH1 0x60 00002843: DUP4 00002844: ADD 00002845: MSTORE 00002846: PUSH1 0xa0 00002848: PUSH1 0x80 0000284a: DUP4 0000284b: ADD 0000284c: MSTORE 0000284d: PUSH2 0x285a 00002850: PUSH1 0xa0 00002852: DUP4 00002853: ADD 00002854: DUP5 00002855: DUP7 00002856: PUSH2 0x267b 00002859: JUMP 0000285a: JUMPDEST 0000285b: SWAP9 0000285c: SWAP8 0000285d: POP 0000285e: POP 0000285f: POP 00002860: POP 00002861: POP 00002862: POP 00002863: POP 00002864: POP 00002865: JUMP 00002866: JUMPDEST 00002867: DUP4 00002868: DUP2 00002869: MSTORE 0000286a: PUSH1 0x40 0000286c: PUSH1 0x20 0000286e: DUP3 0000286f: ADD 00002870: MSTORE 00002871: PUSH1 0x00 00002873: PUSH2 0x1fad 00002876: PUSH1 0x40 00002878: DUP4 00002879: ADD 0000287a: DUP5 0000287b: DUP7 0000287c: PUSH2 0x267b 0000287f: JUMP 00002880: JUMPDEST 00002881: PUSH1 0x00 00002883: PUSH1 0x20 00002885: DUP3 00002886: DUP5 00002887: SUB 00002888: SLT 00002889: ISZERO 0000288a: PUSH2 0x2892 0000288d: JUMPI 0000288e: PUSH1 0x00 00002890: DUP1 00002891: REVERT 00002892: JUMPDEST 00002893: POP 00002894: MLOAD 00002895: SWAP2 00002896: SWAP1 00002897: POP 00002898: JUMP 00002899: JUMPDEST 0000289a: DUP2 0000289b: DUP2 0000289c: SUB 0000289d: DUP2 0000289e: DUP2 0000289f: GT 000028a0: ISZERO 000028a1: PUSH2 0x071d 000028a4: JUMPI 000028a5: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 000028c6: PUSH1 0x00 000028c8: MSTORE 000028c9: PUSH1 0x11 000028cb: PUSH1 0x04 000028cd: MSTORE 000028ce: PUSH1 0x24 000028d0: PUSH1 0x00 000028d2: REVERT 000028d3: JUMPDEST 000028d4: PUSH1 0x60 000028d6: DUP2 000028d7: MSTORE 000028d8: PUSH1 0x00 000028da: PUSH2 0x28e7 000028dd: PUSH1 0x60 000028df: DUP4 000028e0: ADD 000028e1: DUP8 000028e2: DUP10 000028e3: PUSH2 0x267b 000028e6: JUMP 000028e7: JUMPDEST 000028e8: DUP6 000028e9: PUSH1 0x20 000028eb: DUP5 000028ec: ADD 000028ed: MSTORE 000028ee: DUP3 000028ef: DUP2 000028f0: SUB 000028f1: PUSH1 0x40 000028f3: DUP5 000028f4: ADD 000028f5: MSTORE 000028f6: PUSH2 0x285a 000028f9: DUP2 000028fa: DUP6 000028fb: DUP8 000028fc: PUSH2 0x267b 000028ff: JUMP 00002900: JUMPDEST 00002901: PUSH1 0x00 00002903: PUSH1 0x20 00002905: DUP3 00002906: DUP5 00002907: SUB 00002908: SLT 00002909: ISZERO 0000290a: PUSH2 0x2912 0000290d: JUMPI 0000290e: PUSH1 0x00 00002910: DUP1 00002911: REVERT 00002912: JUMPDEST 00002913: DUP2 00002914: MLOAD 00002915: PUSH2 0x1ffc 00002918: DUP2 00002919: PUSH2 0x2650 0000291c: JUMP 0000291d: JUMPDEST 0000291e: PUSH1 0x00 00002920: DUP3 00002921: MLOAD 00002922: PUSH2 0x292f 00002925: DUP2 00002926: DUP5 00002927: PUSH1 0x20 00002929: DUP8 0000292a: ADD 0000292b: PUSH2 0x24dc 0000292e: JUMP 0000292f: JUMPDEST 00002930: SWAP2 00002931: SWAP1 00002932: SWAP2 00002933: ADD 00002934: SWAP3 00002935: SWAP2 00002936: POP 00002937: POP 00002938: JUMP 00002939: INVALID 0000293a: LOG2 0000293b: PUSH5 0x6970667358 00002941: UNKNOWN(0x22) 00002942: SLT 00002943: KECCAK256 00002944: UNKNOWN(0xB3) 00002945: UNKNOWN(0xFC) 00002946: DUP5 00002947: PUSH10 0x809de480e3d0239eb5a9 00002952: UNKNOWN(0xEE) 00002953: GT 00002954: SWAP10 00002955: UNKNOWN(0x28) 00002956: DIV 00002957: GASLIMIT 00002958: UNKNOWN(0xBC) 00002959: RETURNDATASIZE 0000295a: ADD 0000295b: UNKNOWN(0xB6) 0000295c: UNKNOWN(0xFC) 0000295d: GASPRICE 0000295e: SWAP6 0000295f: UNKNOWN(0xBA) 00002960: UNKNOWN(0x24) 00002961: UNKNOWN(0xBB) 00002962: UNKNOWN(0x2D) 00002963: PUSH31
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| critical | upgradeability | detector | Untrusted DELEGATECALL target reachable | 70 | no | no |
viewtrace_id: 0xfb1e59bdd2dc7ccddd3f3adc8bbe6852161e073528db522065f3a9f39eef0e1a
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0xfb1e59bdd2dc7ccddd3f3adc8bbe6852161e073528db522065f3a9f39eef0e1a",
"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": "0xd9caed12",
"selector": "0xd9caed12",
"calldata_variants": [
"0xd9caed12",
"0xd9caed120000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe609055e",
"selector": "0xe609055e",
"calldata_variants": [
"0xe609055e",
"0xe609055e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe63ab1e9",
"selector": "0xe63ab1e9",
"calldata_variants": [
"0xe63ab1e9",
"0xe63ab1e90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xeab103df",
"selector": "0xeab103df",
"calldata_variants": [
"0xeab103df",
"0xeab103df0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xad3cb1cc",
"selector": "0xad3cb1cc",
"calldata_variants": [
"0xad3cb1cc",
"0xad3cb1cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc0c53b8b",
"selector": "0xc0c53b8b",
"calldata_variants": [
"0xc0c53b8b",
"0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd936547e",
"selector": "0xd936547e",
"calldata_variants": [
"0xd936547e",
"0xd936547e0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 8041,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [],
"delegatecall_count": 1,
"untrusted_delegatecall_count": 1
}
|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0xb39e4490dad8ed01352b40dcd45c85f71b140a47368de84c661119c5b6d21fda
call_targets:
0x37555f2e573b7d84fe0a09365d3a443509e0f645
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xb39e4490dad8ed01352b40dcd45c85f71b140a47368de84c661119c5b6d21fda",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x37555f2e573b7d84fe0a09365d3a443509e0f645"
],
"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": "0xd9caed12",
"selector": "0xd9caed12",
"calldata_variants": [
"0xd9caed12",
"0xd9caed120000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe609055e",
"selector": "0xe609055e",
"calldata_variants": [
"0xe609055e",
"0xe609055e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe63ab1e9",
"selector": "0xe63ab1e9",
"calldata_variants": [
"0xe63ab1e9",
"0xe63ab1e90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xeab103df",
"selector": "0xeab103df",
"calldata_variants": [
"0xeab103df",
"0xeab103df0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xad3cb1cc",
"selector": "0xad3cb1cc",
"calldata_variants": [
"0xad3cb1cc",
"0xad3cb1cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc0c53b8b",
"selector": "0xc0c53b8b",
"calldata_variants": [
"0xc0c53b8b",
"0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd936547e",
"selector": "0xd936547e",
"calldata_variants": [
"0xd936547e",
"0xd936547e0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2844,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3640,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 8415,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 3,
"guards_detected": [],
"untrusted_call_count": 3
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0xb39e4490dad8ed01352b40dcd45c85f71b140a47368de84c661119c5b6d21fda
call_targets:
0x37555f2e573b7d84fe0a09365d3a443509e0f645
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xb39e4490dad8ed01352b40dcd45c85f71b140a47368de84c661119c5b6d21fda",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x37555f2e573b7d84fe0a09365d3a443509e0f645"
],
"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": "0xd9caed12",
"selector": "0xd9caed12",
"calldata_variants": [
"0xd9caed12",
"0xd9caed120000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe609055e",
"selector": "0xe609055e",
"calldata_variants": [
"0xe609055e",
"0xe609055e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe63ab1e9",
"selector": "0xe63ab1e9",
"calldata_variants": [
"0xe63ab1e9",
"0xe63ab1e90000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xeab103df",
"selector": "0xeab103df",
"calldata_variants": [
"0xeab103df",
"0xeab103df0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xad3cb1cc",
"selector": "0xad3cb1cc",
"calldata_variants": [
"0xad3cb1cc",
"0xad3cb1cc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xc0c53b8b",
"selector": "0xc0c53b8b",
"calldata_variants": [
"0xc0c53b8b",
"0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd936547e",
"selector": "0xd936547e",
"calldata_variants": [
"0xd936547e",
"0xd936547e0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2844,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3640,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 8415,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 3,
"guards_detected": []
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 1
}
|
| low | access_control | codex | Old TSS retains PAUSER_ROLE after TSS rotation | 65 | no | — |
viewevidence_json{
"evidence": "initialize grants PAUSER_ROLE to tssAddress, but updateTSSAddress only revokes WITHDRAWER_ROLE and WHITELISTER_ROLE, leaving PAUSER_ROLE untouched.",
"locations": [
"contracts/contracts/evm/ERC20Custody.sol:61",
"contracts/contracts/evm/ERC20Custody.sol:87"
],
"recommendation": "In updateTSSAddress, revoke PAUSER_ROLE from the old tssAddress and (if intended) grant PAUSER_ROLE to the new TSS. Consider explicitly documenting which roles should move with TSS rotation.",
"exploit_scenario": "When the admin rotates the TSS (e.g., after compromise), the old TSS keeps PAUSER_ROLE and can still pause/unpause the contract. A compromised former TSS can repeatedly pause to disrupt withdrawals/deposits, causing a denial-of-service until the admin intervenes."
}
|
| low | upgradeability | codex | Implementation contract not locked against initialization | 65 | no | — |
viewevidence_json{
"evidence": "ERC20Custody is upgradeable and exposes initialize, but has no constructor calling _disableInitializers to lock the implementation.",
"locations": [
"contracts/contracts/evm/ERC20Custody.sol:18",
"contracts/contracts/evm/ERC20Custody.sol:46"
],
"recommendation": "Add a constructor that calls `_disableInitializers()` (with the appropriate OZ unsafe-allow annotation) to lock the implementation contract.",
"exploit_scenario": "Because the implementation lacks a constructor that disables initializers, any account can initialize the implementation contract directly and gain admin roles in its storage. If assets are accidentally sent to the implementation address, the attacker can withdraw/whitelist using those roles (or otherwise abuse admin-only functions on the implementation)."
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 5
}
|